feature(public,docs): new public website and docs

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-11-13 21:15:46 +01:00
parent fc2a019e1d
commit a022cb4831
234 changed files with 9341 additions and 6154 deletions

View File

@@ -1,67 +1,99 @@
const api = {
logo: 'https://cdn-icons-png.flaticon.com/512/10169/10169724.png',
name: 'Rest API',
href: 'https://docs.openpanel.dev/docs/sdks/api',
} as const;
import type React from 'react';
import { AstroIcon } from './icons/astro-icon';
import { ExpressIcon } from './icons/express-icon';
import { HtmlIcon } from './icons/html-icon';
import { LaravelIcon } from './icons/laravel-icon';
import { NextjsIcon } from './icons/nextjs-icon';
import { NodeIcon } from './icons/node-icon';
import { ReactIcon } from './icons/react-icon';
import { RemixIcon } from './icons/remix-icon';
import { RestIcon } from './icons/rest-icon';
import { VueIcon } from './icons/vue-icon';
export const frameworks = {
website: [
{
logo: 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/61/HTML5_logo_and_wordmark.svg/240px-HTML5_logo_and_wordmark.svg.png',
name: 'HTML / Script',
href: 'https://docs.openpanel.dev/docs/sdks/script',
},
{
logo: 'https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/React-icon.svg/2300px-React-icon.svg.png',
name: 'React',
href: 'https://docs.openpanel.dev/docs/sdks/react',
},
{
logo: 'https://static-00.iconduck.com/assets.00/nextjs-icon-512x512-y563b8iq.png',
name: 'Next.js',
href: 'https://docs.openpanel.dev/docs/sdks/nextjs',
},
{
logo: 'https://www.datocms-assets.com/205/1642515307-square-logo.svg',
name: 'Remix',
href: 'https://docs.openpanel.dev/docs/sdks/remix',
},
{
logo: 'https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Vue.js_Logo_2.svg/1024px-Vue.js_Logo_2.svg.png',
name: 'Vue',
href: 'https://docs.openpanel.dev/docs/sdks/vue',
},
{
logo: 'https://astro.build/assets/press/astro-icon-dark.png',
name: 'Astro',
href: 'https://docs.openpanel.dev/docs/sdks/astro',
},
api,
],
app: [
{
logo: 'https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/React-icon.svg/2300px-React-icon.svg.png',
name: 'React-Native',
href: 'https://docs.openpanel.dev/docs/sdks/react-native',
},
api,
],
backend: [
{
logo: 'https://static-00.iconduck.com/assets.00/node-js-icon-454x512-nztofx17.png',
name: 'Node',
href: 'https://docs.openpanel.dev/docs/sdks/node',
},
{
logo: 'https://expressjs.com/images/favicon.png',
name: 'Express',
href: 'https://docs.openpanel.dev/docs/sdks/express',
},
{
logo: 'https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Laravel.svg/1969px-Laravel.svg.png',
name: 'Laravel',
href: 'https://github.com/tbleckert/openpanel-laravel/tree/main',
},
api,
],
} as const;
export type Framework = {
key: string;
IconComponent: React.ComponentType<React.SVGProps<SVGSVGElement>>;
name: string;
href: string;
type: ('website' | 'app' | 'backend')[];
};
export const frameworks: Framework[] = [
{
key: 'html',
IconComponent: HtmlIcon,
name: 'HTML / Script',
href: 'https://openpanel.dev/docs/sdks/script',
type: ['website'],
},
{
key: 'react',
IconComponent: ReactIcon,
name: 'React',
href: 'https://openpanel.dev/docs/sdks/react',
type: ['website'],
},
{
key: 'nextjs',
IconComponent: NextjsIcon,
name: 'Next.js',
href: 'https://openpanel.dev/docs/sdks/nextjs',
type: ['website'],
},
{
key: 'remix',
IconComponent: RemixIcon,
name: 'Remix',
href: 'https://openpanel.dev/docs/sdks/remix',
type: ['website'],
},
{
key: 'vue',
IconComponent: VueIcon,
name: 'Vue',
href: 'https://openpanel.dev/docs/sdks/vue',
type: ['website'],
},
{
key: 'astro',
IconComponent: AstroIcon,
name: 'Astro',
href: 'https://openpanel.dev/docs/sdks/astro',
type: ['website'],
},
{
key: 'rest',
IconComponent: RestIcon,
name: 'Rest API',
href: 'https://openpanel.dev/docs/api/track',
type: ['backend', 'app', 'website'],
},
{
key: 'react-native',
IconComponent: ReactIcon,
name: 'React-Native',
href: 'https://openpanel.dev/docs/sdks/react-native',
type: ['app'],
},
{
key: 'node',
IconComponent: NodeIcon,
name: 'Node',
href: 'https://openpanel.dev/docs/sdks/javascript',
type: ['backend'],
},
{
key: 'express',
IconComponent: ExpressIcon,
name: 'Express',
href: 'https://openpanel.dev/docs/sdks/express',
type: ['backend'],
},
{
key: 'laravel',
IconComponent: LaravelIcon,
name: 'Laravel',
href: 'https://github.com/tbleckert/openpanel-laravel/tree/main',
type: ['backend'],
},
];

View File

@@ -0,0 +1,23 @@
import type { IconProps } from './types';
export function AstroIcon({ className }: IconProps) {
return (
<svg
width="407"
height="512"
viewBox="0 0 407 512"
xmlns="http://www.w3.org/2000/svg"
fill="none"
className={className}
>
<path
d="M132.014 436.092C108.884 414.948 102.132 370.522 111.769 338.336C128.478 358.629 151.631 365.057 175.612 368.686C212.633 374.285 248.992 372.191 283.384 355.269C287.318 353.332 290.954 350.756 295.253 348.147C298.48 357.509 299.32 366.961 298.192 376.58C295.452 400.009 283.793 418.106 265.249 431.825C257.833 437.312 249.987 442.217 242.328 447.391C218.8 463.294 212.435 481.94 221.276 509.061C221.486 509.726 221.674 510.387 222.149 511.999C210.136 506.621 201.361 498.792 194.675 488.5C187.613 477.639 184.254 465.623 184.077 452.621C183.989 446.294 183.989 439.91 183.138 433.672C181.06 418.464 173.921 411.655 160.471 411.263C146.669 410.861 135.75 419.394 132.855 432.832C132.634 433.863 132.313 434.882 131.992 436.08L132.014 436.092Z"
fill="currentColor"
/>
<path
d="M0 332.975C0 332.975 68.4927 299.609 137.177 299.609L188.962 139.342C190.901 131.592 196.562 126.325 202.952 126.325C209.343 126.325 215.004 131.592 216.943 139.342L268.729 299.609C350.074 299.609 405.905 332.975 405.905 332.975C405.905 332.975 289.565 16.0411 289.337 15.4052C285.998 6.0349 280.361 0 272.762 0H133.155C125.556 0 120.146 6.0349 116.58 15.4052C116.328 16.0291 0 332.975 0 332.975Z"
fill="currentColor"
/>
</svg>
);
}

View File

@@ -0,0 +1,28 @@
import type { IconProps } from './types';
export function ExpressIcon({ className }: IconProps) {
return (
<svg
width="512"
height="512"
viewBox="0 0 512 512"
xmlns="http://www.w3.org/2000/svg"
fill="none"
className={className}
>
<g clipPath="url(#clip0_367_145)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M59.072 260.272C59.712 293.312 63.68 323.984 70.992 352.272C78.288 380.544 89.552 405.184 104.832 426.16C120.08 447.12 139.792 463.648 163.936 475.728C188.096 487.808 217.648 493.84 252.576 493.84C304.096 493.84 346.816 480.336 380.832 453.328C414.832 426.288 435.968 385.808 444.224 331.776H463.296C456.304 388.976 433.744 433.296 395.616 464.768C357.472 496.224 310.432 511.968 254.496 511.968C216.368 512.608 183.776 506.56 156.784 493.84C129.744 481.136 107.664 463.168 90.512 439.968C73.344 416.768 60.64 389.44 52.384 357.984C44.128 326.528 40 292.704 40 256.448C40 215.776 46.032 179.552 58.112 147.776C70.192 116 86.08 89.12 105.792 67.2C125.44 45.28 148.32 28.64 174.4 17.184C200.48 5.728 227.168 0 254.496 0C292.624 0 325.536 7.312 353.168 21.92C380.816 36.544 403.376 55.936 420.848 80.08C438.336 104.24 451.04 131.888 458.992 163.024C466.928 194.144 470.272 226.544 468.992 260.256H59.088L59.072 260.272ZM449.952 241.2C449.952 211.328 445.792 182.88 437.552 155.872C429.296 128.864 417.072 105.184 400.848 84.832C384.64 64.512 364.464 48.464 340.304 36.704C316.144 24.944 288.176 19.072 256.4 19.072C229.68 19.072 204.752 24.144 181.552 34.32C158.352 44.496 138.032 59.28 120.544 78.64C103.072 98.032 88.928 121.392 78.112 148.72C67.312 176.048 60.96 206.88 59.072 241.2H449.952Z"
fill="currentColor"
/>
</g>
<defs>
<clipPath id="clip0_367_145">
<rect width="512" height="512" fill="white" />
</clipPath>
</defs>
</svg>
);
}

View File

@@ -0,0 +1,19 @@
import type { IconProps } from './types';
export function FlutterIcon({ className }: IconProps) {
return (
<svg
width="512"
height="512"
viewBox="0 0 512 512"
xmlns="http://www.w3.org/2000/svg"
fill="none"
className={className}
>
<path
d="M302.543 237.44L173.167 366.56L302.527 495.92H449.951L320.783 366.592L449.951 237.424H302.559L302.543 237.44ZM302.271 16.064L62.0635 256L136.047 329.984L449.631 16.336H302.527L302.271 16.064Z"
fill="currentColor"
/>
</svg>
);
}

View File

@@ -0,0 +1,21 @@
import type { IconProps } from './types';
export function HtmlIcon({ className }: IconProps) {
return (
<svg
width="512"
height="512"
viewBox="0 0 512 512"
xmlns="http://www.w3.org/2000/svg"
fill="none"
className={className}
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M395.14 153.6H394.957H174.388L179.663 204.8H389.891C386.81 249.651 377.488 344.674 374.067 387.913L255.988 421.15V421.25L255.727 421.375L137.57 379.8L129.475 281.6H187.392L191.492 334.413L255.832 358.4H255.988L320.224 335.363L326.831 256H126.89C125.924 245.734 113.495 112.435 111.328 102.4H400.31C398.691 119.296 397.046 136.653 395.14 153.6ZM25.6016 0L67.5376 464.588L255.727 512L444.413 463.638L486.402 0H25.6016Z"
fill="currentColor"
/>
</svg>
);
}

View File

@@ -0,0 +1,26 @@
import type { IconProps } from './types';
export function KotlinIcon({ className }: IconProps) {
return (
<svg
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
>
<g clipPath="url(#clip0_367_180)">
<path
d="M27.744 512L268.832 266.672L512 512H27.744ZM0 0H256L0 266.672V0ZM285.84 0L0 298.672V512L512 0H285.84Z"
fill="currentColor"
/>
</g>
<defs>
<clipPath id="clip0_367_180">
<rect width="512" height="512" fill="white" />
</clipPath>
</defs>
</svg>
);
}

View File

@@ -0,0 +1,19 @@
import type { IconProps } from './types';
export function LaravelIcon({ className }: IconProps) {
return (
<svg
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
>
<path
d="M210.288 377.36L377.648 281.84L301.616 238.064L134.368 334.368L210.288 377.36ZM385.344 181.984L309.232 138.208V224.88L385.36 268.672L385.344 181.984ZM392.944 81.2479L316.848 125.024L392.944 168.8L469.024 125.008L392.944 81.2479ZM158.576 302.848L202.736 277.424V86.4799L126.608 130.288V321.232L158.576 302.848ZM118.992 29.5359L42.8963 73.3279L118.992 117.12L195.04 73.3279L118.992 29.5359ZM35.2643 86.4959V381.728L202.688 478.08V390.544L115.136 341.008C114.848 340.8 114.624 340.576 114.32 340.384C114.096 340.176 113.84 340.016 113.616 339.84L113.6 339.792C113.36 339.552 113.152 339.296 112.976 339.008L112.96 338.992C112.736 338.784 112.56 338.544 112.4 338.272L112.384 338.256H112.336C112.208 338.016 112.08 337.696 111.952 337.376L111.936 337.312C111.824 337.072 111.696 336.8 111.584 336.496L111.568 336.448C111.504 336.128 111.44 335.728 111.408 335.328V335.296C111.36 335.056 111.312 334.768 111.28 334.48V334.464V130.32L67.1683 104.88L35.2643 86.4959ZM385.36 381.712V294.96L217.936 390.544V478.064L385.36 381.712ZM476.624 224.88V138.208L400.528 182V268.672L476.624 224.88ZM491.6 123.04C491.776 123.648 491.888 124.336 491.888 125.056V229.264C491.888 232.08 490.368 234.528 488.096 235.84L488.064 235.856L400.576 286.24V386.096C400.576 388.896 399.056 391.344 396.8 392.672L396.768 392.688L214.112 497.808C213.728 498.016 213.28 498.208 212.816 498.336L212.768 498.352L212.288 498.56C211.712 498.736 211.04 498.832 210.352 498.832C209.664 498.832 208.992 498.736 208.352 498.544L208.4 498.56C208.16 498.496 207.968 498.416 207.776 498.304L207.792 498.32C207.296 498.144 206.88 497.984 206.48 497.792L206.544 497.824L23.9363 392.704C21.6323 391.36 20.1123 388.912 20.1123 386.112V73.3439C20.1123 72.6399 20.2243 71.9519 20.4163 71.3119L20.4003 71.3599C20.4643 71.1199 20.6083 70.9599 20.6883 70.7199C20.8323 70.2559 20.9923 69.8719 21.1683 69.5039L21.1523 69.5519C21.2803 69.2959 21.4403 69.0719 21.6163 68.8799L22.2883 67.9679L23.0403 67.4239C23.3283 67.1839 23.5843 66.9439 23.8723 66.7359H23.8883L115.216 14.1759C116.304 13.5359 117.616 13.1519 119.008 13.1519C120.4 13.1519 121.712 13.5359 122.832 14.1919L122.8 14.1759L214.16 66.7359C214.464 66.9439 214.72 67.1679 214.976 67.4079L215.744 67.9519C216 68.2399 216.144 68.5599 216.416 68.8639C216.608 69.0559 216.768 69.2799 216.912 69.5199L216.928 69.5359C217.088 69.8559 217.248 70.2399 217.392 70.6399L217.408 70.7039L217.664 71.3439C217.84 71.9039 217.952 72.5599 217.952 73.2319C217.952 73.2639 217.952 73.2959 217.952 73.3279V268.656L294.048 224.864V125.008C294.048 124.992 294.048 124.976 294.048 124.976C294.048 124.288 294.144 123.616 294.32 122.976L294.304 123.024C294.368 122.816 294.512 122.624 294.56 122.384C294.72 121.904 294.88 121.52 295.072 121.136L295.04 121.2C295.184 120.96 295.408 120.8 295.552 120.528C295.792 120.224 295.984 119.92 296.224 119.664C296.448 119.456 296.688 119.264 296.944 119.104L296.96 119.088C297.248 118.88 297.488 118.624 297.792 118.448H297.808L389.136 65.8719C390.224 65.2319 391.536 64.8479 392.928 64.8479C394.32 64.8479 395.632 65.2319 396.752 65.8879L396.72 65.8719L488.048 118.448C488.368 118.656 488.592 118.88 488.896 119.072C489.136 119.28 489.408 119.44 489.632 119.632C489.888 119.92 490.08 120.24 490.32 120.528C490.496 120.72 490.656 120.944 490.8 121.168L490.816 121.184C491.008 121.536 491.168 121.936 491.296 122.352L491.312 122.4C491.44 122.592 491.536 122.8 491.616 123.024L491.6 123.04Z"
fill="currentColor"
/>
</svg>
);
}

View File

@@ -0,0 +1,26 @@
import type { IconProps } from './types';
export function NextjsIcon({ className }: IconProps) {
return (
<svg
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
>
<g clipPath="url(#clip0_367_158)">
<path
d="M239.234 0.137781C238.133 0.237864 234.629 0.588155 231.476 0.838362C158.755 7.3938 90.6385 46.6264 47.4964 106.926C23.4729 140.454 8.10792 178.486 2.30225 218.769C0.250244 232.831 0 236.984 0 256.05C0 275.116 0.250244 279.269 2.30225 293.331C16.2158 389.461 84.6326 470.228 177.423 500.153C194.039 505.507 211.557 509.16 231.476 511.362C239.234 512.213 272.766 512.213 280.524 511.362C314.908 507.559 344.036 499.052 372.764 484.39C377.168 482.138 378.019 481.537 377.419 481.037C377.018 480.737 358.25 455.566 335.728 425.14L294.788 369.845L243.488 293.932C215.26 252.197 192.038 218.069 191.837 218.069C191.637 218.019 191.437 251.747 191.337 292.931C191.187 365.041 191.137 367.943 190.236 369.644C188.935 372.096 187.934 373.097 185.831 374.198C184.23 374.999 182.829 375.149 175.271 375.149H166.613L164.31 373.698C162.809 372.747 161.708 371.496 160.957 370.045L159.906 367.793L160.006 267.46L160.156 167.076L161.708 165.125C162.509 164.074 164.21 162.723 165.412 162.072C167.464 161.071 168.264 160.971 176.923 160.971C187.133 160.971 188.834 161.372 191.487 164.274C192.238 165.075 220.015 206.909 253.247 257.301C286.48 307.693 331.924 376.5 354.246 410.278L394.786 471.679L396.838 470.328C415.005 458.518 434.224 441.704 449.439 424.19C481.821 387.009 502.691 341.671 509.698 293.331C511.75 279.269 512 275.116 512 256.05C512 236.984 511.75 232.831 509.698 218.769C495.784 122.639 427.367 41.8724 334.577 11.9476C318.211 6.64318 300.794 2.99015 281.275 0.788321C276.47 0.287906 243.388 -0.262551 239.234 0.137781ZM344.036 154.966C346.438 156.167 348.39 158.469 349.091 160.871C349.491 162.172 349.591 189.995 349.491 252.697L349.341 342.672L333.476 318.352L317.56 294.032V228.627C317.56 186.342 317.76 162.573 318.061 161.422C318.861 158.619 320.613 156.417 323.015 155.116C325.067 154.066 325.818 153.965 333.676 153.965C341.083 153.965 342.384 154.066 344.036 154.966Z"
fill="currentColor"
/>
</g>
<defs>
<clipPath id="clip0_367_158">
<rect width="512" height="512" fill="white" />
</clipPath>
</defs>
</svg>
);
}

View File

@@ -0,0 +1,19 @@
import type { IconProps } from './types';
export function NodeIcon({ className }: IconProps) {
return (
<svg
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
>
<path
d="M482.584 147.869V363.982C482.584 378.007 475.038 391.066 462.912 398.125L275.664 506.241C269.675 509.715 262.882 511.5 255.945 511.5C249.107 511.5 242.296 509.715 236.306 506.241L173.785 469.251C164.459 464.044 169.01 462.192 172.093 461.123C184.547 456.801 187.066 455.805 200.361 448.26C201.748 447.467 203.577 447.777 205.008 448.603L253.039 477.122C254.78 478.103 257.239 478.103 258.84 477.122L446.103 369.036C447.847 368.04 448.965 366.053 448.965 363.983V147.869C448.965 145.752 447.847 143.775 446.059 142.706L258.873 34.7158C257.147 33.7058 254.843 33.7058 253.105 34.7158L65.9611 142.736C64.1431 143.776 62.9961 145.815 62.9961 147.869V363.982C62.9961 366.051 64.1421 367.991 65.9501 368.972L117.249 398.626C145.078 412.529 162.124 396.141 162.124 379.67V166.309C162.124 163.292 164.547 160.913 167.563 160.913H191.31C194.279 160.913 196.739 163.291 196.739 166.309V379.671C196.739 416.817 176.503 438.125 141.287 438.125C130.471 438.125 121.94 438.125 98.1491 426.412L49.0511 398.125C36.9181 391.13 29.4131 378.008 29.4131 363.982V147.869C29.4131 133.826 36.9181 120.719 49.0511 113.734L236.307 5.52575C248.157 -1.17525 263.915 -1.17525 275.664 5.52575L462.912 113.734C475.038 120.748 482.584 133.826 482.584 147.869ZM321.17 343.367C265.29 343.367 252.995 329.319 248.876 301.531C248.399 298.565 245.858 296.356 242.813 296.356H215.507C212.125 296.356 209.411 299.059 209.411 302.46C209.411 338.02 228.765 380.431 321.17 380.431C388.076 380.431 426.439 354.092 426.439 308.088C426.439 262.465 395.612 250.328 330.73 241.738C265.151 233.06 258.487 228.591 258.487 213.23C258.487 200.569 264.13 183.649 312.703 183.649C356.077 183.649 372.068 192.998 378.643 222.225C379.222 224.98 381.726 226.99 384.566 226.99H411.975C413.675 226.99 415.29 226.26 416.445 225.047C417.603 223.767 418.218 222.1 418.056 220.352C413.815 169.975 380.343 146.508 312.702 146.508C252.493 146.508 216.584 171.922 216.584 214.51C216.584 260.727 252.313 273.51 310.084 279.212C379.222 285.994 384.588 296.095 384.588 309.7C384.588 333.299 365.654 343.367 321.17 343.367Z"
fill="currentColor"
/>
</svg>
);
}

View File

@@ -0,0 +1,28 @@
import type { IconProps } from './types';
export function PythonIcon({ className }: IconProps) {
return (
<svg
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
>
<g clipPath="url(#clip0_367_173)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M326.246 472.525C313.907 472.525 303.923 462.491 303.923 450.088C303.923 437.684 313.907 427.675 326.246 427.675C338.585 427.675 348.57 437.684 348.57 450.088C348.57 462.491 338.585 472.525 326.246 472.525ZM257.843 512C387.84 512 379.725 455.338 379.725 455.338L379.571 396.638H255.539V379.013H428.826C428.826 379.013 512 388.509 512 256.675C512 124.841 439.424 129.488 439.424 129.488H396.083V190.688C396.083 190.688 398.413 263.638 324.659 263.638H201.626C201.626 263.638 132.505 262.541 132.505 330.813V443.675C132.505 443.675 122.009 512 257.843 512ZM185.779 39.475C198.118 39.475 208.077 49.5088 208.077 61.9125C208.077 74.3162 198.118 84.325 185.779 84.325C173.44 84.325 163.456 74.3162 163.456 61.9125C163.456 49.5088 173.44 39.475 185.779 39.475ZM254.157 0C124.186 0 132.301 56.6625 132.301 56.6625L132.455 115.363H256.487V132.988H83.1742C83.1742 132.988 0 123.491 0 255.325C0 387.159 72.6016 382.513 72.6016 382.513H115.917V321.313C115.917 321.313 113.587 248.363 187.366 248.363H310.374C310.374 248.363 379.495 249.459 379.495 181.188V68.325C379.495 68.325 389.991 0 254.157 0Z"
fill="currentColor"
/>
</g>
<defs>
<clipPath id="clip0_367_173">
<rect width="512" height="512" fill="white" />
</clipPath>
</defs>
</svg>
);
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,32 @@
import type { IconProps } from './types';
export function RemixIcon({ className }: IconProps) {
return (
<svg
width="445"
height="512"
viewBox="0 0 445 512"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
>
<g clipPath="url(#clip0_367_139)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M425.345 394.844C429.951 454 429.951 481.73 429.951 512H293.08C293.08 505.407 293.198 499.375 293.318 493.26C293.688 474.247 294.074 454.421 290.994 414.383C286.922 355.766 261.681 342.741 215.268 342.741H174.148H0V236.093H221.783C280.408 236.093 309.722 218.258 309.722 171.039C309.722 129.52 280.408 104.359 221.783 104.359H0V0H246.21C378.933 0 444.888 62.6867 444.888 162.822C444.888 237.721 398.476 286.567 335.778 294.709C388.704 305.292 419.646 335.414 425.345 394.844Z"
fill="currentColor"
/>
<path
d="M0 512V432.497H144.721C168.894 432.497 174.143 450.426 174.143 461.118V512H0Z"
fill="currentColor"
/>
</g>
<defs>
<clipPath id="clip0_367_139">
<rect width="444.888" height="512" fill="white" />
</clipPath>
</defs>
</svg>
);
}

View File

@@ -0,0 +1,27 @@
import type { IconProps } from './types';
export function RestIcon({ className }: IconProps) {
return (
<svg
width="512"
height="513"
viewBox="0 0 512 513"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
>
<path
d="M346.706 381.093H140.062C134.263 381.093 129.513 376.342 129.513 370.544V164.459C129.513 160.616 126.369 157.473 122.527 157.473C118.685 157.473 115.541 160.616 115.541 164.459V370.544C115.541 384.097 126.509 395.065 140.062 395.065H346.706C350.548 395.065 353.692 391.921 353.692 388.079C353.692 384.236 350.618 381.093 346.706 381.093Z"
fill="currentColor"
/>
<path
d="M498.022 177.802C505.707 177.802 511.994 171.515 511.994 163.83C511.994 156.146 505.707 149.858 498.022 149.858H449.33V110.178C449.33 83.2123 427.394 61.2764 400.428 61.2764H381.008V14.261C381.008 6.57641 374.72 0.289062 367.036 0.289062C359.351 0.289062 353.064 6.57641 353.064 14.261V61.2764H320.579V14.261C320.579 6.57641 314.292 0.289062 306.607 0.289062C298.923 0.289062 292.635 6.57641 292.635 14.261V61.2764H260.151V14.261C260.151 6.57641 253.863 0.289062 246.179 0.289062C238.494 0.289062 232.207 6.57641 232.207 14.261V61.2764H199.722V14.261C199.722 6.57641 193.435 0.289062 185.75 0.289062C178.066 0.289062 171.778 6.57641 171.778 14.261V61.2764H111.839C84.8733 61.2764 62.9374 83.2123 62.9374 110.178V149.858H14.2453C6.56079 149.858 0.273438 156.146 0.273438 163.83C0.273438 171.515 6.56079 177.802 14.2453 177.802H62.9374V210.287H14.2453C6.56079 210.287 0.273438 216.574 0.273438 224.259C0.273438 231.943 6.56079 238.23 14.2453 238.23H62.9374V270.715H14.2453C6.56079 270.715 0.273438 277.002 0.273438 284.687C0.273438 292.371 6.56079 298.659 14.2453 298.659H62.9374V331.143H14.2453C6.56079 331.143 0.273438 337.431 0.273438 345.115C0.273438 352.8 6.56079 359.087 14.2453 359.087H62.9374V398.767C62.9374 425.733 84.8733 447.669 111.839 447.669H133.356V498.317C133.356 506.002 139.643 512.289 147.328 512.289C155.012 512.289 161.299 506.002 161.299 498.317V447.669H193.784V498.317C193.784 506.002 200.072 512.289 207.756 512.289C215.441 512.289 221.728 506.002 221.728 498.317V447.669H254.213V498.317C254.213 506.002 260.5 512.289 268.184 512.289C275.869 512.289 282.156 506.002 282.156 498.317V447.669H314.641V498.317C314.641 506.002 320.928 512.289 328.613 512.289C336.297 512.289 342.585 506.002 342.585 498.317V447.669H400.428C427.394 447.669 449.33 425.733 449.33 398.767V359.087H498.022C505.707 359.087 511.994 352.8 511.994 345.115C511.994 337.431 505.707 331.143 498.022 331.143H449.33V298.659H498.022C505.707 298.659 511.994 292.371 511.994 284.687C511.994 277.002 505.707 270.715 498.022 270.715H449.33V238.23H498.022C505.707 238.23 511.994 231.943 511.994 224.259C511.994 216.574 505.707 210.287 498.022 210.287H449.33V177.802H498.022ZM421.386 398.698C421.386 410.224 411.955 419.655 400.428 419.655H111.839C100.312 419.655 90.8812 410.224 90.8812 398.698V110.178C90.8812 98.6512 100.312 89.2202 111.839 89.2202H400.428C411.955 89.2202 421.386 98.6512 421.386 110.178V398.698Z"
fill="currentColor"
/>
<path
d="M178.485 272.043H213.624L221.309 292.022H240.59L205.381 204.139H186.589L152.357 292.022H171.219L178.485 272.043ZM195.81 224.608L207.896 257.232H183.934L195.81 224.608ZM267.765 258.909H279.362C287.396 258.909 293.543 258.49 297.805 257.651C300.949 256.953 304.022 255.556 307.026 253.46C310.03 251.364 312.545 248.5 314.501 244.797C316.457 241.095 317.435 236.554 317.435 231.175C317.435 224.189 315.759 218.46 312.336 214.059C308.912 209.658 304.721 206.794 299.691 205.466C296.408 204.558 289.352 204.139 278.593 204.139H250.021V292.022H267.765V258.909ZM267.765 219.019H276.358C282.785 219.019 286.977 219.229 289.142 219.648C292.006 220.137 294.382 221.464 296.268 223.56C298.154 225.656 299.062 228.311 299.062 231.454C299.062 234.039 298.364 236.344 297.036 238.3C295.709 240.256 293.823 241.724 291.517 242.632C289.142 243.54 284.462 244.029 277.476 244.029H267.765V219.019ZM331.407 204.139H349.152V292.022H331.407V204.139Z"
fill="currentColor"
/>
</svg>
);
}

View File

@@ -0,0 +1,21 @@
import type { IconProps } from './types';
export function SwiftIcon({ className }: IconProps) {
return (
<svg
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M315.443 25.6001C540.493 179.828 467.712 349.888 467.712 349.888C467.712 349.888 531.712 422.712 505.83 486.4C505.83 486.4 479.437 441.8 435.174 441.8C392.499 441.8 367.437 486.4 281.574 486.4C90.3934 486.4 0 325.438 0 325.438C172.237 439.632 289.843 358.763 289.843 358.763C212.249 313.364 47.1805 96.2501 47.1805 96.2501C190.924 219.576 253.056 252.1 253.056 252.1C215.987 221.198 111.974 70.2001 111.974 70.2001C195.174 155.117 360.499 273.588 360.499 273.588C407.45 142.472 315.443 25.6001 315.443 25.6001Z"
fill="currentColor"
/>
</svg>
);
}

View File

@@ -0,0 +1,3 @@
export interface IconProps {
className?: string;
}

View File

@@ -0,0 +1,19 @@
import type { IconProps } from './types';
export function VueIcon({ className }: IconProps) {
return (
<svg
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
>
<path
d="M407.772 42.6665H320L256 147.2L201.143 42.6665H0L256 490.667L512 42.6665H407.772ZM64 79.9998H126.172L256 311.467L385.828 79.9998H448L256 416L64 79.9998Z"
fill="currentColor"
/>
</svg>
);
}

View File

@@ -5,7 +5,11 @@
"scripts": {
"typecheck": "tsc --noEmit"
},
"dependencies": {
"react": "18.2.0"
},
"devDependencies": {
"@types/react": "^18.2.20",
"@openpanel/tsconfig": "workspace:*",
"prisma": "^5.1.1",
"typescript": "^5.2.2"