From a5c30b6742c92d040019dc26ddad5861ebc3f1d5 Mon Sep 17 00:00:00 2001 From: RYRY1002 Date: Sun, 2 Mar 2025 00:36:16 +1100 Subject: [PATCH] Upgrade to gatsby-plugin-material-symbols Move away from react-material-symbols --- font-preload-cache.json | 2 +- gatsby-config.mjs | 5 + package-lock.json | 31 +- package.json | 2 +- posts/markdown.mdx | 2 - schema.gql | 720 +++++++++++++++++++++++ src/components/charts/housing-crisis.tsx | 5 +- src/components/footer.tsx | 7 +- src/components/navbar.tsx | 5 +- src/components/theme-toggle-button.tsx | 7 +- src/components/ui/breadcrumb.tsx | 7 +- src/components/ui/chart.tsx | 13 +- src/components/ui/dialog.tsx | 4 +- src/components/ui/markdown.tsx | 17 +- src/components/ui/pagination.tsx | 11 +- src/templates/blog-list.tsx | 5 +- src/templates/post.tsx | 13 +- 17 files changed, 786 insertions(+), 70 deletions(-) create mode 100644 schema.gql diff --git a/font-preload-cache.json b/font-preload-cache.json index 381bf5b..8bc6380 100644 --- a/font-preload-cache.json +++ b/font-preload-cache.json @@ -1 +1 @@ -{"timestamp":1722227176382,"hash":"8cea6021efc5d4de2b52c462fe97df4f","assets":{"/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/2/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/3/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/dev-404-page/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"https://fonts.gstatic.com/s/jetbrainsmono/v18/tDbV2o-flEEny0FZhsfKu5WU4xD7OwE.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/404/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/404.html":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true},"/project/meerkat-demo/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v4-360/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v4/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v5-ambient/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v5-poc/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v5-progressupdate/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/4/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/markdown/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxK.woff2":true,"https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBBc4.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"/static/KaTeX_Math-Italic-6d3d25f4820d0da8f01fa3d2c7cbb8c2.woff2":true,"/static/KaTeX_Main-Regular-f650f111a3b890d116f1ba740b7e3de3.woff2":true},"/project/website/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true},"/5/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true},"/project/header-link-test/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true}}} \ No newline at end of file +{"timestamp":1740835959589,"hash":"8fa3dca9b213f39355562666bec57b36","assets":{"/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"https://fonts.gstatic.com/s/materialsymbolsoutlined/v226/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOem.ttf":true},"/2/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/3/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/dev-404-page/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"https://fonts.gstatic.com/s/jetbrainsmono/v18/tDbV2o-flEEny0FZhsfKu5WU4xD7OwE.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/404/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/404.html":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"https://fonts.gstatic.com/s/materialsymbolsoutlined/v226/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOem.ttf":true},"/project/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true},"/project/meerkat-demo/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v4-360/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v4/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v5-ambient/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v5-poc/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v5-progressupdate/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/4/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/markdown/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxK.woff2":true,"https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBBc4.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"/static/KaTeX_Math-Italic-6d3d25f4820d0da8f01fa3d2c7cbb8c2.woff2":true,"/static/KaTeX_Main-Regular-f650f111a3b890d116f1ba740b7e3de3.woff2":true},"/project/website/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true},"/5/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true},"/project/header-link-test/":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"/static/material-symbols-outlined-c6ff5f1f582f9c74bf351df18fe2366a.woff2":true},"/2":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"https://fonts.gstatic.com/s/materialsymbolsoutlined/v226/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOem.ttf":true},"/3":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"https://fonts.gstatic.com/s/materialsymbolsoutlined/v226/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOem.ttf":true},"/4":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"https://fonts.gstatic.com/s/materialsymbolsoutlined/v226/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOem.ttf":true},"/project/website":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v4":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"https://fonts.gstatic.com/s/materialsymbolsoutlined/v226/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOem.ttf":true},"/project/v5-ambient":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/meerkat-demo":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/markdown":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"/static/KaTeX_Main-Regular-f650f111a3b890d116f1ba740b7e3de3.woff2":true,"/static/KaTeX_Math-Italic-6d3d25f4820d0da8f01fa3d2c7cbb8c2.woff2":true,"https://fonts.gstatic.com/s/materialsymbolsoutlined/v226/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOem.ttf":true,"https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxK.woff2":true,"https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBBc4.woff2":true},"/project/v5-poc":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v5-progressupdate":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/project/v4-360":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/dev-404-page":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true},"/404":{"/static/ibm-plex-sans-var_roman-0b007799329a9570d4f3f8ecff0ebccd.woff2":true,"/static/ibm-plex-sans-var_italic-cf461266a80dfbc8ba6972c5846203b7.woff2":true,"/static/jetbrains-mono-var_italic-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2":true,"/static/jetbrains-mono-var-9e9649b60ff61727d1aa4e9a1a10a93c.woff2":true,"https://fonts.gstatic.com/s/materialsymbolsoutlined/v226/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOem.ttf":true}}} \ No newline at end of file diff --git a/gatsby-config.mjs b/gatsby-config.mjs index 1b6a400..f7d7d08 100644 --- a/gatsby-config.mjs +++ b/gatsby-config.mjs @@ -160,6 +160,11 @@ const config = { quality: 85 } } + }, { + resolve: "gatsby-plugin-material-symbols", + options: { + verbose: true + } }, { resolve: "gatsby-plugin-posthog", options: { diff --git a/package-lock.json b/package-lock.json index e356366..46119f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,6 +45,7 @@ "gatsby": "^5.14.1", "gatsby-plugin-image": "^3.14.0", "gatsby-plugin-manifest": "^5.14.0", + "gatsby-plugin-material-symbols": "^1.0.3", "gatsby-plugin-mdx": "^5.14.0", "gatsby-plugin-nprogress": "^5.14.0", "gatsby-plugin-postcss": "^6.14.0", @@ -69,7 +70,6 @@ "react-csv": "^2.2.2", "react-dom": "^18.3.1", "react-hook-form": "^7.54.2", - "react-material-symbols": "^4.4.0", "react-resizable-panels": "^2.1.7", "recharts": "^2.15.1", "remark-gfm": "^3.0.1", @@ -13365,6 +13365,22 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/gatsby-plugin-material-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/gatsby-plugin-material-symbols/-/gatsby-plugin-material-symbols-1.0.3.tgz", + "integrity": "sha512-TNbOP3VLwIzs6xRd5G9vr7HZ6wXUXgnVA4kQ6AqfW1D/qUFWmVJarHhra549BSTTzZxYzavalUlF7OwZEeFXUQ==", + "license": "MIT", + "dependencies": { + "gatsby-core-utils": ">=4.14.0", + "node-fetch": "^2.6.8" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "gatsby": ">=5.14.0" + } + }, "node_modules/gatsby-plugin-mdx": { "version": "5.14.0", "resolved": "https://registry.npmjs.org/gatsby-plugin-mdx/-/gatsby-plugin-mdx-5.14.0.tgz", @@ -23744,19 +23760,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/react-material-symbols": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/react-material-symbols/-/react-material-symbols-4.4.0.tgz", - "integrity": "sha512-KKLocA1Fqdgk70Z78PeY4M8yvqIpnvCmHuniXbF52fPD+CNoPrR5DlECq7UVOgvgTpcOQzY0qgMdpvxuw3Ynvg==", - "license": "Apache-2.0", - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0" - } - }, "node_modules/react-merge-refs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-2.1.1.tgz", diff --git a/package.json b/package.json index 4083304..6c24a35 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "gatsby": "^5.14.1", "gatsby-plugin-image": "^3.14.0", "gatsby-plugin-manifest": "^5.14.0", + "gatsby-plugin-material-symbols": "^1.0.3", "gatsby-plugin-mdx": "^5.14.0", "gatsby-plugin-nprogress": "^5.14.0", "gatsby-plugin-postcss": "^6.14.0", @@ -78,7 +79,6 @@ "react-csv": "^2.2.2", "react-dom": "^18.3.1", "react-hook-form": "^7.54.2", - "react-material-symbols": "^4.4.0", "react-resizable-panels": "^2.1.7", "recharts": "^2.15.1", "remark-gfm": "^3.0.1", diff --git a/posts/markdown.mdx b/posts/markdown.mdx index f39f4a7..16473f9 100644 --- a/posts/markdown.mdx +++ b/posts/markdown.mdx @@ -236,8 +236,6 @@ Here's an example of a chart added to a markdown file: import { CartesianGrid, XAxis, YAxis, Rectangle, ReferenceLine, Label } from "recharts"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from "@/components/ui/chart"; -import { MaterialSymbol } from "react-material-symbols"; -import "react-material-symbols/outlined"; import { Area, AreaChart } from "recharts"; export function BedStatFullscreen() { diff --git a/schema.gql b/schema.gql new file mode 100644 index 0000000..3fa63f5 --- /dev/null +++ b/schema.gql @@ -0,0 +1,720 @@ +### Type definitions saved at 2025-03-01T13:30:14.610Z ### + +enum RemoteFileFit { + COVER + FILL + OUTSIDE + CONTAIN +} + +enum RemoteFileFormat { + AUTO + JPG + PNG + WEBP + AVIF +} + +enum RemoteFileLayout { + FIXED + FULL_WIDTH + CONSTRAINED +} + +enum RemoteFilePlaceholder { + DOMINANT_COLOR + BLURRED + TRACED_SVG + NONE +} + +enum RemoteFileCropFocus { + CENTER + TOP + RIGHT + BOTTOM + LEFT + ENTROPY + EDGES + FACES +} + +type RemoteFileResize { + width: Int + height: Int + src: String +} + +"""Remote Interface""" +interface RemoteFile { + id: ID! + mimeType: String! + filename: String! + filesize: Int + width: Int + height: Int + publicUrl: String! + resize( + width: Int + height: Int + aspectRatio: Float + fit: RemoteFileFit = COVER + + """ + + The image formats to generate. Valid values are AUTO (meaning the same + format as the source image), JPG, PNG, WEBP and AVIF. + The default value is [AUTO, WEBP, AVIF], and you should rarely need to + change this. Take care if you specify JPG or PNG when you do + not know the formats of the source images, as this could lead to unwanted + results such as converting JPEGs to PNGs. Specifying + both PNG and JPG is not supported and will be ignored. + """ + format: RemoteFileFormat = AUTO + cropFocus: [RemoteFileCropFocus] + quality: Int = 75 + ): RemoteFileResize + + """ + Data used in the component. See https://gatsby.dev/img for more info. + """ + gatsbyImage( + """ + + The layout for the image. + FIXED: A static image sized, that does not resize according to the screen width + FULL_WIDTH: The image resizes to fit its container. Pass a "sizes" option if + it isn't going to be the full width of the screen. + CONSTRAINED: Resizes to fit its container, up to a maximum width, at which point it will remain fixed in size. + + """ + layout: RemoteFileLayout = CONSTRAINED + + """ + + The display width of the generated image for layout = FIXED, and the display + width of the largest image for layout = CONSTRAINED. + The actual largest image resolution will be this value multiplied by the largest value in outputPixelDensities + Ignored if layout = FLUID. + + """ + width: Int + + """ + + If set, the height of the generated image. If omitted, it is calculated from + the supplied width, matching the aspect ratio of the source image. + """ + height: Int + + """ + + Format of generated placeholder image, displayed while the main image loads. + BLURRED: a blurred, low resolution image, encoded as a base64 data URI + DOMINANT_COLOR: a solid color, calculated from the dominant color of the image (default). + TRACED_SVG: deprecated. Will use DOMINANT_COLOR. + NONE: no placeholder. Set the argument "backgroundColor" to use a fixed background color. + """ + placeholder: RemoteFilePlaceholder = DOMINANT_COLOR + + """ + + If set along with width or height, this will set the value of the other + dimension to match the provided aspect ratio, cropping the image if needed. + If neither width or height is provided, height will be set based on the intrinsic width of the source image. + + """ + aspectRatio: Float + + """ + + The image formats to generate. Valid values are AUTO (meaning the same + format as the source image), JPG, PNG, WEBP and AVIF. + The default value is [AUTO, WEBP, AVIF], and you should rarely need to + change this. Take care if you specify JPG or PNG when you do + not know the formats of the source images, as this could lead to unwanted + results such as converting JPEGs to PNGs. Specifying + both PNG and JPG is not supported and will be ignored. + + """ + formats: [RemoteFileFormat!] = [AUTO, WEBP, AVIF] + + """ + + A list of image pixel densities to generate for FIXED and CONSTRAINED + images. You should rarely need to change this. It will never generate images + larger than the source, and will always include a 1x image. + Default is [ 1, 2 ] for fixed images, meaning 1x, 2x, and [0.25, 0.5, 1, 2] + for fluid. In this case, an image with a fluid layout and width = 400 would + generate images at 100, 200, 400 and 800px wide. + + """ + outputPixelDensities: [Float] = [0.25, 0.5, 1, 2] + + """ + + Specifies the image widths to generate. You should rarely need to change + this. For FIXED and CONSTRAINED images it is better to allow these to be + determined automatically, + based on the image size. For FULL_WIDTH images this can be used to override + the default, which is [750, 1080, 1366, 1920]. + It will never generate any images larger than the source. + + """ + breakpoints: [Int] = [750, 1080, 1366, 1920] + + """ + + The "sizes" property, passed to the img tag. This describes the display size of the image. + This does not affect the generated images, but is used by the browser to + decide which images to download. You can leave this blank for fixed images, + or if the responsive image + container will be the full width of the screen. In these cases we will generate an appropriate value. + + """ + sizes: String + + """ + Background color applied to the wrapper, or when "letterboxing" an image to another aspect ratio. + """ + backgroundColor: String + fit: RemoteFileFit = COVER + cropFocus: [RemoteFileCropFocus] + quality: Int = 75 + ): GatsbyImageData +} + +type File implements Node @dontInfer { + sourceInstanceName: String! + absolutePath: String! + relativePath: String! + extension: String! + size: Int! + prettySize: String! + modifiedTime: Date! @dateformat + accessTime: Date! @dateformat + changeTime: Date! @dateformat + birthTime: Date! @dateformat + root: String! + dir: String! + base: String! + ext: String! + name: String! + relativeDirectory: String! + dev: Int! + mode: Int! + nlink: Int! + uid: Int! + gid: Int! + rdev: Int! + ino: Float! + atimeMs: Float! + mtimeMs: Float! + ctimeMs: Float! + atime: Date! @dateformat + mtime: Date! @dateformat + ctime: Date! @dateformat + birthtime: Date @deprecated(reason: "Use `birthTime` instead") + birthtimeMs: Float @deprecated(reason: "Use `birthTime` instead") + blksize: Int + blocks: Int + url: String +} + +type Directory implements Node @dontInfer { + sourceInstanceName: String! + absolutePath: String! + relativePath: String! + extension: String! + size: Int! + prettySize: String! + modifiedTime: Date! @dateformat + accessTime: Date! @dateformat + changeTime: Date! @dateformat + birthTime: Date! @dateformat + root: String! + dir: String! + base: String! + ext: String! + name: String! + relativeDirectory: String! + dev: Int! + mode: Int! + nlink: Int! + uid: Int! + gid: Int! + rdev: Int! + ino: Float! + atimeMs: Float! + mtimeMs: Float! + ctimeMs: Float! + atime: Date! @dateformat + mtime: Date! @dateformat + ctime: Date! @dateformat + birthtime: Date @deprecated(reason: "Use `birthTime` instead") + birthtimeMs: Float @deprecated(reason: "Use `birthTime` instead") +} + +type Site implements Node @derivedTypes @dontInfer { + buildTime: Date @dateformat + siteMetadata: SiteSiteMetadata + port: Int + host: String + graphqlTypegen: SiteGraphqlTypegen + flags: SiteFlags + trailingSlash: String + polyfill: Boolean + pathPrefix: String + jsxRuntime: String +} + +type SiteSiteMetadata { + title: String + description: String + siteUrl: String +} + +type SiteGraphqlTypegen { + typesOutputPath: String + documentSearchPaths: [String] + generateOnBuild: Boolean +} + +type SiteFlags { + DEV_SSR: Boolean + FAST_DEV: Boolean + DETECT_NODE_MUTATIONS: Boolean + PARTIAL_HYDRATION: Boolean +} + +type SiteFunction implements Node @dontInfer { + functionRoute: String! + pluginName: String! + originalAbsoluteFilePath: String! + originalRelativeFilePath: String! + relativeCompiledFilePath: String! + absoluteCompiledFilePath: String! + matchPath: String +} + +type SitePage implements Node @dontInfer { + path: String! + component: String! + internalComponentName: String! + componentChunkName: String! + matchPath: String + pageContext: JSON @proxy(from: "context", fromNode: false) + pluginCreator: SitePlugin @link(by: "id", from: "pluginCreatorId") +} + +type SitePlugin implements Node @dontInfer { + resolve: String + name: String + version: String + nodeAPIs: [String] + browserAPIs: [String] + ssrAPIs: [String] + pluginFilepath: String + pluginOptions: JSON + packageJson: JSON +} + +type SiteBuildMetadata implements Node @dontInfer { + buildTime: Date @dateformat +} + +enum GatsbyImageFormat { + NO_CHANGE + AUTO + JPG + PNG + WEBP + AVIF +} + +enum GatsbyImageLayout { + FIXED + FULL_WIDTH + CONSTRAINED +} + +enum GatsbyImagePlaceholder { + DOMINANT_COLOR + TRACED_SVG + BLURRED + NONE +} + +type MarkdownHeading { + id: String + value: String + depth: Int +} + +enum MarkdownHeadingLevels { + h1 + h2 + h3 + h4 + h5 + h6 +} + +enum MarkdownExcerptFormats { + PLAIN + HTML + MARKDOWN +} + +type MarkdownWordCount { + paragraphs: Int + sentences: Int + words: Int +} + +type MarkdownRemark implements Node @childOf(mimeTypes: ["text/markdown", "text/x-markdown"], types: []) @dontInfer + +type Mdx implements Node @derivedTypes @childOf(types: ["File"]) @dontInfer { + excerpt(pruneLength: Int = 140): String + tableOfContents(maxDepth: Int): JSON + remoteImages: [File] @link(by: "id", from: "fields.remoteImagesId") + body: String + frontmatter: MdxFrontmatter + fields: MdxFields +} + +type MdxFrontmatter @derivedTypes { + type: String + slug: String + date: Date @dateformat + title: String + subtitle: String + links: [MdxFrontmatterLinks] + image: File @fileByRelativePath + video: File @fileByRelativePath + videoLooping: File @fileByRelativePath + tags: [String] + images: MdxFrontmatterImages +} + +type MdxFrontmatterLinks { + title: String + url: String +} + +type MdxFrontmatterImages @derivedTypes { + hero: [MdxFrontmatterImagesHero] + remote: [String] +} + +type MdxFrontmatterImagesHero { + src: File @fileByRelativePath + alt: String +} + +type MdxFields { + remoteImagesId: [String] +} + +enum ImageFormat { + NO_CHANGE + AUTO + JPG + PNG + WEBP + AVIF +} + +enum ImageFit { + COVER + CONTAIN + FILL + INSIDE + OUTSIDE +} + +enum ImageLayout { + FIXED + FULL_WIDTH + CONSTRAINED +} + +enum ImageCropFocus { + CENTER + NORTH + NORTHEAST + EAST + SOUTHEAST + SOUTH + SOUTHWEST + WEST + NORTHWEST + ENTROPY + ATTENTION +} + +input DuotoneGradient { + highlight: String! + shadow: String! + opacity: Int +} + +enum PotraceTurnPolicy { + TURNPOLICY_BLACK + TURNPOLICY_WHITE + TURNPOLICY_LEFT + TURNPOLICY_RIGHT + TURNPOLICY_MINORITY + TURNPOLICY_MAJORITY +} + +input Potrace { + turnPolicy: PotraceTurnPolicy + turdSize: Float + alphaMax: Float + optCurve: Boolean + optTolerance: Float + threshold: Int + blackOnWhite: Boolean + color: String + background: String +} + +type ImageSharpFixed { + base64: String + tracedSVG: String + aspectRatio: Float + width: Float! + height: Float! + src: String! + srcSet: String! + srcWebp: String + srcSetWebp: String + originalName: String +} + +type ImageSharpFluid { + base64: String + tracedSVG: String + aspectRatio: Float! + src: String! + srcSet: String! + srcWebp: String + srcSetWebp: String + sizes: String! + originalImg: String + originalName: String + presentationWidth: Int! + presentationHeight: Int! +} + +enum ImagePlaceholder { + DOMINANT_COLOR + TRACED_SVG + BLURRED + NONE +} + +input BlurredOptions { + """Width of the generated low-res preview. Default is 20px""" + width: Int + + """ + Force the output format for the low-res preview. Default is to use the same + format as the input. You should rarely need to change this + """ + toFormat: ImageFormat +} + +input JPGOptions { + quality: Int + progressive: Boolean = true +} + +input PNGOptions { + quality: Int + compressionSpeed: Int = 4 +} + +input WebPOptions { + quality: Int +} + +input AVIFOptions { + quality: Int + lossless: Boolean + speed: Int +} + +input TransformOptions { + grayscale: Boolean + duotone: DuotoneGradient + rotate: Int + trim: Float + cropFocus: ImageCropFocus = ATTENTION + fit: ImageFit = COVER +} + +type ImageSharpOriginal { + width: Float + height: Float + src: String +} + +type ImageSharpResize { + src: String + tracedSVG: String + width: Int + height: Int + aspectRatio: Float + originalName: String +} + +type ImageSharp implements Node @childOf(types: ["File"]) @dontInfer { + fixed(width: Int, height: Int, base64Width: Int, jpegProgressive: Boolean = true, pngCompressionSpeed: Int = 4, grayscale: Boolean, duotone: DuotoneGradient, traceSVG: Potrace, quality: Int, jpegQuality: Int, pngQuality: Int, webpQuality: Int, toFormat: ImageFormat, toFormatBase64: ImageFormat, cropFocus: ImageCropFocus = ATTENTION, fit: ImageFit = COVER, background: String = "rgba(0,0,0,1)", rotate: Int, trim: Float): ImageSharpFixed + fluid( + maxWidth: Int + maxHeight: Int + base64Width: Int + grayscale: Boolean + jpegProgressive: Boolean = true + pngCompressionSpeed: Int = 4 + duotone: DuotoneGradient + traceSVG: Potrace + quality: Int + jpegQuality: Int + pngQuality: Int + webpQuality: Int + toFormat: ImageFormat + toFormatBase64: ImageFormat + cropFocus: ImageCropFocus = ATTENTION + fit: ImageFit = COVER + background: String = "rgba(0,0,0,1)" + rotate: Int + trim: Float + sizes: String + + """ + A list of image widths to be generated. Example: [ 200, 340, 520, 890 ] + """ + srcSetBreakpoints: [Int] = [] + ): ImageSharpFluid + gatsbyImageData( + """ + The layout for the image. + FIXED: A static image sized, that does not resize according to the screen width + FULL_WIDTH: The image resizes to fit its container. Pass a "sizes" option if + it isn't going to be the full width of the screen. + CONSTRAINED: Resizes to fit its container, up to a maximum width, at which point it will remain fixed in size. + """ + layout: ImageLayout = CONSTRAINED + + """ + The display width of the generated image for layout = FIXED, and the maximum + display width of the largest image for layout = CONSTRAINED. + Ignored if layout = FLUID. + """ + width: Int + + """ + The display height of the generated image for layout = FIXED, and the + maximum display height of the largest image for layout = CONSTRAINED. + The image will be cropped if the aspect ratio does not match the source + image. If omitted, it is calculated from the supplied width, + matching the aspect ratio of the source image. + """ + height: Int + + """ + If set along with width or height, this will set the value of the other + dimension to match the provided aspect ratio, cropping the image if needed. + If neither width or height is provided, height will be set based on the intrinsic width of the source image. + """ + aspectRatio: Float + + """ + Format of generated placeholder image, displayed while the main image loads. + BLURRED: a blurred, low resolution image, encoded as a base64 data URI + DOMINANT_COLOR: a solid color, calculated from the dominant color of the image (default). + TRACED_SVG: deprecated. Will use DOMINANT_COLOR. + NONE: no placeholder. Set "background" to use a fixed background color. + """ + placeholder: ImagePlaceholder + + """ + Options for the low-resolution placeholder image. Set placeholder to "BLURRED" to use this + """ + blurredOptions: BlurredOptions + + """ + Options for traced placeholder SVGs. You also should set placeholder to "TRACED_SVG". + """ + tracedSVGOptions: Potrace + + """ + The image formats to generate. Valid values are "AUTO" (meaning the same + format as the source image), "JPG", "PNG", "WEBP" and "AVIF". + The default value is [AUTO, WEBP], and you should rarely need to change + this. Take care if you specify JPG or PNG when you do + not know the formats of the source images, as this could lead to unwanted + results such as converting JPEGs to PNGs. Specifying + both PNG and JPG is not supported and will be ignored. + """ + formats: [ImageFormat] + + """ + A list of image pixel densities to generate. It will never generate images + larger than the source, and will always include a 1x image. + Default is [ 1, 2 ] for FIXED images, meaning 1x and 2x and [0.25, 0.5, 1, + 2] for CONSTRAINED. In this case, an image with a constrained layout + and width = 400 would generate images at 100, 200, 400 and 800px wide. + Ignored for FULL_WIDTH images, which use breakpoints instead + """ + outputPixelDensities: [Float] + + """ + Specifies the image widths to generate. For FIXED and CONSTRAINED images it + is better to allow these to be determined automatically, + based on the image size. For FULL_WIDTH images this can be used to override + the default, which is [750, 1080, 1366, 1920]. + It will never generate any images larger than the source. + """ + breakpoints: [Int] + + """ + The "sizes" property, passed to the img tag. This describes the display size of the image. + This does not affect the generated images, but is used by the browser to decide which images to download. + You should usually leave this blank, and a suitable value will be calculated. The exception is if a FULL_WIDTH image + does not actually span the full width of the screen, in which case you should pass the correct size here. + """ + sizes: String + + """The default quality. This is overridden by any format-specific options""" + quality: Int + + """Options to pass to sharp when generating JPG images.""" + jpgOptions: JPGOptions + + """Options to pass to sharp when generating PNG images.""" + pngOptions: PNGOptions + + """Options to pass to sharp when generating WebP images.""" + webpOptions: WebPOptions + + """Options to pass to sharp when generating AVIF images.""" + avifOptions: AVIFOptions + + """ + Options to pass to sharp to control cropping and other image manipulations. + """ + transformOptions: TransformOptions + + """ + Background color applied to the wrapper. Also passed to sharp to use as a + background when "letterboxing" an image to another aspect ratio. + """ + backgroundColor: String + ): GatsbyImageData! + original: ImageSharpOriginal + resize(width: Int, height: Int, quality: Int, jpegQuality: Int, pngQuality: Int, webpQuality: Int, jpegProgressive: Boolean = true, pngCompressionLevel: Int = 9, pngCompressionSpeed: Int = 4, grayscale: Boolean, duotone: DuotoneGradient, base64: Boolean, traceSVG: Potrace, toFormat: ImageFormat, cropFocus: ImageCropFocus = ATTENTION, fit: ImageFit = COVER, background: String = "rgba(0,0,0,1)", rotate: Int, trim: Float): ImageSharpResize +} \ No newline at end of file diff --git a/src/components/charts/housing-crisis.tsx b/src/components/charts/housing-crisis.tsx index cd50f2d..8353513 100644 --- a/src/components/charts/housing-crisis.tsx +++ b/src/components/charts/housing-crisis.tsx @@ -2,8 +2,7 @@ import * as React from "react"; import { CartesianGrid, XAxis, YAxis, Rectangle, ReferenceLine, ReferenceArea, Label } from "@/components/ui/chart"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent } from "@/components/ui/chart"; -import { MaterialSymbol } from "react-material-symbols"; -import "react-material-symbols/outlined"; +import { MaterialSymbol } from "gatsby-plugin-material-symbols"; import { Separator } from "@/components/ui/separator"; import { CSVLink } from "react-csv"; @@ -378,7 +377,7 @@ export function IncreaseInCapitalGainAfterHalving() { {chartType === "capitalGain" ? "Capital gains tax revenue" : "Rental losses"} - {chartType === "capitalGain" ? "668%" : "220%*"} + {chartType === "capitalGain" ? "668%" : "220%*"} ) diff --git a/src/components/footer.tsx b/src/components/footer.tsx index e36cf6a..f83c3dd 100644 --- a/src/components/footer.tsx +++ b/src/components/footer.tsx @@ -42,8 +42,7 @@ import { TooltipTrigger, } from "@/components/ui/tooltip"; -import { MaterialSymbol } from 'react-material-symbols'; -//import 'react-material-symbols/outlined'; +import { MaterialSymbol } from "gatsby-plugin-material-symbols"; function romanize (num: number) { if (isNaN(num)) @@ -103,7 +102,7 @@ export default function Footer(this: any) { )} - {/**/} + {/**/} {urlArray.map((item, index) => { @@ -129,7 +128,7 @@ export default function Footer(this: any) { {index !== urlArray.length - 1 && ( - {/**/} + {/**/} )} diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index 5375d54..f4fa4e1 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -1,8 +1,7 @@ import * as React from "react" import { cn } from "@/lib/utils" -import { MaterialSymbol } from 'react-material-symbols'; -import 'react-material-symbols/outlined'; +import { MaterialSymbol } from "gatsby-plugin-material-symbols"; import { NavigationMenu, NavigationMenuContent, @@ -93,7 +92,7 @@ export default function NavMenu() { className="flex h-full w-full select-none flex-col justify-end rounded-md bg-linear-to-b from-muted/50 to-muted p-6 no-underline outline-hidden focus:shadow-md" href="/" > - +
shadcn/ui
diff --git a/src/components/theme-toggle-button.tsx b/src/components/theme-toggle-button.tsx index deed287..51c6daf 100644 --- a/src/components/theme-toggle-button.tsx +++ b/src/components/theme-toggle-button.tsx @@ -11,8 +11,7 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" -import { MaterialSymbol } from 'react-material-symbols'; -import 'react-material-symbols/outlined'; +import { MaterialSymbol } from "gatsby-plugin-material-symbols"; import { UseThemeProps } from "next-themes/dist/types"; @@ -24,8 +23,8 @@ export default function ThemeToggleButton() { diff --git a/src/components/ui/breadcrumb.tsx b/src/components/ui/breadcrumb.tsx index 481878d..2feaf16 100644 --- a/src/components/ui/breadcrumb.tsx +++ b/src/components/ui/breadcrumb.tsx @@ -1,8 +1,7 @@ import * as React from "react" import { Slot } from "@radix-ui/react-slot" -import { MaterialSymbol } from 'react-material-symbols'; -import 'react-material-symbols/outlined'; +import { MaterialSymbol } from "gatsby-plugin-material-symbols"; import { cn } from "@/lib/utils" @@ -85,7 +84,7 @@ const BreadcrumbSeparator = ({ className={cn("[&>svg]:size-3.5", className)} {...props} > - {children ?? } + {children ?? } ) BreadcrumbSeparator.displayName = "BreadcrumbSeparator" @@ -100,7 +99,7 @@ const BreadcrumbEllipsis = ({ className={cn("flex h-9 w-9 items-center justify-center", className)} {...props} > - + More ) diff --git a/src/components/ui/chart.tsx b/src/components/ui/chart.tsx index 16367a2..29e3577 100644 --- a/src/components/ui/chart.tsx +++ b/src/components/ui/chart.tsx @@ -392,8 +392,7 @@ import { DialogTrigger } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; -import { MaterialSymbol } from "react-material-symbols"; -import "react-material-symbols/outlined"; +import { MaterialSymbol } from "gatsby-plugin-material-symbols"; function ChartExplanation( { @@ -426,12 +425,12 @@ function ChartExplanation( - + {tooltipContent} - + @@ -461,12 +460,12 @@ function ChartExplanation( - + {tooltipContent} - + @@ -478,7 +477,7 @@ function ChartExplanation( - + Learn more about this chart and what you can learn from it diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx index 60a12c0..5d45a77 100644 --- a/src/components/ui/dialog.tsx +++ b/src/components/ui/dialog.tsx @@ -3,7 +3,7 @@ import * as DialogPrimitive from "@radix-ui/react-dialog" import { Cross2Icon } from "@radix-ui/react-icons" import { cn } from "@/lib/utils" -import { MaterialSymbol } from "react-material-symbols" +import { MaterialSymbol } from "gatsby-plugin-material-symbols"; const Dialog = DialogPrimitive.Root @@ -44,7 +44,7 @@ const DialogContent = React.forwardRef< > {children} - + Close diff --git a/src/components/ui/markdown.tsx b/src/components/ui/markdown.tsx index a8918e7..c7d7c76 100644 --- a/src/components/ui/markdown.tsx +++ b/src/components/ui/markdown.tsx @@ -28,8 +28,7 @@ import { GatsbyImageProps, StaticImage } from "gatsby-plugin-image"; -import { MaterialSymbol } from "react-material-symbols"; -import "react-material-symbols/outlined"; +import { MaterialSymbol } from "gatsby-plugin-material-symbols"; export function InlineCarousel( { @@ -150,14 +149,14 @@ export function InlineCarousel( )} - + - + @@ -183,10 +182,10 @@ export function InlineCarousel( ))} - + - + @@ -269,7 +268,7 @@ export function MarkdownImage(

{queriedImage.alt}

@@ -313,7 +312,7 @@ export function AllAccessPass( diff --git a/src/components/ui/pagination.tsx b/src/components/ui/pagination.tsx index b30f8b4..2e424cb 100644 --- a/src/components/ui/pagination.tsx +++ b/src/components/ui/pagination.tsx @@ -9,8 +9,7 @@ import { import { cn } from "@/lib/utils" import { ButtonProps, buttonVariants } from "@/components/ui/button" -import { MaterialSymbol } from 'react-material-symbols'; -import 'react-material-symbols/outlined'; +import { MaterialSymbol } from "gatsby-plugin-material-symbols"; const Pagination = ({ className, ...props }: React.ComponentProps<"nav">) => (