From 1cda815b67ee4a057bf1c7643c624a29c7808fd2 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Sun, 15 Mar 2026 09:37:49 +0100 Subject: [PATCH 01/23] Started working on replacing tailwind with bootstrap --- package.json | 1 - packages/cheatsheet-local/package.json | 10 +- packages/cheatsheet-local/src/app/app.tsx | 1 - packages/cheatsheet-local/src/app/styles.css | 3 - packages/cheatsheet-local/tailwind.config.mjs | 17 - packages/cheatsheet-local/vite.config.ts | 8 +- packages/cursorless-org-docs/package.json | 8 - .../src/plugins/tailwind-plugin.ts | 20 - .../cursorless-org-docs/tailwind.config.mjs | 17 - packages/cursorless-org/package.json | 9 +- packages/cursorless-org/tailwind.config.mjs | 101 ----- .../compile-esbuild.sh | 11 - .../package.json | 18 +- .../tailwind.config.mjs | 17 - .../vite.config.ts | 29 ++ pnpm-lock.yaml | 416 ++---------------- prettier.config.cjs | 4 +- 17 files changed, 73 insertions(+), 617 deletions(-) delete mode 100644 packages/cheatsheet-local/src/app/styles.css delete mode 100644 packages/cheatsheet-local/tailwind.config.mjs delete mode 100644 packages/cursorless-org-docs/src/plugins/tailwind-plugin.ts delete mode 100644 packages/cursorless-org-docs/tailwind.config.mjs delete mode 100644 packages/cursorless-org/tailwind.config.mjs delete mode 100755 packages/cursorless-vscode-tutorial-webview/compile-esbuild.sh delete mode 100644 packages/cursorless-vscode-tutorial-webview/tailwind.config.mjs create mode 100644 packages/cursorless-vscode-tutorial-webview/vite.config.ts diff --git a/package.json b/package.json index d74314d3a3..2a00a1062c 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,6 @@ "eslint-plugin-unicorn": "^63.0.0", "eslint-plugin-unused-imports": "^4.4.1", "prettier": "^3.8.1", - "prettier-plugin-tailwindcss": "^0.7.2", "syncpack": "^14.2.0", "tsx": "^4.21.0", "typescript": "^5.9.3", diff --git a/packages/cheatsheet-local/package.json b/packages/cheatsheet-local/package.json index 7eacb64b6c..a430f94511 100644 --- a/packages/cheatsheet-local/package.json +++ b/packages/cheatsheet-local/package.json @@ -13,18 +13,13 @@ "default": "./out/index.js" } }, - "postcss": { - "plugins": { - "@tailwindcss/postcss": {} - } - }, "scripts": { "test": "jest", "compile": "tsc --build", "watch": "tsc --build --watch", "build": "pnpm build:prod", "build:dev": "vite build --mode development", - "build:prod": "vite build --mode production", + "build:prod": "vite build", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { @@ -35,12 +30,9 @@ }, "devDependencies": { "@preact/preset-vite": "^2.10.3", - "@tailwindcss/postcss": "^4.2.1", "@types/jest": "^30.0.0", "@types/node": "^24.12.0", "jest": "^30.3.0", - "postcss": "^8.5.8", - "tailwindcss": "^4.2.1", "typescript": "^5.9.3", "vite": "^8.0.0", "vite-plugin-singlefile": "^2.3.0" diff --git a/packages/cheatsheet-local/src/app/app.tsx b/packages/cheatsheet-local/src/app/app.tsx index 4d7ed5d3fa..5f70631ed8 100644 --- a/packages/cheatsheet-local/src/app/app.tsx +++ b/packages/cheatsheet-local/src/app/app.tsx @@ -1,6 +1,5 @@ import type { CheatsheetInfo } from "@cursorless/cheatsheet"; import { CheatsheetPage } from "@cursorless/cheatsheet"; -import "./styles.css"; declare global { interface Document { diff --git a/packages/cheatsheet-local/src/app/styles.css b/packages/cheatsheet-local/src/app/styles.css deleted file mode 100644 index 71dcdc3b77..0000000000 --- a/packages/cheatsheet-local/src/app/styles.css +++ /dev/null @@ -1,3 +0,0 @@ -@import "tailwindcss"; - -@config "../../tailwind.config.mjs"; diff --git a/packages/cheatsheet-local/tailwind.config.mjs b/packages/cheatsheet-local/tailwind.config.mjs deleted file mode 100644 index 1f717a9105..0000000000 --- a/packages/cheatsheet-local/tailwind.config.mjs +++ /dev/null @@ -1,17 +0,0 @@ -import { readFileSync } from "node:fs"; - -const references = JSON.parse( - readFileSync("tsconfig.json", "utf-8"), -).references.map((ref) => ref.path); - -/** @type {import('tailwindcss').Config} */ -export default { - content: [".", ...references].flatMap((pkg) => [ - `${pkg}/src/**/*.{ts,tsx,html}`, - `!${pkg}/src/**/*.{stories,spec}.{ts,tsx,html}`, - ]), - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/packages/cheatsheet-local/vite.config.ts b/packages/cheatsheet-local/vite.config.ts index aae848e987..a16e55f0bc 100644 --- a/packages/cheatsheet-local/vite.config.ts +++ b/packages/cheatsheet-local/vite.config.ts @@ -1,15 +1,19 @@ import { fakeCheatsheetInfo } from "@cursorless/cheatsheet"; import { viteHtmlParams } from "@cursorless/common"; import preact from "@preact/preset-vite"; -import { defineConfig } from "vite"; +import { defineConfig, type UserConfig } from "vite"; import { viteSingleFile } from "vite-plugin-singlefile"; -export default defineConfig(() => { +export default defineConfig((): UserConfig => { return { build: { outDir: "dist", }, + resolve: { + conditions: ["cursorless:bundler"], + }, + plugins: [ preact(), viteSingleFile(), diff --git a/packages/cursorless-org-docs/package.json b/packages/cursorless-org-docs/package.json index 33f95f257d..8417f97f61 100644 --- a/packages/cursorless-org-docs/package.json +++ b/packages/cursorless-org-docs/package.json @@ -12,11 +12,6 @@ "default": "./out/index.js" } }, - "postcss": { - "plugins": { - "@tailwindcss/postcss": {} - } - }, "browserslist": { "production": [ ">0.5%", @@ -66,12 +61,9 @@ "@cursorless/node-common": "workspace:*", "@docusaurus/module-type-aliases": "^3.9.2", "@docusaurus/types": "^3.9.2", - "@tailwindcss/postcss": "^4.2.1", "@tsconfig/docusaurus": "^2.0.9", "@types/mdast": "^4.0.4", "@types/react": "^19.2.14", - "postcss": "^8.5.8", - "tailwindcss": "^4.2.1", "typescript": "^5.9.3", "unified": "^11.0.5" } diff --git a/packages/cursorless-org-docs/src/plugins/tailwind-plugin.ts b/packages/cursorless-org-docs/src/plugins/tailwind-plugin.ts deleted file mode 100644 index 29d9e30028..0000000000 --- a/packages/cursorless-org-docs/src/plugins/tailwind-plugin.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { - LoadContext, - PluginOptions, - PostCssOptions, -} from "@docusaurus/types"; -import tailwindcss from "@tailwindcss/postcss"; - -export default function tailwindPlugin( - _context: LoadContext, - _options: PluginOptions, -) { - return { - name: "tailwind-plugin", - - configurePostCss(postcssOptions: PostCssOptions): PostCssOptions { - postcssOptions.plugins.push(tailwindcss); - return postcssOptions; - }, - }; -} diff --git a/packages/cursorless-org-docs/tailwind.config.mjs b/packages/cursorless-org-docs/tailwind.config.mjs deleted file mode 100644 index 473fd7f86f..0000000000 --- a/packages/cursorless-org-docs/tailwind.config.mjs +++ /dev/null @@ -1,17 +0,0 @@ -import { readFileSync } from "node:fs"; - -const references = JSON.parse( - readFileSync("tsconfig.json", "utf-8"), -).references.map((ref) => ref.path); - -/** @type {import('tailwindcss').Config} */ -export default { - content: [".", ...references].map((pkg) => `${pkg}/src/**/*.{js,ts,jsx,tsx}`), - theme: { - extend: {}, - }, - corePlugins: { - preflight: false, - }, - plugins: [], -}; diff --git a/packages/cursorless-org/package.json b/packages/cursorless-org/package.json index f03b5e3488..ce2fc055b3 100644 --- a/packages/cursorless-org/package.json +++ b/packages/cursorless-org/package.json @@ -13,11 +13,6 @@ "default": "./out/index.js" } }, - "postcss": { - "plugins": { - "@tailwindcss/postcss": {} - } - }, "scripts": { "dev": "vite", "build": "vite build", @@ -30,18 +25,16 @@ "dependencies": { "@cursorless/cheatsheet": "workspace:*", "@cursorless/common": "workspace:*", + "bootstrap": "^5.3.8", "preact": "^10.29.0", "react-player": "^3.4.0", "wouter-preact": "^3.9.0" }, "devDependencies": { "@preact/preset-vite": "^2.10.3", - "@tailwindcss/postcss": "^4.2.1", "@types/node": "^24.12.0", "eslint": "^10.0.3", "http-server": "^14.1.1", - "postcss": "^8.5.8", - "tailwindcss": "^4.2.1", "typescript": "^5.9.3", "vite": "^8.0.0", "vite-plugin-svgr": "^4.5.0" diff --git a/packages/cursorless-org/tailwind.config.mjs b/packages/cursorless-org/tailwind.config.mjs deleted file mode 100644 index 3ab4f5a8ba..0000000000 --- a/packages/cursorless-org/tailwind.config.mjs +++ /dev/null @@ -1,101 +0,0 @@ -import defaultTheme from "tailwindcss/defaultTheme"; -import { readFileSync } from "node:fs"; - -const CONTENT_RATIO = 1000 / 814; - -/** - * Returns css strings for width, height, and fontSize that will result in a - * fixed aspect ratio and automaticaly expand to fill the smallest dimension. - * - * Based loosely on https://stackoverflow.com/a/20593342 - * @type {(marginXPct: number, marginYPct: number) => {width: string, height: - * string, fontSize: string}} - */ -function getScalingStrings(marginXPct, marginYPct) { - const widthVw = 100 - marginXPct * 2; - const maxWidth = `calc(${widthVw}vw - var(--safe-area-inset-right) - var(--safe-area-inset-left))`; - const heightVh = 100 - marginYPct * 2; - const maxHeight = `calc(${heightVh}vh - var(--safe-area-inset-bottom) - var(--safe-area-inset-top))`; - const heightFromWidth = `calc(${maxWidth} / ${CONTENT_RATIO})`; - const widthFromHeight = `calc(${maxHeight} * ${CONTENT_RATIO})`; - - return { - width: `min(${maxWidth}, ${widthFromHeight})`, - height: `min(${maxHeight}, ${heightFromWidth})`, - fontSize: `min(calc(${maxWidth} / 100), calc(${widthFromHeight} / 100))`, - }; -} - -const { - width: smallWidth, - height: smallHeight, - fontSize: smallFontSize, -} = getScalingStrings(15.28, 10.255); - -/** - * On screens that have very wide or very tall aspect ratios, we expand closer - * to the narrow dimension, otherwise the content feels small. - */ -const { - width: stretchedWidth, - height: stretchedHeight, - fontSize: stretchedFontSize, -} = getScalingStrings(5, 5); - -const references = JSON.parse( - readFileSync("tsconfig.json", "utf-8"), -).references.map((ref) => ref.path); - -/** @type {import('tailwindcss').Config} */ -export default { - content: [".", ...references].map((pkg) => `${pkg}/src/**/*.{js,ts,jsx,tsx}`), - theme: { - extend: { - fontFamily: { - mono: ["Inconsolata", ...defaultTheme.fontFamily.mono], - "mono-wide": [ - "Inconsolata-SemiExpanded", - ...defaultTheme.fontFamily.mono, - ], - }, - width: { - "sm-base": smallWidth, - "stretched-base": stretchedWidth, - }, - height: { - "sm-base": smallHeight, - "stretched-base": stretchedHeight, - }, - fontSize: { - "sm-base": smallFontSize, - "stretched-base": stretchedFontSize, - xs: "1.2em", - lg: "1.8em", - "2xl": "2.4em", - "3xl": "3.6em", - }, - colors: { - salmon: { - 100: "#FFFAF8", - 300: "#F8C9BA", - 400: "#FF9273", - 700: "#372e2a", - 800: "#161110", - 900: "#0A0707", - }, - teal: { - 100: "#F9FFFE", - 200: "#CDFFF9", - 300: "#99FFF3", - 400: "#00907F", - 500: "#47D4C3", - 600: "#0F776B", - 700: "#005349", - 800: "#00443C", - 900: "#00110F", - }, - }, - }, - }, - plugins: [], -}; diff --git a/packages/cursorless-vscode-tutorial-webview/compile-esbuild.sh b/packages/cursorless-vscode-tutorial-webview/compile-esbuild.sh deleted file mode 100755 index ad16a53c07..0000000000 --- a/packages/cursorless-vscode-tutorial-webview/compile-esbuild.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -esbuild \ - ./src/index.tsx \ - --outfile=./out/index.js \ - --format=cjs \ - --bundle \ - --sourcemap \ - "$@" diff --git a/packages/cursorless-vscode-tutorial-webview/package.json b/packages/cursorless-vscode-tutorial-webview/package.json index e0af16968e..05f649d4b9 100644 --- a/packages/cursorless-vscode-tutorial-webview/package.json +++ b/packages/cursorless-vscode-tutorial-webview/package.json @@ -7,25 +7,21 @@ "type": "module", "main": "./out/index.js", "scripts": { - "compile:tsc": "tsc --build", - "compile": "pnpm compile:tsc", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm build:esbuild --watch", - "watch:tailwind": "pnpm build:tailwind --watch", - "watch": "pnpm run -F @cursorless/cursorless-vscode-tutorial-webview --parallel '/^watch:.*/'", - "build:esbuild": "bash ./compile-esbuild.sh", - "build:tailwind": "pnpx @tailwindcss/cli -i ./src/index.css -o ./out/index.css", + "compile": "tsc --build", + "watch": "tsc --build --watch", "build": "pnpm build:prod", - "build:prod": "pnpm build:esbuild --minify && pnpm build:tailwind --minify", - "build:dev": "pnpm build:esbuild && pnpm build:tailwind", + "build:dev": "vite build --mode development", + "build:prod": "vite build", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { "@cursorless/common": "workspace:*", + "bootstrap": "^5.3.8", "preact": "^10.29.0" }, "devDependencies": { + "@preact/preset-vite": "^2.10.3", "@types/vscode-webview": "^1.57.5", - "tailwindcss": "^4.2.1" + "vite": "^8.0.0" } } diff --git a/packages/cursorless-vscode-tutorial-webview/tailwind.config.mjs b/packages/cursorless-vscode-tutorial-webview/tailwind.config.mjs deleted file mode 100644 index 1f717a9105..0000000000 --- a/packages/cursorless-vscode-tutorial-webview/tailwind.config.mjs +++ /dev/null @@ -1,17 +0,0 @@ -import { readFileSync } from "node:fs"; - -const references = JSON.parse( - readFileSync("tsconfig.json", "utf-8"), -).references.map((ref) => ref.path); - -/** @type {import('tailwindcss').Config} */ -export default { - content: [".", ...references].flatMap((pkg) => [ - `${pkg}/src/**/*.{ts,tsx,html}`, - `!${pkg}/src/**/*.{stories,spec}.{ts,tsx,html}`, - ]), - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/packages/cursorless-vscode-tutorial-webview/vite.config.ts b/packages/cursorless-vscode-tutorial-webview/vite.config.ts new file mode 100644 index 0000000000..8e3f052a11 --- /dev/null +++ b/packages/cursorless-vscode-tutorial-webview/vite.config.ts @@ -0,0 +1,29 @@ +import preact from "@preact/preset-vite"; +import { defineConfig, type UserConfig } from "vite"; + +export default defineConfig((): UserConfig => { + return { + build: { + outDir: "out", + sourcemap: true, + + lib: { + entry: "./src/index.tsx", + cssFileName: "index", + formats: ["cjs"], + }, + + rollupOptions: { + output: { + entryFileNames: "index.js", + }, + }, + }, + + resolve: { + conditions: ["cursorless:bundler"], + }, + + plugins: [preact()], + }; +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db110e26ac..182b76b2a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,9 +62,6 @@ importers: prettier: specifier: ^3.8.1 version: 3.8.1 - prettier-plugin-tailwindcss: - specifier: ^0.7.2 - version: 0.7.2(prettier@3.8.1) syncpack: specifier: ^14.2.0 version: 14.2.0 @@ -133,9 +130,6 @@ importers: '@preact/preset-vite': specifier: ^2.10.3 version: 2.10.3(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.59.0)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) - '@tailwindcss/postcss': - specifier: ^4.2.1 - version: 4.2.1 '@types/jest': specifier: ^30.0.0 version: 30.0.0 @@ -145,12 +139,6 @@ importers: jest: specifier: ^30.3.0 version: 30.3.0(@types/node@24.12.0)(ts-node@10.9.2(@swc/core@1.15.18)(@types/node@24.12.0)(typescript@5.9.3)) - postcss: - specifier: ^8.5.8 - version: 8.5.8 - tailwindcss: - specifier: ^4.2.1 - version: 4.2.1 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -443,6 +431,9 @@ importers: '@cursorless/common': specifier: workspace:* version: link:../common + bootstrap: + specifier: ^5.3.8 + version: 5.3.8(@popperjs/core@2.11.8) preact: specifier: ^10.29.0 version: 10.29.0 @@ -456,9 +447,6 @@ importers: '@preact/preset-vite': specifier: ^2.10.3 version: 2.10.3(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.59.0)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) - '@tailwindcss/postcss': - specifier: ^4.2.1 - version: 4.2.1 '@types/node': specifier: ^24.12.0 version: 24.12.0 @@ -468,12 +456,6 @@ importers: http-server: specifier: ^14.1.1 version: 14.1.1 - postcss: - specifier: ^8.5.8 - version: 8.5.8 - tailwindcss: - specifier: ^4.2.1 - version: 4.2.1 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -547,9 +529,6 @@ importers: '@docusaurus/types': specifier: ^3.9.2 version: 3.9.2(@swc/core@1.15.18(@swc/helpers@0.5.15))(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tailwindcss/postcss': - specifier: ^4.2.1 - version: 4.2.1 '@tsconfig/docusaurus': specifier: ^2.0.9 version: 2.0.9 @@ -559,12 +538,6 @@ importers: '@types/react': specifier: ^19.2.14 version: 19.2.14 - postcss: - specifier: ^8.5.8 - version: 8.5.8 - tailwindcss: - specifier: ^4.2.1 - version: 4.2.1 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -736,16 +709,22 @@ importers: '@cursorless/common': specifier: workspace:* version: link:../common + bootstrap: + specifier: ^5.3.8 + version: 5.3.8(@popperjs/core@2.11.8) preact: specifier: ^10.29.0 version: 10.29.0 devDependencies: + '@preact/preset-vite': + specifier: ^2.10.3 + version: 2.10.3(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.59.0)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@types/vscode-webview': specifier: ^1.57.5 version: 1.57.5 - tailwindcss: - specifier: ^4.2.1 - version: 4.2.1 + vite: + specifier: ^8.0.0 + version: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/meta-updater: devDependencies: @@ -1022,10 +1001,6 @@ packages: resolution: {integrity: sha512-UuihBGHafG/ENsrcTGAn5rsOffrCIRuHMOsD85fZGLEY92ate+BMTUqxz60dv5zerh8ZumN4bRm8eW2z9L11jA==} engines: {node: '>= 14.0.0'} - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} @@ -3397,6 +3372,9 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + '@preact/preset-vite@2.10.3': resolution: {integrity: sha512-1SiS+vFItpkNdBs7q585PSAIln0wBeBdcpJYbzPs1qipsb/FssnkUioNXuRsb8ZnU8YEQHr+3v8+/mzWSnTQmg==} peerDependencies: @@ -4173,98 +4151,6 @@ packages: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} - '@tailwindcss/node@4.2.1': - resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==} - - '@tailwindcss/oxide-android-arm64@4.2.1': - resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.2.1': - resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.2.1': - resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==} - engines: {node: '>= 20'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.2.1': - resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==} - engines: {node: '>= 20'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': - resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==} - engines: {node: '>= 20'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': - resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@tailwindcss/oxide-linux-arm64-musl@4.2.1': - resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@tailwindcss/oxide-linux-x64-gnu@4.2.1': - resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==} - engines: {node: '>= 20'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@tailwindcss/oxide-linux-x64-musl@4.2.1': - resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==} - engines: {node: '>= 20'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@tailwindcss/oxide-wasm32-wasi@4.2.1': - resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib - - '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': - resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.2.1': - resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==} - engines: {node: '>= 20'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.2.1': - resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==} - engines: {node: '>= 20'} - - '@tailwindcss/postcss@4.2.1': - resolution: {integrity: sha512-OEwGIBnXnj7zJeonOh6ZG9woofIjGrd2BORfvE5p9USYKDCZoQmfqLcfNiRWoJlRWLdNPn2IgVZuWAOM4iTYMw==} - '@tsconfig/docusaurus@2.0.9': resolution: {integrity: sha512-0jVxZCgy2v7TnJrW9kVNikNwJHeiWb68Zhiiw2vHw4tzBFSP5vS2zn3O5EY2oPEVz5dXZRkK7MnWG3Ay5q0mIg==} @@ -5125,6 +5011,11 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + bootstrap@5.3.8: + resolution: {integrity: sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==} + peerDependencies: + '@popperjs/core': ^2.11.8 + boxen@6.2.1: resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7579,73 +7470,36 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lightningcss-android-arm64@1.31.1: - resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [android] - lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.31.1: - resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - lightningcss-darwin-arm64@1.32.0: resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.31.1: - resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - lightningcss-darwin-x64@1.32.0: resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.31.1: - resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - lightningcss-freebsd-x64@1.32.0: resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.31.1: - resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - lightningcss-linux-arm-gnueabihf@1.32.0: resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.31.1: - resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - lightningcss-linux-arm64-gnu@1.32.0: resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} @@ -7653,13 +7507,6 @@ packages: os: [linux] libc: [glibc] - lightningcss-linux-arm64-musl@1.31.1: - resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} @@ -7667,13 +7514,6 @@ packages: os: [linux] libc: [musl] - lightningcss-linux-x64-gnu@1.31.1: - resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} @@ -7681,13 +7521,6 @@ packages: os: [linux] libc: [glibc] - lightningcss-linux-x64-musl@1.31.1: - resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} @@ -7695,34 +7528,18 @@ packages: os: [linux] libc: [musl] - lightningcss-win32-arm64-msvc@1.31.1: - resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.31.1: - resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - lightningcss-win32-x64-msvc@1.32.0: resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.31.1: - resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} - engines: {node: '>= 12.0.0'} - lightningcss@1.32.0: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} @@ -9131,61 +8948,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-tailwindcss@0.7.2: - resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==} - engines: {node: '>=20.19'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-hermes': '*' - '@prettier/plugin-oxc': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@trivago/prettier-plugin-sort-imports': '*' - '@zackad/prettier-plugin-twig': '*' - prettier: ^3.0 - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-marko: '*' - prettier-plugin-multiline-arrays: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-sort-imports: '*' - prettier-plugin-svelte: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-hermes': - optional: true - '@prettier/plugin-oxc': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - '@zackad/prettier-plugin-twig': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-marko: - optional: true - prettier-plugin-multiline-arrays: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-sort-imports: - optional: true - prettier-plugin-svelte: - optional: true - prettier@3.8.1: resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} engines: {node: '>=14'} @@ -10222,9 +9984,6 @@ packages: resolution: {integrity: sha512-IQ6G4wK/t8VBauYiGPLx+d3fA5XjSVagjWV5SIYzvEvglbQjwEcukeYI68JOPpdydjxhZ9sIgzRlSmwSpphHyw==} engines: {node: '>= 6.0.0'} - tailwindcss@4.2.1: - resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==} - tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} @@ -11180,8 +10939,6 @@ snapshots: dependencies: '@algolia/client-common': 5.49.2 - '@alloc/quick-lru@5.2.0': {} - '@asamuzakjp/css-color@3.2.0': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) @@ -14961,6 +14718,8 @@ snapshots: '@polka/url@1.0.0-next.29': {} + '@popperjs/core@2.11.8': {} + '@preact/preset-vite@2.10.3(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.59.0)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 @@ -15563,75 +15322,6 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/node@4.2.1': - dependencies: - '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.20.0 - jiti: 2.6.1 - lightningcss: 1.31.1 - magic-string: 0.30.21 - source-map-js: 1.2.1 - tailwindcss: 4.2.1 - - '@tailwindcss/oxide-android-arm64@4.2.1': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.2.1': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.2.1': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.2.1': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.2.1': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.2.1': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.2.1': - optional: true - - '@tailwindcss/oxide-wasm32-wasi@4.2.1': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.2.1': - optional: true - - '@tailwindcss/oxide@4.2.1': - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.2.1 - '@tailwindcss/oxide-darwin-arm64': 4.2.1 - '@tailwindcss/oxide-darwin-x64': 4.2.1 - '@tailwindcss/oxide-freebsd-x64': 4.2.1 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.1 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.1 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.1 - '@tailwindcss/oxide-linux-x64-musl': 4.2.1 - '@tailwindcss/oxide-wasm32-wasi': 4.2.1 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 - - '@tailwindcss/postcss@4.2.1': - dependencies: - '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.2.1 - '@tailwindcss/oxide': 4.2.1 - postcss: 8.5.8 - tailwindcss: 4.2.1 - '@tsconfig/docusaurus@2.0.9': {} '@tsconfig/node10@1.0.12': @@ -16620,6 +16310,10 @@ snapshots: boolbase@1.0.0: {} + bootstrap@5.3.8(@popperjs/core@2.11.8): + dependencies: + '@popperjs/core': 2.11.8 + boxen@6.2.1: dependencies: ansi-align: 3.0.1 @@ -19400,7 +19094,8 @@ snapshots: jiti@1.21.7: {} - jiti@2.6.1: {} + jiti@2.6.1: + optional: true joi@17.13.3: dependencies: @@ -19517,88 +19212,39 @@ snapshots: dependencies: immediate: 3.0.6 - lightningcss-android-arm64@1.31.1: - optional: true - lightningcss-android-arm64@1.32.0: optional: true - lightningcss-darwin-arm64@1.31.1: - optional: true - lightningcss-darwin-arm64@1.32.0: optional: true - lightningcss-darwin-x64@1.31.1: - optional: true - lightningcss-darwin-x64@1.32.0: optional: true - lightningcss-freebsd-x64@1.31.1: - optional: true - lightningcss-freebsd-x64@1.32.0: optional: true - lightningcss-linux-arm-gnueabihf@1.31.1: - optional: true - lightningcss-linux-arm-gnueabihf@1.32.0: optional: true - lightningcss-linux-arm64-gnu@1.31.1: - optional: true - lightningcss-linux-arm64-gnu@1.32.0: optional: true - lightningcss-linux-arm64-musl@1.31.1: - optional: true - lightningcss-linux-arm64-musl@1.32.0: optional: true - lightningcss-linux-x64-gnu@1.31.1: - optional: true - lightningcss-linux-x64-gnu@1.32.0: optional: true - lightningcss-linux-x64-musl@1.31.1: - optional: true - lightningcss-linux-x64-musl@1.32.0: optional: true - lightningcss-win32-arm64-msvc@1.31.1: - optional: true - lightningcss-win32-arm64-msvc@1.32.0: optional: true - lightningcss-win32-x64-msvc@1.31.1: - optional: true - lightningcss-win32-x64-msvc@1.32.0: optional: true - lightningcss@1.31.1: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.31.1 - lightningcss-darwin-arm64: 1.31.1 - lightningcss-darwin-x64: 1.31.1 - lightningcss-freebsd-x64: 1.31.1 - lightningcss-linux-arm-gnueabihf: 1.31.1 - lightningcss-linux-arm64-gnu: 1.31.1 - lightningcss-linux-arm64-musl: 1.31.1 - lightningcss-linux-x64-gnu: 1.31.1 - lightningcss-linux-x64-musl: 1.31.1 - lightningcss-win32-arm64-msvc: 1.31.1 - lightningcss-win32-x64-msvc: 1.31.1 - lightningcss@1.32.0: dependencies: detect-libc: 2.1.2 @@ -21403,10 +21049,6 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-tailwindcss@0.7.2(prettier@3.8.1): - dependencies: - prettier: 3.8.1 - prettier@3.8.1: {} pretty-bytes@5.6.0: {} @@ -22634,8 +22276,6 @@ snapshots: tail@2.2.6: {} - tailwindcss@4.2.1: {} - tapable@2.3.0: {} tar@7.5.11: diff --git a/prettier.config.cjs b/prettier.config.cjs index 48180ea7fc..4d39ce5abb 100644 --- a/prettier.config.cjs +++ b/prettier.config.cjs @@ -1,8 +1,6 @@ -/* global module, require */ +/* global module */ /** @type {import("prettier").Config} */ module.exports = { trailingComma: "all", - - plugins: [require.resolve("prettier-plugin-tailwindcss")], }; From 0dc841af935a15923e5fb6ff06a630ebb068f319 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Sun, 15 Mar 2026 09:56:53 +0100 Subject: [PATCH 02/23] more styles --- packages/cursorless-org-docs/docusaurus.config.mts | 5 +---- packages/cursorless-org/src/Button.css | 10 ++++++++++ packages/cursorless-org/src/Button.tsx | 4 +++- .../src/{embedded-video.tsx => EmbeddedVideo.tsx} | 2 +- packages/cursorless-org/src/LandingPage.tsx | 14 +++++--------- 5 files changed, 20 insertions(+), 15 deletions(-) create mode 100644 packages/cursorless-org/src/Button.css rename packages/cursorless-org/src/{embedded-video.tsx => EmbeddedVideo.tsx} (92%) diff --git a/packages/cursorless-org-docs/docusaurus.config.mts b/packages/cursorless-org-docs/docusaurus.config.mts index 187ac7d389..8125b08dda 100644 --- a/packages/cursorless-org-docs/docusaurus.config.mts +++ b/packages/cursorless-org-docs/docusaurus.config.mts @@ -160,10 +160,7 @@ const config: Config = { ], ], - plugins: [ - "./src/plugins/tailwind-plugin.ts", - "./src/plugins/scope-tests-plugin.ts", - ], + plugins: ["./src/plugins/scope-tests-plugin.ts"], themeConfig: { navbar: { diff --git a/packages/cursorless-org/src/Button.css b/packages/cursorless-org/src/Button.css new file mode 100644 index 0000000000..973082699d --- /dev/null +++ b/packages/cursorless-org/src/Button.css @@ -0,0 +1,10 @@ +.landing-page-btn { + color: inherit; + font-size: 2.4em; + letter-spacing: 0.18em; + text-decoration: none; +} + +.landing-page-btn:hover { + color: var(--salmon-400); +} diff --git a/packages/cursorless-org/src/Button.tsx b/packages/cursorless-org/src/Button.tsx index a74c776b8b..6bbfa1797f 100644 --- a/packages/cursorless-org/src/Button.tsx +++ b/packages/cursorless-org/src/Button.tsx @@ -1,3 +1,5 @@ +import "./Button.css"; + interface Props { text: string; href: string; @@ -15,7 +17,7 @@ export function Button({ text, href, isExternal }: Props) { return ( {text} diff --git a/packages/cursorless-org/src/embedded-video.tsx b/packages/cursorless-org/src/EmbeddedVideo.tsx similarity index 92% rename from packages/cursorless-org/src/embedded-video.tsx rename to packages/cursorless-org/src/EmbeddedVideo.tsx index e53b5c4b6b..1103def513 100644 --- a/packages/cursorless-org/src/embedded-video.tsx +++ b/packages/cursorless-org/src/EmbeddedVideo.tsx @@ -14,7 +14,7 @@ export function EmbeddedVideo({ youtubeSlug }: Props) {
{isError ? (
Error loading YouTube video
diff --git a/packages/cursorless-org/src/LandingPage.tsx b/packages/cursorless-org/src/LandingPage.tsx index f7dd9c4d7b..d4302d99bf 100644 --- a/packages/cursorless-org/src/LandingPage.tsx +++ b/packages/cursorless-org/src/LandingPage.tsx @@ -1,5 +1,6 @@ import { EmbeddedVideo } from "./embedded-video"; import { Button } from "./Button"; +import { EmbeddedVideo } from "./EmbeddedVideo"; import { TITLE, YOUTUBE_SLUG } from "./constants"; import Logo from "./logo.svg?react"; @@ -9,13 +10,8 @@ export function LandingPage() { return ( <> {TITLE} -
-
-
-
-
+
+
Cursorless
- Voice coding{" "} - at the speed of thought + Voice coding{" "} + at the speed of thought ); } From bd5b468936c4d4deae3d12466cbb24ce08b6b377 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Sun, 15 Mar 2026 10:53:15 +0100 Subject: [PATCH 03/23] Docs --- packages/cursorless-org-docs/package.json | 1 + .../cursorless-org-docs/src/css/custom.css | 36 +++++++++++++++---- .../src/docs/components/ScopeVisualizer.tsx | 4 +-- .../contributing/MissingLanguageScopes.tsx | 6 ++-- .../cursorless-org-docs/src/theme/Root.tsx | 29 +++++++++++++++ pnpm-lock.yaml | 3 ++ 6 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 packages/cursorless-org-docs/src/theme/Root.tsx diff --git a/packages/cursorless-org-docs/package.json b/packages/cursorless-org-docs/package.json index 8417f97f61..1ff8ef8e67 100644 --- a/packages/cursorless-org-docs/package.json +++ b/packages/cursorless-org-docs/package.json @@ -49,6 +49,7 @@ "@docusaurus/theme-common": "^3.9.2", "@docusaurus/theme-search-algolia": "^3.9.2", "@mdx-js/react": "^3.1.1", + "bootstrap": "^5.3.8", "clsx": "^2.1.1", "mdast-util-find-and-replace": "^3.0.2", "prism-react-renderer": "^2.4.1", diff --git a/packages/cursorless-org-docs/src/css/custom.css b/packages/cursorless-org-docs/src/css/custom.css index 77cdf370f6..44762dc180 100644 --- a/packages/cursorless-org-docs/src/css/custom.css +++ b/packages/cursorless-org-docs/src/css/custom.css @@ -1,6 +1,33 @@ -@import "tailwindcss"; +@import "bootstrap/dist/css/bootstrap.min.css"; -@config "../../tailwind.config.mjs"; +/* Undo some of the global bootstrap styles */ +body { + background-color: var(--ifm-background-color); + color: var(--ifm-text-color); + line-height: inherit; +} + +a { + text-decoration: var(--ifm-link-decoration); +} + +code { + color: inherit; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: var(--ifm-heading-font-weight); +} + +.navbar { + padding: var(--ifm-navbar-padding-vertical) + var(--ifm-navbar-padding-horizontal); +} /* From https://github.com/facebook/docusaurus/blob/cc0bceab9c1678303f6237f5526753edc1b12fc3/website/src/css/custom.css#L70-L86 */ .header-github-link:hover { @@ -29,11 +56,6 @@ filter: invert(90%) hue-rotate(180deg); } -/* Necessary to make dropdown options work in dark mode */ -select { - background-color: var(--ifm-background-color); -} - .hidden { display: none; } diff --git a/packages/cursorless-org-docs/src/docs/components/ScopeVisualizer.tsx b/packages/cursorless-org-docs/src/docs/components/ScopeVisualizer.tsx index de25911e4b..7b745e84ef 100644 --- a/packages/cursorless-org-docs/src/docs/components/ScopeVisualizer.tsx +++ b/packages/cursorless-org-docs/src/docs/components/ScopeVisualizer.tsx @@ -83,10 +83,10 @@ export function ScopeVisualizer({ languageId, scopeTypeType }: Props) { -

{languageId} - + link

diff --git a/packages/cursorless-org-docs/src/theme/Root.tsx b/packages/cursorless-org-docs/src/theme/Root.tsx new file mode 100644 index 0000000000..9806ac973b --- /dev/null +++ b/packages/cursorless-org-docs/src/theme/Root.tsx @@ -0,0 +1,29 @@ +import React, { useEffect } from "react"; +import type { Props } from "@theme/Root"; + +function syncBootstrapTheme() { + const root = document.documentElement; + const theme = root.getAttribute("data-theme"); + + if (theme == null) { + root.removeAttribute("data-bs-theme"); + return; + } + + root.setAttribute("data-bs-theme", theme); +} + +export default function Root({ children }: Props): React.JSX.Element { + useEffect(() => { + syncBootstrapTheme(); + + const observer = new MutationObserver(syncBootstrapTheme); + observer.observe(document.documentElement, { + attributeFilter: ["data-theme"], + }); + + return () => observer.disconnect(); + }, []); + + return <>{children}; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 182b76b2a0..c66bc74589 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -498,6 +498,9 @@ importers: '@mdx-js/react': specifier: ^3.1.1 version: 3.1.1(@types/react@19.2.14)(react@19.2.4) + bootstrap: + specifier: ^5.3.8 + version: 5.3.8(@popperjs/core@2.11.8) clsx: specifier: ^2.1.1 version: 2.1.1 From 05b67fd7715df2e88d5b049508011c8307d66dc1 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Sun, 15 Mar 2026 13:35:14 +0100 Subject: [PATCH 04/23] docs --- .../cursorless-org-docs/src/css/custom.css | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/cursorless-org-docs/src/css/custom.css b/packages/cursorless-org-docs/src/css/custom.css index 44762dc180..aaba771265 100644 --- a/packages/cursorless-org-docs/src/css/custom.css +++ b/packages/cursorless-org-docs/src/css/custom.css @@ -1,10 +1,16 @@ @import "bootstrap/dist/css/bootstrap.min.css"; /* Undo some of the global bootstrap styles */ -body { - background-color: var(--ifm-background-color); - color: var(--ifm-text-color); - line-height: inherit; + +:root { + --bs-body-color: var(--ifm-text-color); + --bs-body-bg: var(--ifm-background-color); + --bs-body-line-height: var(--ifm-line-height-base); +} + +.navbar { + --bs-navbar-padding-x: var(--ifm-navbar-padding-horizontal); + --bs-navbar-padding-y: var(--ifm-navbar-padding-vertical); } a { @@ -24,11 +30,6 @@ h6 { font-weight: var(--ifm-heading-font-weight); } -.navbar { - padding: var(--ifm-navbar-padding-vertical) - var(--ifm-navbar-padding-horizontal); -} - /* From https://github.com/facebook/docusaurus/blob/cc0bceab9c1678303f6237f5526753edc1b12fc3/website/src/css/custom.css#L70-L86 */ .header-github-link:hover { opacity: 0.6; From 27c7a59daa7050ac924d82b79c2dbce4c7f942ef Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Sun, 15 Mar 2026 15:16:13 +0100 Subject: [PATCH 05/23] --- .../src/docs/components/ScopeVisualizer.tsx | 1 + packages/cursorless-org/src/Button.css | 10 --- packages/cursorless-org/src/Button.tsx | 2 - packages/cursorless-org/src/LandingPage.tsx | 80 ++++++++++++------- packages/cursorless-org/src/constants.ts | 3 +- packages/cursorless-org/src/styles.css | 77 +++++++++++++++--- 6 files changed, 122 insertions(+), 51 deletions(-) delete mode 100644 packages/cursorless-org/src/Button.css diff --git a/packages/cursorless-org-docs/src/docs/components/ScopeVisualizer.tsx b/packages/cursorless-org-docs/src/docs/components/ScopeVisualizer.tsx index 7b745e84ef..9a62af2f8c 100644 --- a/packages/cursorless-org-docs/src/docs/components/ScopeVisualizer.tsx +++ b/packages/cursorless-org-docs/src/docs/components/ScopeVisualizer.tsx @@ -75,6 +75,7 @@ export function ScopeVisualizer({ languageId, scopeTypeType }: Props) { return (