google-font-switcher 0.1.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.
@@ -0,0 +1,140 @@
1
+ // src/loader.ts
2
+ var loaded = /* @__PURE__ */ new Set();
3
+ var pending = /* @__PURE__ */ new Map();
4
+ function variantFor(weight, style) {
5
+ if (style === "italic") return weight === 400 ? "italic" : `${weight}italic`;
6
+ return weight === 400 ? "regular" : `${weight}`;
7
+ }
8
+ function key(family, weight, style, preview) {
9
+ return `${preview ? "preview" : "font"}:${family.toLowerCase()}:${weight}:${style}`;
10
+ }
11
+ function previewFamily(family) {
12
+ return `__google_font_menu__${family}`;
13
+ }
14
+ function register({ family, source, weight, style, cacheKey }) {
15
+ if (typeof document === "undefined" || loaded.has(cacheKey)) return Promise.resolve();
16
+ const current = pending.get(cacheKey);
17
+ if (current) return current;
18
+ const task = (async () => {
19
+ const face = new FontFace(family, `url("${source}") format("woff2")`, {
20
+ weight: String(weight),
21
+ style,
22
+ display: "swap"
23
+ });
24
+ document.fonts.add(await face.load());
25
+ loaded.add(cacheKey);
26
+ })();
27
+ pending.set(cacheKey, task);
28
+ return task.catch((error) => {
29
+ loaded.delete(cacheKey);
30
+ throw error;
31
+ }).finally(() => pending.delete(cacheKey));
32
+ }
33
+ async function loadGoogleFontPreview(font) {
34
+ if (!font.menu) throw new Error(`Google Fonts menu file is unavailable for ${font.family}.`);
35
+ const family = previewFamily(font.family);
36
+ await register({ family, source: font.menu, weight: 400, style: "normal", cacheKey: key(font.family, 400, "normal", true) });
37
+ return family;
38
+ }
39
+ async function loadGoogleFont(font, weight = 400, style = "normal") {
40
+ const source = font.files[variantFor(weight, style)] ?? (style === "italic" ? font.files.italic : void 0) ?? font.files.regular;
41
+ if (!source) throw new Error(`Google Fonts file is unavailable for ${font.family} (${weight}, ${style}).`);
42
+ await register({ family: font.family, source, weight, style, cacheKey: key(font.family, weight, style, false) });
43
+ }
44
+ function googleFontCssFamily(family) {
45
+ return `"${family.replace(/"/g, '\\"')}", system-ui, sans-serif`;
46
+ }
47
+
48
+ // src/google-font-picker.tsx
49
+ import { useDeferredValue, useEffect, useMemo, useRef, useState } from "react";
50
+ import { jsx, jsxs } from "react/jsx-runtime";
51
+ var defaults = { search: "Search Google Fonts", empty: "No fonts found", loading: "Loading font..." };
52
+ var rowHeight = 56;
53
+ var overscan = 3;
54
+ function GoogleFontPicker({ fonts, resolver, value, onChange, maxResults = 60, disabled = false, className, labels }) {
55
+ const root = useRef(null);
56
+ const [open, setOpen] = useState(false);
57
+ const [query, setQuery] = useState("");
58
+ const [loading, setLoading] = useState(false);
59
+ const [scrollTop, setScrollTop] = useState(0);
60
+ const deferredQuery = useDeferredValue(query);
61
+ const text = { ...defaults, ...labels };
62
+ const results = useMemo(() => {
63
+ const term = deferredQuery.trim().toLowerCase();
64
+ return fonts.filter((font) => !term || font.family.toLowerCase().includes(term)).slice(0, maxResults);
65
+ }, [deferredQuery, fonts, maxResults]);
66
+ const visibleRange = useMemo(() => {
67
+ const start = Math.max(0, Math.floor(scrollTop / rowHeight) - overscan);
68
+ const end = Math.min(results.length, Math.ceil((scrollTop + 320) / rowHeight) + overscan);
69
+ return { start, end };
70
+ }, [results.length, scrollTop]);
71
+ useEffect(() => setScrollTop(0), [deferredQuery]);
72
+ useEffect(() => {
73
+ function close(event) {
74
+ if (root.current && !root.current.contains(event.target)) setOpen(false);
75
+ }
76
+ document.addEventListener("mousedown", close);
77
+ return () => document.removeEventListener("mousedown", close);
78
+ }, []);
79
+ async function select(font) {
80
+ const variants = font.variants ?? [];
81
+ const weight = nearestWeight(variants, value.weight);
82
+ const style = value.style === "italic" && hasItalic(variants, weight) ? "italic" : "normal";
83
+ onChange({ family: font.family, weight, style });
84
+ setOpen(false);
85
+ setQuery("");
86
+ schedule(() => {
87
+ resolver(font.family).then((full) => loadGoogleFont(full, weight, style)).catch(() => void 0);
88
+ });
89
+ }
90
+ return /* @__PURE__ */ jsxs("div", { ref: root, className: ["gfs-picker", className].filter(Boolean).join(" "), children: [
91
+ /* @__PURE__ */ jsxs("button", { type: "button", className: "gfs-trigger", disabled: disabled || loading, "aria-expanded": open, "aria-haspopup": "listbox", onClick: () => setOpen((next) => !next), children: [
92
+ /* @__PURE__ */ jsx("span", { style: { fontFamily: googleFontCssFamily(value.family), fontWeight: value.weight, fontStyle: value.style }, children: value.family }),
93
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\u2304" })
94
+ ] }),
95
+ open && /* @__PURE__ */ jsxs("div", { className: "gfs-popover", children: [
96
+ /* @__PURE__ */ jsx("input", { className: "gfs-search", autoFocus: true, value: query, placeholder: text.search, onChange: (event) => setQuery(event.target.value) }),
97
+ /* @__PURE__ */ jsxs("div", { className: "gfs-list", role: "listbox", onScroll: (event) => setScrollTop(event.currentTarget.scrollTop), children: [
98
+ results.length === 0 && /* @__PURE__ */ jsx("div", { className: "gfs-empty", children: text.empty }),
99
+ /* @__PURE__ */ jsx("div", { className: "gfs-virtual-content", style: { height: results.length * rowHeight }, children: results.slice(visibleRange.start, visibleRange.end).map((font, offset) => /* @__PURE__ */ jsx(FontOption, { top: (visibleRange.start + offset) * rowHeight, font, selected: font.family === value.family, disabled: loading, loadingLabel: text.loading, onSelect: () => void select(font) }, font.family)) })
100
+ ] })
101
+ ] })
102
+ ] });
103
+ }
104
+ function schedule(task) {
105
+ const idleWindow = window;
106
+ if (idleWindow.requestIdleCallback) {
107
+ idleWindow.requestIdleCallback(task, { timeout: 500 });
108
+ return;
109
+ }
110
+ window.setTimeout(task, 0);
111
+ }
112
+ function FontOption({ font, top, selected, disabled, loadingLabel, onSelect }) {
113
+ const [previewFamily2, setPreviewFamily] = useState();
114
+ useEffect(() => {
115
+ if (!font.menu) return;
116
+ let active = true;
117
+ loadGoogleFontPreview(font).then((family) => active && setPreviewFamily(family)).catch(() => void 0);
118
+ return () => {
119
+ active = false;
120
+ };
121
+ }, [font]);
122
+ return /* @__PURE__ */ jsxs("button", { type: "button", className: "gfs-option", style: { transform: `translateY(${top}px)` }, role: "option", "aria-selected": selected, disabled, onClick: onSelect, children: [
123
+ /* @__PURE__ */ jsx("span", { className: "gfs-preview", style: previewFamily2 ? { fontFamily: googleFontCssFamily(previewFamily2) } : void 0, children: font.family }),
124
+ /* @__PURE__ */ jsx("span", { className: "gfs-meta", children: disabled ? loadingLabel : selected ? "Selected" : font.category })
125
+ ] });
126
+ }
127
+ function hasItalic(variants, weight) {
128
+ return variants.includes(weight === 400 ? "italic" : `${weight}italic`);
129
+ }
130
+ function nearestWeight(variants, target) {
131
+ const weights = [100, 200, 300, 400, 500, 600, 700, 800, 900].filter((weight) => variants.includes(weight === 400 ? "regular" : String(weight)) || hasItalic(variants, weight));
132
+ return weights.reduce((closest, weight) => Math.abs(weight - target) < Math.abs(closest - target) ? weight : closest, weights[0] ?? 400);
133
+ }
134
+
135
+ export {
136
+ loadGoogleFontPreview,
137
+ loadGoogleFont,
138
+ googleFontCssFamily,
139
+ GoogleFontPicker
140
+ };
@@ -0,0 +1,5 @@
1
+ // src/data/groups/d.json
2
+ var d_default = [{ family: "DM Sans", files: { "100": "https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAop1hS2f3ZGMZpg.woff2", "200": "https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpxhS2f3ZGMZpg.woff2", "300": "https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwA_JxhS2f3ZGMZpg.woff2", "500": "https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAkJxhS2f3ZGMZpg.woff2", "600": "https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAfJthS2f3ZGMZpg.woff2", "700": "https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwARZthS2f3ZGMZpg.woff2", "800": "https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpthS2f3ZGMZpg.woff2", "900": "https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAC5thS2f3ZGMZpg.woff2", regular: "https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxhS2f3ZGMZpg.woff2", "100italic": "https://fonts.gstatic.com/s/dmsans/v17/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDG32RmYJpso5.woff2", "200italic": "https://fonts.gstatic.com/s/dmsans/v17/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JDW32RmYJpso5.woff2", "300italic": "https://fonts.gstatic.com/s/dmsans/v17/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat_XDW32RmYJpso5.woff2", italic: "https://fonts.gstatic.com/s/dmsans/v17/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDW32RmYJpso5.woff2", "500italic": "https://fonts.gstatic.com/s/dmsans/v17/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-7DW32RmYJpso5.woff2", "600italic": "https://fonts.gstatic.com/s/dmsans/v17/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9XCm32RmYJpso5.woff2", "700italic": "https://fonts.gstatic.com/s/dmsans/v17/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9uCm32RmYJpso5.woff2", "800italic": "https://fonts.gstatic.com/s/dmsans/v17/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JCm32RmYJpso5.woff2", "900italic": "https://fonts.gstatic.com/s/dmsans/v17/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8gCm32RmYJpso5.woff2" }, menu: "https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRT232.woff2" }, { family: "Dancing Script", files: { "500": "https://fonts.gstatic.com/s/dancingscript/v29/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BAyoHSOB9ptDqpw.woff2", "600": "https://fonts.gstatic.com/s/dancingscript/v29/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7B7y0HSOB9ptDqpw.woff2", "700": "https://fonts.gstatic.com/s/dancingscript/v29/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7B1i0HSOB9ptDqpw.woff2", regular: "https://fonts.gstatic.com/s/dancingscript/v29/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSoHSOB9ptDqpw.woff2" }, menu: "https://fonts.gstatic.com/s/dancingscript/v29/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3TOp8.woff2" }, { family: "Dosis", files: { "200": "https://fonts.gstatic.com/s/dosis/v34/HhyJU5sn9vOmLxNkIwRSjTVNWLEJt7MV2RkFTq4EPw.woff2", "300": "https://fonts.gstatic.com/s/dosis/v34/HhyJU5sn9vOmLxNkIwRSjTVNWLEJabMV2RkFTq4EPw.woff2", "500": "https://fonts.gstatic.com/s/dosis/v34/HhyJU5sn9vOmLxNkIwRSjTVNWLEJBbMV2RkFTq4EPw.woff2", "600": "https://fonts.gstatic.com/s/dosis/v34/HhyJU5sn9vOmLxNkIwRSjTVNWLEJ6bQV2RkFTq4EPw.woff2", "700": "https://fonts.gstatic.com/s/dosis/v34/HhyJU5sn9vOmLxNkIwRSjTVNWLEJ0LQV2RkFTq4EPw.woff2", "800": "https://fonts.gstatic.com/s/dosis/v34/HhyJU5sn9vOmLxNkIwRSjTVNWLEJt7QV2RkFTq4EPw.woff2", regular: "https://fonts.gstatic.com/s/dosis/v34/HhyJU5sn9vOmLxNkIwRSjTVNWLEJN7MV2RkFTq4EPw.woff2" }, menu: "https://fonts.gstatic.com/s/dosis/v34/HhyJU5sn9vOmLxNkIwRSjTVNWLEJN7Ml3RME.woff2" }, { family: "DM Serif Display", files: { regular: "https://fonts.gstatic.com/s/dmserifdisplay/v17/-nFnOHM81r4j6k0gjAW3mujVU2B2K_J709jy92k.woff2", italic: "https://fonts.gstatic.com/s/dmserifdisplay/v17/-nFhOHM81r4j6k0gjAW3mujVU2B2G_Vx0vr352np3Q.woff2" }, menu: "https://fonts.gstatic.com/s/dmserifdisplay/v17/-nFnOHM81r4j6k0gjAW3mujVU2B2G_Zx0g.woff2" }, { family: "DM Mono", files: { "300": "https://fonts.gstatic.com/s/dmmono/v16/aFTR7PB1QTsUX8KYvrGyIYGnbKX9Rlk.woff2", "500": "https://fonts.gstatic.com/s/dmmono/v16/aFTR7PB1QTsUX8KYvumzIYGnbKX9Rlk.woff2", "300italic": "https://fonts.gstatic.com/s/dmmono/v16/aFTT7PB1QTsUX8KYth-orYatbYf4VllXuA.woff2", regular: "https://fonts.gstatic.com/s/dmmono/v16/aFTU7PB1QTsUX8KYhhiaBYyMcKw.woff2", italic: "https://fonts.gstatic.com/s/dmmono/v16/aFTW7PB1QTsUX8KYth-QBK6JYKzkXw.woff2", "500italic": "https://fonts.gstatic.com/s/dmmono/v16/aFTT7PB1QTsUX8KYth-o9YetbYf4VllXuA.woff2" }, menu: "https://fonts.gstatic.com/s/dmmono/v16/aFTU7PB1QTsUX8KYthyQBA.woff2" }, { family: "Domine", files: { "500": "https://fonts.gstatic.com/s/domine/v25/L0xhDFMnlVwD4h3Lt9JWnbX3jG-2X0DAI1gVErGuW8Q.woff2", "600": "https://fonts.gstatic.com/s/domine/v25/L0xhDFMnlVwD4h3Lt9JWnbX3jG-2X6zHI1gVErGuW8Q.woff2", "700": "https://fonts.gstatic.com/s/domine/v25/L0xhDFMnlVwD4h3Lt9JWnbX3jG-2X5XHI1gVErGuW8Q.woff2", regular: "https://fonts.gstatic.com/s/domine/v25/L0xhDFMnlVwD4h3Lt9JWnbX3jG-2X3LAI1gVErGuW8Q.woff2" }, menu: "https://fonts.gstatic.com/s/domine/v25/L0xhDFMnlVwD4h3Lt9JWnbX3jG-2X3LAE1wfEw.woff2" }, { family: "DM Serif Text", files: { regular: "https://fonts.gstatic.com/s/dmseriftext/v13/rnCu-xZa_krGokauCeNq1wWyafaPXHIJErY.woff2", italic: "https://fonts.gstatic.com/s/dmseriftext/v13/rnCw-xZa_krGokauCeNq1wWyWfGFXVAMArZKqQ.woff2" }, menu: "https://fonts.gstatic.com/s/dmseriftext/v13/rnCu-xZa_krGokauCeNq1wWyWfKFXQ.woff2" }, { family: "Didact Gothic", files: { regular: "https://fonts.gstatic.com/s/didactgothic/v21/ahcfv8qz1zt6hCC5G4F_P4ASpUmSp0LlcyQ.woff2" }, menu: "https://fonts.gstatic.com/s/didactgothic/v21/ahcfv8qz1zt6hCC5G4F_P4ASlU2Ypg.woff2" }, { family: "Dela Gothic One", files: { regular: "https://fonts.gstatic.com/s/delagothicone/v19/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsJQAlbUA.woff2" }, menu: "https://fonts.gstatic.com/s/delagothicone/v19/hESp6XxvMDRA-2eD0lXpDa6QkBA2REEI.woff2" }, { family: "Delius", files: { regular: "https://fonts.gstatic.com/s/delius/v21/PN_xRfK0pW_9e1rtZMI-jT3L_w.woff2" }, menu: "https://fonts.gstatic.com/s/delius/v21/PN_xRfK0pW_9e1rdYMg_.woff2" }, { family: "Do Hyeon", files: { regular: "https://fonts.gstatic.com/s/dohyeon/v21/TwMN-I8CRRU2zM86HFEyZwaH__-C.woff2" }, menu: "https://fonts.gstatic.com/s/dohyeon/v21/TwMN-I8CRRU2zM86HGE2bQc.woff2" }, { family: "Damion", files: { regular: "https://fonts.gstatic.com/s/damion/v15/hv-XlzJ3KEUe_YZUaGY3MTFgVg.woff2" }, menu: "https://fonts.gstatic.com/s/damion/v15/hv-XlzJ3KEUe_YZkbGw2.woff2" }, { family: "Days One", files: { regular: "https://fonts.gstatic.com/s/daysone/v19/mem9YaCnxnKRiYZOCLYQeLkWVNBt.woff2" }, menu: "https://fonts.gstatic.com/s/daysone/v19/mem9YaCnxnKRiYZOCIYUcrg.woff2" }, { family: "Darker Grotesque", files: { "300": "https://fonts.gstatic.com/s/darkergrotesque/v10/U9MK6cuh-mLQlC4BKCtayOfARkSVgb381b-W8-QDqXxpqn73-XFyZFUB.woff2", "500": "https://fonts.gstatic.com/s/darkergrotesque/v10/U9MK6cuh-mLQlC4BKCtayOfARkSVgb381b-W8-QDqXwFqn73-XFyZFUB.woff2", "600": "https://fonts.gstatic.com/s/darkergrotesque/v10/U9MK6cuh-mLQlC4BKCtayOfARkSVgb381b-W8-QDqXzprX73-XFyZFUB.woff2", "700": "https://fonts.gstatic.com/s/darkergrotesque/v10/U9MK6cuh-mLQlC4BKCtayOfARkSVgb381b-W8-QDqXzQrX73-XFyZFUB.woff2", "800": "https://fonts.gstatic.com/s/darkergrotesque/v10/U9MK6cuh-mLQlC4BKCtayOfARkSVgb381b-W8-QDqXy3rX73-XFyZFUB.woff2", "900": "https://fonts.gstatic.com/s/darkergrotesque/v10/U9MK6cuh-mLQlC4BKCtayOfARkSVgb381b-W8-QDqXyerX73-XFyZFUB.woff2", regular: "https://fonts.gstatic.com/s/darkergrotesque/v10/U9MK6cuh-mLQlC4BKCtayOfARkSVgb381b-W8-QDqXw3qn73-XFyZFUB.woff2" }, menu: "https://fonts.gstatic.com/s/darkergrotesque/v10/U9MK6cuh-mLQlC4BKCtayOfARkSVgb381b-W8-QDqXw3qk7z83A.woff2" }, { family: "Dongle", files: { "300": "https://fonts.gstatic.com/s/dongle/v16/sJoG3Ltdjt6VPkqeEcxrZzWNzXvVPA.woff2", "700": "https://fonts.gstatic.com/s/dongle/v16/sJoG3Ltdjt6VPkqeActrZzWNzXvVPA.woff2", regular: "https://fonts.gstatic.com/s/dongle/v16/sJoF3Ltdjt6VPkqmuORPah6RxA.woff2" }, menu: "https://fonts.gstatic.com/s/dongle/v16/sJoF3Ltdjt6VPkqWvO5O.woff2" }, { family: "DotGothic16", files: { regular: "https://fonts.gstatic.com/s/dotgothic16/v21/v6-QGYjBJFKgyw5nSoDAGE7O435YPFrT.woff2" }, menu: "https://fonts.gstatic.com/s/dotgothic16/v21/v6-QGYjBJFKgyw5nSoDAGH7K6X8.woff2" }, { family: "DynaPuff", files: { "500": "https://fonts.gstatic.com/s/dynapuff/v9/z7N5dRvsZDIVHbYPMhZJ3HQ83UaSu4uhr7-ZFeoYkgAr1x8RSyQu6Y3rSRs4wn8.woff2", "600": "https://fonts.gstatic.com/s/dynapuff/v9/z7N5dRvsZDIVHbYPMhZJ3HQ83UaSu4uhr7-ZFeoYkgAr1x8RS8gp6Y3rSRs4wn8.woff2", "700": "https://fonts.gstatic.com/s/dynapuff/v9/z7N5dRvsZDIVHbYPMhZJ3HQ83UaSu4uhr7-ZFeoYkgAr1x8RS_Ep6Y3rSRs4wn8.woff2", regular: "https://fonts.gstatic.com/s/dynapuff/v9/z7N5dRvsZDIVHbYPMhZJ3HQ83UaSu4uhr7-ZFeoYkgAr1x8RSxYu6Y3rSRs4wn8.woff2" }, menu: "https://fonts.gstatic.com/s/dynapuff/v9/z7N5dRvsZDIVHbYPMhZJ3HQ83UaSu4uhr7-ZFeoYkgAr1x8RSxYu2YnhSA.woff2" }, { family: "Dawning of a New Day", files: { regular: "https://fonts.gstatic.com/s/dawningofanewday/v22/t5t_IQMbOp2SEwuncwLRjMfIg1yYit_nAz8ehWJGNoBE.woff2" }, menu: "https://fonts.gstatic.com/s/dawningofanewday/v22/t5t_IQMbOp2SEwuncwLRjMfIg1yYit_nAw8aj2M.woff2" }, { family: "Delius Unicase", files: { "700": "https://fonts.gstatic.com/s/deliusunicase/v30/845CNMEwEIOVT8BmgfSzIr_6mlp7WMr6BmmlS5aw.woff2", regular: "https://fonts.gstatic.com/s/deliusunicase/v30/845BNMEwEIOVT8BmgfSzIr_6mmLCd-73LXWs.woff2" }, menu: "https://fonts.gstatic.com/s/deliusunicase/v30/845BNMEwEIOVT8BmgfSzIr_6mlLGfe8.woff2" }, { family: "David Libre", files: { "500": "https://fonts.gstatic.com/s/davidlibre/v17/snfzs0W_99N64iuYSvp4W8GIw7qeSjORSo9W.woff2", "700": "https://fonts.gstatic.com/s/davidlibre/v17/snfzs0W_99N64iuYSvp4W8HAxbqeSjORSo9W.woff2", regular: "https://fonts.gstatic.com/s/davidlibre/v17/snfus0W_99N64iuYSvp4W_l56p6TYS-Y.woff2" }, menu: "https://fonts.gstatic.com/s/davidlibre/v17/snfus0W_99N64iuYSvp4W8l94J8.woff2" }, { family: "Doppio One", files: { regular: "https://fonts.gstatic.com/s/doppioone/v14/Gg8wN5gSaBfyBw2MqCh-lg4hKGpe5Fg.woff2" }, menu: "https://fonts.gstatic.com/s/doppioone/v14/Gg8wN5gSaBfyBw2MqCh-pgorKQ.woff2" }, { family: "Denk One", files: { regular: "https://fonts.gstatic.com/s/denkone/v21/dg4m_pzhrqcFb2IzROtCpbglShon.woff2" }, menu: "https://fonts.gstatic.com/s/denkone/v21/dg4m_pzhrqcFb2IzRNtGr7k.woff2" }, { family: "Della Respira", files: { regular: "https://fonts.gstatic.com/s/dellarespira/v24/RLp5K5v44KaueWI6iEJQBiGPRfwSu6EuTHo.woff2" }, menu: "https://fonts.gstatic.com/s/dellarespira/v24/RLp5K5v44KaueWI6iEJQBiGPdfgYug.woff2" }, { family: "Dynalight", files: { regular: "https://fonts.gstatic.com/s/dynalight/v24/1Ptsg8LOU_aOmQvTsF4IT4trDfGGxA.woff2" }, menu: "https://fonts.gstatic.com/s/dynalight/v24/1Ptsg8LOU_aOmQvTsF44S4Fq.woff2" }, { family: "Delicious Handrawn", files: { regular: "https://fonts.gstatic.com/s/delicioushandrawn/v10/wlpsgx_NAUNkpmKQifcxkQchDFo3fJ112ZpDd6u3AQ.woff2" }, menu: "https://fonts.gstatic.com/s/delicioushandrawn/v10/wlpsgx_NAUNkpmKQifcxkQchDFo3fJ1F3ZBC.woff2" }, { family: "Diplomata", files: { regular: "https://fonts.gstatic.com/s/diplomata/v33/Cn-0JtiMXwhNwp-wKxyfZWxYrdM9Sg.woff2" }, menu: "https://fonts.gstatic.com/s/diplomata/v33/Cn-0JtiMXwhNwp-wKxyvYWZZ.woff2" }, { family: "Dokdo", files: { regular: "https://fonts.gstatic.com/s/dokdo/v23/esDf315XNuCBLxLt4NaMlKcH.woff2" }, menu: "https://fonts.gstatic.com/s/dokdo/v23/esDf315XNuCBLyLp6tc.woff2" }, { family: "Duru Sans", files: { regular: "https://fonts.gstatic.com/s/durusans/v21/xn7iYH8xwmSyTvEV_HOxSvfYdN-WZw.woff2" }, menu: "https://fonts.gstatic.com/s/durusans/v21/xn7iYH8xwmSyTvEV_HOBTv3Z.woff2" }, { family: "Doto", files: { "100": "https://fonts.gstatic.com/s/doto/v3/t5tJIRMbNJ6TQG7Il_EKPqP9zTnvqqGNcuvLMt1JIphFOOOeykWSvrlpgw.woff2", "200": "https://fonts.gstatic.com/s/doto/v3/t5tJIRMbNJ6TQG7Il_EKPqP9zTnvqqGNcuvLMt1JIphFuOKeykWSvrlpgw.woff2", "300": "https://fonts.gstatic.com/s/doto/v3/t5tJIRMbNJ6TQG7Il_EKPqP9zTnvqqGNcuvLMt1JIphFZuKeykWSvrlpgw.woff2", "500": "https://fonts.gstatic.com/s/doto/v3/t5tJIRMbNJ6TQG7Il_EKPqP9zTnvqqGNcuvLMt1JIphFCuKeykWSvrlpgw.woff2", "600": "https://fonts.gstatic.com/s/doto/v3/t5tJIRMbNJ6TQG7Il_EKPqP9zTnvqqGNcuvLMt1JIphF5uWeykWSvrlpgw.woff2", "700": "https://fonts.gstatic.com/s/doto/v3/t5tJIRMbNJ6TQG7Il_EKPqP9zTnvqqGNcuvLMt1JIphF3-WeykWSvrlpgw.woff2", "800": "https://fonts.gstatic.com/s/doto/v3/t5tJIRMbNJ6TQG7Il_EKPqP9zTnvqqGNcuvLMt1JIphFuOWeykWSvrlpgw.woff2", "900": "https://fonts.gstatic.com/s/doto/v3/t5tJIRMbNJ6TQG7Il_EKPqP9zTnvqqGNcuvLMt1JIphFkeWeykWSvrlpgw.woff2", regular: "https://fonts.gstatic.com/s/doto/v3/t5tJIRMbNJ6TQG7Il_EKPqP9zTnvqqGNcuvLMt1JIphFOOKeykWSvrlpgw.woff2" }, menu: "https://fonts.gstatic.com/s/doto/v3/t5tJIRMbNJ6TQG7Il_EKPqP9zTnvqqGNcuvLMt1JIphFOOKuzk-T.woff2" }, { family: "Delius Swash Caps", files: { regular: "https://fonts.gstatic.com/s/deliusswashcaps/v25/oY1E8fPLr7v4JWCExZpWebxVKORpXXeYKmeBvEYs.woff2" }, menu: "https://fonts.gstatic.com/s/deliusswashcaps/v25/oY1E8fPLr7v4JWCExZpWebxVKORpXUecIGY.woff2" }, { family: "Dangrek", files: { regular: "https://fonts.gstatic.com/s/dangrek/v33/LYjCdG30nEgoH8E2gCZqqVIuTN4.woff2" }, menu: "https://fonts.gstatic.com/s/dangrek/v33/LYjCdG30nEgoH8E2sCJgqA.woff2" }, { family: "Devonshire", files: { regular: "https://fonts.gstatic.com/s/devonshire/v29/46kqlbDwWirWr4gtBD2BX0Bq01lYAZM.woff2" }, menu: "https://fonts.gstatic.com/s/devonshire/v29/46kqlbDwWirWr4gtBD2Bb0Rg0g.woff2" }, { family: "Dekko", files: { regular: "https://fonts.gstatic.com/s/dekko/v23/46khlb_wWjfSrttAR0vsfl1B.woff2" }, menu: "https://fonts.gstatic.com/s/dekko/v23/46khlb_wWjfSrutETUo.woff2" }, { family: "Darumadrop One", files: { regular: "https://fonts.gstatic.com/s/darumadropone/v14/cY9cfjeIW11dpCKgRLi675a87IhCBJOxZQPp.woff2" }, menu: "https://fonts.gstatic.com/s/darumadropone/v14/cY9cfjeIW11dpCKgRLi675a87LhGDpI.woff2" }, { family: "Donegal One", files: { regular: "https://fonts.gstatic.com/s/donegalone/v22/m8JWjfRYea-ZnFz6fsK9FZRARG-K3Mud.woff2" }, menu: "https://fonts.gstatic.com/s/donegalone/v22/m8JWjfRYea-ZnFz6fsK9FaRETm4.woff2" }, { family: "Dorsa", files: { regular: "https://fonts.gstatic.com/s/dorsa/v29/yYLn0hjd0OGwqo443XCFxAnQ.woff2" }, menu: "https://fonts.gstatic.com/s/dorsa/v29/yYLn0hjd0OGwqr4813E.woff2" }, { family: "Dhurjati", files: { regular: "https://fonts.gstatic.com/s/dhurjati/v27/_6_8ED3gSeatXfFiFX33SKQtuTA2.woff2" }, menu: "https://fonts.gstatic.com/s/dhurjati/v27/_6_8ED3gSeatXfFiFU3zQqU.woff2" }, { family: "Diplomata SC", files: { regular: "https://fonts.gstatic.com/s/diplomatasc/v30/buExpoi3ecvs3kidKgBJo2kf_f5Oaiw4cw.woff2" }, menu: "https://fonts.gstatic.com/s/diplomatasc/v30/buExpoi3ecvs3kidKgBJo2kv-fRP.woff2" }, { family: "Dai Banna SIL", files: { "300": "https://fonts.gstatic.com/s/daibannasil/v2/lW-lwj0AJWmpwGyJ2uEoA4I7tYKoDs_KOgMX95A.woff2", "500": "https://fonts.gstatic.com/s/daibannasil/v2/lW-lwj0AJWmpwGyJ2uEoA4I7tdqpDs_KOgMX95A.woff2", "600": "https://fonts.gstatic.com/s/daibannasil/v2/lW-lwj0AJWmpwGyJ2uEoA4I7tfauDs_KOgMX95A.woff2", "700": "https://fonts.gstatic.com/s/daibannasil/v2/lW-lwj0AJWmpwGyJ2uEoA4I7tZKvDs_KOgMX95A.woff2", "300italic": "https://fonts.gstatic.com/s/daibannasil/v2/lW-jwj0AJWmpwGyJ2uEoA4I7vSyygsjAOyES55D3Vg.woff2", regular: "https://fonts.gstatic.com/s/daibannasil/v2/lW-4wj0AJWmpwGyJ2uEoA4I7jSuAKsLhJgo.woff2", italic: "https://fonts.gstatic.com/s/daibannasil/v2/lW-mwj0AJWmpwGyJ2uEoA4I7vSyKK-DkNgoO7g.woff2", "500italic": "https://fonts.gstatic.com/s/daibannasil/v2/lW-jwj0AJWmpwGyJ2uEoA4I7vSyy2snAOyES55D3Vg.woff2", "600italic": "https://fonts.gstatic.com/s/daibannasil/v2/lW-jwj0AJWmpwGyJ2uEoA4I7vSyy9s7AOyES55D3Vg.woff2", "700italic": "https://fonts.gstatic.com/s/daibannasil/v2/lW-jwj0AJWmpwGyJ2uEoA4I7vSyyks_AOyES55D3Vg.woff2" }, menu: "https://fonts.gstatic.com/s/daibannasil/v2/lW-4wj0AJWmpwGyJ2uEoA4I7vS-KKw.woff2" }, { family: "Dr Sugiyama", files: { regular: "https://fonts.gstatic.com/s/drsugiyama/v30/HTxoL2k4N3O9n5I1boGI7abUM4-t-g7y.woff2" }, menu: "https://fonts.gstatic.com/s/drsugiyama/v30/HTxoL2k4N3O9n5I1boGI7ZbQOY4.woff2" }, { family: "Diphylleia", files: { regular: "https://fonts.gstatic.com/s/diphylleia/v2/DtVmJxCtRKMixK4_HXsIulkm6gDXvwE.woff2" }, menu: "https://fonts.gstatic.com/s/diphylleia/v2/DtVmJxCtRKMixK4_HXsIil0s6w.woff2" }, { family: "Danfo", files: { regular: "https://fonts.gstatic.com/s/danfo/v5/snf3s0u_98t16THfK1Csj3N41ZqbYDe5Tr1ToPrNKQ.woff2" }, menu: "https://fonts.gstatic.com/s/danfo/v5/snf3s0u_98t16THfK1Csj3N41ZqbYDeJSrdS.woff2" }, { family: "Datatype", files: { "100": "https://fonts.gstatic.com/s/datatype/v3/K2FcfZJQl-tDUlBEHaTYKmJIlpH1cGuNRqcCM4aUfKR9p6dHl6O9sz99u1eUcLE.woff2", "200": "https://fonts.gstatic.com/s/datatype/v3/K2FcfZJQl-tDUlBEHaTYKmJIlpH1cGuNRqcCM4aUfKR9p6dHlyO8sz99u1eUcLE.woff2", "300": "https://fonts.gstatic.com/s/datatype/v3/K2FcfZJQl-tDUlBEHaTYKmJIlpH1cGuNRqcCM4aUfKR9p6dHl_28sz99u1eUcLE.woff2", "500": "https://fonts.gstatic.com/s/datatype/v3/K2FcfZJQl-tDUlBEHaTYKmJIlpH1cGuNRqcCM4aUfKR9p6dHl5G8sz99u1eUcLE.woff2", "600": "https://fonts.gstatic.com/s/datatype/v3/K2FcfZJQl-tDUlBEHaTYKmJIlpH1cGuNRqcCM4aUfKR9p6dHl327sz99u1eUcLE.woff2", "700": "https://fonts.gstatic.com/s/datatype/v3/K2FcfZJQl-tDUlBEHaTYKmJIlpH1cGuNRqcCM4aUfKR9p6dHl0S7sz99u1eUcLE.woff2", "800": "https://fonts.gstatic.com/s/datatype/v3/K2FcfZJQl-tDUlBEHaTYKmJIlpH1cGuNRqcCM4aUfKR9p6dHlyO7sz99u1eUcLE.woff2", "900": "https://fonts.gstatic.com/s/datatype/v3/K2FcfZJQl-tDUlBEHaTYKmJIlpH1cGuNRqcCM4aUfKR9p6dHlwq7sz99u1eUcLE.woff2", regular: "https://fonts.gstatic.com/s/datatype/v3/K2FcfZJQl-tDUlBEHaTYKmJIlpH1cGuNRqcCM4aUfKR9p6dHl6O8sz99u1eUcLE.woff2" }, menu: "https://fonts.gstatic.com/s/datatype/v3/K2FcfZJQl-tDUlBEHaTYKmJIlpH1cGuNRqcCM4aUfKR9p6dHl6O8gzt3ug.woff2" }];
3
+ export {
4
+ d_default as default
5
+ };