Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
586eb5f277 |
|||
|
13580277b4 |
|||
|
99a087db3d |
|||
|
76a26a0af9 |
|||
|
98a6dde805 |
|||
|
e4c2d705e8 |
|||
|
56891acfe2 |
|||
|
2f93b682eb |
|||
|
25fd556c3d |
|||
| 5a2fd1b3ec | |||
|
03325797bf |
|||
| 5b52e1ae29 | |||
|
5e2120906e |
|||
|
f50e7e9b71 |
|||
|
b48e346001 |
|||
|
358d2a26a0 |
|||
|
dcebbd0943 |
|||
|
7194ba72fd |
|||
|
67824c6bc8 |
|||
|
a4b5ea4fa8 |
|||
|
61d27b0e96 |
|||
|
0193880cb0 |
|||
|
6117b9e887 |
|||
|
e2dddc4231 |
|||
|
08cb04f888 |
|||
| 1d9f39cf01 | |||
| fe43597d7f | |||
| bbab38e8d9 | |||
| de01851c65 | |||
| 45adc66a70 | |||
| 1d77e5a3e0 | |||
| f9aa103200 | |||
| 33865a900c | |||
| a30bd06b89 | |||
| 936420f5b4 | |||
| 7d4ce9c7b2 | |||
| f9c53ad178 | |||
|
afa02221b3 |
|||
|
bf7f8ef9ac |
|||
|
a0d4594b70 |
|||
|
ba544ec649 |
|||
|
9674c23e97 |
|||
|
108398cb13 |
|||
|
8a4cea592b |
|||
|
2d1f3d89f3 |
|||
|
8da8c99d5b |
|||
|
c72c43f198 |
|||
|
19fd1bc848 |
|||
|
279e08f693 |
|||
|
9a60c880c6 |
|||
|
1807e05b79 |
|||
|
ee9cf0c23a |
|||
|
4bfea3353e |
|||
|
1d767916cd |
|||
|
c072d7ab57 |
|||
|
c186327012 |
|||
|
0f1fa5e0c8 |
|||
|
44ec71417f |
|||
|
aa6e13efb2 |
|||
|
63ae559823 |
|||
|
8390459719 |
|||
|
bb065692b0 |
21
.forgejo/workflows/dependency-builds.yml
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
name: Dependency builds
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
FORGEJO_TOKEN: ""
|
||||
GITHUB_TOKEN: ""
|
||||
|
||||
jobs:
|
||||
check:
|
||||
if: ${{ github.actor == 'rasensprenger' }}
|
||||
name: Build & Lint
|
||||
runs-on: nixos
|
||||
steps:
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
- run: nix develop .#electron --command pnpm install --frozen-lockfile
|
||||
- run: nix develop .#electron --command pnpm run lint
|
||||
- run: nix develop .#electron --command pnpm run build
|
||||
63
README.md
|
|
@ -3,66 +3,3 @@
|
|||
```sh
|
||||
pnpm install https://git.methanium.net/methanium/ui/releases/download/latest/methanium-ui.tgz
|
||||
```
|
||||
|
||||
Import the stylesheet once, then add the provider at the application root:
|
||||
|
||||
```tsx
|
||||
import "@methanium/ui/index.css";
|
||||
import { ThemeProvider } from "@methanium/ui";
|
||||
|
||||
<ThemeProvider>{children}</ThemeProvider>;
|
||||
```
|
||||
|
||||
## App Default
|
||||
|
||||
Vite applications can choose their initial parent theme at build time:
|
||||
|
||||
```ts
|
||||
import { methaniumUi } from "@methanium/ui/vite";
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [methaniumUi({ defaultThemeId: "tensamin" })],
|
||||
});
|
||||
```
|
||||
|
||||
The built-in parent themes are `tensamin`, `og-tensamin`, `methanium`, and
|
||||
`secret`. Without the plugin or a provider override, the neutral base theme is
|
||||
used.
|
||||
Public Sans is bundled as the default typeface; users can switch to their
|
||||
platform's system font in the customizer.
|
||||
|
||||
## Custom Themes
|
||||
|
||||
Pass a typed manifest to `ThemeProvider` to add themes. Presets are ordinary
|
||||
CSS and remain fully editable after selection.
|
||||
|
||||
```ts
|
||||
import {
|
||||
BUILT_IN_THEMES,
|
||||
DEFAULT_THEME_DESIGN,
|
||||
defineThemes,
|
||||
} from "@methanium/ui";
|
||||
|
||||
export const themes = defineThemes([
|
||||
...BUILT_IN_THEMES,
|
||||
{
|
||||
id: "my-theme",
|
||||
title: "My Theme",
|
||||
logo: "/themes/my-logo.svg",
|
||||
defaultValues: {
|
||||
borderRadius: 0.5,
|
||||
design: { ...DEFAULT_THEME_DESIGN, density: 0.95 },
|
||||
},
|
||||
css: `:root[data-theme="my-theme"] { --primary: #ff4f91; }`,
|
||||
},
|
||||
]);
|
||||
```
|
||||
|
||||
Use `<ThemeCustomizer />` for all theme editing. `<ThemeSelector />` is its
|
||||
focused parent-theme selection control.
|
||||
|
||||
## Onboarding
|
||||
|
||||
Every `OnboardingStep` requires a `title`; the flow owns title rendering and
|
||||
focus. `<ThemeOnboardingPage />` applies choices immediately and prevents
|
||||
continuing until the user explicitly selects a theme.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,10 @@
|
|||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, viewport-fit=cover"
|
||||
/>
|
||||
<meta name="theme-color" content="#111827" />
|
||||
<title>Methanium UI Showcase</title>
|
||||
</head>
|
||||
|
|
|
|||
|
|
@ -11,22 +11,23 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@methanium/ui": "workspace:*",
|
||||
"react": "^19.2.7",
|
||||
"react-dom": "^19.2.7"
|
||||
"react": "^19.2.8",
|
||||
"react-dom": "^19.2.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^10.0.1",
|
||||
"@tailwindcss/vite": "^4.3.1",
|
||||
"@types/node": "^26.0.0",
|
||||
"@types/react": "^19.2.17",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@vitejs/plugin-react": "^6.0.1",
|
||||
"eslint": "^10.3.0",
|
||||
"@tailwindcss/vite": "^4.3.3",
|
||||
"@typescript/native": "npm:typescript@^7.0.2",
|
||||
"@types/node": "^26.2.0",
|
||||
"@types/react": "^19.2.18",
|
||||
"@types/react-dom": "^19.2.4",
|
||||
"@vitejs/plugin-react": "^6.0.5",
|
||||
"eslint": "^10.8.1",
|
||||
"eslint-plugin-react-hooks": "^7.1.1",
|
||||
"eslint-plugin-react-refresh": "^0.5.2",
|
||||
"globals": "^17.6.0",
|
||||
"typescript": "^6.0.3",
|
||||
"typescript-eslint": "^8.59.2",
|
||||
"vite": "^8.0.16"
|
||||
"eslint-plugin-react-refresh": "^0.5.3",
|
||||
"globals": "^17.9.0",
|
||||
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
||||
"typescript-eslint": "^8.66.0",
|
||||
"vite": "^8.2.1"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,93 @@
|
|||
import { useState } from "react";
|
||||
import { Blocks, Home, Palette, Settings } from "lucide-react";
|
||||
import {
|
||||
Button,
|
||||
Card,
|
||||
CardContent,
|
||||
ContextMenu,
|
||||
ContextMenuContent,
|
||||
ContextMenuItem,
|
||||
ContextMenuTrigger,
|
||||
LoadingScreen,
|
||||
OnboardingFlow,
|
||||
Select,
|
||||
SelectContent,
|
||||
SelectItem,
|
||||
SelectTrigger,
|
||||
SelectValue,
|
||||
Sidebar,
|
||||
SidebarContent,
|
||||
SidebarFooter,
|
||||
SidebarGroup,
|
||||
SidebarGroupContent,
|
||||
SidebarInset,
|
||||
SidebarMenu,
|
||||
SidebarMenuItem,
|
||||
SidebarProvider,
|
||||
Tabs,
|
||||
TabsContent,
|
||||
TabsList,
|
||||
TabsTrigger,
|
||||
ThemeCustomizer,
|
||||
ThemeOnboardingPage,
|
||||
type OnboardingStep,
|
||||
} from "@methanium/ui";
|
||||
|
||||
import { MarkdownShowcase } from "./MarkdownShowcase";
|
||||
|
||||
const navigation = [
|
||||
{ label: "Banana", icon: Home, variant: "default" },
|
||||
{ label: "Orange", icon: Blocks, variant: "subtleDefault" },
|
||||
{ label: "Apple", icon: Palette, variant: "outline" },
|
||||
{ label: "Kiwi", icon: Settings, variant: "secondary" },
|
||||
{ label: "Ghost", icon: Settings, variant: "ghost" },
|
||||
] as const;
|
||||
|
||||
type Category = "conversations" | "communities";
|
||||
|
||||
function CategorySwitch() {
|
||||
const [category, setCategory] = useState<Category>("conversations");
|
||||
|
||||
function toggleCategory() {
|
||||
setCategory((current) =>
|
||||
current === "conversations" ? "communities" : "conversations",
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
role="tablist"
|
||||
className="border relative grid grid-cols-2 rounded-4xl bg-card p-1 select-none"
|
||||
>
|
||||
<div
|
||||
className="absolute top-1 bottom-1 rounded-4xl bg-input shadow-sm transition-all duration-300 ease-in-out"
|
||||
style={{
|
||||
left: category === "conversations" ? "0.25rem" : "50%",
|
||||
width: "calc(50% - 0.25rem)",
|
||||
}}
|
||||
/>
|
||||
{(["conversations", "communities"] as const).map((value) => (
|
||||
<button
|
||||
key={value}
|
||||
role="tab"
|
||||
aria-selected={category === value}
|
||||
className={`relative z-10 w-full cursor-pointer rounded-4xl px-2.5 py-1.5 text-center text-sm font-medium capitalize transition-colors duration-300 ${
|
||||
category === value
|
||||
? "text-foreground"
|
||||
: "text-ring/50 hover:text-ring"
|
||||
}`}
|
||||
onClick={toggleCategory}
|
||||
>
|
||||
{value}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function App() {
|
||||
const [showOnboarding, setShowOnboarding] = useState(false);
|
||||
const [showLoading, setShowLoading] = useState(false);
|
||||
const [onboardingThemeId, setOnboardingThemeId] = useState<string | null>(
|
||||
null,
|
||||
);
|
||||
|
|
@ -43,14 +122,118 @@ export default function App() {
|
|||
</div>
|
||||
);
|
||||
|
||||
if (showLoading)
|
||||
return (
|
||||
<main className="mx-auto flex max-w-[1500px] flex-col gap-7 p-5 md:p-10">
|
||||
<div>
|
||||
<Button variant="outline" onClick={() => setShowOnboarding(true)}>
|
||||
<div className="relative">
|
||||
<LoadingScreen
|
||||
noProgress
|
||||
title="Loading screen"
|
||||
description="Blalblblalbalbl"
|
||||
/>
|
||||
<Button
|
||||
className="fixed top-4 left-4 z-50"
|
||||
variant="outline"
|
||||
onClick={() => setShowLoading(false)}
|
||||
>
|
||||
Hide loading screen
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
|
||||
return (
|
||||
<SidebarProvider>
|
||||
<Sidebar
|
||||
collapsible="none"
|
||||
className="h-auto! min-h-svh self-stretch border-r"
|
||||
>
|
||||
<SidebarContent>
|
||||
<SidebarGroup>
|
||||
<SidebarGroupContent>
|
||||
<SidebarMenu className="gap-5">
|
||||
{navigation.map(({ label, icon: Icon, variant }) => (
|
||||
<SidebarMenuItem key={label}>
|
||||
<Button variant={variant} className="w-full justify-start">
|
||||
<Icon />
|
||||
<span>{label}</span>
|
||||
</Button>
|
||||
</SidebarMenuItem>
|
||||
))}
|
||||
<SidebarMenuItem>
|
||||
<CategorySwitch />
|
||||
</SidebarMenuItem>
|
||||
<SidebarMenuItem>
|
||||
<Select>
|
||||
<SelectTrigger className="w-full">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value={1}>Item 1</SelectItem>
|
||||
<SelectItem value={2}>Item 2</SelectItem>
|
||||
<SelectItem value={3}>Item 3</SelectItem>
|
||||
<SelectItem value={4}>Item 4</SelectItem>
|
||||
<SelectItem value={5}>Item 5</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</SidebarMenuItem>
|
||||
<SidebarMenuItem>
|
||||
<ContextMenu>
|
||||
<ContextMenuTrigger>Right Click Me</ContextMenuTrigger>
|
||||
<ContextMenuContent>
|
||||
<ContextMenuItem>item 1</ContextMenuItem>
|
||||
<ContextMenuItem variant="destructive">
|
||||
item 2
|
||||
</ContextMenuItem>
|
||||
</ContextMenuContent>
|
||||
</ContextMenu>
|
||||
</SidebarMenuItem>
|
||||
<SidebarMenuItem>
|
||||
<Tabs defaultValue="one">
|
||||
<TabsList>
|
||||
<TabsTrigger value="one">One</TabsTrigger>
|
||||
<TabsTrigger value="two">Two</TabsTrigger>
|
||||
</TabsList>
|
||||
<TabsContent value="one">First tab</TabsContent>
|
||||
<TabsContent value="two">Second tab</TabsContent>
|
||||
</Tabs>
|
||||
</SidebarMenuItem>
|
||||
<SidebarMenuItem className="relative">
|
||||
<div className="h-25 bg-[#FF0000]"></div>
|
||||
<Card className="absolute h-30 top-10 left-0 w-full">
|
||||
<CardContent>Cool card</CardContent>
|
||||
</Card>
|
||||
</SidebarMenuItem>
|
||||
</SidebarMenu>
|
||||
</SidebarGroupContent>
|
||||
</SidebarGroup>
|
||||
</SidebarContent>
|
||||
<SidebarFooter>
|
||||
<a
|
||||
href="https://legal.methanium.net/methanium/privacy-policy"
|
||||
target="_blank"
|
||||
className="hover:underline"
|
||||
>
|
||||
Privacy Policy
|
||||
</a>
|
||||
</SidebarFooter>
|
||||
</Sidebar>
|
||||
|
||||
<SidebarInset>
|
||||
<div className="mx-auto flex w-full max-w-[1500px] flex-col gap-7 p-5 md:p-10">
|
||||
<div className="flex flex-wrap gap-2">
|
||||
<Button
|
||||
variant="subtleDefault"
|
||||
onClick={() => setShowOnboarding(true)}
|
||||
>
|
||||
Open onboarding
|
||||
</Button>
|
||||
<Button variant="outline" onClick={() => setShowLoading(true)}>
|
||||
Toggle loading screen
|
||||
</Button>
|
||||
</div>
|
||||
<ThemeCustomizer />
|
||||
</main>
|
||||
<MarkdownShowcase />
|
||||
</div>
|
||||
</SidebarInset>
|
||||
</SidebarProvider>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
155
apps/showcase/src/MarkdownShowcase.tsx
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
import { Markdown } from "@methanium/ui";
|
||||
import {
|
||||
createEmojiRegistry,
|
||||
EmojiProvider,
|
||||
Input,
|
||||
Text,
|
||||
type InputController,
|
||||
} from "@methanium/ui/markdown";
|
||||
import { useRef, useState } from "react";
|
||||
|
||||
import methaniumLogo from "../../../src/theme/assets/methanium-logo.svg";
|
||||
|
||||
const emojiRegistry = createEmojiRegistry({
|
||||
customEmojis: [
|
||||
{
|
||||
shortcode: ":methanium:",
|
||||
name: "Methanium",
|
||||
aliases: [":meth:"],
|
||||
src: methaniumLogo,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const markdownContent = [
|
||||
"# Complete Markdown showcase",
|
||||
"",
|
||||
"This page exercises the default Markdown renderers. It includes **bold text**, *emphasis*, ~~strikethrough~~, and `inline code` in one paragraph.",
|
||||
"",
|
||||
"Shortcodes use local Twemoji assets :fire: :white_check_mark:, while applications can register their own images :methanium:.",
|
||||
"",
|
||||
"Visit the [Methanium](https://methanium.net) or jump to the [code examples](#code-examples). Bare URLs are supported too: https://example.com.",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"## Headings",
|
||||
"",
|
||||
"### Third-level heading",
|
||||
"",
|
||||
"#### Fourth-level heading",
|
||||
"",
|
||||
"##### Fifth-level heading",
|
||||
"",
|
||||
"###### Sixth-level heading",
|
||||
"",
|
||||
"Headings receive stable IDs and reveal a link anchor when hovered or focused.",
|
||||
"",
|
||||
"## Lists",
|
||||
"",
|
||||
"- Unordered list item",
|
||||
"- Another item with nested content",
|
||||
" - Nested item",
|
||||
" - Another nested item",
|
||||
"",
|
||||
"1. First ordered item",
|
||||
"2. Second ordered item",
|
||||
"3. Third ordered item",
|
||||
"",
|
||||
"- [x] Completed task",
|
||||
"- [ ] Pending task",
|
||||
"- [ ] Another pending task",
|
||||
"",
|
||||
"## Blockquote",
|
||||
"",
|
||||
"> Good interfaces make common actions obvious and uncommon actions possible.",
|
||||
">",
|
||||
"> A blockquote can contain multiple paragraphs and **formatted text**.",
|
||||
"",
|
||||
"## Table",
|
||||
"",
|
||||
"| Component | Source | Styling |",
|
||||
"| :--- | :---: | ---: |",
|
||||
"| Heading | `components.tsx` | Tailwind |",
|
||||
"| Code block | `code-block.tsx` | Tailwind |",
|
||||
"| Shiki theme | `index.css` | CSS variables |",
|
||||
"",
|
||||
"---",
|
||||
"",
|
||||
"## Math",
|
||||
"",
|
||||
"Inline math renders inside a sentence: $E = mc^2$.",
|
||||
"",
|
||||
"$$",
|
||||
"\\int_{-\\infty}^{\\infty} e^{-x^2} \\, dx = \\sqrt{\\pi}",
|
||||
"$$",
|
||||
"",
|
||||
"## Code examples",
|
||||
"",
|
||||
"The first block includes a filename, line numbers, and highlighted lines.",
|
||||
"",
|
||||
'```tsx title="greeting.tsx" {4,7-9} showLineNumbers',
|
||||
"type GreetingProps = {",
|
||||
" name: string;",
|
||||
"};",
|
||||
"",
|
||||
"export function Greeting({ name }: GreetingProps) {",
|
||||
" return (",
|
||||
' <p className="text-lg">',
|
||||
" Hello, <strong>{name}</strong>!",
|
||||
" </p>",
|
||||
" );",
|
||||
"}",
|
||||
"```",
|
||||
"",
|
||||
"A supported language without metadata:",
|
||||
"",
|
||||
"```nix",
|
||||
"{ pkgs, ... }: {",
|
||||
" environment.systemPackages = [ pkgs.git ];",
|
||||
"}",
|
||||
"```",
|
||||
"",
|
||||
"An unknown language falls back to plain text:",
|
||||
"",
|
||||
"```made-up-language",
|
||||
"the syntax highlighter does not know this language",
|
||||
"```",
|
||||
"",
|
||||
"## Footnotes",
|
||||
"",
|
||||
"Markdown can keep supporting details out of the main flow.[^details] It can also reuse a longer note.[^long-note]",
|
||||
"",
|
||||
"[^details]: This is a short footnote.",
|
||||
"[^long-note]: This footnote contains enough text to demonstrate wrapping and the generated back-reference link.",
|
||||
].join("\n");
|
||||
|
||||
function MarkdownShowcase() {
|
||||
const [inputValue, setInputValue] = useState(
|
||||
'Hello **Markdown** :fire:\n\nTry the custom :methanium: emoji or type another `:shortcode:`. \n```ts\nconst stuff = "stuff";\n```',
|
||||
);
|
||||
const controllerRef = useRef<InputController | null>(null);
|
||||
|
||||
return (
|
||||
<EmojiProvider registry={emojiRegistry}>
|
||||
<div className="flex min-w-0 flex-col gap-3 min-w-0 rounded-lg border bg-muted/20 p-4">
|
||||
<p>Cool input box</p>
|
||||
<Input
|
||||
className="min-h-28 "
|
||||
value={inputValue}
|
||||
setValue={setInputValue}
|
||||
placeholder="Write Markdown or type :fire:"
|
||||
emojiFrequencies={{ ":methanium:": 20, ":fire:": 10 }}
|
||||
onControllerChange={(controller) => {
|
||||
controllerRef.current = controller;
|
||||
}}
|
||||
/>
|
||||
<p>And it's output</p>
|
||||
<Text value={inputValue} />
|
||||
</div>
|
||||
|
||||
<Markdown content={markdownContent} className="mx-auto max-w-4xl" />
|
||||
</EmojiProvider>
|
||||
);
|
||||
}
|
||||
|
||||
export { MarkdownShowcase };
|
||||
|
|
@ -16,6 +16,10 @@ export default defineConfig({
|
|||
find: /^@methanium\/ui\/index\.css$/,
|
||||
replacement: `${uiSrc}/index.css`,
|
||||
},
|
||||
{
|
||||
find: /^@methanium\/ui\/markdown$/,
|
||||
replacement: `${uiSrc}/markdown/index.ts`,
|
||||
},
|
||||
{ find: /^@methanium\/ui$/, replacement: `${uiSrc}/index.ts` },
|
||||
],
|
||||
dedupe: ["react", "react-dom"],
|
||||
|
|
@ -23,7 +27,7 @@ export default defineConfig({
|
|||
optimizeDeps: { exclude: ["@methanium/ui"] },
|
||||
server: { fs: { allow: [monorepoRoot] } },
|
||||
plugins: [
|
||||
methaniumUi({ defaultThemeId: "tensamin" }),
|
||||
methaniumUi({ defaultThemeId: "methanium" }),
|
||||
react(),
|
||||
tailwindcss(),
|
||||
],
|
||||
|
|
|
|||
27
flake.nix
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
description = "Methanium UI development environment";
|
||||
|
||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
|
||||
outputs = { nixpkgs, ... }:
|
||||
let
|
||||
forAllSystems = nixpkgs.lib.genAttrs [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
];
|
||||
in
|
||||
{
|
||||
devShells = forAllSystems (system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
in
|
||||
{
|
||||
electron = pkgs.mkShell {
|
||||
packages = with pkgs; [
|
||||
nodejs_24
|
||||
pnpm
|
||||
];
|
||||
};
|
||||
});
|
||||
};
|
||||
}
|
||||
60
package.json
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@methanium/ui",
|
||||
"version": "0.0.2",
|
||||
"version": "0.0.32",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
|
|
@ -8,6 +8,9 @@
|
|||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"sideEffects": [
|
||||
"./dist/index.css"
|
||||
],
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.ts",
|
||||
|
|
@ -15,6 +18,11 @@
|
|||
"import": "./dist/index.js",
|
||||
"default": "./dist/index.js"
|
||||
},
|
||||
"./markdown": {
|
||||
"types": "./dist/markdown/index.d.ts",
|
||||
"import": "./dist/markdown/index.js",
|
||||
"default": "./dist/markdown/index.js"
|
||||
},
|
||||
"./node": {
|
||||
"types": "./dist/node.d.ts",
|
||||
"import": "./dist/node.js",
|
||||
|
|
@ -31,32 +39,51 @@
|
|||
"build": "pnpm run build:js && pnpm run build:css && pnpm run build:assets",
|
||||
"build:js": "tsc -p tsconfig.build.json",
|
||||
"build:css": "tailwindcss -i ./src/index.css -o ./dist/index.css --minify",
|
||||
"build:assets": "rm -rf dist/theme/assets dist/files && mkdir -p dist/theme dist/files && cp -R src/theme/assets dist/theme/assets && cp node_modules/@fontsource-variable/public-sans/files/public-sans-*-wght-normal.woff2 dist/files/",
|
||||
"build:assets": "rm -rf dist/theme/assets dist/markdown/assets dist/fonts && mkdir -p dist/theme dist/markdown && cp -R src/theme/assets dist/theme/assets && cp -R src/markdown/assets dist/markdown/assets && cp -R src/fonts dist/fonts && cp -R node_modules/katex/dist/fonts/. dist/fonts/",
|
||||
"build:all": "pnpm run build && pnpm --filter @methanium/ui-showcase build",
|
||||
"build:showcase": "pnpm run build && pnpm --filter @methanium/ui-showcase build",
|
||||
"dev": "pnpm --filter @methanium/ui-showcase dev",
|
||||
"lint": "pnpm --filter @methanium/ui-showcase lint",
|
||||
"update:twemoji": "node scripts/update-twemoji.mjs",
|
||||
"prepack": "pnpm run build",
|
||||
"postpack": "node -e \"const fs=require('node:fs');const pkg=require('./package.json');const from=pkg.name.replace(/^@/,'').replace(/[\\\\/]/g,'-')+'-'+pkg.version+'.tgz';fs.renameSync(from,'methanium-ui.tgz')\"",
|
||||
"format": "pnpm exec prettier --write ."
|
||||
},
|
||||
"dependencies": {
|
||||
"@base-ui/react": "^1.6.0",
|
||||
"@fontsource-variable/public-sans": "^5.2.7",
|
||||
"@base-ui/react": "^1.7.0",
|
||||
"@codemirror/autocomplete": "^6.20.3",
|
||||
"@codemirror/commands": "^6.10.4",
|
||||
"@codemirror/lang-markdown": "^6.5.2",
|
||||
"@codemirror/language": "^6.12.4",
|
||||
"@codemirror/state": "^6.7.1",
|
||||
"@codemirror/view": "^6.43.8",
|
||||
"@shikijs/langs": "^4.4.2",
|
||||
"@tauri-apps/api": "^2.11.1",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.1.1",
|
||||
"embla-carousel-react": "^8.6.0",
|
||||
"emojibase-data": "^17.0.0",
|
||||
"hast-util-to-jsx-runtime": "^2.3.6",
|
||||
"input-otp": "^1.4.2",
|
||||
"lucide-react": "^1.21.0",
|
||||
"katex": "^0.18.3",
|
||||
"lucide-react": "^1.31.0",
|
||||
"next-themes": "^0.4.6",
|
||||
"react-resizable-panels": "^4.11.2",
|
||||
"recharts": "3.8.1",
|
||||
"shadcn": "^4.11.0",
|
||||
"sonner": "^2.0.7",
|
||||
"react-markdown": "^10.1.0",
|
||||
"react-resizable-panels": "^4.12.2",
|
||||
"recharts": "3.10.1",
|
||||
"rehype-autolink-headings": "^7.1.0",
|
||||
"rehype-katex": "^7.0.1",
|
||||
"rehype-slug": "^6.0.0",
|
||||
"remark-breaks": "^4.0.0",
|
||||
"remark-gfm": "^4.0.1",
|
||||
"remark-math": "^6.0.0",
|
||||
"shadcn": "^4.16.2",
|
||||
"shiki": "^4.4.2",
|
||||
"sonner": "^2.0.8",
|
||||
"tailwind-merge": "^3.6.0",
|
||||
"tw-animate-css": "^1.4.0",
|
||||
"unist-util-visit": "^5.1.0",
|
||||
"vaul": "^1.1.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
|
@ -64,11 +91,14 @@
|
|||
"react-dom": "^19.2.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/cli": "^4.3.1",
|
||||
"@types/node": "^26.0.0",
|
||||
"@types/react": "^19.2.17",
|
||||
"tailwindcss": "^4.3.1",
|
||||
"typescript": "^6.0.3",
|
||||
"vite": "^8.0.16"
|
||||
"@tailwindcss/cli": "^4.3.3",
|
||||
"@types/hast": "^3.0.5",
|
||||
"@types/mdast": "^4.0.4",
|
||||
"@types/node": "^26.2.0",
|
||||
"@types/react": "^19.2.18",
|
||||
"@types/react-dom": "^19.2.4",
|
||||
"tailwindcss": "^4.3.3",
|
||||
"typescript": "^7.0.2",
|
||||
"vite": "^8.2.1"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
3536
pnpm-lock.yaml
generated
|
|
@ -3,3 +3,4 @@ packages:
|
|||
|
||||
allowBuilds:
|
||||
"@parcel/watcher": false
|
||||
esbuild: true
|
||||
|
|
|
|||
3
renovate.json
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json"
|
||||
}
|
||||
108
scripts/update-twemoji.mjs
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
import { createHash } from "node:crypto";
|
||||
import {
|
||||
cp,
|
||||
mkdtemp,
|
||||
mkdir,
|
||||
readFile,
|
||||
readdir,
|
||||
rm,
|
||||
writeFile,
|
||||
} from "node:fs/promises";
|
||||
import { tmpdir } from "node:os";
|
||||
import { dirname, join, resolve } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { spawnSync } from "node:child_process";
|
||||
|
||||
const version = "17.0.3";
|
||||
const expectedSha256 =
|
||||
"a0855654b633045ae2337537e77f1bb4361162f7fcd910e613eaab1d6d9c5fca";
|
||||
const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
||||
const outputRoot = join(repositoryRoot, "src/markdown/assets/twemoji");
|
||||
const assetMapPath = join(repositoryRoot, "src/markdown/twemoji-assets.ts");
|
||||
const temporaryRoot = await mkdtemp(join(tmpdir(), "methanium-twemoji-"));
|
||||
|
||||
try {
|
||||
const archivePath = join(temporaryRoot, `twemoji-${version}.tar.gz`);
|
||||
const response = await fetch(
|
||||
`https://codeload.github.com/jdecked/twemoji/tar.gz/refs/tags/v${version}`,
|
||||
);
|
||||
if (!response.ok) {
|
||||
throw new Error(`Could not download Twemoji: ${response.status}`);
|
||||
}
|
||||
|
||||
const archive = Buffer.from(await response.arrayBuffer());
|
||||
const actualSha256 = createHash("sha256").update(archive).digest("hex");
|
||||
if (actualSha256 !== expectedSha256) {
|
||||
throw new Error(
|
||||
`Twemoji archive checksum mismatch: expected ${expectedSha256}, received ${actualSha256}`,
|
||||
);
|
||||
}
|
||||
await writeFile(archivePath, archive);
|
||||
|
||||
const extractedRoot = join(temporaryRoot, "extracted");
|
||||
await mkdir(extractedRoot);
|
||||
const extraction = spawnSync(
|
||||
"tar",
|
||||
["-xzf", archivePath, "-C", extractedRoot],
|
||||
{
|
||||
stdio: "inherit",
|
||||
},
|
||||
);
|
||||
if (extraction.status !== 0) throw new Error("Could not extract Twemoji");
|
||||
|
||||
const sourceRoot = join(extractedRoot, `twemoji-${version}`);
|
||||
await rm(outputRoot, { force: true, recursive: true });
|
||||
await mkdir(outputRoot, { recursive: true });
|
||||
await cp(join(sourceRoot, "assets/svg"), join(outputRoot, "svg"), {
|
||||
recursive: true,
|
||||
});
|
||||
await cp(join(sourceRoot, "LICENSE"), join(outputRoot, "LICENSE"));
|
||||
await cp(
|
||||
join(sourceRoot, "LICENSE-GRAPHICS"),
|
||||
join(outputRoot, "LICENSE-GRAPHICS"),
|
||||
);
|
||||
for (const licenseName of ["LICENSE", "LICENSE-GRAPHICS"]) {
|
||||
const licensePath = join(outputRoot, licenseName);
|
||||
const license = await readFile(licensePath, "utf8");
|
||||
await writeFile(licensePath, license.replace(/[\t ]+(?=\r?$)/gm, ""));
|
||||
}
|
||||
await writeFile(
|
||||
join(outputRoot, "ATTRIBUTION.md"),
|
||||
[
|
||||
"# Twemoji Attribution",
|
||||
"",
|
||||
`Twemoji ${version} graphics are provided by the Twemoji project:`,
|
||||
"https://github.com/jdecked/twemoji",
|
||||
"",
|
||||
"Copyright 2023 Twitter, Inc and other contributors.",
|
||||
"Graphics licensed under CC-BY 4.0.",
|
||||
"Code licensed under the MIT License.",
|
||||
"",
|
||||
].join("\n"),
|
||||
);
|
||||
|
||||
const files = (await readdir(join(outputRoot, "svg")))
|
||||
.filter((file) => file.endsWith(".svg"))
|
||||
.sort();
|
||||
const entries = files.map((file) => {
|
||||
const hexcode = file.slice(0, -4);
|
||||
return ` ${JSON.stringify(hexcode)}: new URL(${JSON.stringify(`./assets/twemoji/svg/${file}`)}, import.meta.url).href,`;
|
||||
});
|
||||
await writeFile(
|
||||
assetMapPath,
|
||||
[
|
||||
`// Generated by scripts/update-twemoji.mjs from Twemoji ${version}.`,
|
||||
"export const twemojiAssetUrls: Readonly<Record<string, string>> = {",
|
||||
...entries,
|
||||
"};",
|
||||
"",
|
||||
].join("\n"),
|
||||
);
|
||||
|
||||
const license = await readFile(join(outputRoot, "ATTRIBUTION.md"), "utf8");
|
||||
console.log(
|
||||
`Vendored ${files.length} Twemoji SVGs. ${license.split("\n")[0]}`,
|
||||
);
|
||||
} finally {
|
||||
await rm(temporaryRoot, { force: true, recursive: true });
|
||||
}
|
||||
|
|
@ -30,7 +30,7 @@ function AlertDialogOverlay({
|
|||
<AlertDialogPrimitive.Backdrop
|
||||
data-slot="alert-dialog-overlay"
|
||||
className={cn(
|
||||
"fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
||||
"fixed inset-0 isolate z-50 bg-black/50 duration-100 data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -52,7 +52,7 @@ function AlertDialogContent({
|
|||
data-slot="alert-dialog-content"
|
||||
data-size={size}
|
||||
className={cn(
|
||||
"group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
||||
"group/alert-dialog-content fixed top-[calc((100dvh+max(1rem,var(--ui-safe-area-top))-max(1rem,var(--ui-safe-area-bottom)))/2)] left-[calc((100%+max(1rem,var(--ui-safe-area-left))-max(1rem,var(--ui-safe-area-right)))/2)] z-50 grid w-[calc(100%-max(1rem,var(--ui-safe-area-left))-max(1rem,var(--ui-safe-area-right)))] max-h-[calc(100dvh-max(1rem,var(--ui-safe-area-top))-max(1rem,var(--ui-safe-area-bottom)))] -translate-x-1/2 -translate-y-1/2 gap-4 overflow-y-auto rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ function Card({
|
|||
data-slot="card"
|
||||
data-size={size}
|
||||
className={cn(
|
||||
"group/card flex flex-col gap-4 overflow-hidden rounded-xl border border-dotted bg-card/30 py-4 text-sm text-card-foreground has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",
|
||||
"group/card flex flex-col gap-4 overflow-hidden rounded-xl border bg-card py-4 text-sm text-card-foreground has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import * as React from "react";
|
|||
import { Combobox as ComboboxPrimitive } from "@base-ui/react";
|
||||
|
||||
import { cn } from "../lib/utils";
|
||||
import { useSafeAreaCollisionPadding } from "../hooks/use-safe-area";
|
||||
import { Button } from "./button";
|
||||
import {
|
||||
InputGroup,
|
||||
|
|
@ -89,12 +90,20 @@ function ComboboxContent({
|
|||
align = "start",
|
||||
alignOffset = 0,
|
||||
anchor,
|
||||
collisionPadding,
|
||||
...props
|
||||
}: ComboboxPrimitive.Popup.Props &
|
||||
Pick<
|
||||
ComboboxPrimitive.Positioner.Props,
|
||||
"side" | "align" | "sideOffset" | "alignOffset" | "anchor"
|
||||
| "side"
|
||||
| "align"
|
||||
| "sideOffset"
|
||||
| "alignOffset"
|
||||
| "anchor"
|
||||
| "collisionPadding"
|
||||
>) {
|
||||
const safeAreaCollisionPadding = useSafeAreaCollisionPadding();
|
||||
|
||||
return (
|
||||
<ComboboxPrimitive.Portal>
|
||||
<ComboboxPrimitive.Positioner
|
||||
|
|
@ -103,6 +112,7 @@ function ComboboxContent({
|
|||
align={align}
|
||||
alignOffset={alignOffset}
|
||||
anchor={anchor}
|
||||
collisionPadding={collisionPadding ?? safeAreaCollisionPadding}
|
||||
className="isolate z-50"
|
||||
>
|
||||
<ComboboxPrimitive.Popup
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ function CommandDialog({
|
|||
</DialogHeader>
|
||||
<DialogContent
|
||||
className={cn(
|
||||
"top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0",
|
||||
"top-[calc(var(--ui-safe-area-top)+(100dvh-var(--ui-safe-area-top)-var(--ui-safe-area-bottom))/3)] max-h-[calc((100dvh-var(--ui-safe-area-top)-var(--ui-safe-area-bottom))*2/3-1rem)] translate-y-0 overflow-hidden rounded-xl! p-0",
|
||||
className,
|
||||
)}
|
||||
showCloseButton={showCloseButton}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import * as React from "react";
|
|||
import { ContextMenu as ContextMenuPrimitive } from "@base-ui/react/context-menu";
|
||||
|
||||
import { cn } from "../lib/utils";
|
||||
import { useSafeAreaCollisionPadding } from "../hooks/use-safe-area";
|
||||
import { ChevronRightIcon, CheckIcon } from "lucide-react";
|
||||
|
||||
function ContextMenu({ ...props }: ContextMenuPrimitive.Root.Props) {
|
||||
|
|
@ -35,12 +36,15 @@ function ContextMenuContent({
|
|||
alignOffset = 4,
|
||||
side = "right",
|
||||
sideOffset = 0,
|
||||
collisionPadding,
|
||||
...props
|
||||
}: ContextMenuPrimitive.Popup.Props &
|
||||
Pick<
|
||||
ContextMenuPrimitive.Positioner.Props,
|
||||
"align" | "alignOffset" | "side" | "sideOffset"
|
||||
"align" | "alignOffset" | "side" | "sideOffset" | "collisionPadding"
|
||||
>) {
|
||||
const safeAreaCollisionPadding = useSafeAreaCollisionPadding();
|
||||
|
||||
return (
|
||||
<ContextMenuPrimitive.Portal>
|
||||
<ContextMenuPrimitive.Positioner
|
||||
|
|
@ -49,6 +53,7 @@ function ContextMenuContent({
|
|||
alignOffset={alignOffset}
|
||||
side={side}
|
||||
sideOffset={sideOffset}
|
||||
collisionPadding={collisionPadding ?? safeAreaCollisionPadding}
|
||||
>
|
||||
<ContextMenuPrimitive.Popup
|
||||
data-slot="context-menu-content"
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ function DialogOverlay({
|
|||
<DialogPrimitive.Backdrop
|
||||
data-slot="dialog-overlay"
|
||||
className={cn(
|
||||
"fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
||||
"fixed inset-0 isolate z-50 bg-black/50 duration-100 data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -53,7 +53,7 @@ function DialogContent({
|
|||
<DialogPrimitive.Popup
|
||||
data-slot="dialog-content"
|
||||
className={cn(
|
||||
"fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground border duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
||||
"fixed top-[calc((100dvh+max(1rem,var(--ui-safe-area-top))-max(1rem,var(--ui-safe-area-bottom)))/2)] left-[calc((100%+max(1rem,var(--ui-safe-area-left))-max(1rem,var(--ui-safe-area-right)))/2)] z-50 grid w-[calc(100%-max(1rem,var(--ui-safe-area-left))-max(1rem,var(--ui-safe-area-right)))] max-h-[calc(100dvh-max(1rem,var(--ui-safe-area-top))-max(1rem,var(--ui-safe-area-bottom)))] -translate-x-1/2 -translate-y-1/2 gap-4 overflow-y-auto rounded-xl bg-popover p-4 text-sm text-popover-foreground border duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ function DrawerOverlay({
|
|||
<DrawerPrimitive.Overlay
|
||||
data-slot="drawer-overlay"
|
||||
className={cn(
|
||||
"fixed inset-0 z-50 bg-black/10 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
||||
"fixed inset-0 z-50 bg-black/50 data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -56,7 +56,7 @@ function DrawerContent({
|
|||
<DrawerPrimitive.Content
|
||||
data-slot="drawer-content"
|
||||
className={cn(
|
||||
"group/drawer-content fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm",
|
||||
"group/drawer-content fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80dvh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=bottom]:pr-[var(--ui-safe-area-right)] data-[vaul-drawer-direction=bottom]:pb-[var(--ui-safe-area-bottom)] data-[vaul-drawer-direction=bottom]:pl-[var(--ui-safe-area-left)] data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:pt-[var(--ui-safe-area-top)] data-[vaul-drawer-direction=left]:pb-[var(--ui-safe-area-bottom)] data-[vaul-drawer-direction=left]:pl-[var(--ui-safe-area-left)] data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:pt-[var(--ui-safe-area-top)] data-[vaul-drawer-direction=right]:pr-[var(--ui-safe-area-right)] data-[vaul-drawer-direction=right]:pb-[var(--ui-safe-area-bottom)] data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80dvh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=top]:pt-[var(--ui-safe-area-top)] data-[vaul-drawer-direction=top]:pr-[var(--ui-safe-area-right)] data-[vaul-drawer-direction=top]:pl-[var(--ui-safe-area-left)] data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import * as React from "react";
|
|||
import { Menu as MenuPrimitive } from "@base-ui/react/menu";
|
||||
|
||||
import { cn } from "../lib/utils";
|
||||
import { useSafeAreaCollisionPadding } from "../hooks/use-safe-area";
|
||||
import { ChevronRightIcon, CheckIcon } from "lucide-react";
|
||||
|
||||
function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {
|
||||
|
|
@ -21,13 +22,16 @@ function DropdownMenuContent({
|
|||
alignOffset = 0,
|
||||
side = "bottom",
|
||||
sideOffset = 4,
|
||||
collisionPadding,
|
||||
className,
|
||||
...props
|
||||
}: MenuPrimitive.Popup.Props &
|
||||
Pick<
|
||||
MenuPrimitive.Positioner.Props,
|
||||
"align" | "alignOffset" | "side" | "sideOffset"
|
||||
"align" | "alignOffset" | "side" | "sideOffset" | "collisionPadding"
|
||||
>) {
|
||||
const safeAreaCollisionPadding = useSafeAreaCollisionPadding();
|
||||
|
||||
return (
|
||||
<MenuPrimitive.Portal>
|
||||
<MenuPrimitive.Positioner
|
||||
|
|
@ -36,6 +40,7 @@ function DropdownMenuContent({
|
|||
alignOffset={alignOffset}
|
||||
side={side}
|
||||
sideOffset={sideOffset}
|
||||
collisionPadding={collisionPadding ?? safeAreaCollisionPadding}
|
||||
>
|
||||
<MenuPrimitive.Popup
|
||||
data-slot="dropdown-menu-content"
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card";
|
||||
|
||||
import { cn } from "../lib/utils";
|
||||
import { useSafeAreaCollisionPadding } from "../hooks/use-safe-area";
|
||||
|
||||
function HoverCard({ ...props }: PreviewCardPrimitive.Root.Props) {
|
||||
return <PreviewCardPrimitive.Root data-slot="hover-card" {...props} />;
|
||||
|
|
@ -20,12 +21,15 @@ function HoverCardContent({
|
|||
sideOffset = 4,
|
||||
align = "center",
|
||||
alignOffset = 4,
|
||||
collisionPadding,
|
||||
...props
|
||||
}: PreviewCardPrimitive.Popup.Props &
|
||||
Pick<
|
||||
PreviewCardPrimitive.Positioner.Props,
|
||||
"align" | "alignOffset" | "side" | "sideOffset"
|
||||
"align" | "alignOffset" | "side" | "sideOffset" | "collisionPadding"
|
||||
>) {
|
||||
const safeAreaCollisionPadding = useSafeAreaCollisionPadding();
|
||||
|
||||
return (
|
||||
<PreviewCardPrimitive.Portal data-slot="hover-card-portal">
|
||||
<PreviewCardPrimitive.Positioner
|
||||
|
|
@ -33,6 +37,7 @@ function HoverCardContent({
|
|||
alignOffset={alignOffset}
|
||||
side={side}
|
||||
sideOffset={sideOffset}
|
||||
collisionPadding={collisionPadding ?? safeAreaCollisionPadding}
|
||||
className="isolate z-50"
|
||||
>
|
||||
<PreviewCardPrimitive.Popup
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { NavigationMenu as NavigationMenuPrimitive } from "@base-ui/react/naviga
|
|||
import { cva } from "class-variance-authority";
|
||||
|
||||
import { cn } from "../lib/utils";
|
||||
import { useSafeAreaCollisionPadding } from "../hooks/use-safe-area";
|
||||
import { ChevronDownIcon } from "lucide-react";
|
||||
|
||||
function NavigationMenu({
|
||||
|
|
@ -101,8 +102,11 @@ function NavigationMenuPositioner({
|
|||
sideOffset = 8,
|
||||
align = "start",
|
||||
alignOffset = 0,
|
||||
collisionPadding,
|
||||
...props
|
||||
}: NavigationMenuPrimitive.Positioner.Props) {
|
||||
const safeAreaCollisionPadding = useSafeAreaCollisionPadding();
|
||||
|
||||
return (
|
||||
<NavigationMenuPrimitive.Portal>
|
||||
<NavigationMenuPrimitive.Positioner
|
||||
|
|
@ -110,6 +114,7 @@ function NavigationMenuPositioner({
|
|||
sideOffset={sideOffset}
|
||||
align={align}
|
||||
alignOffset={alignOffset}
|
||||
collisionPadding={collisionPadding ?? safeAreaCollisionPadding}
|
||||
className={cn(
|
||||
"isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0",
|
||||
className,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import {
|
|||
createContext,
|
||||
useCallback,
|
||||
useContext,
|
||||
useEffect,
|
||||
useLayoutEffect,
|
||||
useState,
|
||||
type ReactNode,
|
||||
|
|
@ -94,13 +93,6 @@ function OnboardingFlow({
|
|||
}
|
||||
}, [controls, onFinish, pending, showStep, stepIndex, steps.length]);
|
||||
|
||||
useEffect(() => {
|
||||
const heading = document.querySelector<HTMLElement>(
|
||||
`[data-onboarding-step="${activeStep.id}"] [data-onboarding-title]`,
|
||||
);
|
||||
heading?.focus();
|
||||
}, [activeStep.id]);
|
||||
|
||||
return (
|
||||
<CreateScreen className="h-full w-full items-stretch justify-stretch">
|
||||
<div className="flex h-full min-h-0 w-full flex-col">
|
||||
|
|
@ -114,7 +106,6 @@ function OnboardingFlow({
|
|||
<h1
|
||||
data-onboarding-title
|
||||
className="font-heading text-3xl font-bold md:text-4xl"
|
||||
tabIndex={-1}
|
||||
>
|
||||
{activeStep.title}
|
||||
</h1>
|
||||
|
|
@ -132,7 +123,7 @@ function OnboardingFlow({
|
|||
</ConfigureStepContext.Provider>
|
||||
</main>
|
||||
|
||||
<footer className="shrink-0 px-6 pt-4 pb-[max(1.5rem,env(safe-area-inset-bottom))] md:px-10">
|
||||
<footer className="shrink-0 px-6 pt-4 pb-6 md:px-10">
|
||||
<div className="flex justify-center md:justify-end">
|
||||
<Button
|
||||
size="lg"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import * as React from "react";
|
|||
import { Popover as PopoverPrimitive } from "@base-ui/react/popover";
|
||||
|
||||
import { cn } from "../lib/utils";
|
||||
import { useSafeAreaCollisionPadding } from "../hooks/use-safe-area";
|
||||
|
||||
function Popover({ ...props }: PopoverPrimitive.Root.Props) {
|
||||
return <PopoverPrimitive.Root data-slot="popover" {...props} />;
|
||||
|
|
@ -17,15 +18,18 @@ function PopoverContent({
|
|||
alignOffset = 0,
|
||||
side = "bottom",
|
||||
sideOffset = 4,
|
||||
collisionPadding,
|
||||
portalProps,
|
||||
...props
|
||||
}: PopoverPrimitive.Popup.Props &
|
||||
Pick<
|
||||
PopoverPrimitive.Positioner.Props,
|
||||
"align" | "alignOffset" | "side" | "sideOffset"
|
||||
"align" | "alignOffset" | "side" | "sideOffset" | "collisionPadding"
|
||||
> & {
|
||||
portalProps?: PopoverPrimitive.Portal.Props;
|
||||
}) {
|
||||
const safeAreaCollisionPadding = useSafeAreaCollisionPadding();
|
||||
|
||||
return (
|
||||
<PopoverPrimitive.Portal {...portalProps}>
|
||||
<PopoverPrimitive.Positioner
|
||||
|
|
@ -33,6 +37,7 @@ function PopoverContent({
|
|||
alignOffset={alignOffset}
|
||||
side={side}
|
||||
sideOffset={sideOffset}
|
||||
collisionPadding={collisionPadding ?? safeAreaCollisionPadding}
|
||||
className="isolate z-50"
|
||||
>
|
||||
<PopoverPrimitive.Popup
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import * as React from "react";
|
|||
import { Select as SelectPrimitive } from "@base-ui/react/select";
|
||||
|
||||
import { cn } from "../lib/utils";
|
||||
import { useSafeAreaCollisionPadding } from "../hooks/use-safe-area";
|
||||
import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react";
|
||||
|
||||
const Select = SelectPrimitive.Root;
|
||||
|
|
@ -64,12 +65,20 @@ function SelectContent({
|
|||
align = "center",
|
||||
alignOffset = 0,
|
||||
alignItemWithTrigger = true,
|
||||
collisionPadding,
|
||||
...props
|
||||
}: SelectPrimitive.Popup.Props &
|
||||
Pick<
|
||||
SelectPrimitive.Positioner.Props,
|
||||
"align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger"
|
||||
| "align"
|
||||
| "alignOffset"
|
||||
| "side"
|
||||
| "sideOffset"
|
||||
| "alignItemWithTrigger"
|
||||
| "collisionPadding"
|
||||
>) {
|
||||
const safeAreaCollisionPadding = useSafeAreaCollisionPadding();
|
||||
|
||||
return (
|
||||
<SelectPrimitive.Portal>
|
||||
<SelectPrimitive.Positioner
|
||||
|
|
@ -78,6 +87,7 @@ function SelectContent({
|
|||
align={align}
|
||||
alignOffset={alignOffset}
|
||||
alignItemWithTrigger={alignItemWithTrigger}
|
||||
collisionPadding={collisionPadding ?? safeAreaCollisionPadding}
|
||||
className="isolate z-50"
|
||||
>
|
||||
<SelectPrimitive.Popup
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ function SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) {
|
|||
<SheetPrimitive.Backdrop
|
||||
data-slot="sheet-overlay"
|
||||
className={cn(
|
||||
"fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",
|
||||
"fixed inset-0 z-50 bg-black/50 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -53,7 +53,7 @@ function SheetContent({
|
|||
data-slot="sheet-content"
|
||||
data-side={side}
|
||||
className={cn(
|
||||
"fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",
|
||||
"group/sheet-content fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:pr-[var(--ui-safe-area-right)] data-[side=bottom]:pb-[var(--ui-safe-area-bottom)] data-[side=bottom]:pl-[var(--ui-safe-area-left)] data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:pt-[var(--ui-safe-area-top)] data-[side=left]:pb-[var(--ui-safe-area-bottom)] data-[side=left]:pl-[var(--ui-safe-area-left)] data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:pt-[var(--ui-safe-area-top)] data-[side=right]:pr-[var(--ui-safe-area-right)] data-[side=right]:pb-[var(--ui-safe-area-bottom)] data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:pt-[var(--ui-safe-area-top)] data-[side=top]:pr-[var(--ui-safe-area-right)] data-[side=top]:pl-[var(--ui-safe-area-left)] data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -65,7 +65,7 @@ function SheetContent({
|
|||
render={
|
||||
<Button
|
||||
variant="ghost"
|
||||
className="absolute top-3 right-3"
|
||||
className="absolute top-3 right-3 group-data-[side=bottom]/sheet-content:right-[max(0.75rem,var(--ui-safe-area-right))] group-data-[side=left]/sheet-content:top-[max(0.75rem,var(--ui-safe-area-top))] group-data-[side=right]/sheet-content:top-[max(0.75rem,var(--ui-safe-area-top))] group-data-[side=right]/sheet-content:right-[max(0.75rem,var(--ui-safe-area-right))] group-data-[side=top]/sheet-content:top-[max(0.75rem,var(--ui-safe-area-top))] group-data-[side=top]/sheet-content:right-[max(0.75rem,var(--ui-safe-area-right))]"
|
||||
size="icon-sm"
|
||||
/>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -215,10 +215,10 @@ function Sidebar({
|
|||
data-side={side}
|
||||
style={{ width: SIDEBAR_WIDTH }}
|
||||
className={cn(
|
||||
"fixed inset-y-0 z-10 hidden h-svh transition-[left,right,width,transform] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:-translate-x-full data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:translate-x-full md:flex",
|
||||
"fixed inset-y-0 z-10 hidden h-svh pt-[var(--ui-safe-area-top)] pb-[var(--ui-safe-area-bottom)] transition-[left,right,width,transform] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:pl-[var(--ui-safe-area-left)] data-[side=left]:group-data-[collapsible=offcanvas]:-translate-x-full data-[side=right]:right-0 data-[side=right]:pr-[var(--ui-safe-area-right)] data-[side=right]:group-data-[collapsible=offcanvas]:translate-x-full md:flex",
|
||||
// Adjust the padding for floating and inset variants.
|
||||
variant === "floating" || variant === "inset"
|
||||
? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]"
|
||||
? "pt-[max(0.5rem,var(--ui-safe-area-top))] pr-2 pb-[max(0.5rem,var(--ui-safe-area-bottom))] pl-2 data-[side=left]:pl-[max(0.5rem,var(--ui-safe-area-left))] data-[side=right]:pr-[max(0.5rem,var(--ui-safe-area-right))] group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]"
|
||||
: "group-data-[collapsible=icon]:w-(--sidebar-width-icon)",
|
||||
className,
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,18 @@ const Toaster = ({ ...props }: ToasterProps) => {
|
|||
<Sonner
|
||||
theme={theme as ToasterProps["theme"]}
|
||||
className="toaster group"
|
||||
offset={{
|
||||
top: "max(1rem, var(--ui-safe-area-top))",
|
||||
right: "max(1rem, var(--ui-safe-area-right))",
|
||||
bottom: "max(1rem, var(--ui-safe-area-bottom))",
|
||||
left: "max(1rem, var(--ui-safe-area-left))",
|
||||
}}
|
||||
mobileOffset={{
|
||||
top: "max(1rem, var(--ui-safe-area-top))",
|
||||
right: "max(1rem, var(--ui-safe-area-right), var(--ui-safe-area-left))",
|
||||
bottom: "max(1rem, var(--ui-safe-area-bottom))",
|
||||
left: "max(1rem, var(--ui-safe-area-right), var(--ui-safe-area-left))",
|
||||
}}
|
||||
icons={{
|
||||
success: <CircleCheckIcon className="size-4" />,
|
||||
info: <InfoIcon className="size-4" />,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ function Spinner({ className, ...props }: React.ComponentProps<"svg">) {
|
|||
<Loader2Icon
|
||||
role="status"
|
||||
aria-label="Loading"
|
||||
className={cn("size-4 animate-spin", className)}
|
||||
className={cn("size-4 animate-spin!", className)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
|
|||
import type { ReactElement, ReactNode } from "react";
|
||||
|
||||
import { cn } from "../lib/utils";
|
||||
import { useSafeAreaCollisionPadding } from "../hooks/use-safe-area";
|
||||
|
||||
function TooltipProvider({
|
||||
delay = 0,
|
||||
|
|
@ -31,15 +32,18 @@ function TooltipContent({
|
|||
align = "center",
|
||||
alignOffset = 0,
|
||||
children,
|
||||
collisionPadding,
|
||||
portalProps,
|
||||
...props
|
||||
}: TooltipPrimitive.Popup.Props &
|
||||
Pick<
|
||||
TooltipPrimitive.Positioner.Props,
|
||||
"align" | "alignOffset" | "side" | "sideOffset"
|
||||
"align" | "alignOffset" | "side" | "sideOffset" | "collisionPadding"
|
||||
> & {
|
||||
portalProps?: TooltipPrimitive.Portal.Props;
|
||||
}) {
|
||||
const safeAreaCollisionPadding = useSafeAreaCollisionPadding();
|
||||
|
||||
return (
|
||||
<TooltipPrimitive.Portal {...portalProps}>
|
||||
<TooltipPrimitive.Positioner
|
||||
|
|
@ -47,12 +51,13 @@ function TooltipContent({
|
|||
alignOffset={alignOffset}
|
||||
side={side}
|
||||
sideOffset={sideOffset}
|
||||
collisionPadding={collisionPadding ?? safeAreaCollisionPadding}
|
||||
className="isolate z-50"
|
||||
>
|
||||
<TooltipPrimitive.Popup
|
||||
data-slot="tooltip-content"
|
||||
className={cn(
|
||||
"z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
||||
"z-50 hidden w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 sm:inline-flex data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
93
src/fonts/inter/LICENSE.txt
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) Inter-Italic[opsz,wght].ttf: Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
BIN
src/fonts/inter/inter-latin-wght-normal.woff2
Normal file
93
src/fonts/jetbrains-mono/LICENSE.txt
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) JetBrainsMono-Italic[wght].ttf: Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
BIN
src/fonts/jetbrains-mono/jetbrains-mono-latin-wght-normal.woff2
Normal file
93
src/fonts/public-sans/LICENSE.txt
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
Copyright 2015 The Public Sans Project Authors (https://github.com/uswds/public-sans) PublicSans-Italic[wght].ttf: Copyright 2015 The Public Sans Project Authors (https://github.com/uswds/public-sans)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
BIN
src/fonts/public-sans/public-sans-latin-wght-normal.woff2
Normal file
93
src/fonts/source-serif-4/LICENSE.txt
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
Google Inc.
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
BIN
src/fonts/source-serif-4/source-serif-4-latin-wght-normal.woff2
Normal file
40
src/hooks/use-safe-area.ts
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import * as React from "react";
|
||||
|
||||
const properties = [
|
||||
"--ui-safe-area-top",
|
||||
"--ui-safe-area-right",
|
||||
"--ui-safe-area-bottom",
|
||||
"--ui-safe-area-left",
|
||||
] as const;
|
||||
|
||||
function getSnapshot() {
|
||||
const styles = getComputedStyle(document.documentElement);
|
||||
return properties
|
||||
.map((property) => styles.getPropertyValue(property))
|
||||
.join(",");
|
||||
}
|
||||
|
||||
function subscribe(onChange: () => void) {
|
||||
window.addEventListener("resize", onChange);
|
||||
window.addEventListener("orientationchange", onChange);
|
||||
window.visualViewport?.addEventListener("resize", onChange);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener("resize", onChange);
|
||||
window.removeEventListener("orientationchange", onChange);
|
||||
window.visualViewport?.removeEventListener("resize", onChange);
|
||||
};
|
||||
}
|
||||
|
||||
export function useSafeAreaCollisionPadding() {
|
||||
const snapshot = React.useSyncExternalStore(
|
||||
subscribe,
|
||||
getSnapshot,
|
||||
() => "0,0,0,0",
|
||||
);
|
||||
const [top, right, bottom, left] = snapshot
|
||||
.split(",")
|
||||
.map((value) => Math.max(5, Number.parseFloat(value) || 0));
|
||||
|
||||
return { top, right, bottom, left };
|
||||
}
|
||||
|
|
@ -1,13 +1,50 @@
|
|||
@import "tailwindcss";
|
||||
@import "tw-animate-css";
|
||||
@import "shadcn/tailwind.css";
|
||||
@import "@fontsource-variable/public-sans/wght.css";
|
||||
@import "./markdown/index.css";
|
||||
|
||||
@font-face {
|
||||
font-family: "Public Sans";
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
font-weight: 100 900;
|
||||
src: url("./fonts/public-sans/public-sans-latin-wght-normal.woff2")
|
||||
format("woff2-variations");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Inter";
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
font-weight: 100 900;
|
||||
src: url("./fonts/inter/inter-latin-wght-normal.woff2")
|
||||
format("woff2-variations");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Source Serif 4";
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
font-weight: 200 900;
|
||||
src: url("./fonts/source-serif-4/source-serif-4-latin-wght-normal.woff2")
|
||||
format("woff2-variations");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "JetBrains Mono";
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
font-weight: 100 800;
|
||||
src: url("./fonts/jetbrains-mono/jetbrains-mono-latin-wght-normal.woff2")
|
||||
format("woff2-variations");
|
||||
}
|
||||
|
||||
@custom-variant dark (&:is(.dark *));
|
||||
|
||||
@theme inline {
|
||||
--font-heading: var(--font-sans), sans-serif;
|
||||
--font-sans: "Public Sans Variable", system-ui, sans-serif;
|
||||
--font-mono: "JetBrains Mono", ui-monospace, monospace;
|
||||
--font-sans: "Public Sans", system-ui, sans-serif;
|
||||
--color-sidebar-ring: var(--sidebar-ring);
|
||||
--color-sidebar-border: var(--sidebar-border);
|
||||
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
||||
|
|
@ -51,10 +88,13 @@
|
|||
}
|
||||
|
||||
:root {
|
||||
--ui-safe-area-top: env(safe-area-inset-top, 0px);
|
||||
--ui-safe-area-right: env(safe-area-inset-right, 0px);
|
||||
--ui-safe-area-bottom: env(safe-area-inset-bottom, 0px);
|
||||
--ui-safe-area-left: env(safe-area-inset-left, 0px);
|
||||
--ui-density: 1;
|
||||
--ui-border-width: 1px;
|
||||
--ui-shadow-strength: 0;
|
||||
--ui-surface-contrast: 0;
|
||||
--ui-font-scale: 1;
|
||||
--ui-heading-weight: 600;
|
||||
--ui-motion: 1;
|
||||
|
|
@ -133,6 +173,10 @@
|
|||
@apply border-border outline-ring/50;
|
||||
}
|
||||
|
||||
:where(button, [role="button"]) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
:where(
|
||||
button,
|
||||
a,
|
||||
|
|
@ -167,7 +211,6 @@
|
|||
[tabindex]:not([tabindex="-1"])
|
||||
):focus-visible {
|
||||
outline: none !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
:where(
|
||||
|
|
@ -201,7 +244,7 @@
|
|||
@apply bg-background text-foreground;
|
||||
}
|
||||
html {
|
||||
@apply font-sans;
|
||||
font-family: var(--font-sans);
|
||||
font-size: calc(16px * var(--ui-font-scale));
|
||||
}
|
||||
|
||||
|
|
@ -209,6 +252,18 @@
|
|||
--font-sans:
|
||||
system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||||
}
|
||||
|
||||
html[data-font="inter"] {
|
||||
--font-sans: "Inter", system-ui, sans-serif;
|
||||
}
|
||||
|
||||
html[data-font="source-serif-4"] {
|
||||
--font-sans: "Source Serif 4", Georgia, serif;
|
||||
}
|
||||
|
||||
html[data-font="jetbrains-mono"] {
|
||||
--font-sans: "JetBrains Mono", ui-monospace, monospace;
|
||||
}
|
||||
}
|
||||
|
||||
:where(
|
||||
|
|
@ -248,11 +303,6 @@
|
|||
padding: calc(0.625rem * var(--ui-density)) calc(0.75rem * var(--ui-density));
|
||||
}
|
||||
[data-slot="card"] {
|
||||
background: color-mix(
|
||||
in oklch,
|
||||
var(--card),
|
||||
var(--foreground) calc(var(--ui-surface-contrast) * 1%)
|
||||
);
|
||||
box-shadow: 0 calc(0.4rem * var(--ui-shadow-strength))
|
||||
calc(1.8rem * var(--ui-shadow-strength))
|
||||
rgb(0 0 0 / calc(0.12 * var(--ui-shadow-strength)));
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ export { toast } from "sonner";
|
|||
export * from "./theme";
|
||||
export * from "./screens/util";
|
||||
export * from "./hooks/use-mobile";
|
||||
export * from "./hooks/use-safe-area";
|
||||
export * from "./lib/utils";
|
||||
|
||||
export * from "./cmp/accordion";
|
||||
|
|
@ -41,6 +42,13 @@ export * from "./cmp/item";
|
|||
export * from "./cmp/kbd";
|
||||
export * from "./cmp/label";
|
||||
export * from "./cmp/menubar";
|
||||
export { Markdown } from "./markdown";
|
||||
export type {
|
||||
MarkdownComponents,
|
||||
MarkdownProps,
|
||||
MarkdownTheme,
|
||||
MarkdownVariant,
|
||||
} from "./markdown";
|
||||
export * from "./cmp/native-select";
|
||||
export * from "./cmp/navigation-menu";
|
||||
export * from "./cmp/onboarding-flow";
|
||||
|
|
|
|||
8
src/markdown/assets/twemoji/ATTRIBUTION.md
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# Twemoji Attribution
|
||||
|
||||
Twemoji 17.0.3 graphics are provided by the Twemoji project:
|
||||
https://github.com/jdecked/twemoji
|
||||
|
||||
Copyright 2023 Twitter, Inc and other contributors.
|
||||
Graphics licensed under CC-BY 4.0.
|
||||
Code licensed under the MIT License.
|
||||
22
src/markdown/assets/twemoji/LICENSE
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2022–present Jason Sofonia & Justine De Caires
|
||||
Copyright (c) 2014–2021 Twitter
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
393
src/markdown/assets/twemoji/LICENSE-GRAPHICS
Normal file
|
|
@ -0,0 +1,393 @@
|
|||
Attribution 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More_considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution 4.0 International Public License ("Public License"). To the
|
||||
extent this Public License may be interpreted as a contract, You are
|
||||
granted the Licensed Rights in consideration of Your acceptance of
|
||||
these terms and conditions, and the Licensor grants You such rights in
|
||||
consideration of benefits the Licensor receives from making the
|
||||
Licensed Material available under these terms and conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
d. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
e. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
f. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
g. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
h. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
i. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
j. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
k. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
4. If You Share Adapted Material You produce, the Adapter's
|
||||
License You apply must not prevent recipients of the Adapted
|
||||
Material from complying with this Public License.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public licenses.
|
||||
Notwithstanding, Creative Commons may elect to apply one of its public
|
||||
licenses to material it publishes and in those instances will be
|
||||
considered the "Licensor." Except for the limited purpose of indicating
|
||||
that material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the public
|
||||
licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
1
src/markdown/assets/twemoji/svg/1f004.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E6E7E8" d="M32 32c0 2.209-1.791 4-4 4H8c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h20c2.209 0 4 1.791 4 4v28z"/><path fill="#BE1931" d="M8.397 11.891c.53 0 .996.078 1.392.232.244.066.453.143.63.231.796-.044 1.612-.122 2.453-.231 1.104-.134 2.463-.297 4.076-.497V9.307c0-1.613-.188-2.948-.563-4.01-.155-.332-.233-.552-.233-.662 0-.331.133-.498.398-.498.706 0 1.359.089 1.954.266.686.198 1.028.453 1.028.761 0 .111-.042.342-.134.696-.265.685-.395 1.955-.395 3.811v1.723c1.299-.132 2.723-.276 4.271-.43.706-.045 1.381-.166 2.023-.366.463-.088.739-.132.83-.132.264 0 .837.222 1.72.662.928.553 1.394.984 1.394 1.293 0 .242-.12.486-.362.729-.819.881-1.408 1.809-1.759 2.782l-.798 1.691c-.13.329-.276.583-.426.76l.128.067c.508.311.761.586.761.829 0 .198-.183.309-.56.332-1.699 0-3.236.088-4.606.266l-2.614.196-.034 4.442c0 2.009-.069 3.62-.198 4.838-.133 1.368-.333 2.341-.598 2.914-.245.488-.445.733-.598.733-.089 0-.232-.266-.431-.798-.132-.617-.198-1.687-.198-3.214v-8.749l-1.789.167c-1.194.111-2.111.168-2.75.168-.266 0-.488-.024-.664-.069-.044.2-.11.376-.198.533-.133.287-.277.43-.432.43-.198 0-.385-.154-.562-.465-.287-.438-.442-.892-.464-1.358l-.398-2.585c-.155-1.348-.332-2.286-.531-2.818-.111-.551-.409-1.081-.894-1.59-.177-.11-.266-.186-.266-.23 0-.354.133-.531.397-.531zm3.347 7.221c1.812-.085 3.545-.196 5.203-.328v-6.132c-1.702.199-3.347.464-4.937.796-.31.111-.597.188-.862.232 0 .265.022.53.067.793.265 2.013.441 3.561.529 4.639zm7.259-6.69v6.163c.728-.087 1.435-.179 2.119-.265 1.326-.178 2.286-.286 2.879-.331.048-.11.103-.232.168-.363.199-.641.463-1.646.798-3.016.264-1.084.394-1.768.394-2.056 0-.353-.339-.529-1.024-.529-1.041 0-2.696.121-4.973.363-.13-.001-.254.012-.361.034z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
1
src/markdown/assets/twemoji/svg/1f0cf.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E6E7E8" d="M32 32c0 2.209-1.791 4-4 4H8c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h20c2.209 0 4 1.791 4 4v28z"/><path fill="#DD2E44" d="M11 7c-2.519 0-4.583 1.87-4.929 4.293C6.802 10.503 7.839 10 9 10c2.209 0 4 1.791 4 4 0 2 1.497 2.198.707 2.929C16.13 16.583 16 14.519 16 12c0-2.761-2.239-5-5-5z"/><path fill="#55ACEE" d="M23 14c0-2.209 1.791-4 4-4 1.161 0 2.198.503 2.929 1.293C29.583 8.87 27.52 7 25 7c-2.762 0-5 2.239-5 5 0 2.519-.131 4.583 2.293 4.929C21.503 16.198 23 16 23 14z"/><path fill="#FFAC33" d="M14 12c0-4.971 4-9 4-9s4 4.029 4 9-1.791 9-4 9-4-4.029-4-9z"/><path fill="#553788" d="M11.707 21.071C12.497 21.802 13 22.839 13 24c0 2.209-1.791 4-4 4-1.161 0-2.198-.503-2.929-1.293C6.417 29.131 8.481 31 11 31c2.761 0 5-2.238 5-5 0-2.52-1.87-4.583-4.293-4.929zM27 28c-2.209 0-4-1.791-4-4 0-1.161.503-2.198 1.293-2.929C21.869 21.417 20 23.48 20 26c0 2.762 2.238 5 5 5 2.52 0 4.583-1.869 4.929-4.293C29.198 27.497 28.161 28 27 28z"/><path fill="#9266CC" d="M14 24c0 4.971 3 9 4 9s4-4.029 4-9c0-.874-.055-1.719-.159-2.519C21.357 17.737 19.82 15 18 15c-1.82 0-3.357 2.737-3.841 6.481-.104.8-.159 1.645-.159 2.519z"/><path fill="#EDBB9F" d="M13 17c0-3.866 3-4 5-4s5 .134 5 4c0 3.865-2.238 7-5 7-2.761 0-5-3.135-5-7z"/><circle fill="#662113" cx="16" cy="17" r="1"/><circle fill="#662113" cx="20" cy="17" r="1"/><path fill="#662113" d="M18 22c1.104 0 2-.896 2-2h-4c0 1.104.896 2 2 2z"/><circle fill="#A0041E" cx="6" cy="11" r="1"/><circle fill="#269" cx="30" cy="11" r="1"/><circle fill="#DD2E44" cx="18" cy="3" r="1"/></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
1
src/markdown/assets/twemoji/svg/1f170.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#FFF" d="M14.747 9.125c.527-1.426 1.736-2.573 3.317-2.573 1.643 0 2.792 1.085 3.318 2.573l6.077 16.867c.186.496.248.931.248 1.147 0 1.209-.992 2.046-2.139 2.046-1.303 0-1.954-.682-2.264-1.611l-.931-2.915h-8.62l-.93 2.884c-.31.961-.961 1.642-2.232 1.642-1.24 0-2.294-.93-2.294-2.17 0-.496.155-.868.217-1.023l6.233-16.867zm.34 11.256h5.891l-2.883-8.992h-.062l-2.946 8.992z"/></svg>
|
||||
|
After Width: | Height: | Size: 576 B |
1
src/markdown/assets/twemoji/svg/1f171.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#FFF" d="M10.498 9.249c0-1.488 1.023-2.325 2.449-2.325H18.9c3.224 0 5.83 2.17 5.83 5.457 0 2.17-.9 3.628-2.885 4.558v.062c2.637.372 4.713 2.573 4.713 5.271 0 4.372-2.914 6.729-7.193 6.729h-6.386c-1.427 0-2.481-.899-2.481-2.356V9.249zm4.651 6.418h2.419c1.519 0 2.511-.899 2.511-2.45 0-1.457-1.147-2.201-2.511-2.201h-2.419v4.651zm0 9.24h3.659c1.674 0 2.915-.961 2.915-2.697 0-1.458-1.117-2.45-3.287-2.45h-3.287v5.147z"/></svg>
|
||||
|
After Width: | Height: | Size: 621 B |
1
src/markdown/assets/twemoji/svg/1f17e.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#FFF" d="M6.993 18.001c0-6.656 4.48-11.776 11.007-11.776 6.432 0 11.008 5.28 11.008 11.776 0 6.623-4.449 11.774-11.008 11.774-6.496 0-11.007-5.151-11.007-11.774zm17.023 0c0-3.872-2.016-7.36-6.016-7.36s-6.015 3.488-6.015 7.36c0 3.903 1.952 7.359 6.015 7.359 4.065 0 6.016-3.456 6.016-7.359z"/></svg>
|
||||
|
After Width: | Height: | Size: 495 B |
1
src/markdown/assets/twemoji/svg/1f17f.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#269" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#FFF" d="M11 9.496C11 7.992 11.896 7 13.496 7h5.665c4.703 0 8.191 2.944 8.191 7.52 0 4.67-3.617 7.48-8 7.48H16v5.479c0 1.6-1.024 2.496-2.4 2.496s-2.6-.897-2.6-2.496V9.496zM16 18h3.062c2.018 0 3.297-1.465 3.297-3.385 0-1.92-1.279-3.392-3.297-3.392H16V18z"/></svg>
|
||||
|
After Width: | Height: | Size: 456 B |
1
src/markdown/assets/twemoji/svg/1f18e.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#FFF" d="M7.15 10.072c.476-1.288 1.567-2.324 2.996-2.324 1.483 0 2.52.979 2.996 2.324l5.488 15.231c.168.448.224.84.224 1.036 0 1.092-.896 1.848-1.932 1.848-1.177 0-1.765-.616-2.044-1.456L14 24H6.28l-.866 2.703c-.28.868-.868 1.484-2.016 1.484-1.12 0-2.072-.84-2.072-1.96 0-.448.14-.784.196-.924L7.15 10.072zm.308 10.163h5.32l-2.604-8.119h-.056l-2.66 8.119zM20 10.1c0-1.344.924-2.1 2.212-2.1h5.376c2.912 0 5.265 1.96 5.265 4.928 0 1.96-.812 3.276-2.605 4.116v.056c2.38.336 4.256 2.424 4.256 4.859 0 3.948-2.632 6.041-6.496 6.041H22.24c-1.288 0-2.24-.876-2.24-2.192V10.1zm4.2 5.9h2.184c1.372 0 2.268-.815 2.268-2.216 0-1.315-1.036-2.088-2.268-2.088H24.2V16zm0 8h3.304c1.513 0 2.632-.729 2.632-2.296 0-1.315-1.008-2.112-2.968-2.112H24.2V24z"/></svg>
|
||||
|
After Width: | Height: | Size: 942 B |
1
src/markdown/assets/twemoji/svg/1f191.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path d="M12.81 6.552c2.263 0 6.667.744 6.667 3.473 0 1.116-.776 2.077-1.923 2.077-1.271 0-2.139-1.085-4.744-1.085-3.845 0-5.829 3.256-5.829 7.038 0 3.689 2.015 6.852 5.829 6.852 2.605 0 3.658-1.302 4.93-1.302 1.395 0 2.046 1.395 2.046 2.107 0 2.977-4.682 3.659-6.976 3.659-6.294 0-10.666-4.992-10.666-11.41 0-6.448 4.341-11.409 10.666-11.409zm8.522 2.604c0-1.55.992-2.418 2.326-2.418s2.326.868 2.326 2.418V24.72h5.518c1.582 0 2.264 1.179 2.232 2.232-.06 1.025-.867 2.048-2.232 2.048h-7.75c-1.52 0-2.42-.992-2.42-2.543V9.156z" fill="#FFF"/></svg>
|
||||
|
After Width: | Height: | Size: 731 B |
1
src/markdown/assets/twemoji/svg/1f192.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><g fill="#FFF"><path d="M5.97 12.858c1.022 0 3.012.336 3.012 1.569 0 .504-.35.939-.869.939-.574 0-.966-.49-2.143-.49-1.737 0-2.633 1.471-2.633 3.18 0 1.667.911 3.096 2.633 3.096 1.177 0 1.653-.589 2.227-.589.63 0 .925.631.925.953 0 1.345-2.115 1.652-3.152 1.652-2.843 0-4.818-2.255-4.818-5.154-.001-2.914 1.96-5.156 4.818-5.156z"/><path d="M8.865 18.014c0-2.914 1.961-5.155 4.818-5.155 2.815 0 4.819 2.311 4.819 5.155 0 2.899-1.947 5.154-4.819 5.154-2.843 0-4.818-2.255-4.818-5.154zm7.452 0c0-1.695-.882-3.222-2.633-3.222s-2.633 1.526-2.633 3.222c0 1.709.855 3.222 2.633 3.222s2.633-1.513 2.633-3.222zm2.656 0c0-2.914 1.96-5.155 4.818-5.155 2.816 0 4.818 2.311 4.818 5.155 0 2.899-1.945 5.154-4.818 5.154-2.843 0-4.818-2.255-4.818-5.154zm7.453 0c0-1.695-.883-3.222-2.635-3.222-1.75 0-2.633 1.526-2.633 3.222 0 1.709.854 3.222 2.633 3.222 1.779-.001 2.635-1.513 2.635-3.222zm2.767-3.979c0-.7.447-1.093 1.051-1.093.602 0 1.051.393 1.051 1.093v7.032h2.492c.715 0 1.023.532 1.01 1.008-.029.463-.393.925-1.01.925h-3.502c-.686 0-1.092-.448-1.092-1.148v-7.817z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
1
src/markdown/assets/twemoji/svg/1f193.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path d="M1.836 12.585c0-.738.504-1.404 1.405-1.404H7.85c.792 0 1.206.612 1.206 1.242 0 .612-.396 1.243-1.206 1.243H4.538v2.629h2.791c.864 0 1.296.612 1.296 1.224 0 .631-.432 1.261-1.296 1.261H4.538v3.925c0 .9-.576 1.405-1.351 1.405-.774 0-1.351-.505-1.351-1.405v-10.12zm7.992 0c0-.864.486-1.404 1.387-1.404h3.169c2.773 0 4.483 1.242 4.483 4.069 0 1.981-1.495 3.115-3.331 3.403l3.061 3.277c.252.269.36.54.36.792 0 .702-.558 1.387-1.351 1.387-.324 0-.756-.126-1.044-.469l-3.998-4.843h-.036v3.906c0 .9-.576 1.405-1.351 1.405-.774 0-1.351-.505-1.351-1.405V12.585zm2.701 4.267h1.854c.99 0 1.674-.594 1.674-1.603 0-1.026-.684-1.584-1.674-1.584h-1.854v3.187zm6.948-4.105c0-.9.449-1.566 1.404-1.566h4.465c.865 0 1.279.612 1.279 1.242 0 .612-.434 1.243-1.279 1.243h-3.168v2.629h2.952c.882 0 1.313.612 1.313 1.242 0 .612-.449 1.242-1.313 1.242h-2.952v2.737h3.33c.865 0 1.279.611 1.279 1.242 0 .612-.434 1.242-1.279 1.242h-4.644c-.793 0-1.387-.54-1.387-1.351v-9.902zm7.974 0c0-.9.449-1.566 1.404-1.566h4.465c.863 0 1.277.612 1.277 1.242 0 .612-.432 1.243-1.277 1.243h-3.17v2.629h2.953c.883 0 1.314.612 1.314 1.242 0 .612-.449 1.242-1.314 1.242H30.15v2.737h3.332c.863 0 1.277.611 1.277 1.242 0 .612-.432 1.242-1.277 1.242h-4.646c-.791 0-1.385-.54-1.385-1.351v-9.902z" fill="#FFF"/></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
1
src/markdown/assets/twemoji/svg/1f194.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9266CC" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path d="M5.717 9.156c0-1.55.992-2.418 2.325-2.418s2.325.868 2.325 2.418v17.611c0 1.551-.992 2.418-2.325 2.418s-2.325-.867-2.325-2.418V9.156zm7.44.156c0-1.427.992-2.388 2.387-2.388h5.148c6.945 0 10.914 4.465 10.914 11.348C31.605 24.783 27.389 29 21.001 29h-5.395c-1.023 0-2.449-.559-2.449-2.325V9.312zm4.65 15.409h3.132c4 0 5.828-2.945 5.828-6.666 0-3.969-1.859-6.852-6.139-6.852h-2.822v13.518z" fill="#FFF"/></svg>
|
||||
|
After Width: | Height: | Size: 600 B |
1
src/markdown/assets/twemoji/svg/1f195.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path d="M1.527 13.121c0-.85.544-1.326 1.275-1.326.323 0 .85.255 1.071.561l5.388 7.191h.034v-6.426c0-.85.544-1.326 1.275-1.326.731 0 1.275.476 1.275 1.326v9.655c0 .85-.544 1.325-1.275 1.325-.323 0-.833-.255-1.071-.561L4.11 16.434h-.033v6.341c0 .85-.544 1.325-1.275 1.325-.731 0-1.275-.476-1.275-1.325v-9.654zm11.067.255c0-.85.425-1.479 1.326-1.479h4.215c.816 0 1.207.578 1.207 1.173 0 .578-.407 1.173-1.207 1.173h-2.992v2.481h2.788c.833 0 1.24.578 1.24 1.173 0 .578-.424 1.173-1.24 1.173h-2.788v2.584h3.145c.816 0 1.206.578 1.206 1.173 0 .578-.407 1.173-1.206 1.173h-4.386c-.748 0-1.309-.51-1.309-1.274v-9.35zm7.31.119c-.051-.221-.068-.34-.068-.578 0-.544.459-1.122 1.207-1.122.816 0 1.207.476 1.359 1.224l1.445 7.224h.034l2.21-7.445c.188-.612.697-1.003 1.326-1.003.629 0 1.139.391 1.326 1.003l2.209 7.445h.033l1.445-7.224c.152-.748.545-1.224 1.359-1.224.748 0 1.207.578 1.207 1.122 0 .238-.016.357-.068.578l-2.158 9.281c-.17.714-.73 1.325-1.682 1.325-.834 0-1.48-.544-1.684-1.24l-1.97-6.561H27.4l-1.972 6.561c-.204.696-.851 1.24-1.683 1.24-.952 0-1.514-.611-1.684-1.325l-2.157-9.281z" fill="#FFF"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
1
src/markdown/assets/twemoji/svg/1f196.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path d="M2.508 10.639c0-1.2.768-1.872 1.8-1.872.456 0 1.2.36 1.512.792l7.608 10.153h.048v-9.073c0-1.2.768-1.872 1.8-1.872s1.8.672 1.8 1.872v13.633c0 1.2-.768 1.872-1.8 1.872-.456 0-1.176-.359-1.512-.792L6.157 15.319h-.048v8.953c0 1.2-.768 1.872-1.8 1.872s-1.8-.672-1.8-1.872V10.639zm29.402 5.232c1.512 0 2.111.768 2.111 2.305 0 4.632-3.024 8.112-7.824 8.112-4.873 0-8.257-3.864-8.257-8.833 0-4.992 3.36-8.833 8.257-8.833 3.623 0 6.6 1.704 6.6 3.384 0 1.032-.647 1.68-1.488 1.68-1.631 0-1.967-1.752-5.111-1.752-3 0-4.513 2.616-4.513 5.52 0 2.929 1.464 5.521 4.513 5.521 1.896 0 4.08-1.056 4.08-3.792H27.83c-.984 0-1.682-.696-1.682-1.681 0-1.008.77-1.632 1.682-1.632h4.08z" fill="#FFF"/></svg>
|
||||
|
After Width: | Height: | Size: 877 B |
1
src/markdown/assets/twemoji/svg/1f197.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path d="M1.933 17.455c0-4.992 3.36-8.833 8.256-8.833 4.825 0 8.257 3.96 8.257 8.833 0 4.969-3.336 8.833-8.257 8.833-4.872 0-8.256-3.864-8.256-8.833zm12.769 0c0-2.904-1.512-5.52-4.513-5.52-3 0-4.512 2.616-4.512 5.52 0 2.929 1.464 5.521 4.512 5.521 3.048 0 4.513-2.592 4.513-5.521zm5.23-6.913c0-.984.721-1.776 1.801-1.776 1.031 0 1.8.672 1.8 1.776v5.185l5.905-6.289c.264-.288.719-.672 1.391-.672.912 0 1.777.696 1.777 1.728 0 .624-.385 1.128-1.176 1.92l-4.537 4.464 5.545 5.785c.576.576 1.008 1.103 1.008 1.824 0 1.128-.889 1.655-1.873 1.655-.695 0-1.15-.407-1.824-1.128l-6.216-6.721v6.121c0 .936-.72 1.728-1.8 1.728-1.032 0-1.801-.672-1.801-1.728V10.542z" fill="#FFF"/></svg>
|
||||
|
After Width: | Height: | Size: 860 B |
1
src/markdown/assets/twemoji/svg/1f198.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path d="M9.762 12.518c0 .78-.52 1.48-1.34 1.48-.82 0-1.46-.6-2.661-.6-.86 0-1.641.46-1.641 1.3 0 2.06 6.682.74 6.682 5.901 0 2.861-2.361 4.642-5.121 4.642-1.541 0-4.861-.36-4.861-2.24 0-.78.521-1.421 1.34-1.421.94 0 2.061.78 3.361.78 1.32 0 2.041-.74 2.041-1.721 0-2.36-6.682-.94-6.682-5.581 0-2.801 2.301-4.541 4.961-4.541 1.121 0 3.921.42 3.921 2.001zm1.358 5.361c0-4.161 2.801-7.362 6.882-7.362 4.02 0 6.881 3.3 6.881 7.362 0 4.141-2.78 7.361-6.881 7.361-4.061 0-6.882-3.22-6.882-7.361zm10.643 0c0-2.421-1.261-4.602-3.761-4.602-2.501 0-3.761 2.181-3.761 4.602 0 2.44 1.22 4.601 3.761 4.601 2.541-.001 3.761-2.161 3.761-4.601zm12.38-5.361c0 .78-.521 1.48-1.342 1.48s-1.459-.6-2.66-.6c-.859 0-1.641.46-1.641 1.3 0 2.06 6.682.74 6.682 5.901 0 2.861-2.359 4.642-5.121 4.642-1.539 0-4.861-.36-4.861-2.24 0-.78.521-1.421 1.342-1.421.939 0 2.061.78 3.359.78 1.32 0 2.041-.74 2.041-1.721 0-2.36-6.682-.94-6.682-5.581 0-2.801 2.301-4.541 4.961-4.541 1.121 0 3.922.42 3.922 2.001z" fill="#FFF"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
1
src/markdown/assets/twemoji/svg/1f199.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path d="M2.281 11.562c0-1.05.672-1.638 1.575-1.638s1.575.588 1.575 1.638v7.328c0 1.932 1.239 3.464 3.233 3.464 1.911 0 3.212-1.616 3.212-3.464v-7.328c0-1.05.672-1.638 1.575-1.638.903 0 1.575.588 1.575 1.638v7.496c0 3.527-2.898 6.193-6.362 6.193-3.506 0-6.383-2.625-6.383-6.193v-7.496zm14.511.127c0-.987.588-1.638 1.638-1.638h3.717c3.086 0 5.375 2.016 5.375 5.018 0 3.066-2.373 4.976-5.25 4.976h-2.33v3.443c0 1.05-.672 1.638-1.575 1.638-.903 0-1.575-.588-1.575-1.638V11.689zm3.149 5.584h2.142c1.323 0 2.163-.966 2.163-2.225 0-1.26-.84-2.226-2.163-2.226h-2.142v4.451zm9.45 6.341c0-.903.736-1.638 1.639-1.638s1.637.734 1.637 1.638c0 .903-.734 1.638-1.637 1.638s-1.639-.734-1.639-1.638zm.127-12.387c0-.882.65-1.428 1.512-1.428.84 0 1.512.567 1.512 1.428v8.084c0 .86-.672 1.428-1.512 1.428-.861 0-1.512-.547-1.512-1.428v-8.084z" fill="#FFF"/></svg>
|
||||
|
After Width: | Height: | Size: 1 KiB |
1
src/markdown/assets/twemoji/svg/1f19a.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#FFF" d="M16.98 7.14c-1.02 0-1.649.66-2.04 1.47l-4.649 12.479L5.64 8.61c-.39-.81-1.019-1.47-2.039-1.47-1.201 0-2.311.9-2.311 2.16 0 .42.06.721.21 1.11l6.57 16.71c.391.959.9 1.738 2.221 1.738 1.32 0 1.83-.779 2.22-1.738l6.57-16.71c.15-.39.209-.69.209-1.11-.001-1.26-1.11-2.16-2.31-2.16zm7.71 6.089c0-1.26 1.17-1.949 2.461-1.949 1.799 0 2.76.899 3.99.899 1.228 0 2.01-1.05 2.01-2.22 0-2.37-4.201-3-5.881-3-3.99 0-7.439 2.609-7.439 6.811 0 6.959 10.02 4.828 10.02 8.369 0 1.471-1.08 2.58-3.059 2.58-1.951 0-3.631-1.17-5.041-1.17-1.231 0-2.01.959-2.01 2.129 0 2.82 4.981 3.361 7.289 3.361 4.141 0 7.68-2.67 7.68-6.961-.001-7.738-10.02-5.759-10.02-8.849z"/></svg>
|
||||
|
After Width: | Height: | Size: 855 B |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1e8.svg
Normal file
|
After Width: | Height: | Size: 16 KiB |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1e9.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D01C3A" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#0020A8" d="M4 5C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h8V5H4z"/><path fill="#FEDF00" d="M12 5h12v26H12z"/><path fill="#C7B37F" d="M23.035 19.641c-.159-.472-.563-.382-.563-.225 0 0-.539-.39-.135-1.104 0 0 .786.093.337-.514 0 0 .674-.382.696-1.168.022-.787-.876-1.281-1.258-.967 0 0-.023-.314-.18-.314s-.247.202-.247.202.023-.517.359-.809c.337-.292 1.033-1.079-.428-1.528-1.46-.449-1.527.473-1.303.675 0 0-.359.201-.764.179-.404-.021-.113-.493-.023-.696.09-.202.023-.921-.473-.898-.494.022-.517.225-.696.292-.177.066-.357.021-.357.021s-.18.045-.36-.023c-.179-.067-.202-.269-.696-.292-.495-.023-.562.696-.472.898.09.203.382.675-.023.696-.404.022-.764-.179-.764-.179.225-.202.157-1.124-1.303-.675-1.46.449-.764 1.236-.427 1.528.337.292.36.809.36.809s-.09-.202-.248-.202c-.157 0-.179.314-.179.314-.382-.314-1.281.18-1.259.967.023.786.697 1.168.697 1.168-.45.606.337.514.337.514.404.715-.135 1.104-.135 1.104 0-.157-.404-.247-.564.225-.159.472.316.629.316.629-.629.81-.225 1.573.382 2.022.607.449 1.775.383 2.359.427.584.045.697.337.697.337-.449.428.225.765.225.765.135.449.674-.045.674-.045l.383.338.382-.337s.54.494.674.045c0 0 .675-.337.225-.765 0 0 .113-.292.697-.337.584-.044 1.753.022 2.359-.427.606-.449 1.011-1.213.382-2.022 0 .001.475-.157.316-.628z"/><path fill="#D01C3A" d="M17.82 17.641v-2.966h-2.966v2.966h2.966z"/><path fill="#FEDF00" d="M15.933 16.506l-.882.91.138.157.744-.82zm1.449-1.157s.391.102.391-.247-.234-.349-.312-.349c-.079 0-.438.057-.45.202-.011.146.141.236.059.315-.081.078-.302.273-.302.273l.131.156s.188-.156.337-.373c.076-.11.018-.378.09-.394.213-.044.292.057.281.136-.011.078-.146.157-.146.157l-.079.124z"/><path fill="#FFF" d="M16.652 16.91s.056.416.258.438c.202.022.27-.646.601-.646.332 0 .365.579 0 .669l-.05-.168s.236-.236.067-.271c-.168-.033-.247.18-.269.271-.023.09-.158.325-.36.325-.337 0-.382-.309-.433-.547-.05-.239.186-.071.186-.071zm-.6 0s-.056.416-.259.438c-.202.022-.27-.646-.601-.646-.332 0-.366.579 0 .669l.05-.168s-.236-.236-.067-.271c.168-.033.247.18.269.271.023.09.157.325.359.325.337 0 .382-.309.433-.547.052-.239-.184-.071-.184-.071z"/><path fill="#FFF" d="M16.394 14.798l.865 1.101-.433 1.18s-.174-.102-.433-.102-.461.102-.461.102l-.46-1.191.922-1.09z"/><path fill="#FEDF00" d="M16.466 15.18l.604.725-.306.927-.292-.09zm-.199 0l-.604.725.306.927.292-.09zm-1.413 2.73v1.843c0 1.214.886 1.381 1.648 1.214.614-.136 1.318 0 1.318 0V17.91h-2.966z"/><path d="M16.502 20.967l.06-.012V17.91h-.45v3.108c.131-.005.262-.024.39-.051zm.959-.046V17.91h-.45v2.998c.165-.005.32.002.45.013zm-1.798.058V17.91h-.449v2.841c.127.115.282.189.449.228z" fill="#D01C3A"/><path fill="#FEDF00" d="M18.18 17.641v-2.966h2.966v2.966H18.18z"/><path fill="#D01C3A" d="M18.539 14.675h.45v2.966h-.45zm.899 0h.45v2.966h-.45zm.899 0h.449v2.966h-.449z"/><path fill="#FEDF00" d="M21.146 17.91v1.843c0 1.214-.886 1.381-1.648 1.214-.614-.136-1.318 0-1.318 0V17.91h2.966z"/><path fill="#D01C3A" d="M18.629 18.404l.281-.225h.348v.181s.495-.008.899-.049c.404-.042.528.262.404.34-.123.079.022.383 0 .528-.022.146-.292.359-.225.236.067-.124 0-.461 0-.461s-.078.259-.146.337c-.068.079-.304.09-.214.023s.18-.213.101-.292c-.078-.078-.431-.09-.446-.056-.014.033-.081.426-.126.449-.046.022-.102-.034-.068-.157.034-.124 0-.337 0-.337s-.235-.012-.225.09c.012.101.113.146.091.225-.023.078-.169.18-.18.045-.012-.135-.236-.225-.135-.292.101-.067.203-.173.203-.173s-.127-.029-.216-.153c-.09-.123-.166-.112-.346-.112-.09 0 0-.147 0-.147zm0 1.349l.281-.225h.348v.18s.495-.007.899-.049c.404-.041.528.262.404.341-.123.079.022.382 0 .528-.022.146-.292.358-.225.236.067-.124 0-.461 0-.461s-.078.258-.146.337c-.068.079-.304.09-.214.022.09-.067.18-.214.101-.292-.078-.078-.431-.09-.446-.057-.014.034-.081.427-.126.45-.046.021-.102-.034-.068-.158.034-.123 0-.337 0-.337s-.235-.011-.225.09c.012.101.113.146.091.225-.023.079-.169.181-.18.045-.012-.134-.236-.225-.135-.292.101-.067.203-.173.203-.173s-.127-.029-.216-.152c-.09-.124-.166-.112-.346-.112-.09 0 0-.146 0-.146z"/><path fill="#AF9167" d="M14.629 21.191c0 .033 1.652.482 1.837.517.186.033.118.415-.129.393-.247-.021-1.472-.291-1.629-.37-.157-.08-.079-.54-.079-.54zm2.27.556s.495.067.921.085c.427.017.719-.02.719-.02l.304.412s-.528.057-.888.057c-.359 0-.944-.057-.944-.057l-.112-.477zm2.157 0s.708-.129 1.136-.231c.427-.101.988-.303 1.135-.325.146-.023.247.241.291.277l.045.037s-.741.348-1.101.449c-.359.102-1.506.259-1.506.259s-.164-.436 0-.466z"/></svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1ea.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#068241" d="M32 5H9v9h27V9c0-2.209-1.791-4-4-4z"/><path fill="#EEE" d="M9 14h27v8H9z"/><path fill="#141414" d="M9 31h23c2.209 0 4-1.791 4-4v-5H9v9z"/><path fill="#EC2028" d="M4 5C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h5V5H4z"/></svg>
|
||||
|
After Width: | Height: | Size: 309 B |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1eb.svg
Normal file
|
After Width: | Height: | Size: 24 KiB |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1ec.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFF" d="M11.077 21L18 31l6.923-10z"/><path fill="#141414" d="M10.279 15l-.105-.022 3.988-.827-3.392-2.417 3.977.889-2.28-3.64 3.36 2.47-.821-4.308 2.232 3.675L18 6.5l.763 4.321 2.232-3.675-.821 4.308 3.36-2.47-2.28 3.64 3.977-.889-3.392 2.417 3.988.827-.106.021h3.356l5.956-8.603C34.299 5.543 33.214 5 32 5H4C2.786 5 1.701 5.543.967 6.397L6.923 15h3.356z"/><path fill="#FCD116" d="M25.826 14.978l-3.988-.827 3.392-2.417-3.976.889 2.28-3.64-3.36 2.47.821-4.308-2.232 3.676L18 6.5l-.763 4.321-2.232-3.676.821 4.308-3.36-2.47 2.28 3.64-3.976-.889 3.392 2.417-3.988.827.105.022h15.442z"/><path fill="#0072C6" d="M10.279 15H6.923l4.154 6h13.846l4.154-6h-3.356z"/><path fill="#CE1126" d="M29.077 15l-4.154 6L18 31h14c2.209 0 4-1.791 4-4V9c0-.995-.366-1.903-.967-2.603L29.077 15zM6.923 15L.967 6.397C.366 7.097 0 8.005 0 9v18c0 2.209 1.791 4 4 4h14l-6.923-10-4.154-6z"/></svg>
|
||||
|
After Width: | Height: | Size: 942 B |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1ee.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#00247D" d="M32 5H4c-.205 0-.407.015-.604.045l-.004 1.754-2.73-.004C.244 7.427 0 8.185 0 9v18c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/><path fill="#CCCC32" d="M33.938 12.324s-1.468.51-3.112.51c-1.643 0-2.879-.854-2.879-.854s-1.232.854-2.877.854c-1.644 0-3.194-.51-3.194-.51-.154 4.121.1 8.458 1.609 10.73C25.108 25.498 27.946 27 27.946 27s2.754-1.502 4.378-3.946c1.512-2.272 1.768-6.61 1.614-10.73z"/><path fill="#FFF" d="M33.416 12.811s-1.175.439-2.734.439c-1.562 0-2.735-.78-2.735-.78s-1.171.78-2.732.78c-1.562 0-2.731-.439-2.731-.439-.148 3.901 0 7.901 1.512 9.998 1.513 2.099 3.951 3.561 3.951 3.561s2.443-1.463 3.956-3.561c1.51-2.096 1.659-6.096 1.513-9.998z"/><path fill="#F90" d="M26.58 13.397s.049.683.341.926c0 0 .732-.146 1.317.098.463.193 1.317.536 1.756.39.438-.146.829-.292.928-.195.097.097-.489.244-.587.341-.098.098-.438.196-.243.488.196.293.537.537.439.83 0 0-.439-.341-.634-.634-.196-.293-.635-.537-1.367-.439-.732.098-1.316.488-1.413.927-.098.438.438.39.877.487 0 0-.634.244-.975.244 0 0-.293.537-.586 1.024-.292.488-.342.781-.487.732-.146-.049-.196-.732-.098-1.122 0 0-.341-.195-.293-1.17.042-.833.634-1.61.634-1.61s-.048-.292 0-.634c.05-.342.391-.683.391-.683z"/><path fill="#FFF" d="M26.044 16.835c0 .095-.076.171-.171.171-.095 0-.171-.076-.171-.171 0-.094.076-.17.171-.17.095 0 .171.076.171.17z"/><path fill="#F90" d="M25.024 21.728s.499-.47.502-.85c0 0-.575-.475-.757-1.083-.144-.48-.417-1.359-.808-1.607-.392-.248-.751-.458-.738-.595.015-.137.498.224.636.238.137.014.428.217.532-.119.104-.336.076-.755.364-.865 0 0 .014.556-.09.892-.104.335-.015.83.522 1.335.539.505 1.211.712 1.613.509.402-.201.025-.585-.178-.988 0 0 .591.337.807.603 0 0 .601-.113 1.163-.195.563-.082.82-.229.875-.084.055.144-.443.613-.809.785 0 0 .066.387-.721.966-.673.495-1.649.527-1.649.527s-.194.223-.491.4c-.292.179-.773.131-.773.131z"/><path fill="#FFF" d="M28.027 19.969c.073-.059.182-.048.24.025.061.072.049.181-.024.24-.073.059-.18.048-.239-.024-.061-.073-.049-.182.023-.241z"/><path fill="#F90" d="M32.781 18.83s-.637-.256-.983-.1c0 0-.188.721-.664 1.141-.377.334-1.059.95-1.12 1.408-.06.459-.1.874-.229.919-.13.045-.006-.545-.051-.676-.045-.13.017-.48-.332-.433-.348.047-.718.247-.938.032 0 0 .5-.246.848-.294.348-.046.76-.335.993-1.034.232-.702.138-1.398-.215-1.678-.351-.28-.543.224-.823.577 0 0 .059-.679.208-.985 0 0-.354-.498-.664-.975-.31-.477-.553-.648-.444-.759.107-.109.744.145 1.051.404 0 0 .326-.222 1.182.249.731.403 1.168 1.275 1.168 1.275s.285.084.571.278c.284.194.442.651.442.651z"/><path fill="#FFF" d="M29.925 16.841c-.085-.041-.121-.143-.079-.228.041-.085.143-.12.229-.079.084.042.119.143.077.228-.041.085-.144.121-.227.079z"/><path fill="#9CF" d="M23.771 22.47c.071.118.146.232.225.34 1.513 2.099 3.951 3.561 3.951 3.561s2.443-1.463 3.956-3.561c.078-.108.152-.222.224-.34h-8.356z"/><path fill="#00247D" d="M19 18V5H4c-.32 0-.604.045-.604.045l-.004 1.754-2.73-.004S.62 6.854.535 7C.195 7.589 0 8.272 0 9v9h19z"/><path fill="#EEE" d="M19 5h-2.331L12 8.269V5H7v2.569L3.396 5.045c-.614.094-1.19.325-1.672.665L6.426 9H4.69L.967 6.391c-.11.129-.211.262-.305.404L3.813 9H0v5h3.885L0 16.766V18h3.332L7 15.432V18h5v-3.269L16.668 18H19v-2.029L16.185 14H19V9h-2.814L19 7.029V5z"/><path fill="#CF1B2B" d="M11 5H8v5H0v3h8v5h3v-5h8v-3h-8z"/><path fill="#CF1B2B" d="M19 5h-1.461L12 8.879V9h1.571L19 5.198zm-17.276.71c-.281.195-.534.423-.757.681L4.69 9h1.735L1.724 5.71zM6.437 14L.734 18h1.727L7 14.822V14zM19 17.802v-1.22L15.313 14H13.57z"/></svg>
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1f1.svg
Normal file
|
After Width: | Height: | Size: 12 KiB |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1f2.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D90012" d="M32 5H4C1.791 5 0 6.791 0 9v4h36V9c0-2.209-1.791-4-4-4z"/><path fill="#F2A800" d="M4 31h28c2.209 0 4-1.791 4-4v-4H0v4c0 2.209 1.791 4 4 4z"/><path fill="#0033A0" d="M0 13h36v10H0z"/></svg>
|
||||
|
After Width: | Height: | Size: 272 B |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1f4.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#141414" d="M0 18v9c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-9H0z"/><path fill="#CE1B26" d="M36 18V9c0-2.209-1.791-4-4-4H4C1.791 5 0 6.791 0 9v9h36z"/><path fill="#F9D616" d="M17.452 13.646l.602 1.221 1.348.196-.975.951.231 1.343-1.206-.634-1.206.634.23-1.343-.976-.951 1.349-.196zm-2.296 3.542c.344.562 3.172 3.516 5.922 5.234.359.234 1.344.984 1.719 1.25-.156.203-.375.5-.609.75-.391-.312-3.969-2.516-5.141-3.109-1.172-.594-2.234-1.625-2.234-2.609-.001-.985.343-1.516.343-1.516zm7.828 6.609c-.172.25-.438.594-.594.781.312.047 1.109.438 1.516 1.281.406.844 1.141.406 1.078-.047s-.953-1.437-2-2.015z"/><circle fill="#292F33" cx="23.258" cy="24.492" r=".18"/><circle fill="#292F33" cx="24.258" cy="25.492" r=".18"/><path fill="#292F33" d="M22.547 24.041c-.029 0-.059-.009-.084-.026l-4.657-3.172c-.068-.047-.086-.14-.04-.208.047-.069.141-.087.208-.04l4.656 3.172c.069.047.087.14.04.208-.028.043-.075.066-.123.066z"/><path d="M24.826 18.648l.008-1.295-1.085.007c-.041-.417-.126-.82-.244-1.208l.972-.39-.438-1.219-1.046.416c-.178-.322-.384-.625-.614-.909l.699-.798-.994-.831-.625.71c-.31-.25-.641-.472-.994-.661l.454-.967-1.213-.457-.442.935c-.357-.103-.725-.176-1.104-.214l-.138 1.347c2.495.257 4.447 2.34 4.447 4.902 0 1.509-.688 2.842-1.751 3.751l.553.382 1.365 1.016.531-.578-.833-.618c.252-.303.476-.627.668-.974l1.006.408.5-1.195-1.001-.406c.112-.369.196-.751.238-1.146l1.081-.008zm-4.93 5.12l-.412-.799-.51-.243c-.464.144-.947.243-1.458.243-1.198 0-2.282-.442-3.139-1.15l-.832.979c.308.255.646.473.999.665l-.446.959 1.194.503.45-.972c.346.104.701.176 1.069.219l-.007 1.01 1.295-.014.007-.961c.404-.038.797-.114 1.175-.226l.344.994.688-.203-.431-.999.014-.005z" fill="#F9D616"/></svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1f6.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#265FB5" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#FFF" d="M27.532 18.933c-.051-.525.801-1.828.117-1.734-.837.114-1.491-.462-1.774-.448.906-1.281.233-1.607.031-2.438-.356-1.458.781-2.172-1.25-2.484-1.321-.203-2.233-.066-2.63-1.575-.583.409-1.275.511-1.932.224-.42-.183-.551-.532-.946-.701-.299-.127-.925-.126-1.26-.179-.923-.146-1.399.264-2.227.127.079.12.091.274.146.402-.511.018-.821.36-.876.837-.747-.075-.937.898-.853 1.512L14 12.5l.031.031c-.157 1.625-.818 2.438-2.483 2.693-1.096.168-2.07-.56-3.017-1.146-.208-.128-.571-.409-.766-.625-.28-.311-.478-.747-.75-.969-.125-.102-.391-.188-.354.021-.172 1.078.615 2.421 1.522 2.939-1.242.573.314.916.537 1.111.005.004.54.74.544.768.085.526-.278.466-.316.887-.039.437-.039.787.107 1.222l-.031.031c.006.35-.259.225-.603.146.047 1.062 1.059 1.154 1.228 1.362.545.669.357 1.642.993 2.265 1.564 1.532 3.346.628 5.117.885.994.145 1.846.979 2.747.037 1.059 1.16-.815 2.535-.357 2.927.131.112.269.159.41.167-.026.071-.067.136-.085.211 1.272.12 2.612.424 3.802-.202-.002.191.126.423.133.524.292-.349.52-.329.892-.515.466-.232 1.286-.511 1.595-.976.368-.554-.21-1.319.948-1.082.09-.4.127-.358.34-.624-.319-.8.629-1.34.914-1.912.057-.116.061-.652.137-.854.144-.385.556-.599.67-1.081.208-.887-.299-1.04-.373-1.808z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1f7.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#75AADB" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#EEE" d="M0 13h36v10H0z"/><path fill="#FCBF49" d="M18 13l.488 2.548 1.426-2.167-.525 2.54 2.146-1.457-1.457 2.147 2.541-.524-2.167 1.425L23 18l-2.548.488 2.167 1.426-2.541-.525 1.457 2.146-2.146-1.457.525 2.541-1.426-2.167L18 23l-.488-2.548-1.425 2.167.524-2.541-2.147 1.457 1.457-2.146-2.54.525 2.167-1.426L13 18l2.548-.488-2.167-1.425 2.54.524-1.457-2.147 2.147 1.457-.524-2.54 1.425 2.167z"/><path fill="#843511" d="M18 14.33l.242 1.265.116.605.339-.514.708-1.076-.261 1.261-.125.604.51-.346 1.066-.723-.723 1.066-.346.51.603-.125 1.262-.26-1.076.708-.515.337.605.116L21.67 18l-1.265.242-.605.116.514.339 1.076.708-1.262-.261-.604-.125.346.51.723 1.065-1.065-.723-.51-.346.125.604.261 1.262-.708-1.076-.338-.515-.116.605L18 21.67l-.242-1.265-.116-.605-.339.515-.708 1.076.26-1.262.125-.603-.51.346-1.066.723.723-1.066.346-.51-.604.125-1.261.261 1.076-.708.514-.339-.605-.116L14.33 18l1.265-.242.605-.116-.515-.339-1.076-.708 1.261.26.603.125-.346-.51-.724-1.066 1.066.724.51.346-.125-.603-.26-1.261.708 1.076.339.515.116-.605L18 14.33M18 13l-.488 2.548-1.425-2.167.524 2.541-2.147-1.457 1.457 2.147-2.54-.524 2.167 1.425L13 18l2.548.488-2.167 1.426 2.54-.525-1.457 2.146 2.147-1.457-.524 2.541 1.425-2.167L18 23l.488-2.548 1.426 2.167-.525-2.541 2.146 1.457-1.457-2.146 2.541.525-2.167-1.426L23 18l-2.548-.488 2.167-1.425-2.541.524 1.457-2.147-2.146 1.457.525-2.541-1.426 2.167L18 13zm1.914.381h.005-.005zm1.621 1.083h.005-.005zm1.084 1.623h.005-.005z"/><circle fill="#FCBF49" cx="18" cy="18" r="2"/><path fill="#843511" d="M18 20.125c-1.172 0-2.125-.953-2.125-2.125s.953-2.125 2.125-2.125 2.125.953 2.125 2.125-.953 2.125-2.125 2.125zm0-4c-1.034 0-1.875.841-1.875 1.875s.841 1.875 1.875 1.875 1.875-.841 1.875-1.875-.841-1.875-1.875-1.875z"/><path fill="#C16540" d="M17.801 17.774c0 .155-.261.28-.583.28-.323 0-.584-.125-.584-.28 0-.155.261-.28.584-.28.322 0 .583.125.583.28zm1.553-.024c0-.161-.266-.292-.594-.292-.328 0-.594.13-.594.292s.266.292.594.292c.329 0 .594-.131.594-.292z"/><path fill="#ED8662" d="M17.463 18.874c0-.126.246-.229.548-.229.303 0 .548.102.548.229 0 .126-.246.229-.548.229-.303 0-.548-.103-.548-.229z"/></svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1f8.svg
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1f9.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EEE" d="M0 13h36v10H0z"/><path fill="#ED2939" d="M32 5H4C1.791 5 0 6.791 0 9v4h36V9c0-2.209-1.791-4-4-4zM4 31h28c2.209 0 4-1.791 4-4v-4H0v4c0 2.209 1.791 4 4 4z"/></svg>
|
||||
|
After Width: | Height: | Size: 242 B |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1fa.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#00247D" d="M32 5H4c-.205 0-.407.015-.604.045l-.004 1.754-2.73-.004C.244 7.427 0 8.185 0 9v18c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/><path d="M9 26.023l-1.222 1.129.121-1.66-1.645-.251 1.373-.94-.829-1.443 1.591.488L9 21.797l.612 1.549 1.591-.488-.83 1.443 1.374.94-1.645.251.121 1.66zM27.95 9.562l-.799.738.079-1.086-1.077-.164.899-.615-.542-.944 1.04.319.4-1.013.401 1.013 1.041-.319-.543.944.898.615-1.076.164.079 1.086zm-4 6l-.799.739.079-1.086-1.077-.164.899-.616-.542-.944 1.04.319.4-1.013.401 1.013 1.041-.319-.543.944.898.616-1.076.164.079 1.086zm9-2l-.799.739.079-1.086-1.077-.164.899-.616-.542-.944 1.04.319.4-1.013.401 1.013 1.041-.319-.543.944.898.616-1.076.164.079 1.086zm-5 14l-.799.739.079-1.086-1.077-.164.899-.616-.542-.944 1.04.319.4-1.013.401 1.013 1.041-.319-.543.944.898.616-1.076.164.079 1.086zM31 16l.294.596.657.095-.475.463.112.655L31 17.5l-.588.309.112-.655-.475-.463.657-.095z" fill="#FFF"/><path fill="#00247D" d="M19 18V5H4c-.32 0-.604.045-.604.045l-.004 1.754-2.73-.004S.62 6.854.535 7C.195 7.589 0 8.272 0 9v9h19z"/><path fill="#EEE" d="M19 5h-2.331L12 8.269V5H7v2.569L3.396 5.045c-.614.094-1.19.325-1.672.665L6.426 9H4.69L.967 6.391c-.11.129-.211.262-.305.404L3.813 9H0v5h3.885L0 16.766V18h3.332L7 15.432V18h5v-3.269L16.668 18H19v-2.029L16.185 14H19V9h-2.814L19 7.029V5z"/><path fill="#CF1B2B" d="M11 5H8v5H0v3h8v5h3v-5h8v-3h-8z"/><path fill="#CF1B2B" d="M19 5h-1.461L12 8.879V9h1.571L19 5.198zm-17.276.71c-.281.195-.534.423-.757.681L4.69 9h1.735L1.724 5.71zM6.437 14L.734 18h1.727L7 14.822V14zM19 17.802v-1.22L15.313 14H13.57z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1fc.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4189DD" d="M32 5H4C1.791 5 0 6.791 0 9v13.055h36V9c0-2.209-1.791-4-4-4zM6.276 11.276l-.943 3.057-.943-3.057-3.057-.943L4.39 9.39l.943-3.057.943 3.057 3.057.943-3.057.943zM4 31h28c1.872 0 3.431-1.291 3.867-3.028H.133C.569 29.709 2.128 31 4 31zm-4-6.972h36V26H0z"/><path fill="#FFF" d="M5.333 6.333l-.942 3.058-3.057.943 3.057.943.943 3.057.943-3.057 3.057-.943-3.058-.943-.943-3.058zm.727 4.727l-.726 2.355-.727-2.355-2.355-.726 2.355-.726.726-2.355.727 2.354 2.355.726-2.355.727z"/><path fill="#D21034" d="M5.333 7.252l-.726 2.355-2.355.726 2.355.727.726 2.355.727-2.355 2.355-.727-2.355-.726z"/><path fill="#F9D616" d="M0 22.055h36v1.972H0zM0 27c0 .337.054.659.133.972h35.734c.079-.313.133-.635.133-.972v-1H0v1z"/></svg>
|
||||
|
After Width: | Height: | Size: 794 B |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1fd.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCE00" d="M18 5h-2v11h20v-2H18zm-2 17v9h2v-9h18v-2H16zm-3-2H0v2h11v9h2v-9zm0-6V5h-2v9H0v2h13z"/><path fill="#D21034" d="M16 5h-3v11H0v4h13v11h3V20h20v-4H16z"/><path fill="#0053A5" d="M18 22v9h14c2.209 0 4-1.791 4-4v-5H18zM0 22v5c0 2.209 1.791 4 4 4h7v-9H0zM11 5H4C1.791 5 0 6.791 0 9v5h11V5zm21 0H18v9h18V9c0-2.209-1.791-4-4-4z"/></svg>
|
||||
|
After Width: | Height: | Size: 410 B |
1
src/markdown/assets/twemoji/svg/1f1e6-1f1ff.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E00034" d="M0 13h36v10H0z"/><path fill="#0098C3" d="M32 5H4C1.791 5 0 6.791 0 9v4h36V9c0-2.209-1.791-4-4-4z"/><g fill="#FFF"><path d="M17.844 21.333c-1.841 0-3.333-1.492-3.333-3.333 0-1.841 1.492-3.333 3.333-3.333.982 0 1.865.425 2.475 1.101C19.601 14.701 18.382 14 17 14c-2.209 0-4 1.791-4 4s1.791 4 4 4c1.382 0 2.601-.701 3.32-1.768-.61.676-1.493 1.101-2.476 1.101z"/><path d="M23.667 17.998l-1.196-.424.544-1.146-1.146.545-.426-1.195-.424 1.196-.003-.002-1.144-.542.546 1.146-1.196.426 1.196.424-.544 1.146 1.141-.543.005-.002.426 1.195.424-1.196 1.147.544-.546-1.146z"/></g><path fill="#00AE65" d="M4 31h28c2.209 0 4-1.791 4-4v-4H0v4c0 2.209 1.791 4 4 4z"/></svg>
|
||||
|
After Width: | Height: | Size: 740 B |
1
src/markdown/assets/twemoji/svg/1f1e6.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#FFF" d="M14.747 9.125c.527-1.426 1.736-2.573 3.317-2.573 1.643 0 2.792 1.085 3.318 2.573l6.077 16.867c.186.496.248.931.248 1.147 0 1.209-.992 2.046-2.139 2.046-1.303 0-1.954-.682-2.264-1.611l-.931-2.915h-8.62l-.93 2.884c-.31.961-.961 1.642-2.232 1.642-1.24 0-2.294-.93-2.294-2.17 0-.496.155-.868.217-1.023l6.233-16.867zm.34 11.256h5.891l-2.883-8.992h-.062l-2.946 8.992z"/></svg>
|
||||
|
After Width: | Height: | Size: 576 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1e6.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2D3189" d="M32 5H9.177l-.665.484.365 1.123-.956-.695-.956.695.365-1.123L6.665 5H4C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h19.725l.105-.324-.955-.695h1.181l.365-1.123.365 1.123h1.181l-.955.695.105.324H32c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/><path fill="#E1E8ED" d="M6.965 6.607l.956-.695.955.695-.364-1.123L9.177 5H6.665l.665.484zm19.002 23.374h-1.181l-.365-1.122-.365 1.122h-1.181l.955.695-.105.324h1.392l-.106-.324zM9.999 6.815l.364 1.123h1.182l-.956.695.365 1.123-.955-.695-.956.695.365-1.123-.955-.695h1.18zm2.069 3.15l.365 1.122h1.182l-.956.695.365 1.123-.956-.694-.955.694.365-1.123-.956-.695h1.181zm2.054 3.148l.365 1.123h1.181l-.956.695.365 1.123-.955-.695-.956.695.365-1.123-.955-.695h1.181zm2.061 3.15l.365 1.123h1.181l-.955.694.365 1.123-.956-.694-.955.694.365-1.123-.956-.694h1.181zm2.061 3.149l.365 1.123h1.182l-.956.694.365 1.124-.956-.695-.955.695.365-1.124-.955-.694h1.181zm2.062 3.149l.365 1.123h1.181l-.955.694.364 1.123-.955-.694-.955.694.364-1.123-.955-.694h1.181zm2.053 3.148l.365 1.124h1.182l-.956.694.365 1.123-.956-.694-.955.694.365-1.123-.956-.694h1.181z"/><path fill="#FBD116" d="M28 31V5H11z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1e7.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#00267F" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#00267F" d="M4 5C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h8V5H4z"/><path fill="#FFC726" d="M12 5h12v26H12z"/><path d="M22.83 13.516c-1.406 0-2.5 1.031-2.859 1.438.422-.094.516.234.453.438-.444 1.477-.819 3.215-.931 4.15h-.903v-5.186l1.09-.226-1.366-.273-.283-1.377-.283 1.377-1.367.273 1.1.228v5.184h-.947c-.112-.936-.487-2.674-.931-4.15-.062-.203.031-.531.453-.438-.359-.406-1.453-1.438-2.859-1.438.613.906 2.245 3.432 2.458 6.403v.622h1.826v2.414h1.109v-2.414h1.756v-.232c.085-3.14 1.844-5.848 2.484-6.793z"/></svg>
|
||||
|
After Width: | Height: | Size: 716 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1e9.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#006A4D" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><circle fill="#F42A41" cx="16" cy="17.5" r="7"/></svg>
|
||||
|
After Width: | Height: | Size: 239 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1ea.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36" xml:space="preserve"><path fill="#141414" d="M7 5a4 4 0 0 0-4 4v18a4 4 0 0 0 4 4h6V5H7z"/><path fill="#FDDA24" d="M13 5h10v26H13z"/><path fill="#EF3340" d="M29 5h-6v26h6a4 4 0 0 0 4-4V9a4 4 0 0 0-4-4z"/></svg>
|
||||
|
After Width: | Height: | Size: 269 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1eb.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#009E49" d="M19.602 18.942l.99 3.048L18 20.106l-2.593 1.884.99-3.048L15.101 18H0v9c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-9H20.899l-1.297.942z"/><path fill="#EF2B2D" d="M32 5H4C1.791 5 0 6.791 0 9v9h15.101l-1.296-.942h3.205L18 14.01l.99 3.048h3.205L20.899 18H36V9c0-2.209-1.791-4-4-4z"/><path fill="#FCD116" d="M15.407 21.99L18 20.106l2.593 1.884-.991-3.048L20.899 18l1.296-.942H18.99L18 14.01l-.99 3.048h-3.205l1.296.942 1.297.942z"/></svg>
|
||||
|
After Width: | Height: | Size: 518 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1ec.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EEE" d="M32 5H4C1.791 5 0 6.791 0 9v5h36V9c0-2.209-1.791-4-4-4z"/><path fill="#D62612" d="M0 27c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-5H0v5z"/><path fill="#00966E" d="M0 14h36v8H0z"/></svg>
|
||||
|
After Width: | Height: | Size: 268 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1ed.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EEE" d="M15 6L8 5H4C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h4l7-1V6z"/><path fill="#CE1126" d="M32 5H8l6.081 2.6L8 10.2l6.081 2.6L8 15.4l6.081 2.6L8 20.6l6.081 2.6L8 25.8l6.081 2.6L8 31h24c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/></svg>
|
||||
|
After Width: | Height: | Size: 316 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1ee.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EEE" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#CE1126" d="M13.685 13.068c1.15-1.028 2.662-1.658 4.325-1.658 1.646 0 3.145.617 4.291 1.626l10.833-7.854C32.772 5.075 32.397 5 32 5H4c-.411 0-.8.08-1.174.195l10.859 7.873z"/><path fill="#1EB53A" d="M24.038 15.483c.303.751.473 1.569.473 2.427 0 .928-.198 1.809-.548 2.608l11.544 8.369c.304-.564.493-1.2.493-1.887V9c0-.67-.181-1.292-.472-1.847l-11.49 8.33zm-11.999 4.994c-.339-.788-.528-1.655-.528-2.566 0-.842.165-1.644.457-2.383L.456 7.182C.174 7.73 0 8.342 0 9v18c0 .675.183 1.301.478 1.859l11.561-8.382z"/><path fill="#CE1126" d="M22.157 22.916c-1.125.933-2.57 1.495-4.146 1.495-1.593 0-3.051-.575-4.181-1.526L2.881 30.822c.357.104.728.178 1.119.178h28c.377 0 .734-.069 1.079-.166l-10.922-7.918z"/><path fill="#1EB53A" d="M19.077 15.266l.317-.548.216-.375h-1.066l-.317-.548-.216-.375-.217.375-.316.548h-1.067l.217.375.316.548-.316.549-.217.375h1.067l.316.548.217.375.216-.375.317-.548h1.066l-.216-.375z"/><path fill="#CE1126" d="M19.177 14.593H18.4l-.389-.673-.389.673h-.778l.389.673-.389.674h.778l.389.673.389-.673h.777l-.389-.674z"/><path fill="#1EB53A" d="M21.928 19.805l.317-.549.217-.375h-1.067l-.316-.548-.217-.375-.216.375-.317.548h-1.066l.216.375.317.549-.317.548-.216.375h1.066l.317.548.216.376.217-.376.316-.548h1.067l-.217-.375z"/><path fill="#CE1126" d="M20.862 18.458l-.389.673h-.777l.388.674-.388.673h.777l.389.673.389-.673h.778l-.389-.673.389-.674h-.778z"/><path fill="#1EB53A" d="M16.542 20.353l-.316-.548.316-.549.217-.375h-1.066l-.317-.548-.217-.375-.216.375-.317.548H13.56l.216.375.317.549-.317.548-.216.375h1.066l.317.548.216.376.217-.376.317-.548h1.066z"/><path fill="#CE1126" d="M16.326 19.131h-.778l-.389-.673-.388.673h-.778l.389.674-.389.673h.778l.388.673.389-.673h.778l-.389-.673z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1ef.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FCD116" d="M32 5H14v13h22V9c0-2.209-1.791-4-4-4z"/><path fill="#E8112D" d="M14 31h18c2.209 0 4-1.791 4-4v-9H14v13z"/><path fill="#008751" d="M14 5H4C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h10V5z"/></svg>
|
||||
|
After Width: | Height: | Size: 279 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1f1.svg
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1f2.svg
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1f3.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7E017" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#141414" d="M36 27L0 19v-5l36 8z"/><path fill="#EEE" d="M36 22L0 14V9l36 8z"/><g fill="#CF1B26"><path d="M21.596 14.935c.443.688.699 1.507.699 2.386 0 2.44-1.978 4.419-4.418 4.419-2.441 0-4.419-1.979-4.419-4.419 0-.879.257-1.698.699-2.386-.838.905-1.351 2.116-1.351 3.447 0 2.801 2.27 5.071 5.071 5.071 2.801 0 5.071-2.271 5.071-5.071 0-1.331-.513-2.542-1.352-3.447zm-11.893.571c.537.118.656.323.629.758 0 0 .273.053.463.325.191.272.367.543.693.652.327.109.585.325.585.978v2.42s-.06.245.076.57c.136.327.059.789-.947.789s-1.012-.435-.877-.761c.136-.326.293-.599.293-.599v-2.08s-.196-.285-.468-.476c-.272-.19-.846-.87-.927-1.523-.082-.651-.234-1.209.48-1.053zm16.257 0c-.537.118-.656.323-.629.758 0 0-.274.053-.464.325s-.268.543-.594.652c-.326.109-.485.325-.485.978v2.42s-.039.245-.176.57c-.136.327-.107.789.898.789 1.006 0 1.087-.435.951-.761s-.219-.599-.219-.599v-2.08s.097-.285.368-.476c.273-.19.796-.87.878-1.523.083-.651.185-1.209-.528-1.053z"/><path d="M23.435 24.738s.325-.652-.028-.788c-.354-.136-1.06 0-1.06 0s.589-.747.026-1.061c-.561-.313-.947.462-1.439.815-.491.354-.986.549-1.586.748-.598.199-1.378.285-1.378.285s-.875-.086-1.473-.285c-.599-.199-1.188-.395-1.68-.748s-.877-1.129-1.439-.815c-.562.313.028 1.061.028 1.061s-.707-.136-1.06 0c-.354.136-.026.788-.026.788-.788.109-.513.599-.513.599s.196-.253 1.012-.253 1.153.797 1.697.797.54-.517.54-.517c1.007.843 2.915.843 2.915.843s1.814 0 2.82-.843c0 0-.051.517.493.517s.857-.797 1.674-.797c.815 0 1 .253 1 .253s.267-.489-.523-.599zm-2.16-10.571c-.598-.163-1.238-.924-2.081-.924s-1.225.653-1.225.653-.467-.653-1.31-.653-1.569.761-2.168.924c-.598.164-1.169 0-1.169 0 .136.625.835.768.835.768.074.388.659.401.659.401.079.462.927.144.927.144s-.053.455.382.4c.435-.054 1.172-.816 1.172-.816s-.212.218-.184.415c.027.198.365.183.365.183-.299.299.241.653.241.653l.25-.19.165.19s.497-.353.197-.653c0 0 .316.015.344-.183.027-.198-.195-.415-.195-.415s.732.762 1.167.816c.436.054.38-.4.38-.4s.847.319.927-.144c0 0 .584-.014.657-.401 0 0 .699-.143.835-.768-.001 0-.572.164-1.171 0zm-4.254-2.447c0-.121.383-.218.857-.218.473 0 .857.097.857.218 0 .12-.384.217-.857.217-.474.001-.857-.097-.857-.217z"/><path d="M18.882 12.155c-.027-.191-.142-.218-.142-.218s-.449.116-.863.116c-.415 0-.857-.116-.857-.116s-.109.027-.136.218c-.027.19-.217.775-.217.775l.354-.388.299.388.299-.388.258.388.265-.388.303.388.3-.388.355.388s-.19-.584-.218-.775zm-.913-2.324v1.06l.729.313-.281-.435.572-.273zm-.31 3.099h.449v1.142h-.449zm.816 8.076s.294-.407.233-.714c-.061-.306-.346-.789-.427-1.098-.082-.309.198-.595.198-.595l-.217-.041s.292-.265.217-.551c-.075-.286-.217-.652-.258-.978-.041-.327.258-.714.258-.714l-.387.224-.211-.224-.205.224-.38-.224s.299.387.258.714c-.041.326-.184.693-.258.978-.075.286.218.551.218.551l-.218.041s.279.286.197.595c-.081.309-.367.792-.428 1.098-.061.307.231.714.231.714l-.584-.122c.319.652.692.733 1.169.733.477 0 .856-.081 1.175-.733l-.581.122z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 3 KiB |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1f4.svg
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1f6.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EEEDED" d="M1.369 30.011L34.633 5.99C33.93 5.376 33.006 5 32 5H13.25L0 15.833V27c0 1.203.529 2.278 1.369 3.011z"/><path fill="#012A87" d="M34.633 5.99L1.369 30.011C2.072 30.625 2.994 31 4 31h28c2.209 0 4-1.791 4-4V9c0-.552-.112-1.078-.314-1.557-.239-.563-.599-1.057-1.053-1.453z"/><path fill="#F9D90F" d="M4 5C1.791 5 0 6.791 0 9v6.833L13.25 5H4z"/><path d="M16.513 15.894l1.192-.688-1.192-.688c-.312-2.515-2.31-4.513-4.825-4.825L11 8.5l-.688 1.192c-2.515.312-4.513 2.31-4.825 4.825l-1.192.688 1.192.688c.312 2.515 2.31 4.513 4.825 4.825L11 21.912l.688-1.192c2.515-.313 4.513-2.311 4.825-4.826zM11 20.048c-2.67 0-4.843-2.172-4.843-4.842 0-2.67 2.172-4.842 4.843-4.842s4.842 2.172 4.842 4.842c0 2.67-2.172 4.842-4.842 4.842z"/><path fill="#DC171D" d="M12.914 15.206l.957-1.658h-1.914L11 11.891l-.957 1.657H8.129l.957 1.658-.957 1.657h1.914L11 18.521l.957-1.658h1.914z"/></svg>
|
||||
|
After Width: | Height: | Size: 948 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1f7.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#009B3A" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#FEDF01" d="M32.728 18L18 29.124 3.272 18 18 6.875z"/><circle fill="#002776" cx="17.976" cy="17.924" r="6.458"/><path fill="#CBE9D4" d="M12.277 14.887c-.332.621-.558 1.303-.672 2.023 3.995-.29 9.417 1.891 11.744 4.595.402-.604.7-1.28.883-2.004-2.872-2.808-7.917-4.63-11.955-4.614z"/><path fill="#88C9F9" d="M12 18.233h1v1h-1zm1 2h1v1h-1z"/><path fill="#55ACEE" d="M15 18.233h1v1h-1zm2 1h1v1h-1zm4 2h1v1h-1zm-3 1h1v1h-1zm3-6h1v1h-1z"/><path fill="#3B88C3" d="M19 20.233h1v1h-1z"/></svg>
|
||||
|
After Width: | Height: | Size: 682 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1f8.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#00ABC9" d="M1.364 29.987C2.069 30.61 2.985 31 4 31h28c2.209 0 4-1.791 4-4v-4.5H11.442L1.364 29.987z"/><path fill="#FAE042" d="M17.5 18l-6.058 4.5H36v-9H11.442z"/><path fill="#00ABC9" d="M32 5H4c-1.015 0-1.931.39-2.636 1.013L11.442 13.5H36V9c0-2.209-1.791-4-4-4z"/><path fill="#141414" d="M17.5 18l-6.058-4.5L1.364 6.013C.534 6.746 0 7.806 0 9v18c0 1.194.534 2.254 1.364 2.987L11.442 22.5 17.5 18z"/></svg>
|
||||
|
After Width: | Height: | Size: 478 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1f9.svg
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1fb.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF2B2D" d="M10 5H4C1.791 5 0 6.791 0 9v6h10V5zm22 0H16v10h20V9c0-2.209-1.791-4-4-4zM16 31h16c2.209 0 4-1.791 4-4.5V21H16v10zM0 21v5.5C0 29.209 1.791 31 4 31h6V21H0z"/><path fill="#002868" d="M14.5 5h-2.944l-.025 11.5H0v3h11.525L11.5 31h3V19.5H36v-3H14.5z"/><path fill="#EDECEC" d="M14.5 31H16V21h20v-1.5H14.5zM16 5h-1.5v11.5H36V15H16zm-4.5 0H10v10H0v1.5h11.5zM0 19.5V21h10v10h1.5V19.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 467 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1fc.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EEE" d="M0 13h36v10H0z"/><path fill="#75AADB" d="M32 5H4C1.791 5 0 6.791 0 9v5h36V9c0-2.209-1.791-4-4-4zM0 27c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-5H0v5z"/><path fill="#141414" d="M0 16h36v4H0z"/></svg>
|
||||
|
After Width: | Height: | Size: 282 B |
1
src/markdown/assets/twemoji/svg/1f1e7-1f1fe.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4AA657" d="M6 31h26c2.209 0 4-1.791 4-4v-4H6v8z"/><path fill="#C8313E" d="M32 5H6v18h30V9c0-2.209-1.791-4-4-4z"/><path fill="#FFF" d="M4 5C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h2V5H4z"/><g fill="#C8313E"><path d="M.766 29.188l.625-1.109.641 1.141-.542.871c.171.139.351.263.544.372l.792-1.437-1.42-2.276-1.117 1.726c.183.46.451.872.781 1.23l-.304-.518zm5.215-.091l-1.497-2.222-1.502 2.171L4.268 31h.647l1.066-1.903zm-1.453-1.019l.641 1.141-.641 1.031-.625-1.062.625-1.11zM6 18.333v-.894l-.313.436zM2.825 7.026l-.894-1.434C1.153 6.065.557 6.791.246 7.662l1.285 1.713 1.294-2.349zm-2.059.162l.625-1.109.641 1.141-.641 1.03-.625-1.062zm3.851 2.343l1.364-2.435L4.569 5h-.171L2.983 7.046l1.634 2.485zm.551-2.312l-.64 1.031-.625-1.062.625-1.109.64 1.14z"/><path d="M4.953 15l.875-1.453.172.076V13l-1.406-2.188-1.688 2.344-1.5-2.406L0 12.923v.65L.859 15l.609-.891-.437-.609.328-.438.953 1.234-1.406 2.312L0 15.361v1.553l.058-.077.953 1.234L0 19.735v1.177l.906-1.248 1.406 2.312L1.522 23l-.163.211L1.201 23l-.17-.227.438-.609-.609-.891L0 22.701v.575l1.438 2.193L2.838 23l.053-.094.058.094 1.614 2.609L6 23.062v-.391l-.125.056L5 21.273l-.61.891.438.609-.17.227-.158.211L4.337 23l-.79-1.023 1.406-2.312L6 21.106v-1.142l-1.157-1.902.953-1.234L6 17.1v-1.997L4.906 16.61 3.5 14.297l.953-1.234.328.437-.438.609.61.891zm-.668 2.031v1.928L2.89 21.162 1.576 18.95v-1.908l1.314-2.213 1.395 2.202z"/><path d="M2.031 16.823l.598 1.091-.598 1.091.438.24.445-.811.445.811.438-.24-.598-1.091.598-1.091-.438-.24-.445.811-.445-.811zM.026 26.188l.625 1.062.641-1.031-.641-1.141zm1.516 0l.625 1.062.64-1.031-.64-1.141zm1.484 0l.625 1.062.641-1.031-.641-1.141zm1.592 0l.625 1.062.64-1.031-.64-1.141zM.026 10.125l.625 1.063.641-1.032-.641-1.14zm1.516 0l.625 1.063.64-1.032-.64-1.14zm1.484 0l.625 1.063.641-1.032-.641-1.14zm1.592 0l.625 1.063.64-1.032-.64-1.14z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |