Initial monorepo setup
This commit is contained in:
commit
405ce15933
19
.eslintrc.cjs
Normal file
19
.eslintrc.cjs
Normal file
@ -0,0 +1,19 @@
|
||||
/** @type {import('eslint').Linter.Config} */
|
||||
module.exports = {
|
||||
root: true,
|
||||
parser: "@typescript-eslint/parser",
|
||||
parserOptions: {
|
||||
ecmaVersion: 2020,
|
||||
sourceType: "module",
|
||||
},
|
||||
plugins: ["solid"],
|
||||
extends: ["plugin:solid/typescript"],
|
||||
rules: {
|
||||
// Only Solid-specific rules — everything else handled by Biome
|
||||
"solid/reactivity": "error",
|
||||
"solid/no-destructure": "error",
|
||||
"solid/prefer-for": "warn",
|
||||
"solid/no-react-deps": "error",
|
||||
"solid/no-react-specific-props": "error",
|
||||
},
|
||||
};
|
||||
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
node_modules/
|
||||
dist/
|
||||
.tsdown/
|
||||
coverage/
|
||||
*.tsbuildinfo
|
||||
.superpowers/
|
||||
33
biome.json
Normal file
33
biome.json
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"$schema": "https://biomejs.dev/schemas/1.9.0/schema.json",
|
||||
"organizeImports": { "enabled": true },
|
||||
"linter": {
|
||||
"enabled": true,
|
||||
"rules": {
|
||||
"recommended": true,
|
||||
"suspicious": {
|
||||
"noExplicitAny": "error"
|
||||
},
|
||||
"style": {
|
||||
"useConst": "error",
|
||||
"useTemplate": "error"
|
||||
}
|
||||
}
|
||||
},
|
||||
"formatter": {
|
||||
"enabled": true,
|
||||
"indentStyle": "space",
|
||||
"indentWidth": 2,
|
||||
"lineWidth": 100
|
||||
},
|
||||
"javascript": {
|
||||
"formatter": {
|
||||
"quoteStyle": "double",
|
||||
"semicolons": "always",
|
||||
"trailingCommas": "all"
|
||||
}
|
||||
},
|
||||
"files": {
|
||||
"ignore": ["node_modules", "dist", ".tsdown", "coverage"]
|
||||
}
|
||||
}
|
||||
18
package.json
Normal file
18
package.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "pettyui-monorepo",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "pnpm -r build",
|
||||
"test": "pnpm -r test",
|
||||
"lint": "biome check . && eslint packages --ext .ts,.tsx",
|
||||
"format": "biome format --write .",
|
||||
"typecheck": "pnpm -r typecheck"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^1.9.0",
|
||||
"eslint": "^9.0.0",
|
||||
"eslint-plugin-solid": "^0.14.0",
|
||||
"typescript": "^6.0.2",
|
||||
"zod": "^4.3.6"
|
||||
}
|
||||
}
|
||||
71
packages/core/package.json
Normal file
71
packages/core/package.json
Normal file
@ -0,0 +1,71 @@
|
||||
{
|
||||
"name": "pettyui",
|
||||
"version": "0.1.0",
|
||||
"description": "AI-native headless UI component library for SolidJS",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": {
|
||||
"solid": "./src/index.ts",
|
||||
"import": "./dist/index.js",
|
||||
"require": "./dist/index.cjs"
|
||||
},
|
||||
"./dialog": {
|
||||
"solid": "./src/components/dialog/index.ts",
|
||||
"import": "./dist/dialog/index.js",
|
||||
"require": "./dist/dialog/index.cjs"
|
||||
},
|
||||
"./presence": {
|
||||
"solid": "./src/utilities/presence/index.ts",
|
||||
"import": "./dist/utilities/presence/index.js",
|
||||
"require": "./dist/utilities/presence/index.cjs"
|
||||
},
|
||||
"./focus-trap": {
|
||||
"solid": "./src/utilities/focus-trap/index.ts",
|
||||
"import": "./dist/utilities/focus-trap/index.js",
|
||||
"require": "./dist/utilities/focus-trap/index.cjs"
|
||||
},
|
||||
"./scroll-lock": {
|
||||
"solid": "./src/utilities/scroll-lock/index.ts",
|
||||
"import": "./dist/utilities/scroll-lock/index.js",
|
||||
"require": "./dist/utilities/scroll-lock/index.cjs"
|
||||
},
|
||||
"./dismiss": {
|
||||
"solid": "./src/utilities/dismiss/index.ts",
|
||||
"import": "./dist/utilities/dismiss/index.js",
|
||||
"require": "./dist/utilities/dismiss/index.cjs"
|
||||
},
|
||||
"./portal": {
|
||||
"solid": "./src/utilities/portal/index.ts",
|
||||
"import": "./dist/utilities/portal/index.js",
|
||||
"require": "./dist/utilities/portal/index.cjs"
|
||||
},
|
||||
"./visually-hidden": {
|
||||
"solid": "./src/utilities/visually-hidden/index.ts",
|
||||
"import": "./dist/utilities/visually-hidden/index.js",
|
||||
"require": "./dist/utilities/visually-hidden/index.cjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsdown",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"solid-js": "^1.9.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@floating-ui/dom": "^1.7.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@solidjs/testing-library": "^0.8.10",
|
||||
"@testing-library/jest-dom": "^6.0.0",
|
||||
"@testing-library/user-event": "^14.0.0",
|
||||
"jsdom": "^26.0.0",
|
||||
"solid-js": "^1.9.12",
|
||||
"tsdown": "^0.21.7",
|
||||
"vite": "^8.0.3",
|
||||
"vite-plugin-solid": "^2.11.11",
|
||||
"vitest": "^4.1.2"
|
||||
}
|
||||
}
|
||||
1
packages/core/tests/setup.ts
Normal file
1
packages/core/tests/setup.ts
Normal file
@ -0,0 +1 @@
|
||||
import "@testing-library/jest-dom";
|
||||
11
packages/core/tsconfig.json
Normal file
11
packages/core/tsconfig.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"extends": "../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": "src",
|
||||
"outDir": "dist",
|
||||
"baseUrl": ".",
|
||||
"paths": {}
|
||||
},
|
||||
"include": ["src"],
|
||||
"exclude": ["node_modules", "dist", "tests"]
|
||||
}
|
||||
19
packages/core/tsdown.config.ts
Normal file
19
packages/core/tsdown.config.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import { defineConfig } from "tsdown";
|
||||
|
||||
export default defineConfig({
|
||||
entry: {
|
||||
index: "src/index.ts",
|
||||
"dialog/index": "src/components/dialog/index.ts",
|
||||
"presence/index": "src/utilities/presence/index.ts",
|
||||
"focus-trap/index": "src/utilities/focus-trap/index.ts",
|
||||
"scroll-lock/index": "src/utilities/scroll-lock/index.ts",
|
||||
"dismiss/index": "src/utilities/dismiss/index.ts",
|
||||
"portal/index": "src/utilities/portal/index.ts",
|
||||
"visually-hidden/index": "src/utilities/visually-hidden/index.ts",
|
||||
},
|
||||
format: ["esm", "cjs"],
|
||||
dts: true,
|
||||
clean: true,
|
||||
sourcemap: true,
|
||||
external: ["solid-js", "solid-js/web", "solid-js/store"],
|
||||
});
|
||||
12
packages/core/vite.config.ts
Normal file
12
packages/core/vite.config.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { defineConfig } from "vite";
|
||||
import solid from "vite-plugin-solid";
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [solid()],
|
||||
test: {
|
||||
environment: "jsdom",
|
||||
globals: true,
|
||||
setupFiles: ["./tests/setup.ts"],
|
||||
transformMode: { web: [/\.[jt]sx?$/] },
|
||||
},
|
||||
});
|
||||
2
pnpm-workspace.yaml
Normal file
2
pnpm-workspace.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
packages:
|
||||
- "packages/*"
|
||||
18
tsconfig.base.json
Normal file
18
tsconfig.base.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2020",
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "bundler",
|
||||
"jsx": "preserve",
|
||||
"jsxImportSource": "solid-js",
|
||||
"strict": true,
|
||||
"exactOptionalPropertyTypes": true,
|
||||
"noUncheckedIndexedAccess": true,
|
||||
"verbatimModuleSyntax": true,
|
||||
"declaration": true,
|
||||
"declarationMap": true,
|
||||
"sourceMap": true,
|
||||
"esModuleInterop": false,
|
||||
"skipLibCheck": true
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user