feat!: initial work to refactor to Astro.build
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"plugins": ["prettier"],
|
||||
"extends": ["next/core-web-vitals", "prettier"],
|
||||
"rules": {
|
||||
"prettier/prettier": "error",
|
||||
"@next/next/no-img-element": "off"
|
||||
}
|
||||
}
|
||||
39
.gitignore
vendored
@@ -1,37 +1,20 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
# build output
|
||||
dist/
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
node_modules/
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# next.js
|
||||
/.next/
|
||||
/out/
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# debug
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
# environment variables
|
||||
.env
|
||||
.env.production
|
||||
|
||||
.idea/
|
||||
tsconfig.tsbuildinfo
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
.idea/
|
||||
@@ -1,10 +0,0 @@
|
||||
const path = require('path');
|
||||
|
||||
module.exports = {
|
||||
'**/*.{js,ts,tsx,jsx}': (filenames) =>
|
||||
`next lint --fix --file ${filenames
|
||||
.map((file) => {
|
||||
return path.relative(process.cwd(), file);
|
||||
})
|
||||
.join(' --file ')}`,
|
||||
}
|
||||
2
.npmrc
Normal file
@@ -0,0 +1,2 @@
|
||||
# Expose Astro dependencies for `pnpm` users
|
||||
shamefully-hoist=true
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
@@ -1,11 +0,0 @@
|
||||
import { LicenseInfo } from "types/LicenseInfo";
|
||||
|
||||
export const MockLicense: LicenseInfo = {
|
||||
id: "MIT",
|
||||
licenceType: "Mocked License",
|
||||
footerImg:
|
||||
"https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png",
|
||||
explainLink: "example.com/explainLink",
|
||||
name: "The Mocking License",
|
||||
displayName: "MockLicense with Attribution",
|
||||
};
|
||||
@@ -1,79 +0,0 @@
|
||||
import { MockUnicorn, MockUnicornTwo } from "./mock-unicorn";
|
||||
import { MockLicense } from "./mock-license";
|
||||
import { ListViewPosts } from "utils/fs/api";
|
||||
import { PostInfo, RenderedPostInfo } from "types/PostInfo";
|
||||
|
||||
export const MockPost: PostInfo & RenderedPostInfo = {
|
||||
excerpt: "This would be an auto generated excerpt of the post in particular",
|
||||
title: "Post title",
|
||||
published: "10-10-2010",
|
||||
tags: ["item1"],
|
||||
description: "This is a short description dunno why this would be this short",
|
||||
authors: [MockUnicorn],
|
||||
license: MockLicense,
|
||||
slug: "this-post-name-here",
|
||||
headingsWithId: [],
|
||||
wordCount: 10000,
|
||||
content: "",
|
||||
translations: {
|
||||
en: "English",
|
||||
},
|
||||
};
|
||||
|
||||
export const MockMultiAuthorPost: PostInfo & RenderedPostInfo = {
|
||||
excerpt:
|
||||
"This would be a second auto generated excerpt of the post in particular",
|
||||
title: "Another post title",
|
||||
published: "10-20-2010",
|
||||
tags: ["item1"],
|
||||
description:
|
||||
"This is another short description dunno why this would be this short",
|
||||
authors: [MockUnicornTwo, MockUnicorn],
|
||||
license: MockLicense,
|
||||
slug: "this-other-post-name-here",
|
||||
headingsWithId: [],
|
||||
wordCount: 100000,
|
||||
content: "",
|
||||
translations: {
|
||||
en: "English",
|
||||
},
|
||||
};
|
||||
|
||||
export const MockMuliLanguagePost: PostInfo & RenderedPostInfo = {
|
||||
excerpt:
|
||||
"This would be a second auto generated excerpt of the post in particular",
|
||||
title: "Another post title",
|
||||
published: "10-20-2010",
|
||||
tags: ["item1"],
|
||||
description:
|
||||
"This is another short description dunno why this would be this short",
|
||||
authors: [MockUnicornTwo, MockUnicorn],
|
||||
license: MockLicense,
|
||||
slug: "this-other-post-name-here",
|
||||
headingsWithId: [],
|
||||
wordCount: 100000,
|
||||
content: "",
|
||||
translations: {
|
||||
es: "Español",
|
||||
},
|
||||
};
|
||||
|
||||
export const MockCanonicalPost: PostInfo & RenderedPostInfo = {
|
||||
excerpt:
|
||||
"This would be a second auto generated excerpt of the post in particular",
|
||||
title: "Another post title",
|
||||
published: "10-20-2010",
|
||||
originalLink: "https://google.com/",
|
||||
tags: ["item1"],
|
||||
description:
|
||||
"This is another short description dunno why this would be this short",
|
||||
authors: [MockUnicornTwo, MockUnicorn],
|
||||
license: MockLicense,
|
||||
slug: "this-other-post-name-here",
|
||||
headingsWithId: [],
|
||||
wordCount: 100000,
|
||||
content: "",
|
||||
translations: {
|
||||
en: "English",
|
||||
},
|
||||
};
|
||||
@@ -1,6 +0,0 @@
|
||||
import { RolesEnum } from "types/RolesInfo";
|
||||
|
||||
export const MockRole: RolesEnum = {
|
||||
id: "developer",
|
||||
prettyname: "Developer",
|
||||
};
|
||||
@@ -1,7 +0,0 @@
|
||||
export const siteMetadata = {
|
||||
title: "siteTitle",
|
||||
siteUrl: "https://example.com/siteUrl/",
|
||||
disqusShortname: "disqus-example-shorthand",
|
||||
repoPath: "unicorn-example-repo-path",
|
||||
relativeToPosts: "relative/to/posts",
|
||||
};
|
||||
@@ -1,68 +0,0 @@
|
||||
import { MockRole } from "./mock-role";
|
||||
import { UnicornInfo } from "../../src/types";
|
||||
|
||||
export const MockUnicorn: UnicornInfo = {
|
||||
name: "Joe",
|
||||
firstName: "Joe",
|
||||
lastName: "Other",
|
||||
id: "joe",
|
||||
description: "Exists",
|
||||
color: "red",
|
||||
roles: [MockRole as any],
|
||||
socials: {
|
||||
twitter: "twtrusrname",
|
||||
github: "ghusrname",
|
||||
website: "example.com",
|
||||
},
|
||||
pronouns: {
|
||||
id: "they/them",
|
||||
they: "they",
|
||||
them: "them",
|
||||
their: "their",
|
||||
theirs: "theirs",
|
||||
themselves: "themselves",
|
||||
},
|
||||
profileImg: {
|
||||
relativePath:
|
||||
"https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png",
|
||||
relativeServerPath:
|
||||
"https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png",
|
||||
absoluteFSPath:
|
||||
"https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png",
|
||||
height: 200,
|
||||
width: 200,
|
||||
},
|
||||
};
|
||||
|
||||
export const MockUnicornTwo: UnicornInfo = {
|
||||
name: "Diane",
|
||||
firstName: "Diane",
|
||||
lastName: "",
|
||||
id: "diane",
|
||||
description: "Is a human",
|
||||
color: "blue",
|
||||
roles: [MockRole] as any[],
|
||||
socials: {
|
||||
twitter: "twtrusrname2",
|
||||
github: "ghusrname2",
|
||||
website: "example.com/2",
|
||||
},
|
||||
pronouns: {
|
||||
id: "they/them",
|
||||
they: "they",
|
||||
them: "them",
|
||||
their: "their",
|
||||
theirs: "theirs",
|
||||
themselves: "themselves",
|
||||
},
|
||||
profileImg: {
|
||||
relativePath:
|
||||
"https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png",
|
||||
relativeServerPath:
|
||||
"https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png",
|
||||
absoluteFSPath:
|
||||
"https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png",
|
||||
height: 200,
|
||||
width: 200,
|
||||
},
|
||||
};
|
||||
@@ -1,2 +0,0 @@
|
||||
// @ts-ignore
|
||||
module.exports = "test-file-stub";
|
||||
@@ -1,23 +0,0 @@
|
||||
// Optional: configure or set up a testing framework before each test.
|
||||
// If you delete this file, remove `setupFilesAfterEnv` from `jest.config.js`
|
||||
|
||||
// Used for __tests__/testing-library.js
|
||||
// Learn more: https://github.com/testing-library/jest-dom
|
||||
require("@testing-library/jest-dom/extend-expect");
|
||||
require("./modules");
|
||||
|
||||
global.IntersectionObserver = class IntersectionObserver {
|
||||
constructor() {}
|
||||
|
||||
observe() {
|
||||
return null;
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
return null;
|
||||
}
|
||||
|
||||
unobserve() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
@@ -1,8 +0,0 @@
|
||||
jest.mock("disqus-react", () => {
|
||||
const React = require("react");
|
||||
return {
|
||||
DiscussionEmbed: () => <></>
|
||||
};
|
||||
});
|
||||
|
||||
export default {};
|
||||
@@ -1,3 +0,0 @@
|
||||
import "./disqus-react";
|
||||
import "./next-link";
|
||||
import "./next-image";
|
||||
@@ -1,10 +0,0 @@
|
||||
jest.mock("next/image", () => {
|
||||
const React = require("react");
|
||||
|
||||
return function NextImage(props: any) {
|
||||
const { priority, ...rest } = props;
|
||||
return <img {...rest}>{props.children}</img>;
|
||||
};
|
||||
});
|
||||
|
||||
export default {};
|
||||
@@ -1,27 +0,0 @@
|
||||
export const mockOnLinkClick = jest.fn();
|
||||
|
||||
afterEach(() => {
|
||||
mockOnLinkClick.mockReset();
|
||||
});
|
||||
|
||||
jest.mock("next/link", () => {
|
||||
const React = require("react");
|
||||
const { default: Link } = jest.requireActual("next/link");
|
||||
|
||||
return function NextLink(props: any) {
|
||||
return (
|
||||
<Link
|
||||
{...props}
|
||||
onClick={(e: Event) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
mockOnLinkClick();
|
||||
}}
|
||||
>
|
||||
{props.children}
|
||||
</Link>
|
||||
);
|
||||
};
|
||||
});
|
||||
|
||||
export default {};
|
||||
@@ -1 +0,0 @@
|
||||
export default () => null;
|
||||
7
astro.config.mjs
Normal file
@@ -0,0 +1,7 @@
|
||||
import { defineConfig } from 'astro/config';
|
||||
import preact from '@astrojs/preact';
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
integrations: [preact()],
|
||||
});
|
||||
@@ -1,55 +0,0 @@
|
||||
const { resolve } = require("path");
|
||||
|
||||
// Add any custom config to be passed to Jest
|
||||
module.exports = {
|
||||
testEnvironment: "jsdom",
|
||||
setupFilesAfterEnv: ["<rootDir>/__mocks__/jest.setup.js"],
|
||||
watchPlugins: [
|
||||
"jest-watch-typeahead/filename",
|
||||
"jest-watch-typeahead/testname",
|
||||
],
|
||||
collectCoverageFrom: [
|
||||
"**/*.{js,jsx,ts,tsx}",
|
||||
"!**/*.d.ts",
|
||||
"!**/node_modules/**",
|
||||
],
|
||||
transform: {
|
||||
// Use babel-jest to transpile tests with the next/babel preset
|
||||
// https://jestjs.io/docs/configuration#transform-objectstring-pathtotransformer--pathtotransformer-object
|
||||
"^.+\\.(js|jsx|ts|tsx)$": [
|
||||
"babel-jest",
|
||||
{
|
||||
presets: ["next/babel"],
|
||||
plugins: ["transform-require-context"],
|
||||
},
|
||||
],
|
||||
},
|
||||
transformIgnorePatterns: [
|
||||
// ...your ignore patterns
|
||||
"^((?!node_modules).)*node_modules.((?!unified|unist|hast|remark|mdast|micromark|retext|nlcst|rehype|decode-named-character-reference|character-entities|zwitch|longest-streak|unherit|parse-|strip-|html-void-elements|stringify-entities|ccount|markdown-|slash|vfile|property-|space-separated-|comma-separated-|web-namespaces|junk).)*$",
|
||||
"^.+\\.module\\.(css|sass|scss)$",
|
||||
],
|
||||
// moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths),
|
||||
moduleNameMapper: {
|
||||
// NextJS
|
||||
// Handle CSS imports (with CSS modules)
|
||||
// https://jestjs.io/docs/webpack#mocking-css-modules
|
||||
"^.+\\.module\\.(css|sass|scss)$": "identity-obj-proxy",
|
||||
// Handle module aliases
|
||||
"^@/components/(.*)$": "<rootDir>/components/$1",
|
||||
// UU Files
|
||||
".+\\.(css|styl|less|sass|scss)$": `identity-obj-proxy`,
|
||||
".+\\.svg$": `<rootDir>/__mocks__/svg-comp-mock.ts`,
|
||||
".+\\.(jpg|svg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)(?:\\?.+)?$": `<rootDir>/__mocks__/file-mock.ts`,
|
||||
// UU TS
|
||||
"^__mocks__/(.*)$": resolve(__dirname, "./__mocks__/$1"),
|
||||
"^constants/(.*)$": resolve(__dirname, "./src/constants/$1"),
|
||||
"^types/(.*)$": resolve(__dirname, "./src/types/$1"),
|
||||
"^components/(.*)$": resolve(__dirname, "./src/components/$1"),
|
||||
"^utils/(.*)$": resolve(__dirname, "./src/utils/$1"),
|
||||
"^uu-types$": resolve(__dirname, "./src/types"),
|
||||
"^uu-utils$": resolve(__dirname, "./src/utils"),
|
||||
"^uu-constants$": resolve(__dirname, "./src/constants"),
|
||||
"^assets/(.*)": resolve(__dirname, "./src/assets/$1"),
|
||||
},
|
||||
};
|
||||
5
next-env.d.ts
vendored
@@ -1,5 +0,0 @@
|
||||
/// <reference types="next" />
|
||||
/// <reference types="next/image-types/global" />
|
||||
|
||||
// NOTE: This file should not be edited
|
||||
// see https://nextjs.org/docs/basic-features/typescript for more information.
|
||||
@@ -1,16 +0,0 @@
|
||||
const getSiteUrlAndBuildMode = require("./src/constants/site-url");
|
||||
|
||||
const { siteUrl, buildMode } = getSiteUrlAndBuildMode();
|
||||
|
||||
module.exports = {
|
||||
siteUrl,
|
||||
sourceDir: ".next",
|
||||
generateRobotsTxt: true,
|
||||
...(buildMode === "production"
|
||||
? {}
|
||||
: {
|
||||
robotsTxtOptions: {
|
||||
policies: [{ userAgent: "*", disallow: "/" }],
|
||||
},
|
||||
}),
|
||||
};
|
||||
@@ -1,88 +0,0 @@
|
||||
const path = require("path");
|
||||
const CopyPlugin = require("copy-webpack-plugin");
|
||||
const withPlugins = require("next-compose-plugins");
|
||||
const webpack = require("webpack");
|
||||
const languagesObj = require("./content/data/languages.json");
|
||||
|
||||
const withBundleAnalyzer = require("@next/bundle-analyzer")({
|
||||
enabled: process.env.ANALYZE === "true",
|
||||
});
|
||||
|
||||
module.exports = withPlugins([withBundleAnalyzer], {
|
||||
i18n: {
|
||||
locales: Object.keys(languagesObj),
|
||||
defaultLocale: "en",
|
||||
localeDetection: false,
|
||||
},
|
||||
webpack: (config) => {
|
||||
config.plugins.push(
|
||||
new CopyPlugin({
|
||||
patterns: [
|
||||
{
|
||||
from: path.resolve(__dirname, "content/blog"),
|
||||
to: path.resolve(__dirname, "public/posts"),
|
||||
globOptions: {
|
||||
ignore: ["**/*.md"],
|
||||
},
|
||||
},
|
||||
{
|
||||
from: path.resolve(__dirname, "content/collections"),
|
||||
to: path.resolve(__dirname, "public/collections"),
|
||||
globOptions: {
|
||||
ignore: ["**/*.md"],
|
||||
},
|
||||
},
|
||||
{
|
||||
from: path.resolve(__dirname, "content/data"),
|
||||
to: path.resolve(__dirname, "public/unicorns"),
|
||||
globOptions: {
|
||||
ignore: ["**/*.md", "**/*.json"],
|
||||
},
|
||||
},
|
||||
],
|
||||
})
|
||||
);
|
||||
|
||||
/**
|
||||
* 🐲 HERE ARE DRAGONS!
|
||||
*
|
||||
* This is a bad bad idea. Well, it leads to much better bundle size (50+kb!)
|
||||
* but it does so by dynamically replacing a module only for client (not server)
|
||||
*
|
||||
* For more explaination of why we're using webpack to do this, see `useMarkdownRenderer`
|
||||
*/
|
||||
config.plugins.push(
|
||||
new webpack.NormalModuleReplacementPlugin(
|
||||
/rehype-parse$/,
|
||||
"rehype-dom-parse"
|
||||
)
|
||||
);
|
||||
|
||||
config.module.rules.push({
|
||||
test: /\.svg$/,
|
||||
use: [
|
||||
{
|
||||
loader: "@svgr/webpack",
|
||||
options: {
|
||||
svgoConfig: {
|
||||
plugins: [
|
||||
{
|
||||
name: "preset-default",
|
||||
params: {
|
||||
overrides: {
|
||||
removeViewBox: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
config.experiments.topLevelAwait = true;
|
||||
|
||||
return config;
|
||||
},
|
||||
});
|
||||
33161
package-lock.json
generated
110
package.json
@@ -2,7 +2,7 @@
|
||||
"name": "unicorn-utterances-site",
|
||||
"private": true,
|
||||
"description": "Learning programming from magically majestic words",
|
||||
"version": "0.2.0",
|
||||
"version": "0.3.0-alpha.1",
|
||||
"bugs": {
|
||||
"url": "https://github.com/unicorn-utterances/unicorn-utterances/issues"
|
||||
},
|
||||
@@ -18,57 +18,26 @@
|
||||
"url": "git+https://github.com/unicorn-utterances/unicorn-utterances.git"
|
||||
},
|
||||
"scripts": {
|
||||
"analyze": "env-cmd -f ./src/environments/analyze.env next build",
|
||||
"build": "npm run lunr && npm run rss && next build && npm run sitemap && npm run epub && npm run social-previews:build",
|
||||
"build-beta": "env-cmd -f ./src/environments/beta.env npm run build",
|
||||
"debug": "npm run lunr && env-cmd -f ./src/environments/debug.env next -p 9000",
|
||||
"dev": "npm run lunr && env-cmd -f ./src/environments/dev.env next -p 9000",
|
||||
"lint": "next lint",
|
||||
"lunr": "node --experimental-loader esbuild-node-loader src/build-scripts/lunr-index.ts",
|
||||
"postinstall": "husky install",
|
||||
"rss": "node --experimental-loader esbuild-node-loader src/build-scripts/gen-rss.ts",
|
||||
"sitemap": "node ./node_modules/next-sitemap/bin/next-sitemap",
|
||||
"social-previews:build": "node --experimental-loader esbuild-node-loader src/build-scripts/create-post-social-preview-png.ts",
|
||||
"social-previews:dev": "node --experimental-loader esbuild-node-loader src/build-scripts/preview-social-preview-site.ts",
|
||||
"epub": "node --experimental-loader esbuild-node-loader src/build-scripts/generate-epubs.ts",
|
||||
"start": "next start",
|
||||
"test": "jest",
|
||||
"typecheck": "tsc"
|
||||
"dev": "astro dev",
|
||||
"start": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@astrojs/preact": "^0.3.1",
|
||||
"@types/node": "^18.0.2",
|
||||
"astro": "^1.0.0-beta.63"
|
||||
},
|
||||
"dependencies": {
|
||||
"@lesjoursfr/html-to-epub": "github:unicorn-utterances/html-to-epub#built",
|
||||
"@remark-embedder/core": "^2.0.0",
|
||||
"@remark-embedder/transformer-oembed": "^2.0.0",
|
||||
"@types/github-slugger": "^1.3.0",
|
||||
"@types/lodash": "^4.14.182",
|
||||
"batteries-not-included": "^0.1.0",
|
||||
"chrome-aws-lambda": "^10.1.0",
|
||||
"classnames": "2.3.1",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"date-fns": "^2.28.0",
|
||||
"dayjs": "^1.11.3",
|
||||
"disqus-react": "^1.1.3",
|
||||
"framer-motion": "^6.3.16",
|
||||
"gatsby-remark-embedder": "^6.0.1",
|
||||
"github-slugger": "^1.4.0",
|
||||
"gray-matter": "4.0.3",
|
||||
"hast-util-to-xast": "^2.0.0",
|
||||
"jest-environment-jsdom": "^28.1.2",
|
||||
"hast": "^1.0.0",
|
||||
"hast-util-has-property": "^2.0.0",
|
||||
"hast-util-heading-rank": "^2.1.0",
|
||||
"junk": "^4.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"lunr": "^2.3.9",
|
||||
"next": "^12.1.6",
|
||||
"puppeteer-core": "^10.4.0",
|
||||
"react": "^18.1.0",
|
||||
"react-dom": "^18.1.0",
|
||||
"react-medium-image-zoom": "^4.4.3",
|
||||
"react-paginate": "^8.1.3",
|
||||
"react-tabs": "^5.1.0",
|
||||
"rehype-dom-parse": "^4.0.2",
|
||||
"rehype-img-size": "github:unicorn-utterances/rehype-img-size#relative-path-full",
|
||||
"rehype-parse": "^8.0.4",
|
||||
"rehype-raw": "^6.1.1",
|
||||
"rehype-react": "^7.1.1",
|
||||
"preact": "^10.7.3",
|
||||
"rehype-img-size": "^1.0.1",
|
||||
"rehype-slug-custom-id": "^1.1.0",
|
||||
"rehype-stringify": "^9.0.3",
|
||||
"remark-behead": "^3.1.0",
|
||||
@@ -80,58 +49,13 @@
|
||||
"remark-stringify": "^10.0.2",
|
||||
"remark-unwrap-images": "^3.0.1",
|
||||
"retext-english": "^4.1.0",
|
||||
"sass": "^1.53.0",
|
||||
"sharp": "^0.30.7",
|
||||
"shiki-twoslash": "^3.1.0",
|
||||
"slash": "^4.0.0",
|
||||
"strip-markdown": "^5.0.0",
|
||||
"terser": "^4.8.1",
|
||||
"ts-util-helpers": "^1.1.0-alpha.2",
|
||||
"typescript": "^4.7.4",
|
||||
"unified": "^10.1.2",
|
||||
"unist-util-flat-filter": "^2.0.0",
|
||||
"unist-util-replace-all-between": "^0.1.1",
|
||||
"xast-util-to-xml": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.18.6",
|
||||
"@babel/preset-env": "^7.18.6",
|
||||
"@compodoc/live-server": "^1.2.3",
|
||||
"@next/bundle-analyzer": "^12.1.6",
|
||||
"@svgr/webpack": "^6.2.1",
|
||||
"@testing-library/jest-dom": "^5.16.4",
|
||||
"@testing-library/react": "^13.3.0",
|
||||
"@types/gtag.js": "^0.0.10",
|
||||
"@types/jest": "^28.1.4",
|
||||
"@types/live-server": "^1.2.1",
|
||||
"@types/lunr": "^2.3.4",
|
||||
"@types/node": "^18.0.0",
|
||||
"@types/react": "^18.0.14",
|
||||
"@types/react-dom": "^18.0.5",
|
||||
"@types/webpack-env": "^1.17.0",
|
||||
"@xmldom/xmldom": "^0.8.2",
|
||||
"babel-jest": "^28.1.2",
|
||||
"babel-plugin-transform-require-context": "^0.1.1",
|
||||
"chokidar": "^3.5.3",
|
||||
"env-cmd": "^10.1.0",
|
||||
"esbuild-node-loader": "^0.8.0",
|
||||
"eslint": "^8.18.0",
|
||||
"eslint-config-next": "^12.2.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"feed": "^4.2.2",
|
||||
"gatsby": "^4.17.2",
|
||||
"hast-util-heading-rank": "^2.1.0",
|
||||
"husky": "^8.0.1",
|
||||
"identity-obj-proxy": "^3.0.0",
|
||||
"jest": "^28.1.2",
|
||||
"jest-watch-typeahead": "^1.1.0",
|
||||
"lint-staged": "^13.0.3",
|
||||
"next-compose-plugins": "^2.2.1",
|
||||
"next-sitemap": "^2.5.20",
|
||||
"prettier": "^2.7.1",
|
||||
"puppeteer": "^14.0.0",
|
||||
"react-test-renderer": "^18.1.0",
|
||||
"ts-jest": "^28.0.5",
|
||||
"unist-util-find-all-after": "^4.0.0"
|
||||
"unist-util-visit": "^4.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
12
public/.gitignore
vendored
@@ -1,12 +0,0 @@
|
||||
# The following are generated
|
||||
rss.xml
|
||||
search_index.json
|
||||
sitemap.xml
|
||||
sitemap*.xml
|
||||
robots.txt
|
||||
*.twitter-preview.png
|
||||
# These are part of the copy file
|
||||
unicorns/
|
||||
posts/
|
||||
collections/
|
||||
*.epub
|
||||
BIN
public/assets/blog/introducing-astro.jpg
Normal file
|
After Width: | Height: | Size: 270 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 9.8 KiB |
@@ -1,51 +0,0 @@
|
||||
{
|
||||
"name": "Unicorn Utterances",
|
||||
"short_name": "Unicorn Utterances",
|
||||
"start_url": "/",
|
||||
"background_color": "#ffffff",
|
||||
"theme_color": "#127db3",
|
||||
"display": "minimal-ui",
|
||||
"cacheDigest": "e32c87870d4630382a9dae8cae941af6",
|
||||
"icons": [
|
||||
{
|
||||
"src": "icons/icon-48x48.png?v=e32c87870d4630382a9dae8cae941af6",
|
||||
"sizes": "48x48",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "icons/icon-72x72.png?v=e32c87870d4630382a9dae8cae941af6",
|
||||
"sizes": "72x72",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "icons/icon-96x96.png?v=e32c87870d4630382a9dae8cae941af6",
|
||||
"sizes": "96x96",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "icons/icon-144x144.png?v=e32c87870d4630382a9dae8cae941af6",
|
||||
"sizes": "144x144",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "icons/icon-192x192.png?v=e32c87870d4630382a9dae8cae941af6",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "icons/icon-256x256.png?v=e32c87870d4630382a9dae8cae941af6",
|
||||
"sizes": "256x256",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "icons/icon-384x384.png?v=e32c87870d4630382a9dae8cae941af6",
|
||||
"sizes": "384x384",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "icons/icon-512x512.png?v=e32c87870d4630382a9dae8cae941af6",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 112 KiB |
BIN
public/social.jpg
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
public/social.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
@@ -1,3 +0,0 @@
|
||||
These assets belong entirely to the sponsors themselves. We claim no rights
|
||||
over these files in any way. As a result, please consult the associated
|
||||
group for inquiries regarding rights of these assets.
|
||||
@@ -1,14 +0,0 @@
|
||||
<svg width="475" height="67" viewBox="0 0 475 67" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M474.76 65.1389L456.947 65.8479L456.149 61.328C452.693 64.7844 448.35 66.6455 443.387 66.6455C437.538 66.6455 433.284 64.6958 430.271 60.6191C427.346 56.631 426.017 51.1363 426.017 43.8691C426.017 35.8929 427.967 29.7778 432.044 25.4352C436.032 21.1812 441.969 18.877 449.946 18.877C451.807 18.877 453.668 19.0542 455.352 19.6746V9.03967L448.616 7.44444V0.708984L464.391 0L465.987 1.86109L467.582 3.27909V56.4537L474.406 58.049L474.76 65.1389ZM455.44 51.8453V30.3095C453.934 29.5119 451.984 28.9802 448.794 28.9802C442.324 28.9802 438.956 33.7659 438.956 43.3373C438.956 52.377 441.615 56.8082 447.11 56.8082C448.705 56.8082 450.3 56.5423 451.364 55.4788C452.87 54.6812 453.756 53.8836 454.288 53.086L455.44 51.8453Z" fill="#CC4E41"/>
|
||||
<path d="M114.237 16.9272C111.578 15.8637 108.388 15.5979 104.754 15.5979C95.4484 15.5979 90.7513 22.3333 90.7513 36.336C90.7513 49.2751 95.537 55.7447 105.286 55.7447C107.767 55.7447 110.426 55.213 112.819 54.2381C115.478 53.1746 117.604 52.2884 119.022 51.3135L120.972 49.8955L125.581 57.6058C125.492 57.6945 124.872 58.3148 124.694 58.6693C124.251 58.9352 123.188 59.8214 121.77 61.0622C120.263 62.1257 118.579 63.0119 117.161 63.8095C115.566 64.6072 113.439 65.3161 111.046 65.9365C108.565 66.6455 106.261 67 103.779 67C95.0939 67 88.5357 64.3413 83.75 59.2897C79.1415 54.0608 76.66 46.705 76.66 36.9563C76.66 27.119 79.3188 19.4087 84.459 13.7368C89.5992 8.15343 96.4233 5.22882 105.374 5.22882C108.299 5.22882 111.578 5.49468 114.769 6.2923C117.959 7.08992 120.618 7.62167 122.39 8.24204L125.049 9.30555L124.34 25.2579H116.098L114.237 16.9272Z" fill="#515050"/>
|
||||
<path d="M154.384 19.3201C161.119 19.3201 166.348 21.2698 170.247 25.3465C173.969 29.3346 175.919 34.918 175.919 42.0966C175.919 49.8069 173.969 55.4788 169.804 59.9987C165.639 64.5185 160.233 66.4683 153.32 66.4683C139.14 66.4683 131.784 58.7579 131.784 43.2487C131.784 35.5384 133.734 29.8664 137.899 25.7011C141.622 21.2698 147.471 19.3201 154.384 19.3201ZM153.852 28.8915C150.661 28.8915 148.091 29.955 146.762 32.082C145.432 34.209 144.369 37.6653 144.369 42.8942C144.369 47.6799 145.078 51.4021 146.319 53.5291C147.825 55.922 150.041 56.8968 153.143 56.8968C156.333 56.8968 158.46 55.8333 159.878 53.5291C161.385 51.4021 162.005 47.5026 162.005 42.6283C162.005 38.0198 161.296 34.6521 160.055 32.5251C158.992 30.0436 156.865 28.8915 153.852 28.8915Z" fill="#515050"/>
|
||||
<path d="M229.98 65.1389L212.167 65.8479L211.458 61.328C208.001 64.7844 203.57 66.6455 198.696 66.6455C192.846 66.6455 188.593 64.6958 185.579 60.6191C182.655 56.631 181.325 51.1363 181.325 43.8691C181.325 35.8929 183.275 29.7778 187.352 25.4352C191.34 21.1812 197.278 18.877 205.254 18.877C207.115 18.877 208.976 19.0542 210.66 19.6746V9.03967L203.925 7.44444V0.708984L219.877 0L221.738 1.86109L223.245 3.27909V56.4537L229.98 58.049V65.1389ZM210.571 51.8453V30.3095C209.065 29.5119 206.849 28.9802 204.013 28.9802C197.544 28.9802 194.176 33.7659 194.176 43.3373C194.176 52.377 196.835 56.8082 202.241 56.8082C203.747 56.8082 205.431 56.5423 206.761 55.4788C208.179 54.6812 209.153 53.8836 209.685 53.086L210.571 51.8453Z" fill="#515050"/>
|
||||
<path d="M275.71 45.3756L247.616 45.6415C247.794 49.0979 248.946 52.0225 250.807 53.795C252.668 55.6561 254.884 56.7196 257.72 56.7196C259.669 56.7196 261.974 56.4537 264.366 55.6561C266.759 54.8585 268.62 54.3267 269.773 53.7063L271.722 52.6429L275.444 59.3783C274.735 59.9101 274.026 60.619 272.786 61.2394C271.634 62.037 269.329 63.1005 266.05 64.4299C262.594 65.7593 259.403 66.3796 256.213 66.3796C249.034 66.3796 243.628 64.4299 239.729 60.3532C236.007 56.3651 234.057 50.7817 234.057 43.6032C234.057 36.1587 236.007 30.1323 240.083 25.7011C244.071 21.4471 249.655 19.0542 256.745 19.0542C263.037 19.0542 267.646 20.9153 271.013 24.3717C274.381 27.828 276.065 32.8796 276.065 38.9947L275.71 45.3756ZM256.036 28.9801C253.643 28.9801 251.959 29.7778 250.364 31.373C248.769 32.9682 247.971 35.0952 247.705 37.6653H262.86C262.86 32.082 260.733 28.9801 256.036 28.9801Z" fill="#515050"/>
|
||||
<path d="M281.471 20.7381L299.019 20.0291L299.728 25.8783C299.993 25.3466 300.702 24.6376 301.589 24.0172C302.475 23.3082 303.982 22.1561 305.843 21.0926C307.792 19.9405 309.831 19.2315 311.515 19.2315C312.844 19.2315 314.173 19.3201 315.503 19.586C316.832 19.8518 317.896 20.1177 318.339 20.3836L319.136 20.6495L318.427 36.7791H311.16L309.831 29.5119C308.413 29.5119 306.906 29.8664 305.311 30.664C303.716 31.4616 302.652 32.1706 301.855 32.9683L300.702 34.209V56.8082L308.767 58.758V65.4934H281.471V58.758L288.295 56.8082V29.1574L281.471 27.5622V20.7381Z" fill="#515050"/>
|
||||
<path d="M349.534 58.2262V65.4934H323.745V58.2262L330.037 56.2765V16.041L323.745 13.5595V6.64682L343.154 6.2923H351.307C357.776 6.2923 362.739 7.71031 366.462 11.078C370.184 14.2685 371.956 18.5225 371.956 24.2831C371.956 31.1958 370.007 36.5132 365.575 40.0582C361.41 43.5145 355.472 45.3756 347.673 45.3756H343.065V56.5423L349.534 58.2262ZM342.976 16.1296V35.0066H347.496C350.952 35.0066 353.877 34.209 355.65 32.5251C357.511 30.9299 358.486 28.537 358.486 25.6124C358.486 22.7764 357.688 20.3836 356.093 18.7883C354.497 17.1931 352.37 16.1296 349.623 16.1296H342.976Z" fill="#CC4E41"/>
|
||||
<path d="M421.586 65.1389L404.836 65.8479L403.418 60.4418C402.886 60.7077 402.177 61.5053 401.468 62.3029C400.671 63.1005 398.898 63.8982 396.417 65.1389C393.935 66.291 391.808 67 389.593 67C385.516 67 382.325 65.8479 380.021 63.5437C377.628 61.2394 376.565 57.9603 376.565 53.7063C376.565 44.4008 383.389 39.7037 396.948 39.7037H402.798V35.0952C402.798 30.8413 400.671 28.8029 396.328 28.8029C394.999 28.8029 393.758 28.9802 392.429 29.0688C391.099 29.246 390.302 29.4233 389.681 29.7778L388.884 29.955L387.554 35.3611H379.933L379.224 22.7764C386.048 20.3836 392.251 19.3201 397.569 19.3201C404.038 19.3201 408.47 20.6495 411.217 23.0423C413.876 25.4352 415.205 29.7778 415.205 35.9815V56.9855L421.497 58.4034L421.586 65.1389ZM388.706 52.0225C388.706 55.4788 390.302 57.2513 393.758 57.2513C395.087 57.2513 396.417 56.8968 397.923 55.922C399.341 54.8585 400.582 54.3267 401.38 53.3518L402.709 52.1997V46.6164H397.923C394.556 46.6164 392.163 46.9709 391.011 47.9458C389.415 48.6548 388.706 50.1614 388.706 52.0225Z" fill="#CC4E41"/>
|
||||
<path d="M56.8082 2.48148H50.1614H4.96297C2.12699 2.48148 0 4.60847 0 7.44445V52.2884V59.1124C0 61.9484 2.12699 64.0754 4.96297 64.0754H11.6098H56.8082C59.5556 64.0754 61.7712 61.9484 61.7712 59.1124V14.2685V7.44445C61.7712 4.60847 59.6442 2.48148 56.8082 2.48148Z" fill="#CC4E41"/>
|
||||
<path d="M12.5848 34.1204L22.5993 37.6654V42.6283L7.44458 36.2474V32.082L22.5993 25.7011V30.664L12.5848 34.1204Z" fill="white"/>
|
||||
<path d="M28.3599 47.1481H24.6377L34.0319 19.4087H37.8427L28.3599 47.1481Z" fill="white"/>
|
||||
<path d="M49.0979 34.1204L38.9061 30.5754V25.7011L54.1495 32.082V36.2474L38.9061 42.6283V37.754L49.0979 34.1204Z" fill="white"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.8 KiB |
@@ -1,38 +0,0 @@
|
||||
<svg width="508" height="206" viewBox="0 0 508 206" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="507.333" height="206" rx="16" fill="white"/>
|
||||
<mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="30" y="47" width="99" height="112">
|
||||
<path d="M77.7698 47.8198C78.8452 47.2196 80.1548 47.2196 81.2301 47.8198L126.951 73.3384C128.075 73.9655 128.771 75.1515 128.771 76.4383V128.458C128.771 129.722 128.098 130.891 127.005 131.527L81.2843 158.108C80.1812 158.75 78.8188 158.75 77.7157 158.108L31.9948 131.527C30.9017 130.891 30.2291 129.722 30.2291 128.458V76.4383C30.2291 75.1515 30.9254 73.9655 32.049 73.3384L77.7698 47.8198Z" fill="#B3D2FF"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0)">
|
||||
<rect x="24.5" y="48" width="110" height="110" fill="#9ECCFA"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M84.4773 69.3132C90.6406 65.5532 99.3151 69.4549 104.708 76.6458C111.152 85.2375 116.101 87.8741 120.197 88.1583C123.43 87.4247 126.309 85.7654 128.244 83.1491C128.771 81.5037 128.771 80.0833 128.771 80.0833V82.375V128.208V130.5L79.5 159.146L30.2291 130.5V116.75C30.2291 105.292 32.5208 98.9896 37.1373 96.125L84.4729 69.3125C84.4729 69.3125 84.4744 69.3127 84.4773 69.3132Z" fill="#0659FF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M84.4773 69.3132C90.6406 65.5532 99.3151 69.4549 104.708 76.6458C111.152 85.2375 116.101 87.8741 120.197 88.1583C123.43 87.4247 126.309 85.7654 128.244 83.1491C128.771 81.5037 128.771 80.0833 128.771 80.0833V82.375V128.208V130.5L79.5 159.146L30.2291 130.5V116.75C30.2291 105.292 32.5208 98.9896 37.1373 96.125L84.4729 69.3125C84.4729 69.3125 84.4744 69.3127 84.4773 69.3132Z" fill="url(#paint0_linear)"/>
|
||||
<path d="M55.4375 104.146C46.3477 92.0262 30.2291 89.25 30.2291 116.75V130.5L79.5 159.146L128.771 130.5L86.375 98.0729L81.0542 100.999C80.0956 101.527 79.5022 102.536 79.4975 103.63C79.4674 110.552 79.0728 114.525 73.9035 115.476C69.2572 116.332 63.5242 114.928 55.4375 104.146Z" fill="#0F2CBD"/>
|
||||
<g style="mix-blend-mode:soft-light">
|
||||
<path d="M31.7936 75.2274L77.9621 100.996C78.9116 101.526 79.5 102.528 79.5 103.615V157.408C79.5 158.179 80.3359 158.66 81.0026 158.272L128.771 130.5V74.3542L79.5 46.8542L31.7936 73.481C31.1101 73.8625 31.1101 74.8459 31.7936 75.2274Z" fill="white"/>
|
||||
<path d="M31.7936 75.2274L77.9621 100.996C78.9116 101.526 79.5 102.528 79.5 103.615V157.408C79.5 158.179 80.3359 158.66 81.0026 158.272L128.771 130.5V74.3542L79.5 46.8542L31.7936 73.481C31.1101 73.8625 31.1101 74.8459 31.7936 75.2274Z" fill="#002BFF" fill-opacity="0.2"/>
|
||||
</g>
|
||||
<path d="M126.912 75.3919L81.0379 100.996C80.0884 101.526 79.5 102.528 79.5 103.615V157.408C79.5 158.179 80.336 158.66 81.0026 158.272L128.771 130.5V76.4834C128.771 75.5292 127.745 74.9268 126.912 75.3919Z" fill="#0F2CBD"/>
|
||||
<path d="M126.912 75.3919L81.0379 100.996C80.0884 101.526 79.5 102.528 79.5 103.615V157.408C79.5 158.179 80.336 158.66 81.0026 158.272L128.771 130.5V76.4834C128.771 75.5292 127.745 74.9268 126.912 75.3919Z" fill="url(#paint1_linear)"/>
|
||||
</g>
|
||||
<path d="M171.02 129.091C166.547 129.091 162.464 128.015 158.773 125.864C155.107 123.688 152.173 120.523 149.973 116.367C147.773 112.212 146.673 107.127 146.673 101.114C146.673 95.1006 147.761 90.0284 149.937 85.8973C152.137 81.7661 155.07 78.6372 158.737 76.5105C162.403 74.3839 166.498 73.3205 171.02 73.3205C175.542 73.3205 179.637 74.3839 183.303 76.5105C186.97 78.6372 189.891 81.7661 192.067 85.8973C194.242 90.0284 195.33 95.1006 195.33 101.114C195.33 107.127 194.23 112.212 192.03 116.367C189.83 120.523 186.884 123.688 183.193 125.864C179.527 128.015 175.469 129.091 171.02 129.091ZM171.02 119.961C173.293 119.961 175.396 119.337 177.327 118.091C179.282 116.844 180.847 114.84 182.02 112.077C183.193 109.315 183.78 105.661 183.78 101.114C183.78 96.5673 183.181 92.9251 181.983 90.1873C180.81 87.4495 179.258 85.4817 177.327 84.2839C175.396 83.0617 173.293 82.4506 171.02 82.4506C168.747 82.4506 166.632 83.0617 164.677 84.2839C162.746 85.4817 161.193 87.4495 160.02 90.1873C158.847 92.9251 158.26 96.5673 158.26 101.114C158.26 105.661 158.847 109.315 160.02 112.077C161.193 114.84 162.746 116.844 164.677 118.091C166.632 119.337 168.747 119.961 171.02 119.961Z" fill="#899BBD"/>
|
||||
<path d="M220.967 129.091C216.689 129.091 212.937 128.235 209.71 126.524C206.508 124.789 204.015 122.393 202.23 119.337C200.446 116.257 199.554 112.688 199.554 108.631C199.554 104.573 200.446 101.041 202.23 98.034C204.015 95.0273 206.508 92.6928 209.71 91.0306C212.937 89.3684 216.689 88.5373 220.967 88.5373C224.169 88.5373 226.992 89.0139 229.437 89.9673C231.906 90.8962 233.971 92.1306 235.634 93.6706C237.32 95.1862 238.591 96.8728 239.447 98.7306C240.302 100.564 240.73 102.385 240.73 104.194V104.487H229.474C229.474 104.292 229.437 104.011 229.364 103.644C229.07 102.104 228.239 100.723 226.87 99.5006C225.526 98.2784 223.534 97.6673 220.894 97.6673C218.082 97.6673 215.736 98.6084 213.854 100.491C211.996 102.348 211.067 105.062 211.067 108.631C211.067 112.151 211.996 114.925 213.854 116.954C215.736 118.958 218.082 119.961 220.894 119.961C223.778 119.961 225.88 119.313 227.2 118.017C228.52 116.697 229.278 115.121 229.474 113.287H240.73C240.73 115.121 240.302 116.966 239.447 118.824C238.616 120.682 237.369 122.381 235.707 123.921C234.045 125.461 231.979 126.707 229.51 127.661C227.066 128.614 224.218 129.091 220.967 129.091Z" fill="#899BBD"/>
|
||||
<path d="M286.475 115.927C286.279 118.127 285.35 120.242 283.688 122.271C282.05 124.275 279.728 125.913 276.721 127.184C273.739 128.455 270.134 129.091 265.905 129.091C261.603 129.091 257.85 128.235 254.648 126.524C251.446 124.789 248.965 122.405 247.205 119.374C245.445 116.318 244.565 112.798 244.565 108.814C244.565 104.781 245.457 101.248 247.241 98.2173C249.05 95.1617 251.556 92.7906 254.758 91.1039C257.985 89.3928 261.713 88.5373 265.941 88.5373C270.268 88.5373 274.008 89.405 277.161 91.1406C280.315 92.8517 282.747 95.2595 284.458 98.364C286.169 101.444 287.025 105.037 287.025 109.144C287.025 110.415 286.976 111.417 286.878 112.151H256.078C256.591 114.791 257.704 116.844 259.415 118.311C261.126 119.753 263.448 120.474 266.381 120.474C269.437 120.474 271.637 119.985 272.981 119.007C274.35 118.005 275.108 116.978 275.255 115.927H286.475ZM266.088 97.044C263.473 97.044 261.309 97.704 259.598 99.024C257.911 100.344 256.775 102.214 256.188 104.634H275.401C275.23 102.703 274.387 100.955 272.871 99.3906C271.38 97.8262 269.119 97.044 266.088 97.044Z" fill="#899BBD"/>
|
||||
<path d="M305.862 129.017C301.584 129.017 298.076 128.015 295.338 126.011C292.601 124.006 291.232 121.171 291.232 117.504C291.232 114.742 291.989 112.493 293.505 110.757C295.021 109.022 297.025 107.702 299.518 106.797C302.036 105.868 304.762 105.257 307.695 104.964C311.948 104.573 314.894 104.206 316.532 103.864C318.169 103.497 318.988 102.886 318.988 102.031V101.957C318.988 100.515 318.292 99.3784 316.898 98.5473C315.529 97.7162 313.611 97.3006 311.142 97.3006C305.764 97.3006 303.075 99.2073 303.075 103.021H291.892C291.892 99.9162 292.735 97.2884 294.422 95.1373C296.133 92.9617 298.443 91.3239 301.352 90.2239C304.261 89.0995 307.548 88.5373 311.215 88.5373C314.637 88.5373 317.803 89.0628 320.712 90.1139C323.621 91.1406 325.955 92.7051 327.715 94.8073C329.499 96.8851 330.392 99.5129 330.392 102.691V119.521C330.392 120.523 330.416 121.488 330.465 122.417C330.538 123.346 330.685 124.177 330.905 124.911C331.149 125.766 331.455 126.475 331.822 127.037C332.188 127.6 332.494 127.991 332.738 128.211H321.555C321.384 128.015 321.115 127.661 320.748 127.147C320.406 126.61 320.113 125.986 319.868 125.277C319.722 124.862 319.599 124.458 319.502 124.067C318.035 125.632 316.104 126.854 313.708 127.734C311.313 128.59 308.697 129.017 305.862 129.017ZM308.905 120.511C310.665 120.511 312.327 120.193 313.892 119.557C315.456 118.897 316.727 117.871 317.705 116.477C318.683 115.084 319.172 113.263 319.172 111.014V110.684C317.778 111.051 316.299 111.356 314.735 111.601C313.171 111.821 311.618 112.016 310.078 112.187C307.585 112.432 305.715 112.86 304.468 113.471C303.246 114.057 302.635 115.06 302.635 116.477C302.635 119.166 304.725 120.511 308.905 120.511Z" fill="#899BBD"/>
|
||||
<path d="M337.243 128.211V89.2706H348.61V95.2473C350.101 93.1451 352.008 91.5073 354.33 90.3339C356.652 89.1362 359.194 88.5373 361.957 88.5373C366.748 88.5373 370.28 89.9428 372.553 92.7539C374.851 95.5651 376 99.2562 376 103.827V128.211H364.67V107.091C364.67 105.477 364.462 104.011 364.047 102.691C363.631 101.346 362.873 100.271 361.773 99.464C360.698 98.6573 359.158 98.254 357.153 98.254C354.513 98.254 352.423 99.1462 350.883 100.931C349.368 102.691 348.61 104.988 348.61 107.824V128.211H337.243Z" fill="#899BBD"/>
|
||||
<path d="M404.456 74.1272C410.102 74.1272 414.258 75.3005 416.922 77.6472C419.611 79.9939 420.955 83.1717 420.955 87.1806C420.955 89.845 420.43 92.1184 419.379 94.0006C418.328 95.8584 416.995 97.3006 415.382 98.3273C413.769 99.354 412.131 99.9162 410.469 100.014C412.204 100.063 413.989 100.515 415.822 101.371C417.655 102.202 419.195 103.558 420.442 105.441C421.689 107.298 422.312 109.78 422.312 112.884C422.312 115.842 421.713 118.482 420.515 120.804C419.342 123.102 417.435 124.911 414.796 126.231C412.18 127.551 408.697 128.211 404.345 128.211H383.079V74.1272H404.456ZM401.559 82.9272H393.969V95.9806H400.972C403.857 95.9806 406.02 95.3695 407.462 94.1473C408.904 92.9006 409.625 91.2262 409.625 89.1239C409.625 84.9928 406.937 82.9272 401.559 82.9272ZM402.145 119.374C404.957 119.374 407.083 118.738 408.526 117.467C409.968 116.172 410.689 114.424 410.689 112.224C410.689 109.755 409.87 107.885 408.232 106.614C406.594 105.343 404.419 104.707 401.705 104.707H393.969V119.374H402.145Z" fill="#899BBD"/>
|
||||
<path d="M433.725 82.9272C431.965 82.9272 430.425 82.4628 429.105 81.5339C427.809 80.605 427.161 79.2972 427.161 77.6106C427.161 75.8994 427.809 74.5794 429.105 73.6505C430.425 72.7216 431.965 72.2572 433.725 72.2572C435.485 72.2572 437.025 72.7216 438.345 73.6505C439.665 74.5794 440.325 75.8994 440.325 77.6106C440.325 79.3217 439.665 80.6417 438.345 81.5706C437.025 82.475 435.485 82.9272 433.725 82.9272ZM428.115 128.211V89.2706H439.371V128.211H428.115Z" fill="#899BBD"/>
|
||||
<path d="M465.421 129.017C463.93 129.017 462.39 128.883 460.801 128.614C459.236 128.37 457.782 127.869 456.437 127.111C455.093 126.329 453.993 125.192 453.137 123.701C452.306 122.21 451.891 120.242 451.891 117.797V98.0706H442.907V89.2706H445.437C447.417 89.2706 448.86 89.1362 449.764 88.8673C450.693 88.5984 451.28 87.9139 451.524 86.8139C451.768 85.6895 451.891 83.8684 451.891 81.3506V76.4372H463.294V89.2706H474.624V98.0706H463.294V114.571C463.294 116.257 463.49 117.626 463.881 118.677C464.296 119.728 465.311 120.254 466.924 120.254C467.731 120.254 468.488 120.181 469.197 120.034C469.931 119.887 470.481 119.741 470.847 119.594V128.137C470.334 128.357 469.613 128.553 468.684 128.724C467.755 128.92 466.667 129.017 465.421 129.017Z" fill="#899BBD"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear" x1="63.4583" y1="81.2291" x2="80.6458" y2="111.021" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#33BBFF"/>
|
||||
<stop offset="0.0001" stop-color="#32B9FE" stop-opacity="0.984375"/>
|
||||
<stop offset="1" stop-color="#33BBFF" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear" x1="94.3958" y1="93.8334" x2="116.709" y2="138.254" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#33BBFF"/>
|
||||
<stop offset="0.9999" stop-color="#3355FF" stop-opacity="0.01"/>
|
||||
<stop offset="1" stop-color="#3377FF" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 11 KiB |
@@ -1,106 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 5625 2292" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g id="Layer-1" serif:id="Layer 1" transform="matrix(4.16667,0,0,4.16667,-312.5,-937.5)">
|
||||
<g transform="matrix(0.9,0,0,0.55,75,225)">
|
||||
<rect x="0" y="0" width="1500" height="1000" style="fill:rgb(147,28,34);"/>
|
||||
</g>
|
||||
<g id="Icon">
|
||||
<g transform="matrix(1,0,0,1,178.353,395.938)">
|
||||
<path d="M0,52.311C0,52.311 -18.562,0 89.997,10.688L83.81,40.499L75.373,30.937C75.373,30.937 15.187,22.499 0,52.311" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,585.589,521.372)">
|
||||
<path d="M0,69.186C0,69.186 -13.5,39.936 -43.311,19.687L-41.061,0L-34.874,3.938C-34.874,3.938 8.437,39.936 0,69.186" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,590.089,661.431)">
|
||||
<path d="M0,-65.248C0,-65.248 -9,-33.75 -91.685,-44.436L-118.684,-43.874L-122.059,-34.312L-114.747,-25.312C-114.747,-25.312 18.562,0 0,-65.248" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,168.79,542.747)">
|
||||
<path d="M0,-99.559C0,-99.559 -20.249,-65.811 71.435,-2.249L87.748,0L78.185,-21.374C78.185,-21.374 15.188,-60.748 0,-99.559" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,505.326,341.38)">
|
||||
<path d="M0,271.549C29.17,242.786 47.266,202.823 47.266,158.62C47.266,71.016 -23.754,0 -111.358,0C-198.961,0 -269.978,71.016 -269.978,158.62C-269.978,161.361 -269.908,164.082 -269.771,166.789C-262.591,172.179 -135.729,259.305 0,271.549" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(-0.370249,-0.928932,-0.928932,0.370249,348.772,454.464)">
|
||||
<path d="M-206.381,-78.823C-206.381,-78.823 -150.413,36.498 -13.818,126.885C-91.651,150.132 -175.729,110.508 -206.381,33.604C-221.65,-4.704 -220.93,-45.42 -207.411,-81.177L-206.381,-78.823Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,356.523,549.903)">
|
||||
<path d="M0,-113.511L-102.021,-69.394L-102.48,-43.656L0,0L0.458,-28.952L-70.313,-56.985L0.458,-84.099L0,-113.511Z" style="fill:rgb(147,28,34);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,433.728,549.903)">
|
||||
<path d="M0,-113.511L102.022,-69.394L102.479,-43.656L0,0L-0.459,-28.952L70.313,-56.985L-0.459,-84.099L0,-113.511Z" style="fill:rgb(147,28,34);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(-0.229508,0.973307,0.973307,0.229508,469.091,517.391)">
|
||||
<path d="M-84.124,-88.277L74.049,-88.277L70.094,-67.493L-89.187,-66.806L-84.124,-88.277Z" style="fill:rgb(147,28,34);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Text">
|
||||
<g transform="matrix(1,0,0,1,648.814,437.279)">
|
||||
<path d="M0,88.073L-17.564,88.073L-17.564,17.626L-44.037,17.626L-44.037,0L26.41,0L26.41,17.626L0,17.626L0,88.073Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,699.544,433.408)">
|
||||
<path d="M0,91.944L-16.767,91.944L-16.767,0L0,0L0,29.051C2.006,27.537 4.074,26.463 6.203,25.826C8.332,25.193 10.503,24.877 12.713,24.877C16.767,24.877 20.575,25.643 24.136,27.179C27.7,28.713 30.8,30.822 33.441,33.505C36.083,36.187 38.169,39.321 39.706,42.902C41.242,46.484 42.01,50.302 42.01,54.354L42.01,91.944L25.121,91.944L25.121,54.354L25.244,54.354C25.244,52.636 24.914,51.009 24.259,49.472C23.604,47.938 22.704,46.597 21.557,45.451C20.41,44.303 19.081,43.403 17.564,42.749C16.05,42.093 14.433,41.764 12.713,41.764C10.953,41.764 9.294,42.093 7.739,42.749C6.183,43.403 4.832,44.303 3.685,45.451C2.538,46.597 1.637,47.938 0.982,49.472C0.327,51.009 0,52.636 0,54.354L0,91.944Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,788.23,508.952)">
|
||||
<path d="M0,-34.272C-0.777,-34.558 -1.544,-34.743 -2.303,-34.822C-3.062,-34.905 -3.85,-34.945 -4.667,-34.945C-6.961,-34.945 -9.12,-34.527 -11.146,-33.688C-13.175,-32.848 -14.935,-31.649 -16.429,-30.093C-17.925,-28.538 -19.101,-26.666 -19.959,-24.472C-20.821,-22.284 -21.249,-19.815 -21.249,-17.073C-21.249,-16.461 -21.219,-15.763 -21.157,-14.985C-21.098,-14.208 -20.995,-13.42 -20.852,-12.621C-20.709,-11.821 -20.535,-11.056 -20.328,-10.319C-20.125,-9.581 -19.858,-8.925 -19.53,-8.354L0,-34.272ZM-8.598,0.307C-7.943,0.514 -7.288,0.645 -6.634,0.707C-5.979,0.769 -5.324,0.799 -4.667,0.799C-3.03,0.799 -1.454,0.575 0.062,0.123C1.575,-0.326 2.999,-0.972 4.331,-1.811C5.659,-2.65 6.849,-3.673 7.893,-4.882C8.936,-6.09 9.786,-7.43 10.441,-8.903L22.726,3.44C21.168,5.651 19.377,7.637 17.351,9.395C15.322,11.157 13.132,12.651 10.779,13.881C8.424,15.108 5.948,16.039 3.348,16.676C0.747,17.309 -1.925,17.626 -4.667,17.626C-9.294,17.626 -13.646,16.768 -17.719,15.046C-21.795,13.328 -25.356,10.932 -28.405,7.862C-31.456,4.79 -33.861,1.138 -35.621,-3.102C-37.383,-7.338 -38.262,-11.997 -38.262,-17.073C-38.262,-22.271 -37.383,-27.022 -35.621,-31.324C-33.861,-35.622 -31.456,-39.287 -28.405,-42.316C-25.356,-45.346 -21.795,-47.7 -17.719,-49.38C-13.646,-51.059 -9.294,-51.898 -4.667,-51.898C-1.925,-51.898 0.758,-51.569 3.379,-50.914C5.998,-50.258 8.485,-49.319 10.842,-48.088C13.194,-46.863 15.396,-45.355 17.444,-43.575C19.488,-41.795 21.291,-39.798 22.846,-37.585L-8.598,0.307Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,874.089,507.725)">
|
||||
<path d="M0,-52.821L0,-17.569L17.626,-17.569C20.043,-17.569 22.314,-18.026 24.444,-18.949C26.572,-19.872 28.437,-21.129 30.033,-22.728C31.631,-24.323 32.891,-26.195 33.811,-28.343C34.731,-30.497 35.192,-32.778 35.192,-35.195C35.192,-37.607 34.731,-39.892 33.811,-42.042C32.891,-44.19 31.631,-46.064 30.033,-47.662C28.437,-49.257 26.572,-50.518 24.444,-51.439C22.314,-52.359 20.043,-52.821 17.626,-52.821L0,-52.821ZM0,17.626L-17.625,17.626L-17.625,-70.447L17.626,-70.447C20.861,-70.447 23.973,-70.027 26.961,-69.187C29.949,-68.348 32.744,-67.162 35.346,-65.626C37.946,-64.091 40.321,-62.247 42.47,-60.097C44.619,-57.949 46.462,-55.562 47.997,-52.944C49.534,-50.322 50.72,-47.516 51.56,-44.528C52.398,-41.54 52.818,-38.429 52.818,-35.195C52.818,-30.361 51.898,-25.808 50.055,-21.528C48.214,-17.248 45.695,-13.512 42.501,-10.318C39.308,-7.128 35.57,-4.61 31.293,-2.763C27.013,-0.923 22.457,0 17.626,0L0,0L0,17.626Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,982.122,491.753)">
|
||||
<path d="M0,0.126C0,-2.576 -0.439,-5.024 -1.318,-7.213C-2.201,-9.405 -3.396,-11.286 -4.912,-12.864C-6.429,-14.441 -8.2,-15.649 -10.225,-16.489C-12.253,-17.328 -14.413,-17.746 -16.705,-17.746C-18.998,-17.746 -21.158,-17.328 -23.185,-16.489C-25.213,-15.649 -26.973,-14.441 -28.467,-12.864C-29.963,-11.286 -31.139,-9.405 -31.997,-7.213C-32.858,-5.024 -33.286,-2.576 -33.286,0.126C-33.286,2.666 -32.858,5.017 -31.997,7.188C-31.139,9.358 -29.963,11.239 -28.467,12.839C-26.973,14.435 -25.213,15.696 -23.185,16.614C-21.158,17.537 -18.998,17.998 -16.705,17.998C-14.413,17.998 -12.253,17.567 -10.225,16.706C-8.2,15.85 -6.429,14.641 -4.912,13.085C-3.396,11.53 -2.201,9.644 -1.318,7.434C-0.439,5.224 0,2.784 0,0.126M16.892,0.126C16.892,5.039 16.01,9.614 14.251,13.85C12.489,18.09 10.094,21.756 7.062,24.845C4.034,27.938 0.483,30.372 -3.59,32.152C-7.668,33.937 -12.037,34.825 -16.705,34.825C-21.332,34.825 -25.683,33.937 -29.756,32.152C-33.832,30.372 -37.394,27.938 -40.443,24.845C-43.493,21.756 -45.898,18.09 -47.658,13.85C-49.421,9.614 -50.299,5.039 -50.299,0.126C-50.299,-4.87 -49.421,-9.497 -47.658,-13.756C-45.898,-18.014 -43.493,-21.687 -40.443,-24.781C-37.394,-27.87 -33.832,-30.296 -29.756,-32.059C-25.683,-33.816 -21.332,-34.699 -16.705,-34.699C-12.037,-34.699 -7.668,-33.869 -3.59,-32.212C0.483,-30.554 4.034,-28.198 7.062,-25.148C10.094,-22.096 12.489,-18.432 14.251,-14.155C16.01,-9.876 16.892,-5.116 16.892,0.126" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(-1,0,0,1,2033.46,-41.24)">
|
||||
<rect x="1008.29" y="474.648" width="16.889" height="91.944" style="fill:white;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1053.79,459.694)">
|
||||
<path d="M0,90.714L0,73.826L9.339,73.949C10.974,73.949 12.551,73.682 14.066,73.15C15.578,72.618 16.984,71.879 18.272,70.939C19.563,69.994 20.697,68.883 21.682,67.59C22.662,66.303 23.462,64.897 24.077,63.385C22.235,64.163 20.359,64.941 18.457,65.719C16.554,66.496 14.638,66.884 12.713,66.884C8.662,66.884 4.851,66.166 1.292,64.735C-2.272,63.302 -5.396,61.263 -8.077,58.621C-10.758,55.981 -12.866,52.768 -14.4,48.98C-15.938,45.193 -16.703,40.947 -16.703,36.236L-16.703,-0.123L0,-0.123L0,36.236C0,38.569 0.339,40.609 1.016,42.35C1.687,44.09 2.602,45.544 3.749,46.708C4.892,47.878 6.235,48.747 7.769,49.319C9.308,49.895 10.951,50.18 12.713,50.18C14.436,50.18 16.062,49.779 17.596,48.98C19.133,48.186 20.474,47.13 21.621,45.817C22.768,44.507 23.669,43.026 24.323,41.364C24.978,39.708 25.304,37.998 25.304,36.236L25.304,-0.123L42.195,-0.123L42.195,57.365C42.151,61.992 41.25,66.329 39.492,70.385C37.73,74.437 35.326,77.979 32.277,81.011C29.223,84.039 25.673,86.434 21.621,88.195C17.564,89.958 13.227,90.837 8.6,90.837L0,90.714Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1155.56,515.706)">
|
||||
<path d="M0,-23.827C0,-26.121 -0.439,-28.345 -1.318,-30.493C-2.201,-32.641 -3.396,-34.545 -4.912,-36.201C-6.429,-37.862 -8.2,-39.194 -10.226,-40.196C-12.252,-41.198 -14.413,-41.699 -16.703,-41.699C-18.997,-41.699 -21.158,-41.312 -23.185,-40.534C-25.21,-39.757 -26.973,-38.609 -28.467,-37.094C-29.961,-35.577 -31.139,-33.706 -31.995,-31.473C-32.856,-29.241 -33.287,-26.692 -33.287,-23.827C-33.287,-21.085 -32.856,-18.615 -31.995,-16.427C-31.139,-14.239 -29.961,-12.362 -28.467,-10.806C-26.973,-9.25 -25.21,-8.056 -23.185,-7.216C-21.158,-6.377 -18.997,-5.955 -16.703,-5.955C-14.413,-5.955 -12.252,-6.456 -10.226,-7.463C-8.2,-8.464 -6.429,-9.796 -4.912,-11.452C-3.396,-13.108 -2.201,-15.015 -1.318,-17.165C-0.439,-19.313 0,-21.533 0,-23.827M16.892,1.354C16.892,5.981 16.009,10.318 14.251,14.373C12.489,18.425 10.08,21.967 7.031,24.999C3.982,28.027 0.423,30.422 -3.651,32.184C-7.729,33.946 -12.08,34.825 -16.703,34.825L-25.118,34.702L-25.118,17.938L-16.826,18.056C-14.206,18.056 -11.975,17.722 -10.134,17.046C-8.292,16.368 -6.736,15.45 -5.466,14.281C-4.196,13.112 -3.182,11.773 -2.425,10.26C-1.67,8.744 -1.063,7.149 -0.615,5.466C-1.271,6.534 -2.21,7.404 -3.441,8.077C-4.666,8.753 -6.028,9.308 -7.522,9.737C-9.017,10.168 -10.572,10.463 -12.189,10.625C-13.807,10.788 -15.314,10.872 -16.703,10.872C-21.33,10.872 -25.681,10.076 -29.754,8.477C-33.832,6.881 -37.392,4.601 -40.441,1.63C-43.49,-1.341 -45.899,-4.974 -47.656,-9.272C-49.419,-13.57 -50.298,-18.422 -50.298,-23.827C-50.298,-28.784 -49.419,-33.389 -47.656,-37.647C-45.899,-41.906 -43.49,-45.588 -40.441,-48.704C-37.392,-51.814 -33.832,-54.249 -29.754,-56.012C-25.681,-57.769 -21.33,-58.652 -16.703,-58.652C-14.575,-58.652 -12.467,-58.385 -10.38,-57.852C-8.292,-57.321 -6.262,-56.583 -4.298,-55.642C-2.333,-54.699 -0.461,-53.595 1.322,-52.325C3.103,-51.055 4.769,-49.683 6.327,-48.212L12.836,-56.012L16.892,-56.012L16.892,1.354Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(-1,0,0,1,2387.35,-41.24)">
|
||||
<rect x="1185.23" y="474.648" width="16.892" height="91.944" style="fill:white;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1261.57,491.753)">
|
||||
<path d="M0,0.126C0,-2.576 -0.443,-5.024 -1.323,-7.213C-2.202,-9.405 -3.4,-11.286 -4.913,-12.864C-6.429,-14.441 -8.2,-15.649 -10.226,-16.489C-12.256,-17.328 -14.413,-17.746 -16.707,-17.746C-19.001,-17.746 -21.158,-17.328 -23.185,-16.489C-25.215,-15.649 -26.973,-14.441 -28.467,-12.864C-29.965,-11.286 -31.139,-9.405 -31.999,-7.213C-32.861,-5.024 -33.287,-2.576 -33.287,0.126C-33.287,2.666 -32.861,5.017 -31.999,7.188C-31.139,9.358 -29.965,11.239 -28.467,12.839C-26.973,14.435 -25.215,15.696 -23.185,16.614C-21.158,17.537 -19.001,17.998 -16.707,17.998C-14.413,17.998 -12.256,17.567 -10.226,16.706C-8.2,15.85 -6.429,14.641 -4.913,13.085C-3.4,11.53 -2.202,9.644 -1.323,7.434C-0.443,5.224 0,2.784 0,0.126M16.888,0.126C16.888,5.039 16.008,9.614 14.246,13.85C12.484,18.09 10.09,21.756 7.062,24.845C4.029,27.938 0.479,30.372 -3.595,32.152C-7.668,33.937 -12.041,34.825 -16.707,34.825C-21.334,34.825 -25.685,33.937 -29.759,32.152C-33.832,30.372 -37.396,27.938 -40.445,24.845C-43.495,21.756 -45.899,18.09 -47.661,13.85C-49.423,9.614 -50.303,5.039 -50.303,0.126C-50.303,-4.87 -49.423,-9.497 -47.661,-13.756C-45.899,-18.014 -43.495,-21.687 -40.445,-24.781C-37.396,-27.87 -33.832,-30.296 -29.759,-32.059C-25.685,-33.816 -21.334,-34.699 -16.707,-34.699C-12.041,-34.699 -7.668,-33.869 -3.595,-32.212C0.479,-30.554 4.029,-28.198 7.062,-25.148C10.09,-22.096 12.484,-18.432 14.246,-14.155C16.008,-9.876 16.888,-5.116 16.888,0.126" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1320.22,433.408)">
|
||||
<path d="M0,91.944C-4.052,91.944 -7.862,91.174 -11.426,89.64C-14.985,88.103 -18.11,85.994 -20.79,83.313C-23.471,80.632 -25.58,77.507 -27.114,73.948C-28.651,70.384 -29.421,66.579 -29.421,62.523L-29.421,42.995L-37.585,42.995L-37.585,26.287L-29.421,26.287L-29.421,0L-12.714,0L-12.714,26.287L12.712,26.287L12.712,42.995L-12.714,42.995L-12.714,62.523C-12.714,64.285 -12.388,65.933 -11.729,67.466C-11.079,69.006 -10.174,70.345 -9.031,71.492C-7.884,72.639 -6.53,73.548 -4.976,74.225C-3.419,74.898 -1.762,75.237 0,75.237L12.712,75.237L12.712,91.944L0,91.944Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,775.507,562.344)">
|
||||
<path d="M0,46.176L6.575,46.176C14.443,46.176 19.917,45.693 22.992,44.717C27.274,43.332 30.645,40.828 33.106,37.198C35.566,33.572 36.797,29.129 36.797,23.874C36.797,18.364 35.471,13.661 32.818,9.764C30.163,5.866 26.455,3.202 21.687,1.767C18.097,0.663 12.213,0.114 4.037,0.114L0,0.114L0,46.176ZM-5.462,51.599L-5.462,-5.423L6.345,-5.423C14.881,-5.423 21.083,-4.733 24.955,-3.349C30.465,-1.425 34.778,1.929 37.894,6.705C41.007,11.487 42.564,17.186 42.564,23.8C42.564,29.49 41.328,34.513 38.854,38.872C36.38,43.232 33.177,46.44 29.241,48.505C25.307,50.566 19.788,51.599 12.688,51.599L-5.462,51.599Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,863.675,596.29)">
|
||||
<path d="M0,-8.455C-0.719,-11.351 -1.769,-13.667 -3.153,-15.397C-4.538,-17.125 -6.37,-18.522 -8.652,-19.587C-10.934,-20.649 -13.331,-21.186 -15.842,-21.186C-19.971,-21.186 -23.52,-19.85 -26.494,-17.186C-28.647,-15.235 -30.275,-12.327 -31.376,-8.455L0,-8.455ZM0,2.887L4.537,5.308C3.076,8.257 1.357,10.63 -0.616,12.423C-2.592,14.216 -4.808,15.582 -7.27,16.518C-9.729,17.454 -12.511,17.92 -15.611,17.92C-22.481,17.92 -27.852,15.671 -31.724,11.175C-35.593,6.675 -37.528,1.596 -37.528,-4.074C-37.528,-9.431 -35.89,-14.198 -32.606,-18.378C-28.454,-23.708 -22.878,-26.375 -15.881,-26.375C-8.728,-26.375 -3,-23.646 1.307,-18.184C4.356,-14.34 5.895,-9.545 5.921,-3.806L-31.951,-3.806C-31.851,1.116 -30.286,5.149 -27.263,8.288C-24.237,11.43 -20.51,12.999 -16.072,12.999C-13.919,12.999 -11.83,12.62 -9.805,11.864C-7.78,11.108 -6.056,10.116 -4.634,8.885C-3.21,7.654 -1.668,5.655 0,2.887" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,875.71,614.249)">
|
||||
<path d="M0,-42.181L5.766,-42.181L19.878,-11.495L33.875,-42.181L39.682,-42.181L20.377,0L19.418,0L0,-42.181Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,959.148,596.29)">
|
||||
<path d="M0,-8.455C-0.718,-11.351 -1.769,-13.667 -3.152,-15.397C-4.537,-17.125 -6.369,-18.522 -8.652,-19.587C-10.933,-20.649 -13.33,-21.186 -15.842,-21.186C-19.97,-21.186 -23.518,-19.85 -26.493,-17.186C-28.646,-15.235 -30.274,-12.327 -31.376,-8.455L0,-8.455ZM0,2.887L4.537,5.308C3.076,8.257 1.358,10.63 -0.614,12.423C-2.59,14.216 -4.807,15.582 -7.268,16.518C-9.729,17.454 -12.511,17.92 -15.61,17.92C-22.481,17.92 -27.852,15.671 -31.724,11.175C-35.592,6.675 -37.528,1.596 -37.528,-4.074C-37.528,-9.431 -35.889,-14.198 -32.605,-18.378C-28.453,-23.708 -22.876,-26.375 -15.881,-26.375C-8.727,-26.375 -2.998,-23.646 1.309,-18.184C4.357,-14.34 5.896,-9.545 5.922,-3.806L-31.951,-3.806C-31.851,1.116 -30.286,5.149 -27.263,8.288C-24.237,11.43 -20.508,12.999 -16.072,12.999C-13.919,12.999 -11.829,12.62 -9.804,11.864C-7.78,11.108 -6.055,10.116 -4.633,8.885C-3.209,7.654 -1.668,5.655 0,2.887" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,0,169.859)">
|
||||
<rect x="974.336" y="385.83" width="5.463" height="58.481" style="fill:white;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1010.94,608.902)">
|
||||
<path d="M0,-33.679C-4.482,-33.679 -8.341,-32.013 -11.571,-28.682C-14.801,-25.347 -16.418,-21.322 -16.418,-16.606C-16.418,-13.557 -15.681,-10.704 -14.208,-8.051C-12.731,-5.401 -10.74,-3.362 -8.227,-1.938C-5.713,-0.514 -2.971,0.194 0,0.194C3.027,0.194 5.787,-0.514 8.287,-1.938C10.788,-3.362 12.766,-5.401 14.229,-8.051C15.688,-10.704 16.421,-13.557 16.421,-16.606C16.421,-21.322 14.805,-25.347 11.574,-28.682C8.345,-32.013 4.486,-33.679 0,-33.679M0,-38.987C6.485,-38.987 11.869,-36.64 16.148,-31.951C20.021,-27.646 21.959,-22.552 21.959,-16.686C21.959,-10.815 19.906,-5.683 15.807,-1.283C11.701,3.112 6.438,5.308 0,5.308C-6.46,5.308 -11.733,3.112 -15.82,-1.283C-19.911,-5.683 -21.954,-10.815 -21.954,-16.686C-21.954,-22.53 -20.017,-27.606 -16.149,-31.912C-11.865,-36.626 -6.482,-38.987 0,-38.987" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1051.97,619.48)">
|
||||
<path d="M0,-39.3C-3.229,-36.017 -4.846,-31.926 -4.846,-27.03C-4.846,-23.853 -4.13,-20.976 -2.693,-18.401C-1.256,-15.824 0.792,-13.786 3.46,-12.287C6.127,-10.784 8.943,-10.037 11.918,-10.037C14.84,-10.037 17.592,-10.784 20.167,-12.287C22.741,-13.786 24.794,-15.9 26.318,-18.629C27.844,-21.362 28.608,-24.209 28.608,-27.184C28.608,-30.207 27.848,-33.055 26.336,-35.723C24.824,-38.386 22.794,-40.469 20.241,-41.971C17.692,-43.471 14.894,-44.222 11.844,-44.222C7.177,-44.222 3.23,-42.577 0,-39.3M2.633,-47.429C5.644,-48.747 8.869,-49.41 12.305,-49.41C18.304,-49.41 23.427,-47.259 27.686,-42.952C31.938,-38.646 34.066,-33.455 34.066,-27.377C34.066,-21.199 31.952,-15.944 27.721,-11.614C23.493,-7.282 18.405,-5.115 12.458,-5.115C9.097,-5.115 6.008,-5.802 3.191,-7.172C0.37,-8.543 -2.179,-10.626 -4.459,-13.421L-4.459,10.11L-9.843,10.11L-9.843,-29.839C-9.382,-33.556 -7.997,-37.335 -5.689,-41.181C-3.154,-44.029 -0.382,-46.112 2.633,-47.429" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1132.41,596.29)">
|
||||
<path d="M0,-8.455C-0.718,-11.351 -1.768,-13.667 -3.152,-15.397C-4.537,-17.125 -6.368,-18.522 -8.653,-19.587C-10.935,-20.649 -13.33,-21.186 -15.843,-21.186C-19.97,-21.186 -23.52,-19.85 -26.494,-17.186C-28.647,-15.235 -30.274,-12.327 -31.377,-8.455L0,-8.455ZM0,2.887L4.539,5.308C3.074,8.257 1.357,10.63 -0.616,12.423C-2.59,14.216 -4.809,15.582 -7.27,16.518C-9.729,17.454 -12.512,17.92 -15.61,17.92C-22.482,17.92 -27.853,15.671 -31.724,11.175C-35.592,6.675 -37.529,1.596 -37.529,-4.074C-37.529,-9.431 -35.89,-14.198 -32.607,-18.378C-28.455,-23.708 -22.878,-26.375 -15.882,-26.375C-8.729,-26.375 -2.998,-23.646 1.309,-18.184C4.357,-14.34 5.896,-9.545 5.922,-3.806L-31.952,-3.806C-31.852,1.116 -30.287,5.149 -27.265,8.288C-24.236,11.43 -20.51,12.999 -16.071,12.999C-13.919,12.999 -11.83,12.62 -9.805,11.864C-7.779,11.108 -6.057,10.116 -4.633,8.885C-3.209,7.654 -1.666,5.655 0,2.887" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1146.36,590.064)">
|
||||
<path d="M0,4.806L0,-0.269C0.412,-2.809 1.001,-4.871 1.771,-6.461C3.563,-10.869 5.977,-14.098 8.999,-16.15C12.022,-18.199 14.537,-19.226 16.535,-19.226C18.021,-19.226 19.612,-18.739 21.304,-17.763L18.495,-13.228C16.113,-14.098 13.749,-13.396 11.403,-11.114C9.057,-8.83 7.435,-6.347 6.538,-3.653C5.871,-1.271 5.537,3.206 5.537,9.768L5.537,24.032L0,24.032L0,4.806Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(-1,0,0,1,1361,176)">
|
||||
<rect x="604" y="410" width="153" height="4" style="fill:white;"/>
|
||||
</g>
|
||||
<g transform="matrix(-1,0,0,1,2513,176)">
|
||||
<rect x="1180" y="410" width="153" height="4" style="fill:white;"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 21 KiB |
14
public/sw.js
@@ -1,14 +0,0 @@
|
||||
self.addEventListener("install", function (e) {
|
||||
self.skipWaiting();
|
||||
});
|
||||
|
||||
self.addEventListener("activate", function (e) {
|
||||
self.registration
|
||||
.unregister()
|
||||
.then(function () {
|
||||
return self.clients.matchAll();
|
||||
})
|
||||
.then(function (clients) {
|
||||
clients.forEach((client) => client.navigate(client.url));
|
||||
});
|
||||
});
|
||||
|
Before Width: | Height: | Size: 179 KiB |
@@ -1,31 +0,0 @@
|
||||
import React, { SVGProps, useId, useRef } from "react";
|
||||
|
||||
export const Attachment = (props: Partial<SVGProps<any>>) => {
|
||||
const id = useId();
|
||||
const clipId = useRef<string>(`path-1-inside-1${id}`);
|
||||
|
||||
return (
|
||||
<svg
|
||||
width="36"
|
||||
height="36"
|
||||
viewBox="0 0 36 36"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
{...props}
|
||||
>
|
||||
<g clipPath={`url(#${clipId.current})`}>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M24.6893 7.31065C23.0659 5.6873 20.4339 5.6873 18.8106 7.31066L8.06059 18.0607C5.33267 20.7886 5.33267 25.2114 8.06059 27.9393C10.7885 30.6673 15.2113 30.6673 17.9393 27.9393L30.4393 15.4393C31.0251 14.8535 31.9748 14.8535 32.5606 15.4393C33.1464 16.0251 33.1464 16.9749 32.5606 17.5607L20.0606 30.0607C16.1611 33.9602 9.83876 33.9601 5.93927 30.0607C2.03978 26.1612 2.03977 19.8388 5.93927 15.9393L16.6893 5.18934C19.4842 2.39441 24.0157 2.39441 26.8106 5.18933C29.6055 7.98426 29.6055 12.5157 26.8106 15.3107L16.0606 26.0606C14.3702 27.751 11.6296 27.751 9.93927 26.0607C8.24891 24.3703 8.24891 21.6297 9.93927 19.9393L19.9393 9.93933C20.5251 9.35355 21.4748 9.35355 22.0606 9.93933C22.6464 10.5251 22.6464 11.4749 22.0606 12.0607L12.0606 22.0607C11.5418 22.5794 11.5418 23.4205 12.0606 23.9393C12.5794 24.4581 13.4205 24.4581 13.9393 23.9393L24.6893 13.1893C26.3126 11.566 26.3126 8.93401 24.6893 7.31065Z"
|
||||
fill="#153E67"
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id={clipId.current}>
|
||||
<rect width="36" height="36" fill="white" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M19.5607 9.06066C20.1464 8.47487 20.1464 7.52513 19.5607 6.93934C18.9749 6.35355 18.0251 6.35355 17.4393 6.93934L6.93934 17.4393C6.79553 17.5832 6.68702 17.7489 6.61382 17.9258C6.54048 18.1027 6.5 18.2966 6.5 18.5C6.5 18.7034 6.54048 18.8973 6.61382 19.0742C6.68702 19.2511 6.79553 19.4168 6.93934 19.5607L17.4393 30.0607C18.0251 30.6464 18.9749 30.6464 19.5607 30.0607C20.1464 29.4749 20.1464 28.5251 19.5607 27.9393L11.6213 20H29C29.8284 20 30.5 19.3284 30.5 18.5C30.5 17.6716 29.8284 17 29 17H11.6213L19.5607 9.06066Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 715 B |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M32.5607 6.43934C33.1464 7.02513 33.1464 7.97487 32.5607 8.56066L14.5607 26.5607C13.9749 27.1464 13.0251 27.1464 12.4393 26.5607L3.43934 17.5607C2.85355 16.9749 2.85355 16.0251 3.43934 15.4393C4.02513 14.8536 4.97487 14.8536 5.56066 15.4393L13.5 23.3787L30.4393 6.43934C31.0251 5.85355 31.9749 5.85355 32.5607 6.43934Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 513 B |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M16.9393 12.4393C17.5251 11.8536 18.4749 11.8536 19.0607 12.4393L28.0607 21.4393C28.6464 22.0251 28.6464 22.9749 28.0607 23.5607C27.4749 24.1464 26.5251 24.1464 25.9393 23.5607L18 15.6213L10.0607 23.5607C9.47487 24.1464 8.52513 24.1464 7.93934 23.5607C7.35355 22.9749 7.35355 22.0251 7.93934 21.4393L16.9393 12.4393Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 511 B |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M18 12C14.6863 12 12 14.6863 12 18C12 21.3137 14.6863 24 18 24C21.3137 24 24 21.3137 24 18C24 14.6863 21.3137 12 18 12ZM9 18C9 13.0294 13.0294 9 18 9C22.9706 9 27 13.0294 27 18C27 22.9706 22.9706 27 18 27C13.0294 27 9 22.9706 9 18Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 426 B |
@@ -1,6 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="30 15 180 210">
|
||||
<path fill="#153E67"
|
||||
d="M104.4 103.9c-5.7 0-10.2 5-10.2 11.1s4.6 11.1 10.2 11.1c5.7 0 10.2-5 10.2-11.1.1-6.1-4.5-11.1-10.2-11.1zM140.9 103.9c-5.7 0-10.2 5-10.2 11.1s4.6 11.1 10.2 11.1c5.7 0 10.2-5 10.2-11.1s-4.5-11.1-10.2-11.1z"/>
|
||||
<path fill="#153E67"
|
||||
d="M189.5 20h-134C44.2 20 35 29.2 35 40.6v135.2c0 11.4 9.2 20.6 20.5 20.6h113.4l-5.3-18.5 12.8 11.9 12.1 11.2 21.5 19V40.6c0-11.4-9.2-20.6-20.5-20.6zm-38.6 130.6s-3.6-4.3-6.6-8.1c13.1-3.7 18.1-11.9 18.1-11.9-4.1 2.7-8 4.6-11.5 5.9-5 2.1-9.8 3.5-14.5 4.3-9.6 1.8-18.4 1.3-25.9-.1-5.7-1.1-10.6-2.7-14.7-4.3-2.3-.9-4.8-2-7.3-3.4-.3-.2-.6-.3-.9-.5-.2-.1-.3-.2-.4-.3-1.8-1-2.8-1.7-2.8-1.7s4.8 8 17.5 11.8c-3 3.8-6.7 8.3-6.7 8.3-22.1-.7-30.5-15.2-30.5-15.2 0-32.2 14.4-58.3 14.4-58.3 14.4-10.8 28.1-10.5 28.1-10.5l1 1.2c-18 5.2-26.3 13.1-26.3 13.1s2.2-1.2 5.9-2.9c10.7-4.7 19.2-6 22.7-6.3.6-.1 1.1-.2 1.7-.2 6.1-.8 13-1 20.2-.2 9.5 1.1 19.7 3.9 30.1 9.6 0 0-7.9-7.5-24.9-12.7l1.4-1.6s13.7-.3 28.1 10.5c0 0 14.4 26.1 14.4 58.3 0 0-8.5 14.5-30.6 15.2z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
@@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 1000 1000">
|
||||
<path d="M0 500c0-90.667 22.334-174.333 67-251 44.667-76.667 105.334-137.333 182-182C325.667 22.333 409.334 0 500 0c90.667 0 174.334 22.333 251 67 76.667 44.667 137.334 105.333 182 182 44.667 76.667 67 160.333 67 251s-22.333 174.333-67 251c-44.666 76.667-105.333 137.333-182 182-76.666 44.667-160.333 67-251 67-90.666 0-174.333-22.333-251-67-76.666-44.667-137.333-105.333-182-182C22.334 674.333 0 590.667 0 500zm83 0c0 104 35 195.667 105 275 32-62.667 82.667-122.333 152-179 69.334-56.667 137-92.333 203-107-10-23.333-19.666-44.333-29-63-114.666 36.667-238.666 55-372 55-26 0-45.333-.333-58-1 0 2.667-.166 6-.5 10-.333 4-.5 7.333-.5 10zm13-103c14.667 1.333 36.334 2 65 2 111.334 0 217-15 317-45-50.666-90-106.333-165-167-225-52.666 26.667-97.833 63.667-135.5 111-37.666 47.333-64.166 99.667-79.5 157zm149 432c75.334 58.667 160.334 88 255 88 49.334 0 98.334-9.333 147-28-13.333-114-39.333-224.333-78-331-61.333 13.333-123.166 47-185.5 101C321.167 713 275 769.667 245 829zM398 97c58.667 60.667 113 136.333 163 227 90.667-38 159-86.333 205-145-77.333-64-166-96-266-96-34 0-68 4.667-102 14zm199 298c10 21.333 21.334 48.333 34 81 49.334-4.667 103-7 161-7 41.334 0 82.334 1 123 3-5.333-90.667-38-171.333-98-242-43.333 64.667-116.666 119.667-220 165zm59 151c34 98.667 57 200 69 304 52.667-34 95.667-77.667 129-131 33.334-53.333 53.334-111 60-173-48.666-3.333-93-5-133-5-36.666 0-78.333 1.667-125 5z" fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M16.9393 23.5605C17.5251 24.1463 18.4749 24.1463 19.0607 23.5605L28.0607 14.5605C28.6464 13.9748 28.6464 13.025 28.0607 12.4392C27.4749 11.8534 26.5251 11.8534 25.9393 12.4392L18 20.3786L10.0607 12.4392C9.47487 11.8534 8.52513 11.8534 7.93934 12.4392C7.35355 13.025 7.35355 13.9748 7.93934 14.5605L16.9393 23.5605Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 509 B |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M15.636 4.63604C17.3239 2.94821 19.3631 2 21.75 2H26.5C27.3284 2 28 2.67157 28 3.5V9.5C28 10.3284 27.3284 11 26.5 11H22V14H26.5448C27.0067 14 27.4428 14.2128 27.7271 14.5769C28.0114 14.941 28.112 15.4157 28 15.8638L26.5 21.8638C26.3331 22.5316 25.7331 23 25.0448 23H22V33.5C22 34.3284 21.3284 35 20.5 35H14.5C13.6716 35 13 34.3284 13 33.5V23H9.5C8.67157 23 8 22.3284 8 21.5V15.5C8 14.6716 8.67157 14 9.5 14H13V11C13 8.61305 13.9482 6.32387 15.636 4.63604ZM21.75 5C20.1587 5 18.8826 5.63214 17.7574 6.75736C16.6321 7.88258 16 9.4087 16 11V15.5C16 16.3284 15.3284 17 14.5 17H11V20H14.5C15.3284 20 16 20.6716 16 21.5V32H19V21.5C19 20.6716 19.6716 20 20.5 20H23.8736L24.6236 17H20.5C19.6716 17 19 16.3284 19 15.5V11C19 10.2043 19.3161 9.44129 19.8787 8.87868C20.4413 8.31607 21.2043 8 22 8H25V5H21.75Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 992 B |
@@ -1,29 +0,0 @@
|
||||
import React, { SVGProps, useId, useRef } from "react";
|
||||
|
||||
export const Feather = (props: Partial<SVGProps<any>>) => {
|
||||
const id = useId();
|
||||
const clipId = useRef<string>(`path-1-inside-1${id}`);
|
||||
|
||||
return (
|
||||
<svg
|
||||
width="36"
|
||||
height="36"
|
||||
viewBox="0 0 36 36"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
{...props}
|
||||
>
|
||||
<g clipPath={`url(#${clipId.current})`}>
|
||||
<path
|
||||
d="M1.43934 32.4393C0.853553 33.0251 0.853553 33.9749 1.43934 34.5607C2.02513 35.1464 2.97487 35.1464 3.56066 34.5607L1.43934 32.4393ZM24.0607 14.0607C24.6464 13.4749 24.6464 12.5251 24.0607 11.9393C23.4749 11.3536 22.5251 11.3536 21.9393 11.9393L24.0607 14.0607ZM8.67157 14.3284L7.61091 13.2678L8.67157 14.3284ZM14.5607 23.5607L24.0607 14.0607L21.9393 11.9393L12.4393 21.4393L14.5607 23.5607ZM26.5 21H13.5V24H26.5V21ZM3.56066 34.5607L8.56066 29.5607L6.43934 27.4393L1.43934 32.4393L3.56066 34.5607ZM8.56066 29.5607L14.5607 23.5607L12.4393 21.4393L6.43934 27.4393L8.56066 29.5607ZM7.5 30H18.8431V27H7.5V30ZM22.7322 28.3891L31.5607 19.5607L29.4393 17.4393L20.6109 26.2678L22.7322 28.3891ZM9 28.5V17.1569H6V28.5H9ZM9.73223 15.3891L18.5607 6.56066L16.4393 4.43934L7.61091 13.2678L9.73223 15.3891ZM18.5607 6.56066C21.5647 3.55659 26.4353 3.5566 29.4393 6.56066L31.5607 4.43934C27.385 0.263705 20.615 0.263698 16.4393 4.43934L18.5607 6.56066ZM9 17.1569C9 16.4938 9.26339 15.8579 9.73223 15.3891L7.61091 13.2678C6.57946 14.2992 6 15.6982 6 17.1569H9ZM31.5607 19.5607C35.7363 15.385 35.7363 8.61497 31.5607 4.43934L29.4393 6.56066C32.4434 9.56472 32.4434 14.4353 29.4393 17.4393L31.5607 19.5607ZM18.8431 30C20.3018 30 21.7008 29.4205 22.7322 28.3891L20.6109 26.2678C20.1421 26.7366 19.5062 27 18.8431 27V30Z"
|
||||
fill="#153E67"
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id={clipId.current}>
|
||||
<rect width="36" height="36" fill="white" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
@@ -1,8 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M12 12C11.1716 12 10.5 12.6716 10.5 13.5C10.5 14.3284 11.1716 15 12 15H13.5H15C15.8284 15 16.5 14.3284 16.5 13.5C16.5 12.6716 15.8284 12 15 12H13.5H12ZM10.5 19.5C10.5 18.6716 11.1716 18 12 18H24C24.8284 18 25.5 18.6716 25.5 19.5C25.5 20.3284 24.8284 21 24 21H12C11.1716 21 10.5 20.3284 10.5 19.5ZM10.5 25.5C10.5 24.6716 11.1716 24 12 24H24C24.8284 24 25.5 24.6716 25.5 25.5C25.5 26.3284 24.8284 27 24 27H12C11.1716 27 10.5 26.3284 10.5 25.5Z"
|
||||
fill="#153E67"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M27.5 32H8.5C7.67157 32 7 31.3284 7 30.5V5.5C7 4.67157 7.67157 4 8.5 4H19V9C19 11.7614 21.2386 14 24 14H29V30.5C29 31.3284 28.3284 32 27.5 32ZM31.8204 11C31.9376 11.2577 32 11.5399 32 11.8284V14V30.5C32 32.9853 29.9853 35 27.5 35H8.5C6.01472 35 4 32.9853 4 30.5V5.5C4 3.01472 6.01472 1 8.5 1H19H21.1716C21.4368 1 21.6966 1.05268 21.9369 1.15224C21.9581 1.16101 21.9791 1.17015 22 1.17964C22.216 1.27792 22.4148 1.41477 22.5858 1.58579L31.4142 10.4142C31.5852 10.5852 31.7221 10.784 31.8204 11ZM22 5.24264L27.7574 11H24C22.8954 11 22 10.1046 22 9V5.24264Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB |
@@ -1,7 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M4.5 11.5C4.5 10.6716 5.17157 10 6 10H30C30.8284 10 31.5 10.6716 31.5 11.5C31.5 12.3284 30.8284 13 30 13H6C5.17157 13 4.5 12.3284 4.5 11.5ZM4.5 17.5C4.5 16.6716 5.17157 16 6 16H24C24.8284 16 25.5 16.6716 25.5 17.5C25.5 18.3284 24.8284 19 24 19H6C5.17157 19 4.5 18.3284 4.5 17.5ZM6 22C5.17157 22 4.5 22.6716 4.5 23.5C4.5 24.3284 5.17157 25 6 25L17 25C17.8284 25 18.5 24.3284 18.5 23.5C18.5 22.6716 17.8284 22 17 22L6 22Z"
|
||||
fill="#153E67"/>
|
||||
<path class="filterDropdown" d="M27.5446 28.3215L31.0209 24.8452C31.41 24.456 31.5528 23.9645 31.5027 23.5C31.4178 22.7111 30.7769 22 29.8424 22H22.8897C21.4049 22 20.6613 23.7952 21.7112 24.8452L25.1875 28.3215C25.8384 28.9724 26.8937 28.9724 27.5446 28.3215Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 907 B |
@@ -1,4 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg" class="strokeicon">
|
||||
<path d="M13.5001 29.15C6.07223 31.0723 7.00784 25.5 3.5 25.5M13.5001 33.5V28C13.5001 28 13.4538 27.0811 13.793 26.1501C14.036 25.4833 14.5044 25.0107 14.9979 24.5008C10.2879 23.9158 5.50006 22.1279 5.50006 13.9979C5.48885 11.8881 6.04525 9.72326 7.50006 8.19521C6.81628 6.36297 6.86463 4.33773 7.63506 2.54021C7.63506 2.54021 9.25766 2.0536 13.5001 4.50002C15.1379 4.05612 16.818 4.02097 18.5001 4.00002C20.1821 4.02097 21.862 4.05612 23.4998 4.50002C27.7422 2.0536 29.3648 2.54021 29.3648 2.54021C30.1353 4.33773 30.1836 6.36297 29.4998 8.19521C30.9546 9.72326 31.5111 11.8881 31.4998 13.9979C31.4998 22.1279 26.712 23.9158 22.002 24.5008C22.4955 25.0107 22.9639 25.4833 23.2069 26.1501C23.5461 27.0811 23.4998 28 23.4998 28V33.5"
|
||||
stroke="#153E67" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 952 B |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M18 4.5C10.5442 4.5 4.5 10.5442 4.5 18C4.5 25.4558 10.5442 31.5 18 31.5C25.4558 31.5 31.5 25.4558 31.5 18C31.5 10.5442 25.4558 4.5 18 4.5ZM1.5 18C1.5 8.8873 8.8873 1.5 18 1.5C27.1127 1.5 34.5 8.8873 34.5 18C34.5 27.1127 27.1127 34.5 18 34.5C8.8873 34.5 1.5 27.1127 1.5 18ZM18 16.5C18.8284 16.5 19.5 17.1716 19.5 18V24C19.5 24.8284 18.8284 25.5 18 25.5C17.1716 25.5 16.5 24.8284 16.5 24V18C16.5 17.1716 17.1716 16.5 18 16.5ZM18 13.5C18.8284 13.5 19.5 12.8284 19.5 12C19.5 11.1716 18.8284 10.5 18 10.5C17.1716 10.5 16.5 11.1716 16.5 12C16.5 12.8284 17.1716 13.5 18 13.5Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 763 B |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M10.5 6H25.5C27.9853 6 30 8.01472 30 10.5V25.5C30 27.9853 27.9853 30 25.5 30H10.5C8.01472 30 6 27.9853 6 25.5V10.5C6 8.01472 8.01472 6 10.5 6ZM25.5 3H10.5C6.35786 3 3 6.35786 3 10.5V25.5C3 29.6421 6.35786 33 10.5 33H25.5C29.6421 33 33 29.6421 33 25.5V10.5C33 6.35786 29.6421 3 25.5 3ZM21.9567 17.4133C22.0801 18.2455 21.938 19.0955 21.5505 19.8423C21.163 20.5891 20.5499 21.1947 19.7984 21.5729C19.0468 21.9512 18.1952 22.0829 17.3645 21.9492C16.5339 21.8155 15.7665 21.4233 15.1716 20.8284C14.5767 20.2335 14.1845 19.4661 14.0508 18.6355C13.9171 17.8048 14.0488 16.9532 14.4271 16.2016C14.8053 15.4501 15.4109 14.837 16.1577 14.4495C16.9045 14.062 17.7545 13.9199 18.5867 14.0433C19.4357 14.1692 20.2216 14.5647 20.8284 15.1716C21.4353 15.7784 21.8308 16.5643 21.9567 17.4133ZM24.9243 16.9732C25.1402 18.4296 24.8915 19.9171 24.2134 21.224C23.5352 22.5309 22.4623 23.5907 21.1471 24.2526C19.832 24.9146 18.3416 25.145 16.8879 24.9111C15.4343 24.6772 14.0914 23.9909 13.0503 22.9497C12.0091 21.9086 11.3228 20.5657 11.0889 19.1121C10.855 17.6584 11.0854 16.168 11.7474 14.8529C12.4093 13.5377 13.4691 12.4648 14.776 11.7866C16.0829 11.1085 17.5704 10.8598 19.0268 11.0757C20.5124 11.296 21.8878 11.9883 22.9497 13.0503C24.0117 14.1122 24.704 15.4876 24.9243 16.9732Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M18 0C18.8284 0 19.5 0.671573 19.5 1.5V4.5C19.5 5.32843 18.8284 6 18 6C17.1716 6 16.5 5.32843 16.5 4.5V1.5C16.5 0.671573 17.1716 0 18 0ZM18 12C14.6863 12 12 14.6863 12 18C12 21.3137 14.6863 24 18 24C21.3137 24 24 21.3137 24 18C24 14.6863 21.3137 12 18 12ZM9 18C9 13.0294 13.0294 9 18 9C22.9706 9 27 13.0294 27 18C27 22.9706 22.9706 27 18 27C13.0294 27 9 22.9706 9 18ZM19.5 31.5C19.5 30.6716 18.8284 30 18 30C17.1716 30 16.5 30.6716 16.5 31.5V34.5C16.5 35.3284 17.1716 36 18 36C18.8284 36 19.5 35.3284 19.5 34.5V31.5ZM5.26893 5.2693C5.85472 4.68351 6.80446 4.68351 7.39025 5.2693L9.52025 7.3993C10.106 7.98508 10.106 8.93483 9.52025 9.52062C8.93446 10.1064 7.98472 10.1064 7.39893 9.52062L5.26893 7.39062C4.68314 6.80483 4.68314 5.85508 5.26893 5.2693ZM28.6012 26.4793C28.0154 25.8935 27.0657 25.8935 26.4799 26.4793C25.8941 27.0651 25.8941 28.0149 26.4799 28.6006L28.6099 30.7306C29.1957 31.3164 30.1454 31.3164 30.7312 30.7306C31.317 30.1449 31.317 29.1951 30.7312 28.6093L28.6012 26.4793ZM0 18C0 17.1716 0.671573 16.5 1.5 16.5H4.5C5.32843 16.5 6 17.1716 6 18C6 18.8284 5.32843 19.5 4.5 19.5H1.5C0.671573 19.5 0 18.8284 0 18ZM31.5 16.5C30.6716 16.5 30 17.1716 30 18C30 18.8284 30.6716 19.5 31.5 19.5H34.5C35.3284 19.5 36 18.8284 36 18C36 17.1716 35.3284 16.5 34.5 16.5H31.5ZM9.52025 26.4793C10.106 27.0651 10.106 28.0149 9.52025 28.6006L7.39025 30.7306C6.80446 31.3164 5.85472 31.3164 5.26893 30.7306C4.68314 30.1449 4.68314 29.1951 5.26893 28.6093L7.39893 26.4793C7.98472 25.8935 8.93446 25.8935 9.52025 26.4793ZM30.7312 7.39062C31.317 6.80483 31.317 5.85508 30.7312 5.2693C30.1454 4.68351 29.1957 4.68351 28.6099 5.2693L26.4799 7.3993C25.8941 7.98508 25.8941 8.93483 26.4799 9.52062C27.0657 10.1064 28.0154 10.1064 28.6012 9.52062L30.7312 7.39062Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB |
@@ -1,6 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.10021 27.8995C6.14759 25.9469 6.14759 22.7811 8.10021 20.8284L12.6964 16.2322C14.4538 14.4749 17.303 14.4749 19.0604 16.2322L20.121 17.2929C20.7068 17.8787 21.6566 17.8787 22.2423 17.2929C22.8281 16.7071 22.8281 15.7574 22.2423 15.1716L21.1817 14.1109C18.2528 11.182 13.504 11.182 10.5751 14.1109L5.97889 18.7071C2.85469 21.8313 2.85469 26.8966 5.97889 30.0208C9.10308 33.145 14.1684 33.145 17.2926 30.0208L18.3533 28.9602C18.939 28.3744 18.939 27.4246 18.3533 26.8388C17.7675 26.2531 16.8177 26.2531 16.2319 26.8388L15.1713 27.8995C13.2187 29.8521 10.0528 29.8521 8.10021 27.8995Z"
|
||||
fill="#153E67"/>
|
||||
<path d="M27.8992 8.10051C29.8518 10.0531 29.8518 13.219 27.8992 15.1716L23.303 19.7678C21.5456 21.5251 18.6964 21.5251 16.939 19.7678L15.8784 18.7071C15.2926 18.1213 14.3428 18.1213 13.7571 18.7071C13.1713 19.2929 13.1713 20.2426 13.7571 20.8284L14.8177 21.8891C17.7467 24.818 22.4954 24.818 25.4243 21.8891L30.0205 17.2929C33.1447 14.1687 33.1447 9.10339 30.0205 5.97919C26.8963 2.855 21.831 2.855 18.7068 5.97919L17.6461 7.03985C17.0604 7.62564 17.0604 8.57539 17.6461 9.16117C18.2319 9.74696 19.1817 9.74696 19.7675 9.16117L20.8281 8.10051C22.7808 6.14789 25.9466 6.14789 27.8992 8.10051Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M5 6.5C5 5.67157 5.67157 5 6.5 5C7.32843 5 8 5.67157 8 6.5C8 7.32843 7.32843 8 6.5 8C5.67157 8 5 7.32843 5 6.5ZM6.5 2C4.01472 2 2 4.01472 2 6.5C2 8.98528 4.01472 11 6.5 11C8.98528 11 11 8.98528 11 6.5C11 4.01472 8.98528 2 6.5 2ZM23.5 14.5C21.5109 14.5 19.6032 15.2902 18.1967 16.6967C16.7902 18.1032 16 20.0109 16 22V31H19V22C19 20.8065 19.4741 19.6619 20.318 18.818C21.1619 17.9741 22.3065 17.5 23.5 17.5C24.6935 17.5 25.8381 17.9741 26.682 18.818C27.5259 19.6619 28 20.8065 28 22V31H31V22C31 20.0109 30.2098 18.1032 28.8033 16.6967C27.3968 15.2902 25.4891 14.5 23.5 14.5ZM23.5 11.5C20.7152 11.5 18.0445 12.6062 16.0754 14.5754C14.1062 16.5445 13 19.2152 13 22V32.5C13 33.3284 13.6716 34 14.5 34H20.5C21.3284 34 22 33.3284 22 32.5V22C22 21.6022 22.158 21.2206 22.4393 20.9393C22.7206 20.658 23.1022 20.5 23.5 20.5C23.8978 20.5 24.2794 20.658 24.5607 20.9393C24.842 21.2206 25 21.6022 25 22V32.5C25 33.3284 25.6716 34 26.5 34H32.5C33.3284 34 34 33.3284 34 32.5V22C34 19.2152 32.8938 16.5445 30.9246 14.5754C28.9555 12.6062 26.2848 11.5 23.5 11.5ZM2 14.5C2 13.6716 2.67157 13 3.5 13H9.5C10.3284 13 11 13.6716 11 14.5V32.5C11 33.3284 10.3284 34 9.5 34H3.5C2.67157 34 2 33.3284 2 32.5V14.5ZM5 16V31H8V16H5Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M5.5 7H30.5C30.64 7 30.7755 7.01918 30.9041 7.05506L18.2881 15.9604C18.1153 16.0825 17.8843 16.0825 17.7115 15.9604L5.09562 7.05514C5.22427 7.01921 5.35989 7 5.5 7ZM1.04412 7.86737C1.01504 8.07407 1 8.28528 1 8.5V27.5C1 29.9853 3.01472 32 5.5 32H30.5C32.9853 32 35 29.9853 35 27.5V8.5C35 6.01472 32.9853 4 30.5 4H5.5C4.32427 4 3.25385 4.4509 2.45223 5.18921L2.45214 5.18915C1.70566 5.87663 1.19226 6.81333 1.04395 7.86725L1.04412 7.86737ZM4 9.95387L15.9814 18.4113C17.1915 19.2655 18.8081 19.2655 20.0182 18.4113L32 9.95359V27.5C32 28.3284 31.3284 29 30.5 29H5.5C4.67157 29 4 28.3284 4 27.5V9.95387Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 794 B |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M18.5 5C12.1488 5 7.00004 10.1487 7.00004 16.5C7.00004 18.9791 7.78278 21.2709 9.11475 23.1476C9.41339 23.5683 9.4748 24.1131 9.27735 24.5898L7.77125 28.2258L11.7739 26.5689C12.1902 26.3966 12.6618 26.4205 13.0585 26.634C14.677 27.5051 16.5285 28 18.5 28C24.8513 28 30 22.8513 30 16.5C30 10.1487 24.8513 5 18.5 5ZM4.00004 16.5C4.00004 8.49187 10.4919 2 18.5 2C26.5082 2 33 8.49187 33 16.5C33 24.5081 26.5082 31 18.5 31C16.2785 31 14.1704 30.4994 12.2854 29.6041L5.57376 32.3824C5.01326 32.6144 4.36817 32.486 3.93927 32.057C3.51036 31.628 3.38208 30.9828 3.61422 30.4224L6.19951 24.181C4.80583 21.9532 4.00004 19.3189 4.00004 16.5Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 826 B |
@@ -1,8 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg" class="strokeicon">
|
||||
<path d="M18 19.5C18.8284 19.5 19.5 18.8284 19.5 18C19.5 17.1716 18.8284 16.5 18 16.5C17.1716 16.5 16.5 17.1716 16.5 18C16.5 18.8284 17.1716 19.5 18 19.5Z"
|
||||
stroke="#153E67" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M18 9C18.8284 9 19.5 8.32843 19.5 7.5C19.5 6.67157 18.8284 6 18 6C17.1716 6 16.5 6.67157 16.5 7.5C16.5 8.32843 17.1716 9 18 9Z"
|
||||
stroke="#153E67" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M18 30C18.8284 30 19.5 29.3284 19.5 28.5C19.5 27.6716 18.8284 27 18 27C17.1716 27 16.5 27.6716 16.5 28.5C16.5 29.3284 17.1716 30 18 30Z"
|
||||
stroke="#153E67" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 852 B |
@@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
|
||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 169 B |
@@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
|
||||
<path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 170 B |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M24.9268 27.0476C22.6173 28.8952 19.6877 30 16.5 30C9.04416 30 3 23.9558 3 16.5C3 9.04416 9.04416 3 16.5 3C23.9558 3 30 9.04416 30 16.5C30 19.6874 28.8954 22.6168 27.0481 24.9262L32.5612 30.4394C33.147 31.0252 33.147 31.9749 32.5612 32.5607C31.9755 33.1465 31.0257 33.1465 30.4399 32.5607L24.9268 27.0476ZM6 16.5C6 10.701 10.701 6 16.5 6C22.299 6 27 10.701 27 16.5C27 19.3299 25.8805 21.8983 24.0602 23.7865C24.0098 23.8255 23.9612 23.8681 23.9149 23.9144C23.8686 23.9607 23.826 24.0093 23.787 24.0598C21.8987 25.8803 19.3301 27 16.5 27C10.701 27 6 22.299 6 16.5Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 758 B |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M27 12C28.6569 12 30 10.6569 30 9C30 7.34315 28.6569 6 27 6C25.3431 6 24 7.34315 24 9C24 10.6569 25.3431 12 27 12ZM27 15C30.3137 15 33 12.3137 33 9C33 5.68629 30.3137 3 27 3C23.6863 3 21 5.68629 21 9C21 12.3137 23.6863 15 27 15ZM13.5254 14.0602L21.1319 10.257C21.3477 11.2693 21.8188 12.1871 22.4746 12.9398L14.8681 16.743C14.9545 17.1484 15 17.5689 15 18C15 18.4311 14.9545 18.8517 14.8681 19.257L22.4746 23.0603C23.5745 21.7978 25.1941 21 27 21C30.3137 21 33 23.6863 33 27C33 30.3137 30.3137 33 27 33C23.6863 33 21 30.3137 21 27C21 26.0331 21.2287 25.1196 21.635 24.3106C21.4099 24.7589 21.2393 25.2392 21.1319 25.743L13.5254 21.9398C12.4254 23.2022 10.8059 24 9 24C5.68629 24 3 21.3137 3 18C3 14.6863 5.68629 12 9 12C10.8059 12 12.4254 12.7978 13.5254 14.0602ZM12 18C12 19.6569 10.6569 21 9 21C7.34315 21 6 19.6569 6 18C6 16.3431 7.34315 15 9 15C10.6569 15 12 16.3431 12 18ZM30 27C30 28.6569 28.6569 30 27 30C25.3431 30 24 28.6569 24 27C24 25.3431 25.3431 24 27 24C28.6569 24 30 25.3431 30 27Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB |
@@ -1,5 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M19.4445 2.06432C18.9687 2.02175 18.4869 2 18 2C17.5131 2 17.0313 2.02175 16.5555 2.06432C8.39581 2.79446 2 9.65032 2 18C2 26.3432 8.38589 33.1949 16.5365 33.934C17.0185 33.9777 17.5066 34 18 34C18.4934 34 18.9815 33.9777 19.4635 33.934C27.6141 33.1949 34 26.3432 34 18C34 9.65032 27.6042 2.79446 19.4445 2.06432ZM5.0856 16.5C5.66871 11.4247 9.17471 7.23843 13.8778 5.66715C11.8381 8.93408 10.4384 12.6855 10.0842 16.5H5.0856ZM5.0856 19.5H10.0841C10.4376 23.3081 11.832 27.0607 13.8651 30.3286C9.16839 28.754 5.66818 24.5708 5.0856 19.5ZM13.0993 19.5C13.5426 23.5878 15.3808 27.6876 17.9964 31L18 31L18.0036 31C20.6192 27.6876 22.4574 23.5878 22.9007 19.5H13.0993ZM30.9144 19.5C30.3318 24.5708 26.8316 28.754 22.1349 30.3286C24.168 27.0607 25.5624 23.3081 25.9159 19.5H30.9144ZM30.9144 16.5H25.9158C25.5616 12.6855 24.1619 8.93408 22.1222 5.66715C26.8253 7.23843 30.3313 11.4247 30.9144 16.5ZM18 5.01472C20.618 8.32549 22.4571 12.4141 22.9006 16.5H13.0994C13.5429 12.4141 15.382 8.32549 18 5.01472Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB |
@@ -1,8 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M19.5 15.5C19.5 14.6716 18.8284 14 18 14C17.1716 14 16.5 14.6716 16.5 15.5V20H12C11.1716 20 10.5 20.6716 10.5 21.5C10.5 22.3284 11.1716 23 12 23H16.5V27.5C16.5 28.3284 17.1716 29 18 29C18.8284 29 19.5 28.3284 19.5 27.5V23H24C24.8284 23 25.5 22.3284 25.5 21.5C25.5 20.6716 24.8284 20 24 20H19.5V15.5Z"
|
||||
fill="#153E67"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M27.5 32H8.5C7.67157 32 7 31.3284 7 30.5V5.5C7 4.67157 7.67157 4 8.5 4H19V9C19 11.7614 21.2386 14 24 14H29V30.5C29 31.3284 28.3284 32 27.5 32ZM31.8204 11C31.9376 11.2577 32 11.5399 32 11.8284V14V30.5C32 32.9853 29.9853 35 27.5 35H8.5C6.01472 35 4 32.9853 4 30.5V5.5C4 3.01472 6.01472 1 8.5 1H19H21.1716C21.4368 1 21.6966 1.05268 21.9369 1.15224C21.9581 1.16101 21.9791 1.17015 22 1.17964C22.216 1.27792 22.4148 1.41477 22.5858 1.58579L31.4142 10.4142C31.5852 10.5852 31.7221 10.784 31.8204 11ZM22 5.24264L27.7574 11H24C22.8954 11 22 10.1046 22 9V5.24264Z"
|
||||
fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
@@ -1,11 +0,0 @@
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 2400 2800" height="36">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M500,0L0,500v1800h600v500l500-500h400l900-900V0H500z M2200,1300l-400,400h-400l-350,350v-350H600V200h1600
|
||||
V1300z" fill="#153E67"/>
|
||||
<rect x="1700" y="550" width="200" height="600" fill="#153E67"/>
|
||||
<rect x="1150" y="550" width="200" height="600" fill="#153E67"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 457 B |
|
Before Width: | Height: | Size: 37 KiB |
@@ -1,3 +0,0 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M27 6H9C7.34315 6 6 7.34315 6 9V27C6 28.6569 7.34315 30 9 30H27C28.6569 30 30 28.6569 30 27V9C30 7.34315 28.6569 6 27 6ZM9 3C5.68629 3 3 5.68629 3 9V27C3 30.3137 5.68629 33 9 33H27C30.3137 33 33 30.3137 33 27V9C33 5.68629 30.3137 3 27 3H9Z" fill="#153E67"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 410 B |
|
Before Width: | Height: | Size: 180 KiB |
|
Before Width: | Height: | Size: 366 KiB |
|
Before Width: | Height: | Size: 156 KiB |
|
Before Width: | Height: | Size: 39 KiB |
1
src/build-scripts/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
dist/
|
||||
@@ -1,65 +0,0 @@
|
||||
import chromium from "chrome-aws-lambda";
|
||||
import puppeteer from "puppeteer-core";
|
||||
import { promises as fsPromises } from "fs";
|
||||
import { resolve } from "path";
|
||||
import { getSocialPosts, PreviewPost } from "./social-previews/get-posts";
|
||||
import {
|
||||
heightWidth,
|
||||
renderPostPreviewToString,
|
||||
} from "./shared-post-preview-png";
|
||||
|
||||
let browser: puppeteer.Browser;
|
||||
let page: puppeteer.Page;
|
||||
|
||||
const createPostSocialPreviewPng = async (post: PreviewPost) => {
|
||||
if (!browser) {
|
||||
browser = await chromium.puppeteer.launch({
|
||||
args: [...chromium.args, "--hide-scrollbars", "--disable-web-security"],
|
||||
defaultViewport: chromium.defaultViewport,
|
||||
executablePath: await chromium.executablePath,
|
||||
headless: true,
|
||||
ignoreHTTPSErrors: true,
|
||||
});
|
||||
page = await browser.newPage();
|
||||
await page.setViewport(heightWidth);
|
||||
}
|
||||
|
||||
await page.setContent(await renderPostPreviewToString(post));
|
||||
const screenShotBuffer = await page.screenshot();
|
||||
return screenShotBuffer;
|
||||
};
|
||||
|
||||
// For non-prod builds, this isn't needed
|
||||
if (!process.env.BUILD_ENV || process.env.BUILD_ENV === "production") {
|
||||
const posts = getSocialPosts();
|
||||
|
||||
/**
|
||||
* This is done synchronously, in order to prevent more than a single instance
|
||||
* of the browser from running at the same time.
|
||||
*/
|
||||
let postPngs = [] as Array<{ png: Buffer; post: typeof posts[number] }>;
|
||||
for (let post of posts) {
|
||||
postPngs.push({
|
||||
post,
|
||||
// @ts-ignore
|
||||
png: await createPostSocialPreviewPng(post),
|
||||
});
|
||||
}
|
||||
|
||||
// @ts-ignore
|
||||
await Promise.all(
|
||||
postPngs.map(async (postData) => {
|
||||
await fsPromises.writeFile(
|
||||
// Relative to root
|
||||
resolve(
|
||||
process.cwd(),
|
||||
`./public/${postData.post.slug}.twitter-preview.png`
|
||||
),
|
||||
postData.png!
|
||||
);
|
||||
})
|
||||
);
|
||||
|
||||
// @ts-ignore
|
||||
await browser!.close();
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
import { Feed } from "feed";
|
||||
import { getAllPosts } from "utils/fs/api";
|
||||
import { siteUrl } from "constants/site-config";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
const feed = new Feed({
|
||||
title: "Unicorn Utterances's RSS Feed",
|
||||
description:
|
||||
"Learning programming from magically majestic words. A place to learn about all sorts of programming topics from entry-level concepts to advanced abstractions",
|
||||
id: siteUrl,
|
||||
link: siteUrl,
|
||||
language: "en",
|
||||
image: `${siteUrl}/image.png`,
|
||||
favicon: `${siteUrl}/favicon.ico`,
|
||||
copyright: `Contributor's rights reserved ${new Date().getFullYear()}, Unicorn Utterances`,
|
||||
feedLinks: {
|
||||
json: `${siteUrl}/rss.json`,
|
||||
atom: `${siteUrl}/rss.xml`,
|
||||
},
|
||||
});
|
||||
|
||||
const posts = getAllPosts(
|
||||
{
|
||||
title: true,
|
||||
description: true,
|
||||
published: true,
|
||||
edited: true,
|
||||
slug: true,
|
||||
excerpt: true,
|
||||
license: {
|
||||
displayName: true,
|
||||
},
|
||||
authors: {
|
||||
id: true,
|
||||
name: true,
|
||||
socials: {
|
||||
website: true,
|
||||
},
|
||||
},
|
||||
} as const,
|
||||
"en"
|
||||
);
|
||||
|
||||
posts
|
||||
.sort((a, b) => (new Date(b.published) > new Date(a.published) ? 1 : -1))
|
||||
.forEach((post) => {
|
||||
const nodeUrl = `${siteUrl}/posts/${post.slug}`;
|
||||
|
||||
feed.addItem({
|
||||
title: post.title,
|
||||
guid: nodeUrl,
|
||||
link: nodeUrl,
|
||||
description: post.description || post.excerpt,
|
||||
author: post.authors.map((author) => {
|
||||
return {
|
||||
name: author.name,
|
||||
link: `${siteUrl}/unicorns/${author.id}`,
|
||||
};
|
||||
}),
|
||||
date: new Date(post.published),
|
||||
copyright: post.license?.displayName,
|
||||
extensions: [
|
||||
{
|
||||
name: "comments",
|
||||
objects: `${nodeUrl}#disqus_thread`,
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
// Relative to root
|
||||
fs.writeFileSync(path.resolve(process.cwd(), "./public/rss.xml"), feed.rss2());
|
||||
@@ -1,220 +0,0 @@
|
||||
import remarkGfm from "remark-gfm";
|
||||
import remarkUnwrapImages from "remark-unwrap-images";
|
||||
import remarkTwoslash from "remark-shiki-twoslash";
|
||||
import { UserConfigSettings } from "shiki-twoslash";
|
||||
import rehypeRaw from "rehype-raw";
|
||||
import rehypeSlug from "rehype-slug-custom-id";
|
||||
import {
|
||||
getCollectionBySlug,
|
||||
getCollectionSlugs,
|
||||
} from "utils/fs/posts-and-collections-api";
|
||||
import { join, resolve } from "path";
|
||||
import slash from "slash";
|
||||
import visit from "unist-util-visit";
|
||||
import { Element, Root } from "hast";
|
||||
import { isRelativePath, trimTrailingSlash } from "utils/url-paths";
|
||||
import { EPub } from "@lesjoursfr/html-to-epub";
|
||||
import { PluggableList, unified } from "unified";
|
||||
import { unifiedChain } from "utils/markdown/unified-chain";
|
||||
|
||||
function rehypeMakeImagePathsAbsolute(options: { path: string }) {
|
||||
return (tree: Root) => {
|
||||
function imgVisitor(node: Element) {
|
||||
if (node.tagName === "img") {
|
||||
let src = node.properties!.src as string;
|
||||
if (src.startsWith("http")) {
|
||||
return;
|
||||
}
|
||||
if (isRelativePath(src)) {
|
||||
src = slash(join(options.path, src));
|
||||
}
|
||||
node.properties!.src = src;
|
||||
}
|
||||
}
|
||||
|
||||
visit(tree, "element", imgVisitor);
|
||||
return tree;
|
||||
};
|
||||
}
|
||||
|
||||
function rehypeMakeHrefPathsAbsolute(options: { path: string }) {
|
||||
return (tree: Root) => {
|
||||
function aVisitor(node: Element) {
|
||||
if (node.tagName === "a") {
|
||||
let href = node.properties!.href as string;
|
||||
if (href.startsWith("#")) {
|
||||
return;
|
||||
}
|
||||
if (isRelativePath(href)) {
|
||||
href = slash(trimTrailingSlash(options.path) + href);
|
||||
}
|
||||
node.properties!.href = href;
|
||||
}
|
||||
}
|
||||
visit(tree, "element", aVisitor);
|
||||
return tree;
|
||||
};
|
||||
}
|
||||
|
||||
function rehypeMakeFixTwoSlashXHTML() {
|
||||
return (tree: Root) => {
|
||||
function preVisitor(node: Element) {
|
||||
if (node.tagName === "pre") {
|
||||
visit(node, "element", (childNode: Element) => {
|
||||
if (childNode.tagName === "div") {
|
||||
childNode.tagName = "span";
|
||||
if (childNode.properties!.style) {
|
||||
if ((childNode.properties!.style as string).endsWith(";")) {
|
||||
(childNode.properties!.style as string) += "display: block;";
|
||||
} else {
|
||||
(childNode.properties!.style as string) += "; display: block;";
|
||||
}
|
||||
} else {
|
||||
childNode.properties!.style = "display: block;";
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
visit(tree, "element", preVisitor);
|
||||
return tree;
|
||||
};
|
||||
}
|
||||
|
||||
interface markdownChainProps {
|
||||
remarkPlugins: PluggableList;
|
||||
rehypePlugins: PluggableList;
|
||||
}
|
||||
|
||||
async function generateEpubHTML(slug: string, content: string) {
|
||||
const result = await unifiedChain({
|
||||
remarkPlugins: [
|
||||
remarkGfm,
|
||||
remarkUnwrapImages,
|
||||
[
|
||||
(remarkTwoslash as any).default,
|
||||
{
|
||||
themes: ["github-light"],
|
||||
} as UserConfigSettings,
|
||||
],
|
||||
],
|
||||
rehypePlugins: [
|
||||
// This is required to handle unsafe HTML embedded into Markdown
|
||||
rehypeRaw,
|
||||
rehypeMakeFixTwoSlashXHTML,
|
||||
[
|
||||
rehypeMakeImagePathsAbsolute,
|
||||
{
|
||||
path: resolve(process.cwd(), `content/blog/${slug}/`),
|
||||
},
|
||||
],
|
||||
[
|
||||
rehypeMakeHrefPathsAbsolute,
|
||||
{
|
||||
path: `https://unicorn-utterances.com`,
|
||||
},
|
||||
],
|
||||
[
|
||||
rehypeSlug,
|
||||
{
|
||||
maintainCase: true,
|
||||
removeAccents: true,
|
||||
enableCustomId: true,
|
||||
},
|
||||
],
|
||||
],
|
||||
}).process(content);
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
type EpubOptions = ConstructorParameters<typeof EPub>[0];
|
||||
|
||||
async function generateCollectionEPub(
|
||||
collectionSlug: string,
|
||||
fileLocation: string
|
||||
) {
|
||||
const collection = getCollectionBySlug(collectionSlug, {
|
||||
title: true,
|
||||
authors: true,
|
||||
posts: true,
|
||||
slug: true,
|
||||
coverImg: true,
|
||||
associatedSeries: true,
|
||||
});
|
||||
const epub = new EPub(
|
||||
{
|
||||
title: collection.title,
|
||||
author: collection.authors.map((author) => author.name),
|
||||
publisher: "Unicorn Utterances",
|
||||
cover: resolve(
|
||||
process.cwd(),
|
||||
`content/collections/${collection.slug}/${collection.coverImg.relativePath}`
|
||||
),
|
||||
css: `
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shiki styling
|
||||
*/
|
||||
pre {
|
||||
padding: 0.5rem;
|
||||
border: 1px solid currentcolor;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
/** Don't show the language identifiers */
|
||||
pre.shiki .language-id {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*
|
||||
* This code handles line of code counting
|
||||
*/
|
||||
code {
|
||||
counter-reset: step;
|
||||
counter-increment: step 0;
|
||||
}
|
||||
|
||||
code .line::before {
|
||||
content: counter(step);
|
||||
counter-increment: step;
|
||||
width: 1rem;
|
||||
margin-right: 1.5rem;
|
||||
display: inline-block !important;
|
||||
text-align: right;
|
||||
color: currentcolor;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
pre.shiki span.line {
|
||||
white-space: normal;
|
||||
}
|
||||
`,
|
||||
// fonts: ['/path/to/Merriweather.ttf'],
|
||||
lang: "en",
|
||||
content: await Promise.all(
|
||||
collection.posts.map(async (post) => ({
|
||||
title: post.title,
|
||||
data: await generateEpubHTML(post.slug, post.content),
|
||||
}))
|
||||
),
|
||||
} as Partial<EpubOptions> as EpubOptions,
|
||||
fileLocation
|
||||
);
|
||||
|
||||
await epub.render();
|
||||
}
|
||||
|
||||
const collectionSlugs = getCollectionSlugs();
|
||||
// @ts-ignore
|
||||
await Promise.all(
|
||||
collectionSlugs.map(async (collectionSlug) => {
|
||||
await generateCollectionEPub(
|
||||
collectionSlug,
|
||||
resolve(process.cwd(), `public/${collectionSlug}.epub`)
|
||||
);
|
||||
})
|
||||
);
|
||||
@@ -1,81 +0,0 @@
|
||||
import lunr from "lunr";
|
||||
import { getAllPostsForListView, ListViewPosts } from "utils/fs/api";
|
||||
import { objectFilter } from "ts-util-helpers";
|
||||
import path from "path";
|
||||
import * as fs from "fs";
|
||||
|
||||
type ListViewPost = ListViewPosts[number];
|
||||
|
||||
let indexCache: null | { index: lunr.Index; store: Record<string, any> } = null;
|
||||
|
||||
export const createIndex = (
|
||||
posts: ListViewPosts,
|
||||
lunrFields: Array<{
|
||||
name: keyof ListViewPost;
|
||||
store?: boolean;
|
||||
attributes?: object;
|
||||
resolver?: (obj: ListViewPost) => string | number;
|
||||
}>
|
||||
) => {
|
||||
if (indexCache) return indexCache;
|
||||
// TODO: Strictly type to only what `store: true` includes
|
||||
const store: Record<string, any> = {};
|
||||
|
||||
const storeFields = lunrFields.filter((f) => f.store === true);
|
||||
|
||||
const index = lunr(function () {
|
||||
this.ref("id");
|
||||
lunrFields.forEach(({ name, attributes = {} }) => {
|
||||
this.field(name, attributes);
|
||||
});
|
||||
|
||||
posts.forEach((post) => {
|
||||
const newPost: Partial<Record<keyof ListViewPost, any>> & { id: string } =
|
||||
{ id: post.slug };
|
||||
for (let field of lunrFields) {
|
||||
if (field.resolver) {
|
||||
newPost[field.name] = field.resolver(post);
|
||||
continue;
|
||||
}
|
||||
const postFieldVal = post[field.name];
|
||||
newPost[field.name] = Array.isArray(postFieldVal)
|
||||
? postFieldVal.join(" ")
|
||||
: postFieldVal;
|
||||
}
|
||||
|
||||
const storeFilteredObj = objectFilter(newPost, (_, key) => {
|
||||
return (
|
||||
key === "id" ||
|
||||
!!storeFields.find((storeField) => storeField.name === key)
|
||||
);
|
||||
});
|
||||
|
||||
this.add(newPost);
|
||||
store[storeFilteredObj.id!] = storeFilteredObj;
|
||||
});
|
||||
});
|
||||
|
||||
indexCache = { index, store };
|
||||
|
||||
return indexCache;
|
||||
};
|
||||
|
||||
const exportedIndex = createIndex(getAllPostsForListView(), [
|
||||
{
|
||||
name: "title",
|
||||
store: true,
|
||||
attributes: { boost: 20 },
|
||||
},
|
||||
{ name: "excerpt", resolver: (post) => post.description || post.excerpt },
|
||||
{
|
||||
name: "slug",
|
||||
store: true,
|
||||
},
|
||||
{ name: "authors" },
|
||||
{ name: "tags", store: true },
|
||||
]);
|
||||
|
||||
fs.writeFileSync(
|
||||
path.resolve(process.cwd(), "./public/search_index.json"),
|
||||
JSON.stringify(exportedIndex)
|
||||
);
|
||||
@@ -1,60 +0,0 @@
|
||||
import { getSocialPosts } from "./social-previews/get-posts";
|
||||
import { renderPostPreviewToString } from "./shared-post-preview-png";
|
||||
import { existsSync, mkdirSync, writeFileSync } from "fs";
|
||||
import { resolve, dirname } from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
import { LiveServerParams } from "live-server";
|
||||
import chokidar from "chokidar";
|
||||
// @ts-ignore
|
||||
import liveServer from "@compodoc/live-server";
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
function ensureDirectoryExistence(filePath: string) {
|
||||
const localDirname = dirname(filePath);
|
||||
if (existsSync(localDirname)) {
|
||||
return true;
|
||||
}
|
||||
ensureDirectoryExistence(localDirname);
|
||||
mkdirSync(localDirname);
|
||||
}
|
||||
|
||||
const posts = getSocialPosts();
|
||||
|
||||
/**
|
||||
* TODO: Migrate to a single live-server instance powered by API
|
||||
*
|
||||
* Should look something like:
|
||||
*
|
||||
* ```
|
||||
* const liveServer = new LiveServer();
|
||||
* liveServer.open();
|
||||
* chokidar.watch("./social-previews").on("all", (event, path) => {
|
||||
* const html = renderPostPreviewToString(posts[0]);
|
||||
* liveServer.reload(html);
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
const rebuild = async () => {
|
||||
const html = await renderPostPreviewToString(posts[0]);
|
||||
|
||||
const previewHtmlPath = resolve(__dirname, "./dist/preview.html");
|
||||
ensureDirectoryExistence(previewHtmlPath);
|
||||
writeFileSync(previewHtmlPath, html);
|
||||
};
|
||||
|
||||
chokidar.watch(resolve(__dirname, "./social-previews")).on("change", () => {
|
||||
rebuild();
|
||||
});
|
||||
|
||||
// @ts-ignore
|
||||
await rebuild();
|
||||
|
||||
const params: LiveServerParams = {
|
||||
root: resolve(__dirname, "./dist"), // Set root directory that's being served. Defaults to cwd.
|
||||
file: "preview.html", // When set, serve this file (server root relative) for every 404 (useful for single-page applications)
|
||||
wait: 1000, // Waits for all changes, before reloading. Defaults to 0 sec.
|
||||
logLevel: 0, // 0 = errors only, 1 = some, 2 = lots
|
||||
};
|
||||
|
||||
liveServer.start(params);
|
||||
@@ -1,119 +0,0 @@
|
||||
import { readFileAsBase64 } from "./social-previews/read-file-as-base64";
|
||||
import { dirname, resolve } from "path";
|
||||
import { PreviewPost } from "./social-previews/get-posts";
|
||||
import { readFileSync } from "fs";
|
||||
import { renderToStaticMarkup } from "react-dom/server";
|
||||
import { createElement } from "react";
|
||||
import { fileURLToPath } from "url";
|
||||
import { COLORS } from "constants/theme";
|
||||
|
||||
import { unified } from "unified";
|
||||
import remarkParse from "remark-parse";
|
||||
import remarkTwoslash from "remark-shiki-twoslash";
|
||||
import remarkToRehype from "remark-rehype";
|
||||
import { findAllAfter } from "unist-util-find-all-after";
|
||||
import rehypeStringify from "rehype-stringify";
|
||||
|
||||
const unifiedChain = () => {
|
||||
let unifiedChain = unified()
|
||||
.use(remarkParse)
|
||||
.use(() => (tree) => {
|
||||
// extract code snippets from parsed markdown
|
||||
const nodes = findAllAfter(tree, 0, { type: "code" });
|
||||
|
||||
// join code parts into one element
|
||||
const value =
|
||||
nodes
|
||||
.map((node) => (node as any).value)
|
||||
.join("\n")
|
||||
.trim() +
|
||||
"\n" +
|
||||
renderPostPreviewToString.toString();
|
||||
|
||||
return {
|
||||
type: "root",
|
||||
children: [
|
||||
{
|
||||
type: "code",
|
||||
lang: (nodes[0] as any)?.lang || "javascript",
|
||||
value,
|
||||
},
|
||||
],
|
||||
};
|
||||
})
|
||||
.use([[(remarkTwoslash as any).default, { themes: ["css-variables"] }]])
|
||||
.use(remarkToRehype, { allowDangerousHtml: true })
|
||||
.use(rehypeStringify, { allowDangerousHtml: true });
|
||||
|
||||
return unifiedChain;
|
||||
};
|
||||
|
||||
async function markdownToHtml(content: string) {
|
||||
return await (await unifiedChain().process(content)).toString();
|
||||
}
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const colorsCSS = (Object.keys(COLORS) as Array<keyof typeof COLORS>).reduce(
|
||||
(stylesheetStr, colorKey, i, arr) => {
|
||||
let str = stylesheetStr + `\n--${colorKey}: ${COLORS[colorKey].light};`;
|
||||
if (i === arr.length - 1) str += "\n}";
|
||||
return str;
|
||||
},
|
||||
":root {\n"
|
||||
);
|
||||
|
||||
export const heightWidth = { width: 1280, height: 640 };
|
||||
|
||||
const unicornUtterancesHead = readFileAsBase64(
|
||||
resolve(__dirname, "../assets/unicorn_head_1024.png")
|
||||
);
|
||||
|
||||
export const renderPostPreviewToString = async (post: PreviewPost) => {
|
||||
const shikiSCSS = readFileSync(resolve(__dirname, "../shiki.scss"), "utf8");
|
||||
|
||||
const twitterLargeCardPreviewCSS = readFileSync(
|
||||
resolve(__dirname, "./social-previews/twitter-large-card.css"),
|
||||
"utf8"
|
||||
);
|
||||
|
||||
// This needs to happen here, since otherwise the `import` is stale at runtime,
|
||||
// thus breaking live refresh
|
||||
const TwitterLargeCard = // We need `?update=""` to cache bust for live reload
|
||||
(await import(`./social-previews/twitter-large-card?update=${Date.now()}`))
|
||||
.default;
|
||||
|
||||
const authorImagesStrs = post.authors.map((author) =>
|
||||
readFileAsBase64(author.profileImg.absoluteFSPath)
|
||||
);
|
||||
|
||||
const postHtml = await markdownToHtml(post.content);
|
||||
|
||||
return `
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
${shikiSCSS}
|
||||
</style>
|
||||
<style>
|
||||
${colorsCSS}
|
||||
</style>
|
||||
<style>
|
||||
${twitterLargeCardPreviewCSS}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
${renderToStaticMarkup(
|
||||
createElement(TwitterLargeCard, {
|
||||
post,
|
||||
postHtml,
|
||||
...heightWidth,
|
||||
authorImagesStrs,
|
||||
unicornUtterancesHead,
|
||||
})
|
||||
)}
|
||||
</body>
|
||||
</html>
|
||||
`;
|
||||
};
|
||||
@@ -1,21 +0,0 @@
|
||||
import { getAllPosts } from "utils/fs/posts-and-collections-api";
|
||||
|
||||
export function getSocialPosts() {
|
||||
const posts = getAllPosts(
|
||||
{
|
||||
title: true,
|
||||
published: true,
|
||||
slug: true,
|
||||
authors: {
|
||||
id: true,
|
||||
name: true,
|
||||
profileImg: true,
|
||||
},
|
||||
content: true,
|
||||
} as const,
|
||||
"en"
|
||||
);
|
||||
return posts;
|
||||
}
|
||||
|
||||
export type PreviewPost = ReturnType<typeof getSocialPosts>[number];
|
||||
@@ -1,24 +0,0 @@
|
||||
/**
|
||||
* @see https://github.com/tiaanduplessis/image-to-uri/blob/master/index.js
|
||||
*/
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
const extTypeMap = {
|
||||
".png": "image/png",
|
||||
".gif": "image/gif",
|
||||
".jpg": "image/jpeg",
|
||||
".jpeg": "image/jpeg",
|
||||
".bm": "image/bmp",
|
||||
".bmp": "image/bmp",
|
||||
".webp": "image/webp",
|
||||
".ico": "image/x-icon",
|
||||
".svg": "image/svg+xml",
|
||||
};
|
||||
|
||||
export function readFileAsBase64(file: string) {
|
||||
const image = fs.readFileSync(file);
|
||||
const contentType =
|
||||
extTypeMap[path.extname(file) as keyof typeof extTypeMap] || "image/jpeg";
|
||||
return `data:${contentType};base64,${image.toString("base64")}`;
|
||||
}
|
||||
@@ -1,147 +0,0 @@
|
||||
@import url("https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@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&display=swap");
|
||||
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: "Work Sans";
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.codeScreenOverlay, .codeScreenBg {
|
||||
perspective: 1000px;
|
||||
perspective-origin: 50% 50%;
|
||||
}
|
||||
.codeScreenOverlay {
|
||||
background: linear-gradient(340deg, rgba(0,0,0,.5), rgba(0,0,0,0)), url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="600" height="600"><filter id="noiseFilter"><feTurbulence type="fractalNoise" baseFrequency="0.65" numOctaves="3" stitchTiles="stitch"/></filter><rect width="100%" height="100%" filter="url(%23noiseFilter)"/></svg>');
|
||||
filter: contrast(800%) brightness(200%) saturate(0%);
|
||||
opacity: 0.1;
|
||||
z-index: -2;
|
||||
}
|
||||
|
||||
.codeScreenBg {
|
||||
background: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCABIAIADASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAECAwQFBv/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHhWUyNsqZRozlhDTXvDldLnCzW01KcbCmF9ImmSIotuy2G3veW9DFnC73mxUaM1XW5WTqATTGIG0iWvER2OWoggpNMQwBAwAJXGeWpmRa4mUtgQbiA0DAd4FgAAKIEEBCICiB//8QAIxAAAQQBBAIDAQAAAAAAAAAAAQACAxESECEwMSAyBBMiI//aAAgBAQABBQIbK9ogpRsw4optlRsNy+jk/rRyPg12zjaeaR9Gdtbala5SDUJ6LdtR2U0onaHuJv5LLMyDb0j9p+28AdivjzD63yU2U26/56ONnzvSGXFfbm1x/XM11c+JWJ5KKDfAhYqvOkBw0sVjp//EABQRAQAAAAAAAAAAAAAAAAAAAFD/2gAIAQMBAT8BI//EABQRAQAAAAAAAAAAAAAAAAAAAFD/2gAIAQIBAT8BI//EABsQAAMAAwEBAAAAAAAAAAAAAAABIRARIDBg/9oACAEBAAY/AsTEzCi4XSRpEzti96QvF8abS+Y//8QAHxAAAwACAgMBAQAAAAAAAAAAAAERITEQQSBRYTBx/9oACAEBAAE/IWC7RjVT+sQ6XuFc9cs31ntiNwbcLJazs2b2dHYsHZoy2ZZfPRCaIX7iGoZzgXitG4nklwQSmy2W24fC0jCkE5p+I2TIdbRTr2IXSlSsCpPCQgfxxmtImDrPkQ8jdSd8D2Yg2HRn9D2JxpmQL43hZDdKUmqkN25xdFm/ajMEbf4rjriNnwIdeM807oStkS65Sx+o2XKXgrFr8WrI4Q//2gAMAwEAAgADAAAAELF3261HEKNNDcYDWOBNCizLMDBPOYaJPPIXfHfYXP/EABQRAQAAAAAAAAAAAAAAAAAAAFD/2gAIAQMBAT8QI//EABkRAQACAwAAAAAAAAAAAAAAAAEAESAwQP/aAAgBAgEBPxDWwzSBXJ//xAAeEAEAAwEBAAMBAQAAAAAAAAABABEhMUEQUWFxgf/aAAgBAQABPxBVDED24YAfYyo4Vw9juZZ/JELbL2D6mBShKHOuv3GodNltJsiUZSpo9fs6H3KhChxss1ucJ1nsVy8nbiuBOJl0z1BayVAKHr1ZRwAL/s5eWwPZWWR4djk0u7KVMAz9jqksb3Iz9RGEuFpEos5HSyDaDOZdRcnnsESg3m+T0oTFTarZYzl9RL4obCNxQk17P9gDFr3ZQKyZYADyHRZKilpeX8FXZH7IKWx0n3LICBabuMc0mn7iGReseW6sijAKNXexalcOkfslgnXZyH8g7MMuIWuWLZX14mU5SzEZi3TRBTjHWDVkLj2XPIYQdiCuxorbi1LghuBKZFVftj1jjk9tgk9jRCPZ18ZFCwRQX8Ytahl/cI6/k/Jgh+x35DdyBbkcqN7TDkHws6Z/scbU6gxT6grjLJWwiEREEFLYQZfww/Y5EGeRP22IDrCs/9k='), radial-gradient(ellipse 200% 100%, #888, #000);
|
||||
background-blend-mode: screen;
|
||||
z-index: -4;
|
||||
}
|
||||
|
||||
.codeScreenBg.blur {
|
||||
--gradient: radial-gradient(circle 500px at 25% 50%, rgba(0,0,0,0), rgba(0,0,0,1));
|
||||
-webkit-mask-image: var(--gradient);
|
||||
mask-image: var(--gradient);
|
||||
filter: blur(5px);
|
||||
z-index: -3;
|
||||
}
|
||||
|
||||
.codeScreenBg::after {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: -30%;
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
background: radial-gradient(closest-side, rgba(255,255,255,0.1), rgba(255,255,255,0));
|
||||
transform: rotateZ(25deg);
|
||||
content: ' ';
|
||||
}
|
||||
|
||||
.codeScreen {
|
||||
height: 200% !important;
|
||||
width: 115% !important;
|
||||
transform-origin: 50% 50%;
|
||||
transform: rotate3d(0.7, 1, 0.3, 45deg);
|
||||
background: #222;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 0 28px #000;
|
||||
}
|
||||
|
||||
.codeScreen::after {
|
||||
position: absolute;
|
||||
top: 0.5em;
|
||||
right: 1em;
|
||||
font-size: 1.4em;
|
||||
content: '🗕 🗖 🗙';
|
||||
}
|
||||
|
||||
.codeScreen > * {
|
||||
padding: 2em;
|
||||
}
|
||||
|
||||
.codeScreen pre {
|
||||
font-family: monospace;
|
||||
overflow: hidden;
|
||||
background: none !important;
|
||||
border: none !important;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
.codeScreen code {
|
||||
font-size: 1.2rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.codeScreen .code-container {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.backgroundColor {
|
||||
background: hsl(200, 82%, 45%);
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.absoluteFill {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
box-sizing: border-box;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.bottomContainer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
padding: 2rem;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
justify-content: space-between;
|
||||
box-sizing: border-box;
|
||||
filter: drop-shadow(0px 1px 2px rgba(11, 37, 104, 0.3));
|
||||
}
|
||||
|
||||
.centerAll {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
justify-content: center;
|
||||
align-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.bottomImagesContainer {
|
||||
}
|
||||
|
||||
.bottomProfImg {
|
||||
border-radius: 99px;
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
.bottomImagesContainer > p {
|
||||
margin: 0;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-size: 2rem;
|
||||
line-height: 9px;
|
||||
text-align: right;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.secondHalfTitle {
|
||||
color: #f5acc9;
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
import React from "react";
|
||||
import { render } from "@testing-library/react";
|
||||
import { MockPost } from "__mocks__/data/mock-post";
|
||||
import TwitterLargeCard, { splitSentence } from "./twitter-large-card";
|
||||
|
||||
test("Social previews splitSentence", () => {
|
||||
// doesn't split at start/end of short titles
|
||||
expect(splitSentence("Topic: Topic")).toStrictEqual(["Topic: Topic", ""]);
|
||||
|
||||
// splits by colon (including the colon char)
|
||||
expect(splitSentence("A Topic: an Attribute")).toStrictEqual([
|
||||
"A Topic",
|
||||
": an Attribute",
|
||||
]);
|
||||
|
||||
// splits by commas
|
||||
expect(
|
||||
splitSentence("An Attribute of Topic, Topic, and Topic")
|
||||
).toStrictEqual(["An Attribute of ", "Topic, Topic, and Topic"]);
|
||||
|
||||
// splits by apostrophe
|
||||
expect(splitSentence("A Topic's Attribute")).toStrictEqual([
|
||||
"A Topic's",
|
||||
" Attribute",
|
||||
]);
|
||||
|
||||
// splits by apostrophe (plural)
|
||||
expect(splitSentence("Some Topics' Attributes")).toStrictEqual([
|
||||
"Some Topics'",
|
||||
" Attributes",
|
||||
]);
|
||||
|
||||
// splits by lowercase words
|
||||
expect(splitSentence("An Attribute in a Topic")).toStrictEqual([
|
||||
"An Attribute in ",
|
||||
"a Topic",
|
||||
]);
|
||||
});
|
||||
|
||||
test("Social preview renders", async () => {
|
||||
const post = MockPost;
|
||||
const { baseElement, findByText } = render(
|
||||
<TwitterLargeCard
|
||||
post={post}
|
||||
postHtml="<code>test();</code>"
|
||||
width={1280}
|
||||
height={640}
|
||||
authorImagesStrs={["test.jpg"]}
|
||||
unicornUtterancesHead="uu.jpg"
|
||||
/>
|
||||
);
|
||||
|
||||
expect(baseElement).toBeInTheDocument();
|
||||
expect(await findByText(post.title)).toBeInTheDocument();
|
||||
});
|
||||
@@ -1,147 +0,0 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { PreviewPost } from "./get-posts";
|
||||
|
||||
export function splitSentence(str: string): [string, string] {
|
||||
const splitStr = str.split(" ");
|
||||
const splitBy = (
|
||||
regex: RegExp,
|
||||
matchLast: boolean = true
|
||||
): [string, string] | null => {
|
||||
const matches = splitStr.map((word, i) => ({ reg: regex.exec(word), i }));
|
||||
const match = (matchLast ? matches.reverse() : matches)
|
||||
.slice(1, -1)
|
||||
.find(({ reg }) => !!reg);
|
||||
|
||||
// if match is not found, fail
|
||||
if (!match || !match.reg) return null;
|
||||
|
||||
const firstHalf = [
|
||||
...splitStr.slice(0, match.i),
|
||||
match.reg.input.substring(0, match.reg.index),
|
||||
].join(" ");
|
||||
const secondHalf = [match.reg[0], ...splitStr.slice(match.i + 1)].join(" ");
|
||||
return [firstHalf, secondHalf];
|
||||
};
|
||||
|
||||
let ret;
|
||||
// try to split by "Topic[: Attribute]" or "Topic [- Attribute]" (hyphens/colons)
|
||||
if ((ret = splitBy(/(?<=^\w+):$|^[-—]$/))) return ret;
|
||||
// try to split by "Attribute in [Topic, Topic, and Topic]" (commas)
|
||||
if ((ret = splitBy(/^\w+,$/, false))) return ret;
|
||||
// try to split by "Topic['s Attribute]" (apostrophe)
|
||||
if ((ret = splitBy(/(?<=^\w+\'s?)$/))) return ret;
|
||||
// try to split by "Attribute [in Topic]" (lowercase words)
|
||||
if ((ret = splitBy(/^[a-z][A-Za-z]*$/))) return ret;
|
||||
// otherwise, don't split the string
|
||||
return [str, ""];
|
||||
}
|
||||
|
||||
interface TwitterCodeScreenProps {
|
||||
title: string;
|
||||
html: string;
|
||||
blur: boolean;
|
||||
}
|
||||
|
||||
const TwitterCodeScreen = ({ title, html, blur }: TwitterCodeScreenProps) => {
|
||||
const rotations = [
|
||||
"rotateX(-17deg) rotateY(32deg) rotateZ(-3deg) translate(16%, 0%)",
|
||||
"rotateX(5deg) rotateY(35deg) rotateZ(345deg) translate(18%, 0)",
|
||||
"rotateX(15deg) rotateY(25deg) rotateZ(12deg) translate(3%, -15%)",
|
||||
];
|
||||
|
||||
// use second char of title as "deterministic" random value
|
||||
const transform = rotations[title.charCodeAt(1) % rotations.length];
|
||||
|
||||
return (
|
||||
<div className={`absoluteFill codeScreenBg ${blur ? "blur" : ""}`}>
|
||||
<div
|
||||
className="absoluteFill codeScreen"
|
||||
style={
|
||||
{
|
||||
transform,
|
||||
} as React.CSSProperties
|
||||
}
|
||||
>
|
||||
<div className="absoluteFill">
|
||||
<pre dangerouslySetInnerHTML={{ __html: html }} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
interface TwitterLargeCardProps {
|
||||
post: PreviewPost;
|
||||
postHtml: string;
|
||||
height: number;
|
||||
width: number;
|
||||
authorImagesStrs: string[];
|
||||
unicornUtterancesHead: string;
|
||||
}
|
||||
|
||||
const TwitterLargeCard = ({
|
||||
post,
|
||||
postHtml,
|
||||
height,
|
||||
width,
|
||||
authorImagesStrs,
|
||||
unicornUtterancesHead,
|
||||
}: TwitterLargeCardProps) => {
|
||||
const title = post.title;
|
||||
const [firstHalfTitle, secondHalfTitle] = splitSentence(title);
|
||||
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
height: `${height}px`,
|
||||
width: `${width}px`,
|
||||
position: "relative",
|
||||
overflow: "hidden",
|
||||
}}
|
||||
>
|
||||
<TwitterCodeScreen title={post.title} html={postHtml} blur={true} />
|
||||
<TwitterCodeScreen title={post.title} html={postHtml} blur={false} />
|
||||
<div className="absoluteFill codeScreenOverlay" />
|
||||
<div className="absoluteFill centerAll">
|
||||
<h1
|
||||
style={{
|
||||
maxWidth: "90%",
|
||||
textAlign: "center",
|
||||
fontSize: `clamp(300%, 4.5rem, ${
|
||||
Math.round(width / title.length) * 3
|
||||
}px)`,
|
||||
}}
|
||||
>
|
||||
{firstHalfTitle}
|
||||
<span className="secondHalfTitle">{secondHalfTitle}</span>
|
||||
</h1>
|
||||
</div>
|
||||
<div
|
||||
className="absoluteFill backgroundColor"
|
||||
style={{
|
||||
zIndex: -1,
|
||||
}}
|
||||
/>
|
||||
<div className="bottomContainer">
|
||||
<div className="bottomImagesContainer centerAll">
|
||||
{authorImagesStrs.map((authorStr) => (
|
||||
<img
|
||||
key={authorStr}
|
||||
src={authorStr}
|
||||
alt=""
|
||||
className="bottomProfImg"
|
||||
height={80}
|
||||
width={80}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
<div className="bottomImagesContainer centerAll">
|
||||
<p>unicorn-utterances.com</p>
|
||||
<img src={unicornUtterancesHead} alt="" height={80} width={80} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default TwitterLargeCard;
|
||||
18
src/components/Author.astro
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
export interface Props {
|
||||
name: string;
|
||||
href: string;
|
||||
}
|
||||
|
||||
const { name, href } = Astro.props;
|
||||
---
|
||||
|
||||
<div class="author">
|
||||
<p><a {href}>{name}</a></p>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.author {
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
</style>
|
||||
38
src/components/BaseHead.astro
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
import '../styles/blog.css';
|
||||
|
||||
export interface Props {
|
||||
title: string;
|
||||
description: string;
|
||||
permalink: string;
|
||||
}
|
||||
const { title, description, permalink } = Astro.props;
|
||||
---
|
||||
|
||||
<!-- Global Metadata -->
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||
|
||||
<!-- Primary Meta Tags -->
|
||||
<title>{title}</title>
|
||||
<meta name="title" content={title} />
|
||||
<meta name="description" content={description} />
|
||||
|
||||
<!-- Open Graph / Facebook -->
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content={permalink} />
|
||||
<meta property="og:title" content={title} />
|
||||
<meta property="og:description" content={description} />
|
||||
<meta property="og:image" content="https://astro.build/social.png?v=1" />
|
||||
|
||||
<!-- Twitter -->
|
||||
<meta property="twitter:card" content="summary_large_image" />
|
||||
<meta property="twitter:url" content={permalink} />
|
||||
<meta property="twitter:title" content={title} />
|
||||
<meta property="twitter:description" content={description} />
|
||||
<meta property="twitter:image" content="https://astro.build/social.png?v=1" />
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" />
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono&family=IBM+Plex+Sans:wght@400;700&display=swap" />
|
||||
90
src/components/BlogHeader.astro
Normal file
@@ -0,0 +1,90 @@
|
||||
<header class="wrapper">
|
||||
<article>
|
||||
<h1>
|
||||
<a href="/">
|
||||
<svg class="logo" width="32" height="32" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<style>
|
||||
#flame {
|
||||
fill: #ff5d01;
|
||||
}
|
||||
#a {
|
||||
fill: #000014;
|
||||
}
|
||||
</style>
|
||||
<title>Logo</title>
|
||||
<path
|
||||
id="a"
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M163.008 18.929c1.944 2.413 2.935 5.67 4.917 12.181l43.309 142.27a180.277 180.277 0 00-51.778-17.53l-28.198-95.29a3.67 3.67 0 00-7.042.01l-27.857 95.232a180.225 180.225 0 00-52.01 17.557l43.52-142.281c1.99-6.502 2.983-9.752 4.927-12.16a15.999 15.999 0 016.484-4.798c2.872-1.154 6.271-1.154 13.07-1.154h31.085c6.807 0 10.211 0 13.086 1.157a16.004 16.004 0 016.487 4.806z"
|
||||
></path>
|
||||
<path
|
||||
id="flame"
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M168.19 180.151c-7.139 6.105-21.39 10.268-37.804 10.268-20.147 0-37.033-6.272-41.513-14.707-1.602 4.835-1.961 10.367-1.961 13.902 0 0-1.056 17.355 11.015 29.426 0-6.268 5.081-11.349 11.349-11.349 10.743 0 10.731 9.373 10.721 16.977v.679c0 11.542 7.054 21.436 17.086 25.606a23.27 23.27 0 01-2.339-10.2c0-11.008 6.463-15.107 13.974-19.87 5.976-3.79 12.616-8.001 17.192-16.449a31.024 31.024 0 003.743-14.82c0-3.299-.513-6.479-1.463-9.463z"
|
||||
></path>
|
||||
</svg>
|
||||
<span>My Blog</span>
|
||||
</a>
|
||||
</h1>
|
||||
</article>
|
||||
</header>
|
||||
|
||||
<style>
|
||||
header {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
height: 5rem;
|
||||
}
|
||||
article {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.header-subitem {
|
||||
display: flex;
|
||||
flex-grow: 0;
|
||||
gap: 0.5em;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--theme-text-lighter);
|
||||
font-size: initial;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
.header-subitem:hover {
|
||||
color: var(--theme-accent);
|
||||
}
|
||||
.header-subitem svg {
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 32em) {
|
||||
.header-subitem {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0;
|
||||
font-size: 1.5rem;
|
||||
max-width: 100%;
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.logo {
|
||||
transform: translateY(0.25rem);
|
||||
}
|
||||
|
||||
svg {
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
}
|
||||
|
||||
h1 a {
|
||||
text-decoration: none;
|
||||
display: inline-flex;
|
||||
}
|
||||
</style>
|
||||