From 75663c004fa51f30de8810f1be0f4b70ab7a2f0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zendran?= Date: Tue, 5 Nov 2024 14:55:40 +0100 Subject: [PATCH 01/15] Adding basic components to the website --- pnpm-lock.yaml | 244 ++--- website/package.json | 2 + website/src/components/Button.tsx | 24 + website/src/components/CodeSection.tsx | 65 ++ website/src/components/FormWrapper.tsx | 21 + website/src/css/index.module.css | 949 ++++++++++++++++++ website/src/lib/autoresize.ts | 34 + website/src/lib/universal.tsx | 52 + .../src/pages-parts/LandingPage/Header.tsx | 141 +++ .../pages-parts/LandingPage/LandingPage.tsx | 43 + website/src/pages/index.tsx | 5 +- 11 files changed, 1442 insertions(+), 138 deletions(-) create mode 100644 website/src/components/Button.tsx create mode 100644 website/src/components/CodeSection.tsx create mode 100644 website/src/components/FormWrapper.tsx create mode 100644 website/src/css/index.module.css create mode 100644 website/src/lib/autoresize.ts create mode 100644 website/src/lib/universal.tsx create mode 100644 website/src/pages-parts/LandingPage/Header.tsx create mode 100644 website/src/pages-parts/LandingPage/LandingPage.tsx diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 914a8836a..bee9a8b60 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -526,9 +526,15 @@ importers: '@mdx-js/react': specifier: ^3.0.0 version: 3.1.0(@types/react@18.3.12)(react@18.3.1) + classnames: + specifier: ^2.0.0 + version: 2.5.1 clsx: specifier: ^2.0.0 version: 2.1.1 + lodash: + specifier: ^4.0.0 + version: 4.17.21 prism-react-renderer: specifier: ^2.3.0 version: 2.4.0(react@18.3.1) @@ -11278,73 +11284,69 @@ snapshots: '@open-draft/deferred-promise@2.2.0': {} - '@parcel/bundler-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/bundler-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 '@parcel/graph': 3.2.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.13) '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) '@parcel/logger': 2.12.0 '@parcel/utils': 2.12.0 lmdb: 2.8.5 - transitivePeerDependencies: - - '@swc/helpers' '@parcel/codeframe@2.12.0': dependencies: chalk: 4.1.2 - '@parcel/compressor-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/compressor-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(postcss@8.4.47)(relateurl@0.2.7)(terser@5.36.0)(typescript@5.5.4)': dependencies: - '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/core': 2.12.0(@swc/helpers@0.5.13) - '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(postcss@8.4.47)(relateurl@0.2.7)(terser@5.36.0)(typescript@5.5.4) - '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(postcss@8.4.47)(relateurl@0.2.7)(terser@5.36.0)(typescript@5.5.4) + '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/optimizer-swc': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/packager-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/packager-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/packager-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/packager-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/packager-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/packager-wasm': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/resolver-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/runtime-browser-hmr': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/runtime-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/runtime-react-refresh': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/runtime-service-worker': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/transformer-babel': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/transformer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/transformer-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/transformer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/packager-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/packager-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/packager-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/packager-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/packager-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/packager-wasm': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/resolver-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/runtime-browser-hmr': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/runtime-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/runtime-react-refresh': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/runtime-service-worker': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/transformer-babel': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/transformer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/transformer-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/transformer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/transformer-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) - '@parcel/transformer-json': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/transformer-postcss': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/transformer-posthtml': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/transformer-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/transformer-react-refresh-wrap': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/transformer-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/transformer-json': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/transformer-postcss': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/transformer-posthtml': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/transformer-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/transformer-react-refresh-wrap': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/transformer-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@swc/helpers' - cssnano @@ -11359,14 +11361,14 @@ snapshots: '@parcel/core@2.12.0(@swc/helpers@0.5.13)': dependencies: '@mischnic/json-sourcemap': 0.1.1 - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/diagnostic': 2.12.0 '@parcel/events': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) '@parcel/graph': 3.2.0 '@parcel/logger': 2.12.0 '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/profiler': 2.12.0 '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 @@ -11417,14 +11419,13 @@ snapshots: dependencies: chalk: 4.1.2 - '@parcel/namer-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/namer-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/node-resolver-core@3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: @@ -11438,10 +11439,10 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@parcel/optimizer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/optimizer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.24.2 @@ -11449,18 +11450,16 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(postcss@8.4.47)(relateurl@0.2.7)(terser@5.36.0)(typescript@5.5.4)': + '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(postcss@8.4.47)(relateurl@0.2.7)(terser@5.36.0)(typescript@5.5.4)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) htmlnano: 2.1.1(postcss@8.4.47)(relateurl@0.2.7)(svgo@2.8.0)(terser@5.36.0)(typescript@5.5.4) nullthrows: 1.1.1 posthtml: 0.16.6 svgo: 2.8.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - cssnano - postcss - purgecss @@ -11470,31 +11469,28 @@ snapshots: - typescript - uncss - '@parcel/optimizer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/optimizer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.13) '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - transitivePeerDependencies: - - '@swc/helpers' - '@parcel/optimizer-svgo@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/optimizer-svgo@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/utils': 2.12.0 svgo: 2.8.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/optimizer-swc@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 '@swc/core': 1.7.40(@swc/helpers@0.5.13) @@ -11518,33 +11514,31 @@ snapshots: transitivePeerDependencies: - '@swc/helpers' - '@parcel/packager-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/packager-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 lightningcss: 1.27.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/packager-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/packager-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) @@ -11553,38 +11547,33 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/packager-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/packager-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) '@parcel/utils': 2.12.0 posthtml: 0.16.6 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-wasm@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/packager-wasm@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/plugin@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/plugin@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/profiler@2.12.0': dependencies: @@ -11592,79 +11581,71 @@ snapshots: '@parcel/events': 2.12.0 chrome-trace-event: 1.0.4 - '@parcel/reporter-cli@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/reporter-cli@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) '@parcel/utils': 2.12.0 chalk: 4.1.2 term-size: 2.2.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/reporter-dev-server@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/reporter-dev-server@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/utils': 2.12.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/reporter-tracer@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/reporter-tracer@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/utils': 2.12.0 chrome-trace-event: 1.0.4 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/resolver-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/resolver-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/node-resolver-core': 3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-browser-hmr@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/runtime-browser-hmr@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/utils': 2.12.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/runtime-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-react-refresh@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/runtime-react-refresh@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/utils': 2.12.0 react-error-overlay: 6.0.9 react-refresh: 0.9.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-service-worker@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/runtime-service-worker@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/rust@2.12.0': {} @@ -11672,10 +11653,10 @@ snapshots: dependencies: detect-libc: 1.0.3 - '@parcel/transformer-babel@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/transformer-babel@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.24.2 @@ -11684,12 +11665,11 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/transformer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.24.2 @@ -11697,12 +11677,11 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/transformer-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/rust': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -11712,23 +11691,20 @@ snapshots: srcset: 4.0.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/transformer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.13) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/utils': 2.12.0 '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) nullthrows: 1.1.1 - transitivePeerDependencies: - - '@swc/helpers' '@parcel/transformer-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.13) '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 @@ -11739,18 +11715,17 @@ snapshots: regenerator-runtime: 0.13.11 semver: 7.6.3 - '@parcel/transformer-json@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/transformer-json@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) json5: 2.2.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-postcss@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/transformer-postcss@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 clone: 2.1.2 @@ -11759,11 +11734,10 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-posthtml@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/transformer-posthtml@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -11772,28 +11746,25 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/transformer-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-react-refresh-wrap@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/transformer-react-refresh-wrap@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/utils': 2.12.0 react-refresh: 0.9.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': + '@parcel/transformer-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/rust': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -11802,11 +11773,10 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': dependencies: - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/diagnostic': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) @@ -17169,9 +17139,9 @@ snapshots: '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) '@parcel/logger': 2.12.0 '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/reporter-cli': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) - '@parcel/reporter-tracer': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) + '@parcel/reporter-cli': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/reporter-tracer': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) '@parcel/utils': 2.12.0 chalk: 4.1.2 commander: 7.2.0 diff --git a/website/package.json b/website/package.json index 24ff34ee8..33cfdbdd3 100644 --- a/website/package.json +++ b/website/package.json @@ -20,7 +20,9 @@ "@docusaurus/core": "3.5.2", "@docusaurus/preset-classic": "3.5.2", "@mdx-js/react": "^3.0.0", + "classnames": "^2.0.0", "clsx": "^2.0.0", + "lodash": "^4.0.0", "prism-react-renderer": "^2.3.0", "react": "^18.0.0", "react-dom": "^18.0.0" diff --git a/website/src/components/Button.tsx b/website/src/components/Button.tsx new file mode 100644 index 000000000..7c811a784 --- /dev/null +++ b/website/src/components/Button.tsx @@ -0,0 +1,24 @@ +import Link from '@docusaurus/Link'; +import classNames from 'classnames'; +import React from 'react'; + +import styles from '../css/index.module.css'; + +export type ButtonProps = JSX.IntrinsicElements['button'] & { to: string }; + +export function Button({ children, className, to, ...props }: ButtonProps) { + return ( + + + + ); +} diff --git a/website/src/components/CodeSection.tsx b/website/src/components/CodeSection.tsx new file mode 100644 index 000000000..a390609d2 --- /dev/null +++ b/website/src/components/CodeSection.tsx @@ -0,0 +1,65 @@ +import components from '@theme/MDXComponents'; +import React from 'react'; + +export type CodeSectionProps = { + language: string; + replace?: Record; + section?: string; + source: string | { default: string }; +}; + +export function CodeSection({ + language, + replace, + section, + source, +}: CodeSectionProps) { + // Unwrap ES module. + if (typeof source === 'object' && 'default' in source) { + source = source.default; + } + + // Cut out only desired section. + if (section) { + const pattern = new RegExp( + `// <${section}>\\s([\\s\\S]*?)\\s// \\s`, + 'g', + ); + + source = source + .split(pattern) + .reduce( + (source, part, index) => + index % 2 === 0 ? source : `${source}\n\n${part}`, + '', + ); + } + + // Remove remaining section tags. + source = source.replace(/\/\/ <.*?\n/g, ''); + + // Replace all mapped things. + if (replace) { + for (const [pattern, value] of Object.entries(replace)) { + source = source.replace(new RegExp(pattern, 'gs'), value); + } + } + + // At least one newline is required for non-inline view. + source = source.trim(); + if (!source.includes('\n')) { + source += '\n'; + } + + return ( + + + + ); +} diff --git a/website/src/components/FormWrapper.tsx b/website/src/components/FormWrapper.tsx new file mode 100644 index 000000000..bdae8f406 --- /dev/null +++ b/website/src/components/FormWrapper.tsx @@ -0,0 +1,21 @@ +import React, { ReactNode, useContext } from 'react'; + +import styles from '../css/index.module.css'; +import { useFrameAutoResize } from '../lib/autoresize'; +import { themeContext } from '../lib/universal'; +// import { PlaygroundWrap } from './Playground'; + +export type FormWrapperProps = { + children: ReactNode; +}; + +export function FormWrapper(props: FormWrapperProps) { + const theme = useContext(themeContext); + const frameProps = useFrameAutoResize([props.children]); + + return ( +
+ {/* */} +
+ ); +} diff --git a/website/src/css/index.module.css b/website/src/css/index.module.css new file mode 100644 index 000000000..99f6ab1ad --- /dev/null +++ b/website/src/css/index.module.css @@ -0,0 +1,949 @@ +@import url('https://fonts.googleapis.com/css?family=Poppins:400,700&display=swap'); +@import url('https://fonts.googleapis.com/css?family=Muli:400,600&display=swap'); + +@media (max-width: 996px) { + .center-if-sm { + text-align: center; + } +} + +@media (prefers-reduced-motion: no-preference) { + html { + scroll-behavior: smooth; + } +} + +:root { + --black: #000; + --bright-cyan-50: rgba(63, 196, 254, 0.2); + --bright-cyan: #3fc4fe; + --dark-blue-grey: #211b50; + --dark-slate-blue: #2d2665; + --dodger-blue-10: rgba(63, 187, 254, 0.1); + --dodger-blue: #3fbbfe; + --dusk-blue: #412a94; + --greenblue-10: rgba(31, 216, 152, 0.1); + --greenblue: #1fd898; + --grey: #eee; + --greyish-brown: #474747; + --pale-grey: #e8e6f5; + --periwinkle-50: rgba(136, 89, 255, 0.2); + --periwinkle: #8759ff; + --sea-green-50: rgba(66, 255, 172, 0.2); + --sea-green: #42ffac; + --white: #fff; + + --uni-background-color: var(--white); + --uni-heading-color: var(--dusk-blue); + --uni-heading-helper-color: var(--dusk-blue); + --uni-hero-bgcolor: var(--dark-blue-grey); + --uni-oval-background-color: var(--white); + --uni-oval-shadow-color: var(--pale-grey); + --uni-testimonial-text-color: var(--greyish-brown); + --uni-toolbar-bgcolor: var(--grey); + + --ifm-button-color: var(--white); +} + +:root[data-theme='dark'] { + --uni-background-color: var(--ifm-background-color); + --uni-heading-color: var(--ifm-font-color-base); + --uni-heading-helper-color: var(--ifm-font-color-base); + --uni-oval-shadow-color: var(--black); + --uni-testimonial-text-color: var(--ifm-font-color-base); + --uni-toolbar-bgcolor: var(--ifm-background-color); +} + +.padding { + padding-top: 2em; +} + +.landing table thead { + color: var(--black); + background-attachment: fixed; + background-image: linear-gradient( + to right, + var(--periwinkle), + var(--bright-cyan), + var(--sea-green) + ); +} + +.landing table thead tr th { + width: 15%; +} + +.landing table thead tr th a { + color: inherit; +} + +.landing table thead tr th:first-child { + width: 30%; +} + +.landing table tr td { + background-color: var(--dark-slate-blue); + color: var(--white); +} + +.landing table tr td:first-child, +.landing table tr th:first-child { + padding-left: 4em; +} + +.landing table tr td > img { + width: 1em; +} + +.landing tr:nth-child(odd) td { + background-color: var(--dark-blue-grey); +} + +.landing ul { + padding: 0; + opacity: 0.7; + font-family: Muli; + font-size: 1em; + font-weight: 600; + line-height: 1.33; +} + +.landing ul li { + list-style: none; + position: relative; + padding-left: 1em; + margin-bottom: 1em; +} + +.landing ul li::before { + content: ''; + position: absolute; + top: 0.5em; + left: 0; + width: 4px; + height: 4px; + background-color: var(--ifm-font-color-base); +} + +.landing :global .hero.hero--primary { + --ifm-hero-background-color: var(--dark-blue-grey); +} + +.overflow-hidden { + overflow: hidden; +} + +.landing .section-content :global .row { + position: relative; +} + +@media (min-width: 997px) { + .landing :global .section { + margin-top: 4em; + } + .landing :global .container { + scroll-margin-top: 200px; + } +} + +.landing :global .hero .container { + margin-top: 0em; + margin-bottom: 0em; +} + +.landing :global .container { + margin-top: 4em; + margin-bottom: 4em; +} + +@media (max-width: 996px) { + .landing :global .col { + margin-bottom: 2em; + } + .landing :global .col:last-of-type { + margin-bottom: 0; + } +} + +.discussions { + margin-top: 0 !important; +} + +.floating-example { + position: relative; +} + +@media (max-width: 996px) { + .floating-example > *:first-child { + margin-bottom: 4em; + } + .floating-example .system-window { + margin-left: auto; + margin-right: auto; + } +} + +@media (min-width: 997px) { + .floating-example > div:last-child { + position: absolute; + top: 12.5%; + left: 40%; + } +} + +.system-window { + --ifm-leading: 0; + width: 95%; + padding: 0; + border-radius: 1em; + overflow: hidden; + background: rgb(33, 27, 80); +} + +.system-window iframe { + border-radius: unset; +} + +.system-top-bar { + background-image: linear-gradient( + to right, + var(--periwinkle-50), + var(--bright-cyan-50) 90%, + var(--sea-green-50) + ); + padding: 0.25em 1em; +} + +.system-top-bar-circle { + display: inline-block; + width: 0.5em; + height: 0.5em; + margin-left: 0.3em; + border-radius: 50%; + filter: brightness(100%); +} + +.showcase-card { + padding: 1.5em; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1em; +} + +@media (min-width: 997px) { + .showcase-card { + flex-direction: column; + } +} + +.showcase-card img { + height: 4em; + margin: 1em; +} + +.showcase-card p { + display: block; + margin-left: 1em; +} + +.footer li { + color: var(--white); +} + +.footer .bullets { + color: var(--white); +} + +.footer .bullets li::before { + background-color: var(--dodger-blue); +} + +.footer .offset-column { + margin-left: 2em !important; +} + +.simple-yet-powerful-text { + margin-left: -5em; + margin-top: -8em; +} + +.fully-customizable-text { + margin-right: -5em; + margin-top: -8em; +} + +.reverse-wrap { + flex-wrap: wrap-reverse; +} + +.example + .example { + margin-bottom: 4em; +} + +@media (min-width: 997px) { + .example { + margin: 16em 0 !important; + } + .example + .example { + margin-bottom: 0 !important; + } +} + +.preview-border { + box-shadow: 0 6px 58px 0 var(--uni-box-shadow-color); + border: solid 1px var(--uni-border-color); +} + +.preview { + position: relative; + background-color: var(--uni-background-color); + padding: 2em; +} + +.no-padding { + padding: 0; +} + +@media (max-width: 500px) { + .preview { + padding: 1em; + } +} + +.solid-border-box { + border: solid 6px var(--uni-border-color); + padding: 4em; +} + +@media (max-width: 996px) { + .solid-border-box { + margin: 4em 0; + } +} + +@media (max-width: 400px) { + .solid-border-box { + padding: 4em 1em; + } +} + +.green-accent { + --uni-border-color: var(--greenblue); + --uni-box-shadow-color: var(--greenblue-10); + --ifm-menu-color-active: var(--uni-border-color); +} + +.blue-accent { + --uni-border-color: var(--dodger-blue); + --uni-box-shadow-color: var(--dodger-blue-10); + --ifm-menu-color-active: var(--uni-border-color); +} + +.grid3x3 { + position: relative; + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; + text-align: center; + height: 100%; + padding: 4em 0; +} + +.item3x3 { + width: 33%; + align-self: center; + padding: 1.5em 1em; +} + +.company { + width: 100%; + transition: 0.2s filter; +} + +.company:hover { + filter: none; +} + +.border-dashed { + border: 2px dashed var(--pale-grey); +} + +.border-gradient { + border-style: solid; + border-width: 6px; + border-image-source: linear-gradient( + var(--uni-border-gradient-degrees), + var(--periwinkle), + var(--bright-cyan) 51%, + var(--sea-green) + ); + border-image-slice: 1; +} + +.border-disable-top-right { + --uni-border-gradient-degrees: 41deg; + border-top: 0; + border-right: 0; +} + +.border-disable-bottom-left { + --uni-border-gradient-degrees: 221deg; + border-bottom: 0; + border-left: 0; +} + +.arrow-button { + background-color: transparent; + border: none; + cursor: pointer; + transition: all 0.2s linear; +} + +.left-arrow-button:hover { + transform: translateX(-5px); +} + +.right-arrow-button:hover { + transform: translateX(5px); +} + +.arrow { + height: 35px; + width: 35px; +} + +.carousel-container { + overflow: hidden; + max-width: 968px; +} + +.carousel { + transition: transform 0.3s; + display: flex; +} + +.testimonials { + display: flex; + justify-content: center; + align-items: center; +} + +.testimonials-pair-active { + display: flex; + justify-content: center; + height: auto; +} + +@media (max-width: 768px) { + .testimonials-pair-active { + flex-direction: column; + } +} + +.testimonials-pair-inactive { + display: none; +} + +@media (max-width: 768px) { + .testimonials-pair-inactive { + flex-direction: column; + } +} + +.testimonial { + margin: 2em; + background: var(--ifm-background-surface-color); +} + +.testimonial-content { + width: 420px; + height: 100%; + padding: 4em 2em; + display: flex; + flex-direction: column; + align-items: center; +} + +.testimonial-links-wrapper { + width: 140px; + max-width: 140px; + display: flex; + justify-content: space-between; + margin-bottom: 30px; + color: var(--dusk-blue); +} + +.testimonial-links-wrapper a { + color: var(--dusk-blue); +} + +.testimonial-description::before { + content: '„'; +} + +.testimonial-description::after { + content: '”'; +} + +.testimonial-avatar { + width: 100px; + border-radius: 50%; + margin: 15px 0 10px; +} + +.section-heading { + margin: 1.5em 0; +} + +.section-bgwhite { + color: var(--ifm-font-color-base); +} + +.section-bgwhite-block { + position: absolute; + width: 200%; + height: 100%; + top: 0; + left: 0; +} + +.section-bgwhite-block-left { + background: var(--white); + margin-left: -100%; +} + +.section-bgwhite-block-right { + background: var(--uni-background-color); + margin-right: -100%; +} + +@media (min-width: 997px) { + .section-bgwhite-block-left, + .section-bgwhite-block-right { + height: 200%; + } +} + +.section-content { + position: relative; + padding: 0 4em !important; +} + +.section-content.logos { + padding-left: unset !important; +} + +@media (max-width: 996px) { + .section-content, + .section-content.logos { + margin-top: 0; + padding: 4em !important; + } +} + +@media (max-width: 400px) { + .section-content { + margin-top: 0; + padding: 0 1em !important; + } +} + +.fluid { + padding: 8em 0; +} + +.whyus { + --ifm-hero-background-color: var(--dusk-blue) !important; + color: black; +} + +.oval { + display: inline-block; + width: 64px; + height: 64px; + padding: 20px; + border-radius: 50%; + box-shadow: 0 8px 23px 0 var(--uni-oval-shadow-color); + background-color: var(--uni-oval-background-color); +} + +.link-icon-container { + display: flex; + justify-content: center; + align-items: center; + width: 37px; + height: 37px; + border-radius: 50%; + box-shadow: 0 8px 23px 0 var(--uni-oval-shadow-color); + background-color: var(--uni-oval-background-color); +} + +.link-icon-container svg:hover { + transition: filter 0.15s ease-in; + filter: brightness(1.6); +} + +.oval.white { + background-color: var(--white); + width: 100px; + height: 100px; +} + +.top-right-corner { + position: absolute; + right: 0; + transform: translate(45%, -45%); +} + +.badges { + display: flex; + justify-content: center; + flex-wrap: wrap; +} + +.badge-number { + font-size: 3em; + font-weight: bold; +} + +.badge { + position: relative; + height: 170px; + width: 260px; + margin: 2em; +} + +.badge-image { + position: absolute; + display: block; +} + +.badge-centered { + position: absolute; + top: 55%; + left: 50%; + transform: translate(-50%, -50%); +} + +.call-to-action { + --ifm-button-background-color: var(--periwinkle) !important; + --ifm-button-border-color: var(--periwinkle) !important; + --ifm-color-primary-darker: var(--bright-cyan) !important; + margin-top: 4em; + border-radius: 2em; + min-width: 240px; +} + +.theme-icon { + width: 40px; + height: 40px; + margin-right: 25px; + display: inline-block; +} + +.theme-icon:last-child { + margin-right: 0; +} + +.section { + margin-bottom: 8em; +} + +.flex-center { + display: flex; + justify-content: center; +} + +.top-margin { + margin-top: 70px; +} + +.long-button { + max-width: 100%; + white-space: pre-line; +} + +.text { + font-family: Poppins, sans-serif; + font-stretch: normal; + font-style: normal; + letter-spacing: normal; + line-height: normal; + color: var(--ifm-font-color-base); +} + +.text-big { + font-size: 1.5em; + font-weight: bold; +} + +.text-huge { + font-size: 2.5em; + font-weight: bold; + line-height: 1.25; +} + +.text.heading-helper { + color: var(--uni-heading-helper-color); + font-family: Muli; + font-size: 1em; + font-weight: 600; + letter-spacing: 1px; + opacity: 0.6; +} + +.heading { + color: var(--uni-heading-color); + font-family: Poppins; + font-size: 2em; + font-weight: bold; + line-height: 1.31; + margin-bottom: 2em; +} + +.heading-white { + --uni-heading-color: var(--white); +} + +.text.emphasis { + color: var(--dodger-blue); + font-family: Poppins; + font-size: 24px; + font-weight: 600; + line-height: 1.42; +} + +.text.paragraph { + color: var(--white); + font-family: Muli; + font-size: 1em; + line-height: 1.75; + margin-bottom: 0.8em; + opacity: 0.8; +} + +.text.section-subtitle { + color: var(--white); + font-family: Muli; + font-size: 1em; + font-weight: 600; + letter-spacing: 1px; + opacity: 0.6; +} + +.text.footer-heading { + color: var(--dodger-blue); + font-family: Muli; + font-size: 18px; + font-weight: 600; +} + +.supported { + color: var(--white); + font-family: Muli; + font-size: 0.85em; + font-weight: 600; + line-height: 2; + margin-top: 3em; + opacity: 0.6; +} + +.title { + color: var(--white); + display: block; +} + +.description { + color: var(--bright-cyan); + display: block; + margin: 24px 0; +} + +@supports (background-clip: text) { + .description { + background-image: linear-gradient( + 81deg, + var(--periwinkle), + var(--bright-cyan), + var(--sea-green) + ); + background-clip: text; + -webkit-text-fill-color: transparent; + } +} + +.text.testimonial-description { + color: var(--uni-testimonial-text-color); + font-family: Muli; + font-size: 1.2em; + line-height: 1.75; + opacity: 0.8; + text-align: center; +} + +.bullets { + color: var(--white) !important; +} + +.bullets li { + margin-bottom: 0; +} + +.bullets li::before { + background-color: var(--periwinkle) !important; +} + +.commercial-bullets > li { + font-weight: normal; +} + +.commercial-box { + align-items: center; + display: flex; + justify-content: center; + padding: 0; +} + +.vazco { + height: 2em; + margin-top: 2em; +} + +.form-wrapper { + border-radius: 5px; + border: 1px solid var(--ifm-color-emphasis-alpha-30); +} + +.playground { + height: calc(100vh - var(--ifm-navbar-height)); +} + +.playground-wrap { + background-color: #fff; + color: #0e0e0e; + display: block; + flex: 1; + overflow-y: auto; + + border-radius: 5px; + border: none; + margin: 0; + padding: 0; + width: 100%; +} + +.playground .playground-wrap { + border-radius: unset; +} + +.playground, +.playground-column, +.playground-toolbar { + display: flex; +} + +.playground iframe, +.playground-toolbar select { + border: 0; +} + +.playground-column { + flex-direction: column; +} + +.playground iframe, +.playground-column, +.playground-toolbar select { + flex: 1; +} + +.playground-toolbar { + background-color: var(--uni-toolbar-bgcolor); +} + +.playground-toolbar select { + background-color: var(--uni-toolbar-bgcolor); + font-size: 1rem; + margin: 0.25em; + padding: 0.5em; +} + +.tabs { + display: flex; + margin: 0 0 0.25em -0.2em; + font-weight: 700; + flex-wrap: wrap; +} + +.tabs .item { + text-align: center; + font-size: 0.8em; + border: 1px solid var(--ifm-menu-color-active); + padding: 0.8em; + margin: 0.25em; + border-radius: 3px; + cursor: pointer; + flex: 1; +} + +.tabs .item.active { + background-color: var(--ifm-menu-color-active); + color: white; +} + +.toggler.header { + display: flex; + justify-content: flex-end; +} + +.toggler.header .item { + margin: 0.5em 0 0.5em 1em; + cursor: pointer; +} + +.toggler.header .item.active { + color: var(--ifm-menu-color-active); +} + +.toggler .tooltip { + position: relative; + display: inline-block; +} + +.toggler .tooltip .tooltip-text { + font-size: 0.7em; + visibility: hidden; + width: 120px; + background-color: black; + color: #fff; + text-align: center; + border-radius: 6px; + padding: 5px 0; + position: absolute; + z-index: 1; + bottom: 150%; + left: 50%; + margin-left: -60px; +} + +.toggler .tooltip .tooltip-text::after { + content: ''; + position: absolute; + top: 100%; + left: 50%; + margin-left: -5px; + border-width: 5px; + border-style: solid; + border-color: black transparent transparent transparent; +} + +.toggler .tooltip:hover .tooltip-text { + visibility: visible; +} + +.toggler-tabs .header { + display: flex; + justify-content: space-between; + align-items: center; +} diff --git a/website/src/lib/autoresize.ts b/website/src/lib/autoresize.ts new file mode 100644 index 000000000..51d7870dc --- /dev/null +++ b/website/src/lib/autoresize.ts @@ -0,0 +1,34 @@ +import get from 'lodash/get'; +import { RefObject, useCallback, useEffect, useRef, useState } from 'react'; + +function handleResize( + ref: RefObject, + setHeight: (height: number) => void, +) { + const scrollHeight = get( + ref.current, + 'node.contentDocument.body.scrollHeight', + 0, + ); + + if (scrollHeight !== 0) { + setHeight(scrollHeight); + } +} + +export function useFrameAutoResize(watch: unknown[]) { + const [height, setHeight] = useState(300); + const ref = useRef(); + const onLoad = useCallback( + () => handleResize(ref, setHeight), + [ref, setHeight], + ); + + useEffect(() => { + const id = setInterval(onLoad, 1000); + return () => clearInterval(id); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [onLoad, ...watch]); + + return { onLoad, ref, style: { height } }; +} diff --git a/website/src/lib/universal.tsx b/website/src/lib/universal.tsx new file mode 100644 index 000000000..1ea89f0d8 --- /dev/null +++ b/website/src/lib/universal.tsx @@ -0,0 +1,52 @@ +import React, { createContext, useContext } from 'react'; +import { UnknownObject } from 'uniforms'; +import * as antd from 'uniforms-antd'; +import * as bootstrap4 from 'uniforms-bootstrap4'; +import * as bootstrap5 from 'uniforms-bootstrap5'; +import * as mui from 'uniforms-mui'; +import * as semantic from 'uniforms-semantic'; +import * as unstyled from 'uniforms-unstyled'; + +export const AutoFields = _createThemedComponent('AutoFields'); +export const AutoField = _createThemedComponent('AutoField'); +export const AutoForm = _createThemedComponent('AutoForm'); +export const BaseForm = _createThemedComponent('BaseForm'); +export const BoolField = _createThemedComponent('BoolField'); +export const DateField = _createThemedComponent('DateField'); +export const ErrorField = _createThemedComponent('ErrorField'); +export const ErrorsField = _createThemedComponent('ErrorsField'); +export const HiddenField = _createThemedComponent('HiddenField'); +export const ListAddField = _createThemedComponent('ListAddField'); +export const ListDelField = _createThemedComponent('ListDelField'); +export const ListField = _createThemedComponent('ListField'); +export const ListItemField = _createThemedComponent('ListItemField'); +export const LongTextField = _createThemedComponent('LongTextField'); +export const NestField = _createThemedComponent('NestField'); +export const NumField = _createThemedComponent('NumField'); +export const QuickForm = _createThemedComponent('QuickForm'); +export const RadioField = _createThemedComponent('RadioField'); +export const SelectField = _createThemedComponent('SelectField'); +export const SubmitField = _createThemedComponent('SubmitField'); +export const TextField = _createThemedComponent('TextField'); +export const ValidatedForm = _createThemedComponent('ValidatedForm'); +export const ValidatedQuickForm = _createThemedComponent('ValidatedQuickForm'); + +export const themes = { + antd, + bootstrap4, + bootstrap5, + mui, + semantic, + unstyled, +}; + +export const themeContext = createContext('unstyled'); + +function _createThemedComponent(component: keyof typeof unstyled) { + return function ThemedComponent(props: UnknownObject) { + const theme = useContext(themeContext); + // FIXME: Form prop errors due to `props` having no strict type here. + const Component: any = themes[theme][component]; + return ; + }; +} diff --git a/website/src/pages-parts/LandingPage/Header.tsx b/website/src/pages-parts/LandingPage/Header.tsx new file mode 100644 index 000000000..bde5f3761 --- /dev/null +++ b/website/src/pages-parts/LandingPage/Header.tsx @@ -0,0 +1,141 @@ +import Link from '@docusaurus/Link'; +import classNames from 'classnames'; +import React from 'react'; + +import { Button } from '../../components/Button'; +import { CodeSection } from '../../components/CodeSection'; +import { FormWrapper } from '../../components/FormWrapper'; +import styles from '../../css/index.module.css'; +import { themeContext } from '../../lib/universal'; +// import { ShippingForm } from '../CommonForms/ShippingForm'; + +type SystemWindowProps = JSX.IntrinsicElements['div']; + +function SystemWindow({ children, className, ...props }: SystemWindowProps) { + return ( +
+
+ + + +
+ {children} +
+ ); +} + +function Showcase() { + return ( +
+ + {/* */} + + + + + {/* */} + AAA + + + +
+ ); +} + +const themes = [ + { + alt: 'Semantic UI', + src: 'themes/semantic.svg', + to: 'https://semantic-ui.com/', + }, + { + alt: 'Ant Design', + src: 'themes/antd.png', + to: 'https://ant.design/', + }, + { + alt: 'MUI', + src: 'themes/mui.png', + to: 'https://mui.com/', + }, + { + alt: 'Bootstrap', + src: 'themes/bootstrap.svg', + to: 'https://getbootstrap.com/', + }, +]; + +export function Header() { + return ( +
+
+
+
+ + uniforms + +

+ A React library for building forms from any schema +

+
    +
  • support of all schemas and themes
  • +
  • instant prototyping
  • +
  • simplifies separation of concerns
  • +
+
+

+ Supported design libraries: +

+ {themes.map(({ alt, src, to }) => ( + + {alt} + + ))} +
+
+ +
+
+
+ +
+
+
+
+ ); +} diff --git a/website/src/pages-parts/LandingPage/LandingPage.tsx b/website/src/pages-parts/LandingPage/LandingPage.tsx new file mode 100644 index 000000000..1de5c2b2f --- /dev/null +++ b/website/src/pages-parts/LandingPage/LandingPage.tsx @@ -0,0 +1,43 @@ +import classNames from 'classnames'; +import React from 'react'; + +import styles from '../../css/index.module.css'; +// import { CommercialServices } from './CommercialServices'; +// import { Comparison } from './Comparison'; +// import { Discussions } from './Discussions'; +// import { ExampleFullyCustomizable } from './ExampleFullyCustomizable'; +// import { ExampleSimpleYetPowerful } from './ExampleSimpleYetPowerful'; +// import { Footer } from './Footer'; +import { Header } from './Header'; +// import { OpenSource } from './OpenSource'; +// import { Testimonials } from './Testimonials'; +// import { WhoUses } from './WhoUses'; +// import { WhyUs } from './WhyUs'; + +export function LandingPage() { + return ( +
+
+ {/*
+
+ + +
+ +
+ + + +
+ +
+ +
+
+ +
+
+
*/} +
+ ); +} diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index 169b25c7c..ff74e9277 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -1,5 +1,6 @@ import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; +import { LandingPage } from '../pages-parts/LandingPage/LandingPage'; export default function Home(): JSX.Element { const { siteConfig } = useDocusaurusContext(); @@ -7,6 +8,8 @@ export default function Home(): JSX.Element { + > + + ); } From 5a7cca942bbfe39cc831228ea8cbcc0833c8ab0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zendran?= Date: Wed, 6 Nov 2024 12:13:53 +0100 Subject: [PATCH 02/15] Adding missing packages --- pnpm-lock.yaml | 45 ++- website/package.json | 10 +- website/src/components/FormWrapper.tsx | 4 +- website/src/components/Playground.tsx | 291 ++++++++++++++++++ website/src/lib/presets.ts | 145 +++++++++ website/src/lib/schema.ts | 110 +++++++ website/src/lib/styles.tsx | 49 +++ website/src/lib/utils.ts | 39 +++ .../pages-parts/CommonForms/ShippingForm.tsx | 80 +++++ .../pages-parts/CommonForms/ShippingSchema.ts | 27 ++ .../src/pages-parts/CommonForms/SignUp.tsx | 13 + .../pages-parts/CommonForms/SignUpSchema.ts | 46 +++ .../src/pages-parts/LandingPage/Header.tsx | 5 +- website/static/assets/themes/antd.png | Bin 0 -> 10447 bytes website/static/assets/themes/bootstrap.svg | 6 + website/static/assets/themes/mui.png | Bin 0 -> 8233 bytes website/static/assets/themes/semantic.svg | 6 + website/types/docusaurus.d.ts | 20 ++ website/types/message-box.d.ts | 3 + website/types/simpl-schema.d.ts | 8 + 20 files changed, 898 insertions(+), 9 deletions(-) create mode 100644 website/src/components/Playground.tsx create mode 100644 website/src/lib/presets.ts create mode 100644 website/src/lib/schema.ts create mode 100644 website/src/lib/styles.tsx create mode 100644 website/src/lib/utils.ts create mode 100644 website/src/pages-parts/CommonForms/ShippingForm.tsx create mode 100644 website/src/pages-parts/CommonForms/ShippingSchema.ts create mode 100644 website/src/pages-parts/CommonForms/SignUp.tsx create mode 100644 website/src/pages-parts/CommonForms/SignUpSchema.ts create mode 100644 website/static/assets/themes/antd.png create mode 100644 website/static/assets/themes/bootstrap.svg create mode 100644 website/static/assets/themes/mui.png create mode 100644 website/static/assets/themes/semantic.svg create mode 100644 website/types/docusaurus.d.ts create mode 100644 website/types/message-box.d.ts create mode 100644 website/types/simpl-schema.d.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bee9a8b60..8887f4882 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -526,6 +526,12 @@ importers: '@mdx-js/react': specifier: ^3.0.0 version: 3.1.0(@types/react@18.3.12)(react@18.3.1) + ajv: + specifier: 8.17.1 + version: 8.17.1 + antd: + specifier: 5.21.5 + version: 5.21.5(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: specifier: ^2.0.0 version: 2.5.1 @@ -535,6 +541,12 @@ importers: lodash: specifier: ^4.0.0 version: 4.17.21 + lz-string: + specifier: 1.5.0 + version: 1.5.0 + message-box: + specifier: 0.2.7 + version: 0.2.7 prism-react-renderer: specifier: ^2.3.0 version: 2.4.0(react@18.3.1) @@ -544,6 +556,12 @@ importers: react-dom: specifier: ^18.0.0 version: 18.3.1(react@18.3.1) + react-frame-component: + specifier: 5.2.7 + version: 5.2.7(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + zod: + specifier: 3.23.8 + version: 3.23.8 devDependencies: '@docusaurus/module-type-aliases': specifier: 3.5.2 @@ -557,6 +575,12 @@ importers: '@docusaurus/types': specifier: 3.5.2 version: 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/simpl-schema': + specifier: 1.12.8 + version: 1.12.8(@aws-sdk/client-sso-oidc@3.679.0(@aws-sdk/client-sts@3.679.0)) + simpl-schema: + specifier: 1.13.1 + version: 1.13.1 typescript: specifier: ~5.5.2 version: 5.5.4 @@ -7211,6 +7235,13 @@ packages: react-fast-compare@3.2.2: resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + react-frame-component@5.2.7: + resolution: {integrity: sha512-ROjHtSLoSVYUBfTieazj/nL8jIX9rZFmHC0yXEU+dx6Y82OcBEGgU9o7VyHMrBFUN9FuQ849MtIPNNLsb4krbg==} + peerDependencies: + prop-types: ^15.5.9 + react: '>= 16.3' + react-dom: '>= 16.3' + react-helmet-async@1.3.0: resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} peerDependencies: @@ -11295,13 +11326,15 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))': + '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.13) '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) '@parcel/logger': 2.12.0 '@parcel/utils': 2.12.0 lmdb: 2.8.5 + transitivePeerDependencies: + - '@swc/helpers' '@parcel/codeframe@2.12.0': dependencies: @@ -11361,7 +11394,7 @@ snapshots: '@parcel/core@2.12.0(@swc/helpers@0.5.13)': dependencies: '@mischnic/json-sourcemap': 0.1.1 - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) '@parcel/diagnostic': 2.12.0 '@parcel/events': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) @@ -11776,7 +11809,7 @@ snapshots: '@parcel/types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)': dependencies: - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13)) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) '@parcel/diagnostic': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.13))(@swc/helpers@0.5.13) @@ -17961,6 +17994,12 @@ snapshots: react-fast-compare@3.2.2: {} + react-frame-component@5.2.7(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.25.9 diff --git a/website/package.json b/website/package.json index 33cfdbdd3..7f96fda88 100644 --- a/website/package.json +++ b/website/package.json @@ -20,18 +20,26 @@ "@docusaurus/core": "3.5.2", "@docusaurus/preset-classic": "3.5.2", "@mdx-js/react": "^3.0.0", + "ajv": "8.17.1", + "antd": "5.21.5", "classnames": "^2.0.0", "clsx": "^2.0.0", "lodash": "^4.0.0", + "lz-string": "1.5.0", + "message-box": "0.2.7", "prism-react-renderer": "^2.3.0", "react": "^18.0.0", - "react-dom": "^18.0.0" + "react-dom": "^18.0.0", + "react-frame-component": "5.2.7", + "zod": "3.23.8" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.5.2", "@docusaurus/theme-classic": "3.5.2", "@docusaurus/tsconfig": "3.5.2", "@docusaurus/types": "3.5.2", + "@types/simpl-schema": "1.12.8", + "simpl-schema": "1.13.1", "typescript": "~5.5.2" }, "browserslist": { diff --git a/website/src/components/FormWrapper.tsx b/website/src/components/FormWrapper.tsx index bdae8f406..6ab731094 100644 --- a/website/src/components/FormWrapper.tsx +++ b/website/src/components/FormWrapper.tsx @@ -3,7 +3,7 @@ import React, { ReactNode, useContext } from 'react'; import styles from '../css/index.module.css'; import { useFrameAutoResize } from '../lib/autoresize'; import { themeContext } from '../lib/universal'; -// import { PlaygroundWrap } from './Playground'; +import { PlaygroundWrap } from './Playground'; export type FormWrapperProps = { children: ReactNode; @@ -15,7 +15,7 @@ export function FormWrapper(props: FormWrapperProps) { return (
- {/* */} +
); } diff --git a/website/src/components/Playground.tsx b/website/src/components/Playground.tsx new file mode 100644 index 000000000..8ea47b679 --- /dev/null +++ b/website/src/components/Playground.tsx @@ -0,0 +1,291 @@ +import ConfigProvider from 'antd/lib/config-provider'; +import classNames from 'classnames'; +import omit from 'lodash/omit'; +import React, { Component } from 'react'; +import Frame, { FrameContextConsumer } from 'react-frame-component'; +import { ValidatedForm, connectField, context, useForm } from 'uniforms'; +import type { Option } from 'uniforms-unstyled/src/types'; + +import playgroundStyles from '../css/index.module.css'; +import presets from '../lib/presets'; +import { bridge, schema } from '../lib/schema'; +import styles from '../lib/styles'; +import { themes } from '../lib/universal'; +import { compress, parseQuery, updateQuery } from '../lib/utils'; + +export class Playground extends Component { + static getDerivedStateFromError(error: Error) { + return { error }; + } + + constructor() { + // @ts-expect-error: Types. + super(...arguments); + + const state = schema.clean(parseQuery()); + + try { + schema.validate(state); + // FIXME: Types. + } catch (error: any) { + (error.details as any[]).forEach(({ name }) => { + state[name] = schema.getDefinition(name).defaultValue; + }); + } + + this.state = state; + + this.onChange = this.onChange.bind(this); + } + + componentDidMount() { + updateQuery(this.state); + } + + componentDidUpdate() { + updateQuery(this.state); + } + + onChange(key: string, value: unknown) { + if (key === 'preset') { + // FIXME: Types. + this.setState((state: any) => ({ + props: { + ...state.props, + schema: presets[value as keyof typeof presets], + }, + })); + } + + this.setState({ error: undefined, [key]: value }); + } + + render() { + return ( + // @ts-expect-error: Types. + +
+ + + +
+ + {this.state.error ? ( +
+        ) : (
+          
+        )}
+      
+    );
+  }
+}
+
+// FIXME: ValidatedForm is not derivable.
+class PlaygroundForm extends (ValidatedForm as any) {
+  getContextState() {
+    return {
+      ...super.getContextState(),
+      theme: this.props.model.theme,
+    };
+  }
+
+  render() {
+    return (
+      
+        
+ + ); + } +} + +const PlaygroundModelDebug = () => { + const { model } = useForm(); + return ( + <> +
+
+
+        {`const model = ${JSON.stringify(model, null, 2)};`}
+      
+ + ); +}; + +class PlaygroundPreview extends Component { + constructor() { + // @ts-expect-error: Types. + super(...arguments); + + this._schema = eval(`(${this.props.value.schema})`); + } + + // eslint-disable-next-line camelcase + UNSAFE_componentWillReceiveProps(props: any) { + if (this.props.value.schema !== props.value.schema) { + this._schema = eval(`(${props.value.schema})`); + } + } + + // TODO: Types. + _schema: any; + + render() { + const { AutoFields, AutoForm, ErrorsField, SubmitField } = + themes[(this.props.theme as keyof typeof themes) || 'unstyled']; + + const { asyncOnSubmit, asyncOnValidate, schema, ...props } = + this.props.value; + + props.schema = this._schema; + if (asyncOnSubmit) { + props.onSubmit = () => + new Promise(resolve => { + setTimeout(resolve, 1000); + }); + } + if (asyncOnValidate) { + props.onValidate = (model: object, error: Error) => + new Promise(resolve => { + setTimeout(() => { + resolve(error); + }, 1000); + }); + } + + return ( + + {this.props.errorMessage ? ( + + ) : ( + + + + + + + )} + + ); + } +} + +const PlaygroundPreviewField = connectField(PlaygroundPreview); + +class PlaygroundProps extends Component { + render() { + const { onChange, schema, theme, value } = this.props; + + const isAntd = theme === 'antd'; + const isBootstrap = theme === 'bootstrap4'; + const isSemantic = theme === 'semantic'; + + // FIXME: theme is undefined during `docusaurus build`. + const { AutoForm, BoolField, ErrorsField, LongTextField, NumField } = + themes[(theme as keyof typeof themes) || 'unstyled']; + + return ( + + + + + + + + + + + + + + + + ); + } +} + +const PlaygroundPropsField = connectField(PlaygroundProps); + +class PlaygroundSelect extends Component { + render() { + // FIXME: allowedValues is undefined during `docusaurus build`. + const { options, onChange, value } = this.props; + + return ( + + ); + } +} + +const PlaygroundSelectField = connectField(PlaygroundSelect); + +export class PlaygroundWrap extends Component { + render() { + const { children, frameProps, theme } = this.props; + const content = ( + + {children} + {styles[theme as keyof typeof styles]} + + ); + + if (theme === 'mui') { + // Material-UI injects scoped CSS classes into head. + return ( +
+ ); + } + + let frameContent = content; + if (theme === 'antd') { + // Make AntD popups contained within the iframe. + frameContent = ( + + {(context: any) => ( + context.document.body}> + {content} + + )} + + ); + } + + return ( + + ); + } +} diff --git a/website/src/lib/presets.ts b/website/src/lib/presets.ts new file mode 100644 index 000000000..642591fad --- /dev/null +++ b/website/src/lib/presets.ts @@ -0,0 +1,145 @@ +const preset = (strings: TemplateStringsArray) => + strings[0].slice(5, -3).replace(/([\r\n]+) {4}/g, '$1'); + +const presets = { + 'Welcome!': preset` + new SimpleSchema2Bridge({ + schema: new SimpleSchema({ + date: { type: Date, defaultValue: new Date() }, + adult: Boolean, + size: { + type: String, + defaultValue: 'm', + allowedValues: ['xs', 's', 'm', 'l', 'xl'], + }, + rating: { + type: Number, + allowedValues: [1, 2, 3, 4, 5], + uniforms: { checkboxes: true }, + }, + friends: { type: Array, minCount: 1 }, + 'friends.$': Object, + 'friends.$.name': { type: String, min: 3 }, + 'friends.$.age': { type: Number, min: 0, max: 150 }, + }) + }) + `, + + 'Address (JSONSchema)': preset` + (() => { + const ajv = new Ajv({ allErrors: true, useDefaults: true, keywords: ["uniforms"] }); + const schema = { + title: 'Address', + type: 'object', + properties: { + city: { type: 'string' }, + state: { type: 'string' }, + street: { type: 'string' }, + zip: { type: 'string', pattern: '[0-9]{5}' }, + }, + required: ['street', 'zip', 'state'], + }; + + function createValidator(schema) { + const validator = ajv.compile(schema); + + return (model) => { + validator(model); + + if (validator.errors && validator.errors.length) { + return { details: validator.errors }; + } + }; + } + + const validator = createValidator(schema); + + return new JSONSchemaBridge({ schema, validator }); + })() + `, + + 'Address (SimpleSchema)': preset` + new SimpleSchema2Bridge({ + schema: new SimpleSchema({ + city: { + type: String, + optional: true, + max: 50, + }, + state: String, + street: { type: String, max: 100 }, + zip: { + type: String, + regEx: /^[0-9]{5}$/, + }, + }) + }) + `, + + 'Address (Zod)': preset` + new ZodBridge({ + schema: z.object({ + city: z.string().max(50).optional(), + state: z.string(), + street: z.string().max(100), + zip: z.string().regex(/^[0-9]{5}$/), + }) + }) + `, + + 'All Fields (SimpleSchema)': preset` + new SimpleSchema2Bridge({ + schema: new SimpleSchema({ + text: { type: String }, + num: { type: Number }, + bool: { type: Boolean }, + nested: { type: Object }, + 'nested.text': { type: String }, + date: { type: Date }, + list: { type: Array }, + 'list.$': { + type: String, + uniforms: { label: 'List Text', placeholder: 'List Text Placeholder' }, + }, + select: { + type: String, + uniforms: { + options: [ + { label: 'Option A', value: 'a' }, + { label: 'Option B', value: 'b' }, + ], + }, + }, + radio: { + type: String, + uniforms: { + checkboxes: true, + options: [ + { label: 'Option A', value: 'a' }, + { label: 'Option B', value: 'b' }, + ], + }, + }, + }) + }) + `, + + 'All Fields (Zod)': preset` + new ZodBridge({ + schema: z.object({ + text: z.string(), + num: z.number(), + bool: z.boolean(), + nested: z.object({ text: z.string() }), + date: z.date(), + // TODO: Custom label and placeholder. + list: z.array(z.string()), + select: z.enum(['a', 'b']), + // TODO: Enums with custom props. + radio: z.enum(['a', 'b']), + }) + }) + `, +}; + +export default presets; diff --git a/website/src/lib/schema.ts b/website/src/lib/schema.ts new file mode 100644 index 000000000..8f0b292da --- /dev/null +++ b/website/src/lib/schema.ts @@ -0,0 +1,110 @@ +import Ajv from 'ajv'; +import MessageBox from 'message-box'; +import SimpleSchema from 'simpl-schema'; +import { filterDOMProps } from 'uniforms'; +import { JSONSchemaBridge } from 'uniforms-bridge-json-schema'; +import { SimpleSchema2Bridge } from 'uniforms-bridge-simple-schema-2'; +import { ZodBridge } from 'uniforms-bridge-zod'; +import { z } from 'zod'; + +import presets from './presets'; +import { themes } from './universal'; + +// Hide custom props. +declare module 'uniforms' { + interface FilterDOMProps { + const: never; + } +} + +filterDOMProps.register('const'); + +// FIXME: Make it extensible for globals. +const scope: any = typeof window === 'undefined' ? global : window; + +// FIXME: This file is loading a different version of simpl-schema than the one +// that uniforms-bridge-simple-schema-2 package. +SimpleSchema.extendOptions(['uniforms']); + +// This is required for the eval. +scope.Ajv = Ajv; +scope.JSONSchemaBridge = JSONSchemaBridge; +scope.SimpleSchema = SimpleSchema; +scope.SimpleSchema2Bridge = SimpleSchema2Bridge; +scope.ZodBridge = ZodBridge; +scope.z = z; + +// Dynamic field error. +MessageBox.defaults({ messages: { en: { syntax: '' } } }); + +const propsSchema = new SimpleSchema({ + autosave: { optional: true, type: Boolean }, + autosaveDelay: { optional: true, type: SimpleSchema.Integer }, + disabled: { optional: true, type: Boolean }, + label: { optional: true, type: Boolean }, + placeholder: { optional: true, type: Boolean }, + readOnly: { optional: true, type: Boolean }, + showInlineError: { optional: true, type: Boolean }, + asyncOnSubmit: { + optional: true, + type: Boolean, + label: 'Async onSubmit (1 sec)', + }, + asyncOnValidate: { + optional: true, + type: Boolean, + label: 'Async onValidate (1 sec)', + }, + + schema: { + optional: true, + type: String, + custom() { + try { + eval(`(${this.value ?? ''})`); + return undefined; + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + MessageBox.defaults({ messages: { en: { syntax: message } } }); + return 'syntax'; + } + }, + }, +}); + +const propsBridge = new SimpleSchema2Bridge({ schema: propsSchema }); + +export const schema = new SimpleSchema({ + preset: { + type: String, + defaultValue: Object.keys(presets)[0], + allowedValues: Object.keys(presets), + }, + + props: { + type: Object, + blackbox: true, + defaultValue: { + autosave: false, + autosaveDelay: 100, + disabled: false, + label: true, + placeholder: false, + readOnly: false, + schema: presets[Object.keys(presets)[0] as keyof typeof presets], + showInlineError: false, + asyncOnSubmit: false, + asyncOnValidate: false, + }, + uniforms: { schema: propsBridge }, + }, + + theme: { + type: String, + uniforms: { transform: (theme: string) => `uniforms-${theme}` }, + defaultValue: Object.keys(themes)[0], + allowedValues: Object.keys(themes), + }, +}); + +export const bridge = new SimpleSchema2Bridge({ schema }); diff --git a/website/src/lib/styles.tsx b/website/src/lib/styles.tsx new file mode 100644 index 000000000..b275db1a9 --- /dev/null +++ b/website/src/lib/styles.tsx @@ -0,0 +1,49 @@ +import React from 'react'; + +const commonStyles = ` + body { + margin: 0; + } + + textarea[name="schema"] { + font-family: monospace !important; + min-height: 20em !important; + } + + .frame-root { + padding: 1rem !important; + } +`; + +const common = \ No newline at end of file diff --git a/website/static/assets/companies/cleverbeagle.png b/website/static/assets/companies/cleverbeagle.png new file mode 100644 index 0000000000000000000000000000000000000000..7f19166c9473d743dd6fd561146e728213c077a5 GIT binary patch literal 45068 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 Y*=Ifb5{C;7%mYG7OkT81*wFv~05>Kv)&Kwi literal 0 HcmV?d00001 diff --git a/website/static/assets/companies/deskpro.png b/website/static/assets/companies/deskpro.png new file mode 100644 index 0000000000000000000000000000000000000000..2715612d047442c1607b21a3f733e95fd160ead0 GIT binary patch literal 10318 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 literal 0 HcmV?d00001 diff --git a/website/static/assets/companies/graphback.png b/website/static/assets/companies/graphback.png new file mode 100644 index 0000000000000000000000000000000000000000..193cc473b239dceef0a78f2710b164d1fa1cb546 GIT binary patch literal 38753 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 literal 0 HcmV?d00001 diff --git a/website/static/assets/companies/nokia.png b/website/static/assets/companies/nokia.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9de782130e1183a95bb6922ad7f0bb6f588931 GIT binary patch literal 6253 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 XRD9sV0T;%>00000NkvXXu0mjfWbTSKe=x-JN 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 DY-%}h literal 0 HcmV?d00001 diff --git a/website/static/assets/companies/orionjs.png b/website/static/assets/companies/orionjs.png new file mode 100644 index 0000000000000000000000000000000000000000..d3380d6372790b0d0c313f09c149fd6fcd4d82a9 GIT binary patch literal 5509 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 literal 0 HcmV?d00001 From 8a0d305cc08ee3e447aee95832347ad59dec6d9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zendran?= Date: Wed, 6 Nov 2024 14:01:24 +0100 Subject: [PATCH 12/15] Migrating Comparison section --- website/docs/compare-matrix-landing.md | 8 +++++++ .../pages-parts/LandingPage/Comparison.tsx | 24 +++++++++++++++++++ .../pages-parts/LandingPage/LandingPage.tsx | 6 ++--- 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 website/docs/compare-matrix-landing.md create mode 100644 website/src/pages-parts/LandingPage/Comparison.tsx diff --git a/website/docs/compare-matrix-landing.md b/website/docs/compare-matrix-landing.md new file mode 100644 index 000000000..81cf036ec --- /dev/null +++ b/website/docs/compare-matrix-landing.md @@ -0,0 +1,8 @@ +| Feature | [uniforms](https://github.com/vazco/uniforms) | [Formik](https://github.com/jaredpalmer/formik) | [redux-form](https://github.com/erikras/redux-form) | [React Final Form](https://github.com/final-form/react-final-form) | [react-hook-form](https://github.com/react-hook-form/react-hook-form) | +| :----------------------------------------------------------------------------- | :---------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------: | ----------------------------------------------------------------------------------- | +| Automatic form layout | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | +| Manual state management | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | +| Manually trigger validation | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | +| AntD, Bootstrap 3, Bootstrap 4, Bootstrap 5, Material, MUI, Semantic UI themes | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | +| JSON, GraphQL, SimpleSchema, Zod and custom schema support | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | +| Field level validation | ![unsupported](https://github.githubassets.com/images/icons/emoji/unicode/2716.png) | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | ![supported](https://github.githubassets.com/images/icons/emoji/unicode/2714.png) | diff --git a/website/src/pages-parts/LandingPage/Comparison.tsx b/website/src/pages-parts/LandingPage/Comparison.tsx new file mode 100644 index 000000000..76a14aa80 --- /dev/null +++ b/website/src/pages-parts/LandingPage/Comparison.tsx @@ -0,0 +1,24 @@ +import React from 'react'; + +import Matrix from '../../../docs/compare-matrix-landing.md'; +import { Button } from '../../components/Button'; +import { Heading } from '../../components/Heading'; +import styles from '../../css/index.module.css'; + +export function Comparison() { + return ( +
+ + Comparison +
+ with similar libraries +
+
+ +
+ +
+
+
+ ); +} diff --git a/website/src/pages-parts/LandingPage/LandingPage.tsx b/website/src/pages-parts/LandingPage/LandingPage.tsx index 66de5bb9c..4e7b1b2ac 100644 --- a/website/src/pages-parts/LandingPage/LandingPage.tsx +++ b/website/src/pages-parts/LandingPage/LandingPage.tsx @@ -3,7 +3,7 @@ import React from 'react'; import styles from '../../css/index.module.css'; // import { CommercialServices } from './CommercialServices'; -// import { Comparison } from './Comparison'; +import { Comparison } from './Comparison'; import { Discussions } from './Discussions'; import { ExampleFullyCustomizable } from './ExampleFullyCustomizable'; import { ExampleSimpleYetPowerful } from './ExampleSimpleYetPowerful'; @@ -30,9 +30,9 @@ export function LandingPage() { - {/*
+
-
*/} +
{/*
*/} From 600a8cfbc5a5028eb097609d004f3a6c06345ae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zendran?= Date: Wed, 6 Nov 2024 14:03:35 +0100 Subject: [PATCH 13/15] Migrating CommercialServices section --- .../LandingPage/CommercialServices.tsx | 109 ++++++++++++++++++ .../pages-parts/LandingPage/LandingPage.tsx | 6 +- website/static/img/forminer-screenshot.png | Bin 0 -> 36521 bytes 3 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 website/src/pages-parts/LandingPage/CommercialServices.tsx create mode 100644 website/static/img/forminer-screenshot.png diff --git a/website/src/pages-parts/LandingPage/CommercialServices.tsx b/website/src/pages-parts/LandingPage/CommercialServices.tsx new file mode 100644 index 000000000..8f5702536 --- /dev/null +++ b/website/src/pages-parts/LandingPage/CommercialServices.tsx @@ -0,0 +1,109 @@ +import classNames from 'classnames'; +import React from 'react'; + +import { Button } from '../../components/Button'; +import { Heading } from '../../components/Heading'; +import styles from '../../css/index.module.css'; + +const forminerLink = + 'https://forminer.com/?utm_source=uniforms&utm_medium=Section_CTA&utm_campaign=Forminer_uniforms_section_CTA&utm_id=Forminer_uniforms_section'; + +export function CommercialServices() { + return ( +
+
+
+
+ + Forminer UI + +
+
+ +
+
+

+ Commercial support +

+ Forminer +

+ A commercial implementation of uniforms, which can save you up to + 1500 hours of work. +

+
    +
  • + Ideal for building no-code tools - thanks to a + schema-first approach +
  • +
  • + Package - easy to integrate with your project and design + system +
  • +
  • + Powerful solution - custom fields, full state machine +
  • +
  • + Good level of support - based on our popular OS solution, + uniforms +
  • +
+
+ +
+
+
+
+
+ ); +} diff --git a/website/src/pages-parts/LandingPage/LandingPage.tsx b/website/src/pages-parts/LandingPage/LandingPage.tsx index 4e7b1b2ac..2bf3120c8 100644 --- a/website/src/pages-parts/LandingPage/LandingPage.tsx +++ b/website/src/pages-parts/LandingPage/LandingPage.tsx @@ -2,7 +2,7 @@ import classNames from 'classnames'; import React from 'react'; import styles from '../../css/index.module.css'; -// import { CommercialServices } from './CommercialServices'; +import { CommercialServices } from './CommercialServices'; import { Comparison } from './Comparison'; import { Discussions } from './Discussions'; import { ExampleFullyCustomizable } from './ExampleFullyCustomizable'; @@ -33,9 +33,9 @@ export function LandingPage() {
- {/*
+
-
*/} +