UNPKG

react-fontpicker-ts-lite

Version:

A Google font picker component for React

2,436 lines (2,428 loc) 52.9 kB
"use strict"; var __defProp = Object.defineProperty; var __defProps = Object.defineProperties; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropDescs = Object.getOwnPropertyDescriptors; var __getOwnPropNames = Object.getOwnPropertyNames; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) { if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]); } return a; }; var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); var __objRest = (source, exclude) => { var target = {}; for (var prop in source) if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) target[prop] = source[prop]; if (source != null && __getOwnPropSymbols) for (var prop of __getOwnPropSymbols(source)) { if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) target[prop] = source[prop]; } return target; }; var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; // font-preview/font-previews.css var init_font_previews = __esm({ "font-preview/font-previews.css"() { } }); // src/components/FontPreviews.tsx var FontPreviews_exports = {}; __export(FontPreviews_exports, { default: () => FontPreviews_default }); var import_jsx_runtime, FontPreviews, FontPreviews_default; var init_FontPreviews = __esm({ "src/components/FontPreviews.tsx"() { "use strict"; init_font_previews(); import_jsx_runtime = require("react/jsx-runtime"); FontPreviews = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children }); FontPreviews_default = FontPreviews; } }); // index.ts var index_exports = {}; __export(index_exports, { default: () => FontPicker, toString: () => toString }); module.exports = __toCommonJS(index_exports); // src/components/FontPicker.tsx var import_react = require("react"); // font-preview/fontInfo.json var fontInfo_default = [ { category: "display", name: "Abril Fatface", sane: "abril_fatface", variants: [ "0,400" ], subsets: [ "latin", "latin-ext" ] }, { category: "serif", name: "Alegreya", sane: "alegreya", variants: [ "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Alegreya Sans", sane: "alegreya_sans", variants: [ "0,100", "1,100", "0,300", "1,300", "0,400", "1,400", "0,500", "1,500", "0,700", "1,700", "0,800", "1,800", "0,900", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Archivo Narrow", sane: "archivo_narrow", variants: [ "0,400", "0,500", "0,600", "0,700", "1,400", "1,500", "1,600", "1,700" ], subsets: [ "latin", "latin-ext", "vietnamese" ] }, { category: "monospace", name: "Azeret Mono", sane: "azeret_mono", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "latin", "latin-ext" ] }, { category: "handwriting", name: "Bad Script", sane: "bad_script", variants: [ "0,400" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "BioRhyme", sane: "biorhyme", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800" ], subsets: [ "latin", "latin-ext" ] }, { category: "serif", name: "Bitter", sane: "bitter", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Cardo", sane: "cardo", variants: [ "0,400", "1,400", "0,700" ], subsets: [ "greek", "greek-ext", "latin", "latin-ext" ] }, { category: "sans-serif", name: "Chivo", sane: "chivo", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "latin", "latin-ext", "vietnamese" ] }, { category: "handwriting", name: "Comic Neue", sane: "comic_neue", variants: [ "0,300", "1,300", "0,400", "1,400", "0,700", "1,700" ], subsets: [ "latin" ] }, { category: "serif", name: "Cormorant", sane: "cormorant", variants: [ "0,300", "0,400", "0,500", "0,600", "0,700", "1,300", "1,400", "1,500", "1,600", "1,700" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "handwriting", name: "Dancing Script", sane: "dancing_script", variants: [ "0,400", "0,500", "0,600", "0,700" ], subsets: [ "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "DM Sans", sane: "dm_sans", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "latin", "latin-ext" ] }, { category: "serif", name: "DM Serif Display", sane: "dm_serif_display", variants: [ "0,400", "1,400" ], subsets: [ "latin", "latin-ext" ] }, { category: "serif", name: "DM Serif Text", sane: "dm_serif_text", variants: [ "0,400", "1,400" ], subsets: [ "latin", "latin-ext" ] }, { category: "serif", name: "Eczar", sane: "eczar", variants: [ "0,400", "0,500", "0,600", "0,700", "0,800" ], subsets: [ "devanagari", "greek", "greek-ext", "latin", "latin-ext" ] }, { category: "sans-serif", name: "Familjen Grotesk", sane: "familjen_grotesk", variants: [ "0,400", "0,500", "0,600", "0,700", "1,400", "1,500", "1,600", "1,700" ], subsets: [ "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Fira Sans", sane: "fira_sans", variants: [ "0,100", "1,100", "0,200", "1,200", "0,300", "1,300", "0,400", "1,400", "0,500", "1,500", "0,600", "1,600", "0,700", "1,700", "0,800", "1,800", "0,900", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Fraunces", sane: "fraunces", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "IBM Plex Sans", sane: "ibm_plex_sans", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "latin", "latin-ext", "vietnamese" ] }, { category: "monospace", name: "Inconsolata", sane: "inconsolata", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900" ], subsets: [ "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Inknut Antiqua", sane: "inknut_antiqua", variants: [ "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900" ], subsets: [ "devanagari", "latin", "latin-ext" ] }, { category: "sans-serif", name: "Inter", sane: "inter", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Josefin Sans", sane: "josefin_sans", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700" ], subsets: [ "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Josefin Slab", sane: "josefin_slab", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700" ], subsets: [ "latin" ] }, { category: "sans-serif", name: "Karla", sane: "karla", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800" ], subsets: [ "latin", "latin-ext" ] }, { category: "sans-serif", name: "Lato", sane: "lato", variants: [ "0,100", "1,100", "0,300", "1,300", "0,400", "1,400", "0,700", "1,700", "0,900", "1,900" ], subsets: [ "latin", "latin-ext" ] }, { category: "serif", name: "Libre Baskerville", sane: "libre_baskerville", variants: [ "0,400", "1,400", "0,700" ], subsets: [ "latin", "latin-ext" ] }, { category: "sans-serif", name: "Libre Franklin", sane: "libre_franklin", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Literata", sane: "literata", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Lora", sane: "lora", variants: [ "0,400", "0,500", "0,600", "0,700", "1,400", "1,500", "1,600", "1,700" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "math", "symbols", "vietnamese" ] }, { category: "sans-serif", name: "Manrope", sane: "manrope", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Merriweather", sane: "merriweather", variants: [ "0,300", "1,300", "0,400", "1,400", "0,700", "1,700", "0,900", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Montserrat", sane: "montserrat", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Mukta", sane: "mukta", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800" ], subsets: [ "devanagari", "latin", "latin-ext" ] }, { category: "serif", name: "Neuton", sane: "neuton", variants: [ "0,200", "0,300", "0,400", "1,400", "0,700", "0,800" ], subsets: [ "latin", "latin-ext" ] }, { category: "display", name: "New Rocker", sane: "new_rocker", variants: [ "0,400" ], subsets: [ "latin", "latin-ext" ] }, { category: "serif", name: "Newsreader", sane: "newsreader", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800" ], subsets: [ "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Noto Sans JP", sane: "noto_sans_jp", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900" ], subsets: [ "cyrillic", "japanese", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Nunito", sane: "nunito", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Nunito Sans", sane: "nunito_sans", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Old Standard TT", sane: "old_standard_tt", variants: [ "0,400", "1,400", "0,700" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Open Sans", sane: "open_sans", variants: [ "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "hebrew", "latin", "latin-ext", "math", "symbols", "vietnamese" ] }, { category: "sans-serif", name: "Oswald", sane: "oswald", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Outfit", sane: "outfit", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900" ], subsets: [ "latin", "latin-ext" ] }, { category: "sans-serif", name: "Overpass", sane: "overpass", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Playfair Display", sane: "playfair_display", variants: [ "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Plus Jakarta Sans", sane: "plus_jakarta_sans", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800" ], subsets: [ "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Poppins", sane: "poppins", variants: [ "0,100", "1,100", "0,200", "1,200", "0,300", "1,300", "0,400", "1,400", "0,500", "1,500", "0,600", "1,600", "0,700", "1,700", "0,800", "1,800", "0,900", "1,900" ], subsets: [ "latin", "latin-ext" ] }, { category: "sans-serif", name: "Proza Libre", sane: "proza_libre", variants: [ "0,400", "1,400", "0,500", "1,500", "0,600", "1,600", "0,700", "1,700", "0,800", "1,800" ], subsets: [ "latin", "latin-ext" ] }, { category: "sans-serif", name: "PT Sans", sane: "pt_sans", variants: [ "0,400", "1,400", "0,700", "1,700" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ] }, { category: "serif", name: "PT Serif", sane: "pt_serif", variants: [ "0,400", "1,400", "0,700", "1,700" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ] }, { category: "sans-serif", name: "Rajdhani", sane: "rajdhani", variants: [ "0,300", "0,400", "0,500", "0,600", "0,700" ], subsets: [ "devanagari", "latin", "latin-ext" ] }, { category: "sans-serif", name: "Raleway", sane: "raleway", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Roboto", sane: "roboto", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "math", "symbols", "vietnamese" ] }, { category: "sans-serif", name: "Roboto Condensed", sane: "roboto_condensed", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "monospace", name: "Roboto Mono", sane: "roboto_mono", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Roboto Serif", sane: "roboto_serif", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Roboto Slab", sane: "roboto_slab", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Rubik", sane: "rubik", variants: [ "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "arabic", "cyrillic", "cyrillic-ext", "hebrew", "latin", "latin-ext" ] }, { category: "handwriting", name: "Sacramento", sane: "sacramento", variants: [ "0,400" ], subsets: [ "latin", "latin-ext" ] }, { category: "sans-serif", name: "Source Sans 3", sane: "source_sans_3", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Source Serif 4", sane: "source_serif_4", variants: [ "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Space Grotesk", sane: "space_grotesk", variants: [ "0,300", "0,400", "0,500", "0,600", "0,700" ], subsets: [ "latin", "latin-ext", "vietnamese" ] }, { category: "monospace", name: "Space Mono", sane: "space_mono", variants: [ "0,400", "1,400", "0,700", "1,700" ], subsets: [ "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Spectral", sane: "spectral", variants: [ "0,200", "1,200", "0,300", "1,300", "0,400", "1,400", "0,500", "1,500", "0,600", "1,600", "0,700", "1,700", "0,800", "1,800" ], subsets: [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Syne", sane: "syne", variants: [ "0,400", "0,500", "0,600", "0,700", "0,800" ], subsets: [ "greek", "latin", "latin-ext" ] }, { category: "handwriting", name: "Tangerine", sane: "tangerine", variants: [ "0,400", "0,700" ], subsets: [ "latin" ] }, { category: "sans-serif", name: "Ubuntu", sane: "ubuntu", variants: [ "0,300", "1,300", "0,400", "1,400", "0,500", "1,500", "0,700", "1,700" ], subsets: [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext" ] }, { category: "serif", name: "Ultra", sane: "ultra", variants: [ "0,400" ], subsets: [ "latin", "latin-ext" ] }, { category: "display", name: "UnifrakturMaguntia", sane: "unifrakturmaguntia", variants: [ "0,400" ], subsets: [ "latin" ] }, { category: "sans-serif", name: "Varela Round", sane: "varela_round", variants: [ "0,400" ], subsets: [ "hebrew", "latin", "latin-ext", "vietnamese" ] }, { category: "sans-serif", name: "Work Sans", sane: "work_sans", variants: [ "0,100", "0,200", "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "0,900", "1,100", "1,200", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800", "1,900" ], subsets: [ "latin", "latin-ext", "vietnamese" ] }, { category: "serif", name: "Zilla Slab", sane: "zilla_slab", variants: [ "0,300", "1,300", "0,400", "1,400", "0,500", "1,500", "0,600", "1,600", "0,700", "1,700" ], subsets: [ "latin", "latin-ext" ] } ]; // src/lib/fontChecker.ts function checkLoaded(_0) { return __async(this, arguments, function* ({ fontFamily, fontStyle, fontWeight, timeout = 500 }) { const start = (/* @__PURE__ */ new Date()).getTime(); let timeoutId; return new Promise(function(resolve, reject) { if (document == null ? void 0 : document.fonts) { const checker = new Promise(function(resolve2, reject2) { const check = function() { const now = (/* @__PURE__ */ new Date()).getTime(); if (now - start >= timeout) { reject2(new Error(`Font not loaded within ${timeout} ms`)); } else { const loaded = document.fonts.check(`${fontStyle != null ? fontStyle : ""} ${fontWeight != null ? fontWeight : ""} 0 ${fontFamily}`); if (loaded) { resolve2(true); } else { setTimeout(check, 25); } } }; check(); }); const timer = new Promise(function(resolve2, reject2) { timeoutId = setTimeout(() => reject2(new Error(`Font not loaded within ${timeout} ms`)), timeout); }); Promise.race([timer, checker]).then((value) => { clearTimeout(timeoutId); resolve(value); }, reject); } else { reject(new Error("Fonts API not supported by client")); } }); }); } // src/lib/util.ts function sanify(fontName) { return fontName.replace(/\s+/g, "_").replace(/[^a-zA-Z0-9-_]/g, "").toLowerCase(); } // src/components/FontPicker.tsx var import_jsx_runtime2 = require("react/jsx-runtime"); var FontPreviews2 = (0, import_react.lazy)(() => Promise.resolve().then(() => (init_FontPreviews(), FontPreviews_exports))); function toString(v) { if (typeof v === "string") { return v; } return (v.italic ? "1" : "0") + "," + v.weight; } var defaultFont = { category: "sans-serif", name: "Open Sans", sane: "open_sans", cased: "open sans", variants: [ "0,300", "0,400", "0,500", "0,600", "0,700", "0,800", "1,300", "1,400", "1,500", "1,600", "1,700", "1,800" ] }; function FontPicker(_a) { var _b = _a, { defaultValue = "Open Sans", noMatches = "No matches", autoLoad = false, loaderOnly = false, loadAllVariants = false, loadFonts = "", googleFonts = "all", fontCategories = "all", localFonts = [], mode = "combo", fontVariants, value, fontsLoaded, fontsLoadedTimeout, loading = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: "Font previews loading ..." }), inputId } = _b, rest = __objRest(_b, [ "defaultValue", "noMatches", "autoLoad", "loaderOnly", "loadAllVariants", "loadFonts", "googleFonts", "fontCategories", "localFonts", "mode", "fontVariants", "value", "fontsLoaded", "fontsLoadedTimeout", "loading", "inputId" ]); var _a2, _b2, _c; const [focused, setFocused] = (0, import_react.useState)(false); const [selectedFontIndex, setSelectedFontIndex] = (0, import_react.useState)(-1); const [currentFontIndex, setCurrentFontIndex] = (0, import_react.useState)(-1); const prevLoadFontsRef = (0, import_react.useRef)([]); const inputRef = (0, import_react.useRef)(null); const popoutRef = (0, import_react.useRef)(null); const previewRef = (0, import_react.useRef)(null); const handleLoadFont = () => { if (typeof loadFonts === "string") { if (loadFonts !== "") { const fontNames = loadFonts.trim().split(","); fontNames == null ? void 0 : fontNames.forEach((fontName) => { if (!prevLoadFontsRef.current.includes(fontName)) { prevLoadFontsRef.current.push(fontName); loadFontByName(fontName); } }); } } else { loadFonts.forEach((font) => { const fontName = typeof font === "string" ? font : font == null ? void 0 : font.fontName; if (!fontName) { return; } if (!prevLoadFontsRef.current.includes(fontName)) { prevLoadFontsRef.current.push(fontName); if (typeof font === "object" && font.variants) { loadFontByName( fontName, font.variants.map((v) => toString(v)) ); } else { loadFontByName(fontName); } } }); } }; const loadFontsFontNames = (0, import_react.useMemo)(() => { const names = []; if (loadFonts) { if (typeof loadFonts === "string") { names.push(loadFonts); } else { loadFonts == null ? void 0 : loadFonts.forEach((font) => { const fontName = typeof font === "string" ? font : font == null ? void 0 : font.fontName; if (!fontName) { return; } names.push(fontName); }); } } return names; }, [loadFonts]); const fontPickerOptionsRef = (0, import_react.useRef)(null); const saveOptionsRef = (key) => (node) => { const map = getOptionsRef(); if (node) { map.set(key, node); } else { map.delete(key); } }; const getOptionsRef = () => { if (!fontPickerOptionsRef.current) { fontPickerOptionsRef.current = /* @__PURE__ */ new Map(); } return fontPickerOptionsRef.current; }; const outerClasses = () => { const ret = ["fontpicker"]; return ret; }; const popoutClasses = () => { const ret = ["fontpicker__popout"]; if (focused) { ret.push("fontpicker__active"); } return [...ret]; }; const previewClasses = () => { const ret = ["fontpicker__preview"]; ret.push("font-preview-" + current.sane); return [...ret]; }; const allGoogleFonts = (0, import_react.useMemo)(() => { const ifonts = []; fontInfo_default.forEach((info) => { const font = __spreadProps(__spreadValues({}, info), { cased: info.name.toLowerCase() }); ifonts.push(font); }); return [...ifonts]; }, []); const fonts = (0, import_react.useMemo)(() => { var _a3; let activeFonts; if (googleFonts === "all") { activeFonts = [...allGoogleFonts]; } else if (typeof googleFonts === "string") { const fontNames = googleFonts.trim().split(",").map((v) => v.toLowerCase()); activeFonts = [...allGoogleFonts.filter((a) => fontNames.includes(a.cased))]; } else if (typeof googleFonts === "function") { activeFonts = [...allGoogleFonts.filter(googleFonts)]; } else { const fontNames = (_a3 = googleFonts == null ? void 0 : googleFonts.map((v) => { if (typeof v === "string") { return v.toLowerCase(); } else { return v.cased; } })) != null ? _a3 : []; activeFonts = [...allGoogleFonts.filter((a) => fontNames.includes(a.cased))]; } localFonts.forEach((font) => { activeFonts.push({ category: font.category, name: font.name, cased: font.name.toLowerCase(), sane: sanify(font.name), variants: font.variants.map((v) => toString(v)), isLocal: true }); }); let activeFontsInCategory; if (fontCategories === "all") { activeFontsInCategory = [...activeFonts]; } else if (typeof fontCategories === "string") { const newFontCategories = fontCategories.trim().split(",").map((v) => v.trim().toLowerCase()); activeFontsInCategory = [...allGoogleFonts.filter((a) => newFontCategories.includes(a.category))]; } else { const newFontCategories = fontCategories.map((v) => v.toLowerCase()); activeFontsInCategory = [...allGoogleFonts.filter((a) => newFontCategories.includes(a.category))]; } return [...activeFontsInCategory]; }, [googleFonts, allGoogleFonts, localFonts, fontCategories]); const saneDefaultValue = (0, import_react.useMemo)(() => { const search = defaultValue.toLowerCase().trim(); if (!fonts || (fonts == null ? void 0 : fonts.length) <= 0) { return defaultValue; } if (fonts.some((a) => a.cased === search)) { return defaultValue; } return fonts[0].name; }, [fonts, defaultValue]); const [typedSearch, setTypedSearch] = (0, import_react.useState)(saneDefaultValue); const [searchContent, setSearchContent] = (0, import_react.useState)(saneDefaultValue); const matchingFonts = (0, import_react.useMemo)(() => { const search = typedSearch.toLowerCase().trim(); return fonts.filter((a) => a.cased.includes(search)); }, [typedSearch, fonts]); const cancelBlur = (e) => { e.preventDefault(); }; const searchChanged = (e) => { var _a3, _b3; if ((_a3 = popoutRef == null ? void 0 : popoutRef.current) == null ? void 0 : _a3.scrollTop) { popoutRef.current.scrollTop = 0; } const newValue = (_b3 = e.currentTarget) == null ? void 0 : _b3.value; setSelectedFontIndex(-1); const isLonger = typedSearch.length < (newValue == null ? void 0 : newValue.length); setTypedSearch(newValue); if (!isLonger) { setSearchContent(newValue); return; } const cased = newValue.toLowerCase(); const matches = fonts.filter((a) => a.cased.startsWith(cased)); if (matches == null ? void 0 : matches.length) { const firstMatch = matches[0].name; if (e.currentTarget) { e.currentTarget.value = firstMatch; } setInputSelection(e.currentTarget, newValue.length, firstMatch.length); setSearchContent(firstMatch); } else { setSearchContent(newValue); } }; const setInputSelection = (input, startPos, endPos) => { if (input.setSelectionRange) { input.setSelectionRange(startPos, endPos); } }; const onKeyDown = (e) => { if (e.key && e.key === "Enter") { const cased = searchContent.toLowerCase(); const preciseMatches = fonts.filter((a) => a.cased === cased); if (selectedFontIndex > -1) { setCurrent(matchingFonts[selectedFontIndex]); } else if (preciseMatches.length === 1) { setCurrent(preciseMatches[0]); } else if (matchingFonts.length > 0) { setCurrent(matchingFonts[0]); } else { setCurrent(current); } } else if (e.key && e.key === "ArrowDown") { e.preventDefault(); if (selectedFontIndex < matchingFonts.length - 1) { setSearchContent(typedSearch); const prevSelectedFontIndex = selectedFontIndex; setSelectedFontIndex((prev) => prev + 1); showSelectedFont("key", prevSelectedFontIndex + 1); } } else if (e.key && e.key === "ArrowUp") { e.preventDefault(); if (selectedFontIndex > 0) { setSearchContent(typedSearch); const prevSelectedFontIndex = selectedFontIndex; setSelectedFontIndex((prev) => prev - 1); showSelectedFont("key", prevSelectedFontIndex - 1); } } else if (e.key && e.key === "Escape") { hide(); } }; const onKeyDownList = (e) => { if (e.key && e.key === "Enter") { if (selectedFontIndex > -1) { setCurrent(fonts[selectedFontIndex]); } else { setCurrent(current); } } else if (e.key && e.key === "ArrowDown") { e.preventDefault(); if (selectedFontIndex < fonts.length - 1) { setSelectedFontIndex((prev) => prev + 1); } } else if (e.key && e.key === "ArrowUp") { e.preventDefault(); if (selectedFontIndex > 0) { setSelectedFontIndex((prev) => prev - 1); } } }; const showSelectedFont = (why = "key", index = selectedFontIndex) => { var _a3; const popout = popoutRef == null ? void 0 : popoutRef.current; if (popout && index >= 0) { const selectedFont = matchingFonts[index]; if (selectedFont) { const fontPreviewElement = popout.querySelector(".font-preview-" + selectedFont.sane); const fontOptionElement = fontPreviewElement == null ? void 0 : fontPreviewElement.parentElement; if (fontOptionElement && fontOptionElement instanceof HTMLElement) { const fontTop = fontOptionElement.offsetTop; const fontBottom = fontTop + fontOptionElement.offsetHeight; const popTop = popout.scrollTop; const popBottom = popTop + popout.clientHeight; if (why === "opening" || fontTop <= popTop) { popout.scrollTop = fontTop; fontOptionElement.classList.add("selected"); const optionRef = (_a3 = getOptionsRef()) == null ? void 0 : _a3.get(selectedFont.sane); optionRef == null ? void 0 : optionRef.classList.add("selected"); } else if (fontBottom >= popBottom) { popout.scrollTop = fontBottom - popout.clientHeight - 1; } } } } }; const onFocus = () => { var _a3; (_a3 = inputRef == null ? void 0 : inputRef.current) == null ? void 0 : _a3.select(); setTypedSearch(""); show(); }; const onClick = (font) => { setCurrent(font); hide(); }; const show = () => { if (!focused) { setFocused(true); setTimeout(() => { let newSelectedFontIndex = selectedFontIndex; for (const [i, font] of matchingFonts.entries()) { if (font.name === current.name) { newSelectedFontIndex = i; setSelectedFontIndex(i); break; } } setSearchContent(current.name); showSelectedFont("opening", newSelectedFontIndex); }, 1); } }; const hide = () => { var _a3; (_a3 = inputRef == null ? void 0 : inputRef.current) == null ? void 0 : _a3.blur(); setFocused(false); }; const getFontByName = (0, import_react.useCallback)( (name) => { let found = null; fonts.forEach((font) => { if (font.name === name.trim()) { found = font; } }); return found; }, [fonts] ); const setCurrent = (font) => { var _a3; setCurrentState(font); setTypedSearch(font.name); setSearchContent(font.name); (_a3 = inputRef == null ? void 0 : inputRef.current) == null ? void 0 : _a3.blur(); autoLoadFont(font); emitFontVariants(font); emitValue(font); setCurrentFontIndex(fontIndex(font)); }; const fontIndex = (0, import_react.useCallback)( (font) => { var _a3, _b3; let idx; if (mode === "list") { idx = (_a3 = fonts == null ? void 0 : fonts.findIndex((f) => f.name === font.name)) != null ? _a3 : -1; } else { idx = (_b3 = matchingFonts == null ? void 0 : matchingFonts.findIndex((f) => f.name === font.name)) != null ? _b3 : -1; } if (idx < 0) { idx = 0; } return idx; }, [fonts, matchingFonts, mode] ); const emitFontVariants = (0, import_react.useCallback)( (font) => { if ((font == null ? void 0 : font.name) && (font == null ? void 0 : font.variants)) { fontVariants == null ? void 0 : fontVariants({ fontName: font.name, variants: font.variants }); } }, [fontVariants] ); const emitValue = (0, import_react.useCallback)( (font) => { if (font == null ? void 0 : font.name) { value == null ? void 0 : value(font.name); } }, [value] ); const emitFontLoaded = (0, import_react.useCallback)( (isLoaded) => { fontsLoaded == null ? void 0 : fontsLoaded(isLoaded); }, [fontsLoaded] ); const loadFontFromObject = (0, import_react.useCallback)( (font, variants = []) => { if (font == null ? void 0 : font.isLocal) { return; } if ((variants == null ? void 0 : variants.length) > 0) { variants = font.variants.filter((v) => variants.includes(v)); } else if (loadAllVariants) { variants = font.variants; } else { variants = getFourVariants(font.variants.map((v) => toString(v))); } let cssId = "google-font-" + font.sane; const cssIdAll = cssId + "-all"; if (variants.length === font.variants.length) { cssId = cssIdAll; } else { cssId += "-" + variants.sort().join("-").replaceAll("1,", "i").replaceAll("0,", ""); } const existing = document.getElementById(cssId); const existingAll = document.getElementById(cssIdAll); if (!existing && !existingAll && (font == null ? void 0 : font.name) && (variants == null ? void 0 : variants.length) > 0) { const link = document.createElement("link"); link.rel = "stylesheet"; link.id = cssId; link.href = "https://fonts.googleapis.com/css2?family=" + font.name + ":ital,wght@" + variants.sort().join(";") + "&display=swap"; link.setAttribute("data-testid", cssId); document.head.appendChild(link); } }, [loadAllVariants] ); const autoLoadFont = (0, import_react.useCallback)( (font) => { if (autoLoad) { loadFontFromObject(font); } }, [autoLoad, loadFontFromObject] ); const loadFontByName = (font, variants = []) => { if (font === "") { return; } let loaded = font; if (typeof font === "string") { loaded = getFontByName(font); } if (loaded === null || typeof loaded !== "object" || typeof loaded.sane !== "string") { console.error("Unknown font", font); } else if (loaded.variants.length < 1) { console.error("No valid variants of font", variants); } else { loadFontFromObject(loaded, variants); } }; const getFourVariants = (variants) => { const regularWeights = variants.filter((v) => v.substring(0, 2) === "0,").map((v) => parseInt(v.substring(2))).sort((a, b) => a - b); const italicWeights = variants.filter((v) => v.substring(0, 2) === "1,").map((v) => parseInt(v.substring(2))).sort((a, b) => a - b); const fourFonts = {}; fourFonts.regular = regularWeights.sort((a, b) => Math.abs(399 - a) - Math.abs(399 - b)).shift(); fourFonts.bold = regularWeights.filter((v) => v > (fourFonts.regular || 0)).sort((a, b) => Math.abs(700 - a) - Math.abs(700 - b)).shift(); fourFonts.italic = italicWeights.sort((a, b) => Math.abs(399 - a) - Math.abs(399 - b)).shift(); fourFonts.boldItalic = italicWeights.filter((v) => v > (fourFonts.italic || 0)).sort((a, b) => Math.abs(700 - a) - Math.abs(700 - b)).shift(); const fourVariants = []; if (fourFonts.regular) { fourVariants.push("0," + fourFonts.regular); } if (fourFonts.bold) { fourVariants.push("0," + fourFonts.bold); } if (fourFonts.italic) { fourVariants.push("1," + fourFonts.italic); } if (fourFonts.boldItalic) { fourVariants.push("1," + fourFonts.boldItalic); } return fourVariants; }; const defaultCurrent = getFontByName(saneDefaultValue) || defaultFont; const [current, setCurrentState] = (0, import_react.useState)(defaultCurrent); handleLoadFont(); (0, import_react.useEffect)(() => { setCurrent(defaultCurrent); }, [defaultCurrent]); (0, import_react.useEffect)(() => { function callCheckLoaded(fontNames) { return __async(this, null, function* () { try { const promises = fontNames == null ? void 0 : fontNames.map((font) => __async(this, null, function* () { try { const fontLoaded = yield checkLoaded({ fontFamily: font, timeout: fontsLoadedTimeout }); return fontLoaded; } catch (e) { return false; } })); const results = yield Promise.all(promises); const allLoaded = !results.some((res) => !res); emitFontLoaded(allLoaded); } catch (e) { console.error(`Exception thrown checking if font families loaded`); console.error(e); emitFontLoaded(false); } }); } const fontsToCheck = [.../* @__PURE__ */ new Set([current.name, ...loadFontsFontNames])]; if (fontsLoaded) { call