waybetter 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/bin/waybetter.mjs +2 -5
- package/cli/buildenv.mjs +1 -1
- package/cli/release.mjs +11 -18
- package/cli/releasecheck.mjs +15 -0
- package/cli/remote.mjs +4 -4
- package/cli/store.mjs +80 -28
- package/cli/strings.mjs +2 -0
- package/dist/runtime/stringPackHook.js +2 -2
- package/dist/runtime/stringPackHook.js.map +1 -1
- package/dist/runtime/stringPackTranslate.d.ts +3 -1
- package/dist/runtime/stringPackTranslate.js +6 -3
- package/dist/runtime/stringPackTranslate.js.map +1 -1
- package/dist/runtime/stringPacks.d.ts +53 -5
- package/dist/runtime/stringPacks.js +161 -25
- package/dist/runtime/stringPacks.js.map +1 -1
- package/dist/runtime/themeBar.d.ts +28 -0
- package/dist/runtime/themeBar.js +82 -0
- package/dist/runtime/themeBar.js.map +1 -0
- package/dist/runtime/themeComponents.js +16 -3
- package/dist/runtime/themeComponents.js.map +1 -1
- package/dist/runtime/themeDecor.js +3 -1
- package/dist/runtime/themeDecor.js.map +1 -1
- package/dist/runtime/themeDerive.d.ts +69 -0
- package/dist/runtime/themeDerive.js +117 -0
- package/dist/runtime/themeDerive.js.map +1 -0
- package/dist/runtime/themeDoctor.d.ts +44 -3
- package/dist/runtime/themeDoctor.js +86 -25
- package/dist/runtime/themeDoctor.js.map +1 -1
- package/dist/runtime/themeGuards.d.ts +60 -0
- package/dist/runtime/themeGuards.js +235 -0
- package/dist/runtime/themeGuards.js.map +1 -0
- package/dist/runtime/themeIcons.d.ts +1 -1
- package/dist/runtime/themeIcons.js +13 -5
- package/dist/runtime/themeIcons.js.map +1 -1
- package/dist/runtime/themeInk.d.ts +37 -0
- package/dist/runtime/themeInk.js +111 -0
- package/dist/runtime/themeInk.js.map +1 -0
- package/dist/runtime/themeInvariants.d.ts +39 -0
- package/dist/runtime/themeInvariants.js +273 -0
- package/dist/runtime/themeInvariants.js.map +1 -0
- package/dist/runtime/themeRuntime.d.ts +15 -1
- package/dist/runtime/themeRuntime.js +78 -5
- package/dist/runtime/themeRuntime.js.map +1 -1
- package/dist/runtime/themeSpec.d.ts +5 -1
- package/dist/runtime/themeSpec.js +9 -13
- package/dist/runtime/themeSpec.js.map +1 -1
- package/dist/shell/InstallDialog.js +14 -8
- package/dist/shell/InstallDialog.js.map +1 -1
- package/dist/shell/StoreView.d.ts +12 -0
- package/dist/shell/StoreView.js +9 -4
- package/dist/shell/StoreView.js.map +1 -1
- package/dist/shell/frame/AppMenu.d.ts +26 -3
- package/dist/shell/frame/AppMenu.js +106 -27
- package/dist/shell/frame/AppMenu.js.map +1 -1
- package/dist/shell/frame/FindBar.js +1 -1
- package/dist/shell/frame/FindBar.js.map +1 -1
- package/dist/shell/frame/Shell.d.ts +1 -0
- package/dist/shell/frame/Shell.js +10 -2
- package/dist/shell/frame/Shell.js.map +1 -1
- package/dist/shell/frame/Titlebar.d.ts +2 -1
- package/dist/shell/frame/Titlebar.js +5 -3
- package/dist/shell/frame/Titlebar.js.map +1 -1
- package/dist/shell/frame/WebPanel.js +4 -1
- package/dist/shell/frame/WebPanel.js.map +1 -1
- package/dist/shell/frame/accountSwitcher.css +10 -10
- package/dist/shell/frame/appMenu.css +19 -13
- package/dist/shell/frame/boot.js +2 -0
- package/dist/shell/frame/boot.js.map +1 -1
- package/dist/shell/frame/chromeTheme.d.ts +19 -1
- package/dist/shell/frame/chromeTheme.js +51 -14
- package/dist/shell/frame/chromeTheme.js.map +1 -1
- package/dist/shell/frame/deck.css +30 -30
- package/dist/shell/frame/edges.css +159 -0
- package/dist/shell/frame/index.d.ts +2 -2
- package/dist/shell/frame/index.js +1 -1
- package/dist/shell/frame/index.js.map +1 -1
- package/dist/shell/frame/mediaModel.d.ts +13 -0
- package/dist/shell/frame/mediaModel.js +14 -0
- package/dist/shell/frame/mediaModel.js.map +1 -1
- package/dist/shell/frame/menuMessages.en.json +43 -1
- package/dist/shell/frame/menuModel.d.ts +42 -0
- package/dist/shell/frame/menuModel.js +8 -0
- package/dist/shell/frame/menuModel.js.map +1 -1
- package/dist/shell/frame/nativeMenu.d.ts +5 -0
- package/dist/shell/frame/nativeMenu.js +178 -0
- package/dist/shell/frame/nativeMenu.js.map +1 -0
- package/dist/shell/frame/nativeMenuModel.d.ts +102 -0
- package/dist/shell/frame/nativeMenuModel.js +186 -0
- package/dist/shell/frame/nativeMenuModel.js.map +1 -0
- package/dist/shell/frame/paletteModel.js +3 -1
- package/dist/shell/frame/paletteModel.js.map +1 -1
- package/dist/shell/frame/paneTheme.css +1 -1
- package/dist/shell/frame/reportModel.d.ts +1 -1
- package/dist/shell/frame/reportModel.js +1 -1
- package/dist/shell/frame/reportModel.js.map +1 -1
- package/dist/shell/frame/shell.css +56 -51
- package/dist/shell/frame/state.d.ts +2 -0
- package/dist/shell/frame/state.js +3 -1
- package/dist/shell/frame/state.js.map +1 -1
- package/dist/shell/frame/themeStore.js +21 -6
- package/dist/shell/frame/themeStore.js.map +1 -1
- package/dist/shell/frame/workspaces.css +12 -12
- package/dist/shell/installController.d.ts +16 -1
- package/dist/shell/installController.js +31 -5
- package/dist/shell/installController.js.map +1 -1
- package/dist/shell/panel/Appearance.js +12 -3
- package/dist/shell/panel/Appearance.js.map +1 -1
- package/dist/shell/panel/Settings.d.ts +1 -1
- package/dist/shell/panel/Settings.js +4 -3
- package/dist/shell/panel/Settings.js.map +1 -1
- package/dist/shell/panel/StoreSection.d.ts +2 -1
- package/dist/shell/panel/StoreSection.js +31 -1
- package/dist/shell/panel/StoreSection.js.map +1 -1
- package/dist/shell/panel/StringPacks.d.ts +12 -3
- package/dist/shell/panel/StringPacks.js +33 -8
- package/dist/shell/panel/StringPacks.js.map +1 -1
- package/dist/shell/panel/backup.css +1 -1
- package/dist/shell/panel/builder.css +48 -40
- package/dist/shell/panel/make.css +8 -7
- package/dist/shell/panel/panel.css +401 -401
- package/dist/shell/panel/panelMessages.d.ts +41 -1
- package/dist/shell/panel/panelMessages.js +13 -1
- package/dist/shell/panel/panelMessages.js.map +1 -1
- package/dist/shell/panel/plugins.css +5 -5
- package/dist/shell/panel/strings.css +1 -1
- package/dist/shell/store.css +34 -14
- package/dist/shell/storeMessages.d.ts +24 -0
- package/dist/shell/storeMessages.js +24 -0
- package/dist/shell/storeMessages.js.map +1 -1
- package/dist/shell/storeModel.d.ts +31 -7
- package/dist/shell/storeModel.js +15 -2
- package/dist/shell/storeModel.js.map +1 -1
- package/dist/shell/stringPacksModel.js +7 -2
- package/dist/shell/stringPacksModel.js.map +1 -1
- package/icons.schema.json +9 -0
- package/locales/ar.json +109 -2
- package/locales/bg.json +109 -2
- package/locales/bn.json +109 -2
- package/locales/ca.json +109 -2
- package/locales/cs.json +109 -2
- package/locales/da.json +109 -2
- package/locales/de.json +109 -2
- package/locales/el.json +109 -2
- package/locales/en.json +108 -2
- package/locales/es.json +109 -2
- package/locales/eu.json +109 -2
- package/locales/fa.json +109 -2
- package/locales/fi.json +109 -2
- package/locales/fil.json +109 -2
- package/locales/fr.json +109 -2
- package/locales/ga.json +109 -2
- package/locales/gl.json +109 -2
- package/locales/gu.json +109 -2
- package/locales/ha.json +109 -2
- package/locales/he.json +109 -2
- package/locales/hi.json +109 -2
- package/locales/hr.json +109 -2
- package/locales/hu.json +110 -2
- package/locales/id.json +109 -2
- package/locales/ig.json +109 -2
- package/locales/it.json +109 -2
- package/locales/ja.json +109 -2
- package/locales/kn.json +109 -2
- package/locales/ko.json +109 -2
- package/locales/mr.json +109 -2
- package/locales/ms.json +109 -2
- package/locales/nb.json +109 -2
- package/locales/nl.json +109 -2
- package/locales/pl.json +109 -2
- package/locales/pt.json +109 -2
- package/locales/ro.json +109 -2
- package/locales/ru.json +109 -2
- package/locales/sk.json +109 -2
- package/locales/sr.json +109 -2
- package/locales/sv.json +109 -2
- package/locales/ta.json +109 -2
- package/locales/th.json +109 -2
- package/locales/tr.json +109 -2
- package/locales/uk.json +109 -2
- package/locales/ur.json +109 -2
- package/locales/vi.json +109 -2
- package/locales/yo.json +109 -2
- package/locales/zh-Hans.json +109 -2
- package/locales/zh-Hant.json +109 -2
- package/package.json +2 -3
- package/store-catalog.schema.json +18 -5
- package/theme.schema.json +9 -0
- package/windows/installer.nsi +22 -2
- package/cli/privacy.mjs +0 -768
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Appearance.js","sourceRoot":"","sources":["../../../../../../shell/src/panel/Appearance.tsx"],"names":[],"mappings":"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","sourcesContent":["// Appearance: the theme gallery (live previews rendered from each theme document), per-group\n// customization on top of the selected theme (fonts per role with the Google Fonts browser),\n// account and pane themes, downloaded fonts, import/export of theme JSON and Custom CSS. The theme\n// documents, the store and the miniature are the app's (`PanelSite.themes`).\nimport { useEffect, useRef, useState } from 'react';\nimport { THEME_SCHEMA_URL } from '../../../runtime/src/themeApi.ts';\nimport type { ThemeChoice } from '../../../runtime/src/themeChoice.ts';\nimport {\n FONT_CHOICES, MAX_IMAGE_CHARS, fontChoiceOf, googleFontsUsed, parseThemeJson, slug,\n type Background, type FontRole, type FontRoleName, type Pattern, type ThemeOverrides, type ThemeSpec,\n} from '../../../runtime/src/themeSpec.ts';\nimport { AccountAvatar, accountName, useProfiles } from '../frame/AccountSwitcher.tsx';\nimport { useT } from '../frame/hooks.ts';\nimport { formatDate, t, tx } from '../frame/i18n.ts';\nimport { ThemeDots } from '../frame/PaneTheme.tsx';\nimport { shell, type WebParams } from '../frame/state.ts';\nimport { assign } from '../frame/themeScopes.ts';\nimport { tabProfile } from '../profileModel.ts';\nimport { Button, ColorField, Row, Section, Segmented, Select, Slider, Toggle, useSettingsQuery, type Option } from './controls.tsx';\nimport { IconPackImport, IconPackReview } from './IconPackInstall.tsx';\nimport type { IconPack } from '../../../runtime/src/themeIcons.ts';\nimport { themeDoctor } from '../../../runtime/src/themeDoctor.ts';\nimport { bytesLabel, defaultWeights, loadCatalog, weightsLabel } from './fonts/catalog.ts';\nimport { FontRoles } from './fonts/FontRoles.tsx';\nimport { CustomCssEditor } from './Plugins.tsx';\nimport { panelSite, panelThemes, type Notify } from './site.ts';\nimport { useThemeState } from './themes.ts';\nimport './builder.css';\n\nconst getError = (error: unknown) => error instanceof Error ? error.message : String(error);\n\nconst CORNERS = [\n { value: 'square', label: 'wb.appearance.corners.square', radius: 0, button: 0 },\n { value: 'crisp', label: 'wb.appearance.corners.crisp', radius: 5, button: 5 },\n { value: 'soft', label: 'wb.appearance.corners.soft', radius: 12, button: 10 },\n { value: 'round', label: 'wb.appearance.corners.round', radius: 16, button: 9999 },\n] as const;\ntype BackgroundChoice = 'none' | 'glow' | Pattern | 'image';\nconst backgrounds = (): Array<Option<BackgroundChoice>> => [\n { value: 'none', label: t('wb.appearance.bg.none') }, { value: 'glow', label: t('wb.appearance.bg.glow') }, { value: 'dots', label: t('wb.appearance.bg.dots') }, { value: 'grid', label: t('wb.appearance.bg.grid') },\n { value: 'diagonal', label: t('wb.appearance.bg.diagonal') }, { value: 'scanlines', label: t('wb.appearance.bg.scanlines') }, { value: 'paper', label: t('wb.appearance.bg.paper') },\n { value: 'clouds', label: t('wb.appearance.bg.clouds') }, { value: 'image', label: t('wb.appearance.bg.image'), hint: t('wb.appearance.bg.imageHint') },\n];\n\nconst modeLabel = (theme: ThemeSpec) => theme.mode === 'auto' ? t('wb.appearance.mode.auto') : theme.mode === 'light' ? t('wb.appearance.mode.light') : t('wb.appearance.mode.dark');\nconst fontLabel = (theme: ThemeSpec) => {\n const family = theme.font.family;\n const choices = panelThemes().fontChoices ?? FONT_CHOICES;\n const choice = choices.find(item => item.id === fontChoiceOf(family, choices));\n return (choice?.key ? tx(choice.key, undefined, choice.label) : choice?.label) ?? family[0] ?? panelThemes().siteFont;\n};\n/** Built-in themes have translated descriptions (`theme.<id>.description` in the app's catalog); imported ones keep their own. */\nexport const themeDescription = (theme: ThemeSpec) => tx(`theme.${theme.id}.description`, undefined, theme.description);\nconst formatPercent = (value: number) => t('wb.appearance.percent', { value: value / 100 });\nconst hasOverrides = (choice: ThemeChoice) => !!choice.accent || Object.keys(choice.overrides).length > 0;\n\nfunction download(name: string, text: string) {\n const url = URL.createObjectURL(new Blob([text], { type: 'application/json' }));\n const anchor = document.createElement('a');\n anchor.href = url; anchor.download = name; anchor.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\n\nfunction backgroundFor(kind: BackgroundChoice, theme: ThemeSpec, image?: string): Background {\n const base = panelThemes().draftColors;\n const text = theme.colors?.text ?? '#8b98a5';\n const light = theme.mode === 'light';\n switch (kind) {\n case 'none': return { kind: 'none' };\n case 'glow': return { kind: 'gradient', from: theme.colors?.page ?? theme.colors?.bg ?? base.bg, to: theme.colors?.page ?? theme.colors?.bg ?? base.bg, angle: 180, glow: theme.colors?.accent ?? base.accent };\n case 'image': return { kind: 'image', url: image ?? '', fit: 'cover', dim: light ? 0.55 : 0.6 };\n case 'clouds': return { kind: 'pattern', pattern: 'clouds', ink: light ? '#ffffff' : text, opacity: light ? 0.55 : 0.07, size: 220 };\n case 'dots': return { kind: 'pattern', pattern: 'dots', ink: text, opacity: 0.16, size: 18 };\n case 'grid': return { kind: 'pattern', pattern: 'grid', ink: text, opacity: 0.06, size: 28 };\n case 'diagonal': return { kind: 'pattern', pattern: 'diagonal', ink: text, opacity: 0.06, size: 10 };\n case 'scanlines': return { kind: 'pattern', pattern: 'scanlines', ink: theme.colors?.accent ?? text, opacity: 0.05, size: 4 };\n case 'paper': return { kind: 'pattern', pattern: 'paper', ink: light ? '#7a6a50' : text, opacity: 0.1, size: 180 };\n }\n}\nconst backgroundChoice = (background: Background): BackgroundChoice =>\n background.kind === 'none' ? 'none' : background.kind === 'gradient' ? 'glow' : background.kind === 'image' ? 'image' : background.pattern;\n\n/** Asks the panel to show another section (the Theme Builder). */\nconst openSection = (section: string) => window.dispatchEvent(new CustomEvent('bt-panel-section', { detail: section }));\n\nexport function Appearance({ notify }: { notify: Notify }) {\n const t = useT();\n const themes = panelThemes();\n const { allThemes, installFont, missingFonts, setChoice, setScopes } = themes.store;\n const ThemePreview = themes.Preview;\n const { ready, choice, scopes } = useThemeState();\n const [importing, setImporting] = useState(false);\n const [asking, setAsking] = useState<{ theme: ThemeSpec; families: string[] } | null>(null);\n const [packReview, setPackReview] = useState<{ pack: IconPack; warnings: string[]; bytes: number } | null>(null);\n const query = useSettingsQuery();\n\n if (!ready) return null;\n const effective = themes.catalog.resolve(choice);\n const base = themes.catalog.base(choice);\n const all = allThemes(choice);\n const siteTheme = themes.catalog.defaultChoice.preset;\n const suffix = themes.fileSuffix ?? '.theme.json';\n\n const update = (next: ThemeChoice, commit = true) => setChoice(next, commit).catch(error => notify(getError(error), true));\n const override = (patch: ThemeOverrides, commit = true) => {\n const overrides: ThemeOverrides = { ...choice.overrides };\n for (const [key, value] of Object.entries(patch) as Array<[keyof ThemeOverrides, unknown]>) {\n (overrides as Record<string, unknown>)[key] = key === 'background' ? value : { ...(choice.overrides[key] as object | undefined), ...(value as object) };\n }\n return update({ ...choice, overrides }, commit);\n };\n const setRole = (role: FontRoleName, next: FontRole, commit = true) =>\n override({ font: { roles: { ...(choice.overrides.font?.roles ?? {}), [role]: next } } }, commit);\n\n function select(id: string) {\n if (id === choice.preset) return;\n // Customizations belong to the theme they were made on; switching starts clean.\n void update({ ...choice, preset: id, overrides: {}, accent: null });\n }\n function remove(theme: ThemeSpec) {\n const themes = choice.themes.filter(item => item.id !== theme.id);\n void update({ ...choice, themes, ...(choice.preset === theme.id ? { preset: siteTheme, overrides: {}, accent: null } : {}) }).then(() => notify(t('wb.appearance.removedTheme', { name: theme.name })));\n }\n function add(theme: ThemeSpec, message: string) {\n let id = theme.id;\n for (let n = 2; all.some(item => item.id === id); n++) id = `${theme.id.slice(0, 36)}-${n}`;\n void update({ ...choice, themes: [...choice.themes, { ...theme, id }], preset: id, overrides: {}, accent: null }).then(() => notify(message));\n }\n function exportTheme() {\n const custom = hasOverrides(choice);\n const doc: ThemeSpec = { ...effective, ...(custom ? { id: slug(`${effective.name} custom`), name: t('wb.appearance.customName', { name: effective.name }) } : {}) };\n // `$schema` lets editors validate and complete the file; imports ignore it.\n download(`${doc.id}${suffix}`, JSON.stringify({ $schema: THEME_SCHEMA_URL, ...doc }, null, 2));\n }\n function saveAsNew() {\n const name = t('wb.appearance.savedName', { name: base.name });\n add({ ...effective, id: slug(`${base.name} custom`), name, author: t('wb.appearance.you'), description: t('wb.appearance.basedOn', { name: base.name }) }, t('wb.appearance.saved', { name }));\n }\n /** An imported theme that names Google fonts asks before anything is downloaded. */\n function imported(theme: ThemeSpec, warnings: string[]) {\n setImporting(false);\n add(theme, `${t('wb.appearance.imported', { name: theme.name })}${warnings.length ? ` ${warnings.join(' ')}` : ''}`);\n const families = missingFonts(theme);\n if (families.length) setAsking({ theme, families });\n }\n async function downloadFonts(families: string[]) {\n setAsking(null);\n const catalog = await loadCatalog();\n for (const family of families) {\n const font = catalog.find(item => item.family === family);\n try {\n await installFont(family, font ? defaultWeights(font) : { kind: 'list', values: [400, 700] });\n notify(t('wb.appearance.downloadedFont', { family }));\n } catch (error) { notify(`${family}: ${getError(error)}`, true); }\n }\n }\n\n const cornerValue = CORNERS.find(corner => corner.radius === effective.shape.radius && corner.button === effective.shape.button)?.value ?? null;\n const timeline = effective.layout.cards ? 'cards' : effective.layout.frame ? 'framed' : 'flat';\n\n async function pickImage(file: File | undefined) {\n if (!file) return;\n if (!/^image\\/(png|jpeg|webp|gif|avif)$/.test(file.type)) { notify(t('wb.appearance.imageType'), true); return; }\n const url = await new Promise<string>((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(String(reader.result)); reader.onerror = () => reject(reader.error); reader.readAsDataURL(file); });\n if (url.length > MAX_IMAGE_CHARS) { notify(t('wb.appearance.imageTooLarge'), true); return; }\n void override({ background: backgroundFor('image', effective, url) });\n }\n\n const searching = !!query;\n return <>\n {!searching && <Section title={t('wb.appearance.theme')} id=\"themes\" hint={t('wb.appearance.themeHint')}\n action={<div className=\"bt-inline\">\n <Button size=\"sm\" tone=\"ghost\" onClick={() => setImporting(!importing)} icon={<Glyph d=\"M8 2v8m0 0L5 7m3 3 3-3M3 13h10\"/>}>{t('wb.common.import')}</Button>\n <Button size=\"sm\" tone=\"ghost\" onClick={exportTheme} icon={<Glyph d=\"M8 11V3m0 0L5 6m3-3 3 3M3 13h10\"/>}>{t('wb.common.export')}</Button>\n <Button size=\"sm\" tone=\"primary\" onClick={() => openSection('builder')} icon={<Glyph d=\"M3 13l.6-2.6L10.5 3.5l2 2-6.9 6.9zM9 5l2 2\"/>}>{t('wb.panel.section.builder')}</Button>\n </div>}>\n {importing && <ImportPanel onCancel={() => setImporting(false)} onImport={imported}/>}\n {asking && <div className=\"bt-import wb-ask\" role=\"alertdialog\" aria-label={t('wb.appearance.askFonts')}>\n <div className=\"bt-import-drop\">\n <strong>{t('wb.appearance.askFontsTitle', { name: asking.theme.name, fonts: asking.families.join(', ') })}</strong>\n <p>{t('wb.appearance.askFontsText', { count: asking.families.length })}</p>\n <div className=\"bt-inline\"><Button size=\"sm\" tone=\"primary\" onClick={() => void downloadFonts(asking.families)}>{t('wb.panel.updates.download')}</Button><Button size=\"sm\" tone=\"ghost\" onClick={() => setAsking(null)}>{t('wb.common.notNow')}</Button></div>\n </div>\n </div>}\n <div className=\"bt-gallery\" role=\"radiogroup\" aria-label={t('wb.appearance.theme')}>\n {all.map(theme => {\n const on = theme.id === choice.preset;\n const isImported = choice.themes.some(item => item.id === theme.id);\n return <div key={theme.id} className={`bt-theme ${on ? 'is-on' : ''}`}>\n <button type=\"button\" role=\"radio\" aria-checked={on} className=\"bt-theme-hit\" onClick={() => select(theme.id)} aria-label={`${theme.name}. ${themeDescription(theme)}`}>\n <ThemePreview theme={on ? effective : theme}/>\n <span className=\"bt-theme-info\">\n <span className=\"bt-theme-title\"><strong>{theme.name}</strong>{on && <span className=\"bt-theme-check\" aria-hidden=\"true\"><Glyph d=\"m4 8.5 2.5 2.5L12 5.5\"/></span>}</span>\n <small>{themeDescription(theme)}</small>\n <span className=\"bt-theme-tags\"><em>{modeLabel(theme)}</em><em>{fontLabel(theme)}</em>{theme.layout.cards && <em>{t('wb.appearance.timeline.cards')}</em>}{googleFontsUsed(theme).length > 0 && <em>Google Fonts</em>}{isImported && <em className=\"is-accent\">{t('wb.appearance.yours')}</em>}{theme.css && <em>CSS</em>}</span>\n </span>\n </button>\n {isImported && <button type=\"button\" className=\"bt-theme-remove\" aria-label={t('wb.appearance.removeNamed', { name: theme.name })} title={t('wb.appearance.removeTheme')} onClick={() => remove(theme)}><Glyph d=\"m4.5 4.5 7 7m0-7-7 7\"/></button>}\n </div>;\n })}\n </div>\n </Section>}\n\n <Section title={searching ? t('wb.appearance.theme') : t('wb.appearance.customize', { name: base.name })} id=\"customize\"\n hint={searching ? undefined : t('wb.appearance.customizeHint')}\n action={!searching && hasOverrides(choice) ? <div className=\"bt-inline\">\n <Button size=\"sm\" tone=\"ghost\" onClick={() => void update({ ...choice, overrides: {}, accent: null })}>{t('wb.common.reset')}</Button>\n <Button size=\"sm\" onClick={saveAsNew}>{t('wb.appearance.saveAsTheme')}</Button>\n </div> : undefined}>\n <Row label={t('wb.appearance.accent')} hint={t('wb.appearance.accentHint')} keywords=\"color colour highlight link\" wide>\n <ColorField label={t('wb.appearance.accentColor')} value={choice.accent} swatches={[...themes.accents]} autoLabel={t('wb.appearance.theme')} onChange={accent => void update({ ...choice, accent })}/>\n </Row>\n {themes.iconPacks?.length ? <Row label={t('wb.appearance.icons')} hint={t('wb.appearance.iconsHint')} keywords=\"icon pack glyphs symbols pixel import\" wide>\n <div className=\"wb-pack-row\"><div className=\"bt-inline\">\n <Select label={t('wb.appearance.icons')} value={choice.icons ?? 'theme'} width={220}\n onChange={icons => void update({ ...choice, icons: icons === 'theme' ? undefined : icons })}\n options={[{ value: 'theme', label: t('wb.appearance.icons.theme') }, { value: 'site', label: t('wb.appearance.icons.site') }, ...themes.iconPacks.filter(pack => !choice.packs?.some(item => item.id === pack.id)).map(pack => ({ value: pack.id, label: pack.name })), ...(choice.packs ?? []).map(pack => ({ value: pack.id, label: pack.name }))]}/>\n <IconPackImport onError={message => notify(message, true)} onParsed={(pack, warnings, bytes) => setPackReview({ pack, warnings, bytes })}/>\n </div>\n {choice.packs?.length ? <div className=\"bt-inline wb-pack-list\" aria-label={t('wb.appearance.icons.imported')}>{choice.packs.map(pack => <Button key={pack.id} size=\"sm\" tone=\"ghost\" onClick={() => void update({ ...choice, packs: choice.packs!.filter(item => item.id !== pack.id), ...(choice.icons === pack.id ? { icons: undefined } : {}) }).then(() => notify(t('wb.appearance.icons.removed', { name: pack.name })))}>{t('wb.appearance.icons.remove', { name: pack.name })}</Button>)}</div> : null}\n {packReview && <IconPackReview {...packReview} replaces={!!choice.packs?.some(item => item.id === packReview.pack.id)} onCancel={() => setPackReview(null)}\n onInstall={() => { const { pack } = packReview; setPackReview(null); void update({ ...choice, packs: [...(choice.packs ?? []).filter(item => item.id !== pack.id), pack], icons: pack.id }).then(() => notify(t('wb.appearance.icons.installed', { name: pack.name }))); }}/>}</div>\n </Row> : null}\n <Row label={t('wb.appearance.fonts')} hint={t('wb.appearance.fontsHint')}\n keywords=\"typeface typography family font google fonts post text heading numbers code interface window dialogs\" wide>\n <FontRoles font={effective.font} onRole={setRole} compact/>\n </Row>\n <Row label={t('wb.appearance.textSize')} hint={t('wb.appearance.textSizeHint')} keywords=\"font scale bigger smaller zoom\">\n <Slider label={t('wb.appearance.textSize')} min={85} max={120} value={Math.round(effective.font.scale * 100)} format={v => formatPercent(v)}\n onChange={v => void override({ font: { scale: v / 100 } }, false)} onCommit={v => void override({ font: { scale: v / 100 } })}/>\n </Row>\n <Row label={t('wb.appearance.bold')} hint={t('wb.appearance.boldHint')} keywords=\"font weight heavy\">\n <Segmented label={t('wb.appearance.bold')} size=\"sm\" value={effective.font.bold >= 750 ? 800 : effective.font.bold >= 675 ? 700 : 600}\n onChange={bold => void override({ font: { bold } })} options={[{ value: 600, label: t('wb.appearance.bold.medium') }, { value: 700, label: t('wb.appearance.bold.bold') }, { value: 800, label: t('wb.appearance.bold.heavy') }]}/>\n </Row>\n <Row label={t('wb.appearance.corners')} hint={t('wb.appearance.cornersHint')} keywords=\"radius rounded square shape\">\n <Segmented label={t('wb.appearance.corners')} size=\"sm\" value={cornerValue} onChange={value => { const corner = CORNERS.find(item => item.value === value)!; void override({ shape: { radius: corner.radius, button: corner.button } }); }}\n options={CORNERS.map(corner => ({ value: corner.value, label: t(corner.label) }))}/>\n </Row>\n <Row label={t('wb.appearance.avatars')} keywords=\"profile picture shape\">\n <Segmented label={t('wb.appearance.avatars')} size=\"sm\" value={effective.shape.avatar} onChange={avatar => void override({ shape: { avatar } })}\n options={[{ value: 'circle', label: t('wb.appearance.avatars.circle') }, { value: 'rounded', label: t('wb.appearance.avatars.rounded') }, { value: 'square', label: t('wb.appearance.corners.square') }]}/>\n </Row>\n <Row label={t('wb.appearance.density')} hint={t('wb.appearance.densityHint')} keywords=\"compact spacing padding\">\n <Segmented label={t('wb.appearance.density')} size=\"sm\" value={effective.layout.density} onChange={density => void override({ layout: { density } })}\n options={[{ value: 'compact', label: t('wb.appearance.density.compact') }, { value: 'default', label: t('wb.appearance.density.default') }, { value: 'comfortable', label: t('wb.appearance.density.roomy') }]}/>\n </Row>\n <Row label={t('wb.appearance.timeline')} hint={t('wb.appearance.timelineHint')} keywords=\"cards layout frame\">\n <Segmented label={t('wb.appearance.timelineStyle')} size=\"sm\" value={timeline} onChange={value => void override({ layout: { cards: value === 'cards', frame: value === 'framed' } })}\n options={[{ value: 'flat', label: t('wb.appearance.timeline.flat') }, { value: 'framed', label: t('wb.appearance.timeline.framed') }, { value: 'cards', label: t('wb.appearance.timeline.cards') }]}/>\n </Row>\n <Row label={t('wb.appearance.timelineWidth')} keywords=\"column layout wide narrow\">\n <Slider label={t('wb.appearance.timelineWidth')} min={520} max={820} step={10} value={effective.layout.column} format={v => t('wb.appearance.px', { value: v })}\n onChange={column => void override({ layout: { column } }, false)} onCommit={column => void override({ layout: { column } })}/>\n </Row>\n <Row label={t('wb.appearance.sidebarWidth')} keywords=\"column layout trends\">\n <Slider label={t('wb.appearance.sidebarWidth')} min={290} max={400} step={10} value={effective.layout.sidebar} format={v => t('wb.appearance.px', { value: v })}\n onChange={sidebar => void override({ layout: { sidebar } }, false)} onCommit={sidebar => void override({ layout: { sidebar } })}/>\n </Row>\n <Row label={t('wb.appearance.background')} hint={t('wb.appearance.backgroundHint')} keywords=\"wallpaper pattern image photo canvas\">\n <div className=\"bt-inline\">\n <Select label={t('wb.appearance.background')} value={backgroundChoice(effective.background)} options={backgrounds()} width={170}\n onChange={kind => { if (kind === 'image') document.getElementById('bt-bg-file')?.click(); else void override({ background: backgroundFor(kind, effective) }); }}/>\n <input id=\"bt-bg-file\" type=\"file\" hidden accept=\"image/png,image/jpeg,image/webp,image/gif,image/avif\" onChange={event => { void pickImage(event.target.files?.[0]); event.target.value = ''; }}/>\n </div>\n </Row>\n {effective.background.kind === 'image' && <Row label={t('wb.appearance.dim')} hint={t('wb.appearance.dimHint')} keywords=\"background image\">\n <Slider label={t('wb.appearance.dim')} min={35} max={95} value={Math.round(effective.background.dim * 100)} format={v => formatPercent(v)}\n onChange={v => void override({ background: { ...(effective.background as Extract<Background, { kind: 'image' }>), dim: v / 100 } }, false)}\n onCommit={v => void override({ background: { ...(effective.background as Extract<Background, { kind: 'image' }>), dim: v / 100 } })}/>\n </Row>}\n <Row label={t('wb.appearance.motion')} hint={t('wb.appearance.motionHint')} keywords=\"animation transition\">\n <Segmented label={t('wb.appearance.motion')} size=\"sm\" value={effective.effects.motion === 0 ? 0 : effective.effects.motion < 200 ? 140 : 260} onChange={motion => void override({ effects: { motion } })}\n options={[{ value: 0, label: t('wb.common.off') }, { value: 140, label: t('wb.appearance.motion.subtle') }, { value: 260, label: t('wb.appearance.motion.lively') }]}/>\n </Row>\n <Row label={t('wb.appearance.hover')} hint={t('wb.appearance.hoverHint')} keywords=\"effect highlight lift glow\">\n <Segmented label={t('wb.appearance.hoverEffect')} size=\"sm\" value={effective.effects.hover} onChange={hover => void override({ effects: { hover } })}\n options={[{ value: 'none', label: t('wb.appearance.hover.none') }, { value: 'tint', label: t('wb.appearance.hover.tint') }, { value: 'lift', label: t('wb.appearance.hover.lift') }, { value: 'glow', label: t('wb.appearance.bg.glow') }]}/>\n </Row>\n <Row label={t('wb.appearance.crt')} hint={t('wb.appearance.crtHint')} keywords=\"retro terminal effect\">\n <Toggle label={t('wb.appearance.crt')} checked={effective.effects.crt} onChange={crt => void override({ effects: { crt } })}/>\n </Row>\n <ThemeCssEditor key={choice.preset} css={effective.css} onApply={text => { void override({ css: { text } }); notify(t('wb.appearance.cssApplied', { name: base.name })); }}/>\n </Section>\n\n <Section title={t('wb.appearance.scopes')} id=\"theme-scopes\" hint={searching ? undefined : t('wb.appearance.scopesHint')}>\n <Row label={t('wb.appearance.chrome')} hint={t('wb.appearance.chromeHint')}\n keywords=\"chrome window tabs titlebar panel colors own style\">\n <Toggle label={t('wb.appearance.chrome')} checked={scopes.chrome === 'theme'} onChange={on => void setScopes({ ...scopes, chrome: on ? 'theme' : 'own' }).catch(error => notify(getError(error), true))}/>\n </Row>\n <AccountThemes notify={notify}/>\n <PaneThemes notify={notify}/>\n </Section>\n\n <DownloadedFonts notify={notify}/>\n {(panelSite().appearance?.extra ?? []).map((Extra, index) => <Extra key={index} notify={notify} openSection={id => window.dispatchEvent(new CustomEvent('bt-panel-section', { detail: id }))}/>)}\n <CustomCssEditor notify={notify}/>\n </>;\n}\n\n/** Theme choices for a scope row: follow (the level above) plus every theme with its swatch. */\nfunction scopeOptions(follow: string): Array<Option<string>> {\n // Called during render of components that use useT(), so the labels follow the language.\n return [{ value: '', label: follow }, ...panelThemes().store.allThemes().map(theme => ({ value: theme.id, label: theme.name, icon: <ThemeDots theme={theme}/> }))];\n}\n\nfunction AccountThemes({ notify }: { notify: Notify }) {\n const t = useT();\n const { setScopes, themeName, themeState } = panelThemes().store;\n const profiles = useProfiles();\n const { scopes, choice } = useThemeState();\n return <Row label={t('wb.panel.section.accounts')} hint={t('wb.appearance.accountsHint')} keywords=\"account profile per account theme login\" wide>\n <div className=\"wb-scope-list\">\n {profiles.profiles.map(profile => <div key={profile.id} className=\"wb-scope\">\n <span className=\"wb-scope-who\"><AccountAvatar profile={profile} size={26}/><span><b>{accountName(profile)}</b><small>{scopes.profiles[profile.id] ? t('wb.appearance.ownTheme') : t('wb.appearance.followsApp', { name: themeName(choice.preset) })}</small></span></span>\n <Select label={t('wb.appearance.themeFor', { name: accountName(profile) })} value={scopes.profiles[profile.id] ?? ''} width={210} options={scopeOptions(t('wb.appearance.followApp'))}\n onChange={id => void setScopes(assign(themeState().scopes, 'profiles', profile.id, id || null)).catch(error => notify(getError(error), true))}/>\n </div>)}\n </div>\n </Row>;\n}\n\n/** Open site panes, each with the theme it shows and where that comes from. */\nfunction PaneThemes({ notify }: { notify: Notify }) {\n const t = useT();\n const { setScopes, tabTheme, themeName, themeState } = panelThemes().store;\n const { scopes } = useThemeState();\n const [, refresh] = useState(0);\n useEffect(() => {\n const api = shell.api;\n if (!api) return;\n const bump = () => refresh(n => n + 1);\n const subs = [api.onDidAddPanel(bump), api.onDidRemovePanel(bump), api.onDidLayoutChange(bump)];\n return () => subs.forEach(sub => sub.dispose());\n }, []);\n const panes = (shell.api?.panels ?? []).filter(panel => (panel.params as WebParams | undefined)?.kind === 'web');\n return <Row label={t('wb.appearance.panes')} hint={panes.length ? t('wb.appearance.panesHint') : t('wb.appearance.panesEmpty')} keywords=\"pane split tab per pane theme\" wide>\n {panes.length > 0 && <div className=\"wb-scope-list\">\n {panes.map(panel => {\n const params = panel.params as WebParams;\n const profile = tabProfile(shell.profiles, params.profile);\n const current = tabTheme({ id: panel.id, profile: profile.id });\n return <div key={panel.id} className=\"wb-scope\">\n <span className=\"wb-scope-who\"><ThemeDots theme={current.theme}/><span><b>{panel.api.title || params.url}</b><small>{accountName(profile)} · {current.source === 'pane' ? t('wb.appearance.ownTheme') : current.source === 'account' ? t('wb.appearance.accountTheme', { name: themeName(current.id) }) : t('wb.appearance.appTheme', { name: themeName(current.id) })}</small></span></span>\n <Select label={t('wb.appearance.themeFor', { name: panel.api.title || t('wb.appearance.pane') })} value={scopes.panes[panel.id] ?? ''} width={210} options={scopeOptions(t('wb.appearance.followAccount'))}\n onChange={id => void setScopes(assign(themeState().scopes, 'panes', panel.id, id || null)).catch(error => notify(getError(error), true))}/>\n </div>;\n })}\n </div>}\n </Row>;\n}\n\nfunction DownloadedFonts({ notify }: { notify: Notify }) {\n const t = useT();\n const { removeFont } = panelThemes().store;\n const { fonts } = useThemeState();\n const query = useSettingsQuery();\n const title = t('wb.appearance.downloaded');\n if (query && !`downloaded fonts google fonts typeface remove storage ${title}`.toLowerCase().includes(query.toLowerCase().trim())) return null;\n const total = fonts.reduce((sum, font) => sum + font.bytes, 0);\n return <Section title={title} id=\"fonts\" hint={fonts.length ? t('wb.appearance.downloadedHint', { count: fonts.length, size: bytesLabel(total) }) : t('wb.appearance.downloadedEmpty')}>\n <Row label={fonts.length ? t('wb.appearance.families') : t('wb.appearance.noneYet')} hint={t('wb.appearance.familiesHint')} keywords=\"google fonts downloaded remove\" wide>\n {fonts.length > 0 && <ul className=\"wb-fontlist\">\n {fonts.map(font => <li key={font.family}>\n <span><b style={{ fontFamily: `\"${font.family}\", system-ui` }}>{font.family}</b><br/><small>{weightsLabel(font.weights)} · {bytesLabel(font.bytes)}</small></span>\n <small>{formatDate(font.installedAt, { dateStyle: 'medium' })}</small>\n <Button size=\"sm\" tone=\"ghost\" onClick={() => void removeFont(font.family).then(() => notify(t('wb.appearance.removedFont', { family: font.family }))).catch(error => notify(getError(error), true))}>{t('wb.common.remove')}</Button>\n </li>)}\n </ul>}\n </Row>\n </Section>;\n}\n\n/** The selected theme's own CSS: travels with the theme (export, Save as theme); switching themes starts clean, like every customization. */\nfunction ThemeCssEditor({ css, onApply }: { css: string; onApply(text: string): void }) {\n const t = useT();\n const [text, setText] = useState(css);\n const query = useSettingsQuery();\n useEffect(() => setText(css), [css]);\n const label = t('wb.appearance.themeCss');\n if (query && !`theme css stylesheet style code custom ${label}`.toLowerCase().includes(query.toLowerCase().trim())) return null;\n const dirty = text !== css;\n return <Row label={label} hint={t('wb.appearance.themeCssHint')} keywords=\"css stylesheet style code custom\" wide>\n <div className=\"bt-code is-compact\" style={{ width: '100%' }}>\n <textarea aria-label={t('wb.appearance.themeCssLabel')} spellCheck={false} value={text} placeholder={panelSite().cssExamples?.theme ?? '/* CSS that travels with this theme */'}\n onChange={event => setText(event.target.value)}\n onKeyDown={event => { if ((event.ctrlKey || event.metaKey) && event.key === 's') { event.preventDefault(); if (dirty) onApply(text); } }}/>\n <div className=\"bt-code-bar\">\n <small>{t('wb.appearance.cssLines', { count: text.split('\\n').length })}</small>\n {dirty && <Button size=\"sm\" tone=\"ghost\" onClick={() => setText(css)}>{t('wb.common.discard')}</Button>}\n <Button size=\"sm\" tone=\"primary\" disabled={!dirty} onClick={() => onApply(text)}>{t('wb.common.apply')}</Button>\n </div>\n </div>\n </Row>;\n}\n\nfunction Glyph({ d }: { d: string }) {\n return <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d={d} fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>;\n}\n\nfunction ImportPanel({ onImport, onCancel }: { onImport(theme: ThemeSpec, warnings: string[]): void; onCancel(): void }) {\n const t = useT();\n const [text, setText] = useState('');\n const [error, setError] = useState('');\n const file = useRef<HTMLInputElement>(null);\n const run = (json: string) => {\n const parsed = parseThemeJson(json);\n if ('error' in parsed) { setError(parsed.error); return; }\n // The theme doctor: advice only (never a block); contrast is already in the warnings.\n const hints = themeDoctor(parsed.theme).filter(advice => advice.kind !== 'contrast');\n onImport(parsed.theme, hints.length ? [...parsed.warnings, t('wb.appearance.doctorHints', { count: hints.length, hint: hints[0]!.text })] : parsed.warnings);\n };\n return <div className=\"bt-import\">\n <div className=\"bt-import-drop\" onDragOver={event => event.preventDefault()}\n onDrop={event => { event.preventDefault(); void event.dataTransfer.files[0]?.text().then(run); }}>\n <strong>{t('wb.appearance.importTitle')}</strong>\n <p>{t('wb.appearance.importText')}</p>\n <div className=\"bt-inline\"><Button size=\"sm\" tone=\"primary\" onClick={() => file.current?.click()}>{t('wb.common.chooseFile')}</Button><Button size=\"sm\" tone=\"ghost\" onClick={onCancel}>{t('wb.common.cancel')}</Button></div>\n <input ref={file} type=\"file\" hidden accept=\"application/json,.json\" onChange={event => { void event.target.files?.[0]?.text().then(run); event.target.value = ''; }}/>\n </div>\n <div className=\"bt-code is-compact\">\n <textarea aria-label={t('wb.appearance.themeJson')} spellCheck={false} placeholder={`${t('wb.appearance.pasteJson')}\\n{ \"name\": \"My theme\", \"colors\": { … } }`} value={text} onChange={event => { setText(event.target.value); setError(''); }}/>\n <div className=\"bt-code-bar\">\n {error ? <small className=\"is-error\" role=\"alert\">{error}</small> : <small>{t('wb.appearance.importSafe')}</small>}\n <Button size=\"sm\" disabled={!text.trim()} onClick={() => run(text)}>{t('wb.appearance.importJson')}</Button>\n </div>\n </div>\n </div>;\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"Appearance.js","sourceRoot":"","sources":["../../../../../../shell/src/panel/Appearance.tsx"],"names":[],"mappings":"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","sourcesContent":["// Appearance: the theme gallery (live previews rendered from each theme document), per-group\n// customization on top of the selected theme (fonts per role with the Google Fonts browser),\n// account and pane themes, downloaded fonts, import/export of theme JSON and Custom CSS. The theme\n// documents, the store and the miniature are the app's (`PanelSite.themes`).\nimport { useEffect, useRef, useState } from 'react';\nimport { THEME_SCHEMA_URL } from '../../../runtime/src/themeApi.ts';\nimport type { ThemeChoice } from '../../../runtime/src/themeChoice.ts';\nimport {\n FONT_CHOICES, MAX_IMAGE_CHARS, fontChoiceOf, googleFontsUsed, parseThemeJson, slug,\n type Background, type FontRole, type FontRoleName, type Pattern, type ThemeOverrides, type ThemeSpec,\n} from '../../../runtime/src/themeSpec.ts';\nimport { AccountAvatar, accountName, useProfiles } from '../frame/AccountSwitcher.tsx';\nimport { useT } from '../frame/hooks.ts';\nimport { formatDate, t, tx } from '../frame/i18n.ts';\nimport { ThemeDots } from '../frame/PaneTheme.tsx';\nimport { shell, type WebParams } from '../frame/state.ts';\nimport { assign } from '../frame/themeScopes.ts';\nimport { tabProfile } from '../profileModel.ts';\nimport { Badge, Button, ColorField, Row, Section, Segmented, Select, Slider, Toggle, useSettingsQuery, type Option } from './controls.tsx';\nimport { IconPackImport, IconPackReview } from './IconPackInstall.tsx';\nimport type { IconPack } from '../../../runtime/src/themeIcons.ts';\nimport { themeDoctor, type DoctorAdvice } from '../../../runtime/src/themeDoctor.ts';\nimport { bytesLabel, defaultWeights, loadCatalog, weightsLabel } from './fonts/catalog.ts';\nimport { FontRoles } from './fonts/FontRoles.tsx';\nimport { CustomCssEditor } from './Plugins.tsx';\nimport { panelSite, panelThemes, type Notify } from './site.ts';\nimport { useThemeState } from './themes.ts';\nimport './builder.css';\n\nconst getError = (error: unknown) => error instanceof Error ? error.message : String(error);\n\nconst CORNERS = [\n { value: 'square', label: 'wb.appearance.corners.square', radius: 0, button: 0 },\n { value: 'crisp', label: 'wb.appearance.corners.crisp', radius: 5, button: 5 },\n { value: 'soft', label: 'wb.appearance.corners.soft', radius: 12, button: 10 },\n { value: 'round', label: 'wb.appearance.corners.round', radius: 16, button: 9999 },\n] as const;\ntype BackgroundChoice = 'none' | 'glow' | Pattern | 'image';\nconst backgrounds = (): Array<Option<BackgroundChoice>> => [\n { value: 'none', label: t('wb.appearance.bg.none') }, { value: 'glow', label: t('wb.appearance.bg.glow') }, { value: 'dots', label: t('wb.appearance.bg.dots') }, { value: 'grid', label: t('wb.appearance.bg.grid') },\n { value: 'diagonal', label: t('wb.appearance.bg.diagonal') }, { value: 'scanlines', label: t('wb.appearance.bg.scanlines') }, { value: 'paper', label: t('wb.appearance.bg.paper') },\n { value: 'clouds', label: t('wb.appearance.bg.clouds') }, { value: 'image', label: t('wb.appearance.bg.image'), hint: t('wb.appearance.bg.imageHint') },\n];\n\nconst modeLabel = (theme: ThemeSpec) => theme.mode === 'auto' ? t('wb.appearance.mode.auto') : theme.mode === 'light' ? t('wb.appearance.mode.light') : t('wb.appearance.mode.dark');\nconst fontLabel = (theme: ThemeSpec) => {\n const family = theme.font.family;\n const choices = panelThemes().fontChoices ?? FONT_CHOICES;\n const choice = choices.find(item => item.id === fontChoiceOf(family, choices));\n return (choice?.key ? tx(choice.key, undefined, choice.label) : choice?.label) ?? family[0] ?? panelThemes().siteFont;\n};\n/** Built-in themes have translated descriptions (`theme.<id>.description` in the app's catalog); imported ones keep their own. */\nexport const themeDescription = (theme: ThemeSpec) => tx(`theme.${theme.id}.description`, undefined, theme.description);\nconst formatPercent = (value: number) => t('wb.appearance.percent', { value: value / 100 });\nconst hasOverrides = (choice: ThemeChoice) => !!choice.accent || Object.keys(choice.overrides).length > 0;\n\nfunction download(name: string, text: string) {\n const url = URL.createObjectURL(new Blob([text], { type: 'application/json' }));\n const anchor = document.createElement('a');\n anchor.href = url; anchor.download = name; anchor.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\n\nfunction backgroundFor(kind: BackgroundChoice, theme: ThemeSpec, image?: string): Background {\n const base = panelThemes().draftColors;\n const text = theme.colors?.text ?? '#8b98a5';\n const light = theme.mode === 'light';\n switch (kind) {\n case 'none': return { kind: 'none' };\n case 'glow': return { kind: 'gradient', from: theme.colors?.page ?? theme.colors?.bg ?? base.bg, to: theme.colors?.page ?? theme.colors?.bg ?? base.bg, angle: 180, glow: theme.colors?.accent ?? base.accent };\n case 'image': return { kind: 'image', url: image ?? '', fit: 'cover', dim: light ? 0.55 : 0.6 };\n case 'clouds': return { kind: 'pattern', pattern: 'clouds', ink: light ? '#ffffff' : text, opacity: light ? 0.55 : 0.07, size: 220 };\n case 'dots': return { kind: 'pattern', pattern: 'dots', ink: text, opacity: 0.16, size: 18 };\n case 'grid': return { kind: 'pattern', pattern: 'grid', ink: text, opacity: 0.06, size: 28 };\n case 'diagonal': return { kind: 'pattern', pattern: 'diagonal', ink: text, opacity: 0.06, size: 10 };\n case 'scanlines': return { kind: 'pattern', pattern: 'scanlines', ink: theme.colors?.accent ?? text, opacity: 0.05, size: 4 };\n case 'paper': return { kind: 'pattern', pattern: 'paper', ink: light ? '#7a6a50' : text, opacity: 0.1, size: 180 };\n }\n}\nconst backgroundChoice = (background: Background): BackgroundChoice =>\n background.kind === 'none' ? 'none' : background.kind === 'gradient' ? 'glow' : background.kind === 'image' ? 'image' : background.pattern;\n\n/** Asks the panel to show another section (the Theme Builder). */\nconst openSection = (section: string) => window.dispatchEvent(new CustomEvent('bt-panel-section', { detail: section }));\n\nexport function Appearance({ notify }: { notify: Notify }) {\n const t = useT();\n const themes = panelThemes();\n const { allThemes, installFont, missingFonts, setChoice, setScopes } = themes.store;\n const ThemePreview = themes.Preview;\n const { ready, choice, scopes } = useThemeState();\n const [importing, setImporting] = useState(false);\n const [asking, setAsking] = useState<{ theme: ThemeSpec; families: string[] } | null>(null);\n const [packReview, setPackReview] = useState<{ pack: IconPack; warnings: string[]; bytes: number } | null>(null);\n const query = useSettingsQuery();\n\n if (!ready) return null;\n const effective = themes.catalog.resolve(choice);\n const base = themes.catalog.base(choice);\n const all = allThemes(choice);\n const siteTheme = themes.catalog.defaultChoice.preset;\n const suffix = themes.fileSuffix ?? '.theme.json';\n\n const update = (next: ThemeChoice, commit = true) => setChoice(next, commit).catch(error => notify(getError(error), true));\n const override = (patch: ThemeOverrides, commit = true) => {\n const overrides: ThemeOverrides = { ...choice.overrides };\n for (const [key, value] of Object.entries(patch) as Array<[keyof ThemeOverrides, unknown]>) {\n (overrides as Record<string, unknown>)[key] = key === 'background' ? value : { ...(choice.overrides[key] as object | undefined), ...(value as object) };\n }\n return update({ ...choice, overrides }, commit);\n };\n const setRole = (role: FontRoleName, next: FontRole, commit = true) =>\n override({ font: { roles: { ...(choice.overrides.font?.roles ?? {}), [role]: next } } }, commit);\n\n function select(id: string) {\n if (id === choice.preset) return;\n // Customizations belong to the theme they were made on; switching starts clean.\n void update({ ...choice, preset: id, overrides: {}, accent: null });\n }\n function remove(theme: ThemeSpec) {\n const themes = choice.themes.filter(item => item.id !== theme.id);\n void update({ ...choice, themes, ...(choice.preset === theme.id ? { preset: siteTheme, overrides: {}, accent: null } : {}) }).then(() => notify(t('wb.appearance.removedTheme', { name: theme.name })));\n }\n function add(theme: ThemeSpec, message: string) {\n let id = theme.id;\n for (let n = 2; all.some(item => item.id === id); n++) id = `${theme.id.slice(0, 36)}-${n}`;\n void update({ ...choice, themes: [...choice.themes, { ...theme, id }], preset: id, overrides: {}, accent: null }).then(() => notify(message));\n }\n function exportTheme() {\n const custom = hasOverrides(choice);\n const doc: ThemeSpec = { ...effective, ...(custom ? { id: slug(`${effective.name} custom`), name: t('wb.appearance.customName', { name: effective.name }) } : {}) };\n // `$schema` lets editors validate and complete the file; imports ignore it.\n download(`${doc.id}${suffix}`, JSON.stringify({ $schema: THEME_SCHEMA_URL, ...doc }, null, 2));\n }\n function saveAsNew() {\n const name = t('wb.appearance.savedName', { name: base.name });\n add({ ...effective, id: slug(`${base.name} custom`), name, author: t('wb.appearance.you'), description: t('wb.appearance.basedOn', { name: base.name }) }, t('wb.appearance.saved', { name }));\n }\n /** An imported theme that names Google fonts asks before anything is downloaded. */\n function imported(theme: ThemeSpec, warnings: string[]) {\n setImporting(false);\n add(theme, `${t('wb.appearance.imported', { name: theme.name })}${warnings.length ? ` ${warnings.join(' ')}` : ''}`);\n const families = missingFonts(theme);\n if (families.length) setAsking({ theme, families });\n }\n async function downloadFonts(families: string[]) {\n setAsking(null);\n const catalog = await loadCatalog();\n for (const family of families) {\n const font = catalog.find(item => item.family === family);\n try {\n await installFont(family, font ? defaultWeights(font) : { kind: 'list', values: [400, 700] });\n notify(t('wb.appearance.downloadedFont', { family }));\n } catch (error) { notify(`${family}: ${getError(error)}`, true); }\n }\n }\n\n const cornerValue = CORNERS.find(corner => corner.radius === effective.shape.radius && corner.button === effective.shape.button)?.value ?? null;\n const timeline = effective.layout.cards ? 'cards' : effective.layout.frame ? 'framed' : 'flat';\n\n async function pickImage(file: File | undefined) {\n if (!file) return;\n if (!/^image\\/(png|jpeg|webp|gif|avif)$/.test(file.type)) { notify(t('wb.appearance.imageType'), true); return; }\n const url = await new Promise<string>((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(String(reader.result)); reader.onerror = () => reject(reader.error); reader.readAsDataURL(file); });\n if (url.length > MAX_IMAGE_CHARS) { notify(t('wb.appearance.imageTooLarge'), true); return; }\n void override({ background: backgroundFor('image', effective, url) });\n }\n\n const searching = !!query;\n return <>\n {!searching && <Section title={t('wb.appearance.theme')} id=\"themes\" hint={t('wb.appearance.themeHint')}\n action={<div className=\"bt-inline\">\n <Button size=\"sm\" tone=\"ghost\" onClick={() => setImporting(!importing)} icon={<Glyph d=\"M8 2v8m0 0L5 7m3 3 3-3M3 13h10\"/>}>{t('wb.common.import')}</Button>\n <Button size=\"sm\" tone=\"ghost\" onClick={exportTheme} icon={<Glyph d=\"M8 11V3m0 0L5 6m3-3 3 3M3 13h10\"/>}>{t('wb.common.export')}</Button>\n <Button size=\"sm\" tone=\"primary\" onClick={() => openSection('builder')} icon={<Glyph d=\"M3 13l.6-2.6L10.5 3.5l2 2-6.9 6.9zM9 5l2 2\"/>}>{t('wb.panel.section.builder')}</Button>\n </div>}>\n {importing && <ImportPanel onCancel={() => setImporting(false)} onImport={imported}/>}\n {asking && <div className=\"bt-import wb-ask\" role=\"alertdialog\" aria-label={t('wb.appearance.askFonts')}>\n <div className=\"bt-import-drop\">\n <strong>{t('wb.appearance.askFontsTitle', { name: asking.theme.name, fonts: asking.families.join(', ') })}</strong>\n <p>{t('wb.appearance.askFontsText', { count: asking.families.length })}</p>\n <div className=\"bt-inline\"><Button size=\"sm\" tone=\"primary\" onClick={() => void downloadFonts(asking.families)}>{t('wb.panel.updates.download')}</Button><Button size=\"sm\" tone=\"ghost\" onClick={() => setAsking(null)}>{t('wb.common.notNow')}</Button></div>\n </div>\n </div>}\n <div className=\"bt-gallery\" role=\"radiogroup\" aria-label={t('wb.appearance.theme')}>\n {all.map(theme => {\n const on = theme.id === choice.preset;\n const isImported = choice.themes.some(item => item.id === theme.id);\n return <div key={theme.id} className={`bt-theme ${on ? 'is-on' : ''}`}>\n <button type=\"button\" role=\"radio\" aria-checked={on} className=\"bt-theme-hit\" onClick={() => select(theme.id)} aria-label={`${theme.name}. ${themeDescription(theme)}`}>\n <ThemePreview theme={on ? effective : theme}/>\n <span className=\"bt-theme-info\">\n <span className=\"bt-theme-title\"><strong>{theme.name}</strong>{on && <span className=\"bt-theme-check\" aria-hidden=\"true\"><Glyph d=\"m4 8.5 2.5 2.5L12 5.5\"/></span>}</span>\n <small>{themeDescription(theme)}</small>\n <span className=\"bt-theme-tags\"><em>{modeLabel(theme)}</em><em>{fontLabel(theme)}</em>{theme.layout.cards && <em>{t('wb.appearance.timeline.cards')}</em>}{googleFontsUsed(theme).length > 0 && <em>Google Fonts</em>}{isImported && <em className=\"is-accent\">{t('wb.appearance.yours')}</em>}{theme.css && <em>CSS</em>}</span>\n </span>\n </button>\n {isImported && <button type=\"button\" className=\"bt-theme-remove\" aria-label={t('wb.appearance.removeNamed', { name: theme.name })} title={t('wb.appearance.removeTheme')} onClick={() => remove(theme)}><Glyph d=\"m4.5 4.5 7 7m0-7-7 7\"/></button>}\n </div>;\n })}\n </div>\n </Section>}\n\n <Section title={searching ? t('wb.appearance.theme') : t('wb.appearance.customize', { name: base.name })} id=\"customize\"\n hint={searching ? undefined : t('wb.appearance.customizeHint')}\n action={!searching && hasOverrides(choice) ? <div className=\"bt-inline\">\n <Button size=\"sm\" tone=\"ghost\" onClick={() => void update({ ...choice, overrides: {}, accent: null })}>{t('wb.common.reset')}</Button>\n <Button size=\"sm\" onClick={saveAsNew}>{t('wb.appearance.saveAsTheme')}</Button>\n </div> : undefined}>\n <Row label={t('wb.appearance.accent')} hint={t('wb.appearance.accentHint')} keywords=\"color colour highlight link\" wide>\n <ColorField label={t('wb.appearance.accentColor')} value={choice.accent} swatches={[...themes.accents]} autoLabel={t('wb.appearance.theme')} onChange={accent => void update({ ...choice, accent })}/>\n </Row>\n {themes.iconPacks?.length ? <Row label={t('wb.appearance.icons')} hint={t('wb.appearance.iconsHint')} keywords=\"icon pack glyphs symbols pixel import\" wide>\n <div className=\"wb-pack-row\"><div className=\"bt-inline\">\n <Select label={t('wb.appearance.icons')} value={choice.icons ?? 'theme'} width={220}\n onChange={icons => void update({ ...choice, icons: icons === 'theme' ? undefined : icons })}\n options={[{ value: 'theme', label: t('wb.appearance.icons.theme') }, { value: 'site', label: t('wb.appearance.icons.site') }, ...themes.iconPacks.filter(pack => !choice.packs?.some(item => item.id === pack.id)).map(pack => ({ value: pack.id, label: pack.name })), ...(choice.packs ?? []).map(pack => ({ value: pack.id, label: pack.name }))]}/>\n <IconPackImport onError={message => notify(message, true)} onParsed={(pack, warnings, bytes) => setPackReview({ pack, warnings, bytes })}/>\n </div>\n {choice.packs?.length ? <div className=\"bt-inline wb-pack-list\" aria-label={t('wb.appearance.icons.imported')}>{choice.packs.map(pack => <Button key={pack.id} size=\"sm\" tone=\"ghost\" onClick={() => void update({ ...choice, packs: choice.packs!.filter(item => item.id !== pack.id), ...(choice.icons === pack.id ? { icons: undefined } : {}) }).then(() => notify(t('wb.appearance.icons.removed', { name: pack.name })))}>{t('wb.appearance.icons.remove', { name: pack.name })}</Button>)}</div> : null}\n {packReview && <IconPackReview {...packReview} replaces={!!choice.packs?.some(item => item.id === packReview.pack.id)} onCancel={() => setPackReview(null)}\n onInstall={() => { const { pack } = packReview; setPackReview(null); void update({ ...choice, packs: [...(choice.packs ?? []).filter(item => item.id !== pack.id), pack], icons: pack.id }).then(() => notify(t('wb.appearance.icons.installed', { name: pack.name }))); }}/>}</div>\n </Row> : null}\n <Row label={t('wb.appearance.fonts')} hint={t('wb.appearance.fontsHint')}\n keywords=\"typeface typography family font google fonts post text heading numbers code interface window dialogs\" wide>\n <FontRoles font={effective.font} onRole={setRole} compact/>\n </Row>\n <Row label={t('wb.appearance.textSize')} hint={t('wb.appearance.textSizeHint')} keywords=\"font scale bigger smaller zoom\">\n <Slider label={t('wb.appearance.textSize')} min={85} max={120} value={Math.round(effective.font.scale * 100)} format={v => formatPercent(v)}\n onChange={v => void override({ font: { scale: v / 100 } }, false)} onCommit={v => void override({ font: { scale: v / 100 } })}/>\n </Row>\n <Row label={t('wb.appearance.bold')} hint={t('wb.appearance.boldHint')} keywords=\"font weight heavy\">\n <Segmented label={t('wb.appearance.bold')} size=\"sm\" value={effective.font.bold >= 750 ? 800 : effective.font.bold >= 675 ? 700 : 600}\n onChange={bold => void override({ font: { bold } })} options={[{ value: 600, label: t('wb.appearance.bold.medium') }, { value: 700, label: t('wb.appearance.bold.bold') }, { value: 800, label: t('wb.appearance.bold.heavy') }]}/>\n </Row>\n <Row label={t('wb.appearance.corners')} hint={t('wb.appearance.cornersHint')} keywords=\"radius rounded square shape\">\n <Segmented label={t('wb.appearance.corners')} size=\"sm\" value={cornerValue} onChange={value => { const corner = CORNERS.find(item => item.value === value)!; void override({ shape: { radius: corner.radius, button: corner.button } }); }}\n options={CORNERS.map(corner => ({ value: corner.value, label: t(corner.label) }))}/>\n </Row>\n <Row label={t('wb.appearance.avatars')} keywords=\"profile picture shape\">\n <Segmented label={t('wb.appearance.avatars')} size=\"sm\" value={effective.shape.avatar} onChange={avatar => void override({ shape: { avatar } })}\n options={[{ value: 'circle', label: t('wb.appearance.avatars.circle') }, { value: 'rounded', label: t('wb.appearance.avatars.rounded') }, { value: 'square', label: t('wb.appearance.corners.square') }]}/>\n </Row>\n <Row label={t('wb.appearance.density')} hint={t('wb.appearance.densityHint')} keywords=\"compact spacing padding\">\n <Segmented label={t('wb.appearance.density')} size=\"sm\" value={effective.layout.density} onChange={density => void override({ layout: { density } })}\n options={[{ value: 'compact', label: t('wb.appearance.density.compact') }, { value: 'default', label: t('wb.appearance.density.default') }, { value: 'comfortable', label: t('wb.appearance.density.roomy') }]}/>\n </Row>\n <Row label={t('wb.appearance.timeline')} hint={t('wb.appearance.timelineHint')} keywords=\"cards layout frame\">\n <Segmented label={t('wb.appearance.timelineStyle')} size=\"sm\" value={timeline} onChange={value => void override({ layout: { cards: value === 'cards', frame: value === 'framed' } })}\n options={[{ value: 'flat', label: t('wb.appearance.timeline.flat') }, { value: 'framed', label: t('wb.appearance.timeline.framed') }, { value: 'cards', label: t('wb.appearance.timeline.cards') }]}/>\n </Row>\n <Row label={t('wb.appearance.timelineWidth')} keywords=\"column layout wide narrow\">\n <Slider label={t('wb.appearance.timelineWidth')} min={520} max={820} step={10} value={effective.layout.column} format={v => t('wb.appearance.px', { value: v })}\n onChange={column => void override({ layout: { column } }, false)} onCommit={column => void override({ layout: { column } })}/>\n </Row>\n <Row label={t('wb.appearance.sidebarWidth')} keywords=\"column layout trends\">\n <Slider label={t('wb.appearance.sidebarWidth')} min={290} max={400} step={10} value={effective.layout.sidebar} format={v => t('wb.appearance.px', { value: v })}\n onChange={sidebar => void override({ layout: { sidebar } }, false)} onCommit={sidebar => void override({ layout: { sidebar } })}/>\n </Row>\n <Row label={t('wb.appearance.background')} hint={t('wb.appearance.backgroundHint')} keywords=\"wallpaper pattern image photo canvas\">\n <div className=\"bt-inline\">\n <Select label={t('wb.appearance.background')} value={backgroundChoice(effective.background)} options={backgrounds()} width={170}\n onChange={kind => { if (kind === 'image') document.getElementById('bt-bg-file')?.click(); else void override({ background: backgroundFor(kind, effective) }); }}/>\n <input id=\"bt-bg-file\" type=\"file\" hidden accept=\"image/png,image/jpeg,image/webp,image/gif,image/avif\" onChange={event => { void pickImage(event.target.files?.[0]); event.target.value = ''; }}/>\n </div>\n </Row>\n {effective.background.kind === 'image' && <Row label={t('wb.appearance.dim')} hint={t('wb.appearance.dimHint')} keywords=\"background image\">\n <Slider label={t('wb.appearance.dim')} min={35} max={95} value={Math.round(effective.background.dim * 100)} format={v => formatPercent(v)}\n onChange={v => void override({ background: { ...(effective.background as Extract<Background, { kind: 'image' }>), dim: v / 100 } }, false)}\n onCommit={v => void override({ background: { ...(effective.background as Extract<Background, { kind: 'image' }>), dim: v / 100 } })}/>\n </Row>}\n <Row label={t('wb.appearance.motion')} hint={t('wb.appearance.motionHint')} keywords=\"animation transition\">\n <Segmented label={t('wb.appearance.motion')} size=\"sm\" value={effective.effects.motion === 0 ? 0 : effective.effects.motion < 200 ? 140 : 260} onChange={motion => void override({ effects: { motion } })}\n options={[{ value: 0, label: t('wb.common.off') }, { value: 140, label: t('wb.appearance.motion.subtle') }, { value: 260, label: t('wb.appearance.motion.lively') }]}/>\n </Row>\n <Row label={t('wb.appearance.hover')} hint={t('wb.appearance.hoverHint')} keywords=\"effect highlight lift glow\">\n <Segmented label={t('wb.appearance.hoverEffect')} size=\"sm\" value={effective.effects.hover} onChange={hover => void override({ effects: { hover } })}\n options={[{ value: 'none', label: t('wb.appearance.hover.none') }, { value: 'tint', label: t('wb.appearance.hover.tint') }, { value: 'lift', label: t('wb.appearance.hover.lift') }, { value: 'glow', label: t('wb.appearance.bg.glow') }]}/>\n </Row>\n <Row label={t('wb.appearance.crt')} hint={t('wb.appearance.crtHint')} keywords=\"retro terminal effect\">\n <Toggle label={t('wb.appearance.crt')} checked={effective.effects.crt} onChange={crt => void override({ effects: { crt } })}/>\n </Row>\n <ThemeCssEditor key={choice.preset} css={effective.css} onApply={text => { void override({ css: { text } }); notify(t('wb.appearance.cssApplied', { name: base.name })); }}/>\n </Section>\n\n <DoctorReport theme={effective}/>\n\n <Section title={t('wb.appearance.scopes')} id=\"theme-scopes\" hint={searching ? undefined : t('wb.appearance.scopesHint')}>\n <Row label={t('wb.appearance.chrome')} hint={t('wb.appearance.chromeHint')}\n keywords=\"chrome window tabs titlebar panel colors own style\">\n <Toggle label={t('wb.appearance.chrome')} checked={scopes.chrome === 'theme'} onChange={on => void setScopes({ ...scopes, chrome: on ? 'theme' : 'own' }).catch(error => notify(getError(error), true))}/>\n </Row>\n <AccountThemes notify={notify}/>\n <PaneThemes notify={notify}/>\n </Section>\n\n <DownloadedFonts notify={notify}/>\n {(panelSite().appearance?.extra ?? []).map((Extra, index) => <Extra key={index} notify={notify} openSection={id => window.dispatchEvent(new CustomEvent('bt-panel-section', { detail: id }))}/>)}\n <CustomCssEditor notify={notify}/>\n </>;\n}\n\n/** Theme choices for a scope row: follow (the level above) plus every theme with its swatch. */\n/** The theme doctor's full report on the theme as it is now: every finding, where it is, what it found, how to fix it. Advice only. */\nfunction DoctorReport({ theme }: { theme: ThemeSpec }) {\n const t = useT();\n const advice = themeDoctor(theme);\n const words = (item: DoctorAdvice, part: 'found' | 'fix') => t(`wb.doctor.${item.key}.${part}`, item.params);\n return <Section title={t('wb.doctor.title')} id=\"theme-doctor\" hint={t('wb.doctor.hint')} action={<Badge tone={advice.length ? undefined : 'ok'}>{t('wb.doctor.count', { count: advice.length })}</Badge>}>\n {advice.length === 0\n ? <p className=\"btp-hint\">{t('wb.doctor.empty')}</p>\n : <ul className=\"bt-doctor\" aria-label={t('wb.doctor.title')}>\n {advice.map((item, index) => <li key={`${item.id}:${item.where}:${index}`} className={`bt-doctor-item is-${item.kind}`}>\n <span className=\"bt-doctor-head\"><Badge>{t(`wb.doctor.kind.${item.kind}`)}</Badge><strong>{words(item, 'found')}</strong></span>\n <small className=\"bt-doctor-line\">{t('wb.doctor.where')}: <code>{item.where}</code></small>\n <small className=\"bt-doctor-line\">{t('wb.doctor.fix')}: {words(item, 'fix')}</small>\n </li>)}\n </ul>}\n </Section>;\n}\n\nfunction scopeOptions(follow: string): Array<Option<string>> {\n // Called during render of components that use useT(), so the labels follow the language.\n return [{ value: '', label: follow }, ...panelThemes().store.allThemes().map(theme => ({ value: theme.id, label: theme.name, icon: <ThemeDots theme={theme}/> }))];\n}\n\nfunction AccountThemes({ notify }: { notify: Notify }) {\n const t = useT();\n const { setScopes, themeName, themeState } = panelThemes().store;\n const profiles = useProfiles();\n const { scopes, choice } = useThemeState();\n return <Row label={t('wb.panel.section.accounts')} hint={t('wb.appearance.accountsHint')} keywords=\"account profile per account theme login\" wide>\n <div className=\"wb-scope-list\">\n {profiles.profiles.map(profile => <div key={profile.id} className=\"wb-scope\">\n <span className=\"wb-scope-who\"><AccountAvatar profile={profile} size={26}/><span><b>{accountName(profile)}</b><small>{scopes.profiles[profile.id] ? t('wb.appearance.ownTheme') : t('wb.appearance.followsApp', { name: themeName(choice.preset) })}</small></span></span>\n <Select label={t('wb.appearance.themeFor', { name: accountName(profile) })} value={scopes.profiles[profile.id] ?? ''} width={210} options={scopeOptions(t('wb.appearance.followApp'))}\n onChange={id => void setScopes(assign(themeState().scopes, 'profiles', profile.id, id || null)).catch(error => notify(getError(error), true))}/>\n </div>)}\n </div>\n </Row>;\n}\n\n/** Open site panes, each with the theme it shows and where that comes from. */\nfunction PaneThemes({ notify }: { notify: Notify }) {\n const t = useT();\n const { setScopes, tabTheme, themeName, themeState } = panelThemes().store;\n const { scopes } = useThemeState();\n const [, refresh] = useState(0);\n useEffect(() => {\n const api = shell.api;\n if (!api) return;\n const bump = () => refresh(n => n + 1);\n const subs = [api.onDidAddPanel(bump), api.onDidRemovePanel(bump), api.onDidLayoutChange(bump)];\n return () => subs.forEach(sub => sub.dispose());\n }, []);\n const panes = (shell.api?.panels ?? []).filter(panel => (panel.params as WebParams | undefined)?.kind === 'web');\n return <Row label={t('wb.appearance.panes')} hint={panes.length ? t('wb.appearance.panesHint') : t('wb.appearance.panesEmpty')} keywords=\"pane split tab per pane theme\" wide>\n {panes.length > 0 && <div className=\"wb-scope-list\">\n {panes.map(panel => {\n const params = panel.params as WebParams;\n const profile = tabProfile(shell.profiles, params.profile);\n const current = tabTheme({ id: panel.id, profile: profile.id });\n return <div key={panel.id} className=\"wb-scope\">\n <span className=\"wb-scope-who\"><ThemeDots theme={current.theme}/><span><b>{panel.api.title || params.url}</b><small>{accountName(profile)} · {current.source === 'pane' ? t('wb.appearance.ownTheme') : current.source === 'account' ? t('wb.appearance.accountTheme', { name: themeName(current.id) }) : t('wb.appearance.appTheme', { name: themeName(current.id) })}</small></span></span>\n <Select label={t('wb.appearance.themeFor', { name: panel.api.title || t('wb.appearance.pane') })} value={scopes.panes[panel.id] ?? ''} width={210} options={scopeOptions(t('wb.appearance.followAccount'))}\n onChange={id => void setScopes(assign(themeState().scopes, 'panes', panel.id, id || null)).catch(error => notify(getError(error), true))}/>\n </div>;\n })}\n </div>}\n </Row>;\n}\n\nfunction DownloadedFonts({ notify }: { notify: Notify }) {\n const t = useT();\n const { removeFont } = panelThemes().store;\n const { fonts } = useThemeState();\n const query = useSettingsQuery();\n const title = t('wb.appearance.downloaded');\n if (query && !`downloaded fonts google fonts typeface remove storage ${title}`.toLowerCase().includes(query.toLowerCase().trim())) return null;\n const total = fonts.reduce((sum, font) => sum + font.bytes, 0);\n return <Section title={title} id=\"fonts\" hint={fonts.length ? t('wb.appearance.downloadedHint', { count: fonts.length, size: bytesLabel(total) }) : t('wb.appearance.downloadedEmpty')}>\n <Row label={fonts.length ? t('wb.appearance.families') : t('wb.appearance.noneYet')} hint={t('wb.appearance.familiesHint')} keywords=\"google fonts downloaded remove\" wide>\n {fonts.length > 0 && <ul className=\"wb-fontlist\">\n {fonts.map(font => <li key={font.family}>\n <span><b style={{ fontFamily: `\"${font.family}\", system-ui` }}>{font.family}</b><br/><small>{weightsLabel(font.weights)} · {bytesLabel(font.bytes)}</small></span>\n <small>{formatDate(font.installedAt, { dateStyle: 'medium' })}</small>\n <Button size=\"sm\" tone=\"ghost\" onClick={() => void removeFont(font.family).then(() => notify(t('wb.appearance.removedFont', { family: font.family }))).catch(error => notify(getError(error), true))}>{t('wb.common.remove')}</Button>\n </li>)}\n </ul>}\n </Row>\n </Section>;\n}\n\n/** The selected theme's own CSS: travels with the theme (export, Save as theme); switching themes starts clean, like every customization. */\nfunction ThemeCssEditor({ css, onApply }: { css: string; onApply(text: string): void }) {\n const t = useT();\n const [text, setText] = useState(css);\n const query = useSettingsQuery();\n useEffect(() => setText(css), [css]);\n const label = t('wb.appearance.themeCss');\n if (query && !`theme css stylesheet style code custom ${label}`.toLowerCase().includes(query.toLowerCase().trim())) return null;\n const dirty = text !== css;\n return <Row label={label} hint={t('wb.appearance.themeCssHint')} keywords=\"css stylesheet style code custom\" wide>\n <div className=\"bt-code is-compact\" style={{ width: '100%' }}>\n <textarea aria-label={t('wb.appearance.themeCssLabel')} spellCheck={false} value={text} placeholder={panelSite().cssExamples?.theme ?? '/* CSS that travels with this theme */'}\n onChange={event => setText(event.target.value)}\n onKeyDown={event => { if ((event.ctrlKey || event.metaKey) && event.key === 's') { event.preventDefault(); if (dirty) onApply(text); } }}/>\n <div className=\"bt-code-bar\">\n <small>{t('wb.appearance.cssLines', { count: text.split('\\n').length })}</small>\n {dirty && <Button size=\"sm\" tone=\"ghost\" onClick={() => setText(css)}>{t('wb.common.discard')}</Button>}\n <Button size=\"sm\" tone=\"primary\" disabled={!dirty} onClick={() => onApply(text)}>{t('wb.common.apply')}</Button>\n </div>\n </div>\n </Row>;\n}\n\nfunction Glyph({ d }: { d: string }) {\n return <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d={d} fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>;\n}\n\nfunction ImportPanel({ onImport, onCancel }: { onImport(theme: ThemeSpec, warnings: string[]): void; onCancel(): void }) {\n const t = useT();\n const [text, setText] = useState('');\n const [error, setError] = useState('');\n const file = useRef<HTMLInputElement>(null);\n const run = (json: string) => {\n const parsed = parseThemeJson(json);\n if ('error' in parsed) { setError(parsed.error); return; }\n // The theme doctor: advice only (never a block); contrast is already in the warnings.\n const hints = themeDoctor(parsed.theme).filter(advice => advice.kind !== 'contrast');\n onImport(parsed.theme, hints.length ? [...parsed.warnings, t('wb.appearance.doctorHints', { count: hints.length, hint: t(`wb.doctor.${hints[0]!.key}.found`, hints[0]!.params) })] : parsed.warnings);\n };\n return <div className=\"bt-import\">\n <div className=\"bt-import-drop\" onDragOver={event => event.preventDefault()}\n onDrop={event => { event.preventDefault(); void event.dataTransfer.files[0]?.text().then(run); }}>\n <strong>{t('wb.appearance.importTitle')}</strong>\n <p>{t('wb.appearance.importText')}</p>\n <div className=\"bt-inline\"><Button size=\"sm\" tone=\"primary\" onClick={() => file.current?.click()}>{t('wb.common.chooseFile')}</Button><Button size=\"sm\" tone=\"ghost\" onClick={onCancel}>{t('wb.common.cancel')}</Button></div>\n <input ref={file} type=\"file\" hidden accept=\"application/json,.json\" onChange={event => { void event.target.files?.[0]?.text().then(run); event.target.value = ''; }}/>\n </div>\n <div className=\"bt-code is-compact\">\n <textarea aria-label={t('wb.appearance.themeJson')} spellCheck={false} placeholder={`${t('wb.appearance.pasteJson')}\\n{ \"name\": \"My theme\", \"colors\": { … } }`} value={text} onChange={event => { setText(event.target.value); setError(''); }}/>\n <div className=\"bt-code-bar\">\n {error ? <small className=\"is-error\" role=\"alert\">{error}</small> : <small>{t('wb.appearance.importSafe')}</small>}\n <Button size=\"sm\" disabled={!text.trim()} onClick={() => run(text)}>{t('wb.appearance.importJson')}</Button>\n </div>\n </div>\n </div>;\n}\n\n"]}
|
|
@@ -17,7 +17,7 @@ export declare const parseKeywords: (text: string) => string[];
|
|
|
17
17
|
export declare function AlertSettings({ notify }: {
|
|
18
18
|
notify: Notify;
|
|
19
19
|
}): import("react").JSX.Element | null;
|
|
20
|
-
/** Gallery folders and the opt-in clipboard history for the Media panel
|
|
20
|
+
/** Gallery folders and the opt-in clipboard history for the Media panel. Native only. */
|
|
21
21
|
export declare function MediaSettingsRows({ notify }: {
|
|
22
22
|
notify: Notify;
|
|
23
23
|
}): import("react").JSX.Element | null;
|
|
@@ -5,8 +5,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
5
5
|
import { useEffect, useState } from 'react';
|
|
6
6
|
import { invoke } from "../frame/bridge.js";
|
|
7
7
|
import { useT } from "../frame/hooks.js";
|
|
8
|
-
import { CLIP_MAX_LIMIT, clampClipMax, folderLabel, withoutFolder } from "../frame/mediaModel.js";
|
|
8
|
+
import { CLIP_MAX_LIMIT, clampClipMax, folderLabel, mediaShortcutLabel, withoutFolder } from "../frame/mediaModel.js";
|
|
9
9
|
import { site } from "../frame/site.js";
|
|
10
|
+
import { os } from "../windowControls.js";
|
|
10
11
|
import { ChipList, Button, InputRow, Row, Section, Segmented, Stepper, Toggle } from "./controls.js";
|
|
11
12
|
import { panelSite } from "./site.js";
|
|
12
13
|
const getError = (error) => error instanceof Error ? error.message : String(error);
|
|
@@ -74,7 +75,7 @@ export function AlertSettings({ notify }) {
|
|
|
74
75
|
return null;
|
|
75
76
|
return _jsxs(Section, { title: t('wb.settings.alerts.title'), hint: t('wb.settings.alerts.hint'), children: [_jsx(Row, { label: t('wb.settings.alerts.label'), hint: alerts.enabled ? t('wb.settings.alerts.onCount', { count: alerts.keywords.length }) : t('wb.common.off'), keywords: "keyword notification notify", children: _jsx(Toggle, { label: t('wb.settings.alerts.title'), checked: alerts.enabled, onChange: next => void save({ ...alerts, enabled: next }, next ? t('wb.settings.alerts.turnedOn') : t('wb.settings.alerts.turnedOff')) }) }), _jsx(Row, { label: t('wb.settings.alerts.keywords'), hint: t('wb.settings.alerts.keywordsHint', { max: MAX_KEYWORDS }), keywords: "alert words watch", wide: true, children: _jsxs("div", { className: "bt-stack", children: [_jsx(ChipList, { items: alerts.keywords, empty: t('wb.settings.alerts.none'), onRemove: word => void save({ ...alerts, keywords: alerts.keywords.filter(item => item !== word) }, t('wb.settings.alerts.stopped', { word })) }), _jsx(InputRow, { label: t('wb.settings.alerts.add'), placeholder: "tauri, waybetter", value: text, onChange: setText, button: t('wb.common.add'), disabled: !parseKeywords(text).length || alerts.keywords.length >= MAX_KEYWORDS, onSubmit: add })] }) })] });
|
|
76
77
|
}
|
|
77
|
-
/** Gallery folders and the opt-in clipboard history for the Media panel
|
|
78
|
+
/** Gallery folders and the opt-in clipboard history for the Media panel. Native only. */
|
|
78
79
|
export function MediaSettingsRows({ notify }) {
|
|
79
80
|
const t = useT();
|
|
80
81
|
const [settings, setSettings] = useState(null);
|
|
@@ -111,6 +112,6 @@ export function MediaSettingsRows({ notify }) {
|
|
|
111
112
|
}
|
|
112
113
|
if (!settings)
|
|
113
114
|
return null;
|
|
114
|
-
return _jsxs(Section, { title: t('wb.settings.media.title'), hint: t('wb.settings.media.hint'), children: [_jsx(Row, { label: t('wb.settings.media.folders'), hint: t('wb.settings.media.foldersHint'), keywords: "images pictures screenshots", wide: true, children: _jsxs("div", { className: "bt-stack", children: [_jsx(ChipList, { items: settings.folders, icon: FOLDER_ICON, render: folderLabel, empty: t('wb.settings.media.noFolders'), onRemove: folder => void save(withoutFolder(settings, folder), t('wb.settings.media.folderRemoved')) }), _jsx("div", { children: _jsx(Button, { size: "sm", onClick: () => void addFolder(), icon: _jsx("span", { "aria-hidden": "true", children: "\uFF0B" }), children: t('wb.settings.media.addFolder') }) })] }) }), _jsx(Row, { label: t('wb.settings.media.clipboard'), hint: t('wb.settings.media.clipboardHint'), keywords: "copy paste", children: _jsx(Toggle, { label: t('wb.settings.media.clipboard'), checked: settings.clipboardEnabled, onChange: next => void save({ ...settings, clipboardEnabled: next }, next ? t('wb.settings.media.clipboardOn') : t('wb.settings.media.clipboardOff')) }) }), settings.clipboardEnabled && _jsx(Row, { label: t('wb.settings.media.keep'), hint: t('wb.settings.media.keepHint'), keywords: "clipboard size", children: _jsxs("div", { className: "bt-inline", children: [_jsx(Stepper, { label: t('wb.settings.media.keep'), value: settings.clipboardMax, min: 1, max: CLIP_MAX_LIMIT, onChange: value => void save({ ...settings, clipboardMax: clampClipMax(value) }) }), _jsx(Button, { size: "sm", tone: "ghost", onClick: () => void clearHistory(), children: t('wb.common.clear') })] }) })] });
|
|
115
|
+
return _jsxs(Section, { title: t('wb.settings.media.title'), hint: t('wb.settings.media.hint', { shortcut: mediaShortcutLabel(os) }), children: [_jsx(Row, { label: t('wb.settings.media.folders'), hint: t('wb.settings.media.foldersHint'), keywords: "images pictures screenshots", wide: true, children: _jsxs("div", { className: "bt-stack", children: [_jsx(ChipList, { items: settings.folders, icon: FOLDER_ICON, render: folderLabel, empty: t('wb.settings.media.noFolders'), onRemove: folder => void save(withoutFolder(settings, folder), t('wb.settings.media.folderRemoved')) }), _jsx("div", { children: _jsx(Button, { size: "sm", onClick: () => void addFolder(), icon: _jsx("span", { "aria-hidden": "true", children: "\uFF0B" }), children: t('wb.settings.media.addFolder') }) })] }) }), _jsx(Row, { label: t('wb.settings.media.clipboard'), hint: t('wb.settings.media.clipboardHint'), keywords: "copy paste", children: _jsx(Toggle, { label: t('wb.settings.media.clipboard'), checked: settings.clipboardEnabled, onChange: next => void save({ ...settings, clipboardEnabled: next }, next ? t('wb.settings.media.clipboardOn') : t('wb.settings.media.clipboardOff')) }) }), settings.clipboardEnabled && _jsx(Row, { label: t('wb.settings.media.keep'), hint: t('wb.settings.media.keepHint'), keywords: "clipboard size", children: _jsxs("div", { className: "bt-inline", children: [_jsx(Stepper, { label: t('wb.settings.media.keep'), value: settings.clipboardMax, min: 1, max: CLIP_MAX_LIMIT, onChange: value => void save({ ...settings, clipboardMax: clampClipMax(value) }) }), _jsx(Button, { size: "sm", tone: "ghost", onClick: () => void clearHistory(), children: t('wb.common.clear') })] }) })] });
|
|
115
116
|
}
|
|
116
117
|
//# sourceMappingURL=Settings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../../../../../shell/src/panel/Settings.tsx"],"names":[],"mappings":"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","sourcesContent":["// Settings rows every app has: the home page, where links open and session restore (waybetter-host\n// `settings_get/set`), keyword alerts (`alerts_get/set`) and the media panel's folders and\n// clipboard history (`media_get/set`). Stored natively; applied live to every tab.\nimport { useEffect, useState } from 'react';\nimport { invoke } from '../frame/bridge.ts';\nimport { useT } from '../frame/hooks.ts';\nimport { CLIP_MAX_LIMIT, clampClipMax, folderLabel, withoutFolder, type MediaSettings } from '../frame/mediaModel.ts';\nimport { site } from '../frame/site.ts';\nimport { ChipList, Button, InputRow, Row, Section, Segmented, Stepper, Toggle } from './controls.tsx';\nimport { panelSite, type Notify } from './site.ts';\n\n/** The shell's settings (waybetter-host `ShellSettings`). */\nexport type ShellSettings = {\n homeUrl: string;\n /** Links to other sites: beside the tab (split), a new tab, or the system browser. */\n externalLinks: 'pane' | 'tab' | 'browser';\n /** Site pages clicked in the page: the site's in-place navigation, beside, a new tab, or the system browser. */\n siteLinks: 'same' | 'pane' | 'tab' | 'browser';\n restoreTabs: boolean;\n};\n\nconst getError = (error: unknown) => error instanceof Error ? error.message : String(error);\nconst FOLDER_ICON = <svg width=\"13\" height=\"13\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M2 4.5A1.5 1.5 0 0 1 3.5 3h3l1.5 1.5h4.5A1.5 1.5 0 0 1 14 6v5.5a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 11.5z\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.3\"/></svg>;\n\ntype Opens = 'same' | 'pane' | 'tab' | 'browser';\nconst OPENS: Record<Opens, string> = { same: 'wb.settings.links.opens.same', pane: 'wb.settings.links.opens.pane', tab: 'wb.settings.links.opens.tab', browser: 'wb.settings.links.opens.browser' };\n\n/** Home page, where links open, session restore. Stored natively; read by the tab webviews. */\nexport function BrowserSettings({ notify }: { notify: Notify }) {\n const t = useT();\n const [settings, setSettings] = useState<ShellSettings | null>(null);\n const [home, setHome] = useState('');\n\n useEffect(() => { invoke<ShellSettings>('settings_get').then(value => { setSettings(value); setHome(value.homeUrl); }).catch(err => notify(getError(err), true)); }, []);\n\n async function save(next: ShellSettings, message: string) {\n const previous = settings;\n setSettings(next);\n try { const saved = await invoke<ShellSettings>('settings_set', { settings: next }); setSettings(saved); setHome(saved.homeUrl); notify(message); }\n catch (err) { setSettings(previous); notify(getError(err), true); }\n }\n\n if (!settings) return null;\n const siteHome = site().homeUrl;\n return <Section title={t('wb.settings.links.title')} hint={t('wb.settings.links.hint')}>\n <Row label={t('wb.settings.home.label')} hint={t('wb.settings.home.hint')} keywords=\"new tab start url\" wide>\n <div className=\"bt-inline\">\n <InputRow label={t('wb.settings.home.url')} mono value={home} onChange={setHome} button={t('wb.common.save')} disabled={home === settings.homeUrl}\n onSubmit={() => void save({ ...settings, homeUrl: home }, t('wb.settings.home.saved'))}/>\n {settings.homeUrl !== siteHome && <Button tone=\"ghost\" size=\"sm\" onClick={() => void save({ ...settings, homeUrl: siteHome }, t('wb.settings.home.resetDone'))}>{t('wb.settings.home.reset')}</Button>}\n </div>\n </Row>\n <Row label={t('wb.settings.links.external')} hint={t('wb.settings.links.externalHint')} keywords=\"external open browser pane split side\">\n <Segmented label={t('wb.settings.links.external')} value={settings.externalLinks} onChange={mode => void save({ ...settings, externalLinks: mode }, t('wb.settings.links.externalSaved', { how: t(OPENS[mode as Opens]) }))}\n options={[{ value: 'pane', label: t('wb.settings.links.beside') }, { value: 'tab', label: t('wb.settings.links.newTab') }, { value: 'browser', label: t('wb.settings.links.browser') }]}/>\n </Row>\n <Row label={t('wb.settings.links.site')} hint={t('wb.settings.links.siteHint')} keywords={`${panelSite().settings?.linkKeywords ?? site().name} post profile open pane split side tab`}>\n <Segmented label={t('wb.settings.links.site')} value={settings.siteLinks} onChange={mode => void save({ ...settings, siteLinks: mode }, t('wb.settings.links.siteSaved', { how: t(OPENS[mode as Opens]) }))}\n options={[{ value: 'same', label: t('wb.settings.links.sameTab') }, { value: 'pane', label: t('wb.settings.links.beside') }, { value: 'tab', label: t('wb.settings.links.newTab') }, { value: 'browser', label: t('wb.settings.links.browser') }]}/>\n </Row>\n <Row label={t('wb.settings.restore.label')} hint={t('wb.settings.restore.hint')} keywords=\"session\">\n <Toggle label={t('wb.settings.restore.label')} checked={settings.restoreTabs} onChange={next => void save({ ...settings, restoreTabs: next }, next ? t('wb.settings.restore.on') : t('wb.settings.restore.off'))}/>\n </Row>\n </Section>;\n}\n\ntype Alerts = { enabled: boolean; keywords: string[] };\nexport const parseKeywords = (text: string) => text.split(/[,\\n]/).map(word => word.trim()).filter(Boolean);\nconst MAX_KEYWORDS = 32;\n\n/** Keyword alerts: local OS notifications for keywords in items the site already loaded. Native only. */\nexport function AlertSettings({ notify }: { notify: Notify }) {\n const t = useT();\n const [alerts, setAlerts] = useState<Alerts | null>(null);\n const [text, setText] = useState('');\n\n useEffect(() => { invoke<Alerts>('alerts_get').then(setAlerts).catch(err => notify(getError(err), true)); }, []);\n\n async function save(next: Alerts, message: string) {\n const previous = alerts;\n setAlerts(next);\n try { setAlerts(await invoke<Alerts>('alerts_set', { settings: next })); notify(message); }\n catch (err) { setAlerts(previous); notify(getError(err), true); }\n }\n function add() {\n if (!alerts) return;\n const known = new Set(alerts.keywords.map(word => word.toLowerCase()));\n const fresh = parseKeywords(text).filter(word => !known.has(word.toLowerCase()));\n if (!fresh.length) { setText(''); return; }\n const keywords = [...alerts.keywords, ...fresh].slice(0, MAX_KEYWORDS);\n setText('');\n void save({ ...alerts, keywords }, fresh.length === 1 ? t('wb.settings.alerts.watching', { word: fresh[0]! }) : t('wb.settings.alerts.watchingMore', { count: fresh.length }));\n }\n\n if (!alerts) return null;\n return <Section title={t('wb.settings.alerts.title')} hint={t('wb.settings.alerts.hint')}>\n <Row label={t('wb.settings.alerts.label')} hint={alerts.enabled ? t('wb.settings.alerts.onCount', { count: alerts.keywords.length }) : t('wb.common.off')} keywords=\"keyword notification notify\">\n <Toggle label={t('wb.settings.alerts.title')} checked={alerts.enabled} onChange={next => void save({ ...alerts, enabled: next }, next ? t('wb.settings.alerts.turnedOn') : t('wb.settings.alerts.turnedOff'))}/>\n </Row>\n <Row label={t('wb.settings.alerts.keywords')} hint={t('wb.settings.alerts.keywordsHint', { max: MAX_KEYWORDS })} keywords=\"alert words watch\" wide>\n <div className=\"bt-stack\">\n <ChipList items={alerts.keywords} empty={t('wb.settings.alerts.none')} onRemove={word => void save({ ...alerts, keywords: alerts.keywords.filter(item => item !== word) }, t('wb.settings.alerts.stopped', { word }))}/>\n <InputRow label={t('wb.settings.alerts.add')} placeholder=\"tauri, waybetter\" value={text} onChange={setText} button={t('wb.common.add')} disabled={!parseKeywords(text).length || alerts.keywords.length >= MAX_KEYWORDS} onSubmit={add}/>\n </div>\n </Row>\n </Section>;\n}\n\n/** Gallery folders and the opt-in clipboard history for the Media panel (Ctrl+Shift+G). Native only. */\nexport function MediaSettingsRows({ notify }: { notify: Notify }) {\n const t = useT();\n const [settings, setSettings] = useState<MediaSettings | null>(null);\n useEffect(() => { invoke<MediaSettings>('media_get').then(setSettings).catch(err => notify(getError(err), true)); }, []);\n\n async function save(next: MediaSettings, message?: string) {\n const previous = settings;\n setSettings(next);\n try { setSettings(await invoke<MediaSettings>('media_set', { settings: next })); if (message) notify(message); }\n catch (err) { setSettings(previous); notify(getError(err), true); }\n }\n async function addFolder() {\n try { setSettings(await invoke<MediaSettings>('gallery_add_folder')); }\n catch (err) { notify(getError(err), true); }\n }\n async function clearHistory() {\n try { await invoke('clip_remove', { id: null }); notify(t('wb.settings.media.cleared')); }\n catch (err) { notify(getError(err), true); }\n }\n\n if (!settings) return null;\n return <Section title={t('wb.settings.media.title')} hint={t('wb.settings.media.hint')}>\n <Row label={t('wb.settings.media.folders')} hint={t('wb.settings.media.foldersHint')} keywords=\"images pictures screenshots\" wide>\n <div className=\"bt-stack\">\n <ChipList items={settings.folders} icon={FOLDER_ICON} render={folderLabel} empty={t('wb.settings.media.noFolders')}\n onRemove={folder => void save(withoutFolder(settings, folder), t('wb.settings.media.folderRemoved'))}/>\n <div><Button size=\"sm\" onClick={() => void addFolder()} icon={<span aria-hidden=\"true\">+</span>}>{t('wb.settings.media.addFolder')}</Button></div>\n </div>\n </Row>\n <Row label={t('wb.settings.media.clipboard')} hint={t('wb.settings.media.clipboardHint')} keywords=\"copy paste\">\n <Toggle label={t('wb.settings.media.clipboard')} checked={settings.clipboardEnabled} onChange={next => void save({ ...settings, clipboardEnabled: next }, next ? t('wb.settings.media.clipboardOn') : t('wb.settings.media.clipboardOff'))}/>\n </Row>\n {settings.clipboardEnabled && <Row label={t('wb.settings.media.keep')} hint={t('wb.settings.media.keepHint')} keywords=\"clipboard size\">\n <div className=\"bt-inline\">\n <Stepper label={t('wb.settings.media.keep')} value={settings.clipboardMax} min={1} max={CLIP_MAX_LIMIT} onChange={value => void save({ ...settings, clipboardMax: clampClipMax(value) })}/>\n <Button size=\"sm\" tone=\"ghost\" onClick={() => void clearHistory()}>{t('wb.common.clear')}</Button>\n </div>\n </Row>}\n </Section>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../../../../../shell/src/panel/Settings.tsx"],"names":[],"mappings":"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","sourcesContent":["// Settings rows every app has: the home page, where links open and session restore (waybetter-host\n// `settings_get/set`), keyword alerts (`alerts_get/set`) and the media panel's folders and\n// clipboard history (`media_get/set`). Stored natively; applied live to every tab.\nimport { useEffect, useState } from 'react';\nimport { invoke } from '../frame/bridge.ts';\nimport { useT } from '../frame/hooks.ts';\nimport { CLIP_MAX_LIMIT, clampClipMax, folderLabel, mediaShortcutLabel, withoutFolder, type MediaSettings } from '../frame/mediaModel.ts';\nimport { site } from '../frame/site.ts';\nimport { os } from '../windowControls.ts';\nimport { ChipList, Button, InputRow, Row, Section, Segmented, Stepper, Toggle } from './controls.tsx';\nimport { panelSite, type Notify } from './site.ts';\n\n/** The shell's settings (waybetter-host `ShellSettings`). */\nexport type ShellSettings = {\n homeUrl: string;\n /** Links to other sites: beside the tab (split), a new tab, or the system browser. */\n externalLinks: 'pane' | 'tab' | 'browser';\n /** Site pages clicked in the page: the site's in-place navigation, beside, a new tab, or the system browser. */\n siteLinks: 'same' | 'pane' | 'tab' | 'browser';\n restoreTabs: boolean;\n};\n\nconst getError = (error: unknown) => error instanceof Error ? error.message : String(error);\nconst FOLDER_ICON = <svg width=\"13\" height=\"13\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M2 4.5A1.5 1.5 0 0 1 3.5 3h3l1.5 1.5h4.5A1.5 1.5 0 0 1 14 6v5.5a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 11.5z\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.3\"/></svg>;\n\ntype Opens = 'same' | 'pane' | 'tab' | 'browser';\nconst OPENS: Record<Opens, string> = { same: 'wb.settings.links.opens.same', pane: 'wb.settings.links.opens.pane', tab: 'wb.settings.links.opens.tab', browser: 'wb.settings.links.opens.browser' };\n\n/** Home page, where links open, session restore. Stored natively; read by the tab webviews. */\nexport function BrowserSettings({ notify }: { notify: Notify }) {\n const t = useT();\n const [settings, setSettings] = useState<ShellSettings | null>(null);\n const [home, setHome] = useState('');\n\n useEffect(() => { invoke<ShellSettings>('settings_get').then(value => { setSettings(value); setHome(value.homeUrl); }).catch(err => notify(getError(err), true)); }, []);\n\n async function save(next: ShellSettings, message: string) {\n const previous = settings;\n setSettings(next);\n try { const saved = await invoke<ShellSettings>('settings_set', { settings: next }); setSettings(saved); setHome(saved.homeUrl); notify(message); }\n catch (err) { setSettings(previous); notify(getError(err), true); }\n }\n\n if (!settings) return null;\n const siteHome = site().homeUrl;\n return <Section title={t('wb.settings.links.title')} hint={t('wb.settings.links.hint')}>\n <Row label={t('wb.settings.home.label')} hint={t('wb.settings.home.hint')} keywords=\"new tab start url\" wide>\n <div className=\"bt-inline\">\n <InputRow label={t('wb.settings.home.url')} mono value={home} onChange={setHome} button={t('wb.common.save')} disabled={home === settings.homeUrl}\n onSubmit={() => void save({ ...settings, homeUrl: home }, t('wb.settings.home.saved'))}/>\n {settings.homeUrl !== siteHome && <Button tone=\"ghost\" size=\"sm\" onClick={() => void save({ ...settings, homeUrl: siteHome }, t('wb.settings.home.resetDone'))}>{t('wb.settings.home.reset')}</Button>}\n </div>\n </Row>\n <Row label={t('wb.settings.links.external')} hint={t('wb.settings.links.externalHint')} keywords=\"external open browser pane split side\">\n <Segmented label={t('wb.settings.links.external')} value={settings.externalLinks} onChange={mode => void save({ ...settings, externalLinks: mode }, t('wb.settings.links.externalSaved', { how: t(OPENS[mode as Opens]) }))}\n options={[{ value: 'pane', label: t('wb.settings.links.beside') }, { value: 'tab', label: t('wb.settings.links.newTab') }, { value: 'browser', label: t('wb.settings.links.browser') }]}/>\n </Row>\n <Row label={t('wb.settings.links.site')} hint={t('wb.settings.links.siteHint')} keywords={`${panelSite().settings?.linkKeywords ?? site().name} post profile open pane split side tab`}>\n <Segmented label={t('wb.settings.links.site')} value={settings.siteLinks} onChange={mode => void save({ ...settings, siteLinks: mode }, t('wb.settings.links.siteSaved', { how: t(OPENS[mode as Opens]) }))}\n options={[{ value: 'same', label: t('wb.settings.links.sameTab') }, { value: 'pane', label: t('wb.settings.links.beside') }, { value: 'tab', label: t('wb.settings.links.newTab') }, { value: 'browser', label: t('wb.settings.links.browser') }]}/>\n </Row>\n <Row label={t('wb.settings.restore.label')} hint={t('wb.settings.restore.hint')} keywords=\"session\">\n <Toggle label={t('wb.settings.restore.label')} checked={settings.restoreTabs} onChange={next => void save({ ...settings, restoreTabs: next }, next ? t('wb.settings.restore.on') : t('wb.settings.restore.off'))}/>\n </Row>\n </Section>;\n}\n\ntype Alerts = { enabled: boolean; keywords: string[] };\nexport const parseKeywords = (text: string) => text.split(/[,\\n]/).map(word => word.trim()).filter(Boolean);\nconst MAX_KEYWORDS = 32;\n\n/** Keyword alerts: local OS notifications for keywords in items the site already loaded. Native only. */\nexport function AlertSettings({ notify }: { notify: Notify }) {\n const t = useT();\n const [alerts, setAlerts] = useState<Alerts | null>(null);\n const [text, setText] = useState('');\n\n useEffect(() => { invoke<Alerts>('alerts_get').then(setAlerts).catch(err => notify(getError(err), true)); }, []);\n\n async function save(next: Alerts, message: string) {\n const previous = alerts;\n setAlerts(next);\n try { setAlerts(await invoke<Alerts>('alerts_set', { settings: next })); notify(message); }\n catch (err) { setAlerts(previous); notify(getError(err), true); }\n }\n function add() {\n if (!alerts) return;\n const known = new Set(alerts.keywords.map(word => word.toLowerCase()));\n const fresh = parseKeywords(text).filter(word => !known.has(word.toLowerCase()));\n if (!fresh.length) { setText(''); return; }\n const keywords = [...alerts.keywords, ...fresh].slice(0, MAX_KEYWORDS);\n setText('');\n void save({ ...alerts, keywords }, fresh.length === 1 ? t('wb.settings.alerts.watching', { word: fresh[0]! }) : t('wb.settings.alerts.watchingMore', { count: fresh.length }));\n }\n\n if (!alerts) return null;\n return <Section title={t('wb.settings.alerts.title')} hint={t('wb.settings.alerts.hint')}>\n <Row label={t('wb.settings.alerts.label')} hint={alerts.enabled ? t('wb.settings.alerts.onCount', { count: alerts.keywords.length }) : t('wb.common.off')} keywords=\"keyword notification notify\">\n <Toggle label={t('wb.settings.alerts.title')} checked={alerts.enabled} onChange={next => void save({ ...alerts, enabled: next }, next ? t('wb.settings.alerts.turnedOn') : t('wb.settings.alerts.turnedOff'))}/>\n </Row>\n <Row label={t('wb.settings.alerts.keywords')} hint={t('wb.settings.alerts.keywordsHint', { max: MAX_KEYWORDS })} keywords=\"alert words watch\" wide>\n <div className=\"bt-stack\">\n <ChipList items={alerts.keywords} empty={t('wb.settings.alerts.none')} onRemove={word => void save({ ...alerts, keywords: alerts.keywords.filter(item => item !== word) }, t('wb.settings.alerts.stopped', { word }))}/>\n <InputRow label={t('wb.settings.alerts.add')} placeholder=\"tauri, waybetter\" value={text} onChange={setText} button={t('wb.common.add')} disabled={!parseKeywords(text).length || alerts.keywords.length >= MAX_KEYWORDS} onSubmit={add}/>\n </div>\n </Row>\n </Section>;\n}\n\n/** Gallery folders and the opt-in clipboard history for the Media panel. Native only. */\nexport function MediaSettingsRows({ notify }: { notify: Notify }) {\n const t = useT();\n const [settings, setSettings] = useState<MediaSettings | null>(null);\n useEffect(() => { invoke<MediaSettings>('media_get').then(setSettings).catch(err => notify(getError(err), true)); }, []);\n\n async function save(next: MediaSettings, message?: string) {\n const previous = settings;\n setSettings(next);\n try { setSettings(await invoke<MediaSettings>('media_set', { settings: next })); if (message) notify(message); }\n catch (err) { setSettings(previous); notify(getError(err), true); }\n }\n async function addFolder() {\n try { setSettings(await invoke<MediaSettings>('gallery_add_folder')); }\n catch (err) { notify(getError(err), true); }\n }\n async function clearHistory() {\n try { await invoke('clip_remove', { id: null }); notify(t('wb.settings.media.cleared')); }\n catch (err) { notify(getError(err), true); }\n }\n\n if (!settings) return null;\n return <Section title={t('wb.settings.media.title')} hint={t('wb.settings.media.hint', { shortcut: mediaShortcutLabel(os) })}>\n <Row label={t('wb.settings.media.folders')} hint={t('wb.settings.media.foldersHint')} keywords=\"images pictures screenshots\" wide>\n <div className=\"bt-stack\">\n <ChipList items={settings.folders} icon={FOLDER_ICON} render={folderLabel} empty={t('wb.settings.media.noFolders')}\n onRemove={folder => void save(withoutFolder(settings, folder), t('wb.settings.media.folderRemoved'))}/>\n <div><Button size=\"sm\" onClick={() => void addFolder()} icon={<span aria-hidden=\"true\">+</span>}>{t('wb.settings.media.addFolder')}</Button></div>\n </div>\n </Row>\n <Row label={t('wb.settings.media.clipboard')} hint={t('wb.settings.media.clipboardHint')} keywords=\"copy paste\">\n <Toggle label={t('wb.settings.media.clipboard')} checked={settings.clipboardEnabled} onChange={next => void save({ ...settings, clipboardEnabled: next }, next ? t('wb.settings.media.clipboardOn') : t('wb.settings.media.clipboardOff'))}/>\n </Row>\n {settings.clipboardEnabled && <Row label={t('wb.settings.media.keep')} hint={t('wb.settings.media.keepHint')} keywords=\"clipboard size\">\n <div className=\"bt-inline\">\n <Stepper label={t('wb.settings.media.keep')} value={settings.clipboardMax} min={1} max={CLIP_MAX_LIMIT} onChange={value => void save({ ...settings, clipboardMax: clampClipMax(value) })}/>\n <Button size=\"sm\" tone=\"ghost\" onClick={() => void clearHistory()}>{t('wb.common.clear')}</Button>\n </div>\n </Row>}\n </Section>;\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import '../store.css';
|
|
2
2
|
import { type Notify } from './site.ts';
|
|
3
3
|
import './plugins.css';
|
|
4
|
+
/** The Store with the app's area plugins as switches for its built-in items (an app without a feature table has none). */
|
|
4
5
|
export declare function StoreSection({ notify }: {
|
|
5
6
|
notify: Notify;
|
|
6
|
-
}): import("react").JSX.Element
|
|
7
|
+
}): import("react").JSX.Element;
|