@solidxai/solidctl 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +98 -0
  2. package/dist/app.module.d.ts +2 -0
  3. package/dist/app.module.js +17 -0
  4. package/dist/app.module.js.map +1 -0
  5. package/dist/commands/build.command.d.ts +2 -0
  6. package/dist/commands/build.command.js +139 -0
  7. package/dist/commands/build.command.js.map +1 -0
  8. package/dist/commands/create-app/create-app.command.d.ts +2 -0
  9. package/dist/commands/create-app/create-app.command.js +71 -0
  10. package/dist/commands/create-app/create-app.command.js.map +1 -0
  11. package/dist/commands/create-app/helpers.d.ts +59 -0
  12. package/dist/commands/create-app/helpers.js +219 -0
  13. package/dist/commands/create-app/helpers.js.map +1 -0
  14. package/dist/commands/create-app/setup-questions.d.ts +31 -0
  15. package/dist/commands/create-app/setup-questions.js +70 -0
  16. package/dist/commands/create-app/setup-questions.js.map +1 -0
  17. package/dist/commands/info.command.d.ts +2 -0
  18. package/dist/commands/info.command.js +40 -0
  19. package/dist/commands/info.command.js.map +1 -0
  20. package/dist/commands/local-upgrade.command.d.ts +2 -0
  21. package/dist/commands/local-upgrade.command.js +94 -0
  22. package/dist/commands/local-upgrade.command.js.map +1 -0
  23. package/dist/commands/release.command.d.ts +2 -0
  24. package/dist/commands/release.command.js +181 -0
  25. package/dist/commands/release.command.js.map +1 -0
  26. package/dist/commands/seed.command.d.ts +2 -0
  27. package/dist/commands/seed.command.js +40 -0
  28. package/dist/commands/seed.command.js.map +1 -0
  29. package/dist/commands/test-data.command.d.ts +2 -0
  30. package/dist/commands/test-data.command.js +38 -0
  31. package/dist/commands/test-data.command.js.map +1 -0
  32. package/dist/commands/upgrade.command.d.ts +2 -0
  33. package/dist/commands/upgrade.command.js +48 -0
  34. package/dist/commands/upgrade.command.js.map +1 -0
  35. package/dist/helper.d.ts +1 -0
  36. package/dist/helper.js +19 -0
  37. package/dist/helper.js.map +1 -0
  38. package/dist/main.d.ts +2 -0
  39. package/dist/main.js +34 -0
  40. package/dist/main.js.map +1 -0
  41. package/dist/shims/solid-shim.js +23 -0
  42. package/dist/tsconfig.build.tsbuildinfo +1 -0
  43. package/package.json +99 -0
  44. package/templates/dot-templates/dot.vscode.template/launch.json +35 -0
  45. package/templates/nest-template/README.md +73 -0
  46. package/templates/nest-template/bin/solid +2 -0
  47. package/templates/nest-template/dot-templates/dot.dockerignore.template +1 -0
  48. package/templates/nest-template/dot-templates/dot.eslintrc.template.js +25 -0
  49. package/templates/nest-template/dot-templates/dot.gitignore.template +56 -0
  50. package/templates/nest-template/dot-templates/dot.prettierrc.template +4 -0
  51. package/templates/nest-template/nest-cli.json +8 -0
  52. package/templates/nest-template/nodemon.json +13 -0
  53. package/templates/nest-template/package.json +132 -0
  54. package/templates/nest-template/src/app-default-database.module.ts +75 -0
  55. package/templates/nest-template/src/app.controller.spec.ts +22 -0
  56. package/templates/nest-template/src/app.module.ts +51 -0
  57. package/templates/nest-template/src/app.service.ts +32 -0
  58. package/templates/nest-template/src/database.utils.ts +18 -0
  59. package/templates/nest-template/src/main-cli.ts +81 -0
  60. package/templates/nest-template/src/main.ts +116 -0
  61. package/templates/nest-template/test/app.e2e-spec.ts +24 -0
  62. package/templates/nest-template/test/jest-e2e.json +9 -0
  63. package/templates/nest-template/tsconfig.build.json +4 -0
  64. package/templates/nest-template/tsconfig.json +22 -0
  65. package/templates/next-template/README.md +36 -0
  66. package/templates/next-template/app/GlobalProvider.tsx +23 -0
  67. package/templates/next-template/app/admin/core/[moduleName]/[modelName]/form/[id]/page.tsx +19 -0
  68. package/templates/next-template/app/admin/core/[moduleName]/[modelName]/kanban/page.tsx +18 -0
  69. package/templates/next-template/app/admin/core/[moduleName]/[modelName]/list/page.tsx +18 -0
  70. package/templates/next-template/app/admin/core/[moduleName]/home/page.tsx +15 -0
  71. package/templates/next-template/app/admin/core/[moduleName]/settings/[settings]/page.tsx +11 -0
  72. package/templates/next-template/app/admin/layout.tsx +11 -0
  73. package/templates/next-template/app/admin/loading.tsx +8 -0
  74. package/templates/next-template/app/admin/page.tsx +10 -0
  75. package/templates/next-template/app/api/auth/[...nextauth]/route.ts +6 -0
  76. package/templates/next-template/app/auth/confirm-forgot-password/page.tsx +12 -0
  77. package/templates/next-template/app/auth/forgot-password/page.tsx +11 -0
  78. package/templates/next-template/app/auth/initiate-forgot-password/page.tsx +11 -0
  79. package/templates/next-template/app/auth/initiate-forgot-password-thank-you/page.tsx +11 -0
  80. package/templates/next-template/app/auth/initiate-google-oauth/page.tsx +9 -0
  81. package/templates/next-template/app/auth/initiate-login/page.tsx +13 -0
  82. package/templates/next-template/app/auth/initiate-register/page.tsx +14 -0
  83. package/templates/next-template/app/auth/layout.tsx +10 -0
  84. package/templates/next-template/app/auth/login/page.tsx +12 -0
  85. package/templates/next-template/app/auth/otp-verify/page.tsx +12 -0
  86. package/templates/next-template/app/auth/register/page.tsx +12 -0
  87. package/templates/next-template/app/auth/reset-password/page.tsx +13 -0
  88. package/templates/next-template/app/auth/sso/page.tsx +80 -0
  89. package/templates/next-template/app/layout.tsx +56 -0
  90. package/templates/next-template/app/solid-extensions.ts +8 -0
  91. package/templates/next-template/dot-templates/dot.gitignore.template +44 -0
  92. package/templates/next-template/eslint.config.mjs +16 -0
  93. package/templates/next-template/middleware.ts +23 -0
  94. package/templates/next-template/next-env.d.ts +5 -0
  95. package/templates/next-template/next-solidx-run.js +18 -0
  96. package/templates/next-template/next.config.js +47 -0
  97. package/templates/next-template/package.json +79 -0
  98. package/templates/next-template/public/favicon.ico +0 -0
  99. package/templates/next-template/public/file.svg +1 -0
  100. package/templates/next-template/public/globe.svg +1 -0
  101. package/templates/next-template/public/next.svg +1 -0
  102. package/templates/next-template/public/themes/solid-dark-purple/theme.css +6203 -0
  103. package/templates/next-template/public/themes/solid-light-purple/solid-login-light.png +0 -0
  104. package/templates/next-template/public/themes/solid-light-purple/theme.css +6256 -0
  105. package/templates/next-template/public/vercel.svg +1 -0
  106. package/templates/next-template/public/window.svg +1 -0
  107. package/templates/next-template/redux/store.ts +52 -0
  108. package/templates/next-template/tsconfig.json +33 -0
  109. package/templates/next-template/types/index.d.ts +7 -0
  110. package/templates/next-template/types/layout.d.ts +94 -0
  111. package/templates/next-template/types/next.d.ts +46 -0
@@ -0,0 +1,80 @@
1
+ "use client";
2
+
3
+ import { getSession, signIn } from "next-auth/react";
4
+ import React, { useEffect, useState } from "react";
5
+ import { useRouter, useSearchParams } from "next/navigation";
6
+ import { Card } from "primereact/card";
7
+ import { ProgressSpinner } from "primereact/progressspinner";
8
+
9
+ type Params = {
10
+ params: {
11
+ accessToken: string;
12
+ };
13
+ };
14
+ export default function page() {
15
+ const router = useRouter();
16
+ const [error, setError] = useState<any>();
17
+ const [success, setSuccess] = useState(false);
18
+ const [isLoading, setIsLoading] = useState(true);
19
+
20
+
21
+ const searchParams = useSearchParams()
22
+
23
+
24
+ const fn = async () => {
25
+ const email = "";
26
+ const password = "";
27
+ const accessToken = searchParams.get('accessToken')
28
+ const response = await signIn("credentials", {
29
+ redirect: false,
30
+ email,
31
+ password,
32
+ accessToken
33
+ });
34
+ if (response?.error) {
35
+ setIsLoading(false);
36
+ setError(response.error);
37
+ } else {
38
+ setIsLoading(false);
39
+ setSuccess(true);
40
+ router.push("/admin/dashboard");
41
+ }
42
+ }
43
+ useEffect(() => {
44
+ fn()
45
+ }, [])
46
+
47
+ return (
48
+ <div className="card flex justify-content-center align-items-center" style={{ height: '80vh' }}>
49
+ <Card className="custom-card md:w-25rem" style={{
50
+ boxShadow: 'rgba(0, 0, 0, 0.16) 0px 10px 36px 0px, rgba(0, 0, 0, 0.06) 0px 0px 0px 1px'
51
+ }}>
52
+ <div style={{
53
+ position: 'relative',
54
+ display: 'flex',
55
+ justifyContent: 'center',
56
+ zIndex: 1,
57
+ // marginBottom: '50px'
58
+ }}>
59
+ {isLoading
60
+ ? <>
61
+ <ProgressSpinner style={{ width: '50px', height: '50px' }} />
62
+ <style>{`
63
+ .p-progress-spinner circle {
64
+ stroke: blue !important; /* Make the spinner blue */
65
+ }
66
+ ` }</style>
67
+ </>
68
+ : success
69
+ ? <i className="pi pi-check" style={{color: 'green', fontSize: '30px', fontWeight: '700'}}></i>
70
+ : <i className="pi pi-times" style={{color: 'red', fontSize: '30px', fontWeight: '700'}}></i>}
71
+ </div>
72
+ <p className="m-20" style={{textAlign: 'center'}}>
73
+ {isLoading && `Please wait while we authenticate your profile.`}
74
+ {error && `${error} Your not authenticated`}
75
+ </p>
76
+ </Card>
77
+ </div>
78
+ );
79
+ };
80
+
@@ -0,0 +1,56 @@
1
+ import "@solidxai/core-ui";
2
+ import "@solidxai/core-ui";
3
+ import "@solidxai/core-ui"
4
+ import "primeicons/primeicons.css";
5
+ import "primeflex/primeflex.css";
6
+ import { Inter } from "next/font/google";
7
+ import { GlobalProvider } from "./GlobalProvider";
8
+ import { PrimeReactProvider } from "primereact/api";
9
+ import { LayoutProvider } from "@solidxai/core-ui";
10
+ import { SolidThemeProvider } from "@solidxai/core-ui";
11
+
12
+ const inter = Inter({
13
+ subsets: ["latin"],
14
+ weight: ['400', '700'], // Define weights, e.g., '400', '500', '700'
15
+ variable: '--font-inter',
16
+ });
17
+
18
+ // Fetch a list of entities dynamically
19
+ async function fetchEntities() {
20
+ const url = `${process.env.NEXT_PUBLIC_BACKEND_API_URL}/api/model-metadata/public`;
21
+
22
+ const response = await fetch(url, { cache: 'no-store' });
23
+ const data = await response.json(); // Assume this returns an array of entity names
24
+ const entities = data.data.records.map((r: any) => r.singularName);
25
+
26
+ return entities
27
+ }
28
+
29
+ export default async function RootLayout({ children }: { children: React.ReactNode }) {
30
+ const solidEntities = await fetchEntities();
31
+
32
+ return (
33
+ <html lang="en" suppressHydrationWarning>
34
+ {/* <Head /> */}
35
+ <head>
36
+ <meta content="width=device-width, initial-scale=1" name="viewport" />
37
+ <meta name="description" content="Generated by create next app" />
38
+ <link rel="icon" href="/favicon.ico" />
39
+ <link id="theme-css" href={`/themes/solid-light-purple/theme.css`} rel="stylesheet"></link>
40
+ <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined" rel="stylesheet" />
41
+ <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded" rel="stylesheet" />
42
+ <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp" rel="stylesheet" />
43
+ </head>
44
+ <body>
45
+ <GlobalProvider entities={solidEntities}>
46
+ <PrimeReactProvider>
47
+ <LayoutProvider>
48
+ <SolidThemeProvider />
49
+ {children}
50
+ </LayoutProvider>
51
+ </PrimeReactProvider>
52
+ </GlobalProvider>
53
+ </body>
54
+ </html>
55
+ );
56
+ }
@@ -0,0 +1,8 @@
1
+ import { registerExtensionComponent, registerExtensionFunction } from "@solidxai/core-ui";
2
+
3
+ // Registering a custom component
4
+ // registerExtensionComponent("BookFormViewDynamicComponent", ImageGrid12Column);
5
+
6
+ // Registering a custom function
7
+ // registerExtensionFunction("bookFormViewChangeHandler", handleBookFormViewChange);
8
+ // registerExtensionFunction("bookFormViewBlurHandler", handleBookFormViewBlur);
@@ -0,0 +1,44 @@
1
+ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
+
3
+ # dependencies
4
+ /node_modules
5
+ /.pnp
6
+ .pnp.*
7
+ .yarn/*
8
+ !.yarn/patches
9
+ !.yarn/plugins
10
+ !.yarn/releases
11
+ !.yarn/versions
12
+
13
+ # testing
14
+ /coverage
15
+
16
+ # next.js
17
+ /.next/
18
+ /out/
19
+
20
+ # production
21
+ /build
22
+
23
+ # misc
24
+ .DS_Store
25
+ *.pem
26
+
27
+ # debug
28
+ npm-debug.log*
29
+ yarn-debug.log*
30
+ yarn-error.log*
31
+ .pnpm-debug.log*
32
+
33
+ # env files (can opt-in for committing if needed)
34
+ .env*
35
+
36
+ # vercel
37
+ .vercel
38
+
39
+ # typescript
40
+ *.tsbuildinfo
41
+ next-env.d.ts
42
+
43
+ public/themes
44
+ local_packages
@@ -0,0 +1,16 @@
1
+ import { dirname } from "path";
2
+ import { fileURLToPath } from "url";
3
+ import { FlatCompat } from "@eslint/eslintrc";
4
+
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+
8
+ const compat = new FlatCompat({
9
+ baseDirectory: __dirname,
10
+ });
11
+
12
+ const eslintConfig = [
13
+ ...compat.extends("next/core-web-vitals", "next/typescript"),
14
+ ];
15
+
16
+ export default eslintConfig;
@@ -0,0 +1,23 @@
1
+ import { withAuth } from "next-auth/middleware";
2
+ import { NextResponse } from "next/server";
3
+
4
+ export default withAuth(
5
+ function middleware(req) {
6
+ // authorize roles
7
+ const url = req?.nextUrl?.pathname;
8
+ const user = req?.nextauth?.token?.user
9
+
10
+ // if (url?.startsWith("/admin") && user?.role !== "admin") {
11
+ // return NextResponse.redirect(new URL("/", req.url));
12
+ // }
13
+ },
14
+ {
15
+ callbacks: {
16
+ authorized: ({ token }) => !!token,
17
+ },
18
+ }
19
+ );
20
+
21
+ export const config = {
22
+ matcher: ["/me/:path*", "/bookings/:path*","/admin/:path*"],
23
+ };
@@ -0,0 +1,5 @@
1
+ /// <reference types="next" />
2
+ /// <reference types="next/image-types/global" />
3
+
4
+ // NOTE: This file should not be edited
5
+ // see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ const { spawn } = require("child_process");
3
+ const path = require("path");
4
+
5
+ // Load .env (and .env.local if you use it)
6
+ require("dotenv").config({ path: path.resolve(process.cwd(), ".env") });
7
+
8
+ const port = process.env.PORT || "3001";
9
+
10
+ const mode = process.argv[2]; // "dev" or "start"
11
+ const args =
12
+ mode === "dev"
13
+ ? ["dev", "-p", port]
14
+ : ["start", "-p", port];
15
+
16
+ const child = spawn("next", args, { stdio: "inherit", shell: true });
17
+
18
+ child.on("exit", (code) => process.exit(code ?? 0));
@@ -0,0 +1,47 @@
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {
3
+ async redirects() {
4
+ return [
5
+ {
6
+ source: '/',
7
+ destination: '/auth/login',
8
+ permanent: false, // Set to true if you want it to be a permanent redirect (301)
9
+ },
10
+ ];
11
+ },
12
+ env: {
13
+ API_URL: process.env.API_URL,
14
+ NEXTAUTH_URL: process.env.NEXTAUTH_URL,
15
+ NEXT_PUBLIC_BACKEND_API_URL: process.env.NEXT_PUBLIC_BACKEND_API_URL,
16
+ SOLIDX_ON_APPLICATION_MOUNT_HANDLER:process.env.SOLIDX_ON_APPLICATION_MOUNT_HANDLER,
17
+
18
+ NEXT_PUBLIC_ENABLE_CUSTOM_HEADER_FOOTER: process.env.NEXT_PUBLIC_ENABLE_CUSTOM_HEADER_FOOTER,
19
+ SOLID_APP_TITLE: process.env.NEXT_PUBLIC_SOLID_APP_TITLE,
20
+ SOLID_APP_DESCRIPTION: process.env.NEXT_PUBLIC_SOLID_APP_DESCRIPTION,
21
+ NEXT_PUBLIC_DEFAULT_MENU_KEY: process.env.NEXT_PUBLIC_DEFAULT_MENU_KEY,
22
+
23
+ NEXTAUTH_SECRET: "KSDFJKLSDJFLKSDFJSLDKF934KJLDJGDLKGFJDF",
24
+ REVALIDATE_TOKEN: "JK34J50JSDKFLJSDKF034I5DKFJSDK4IJFKSDJFL",
25
+ },
26
+ images: {
27
+ remotePatterns: getRemotePatterns(),
28
+ },
29
+ productionBrowserSourceMaps: true,
30
+ transpilePackages: ['@solidxai/core-ui'],
31
+ experimental: {
32
+ externalDir: true,
33
+ },
34
+ };
35
+
36
+ function getRemotePatterns(){
37
+ try {
38
+ return JSON.parse(process.env.NEXT_PUBLIC_REMOTE_PATTERNS || '[]');
39
+ } catch (error) {
40
+ return [];
41
+ }
42
+ }
43
+
44
+
45
+
46
+
47
+ module.exports = nextConfig;
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "next-template",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "postinstall": "copyfiles -u 5 \"node_modules/@solidxai/core-ui/dist/resources/themes/**/*\" public",
7
+ "build": "next build",
8
+ "lint": "next lint",
9
+ "seeder": "tsc seeder/seeder.ts --outDir .temp && node .temp/seeder/seeder.js && rm -rf .temp",
10
+ "dev": "node next-solidx-run.js dev",
11
+ "start": "node next-solidx-run.js start",
12
+ "solidx:dev": "rm -rf .next && npm run dev"
13
+ },
14
+ "dependencies": {
15
+ "@codemirror/lang-javascript": "^6.2.2",
16
+ "@codemirror/theme-one-dark": "^6.1.2",
17
+ "@hello-pangea/dnd": "^17.0.0",
18
+ "@reduxjs/toolkit": "^1.9.5",
19
+ "@solidxai/core-ui": "^1.1.204",
20
+ "@uiw/react-codemirror": "^4.23.3",
21
+ "axios": "^1.7.2",
22
+ "bcryptjs": "^2.4.3",
23
+ "bootstrap": "^5.3.3",
24
+ "change-case": "^5.4.4",
25
+ "chart.js": "^4.4.3",
26
+ "cloudinary": "^1.40.0",
27
+ "codemirror": "^6.0.1",
28
+ "dotenv": "^17.2.3",
29
+ "formik": "^2.4.6",
30
+ "html2canvas": "^1.4.1",
31
+ "jspdf": "^2.5.1",
32
+ "jwt-decode": "^4.0.0",
33
+ "lodash": "^4.17.21",
34
+ "mapbox-gl": "^2.15.0",
35
+ "mdbreact": "^4.6.1",
36
+ "moment": "^2.29.4",
37
+ "moment-range": "^4.0.2",
38
+ "mongoose": "^7.5.0",
39
+ "next-auth": "^4.24.13",
40
+ "next-connect": "^1.0.0",
41
+ "node-geocoder": "^4.2.0",
42
+ "nodemailer": "^7.0.7",
43
+ "pluralize": "^8.0.0",
44
+ "primeflex": "^3.3.1",
45
+ "primeicons": "^7.0.0",
46
+ "primereact": "^10.8.5",
47
+ "qs": "^6.13.0",
48
+ "quill": "^2.0.3",
49
+ "react": "18.2.0",
50
+ "react-chartjs-2": "^5.2.0",
51
+ "react-datepicker": "^4.17.0",
52
+ "react-dom": "18.2.0",
53
+ "react-dropzone": "^14.2.3",
54
+ "react-hot-toast": "^2.4.1",
55
+ "react-js-pagination": "^3.0.2",
56
+ "react-markdown": "^9.0.1",
57
+ "react-quill": "^0.0.2",
58
+ "react-redux": "^8.1.2",
59
+ "react-star-ratings": "^2.3.0",
60
+ "react-transition-group": "^4.4.5",
61
+ "sass": "^1.83.4",
62
+ "stripe": "^13.5.0",
63
+ "typescript": "5.2.2",
64
+ "uuid": "^10.0.0",
65
+ "xlsx": "^0.18.5",
66
+ "yup": "^1.4.0"
67
+ },
68
+ "devDependencies": {
69
+ "@types/lodash": "^4.17.9",
70
+ "@types/pluralize": "^0.0.33",
71
+ "@types/qs": "^6.9.15",
72
+ "@types/react": "18.3.18",
73
+ "@types/react-dom": "18.3.5",
74
+ "@types/react-js-pagination": "^3.0.7",
75
+ "next": "^14.2.35",
76
+ "@types/node": "20.5.9",
77
+ "@types/uuid": "^10.0.0"
78
+ }
79
+ }
@@ -0,0 +1 @@
1
+ <svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>