ultracite 7.0.0 → 7.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -62
- package/dist/aider-K7JLZT2D.svg +1 -0
- package/dist/amazon-q-TSOJNPXB.svg +1 -0
- package/dist/amp-EV4LVL5I.svg +1 -0
- package/dist/antigravity-JVONECNW.svg +1 -0
- package/dist/augmentcode-Q62PVXKO.svg +1 -0
- package/dist/biome-TVLEY2T4.svg +1 -0
- package/dist/claude-6DLEHRDQ.svg +1 -0
- package/dist/cline-6HWKIYN7.svg +1 -0
- package/dist/codex-NQZ5TJCL.svg +1 -0
- package/dist/copilot-L2IY45R2.svg +1 -0
- package/dist/crush-LYLRDQGZ.svg +1 -0
- package/dist/cursor-GQNH5LCA.svg +1 -0
- package/dist/droid-266OHJBT.svg +1 -0
- package/dist/eslint-7IULJKW7.svg +1 -0
- package/dist/firebase-studio-ILLWWYU7.svg +1 -0
- package/dist/firebender-UNO6LSZG.svg +1 -0
- package/dist/gemini-OYS6V4BH.svg +1 -0
- package/dist/goose-XBIEVD4H.svg +1 -0
- package/dist/index.js +196 -33
- package/dist/jules-HJPVWU73.svg +1 -0
- package/dist/junie-RUWBUV6N.svg +1 -0
- package/dist/kilo-code-4QYUYY2E.svg +1 -0
- package/dist/kiro-N2M256R6.svg +1 -0
- package/dist/open-hands-K5EYKO6T.svg +1 -0
- package/dist/opencode-K3274JKQ.svg +1 -0
- package/dist/oxlint-5IE3ABOZ.svg +1 -0
- package/dist/prettier-O4V2FSEA.svg +1 -0
- package/dist/qwen-N3D5CQYL.svg +1 -0
- package/dist/roo-code-CVLBTS7D.svg +1 -0
- package/dist/stylelint-DEBSWZVS.svg +1 -0
- package/dist/trae-RXVCFBOF.svg +1 -0
- package/dist/void-NYH3U3BB.svg +1 -0
- package/dist/vscode-DEOUEB65.svg +1 -0
- package/dist/warp-OZKAAQRT.svg +1 -0
- package/dist/windsurf-5T7JOTST.svg +1 -0
- package/dist/zed-SIARPESF.svg +1 -0
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Ultracite
|
|
2
2
|
|
|
3
|
-
**A
|
|
3
|
+
**A production-grade, zero-configuration preset for ESLint, Biome, and Oxlint.**
|
|
4
4
|
|
|
5
|
-
Ultracite is
|
|
5
|
+
Ultracite is designed to help you and your AI models write consistent and type-safe code without the hassle of configuration. Choose your preferred toolchain and get started in seconds.
|
|
6
6
|
|
|
7
7
|
<div>
|
|
8
8
|
<img src="https://img.shields.io/npm/dy/ultracite" alt="" />
|
|
@@ -12,80 +12,38 @@ Ultracite is a highly opinionated preset for [Biome](https://biomejs.dev), desig
|
|
|
12
12
|
|
|
13
13
|
## Quick Start
|
|
14
14
|
|
|
15
|
-
Install and initialize Ultracite in your project:
|
|
16
|
-
|
|
17
15
|
```sh
|
|
18
16
|
npx ultracite init
|
|
19
17
|
```
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
## Key Features
|
|
24
|
-
|
|
25
|
-
### ⚡ **Subsecond Performance**
|
|
26
|
-
Built in Rust for instant code analysis and processing. On-save checks feel seamless without interrupting your workflow.
|
|
27
|
-
|
|
28
|
-
### 🎯 **Zero-Config by Design**
|
|
29
|
-
Preconfigured rules optimized for Next.js, React, and TypeScript projects with sensible defaults. Customize when needed, but it works perfectly out of the box.
|
|
30
|
-
|
|
31
|
-
### 🛡️ **Maximum Type Safety**
|
|
32
|
-
Enforces strict type checking and best practices by default, catching type errors and preventing unsafe code patterns before they become problems.
|
|
33
|
-
|
|
34
|
-
### 🏗️ **Monorepo Ready**
|
|
35
|
-
Unified toolchain configuration across all packages and apps, eliminating thousands of lines of duplicate config files while maintaining consistency.
|
|
36
|
-
|
|
37
|
-
### 🤖 **AI-Friendly**
|
|
38
|
-
Ensures consistent code style and quality across all team members and AI models, eliminating debates over formatting and reducing code review friction. Supports Copilot, Cursor, Windsurf, Zed, Claude Code, and Codex.
|
|
39
|
-
|
|
40
|
-
### 🔧 **Intuitive and Robust**
|
|
41
|
-
Automatically reformats code and fixes lint issues on save, with clear error reporting for issues that need manual attention.
|
|
42
|
-
|
|
43
|
-
## How It Works
|
|
44
|
-
|
|
45
|
-
Once set up, Ultracite runs mostly in the background:
|
|
19
|
+
The interactive setup will guide you through selecting your formatter/linter, framework, editor, and AI agents.
|
|
46
20
|
|
|
47
|
-
|
|
48
|
-
- **Lint fixes** applied automatically when possible
|
|
49
|
-
- **Type safety** enforced with strict rules
|
|
50
|
-
- **Import organization** and cleanup
|
|
51
|
-
- **Accessibility improvements** built-in
|
|
21
|
+
## Supported Tools
|
|
52
22
|
|
|
53
|
-
|
|
23
|
+
- **Biome** — All-in-one formatting and linting
|
|
24
|
+
- **ESLint + Prettier + Stylelint** — Most mature ecosystem with the largest plugin support
|
|
25
|
+
- **Oxlint + Oxfmt** — 50-100x faster than ESLint, part of the Oxc ecosystem
|
|
54
26
|
|
|
55
|
-
##
|
|
27
|
+
## Key Features
|
|
56
28
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
npx ultracite fix
|
|
29
|
+
### ⚡ Subsecond Performance
|
|
30
|
+
Built on Rust-based tools for instant code analysis. On-save checks feel seamless without interrupting your workflow.
|
|
60
31
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
```
|
|
32
|
+
### 🎯 Zero-Config by Design
|
|
33
|
+
Hundreds of preconfigured rules optimized for JavaScript and TypeScript projects. Customize when needed, but it works perfectly out of the box.
|
|
64
34
|
|
|
65
|
-
|
|
35
|
+
### 🤖 AI-Ready
|
|
36
|
+
Generate rules for 20+ AI agents including Claude Code, GitHub Copilot, Cursor, Gemini, and more. Ensures consistent code style across all team members and AI models.
|
|
66
37
|
|
|
67
|
-
|
|
38
|
+
### 🏗️ Monorepo Ready
|
|
39
|
+
Unified toolchain configuration across all packages and apps, eliminating duplicate config files while maintaining consistency.
|
|
68
40
|
|
|
69
|
-
|
|
70
|
-
bun test
|
|
71
|
-
```
|
|
41
|
+
## Ultracite Cloud
|
|
72
42
|
|
|
73
|
-
|
|
43
|
+
Automated linting and AI-powered fixes for your repositories. Connect your repos and let Ultracite automatically review pull requests, run scheduled lint checks, and fix issues with Claude.
|
|
74
44
|
|
|
75
|
-
|
|
76
|
-
bun test:coverage
|
|
77
|
-
```
|
|
45
|
+
Learn more at [ultracite.ai/cloud](https://www.ultracite.ai/cloud)
|
|
78
46
|
|
|
79
47
|
---
|
|
80
48
|
|
|
81
|
-
Read the [docs](https://
|
|
82
|
-
|
|
83
|
-
## Sponsors
|
|
84
|
-
|
|
85
|
-
Thank you to all our sponsors!
|
|
86
|
-
|
|
87
|
-
### CodeRabbit
|
|
88
|
-
|
|
89
|
-

|
|
90
|
-
|
|
91
|
-
[CodeRabbit](https://www.coderabbit.ai/) helps you cut code review time & bugs in half. Supercharge your entire team with AI-driven contextual feedback. Supports all languages!
|
|
49
|
+
Read the [docs](https://docs.ultracite.ai/) for detailed setup instructions, configuration options, and examples.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#14b014"/><g fill="#fff"><path d="m68.0433 55.0734c-.14-.0778-.21-.2411-.21-.49s.07-.4044.21-.4667c.1555-.0777.4744-.1166.9567-.1166.4822 0 .7933.0389.9333.1166.1555.0623.2333.2178.2333.4667s-.0778.4122-.2333.49c-.14.0622-.4511.0933-.9333.0933-.4823 0-.8012-.0311-.9567-.0933zm0-2.3333c-.14-.0778-.21-.2411-.21-.49s.07-.4045.21-.4667c.1555-.0778.4744-.1167.9567-.1167.4822 0 .7933.0389.9333.1167.1555.0622.2333.2178.2333.4667s-.0778.4122-.2333.49c-.14.0622-.4511.0933-.9333.0933-.4823 0-.8012-.0311-.9567-.0933zm0-2.3334c-.14-.0777-.21-.2411-.21-.49 0-.2488.07-.4044.21-.4666.1555-.0778.4744-.1167.9567-.1167.4822 0 .7933.0389.9333.1167.1555.0622.2333.2178.2333.4666 0 .2489-.0778.4123-.2333.49-.14.0623-.4511.0934-.9333.0934-.4823 0-.8012-.0311-.9567-.0934zm5.8333-2.3333c-.14-.0778-.21-.2411-.21-.49s.07-.4044.21-.4667c.1556-.0777.4745-.1166.9567-.1166s.7933.0389.9333.1166c.1556.0623.2334.2178.2334.4667s-.0778.4122-.2334.49c-.14.0622-.4511.0933-.9333.0933s-.8011-.0311-.9567-.0933zm-5.74 0c-.2022-.0622-.3033-.2255-.3033-.49 0-.2644.1011-.4278.3033-.49s.6845-.0933 1.4467-.0933 1.2444.0311 1.4467.0933c.2022.0622.3033.2256.3033.49 0 .2645-.1011.4278-.3033.49-.2023.0622-.6845.0933-1.4467.0933s-1.2445-.0311-1.4467-.0933zm2.4034-2.3333c-.2489-.0622-.3734-.2256-.3734-.49 0-.2645.1245-.4278.3734-.49.2488-.0622.9022-.0934 1.96-.0934 1.0577 0 1.7111.0312 1.96.0934.2488.0622.3733.2255.3733.49 0 .2644-.1245.4278-.3733.49-.2489.0622-.9023.0933-1.96.0933-1.0578 0-1.7112-.0311-1.96-.0933zm-3.6634 0c-.14-.0778-.21-.2411-.21-.49s.07-.4045.21-.4667c.1556-.0778.4745-.1167.9567-.1167s.7933.0389.9333.1167c.1556.0622.2334.2178.2334.4667s-.0778.4122-.2334.49c-.14.0622-.4511.0933-.9333.0933s-.8011-.0311-.9567-.0933z"/><path d="m56.1667 54.5834c0-.2489.1166-.4044.35-.4667.2955-.0777 1.3455-.1166 3.15-.1166 2.0066 0 3.1189.07 3.3366.21.1089.0622.1634.1866.1634.3733 0 .2489-.1167.4045-.35.4667-.2956.0778-1.3456.1166-3.15.1166-2.0067 0-3.1189-.07-3.3367-.21-.1089-.0622-.1633-.1866-.1633-.3733zm-.9567-1.8433c-.14-.0778-.21-.2411-.21-.49s.07-.4045.21-.4667c.1556-.0778.4744-.1167.9567-.1167.4822 0 .7933.0389.9333.1167.1556.0622.2333.2178.2333.4667s-.0777.4122-.2333.49c-.14.0622-.4511.0933-.9333.0933-.4823 0-.8011-.0311-.9567-.0933zm-.21-2.8234c0-.2333.1167-.3811.35-.4433.3733-.0933 1.8122-.14 4.3167-.14 2.6911 0 4.1766.07 4.4566.21.14.0622.21.1867.21.3733 0 .2334-.1166.3812-.35.4434-.3733.0933-1.8122.14-4.3166.14-2.6911 0-4.1767-.07-4.4567-.21-.14-.0622-.21-.1867-.21-.3734zm7.21-1.8433c-.14-.0778-.21-.2411-.21-.49s.07-.4044.21-.4667c.1556-.0777.4744-.1166.9567-.1166.4822 0 .7933.0389.9333.1166.1556.0623.2333.2178.2333.4667s-.0777.4122-.2333.49c-.14.0622-.4511.0933-.9333.0933-.4823 0-.8011-.0311-.9567-.0933zm-7 0c-.14-.0778-.21-.2411-.21-.49s.07-.4044.21-.4667c.1556-.0777.4744-.1166.9567-.1166.4822 0 .7933.0389.9333.1166.1556.0623.2333.2178.2333.4667s-.0777.4122-.2333.49c-.14.0622-.4511.0933-.9333.0933-.4823 0-.8011-.0311-.9567-.0933zm.9567-2.8233c0-.2489.1166-.4045.35-.4667.2955-.0778 1.3455-.1167 3.15-.1167 2.0066 0 3.1189.07 3.3366.21.1089.0623.1634.1867.1634.3734 0 .2489-.1167.4044-.35.4666-.2956.0778-1.3456.1167-3.15.1167-2.0067 0-3.1189-.07-3.3367-.21-.1089-.0622-.1633-.1867-.1633-.3733z"/><path d="m44.4999 54.5833c0-.2333.1167-.3811.35-.4433.3422-.0933 1.5867-.14 3.7334-.14 2.3488 0 3.6477.07 3.8966.21.1245.0622.1867.1867.1867.3733 0 .2334-.1167.3811-.35.4434-.3422.0933-1.5867.14-3.7333.14-2.3489 0-3.6478-.07-3.8967-.21-.1245-.0623-.1867-.1867-.1867-.3734zm4.97-1.8433c-.2022-.0622-.3033-.2256-.3033-.49s.1011-.4278.3033-.49.6845-.0933 1.4467-.0933c.7778 0 1.26.0311 1.4467.0933.2022.0622.3033.2256.3033.49s-.1011.4278-.3033.49c-.1867.0622-.6689.0933-1.4467.0933-.7622 0-1.2445-.0311-1.4467-.0933zm-5.9266 0c-.14-.0778-.21-.2411-.21-.49s.07-.4044.21-.4667c.1555-.0777.4744-.1166.9566-.1166s.7934.0389.9334.1166c.1555.0623.2333.2178.2333.4667s-.0778.4122-.2333.49c-.14.0622-.4512.0933-.9334.0933s-.8011-.0311-.9566-.0933zm7-2.3333c-.14-.0778-.21-.2411-.21-.49s.07-.4045.21-.4667c.1555-.0778.4744-.1167.9566-.1167s.7934.0389.9334.1167c.1555.0622.2333.2178.2333.4667s-.0778.4122-.2333.49c-.14.0622-.4512.0933-.9334.0933s-.8011-.0311-.9566-.0933zm-7 0c-.14-.0778-.21-.2411-.21-.49s.07-.4045.21-.4667c.1555-.0778.4744-.1167.9566-.1167s.7934.0389.9334.1167c.1555.0622.2333.2178.2333.4667s-.0778.4122-.2333.49c-.14.0622-.4512.0933-.9334.0933s-.8011-.0311-.9566-.0933zm5.9266-2.3334c-.2022-.0622-.3033-.2255-.3033-.49 0-.2644.1011-.4277.3033-.49.2022-.0622.6845-.0933 1.4467-.0933.7778 0 1.26.0311 1.4467.0933.2022.0623.3033.2256.3033.49 0 .2645-.1011.4278-.3033.49-.1867.0623-.6689.0934-1.4467.0934-.7622 0-1.2445-.0311-1.4467-.0934zm-5.9266 0c-.14-.0777-.21-.2411-.21-.49s.07-.4044.21-.4666c.1555-.0778.4744-.1167.9566-.1167s.7934.0389.9334.1167c.1555.0622.2333.2177.2333.4666s-.0778.4123-.2333.49c-.14.0623-.4512.0934-.9334.0934s-.8011-.0311-.9566-.0934zm.9566-2.8233c0-.2333.1167-.3811.35-.4433.3422-.0934 1.5867-.14 3.7334-.14 2.3488 0 3.6477.07 3.8966.21.1245.0622.1867.1866.1867.3733 0 .2333-.1167.3811-.35.4433-.3422.0934-1.5867.14-3.7333.14-2.3489 0-3.6478-.07-3.8967-.21-.1245-.0622-.1867-.1866-.1867-.3733zm6.0434-1.8433c-.14-.0778-.21-.2411-.21-.49s.07-.4045.21-.4667c.1555-.0778.4744-.1167.9566-.1167s.7934.0389.9334.1167c.1555.0622.2333.2178.2333.4667s-.0778.4122-.2333.49c-.14.0622-.4512.0933-.9334.0933s-.8011-.0311-.9566-.0933zm0-2.3334c-.14-.0777-.21-.2411-.21-.49s.07-.4044.21-.4666c.1555-.0778.4744-.1167.9566-.1167s.7934.0389.9334.1167c.1555.0622.2333.2177.2333.4666s-.0778.4123-.2333.49c-.14.0623-.4512.0934-.9334.0934s-.8011-.0311-.9566-.0934z"/><path d="m32.8333 54.5833c0-.2489.1166-.4044.35-.4666.2955-.0778 1.3455-.1167 3.15-.1167 2.0066 0 3.1188.07 3.3366.21.1089.0622.1634.1867.1634.3733 0 .2489-.1167.4045-.35.4667-.2956.0778-1.3456.1167-3.15.1167-2.0067 0-3.1189-.07-3.3367-.21-.1089-.0623-.1633-.1867-.1633-.3734zm2.5433-1.8433c-.14-.0778-.21-.2411-.21-.49s.07-.4044.21-.4667c.1555-.0777.4744-.1166.9567-.1166.4822 0 .7933.0389.9333.1166.1555.0623.2333.2178.2333.4667s-.0778.4122-.2333.49c-.14.0622-.4511.0933-.9333.0933-.4823 0-.8012-.0311-.9567-.0933zm0-2.3333c-.14-.0778-.21-.2411-.21-.49s.07-.4045.21-.4667c.1555-.0778.4744-.1167.9567-.1167.4822 0 .7933.0389.9333.1167.1555.0622.2333.2178.2333.4667s-.0778.4122-.2333.49c-.14.0622-.4511.0933-.9333.0933-.4823 0-.8012-.0311-.9567-.0933zm0-2.3334c-.14-.0777-.21-.2411-.21-.49s.07-.4044.21-.4666c.1555-.0778.4744-.1167.9567-.1167.4822 0 .7933.0389.9333.1167.1555.0622.2333.2177.2333.4666s-.0778.4123-.2333.49c-.14.0623-.4511.0934-.9333.0934-.4823 0-.8012-.0311-.9567-.0934zm-1.0733-2.3333c-.2023-.0622-.3034-.2256-.3034-.49s.1011-.4278.3034-.49c.2022-.0622.6844-.0933 1.4466-.0933s1.2445.0311 1.4467.0933.3033.2256.3033.49-.1011.4278-.3033.49-.6845.0933-1.4467.0933-1.2444-.0311-1.4466-.0933zm1.0733-4.6667c-.14-.0777-.21-.2411-.21-.49s.07-.4044.21-.4666c.1555-.0778.4744-.1167.9567-.1167.4822 0 .7933.0389.9333.1167.1555.0622.2333.2177.2333.4666s-.0778.4123-.2333.49c-.14.0623-.4511.0934-.9333.0934-.4823 0-.8012-.0311-.9567-.0934z"/><path d="m21.1667 54.5834c0-.2333.1166-.3811.35-.4433.3422-.0934 1.5866-.14 3.7333-.14 2.3489 0 3.6478.07 3.8967.21.1244.0622.1866.1866.1866.3733 0 .2333-.1166.3811-.35.4433-.3422.0934-1.5866.14-3.7333.14-2.3489 0-3.6478-.07-3.8967-.21-.1244-.0622-.1866-.1866-.1866-.3733zm4.97-1.8433c-.2023-.0622-.3034-.2256-.3034-.49 0-.2645.1011-.4278.3034-.49.2022-.0622.6844-.0934 1.4466-.0934.7778 0 1.26.0312 1.4467.0934.2022.0622.3033.2255.3033.49 0 .2644-.1011.4278-.3033.49-.1867.0622-.6689.0933-1.4467.0933-.7622 0-1.2444-.0311-1.4466-.0933zm-5.9267 0c-.14-.0778-.21-.2411-.21-.49s.07-.4045.21-.4667c.1556-.0778.4744-.1167.9567-.1167.4822 0 .7933.0389.9333.1167.1556.0622.2333.2178.2333.4667s-.0777.4122-.2333.49c-.14.0622-.4511.0933-.9333.0933-.4823 0-.8011-.0311-.9567-.0933zm.9567-2.8234c0-.2333.1166-.3811.35-.4433.3422-.0933 1.5866-.14 3.7333-.14 2.3489 0 3.6478.07 3.8967.21.1244.0622.1866.1867.1866.3733 0 .2334-.1166.3812-.35.4434-.3422.0933-1.5866.14-3.7333.14-2.3489 0-3.6478-.07-3.8967-.21-.1244-.0622-.1866-.1867-.1866-.3734zm6.0433-1.8433c-.14-.0778-.21-.2411-.21-.49s.07-.4044.21-.4667c.1556-.0777.4744-.1166.9567-.1166.4822 0 .7933.0389.9333.1166.1556.0623.2333.2178.2333.4667s-.0777.4122-.2333.49c-.14.0622-.4511.0933-.9333.0933-.4823 0-.8011-.0311-.9567-.0933zm-6.0433-2.8233c0-.2489.1166-.4045.35-.4667.2955-.0778 1.3455-.1167 3.15-.1167 2.0066 0 3.1189.07 3.3366.21.1089.0623.1634.1867.1634.3734 0 .2489-.1167.4044-.35.4666-.2956.0778-1.3456.1167-3.15.1167-2.0067 0-3.1189-.07-3.3367-.21-.1089-.0622-.1633-.1867-.1633-.3733z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="70.8385" x2="36.9472" y1="3.79453" y2="76.0888"><stop offset="0" stop-color="#2fabff"/><stop offset=".3" stop-color="#5570ff"/><stop offset=".6" stop-color="#7b36ff"/><stop offset=".8" stop-color="#6a2cdc"/><stop offset="1" stop-color="#5921b8"/></linearGradient><path d="m0 0h96v96h-96z" fill="url(#a)"/><path d="m44.1416 23.9165c2.1196-1.222 4.7369-1.222 6.8564 0l15.7129 9.0732c2.1195 1.222 3.4277 3.4819 3.4278 5.9366v18.1465c0 2.444-1.3082 4.7154-3.4278 5.9375l-15.7129 9.0732c-2.1195 1.222-4.7368 1.2219-6.8564 0l-15.7139-9.0732c-2.1194-1.2221-3.4277-3.4828-3.4277-5.9375v-18.1465c.0001-2.4438 1.3085-4.7145 3.4277-5.9366zm6.251 6.6182c-1.6979-.9841-3.7855-.9841-5.4942 0l-11.1494 6.4345c-1.6977.9841-2.7469 2.7898-2.747 4.7579v12.8691c0 1.9574 1.0492 3.7747 2.747 4.7588l11.1494 6.4346c1.6979.984 3.7855.984 5.4942 0l11.1494-6.4346c1.6977-.9842 2.7461-2.7907 2.7461-4.7588v-12.8691c-.0002-1.9572-1.0485-3.7738-2.7461-4.7579zm-3.7744 3.0498c.8542-.4865 1.8918-.4865 2.7461 0l10.6201 6.1318c.8543.4867 1.373 1.3948 1.373 2.3789v12.2637c0 .0425-.0029.0848-.0049.1269l-10.9062-6.3173v-1.1631c0-.2487-.1295-.4767-.3457-.5957l-2.2822-1.3194c-.2163-.1188-.4763-.1189-.6817 0l-2.2812 1.3194c-.2163.1189-.3467.3469-.3467.5957v2.6386c.0001.2486.1305.4759.3467.5948l2.2812 1.3193c.2163.1189.4762.1189.6817 0l1.1816-.6836 10.5527 6.1113-10.1884 5.8838c-.8542.4864-1.892.4865-2.7461 0l-10.6202-6.1318c-.8541-.4866-1.3729-1.3949-1.373-2.3789v-12.2637c0-.984.5189-1.8814 1.373-2.3789z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m20 20h56v56h-56z"/></clipPath><path d="m0 0h96v96h-96z" fill="#f34e3f"/><g clip-path="url(#a)" fill="#fff"><path d="m30.0656 70.9846 13.174-13.3605 4.7942 18.2027 6.9648-1.9049-6.9391-26.43-26.0102-7.0445-1.8522 7.1165 17.8976 4.8617-13.1193 13.3409z"/><path d="m68.0551 55.4969 6.9649-1.9049-6.939-26.4298-26.0104-7.0445-1.8521 7.1164 21.9643 5.9666z"/><path d="m58.0582 65.6553 6.9647-1.9049-6.939-26.43-26.0103-7.0445-1.8521 7.1165 21.9641 5.9665z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><filter id="a" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="38.8388" width="43.8083" x="13.7393" y="-4.52633"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" mode="normal" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_46_195" stdDeviation="2.46678"/></filter><filter id="b" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="85.1648" width="85.9029" x="30.3893" y="-8.00844"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" mode="normal" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_46_195" stdDeviation="11.9256"/></filter><filter id="c" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="80.6419" width="90.4427" x="-27.338" y="-1.59853"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" mode="normal" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_46_195" stdDeviation="10.1379"/></filter><filter id="d" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="80.6419" width="90.4427" x="-27.338" y="-1.59853"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" mode="normal" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_46_195" stdDeviation="10.1379"/></filter><filter id="e" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="80.8143" width="80.8965" x="-21.1752" y="-.907127"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" mode="normal" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_46_195" stdDeviation="10.1379"/></filter><filter id="f" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="75.2747" width="74.0511" x="23.1668" y="41.1319"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" mode="normal" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_46_195" stdDeviation="9.63399"/></filter><filter id="g" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="77.9011" width="79.4518" x="7.43546" y="-26.0404"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" mode="normal" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_46_195" stdDeviation="8.73112"/></filter><filter id="h" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="102.739" width="99.6258" x="-5.4114" y="20.7741"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" mode="normal" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_46_195" stdDeviation="7.79725"/></filter><filter id="i" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="53.119" width="55.4169" x="44.1556" y="23.0711"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" mode="normal" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_46_195" stdDeviation="6.97714"/></filter><filter id="j" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="66.265" width="73.9976" x="33.8812" y="-5.73966"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" mode="normal" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_46_195" stdDeviation="5.89302"/></filter><filter id="k" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="57.7491" width="49.0104" x="2.55048" y="2.19111"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" mode="normal" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_46_195" stdDeviation="7.29361"/></filter><clipPath id="l"><path d="m0 0h96v96h-96z"/></clipPath><mask id="m" height="49" maskUnits="userSpaceOnUse" width="53" x="21" y="24"><path d="m69.034 71.7144c2.9591 2.2192 7.3977.7397 3.3289-3.329-12.206-11.8361-9.6168-44.3854-24.7818-44.3854-15.1651 0-12.5759 32.5493-24.7819 44.3854-4.4386 4.4386.3698 5.5482 3.3289 3.329 11.4663-7.7675 10.7265-21.453 21.453-21.453 10.7264 0 9.9867 13.6855 21.4529 21.453z" fill="#000"/></mask><g clip-path="url(#l)"><path d="m0 0h96v96h-96z" fill="#fafafa"/><path d="m69.034 71.7144c2.9591 2.2192 7.3977.7397 3.3289-3.329-12.206-11.8361-9.6168-44.3854-24.7818-44.3854-15.1651 0-12.5759 32.5493-24.7819 44.3854-4.4386 4.4386.3698 5.5482 3.3289 3.329 11.4663-7.7675 10.7265-21.453 21.453-21.453 10.7264 0 9.9867 13.6855 21.4529 21.453z" fill="#3186ff"/><g mask="url(#m)"><g filter="url(#a)"><path d="m18.7524 12.9759c-.9 7.929 5.9327 15.2151 15.2614 16.274 9.3287 1.0588 17.6206-4.5105 18.5207-12.4395.9-7.92906-5.9328-15.21516-15.2615-16.274007-9.3286-1.058852-17.6206 4.510507-18.5206 12.439507z" fill="#ffe432"/></g><g filter="url(#b)"><path d="m54.7194 38.899c2.3372 10.0631 12.569 16.2844 22.8532 13.8958 10.2843-2.3886 16.7266-12.4827 14.3893-22.5457-2.3372-10.0631-12.5689-16.2844-22.8532-13.8958-10.2842 2.3886-16.7266 12.4827-14.3893 22.5457z" fill="#fc413d"/></g><g filter="url(#c)"><path d="m-6.47694 45.6499c2.95331 10.3853 16.25392 15.7028 29.70774 11.8769 13.4538-3.8259 21.9662-15.3464 19.0129-25.7317-2.9533-10.3854-16.2539-15.7029-29.7078-11.877-13.453798 3.8259-21.96615 15.3464-19.01284 25.7318z" fill="#00b95c"/></g><g filter="url(#d)"><path d="m-6.47694 45.6499c2.95331 10.3853 16.25392 15.7028 29.70774 11.8769 13.4538-3.8259 21.9662-15.3464 19.0129-25.7317-2.9533-10.3854-16.2539-15.7029-29.7078-11.877-13.453798 3.8259-21.96615 15.3464-19.01284 25.7318z" fill="#00b95c"/></g><g filter="url(#e)"><path d="m4.19933 54.2579c7.40357 7.562 20.15407 7.0848 28.47907-1.0658 8.325-8.1507 9.0721-20.8882 1.6685-28.4502-7.4035-7.5619-20.154-7.0847-28.47905 1.0659-8.32503 8.1506-9.07205 20.8882-1.66852 28.4501z" fill="#00b95c"/></g><g filter="url(#f)"><path d="m42.9337 82.7778c2.299 9.8983 11.8896 16.1277 21.4213 13.9139s15.395-12.0326 13.096-21.9309-11.8896-16.1278-21.4213-13.9139c-9.5317 2.2138-15.395 12.0326-13.096 21.9309z" fill="#3186ff"/></g><g filter="url(#g)"><path d="m26.6812 3.71636c-4.814 10.72364.4528 23.53294 11.7637 28.61054s24.3826.5005 29.1966-10.2231c4.8139-10.7236-.4529-23.53296-11.7638-28.61052-11.3108-5.07758-24.3826-.50053-29.1965 10.22308z" fill="#fbbc04"/></g><g filter="url(#h)"><path d="m13.7863 107.221c-11.65414-4.575 8.2624-42.2158 13.215-54.8314 4.9525-12.6156 18.4149-19.1337 30.069-14.5586 11.6542 4.575 25.4677 29.7738 20.515 42.3893-4.9527 12.6156-52.1449 31.5757-63.799 27.0007z" fill="#3186ff"/></g><g filter="url(#i)"><path d="m84.4007 60.372c-3.1203 3.6415-11.2623 1.7846-18.186-4.1477-6.9238-5.9322-10.0074-13.6933-6.8874-17.3348 3.1201-3.6415 11.2622-1.7846 18.186 4.1476 6.9235 5.9322 10.0077 13.6933 6.8874 17.3349z" fill="#749bff"/></g><g filter="url(#j)"><path d="m61.1095 41.8368c12.8326 8.6806 27.6099 9.2509 33.006 1.2737 5.3961-7.9771-.6323-21.4809-13.465-30.1615-12.8326-8.68054-27.6099-9.25081-33.006-1.2737-5.3961 7.9772.6324 21.4809 13.465 30.1615z" fill="#fc413d"/></g><g filter="url(#k)"><path d="m18.9801 27.7178c-3.1792 7.6692-2.1409 15.3851 2.3191 17.234 4.4601 1.8488 10.6529-2.8695 13.8321-10.5387 3.1792-7.6691 2.1408-15.385-2.3192-17.2339s-10.6528 2.8694-13.832 10.5386z" fill="#ffee48"/></g></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#2a3236"/><g fill="#fff" stroke="#fff" stroke-miterlimit="10" stroke-width=".659418"><path d="m30.468 69.9144c-.8495 0-1.5649-.1456-2.1463-.4355-.5798-.29-1.0193-.7316-1.3139-1.3142-.2946-.5827-.4458-1.2959-.4458-2.1331v-8.6342c0-1.0643-.2135-1.8389-.6359-2.3217-.4255-.4816-1.1799-.7362-2.2615-.7609-.3367 0-.6063-.1257-.8105-.3818-.2073-.253-.3086-.546-.3086-.8726 0-.3543.1013-.647.3086-.8756.2057-.2286.4785-.3543.8105-.3788 1.0816-.0262 1.836-.2792 2.2615-.7608.4255-.4813.6359-1.2437.6359-2.2833v-8.6341c0-1.2683.3367-2.2329 1.0054-2.8908.6686-.6579 1.6365-.9892 2.9006-.9892h10.315c.3881 0 .7076.115.9663.342.2572.2285.3881.5214.3881.8726 0 .3313-.1091.615-.3273.8573s-.5081.3634-.8713.3634h-9.5777c-.544 0-.9555.1396-1.2376.4187-.2836.2791-.4255.7101-.4255 1.2959v8.674c0 .7606-.1559 1.4507-.4644 2.0718-.3087.6226-.7217 1.1103-1.2376 1.4677-.5159.354-1.1191.532-1.8158.532v-.1533c.6967 0 1.2999.178 1.8158.532.5159.3544.9289.8436 1.2376 1.4677.3085.6211.4644 1.3112.4644 2.072v8.7121c0 .586.1419 1.0154.4255 1.2959.2837.2823.6967.4187 1.2376.4187h9.5777c.3601 0 .65.1212.8713.362.2213.2423.3273.5274.3273.8573 0 .3296-.1278.6119-.3881.8543-.2587.242-.5798.3617-.9663.3617h-10.315z"/><path d="m55.7554 69.9149c-.3882 0-.7077-.1211-.9663-.3619-.2589-.2424-.3882-.5275-.3882-.854 0-.3269.109-.615.3274-.8574.2181-.2423.5081-.3619.8713-.3619h9.5778c.5439 0 .9553-.1365 1.2373-.4187.2838-.279.4256-.71.4256-1.2959v-8.7124c0-.7606.1558-1.4506.4646-2.0717.3085-.6226.7216-1.1103 1.2373-1.4677.516-.3541 1.1193-.532 1.8159-.532v.1532c-.6966 0-1.2999-.1779-1.8159-.532-.5157-.3543-.9288-.8435-1.2373-1.4677-.3088-.6211-.4646-1.3112-.4646-2.072v-8.6738c0-.5828-.1418-1.0137-.4256-1.2959-.2835-.2791-.6967-.4187-1.2373-.4187h-9.5778c-.3602 0-.6501-.1211-.8713-.3634-.2184-.2392-.3274-.526-.3274-.8573 0-.3542.1278-.6441.3882-.8726.2571-.2285.5781-.342.9663-.342h10.3149c1.2641 0 2.2288.3313 2.9006.9892.6717.6579 1.0054 1.6225 1.0054 2.8908v8.6339c0 1.0398.2136 1.8037.6359 2.2836.4256.4816 1.1798.7361 2.2616.7608.3365.0244.6063.1502.8105.3788.2072.2283.3085.5213.3085.8756 0 .3312-.1013.6211-.3085.8726-.2042.253-.4786.3818-.8105.3818-1.0818.0244-1.8345.2792-2.2616.7606-.4256.4816-.6359 1.2546-.6359 2.3219v8.634c0 .8389-.1481 1.5473-.4457 2.1333-.2978.5857-.7341 1.0212-1.314 1.3142-.5813.29-1.2969.4356-2.1463.4356h-10.3149z"/><path d="m58.4063 56.3629c1.8783 0 3.401-1.4983 3.401-3.3463 0-1.8477-1.5227-3.3463-3.401-3.3463-1.878 0-3.401 1.4986-3.401 3.3463 0 1.848 1.523 3.3463 3.401 3.3463z"/><path d="m39.3566 56.3629c1.8782 0 3.4009-1.4983 3.4009-3.3463 0-1.8477-1.5227-3.3463-3.4009-3.3463-1.8781 0-3.4009 1.4986-3.4009 3.3463 0 1.848 1.5228 3.3463 3.4009 3.3463z"/><path d="m47.1107 26.5656-.2601 6.8382c0 .3834-.3678.5751-1.1037.5751-.7356 0-1.1034-.1917-1.1034-.5751-.0655-1.7038-.1185-3.0258-.1621-3.9628-.0218-.9585-.0437-1.6409-.0655-2.0458-.0218-.4048-.0327-.6502-.0327-.7345v-.1273c0-.4892.4551-.7346 1.3637-.7346.9087 0 1.3638.2561 1.3638.7668zm5.5206 0-.2601 6.8382c0 .3834-.3678.5751-1.1035.5751-.7356 0-1.1037-.1917-1.1037-.5751-.0654-1.7038-.1184-3.0258-.1619-3.9628-.0219-.9585-.0438-1.6409-.0654-2.0458-.0219-.4048-.0328-.6502-.0328-.7345v-.1273c0-.4892.4551-.7346 1.3638-.7346s1.3636.2561 1.3636.7668z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#60a5fa"/><path d="m48.0447 25-11.1369 19.2932c4.2259-1.3031 8.772-1.4963 13.1788-.4566l3.7639.8886-3.5412 15.019-3.7692-.8886c-2.8955-.6832-5.9137-.0062-8.2479 1.8395-1.1677.9238-2.0876 2.0835-2.718 3.3845l-3.484-1.686c.8814-1.8209 2.17-3.4449 3.7978-4.7337 3.256-2.5778 7.5012-3.5247 11.5435-2.5707l1.7652-7.4853c-6.3232-1.491-12.9872-.0063-18.0817 4.0268-5.094 4.0327-8.0696 10.1803-8.0696 16.6783l50 .0009z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#d77655"/><path d="m30.9782 57.2401 11.0128-6.1789.1851-.5367-.1851-.2984-.5367-.0002-1.8405-.1134-6.2923-.1702-5.4572-.2267-5.2871-.2834-1.3302-.2834-1.247-1.6439.1284-.82 1.1187-.7521 1.6024.1398 3.541.2418 5.3135.3666 3.8548.2268 5.7106.5933h.9067l.1285-.3664-.3099-.2269-.2419-.2268-5.4987-3.7263-5.9523-3.938-3.1178-2.2676-1.6855-1.1487-.8503-1.0771-.3665-2.3506 1.5307-1.6855 2.0558.1398.5253.1399 2.0825 1.6023 4.448 3.4429 5.8085 4.278.8503.7068.3401-.2418.0416-.1701-.3817-.6386-3.1593-5.7106-3.3711-5.8084-1.5004-2.4074-.3968-1.4436c-.1398-.5933-.2418-1.0921-.2418-1.7006l1.7422-2.3658.9636-.31 2.3243.31.9789.8503 1.4436 3.3031 2.3393 5.2002 3.6281 7.0709 1.062 2.0974.5668 1.9426.2118.5933.3661-.0002v-.3401l.2986-3.9834.5517-4.8902.5367-6.2923.1852-1.7724.8766-2.1241 1.7422-1.1487 1.3605.6501 1.1187 1.6022-.1549 1.0356-.6652 4.3233-1.3038 6.7722-.8503 4.5351h.4953l.567-.5669 2.2939-3.0459 3.8549-4.8185 1.7006-1.9122 1.9841-2.1126 1.2734-1.0053 2.4073-.0002 1.7724 2.6341-.7935 2.7211-2.4792 3.1442-2.0559 2.6642-2.9479 3.9682-1.8404 3.1745.1702.2532.4384-.0415 6.6589-1.4173 3.5977-.65 4.2933-.7368 1.9425.907.2117.9221-.7634 1.8858-4.5917 1.1338-5.3854 1.0772-8.0195 1.8972-.0982.0718.1133.1398 3.6129.3401 1.5456.0831h3.783l7.0443.5254 1.8405 1.217 1.1036 1.489-.1851 1.1338-2.8345 1.4436-3.8245-.907-8.9265-2.1239-3.0612-.7634-.4232-.0002v.2533l2.551 2.4943 4.6748 4.2213 5.8539 5.442.2986 1.3455-.7521 1.0619-.7935-.1133-5.1435-3.87-1.9841-1.742-4.4935-3.7831-.2984-.0002v.3968l1.0355 1.5156 5.4685 8.2197.2833 2.5207-.3966.8201-1.4173.4951-1.5571-.2833-3.2009-4.4937-3.3031-5.0602-2.6643-4.5351-.3249.1851-1.5722 16.9346-.7369.8654-1.7007.6501-1.4171-1.0771-.7521-1.7422.7521-3.443.907-4.4933.7368-3.5714.6652-4.4368.3968-1.4739-.0264-.0982-.3249.0415-3.3447 4.5917-5.0868 6.8744-4.0249 4.3084-.9636.3817-1.6706-.8656.1551-1.5455.9334-1.3756 5.5706-7.086 3.3597-4.3914 2.1692-2.536-.0151-.3665h-.1285l-14.7954 9.6067-2.6342.3401-1.1338-1.062.14-1.7422.5366-.5668 4.448-3.0612-.0151.0152z" fill="#fcf2ee"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#9f58fa"/><path d="m74.284 51.6312-3.3646-6.7554v-3.8905c0-6.4488-5.1758-11.6716-11.5593-11.6716h-5.7502c.4161-.8547.6447-1.8156.6447-2.8295 0-3.584-2.8838-6.4842-6.4478-6.4842-3.5639 0-6.4479 2.9002-6.4479 6.4842 0 1.0139.2287 1.9748.6449 2.8295h-5.7502c-6.3834 0-11.5593 5.2228-11.5593 11.6716v3.8905l-3.4349 6.7377c-.3459.6779-.3459 1.4854 0 2.1633l3.4349 6.6611v3.8906c0 6.4488 5.1759 11.6715 11.5593 11.6715h23.1065c6.3835 0 11.5593-5.2227 11.5593-11.6715v-3.8906l3.3587-6.6846c.3341-.6661.3341-1.4501.0059-2.1221zm-29.9942 5.5056c0 2.9297-2.3622 5.3053-5.2754 5.3053-2.9133 0-5.2755-2.3756-5.2755-5.3053v-9.4315c0-2.9298 2.3622-5.3053 5.2755-5.3053 2.9132 0 5.2754 2.3755 5.2754 5.3053zm16.9988 0c0 2.9297-2.3622 5.3053-5.2754 5.3053-2.9133 0-5.2755-2.3756-5.2755-5.3053v-9.4315c0-2.9298 2.3622-5.3053 5.2755-5.3053 2.9132 0 5.2754 2.3755 5.2754 5.3053z" fill="#fafafa"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#10a37f"/><path d="m44.658 20.0001c-2.9847.0017-5.8924.9472-8.3071 2.7014-2.4148 1.7542-4.2128 4.2272-5.137 7.0652-1.9447.4019-3.7813 1.2136-5.3877 2.3809-1.6064 1.1674-2.9456 2.6637-3.9283 4.3892-1.496 2.5862-2.1332 5.5803-1.8201 8.5515.3131 2.9713 1.5605 5.7667 3.5628 7.9843-.6275 1.8811-.8457 3.8745-.64 5.8468.2057 1.9722.8305 3.8777 1.8327 5.5889 3.049 5.3283 9.1831 8.0589 15.1859 6.7885 1.3132 1.485 2.9282 2.6727 4.7371 3.4838 1.8089.811 3.7701 1.2267 5.7524 1.2193 6.1165 0 11.551-3.9451 13.445-9.7665 1.9429-.3999 3.7778-1.2109 5.3813-2.3787 1.6035-1.1677 2.9386-2.665 3.9155-4.3914 1.5033-2.5828 2.1466-5.5767 1.837-8.549-.3097-2.9724-1.5562-5.7694-3.5596-7.9869v-.0183c.6268-1.8845.8445-3.8809.6387-5.8562s-.8305-3.884-1.8323-5.5987c-1.4879-2.587-3.7574-4.6358-6.4826-5.8522-2.7251-1.2164-5.7657-1.5378-8.685-.9179-1.3193-1.4813-2.9386-2.665-4.7504-3.4725-1.8118-.8076-3.7747-1.2205-5.7583-1.2115zm0 3.6417-.0184.0184c2.4615 0 4.8285.8534 6.7217 2.428-.0753.0377-.2274.1329-.341.1898l-11.1331 6.4282c-.2794.161-.5108.3934-.6706.6733-.1598.28-.2422.5975-.2388.9198v15.0949l-4.7901-2.7683v-12.4787c-.0025-5.7947 4.6831-10.4979 10.4703-10.5062zm13.4124 4.3947c1.8458-.0031 3.6597.4814 5.258 1.4046s2.9244 2.2523 3.844 3.8527c1.2174 2.1233 1.6588 4.6038 1.2487 7.0167-.0752-.0568-.2265-.1321-.3218-.1889l-11.133-6.4483c-.2802-.1588-.5966-.2422-.9186-.2422s-.6385.0834-.9186.2422l-13.0462 7.5474v-5.5373l10.7736-6.2394c1.5839-.9197 3.3823-1.4047 5.2139-1.4075zm-27.5377 5.7312v13.2561c-.0011.3219.0823.6385.2418.918.1596.2796.3898.5124.6676.6751l13.027 7.529-4.8101 2.7866-10.7553-6.2201c-5.0049-2.9045-6.7158-9.3194-3.8239-14.3368 1.224-2.1254 3.1531-3.7556 5.4529-4.6079zm24.9558 3.2806 10.7737 6.2202c5.0183 2.9019 6.7217 9.311 3.8247 14.3367l.0192.0193c-1.2242 2.1213-3.1543 3.7456-5.4537 4.5894v-13.256c0-.6645-.341-1.2705-.9093-1.5931l-13.0455-7.5474zm-7.9152 4.5711s4.4357 1.3507 5.4922 3.1853 0 6.3522 0 6.3522l-5.4913 3.1861-5.4913-3.1853v-6.3522zm8.6349 5.0065 4.7909 2.7683v12.4595c0 5.8031-4.6965 10.5062-10.4711 10.5062v-.0192c-2.4501.0026-4.8229-.8566-6.7033-2.4272.1155-.06.2292-.1233.341-.1897l11.1331-6.4283c.2821-.1579.5158-.3898.6759-.6706.1601-.2809.2405-.6001.2326-.9233zm-3.1243 8.1543v5.5364l-10.7737 6.221c-5.0182 2.8819-11.4181 1.1752-14.3159-3.8314h.0192c-1.2303-2.1054-1.6666-4.6078-1.2503-7.0167.076.0577.2281.1329.3226.1898l11.1331 6.4483c.28.1585.5963.2418.9181.2418s.6381-.0833.9182-.2418z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#26233a"/><g fill="#a9f0eb"><path d="m40.771 53.5502c0-1.19.9648-2.1548 2.1549-2.1548 1.19 0 2.1548.9648 2.1548 2.1548v3.9716c0 1.1901-.9648 2.1548-2.1548 2.1548-1.1901 0-2.1549-.9647-2.1549-2.1548z"/><path d="m53.9673 51.3954c-1.19 0-2.1548.9648-2.1548 2.1548v3.9716c0 1.1901.9648 2.1548 2.1548 2.1548 1.1901 0 2.1549-.9647 2.1549-2.1548v-3.9716c0-1.19-.9648-2.1548-2.1549-2.1548z"/><path clip-rule="evenodd" d="m75 51.5063v5.9393c-.0017.7669-.3816 1.5145-1.0004 1.9676-7.3046 5.3476-16.3178 9.6493-25.4996 9.6493-10.1581 0-20.3284-5.8535-25.4996-9.6493-.6188-.4531-.9989-1.2007-1.0004-1.9676v-5.9393c0-.7818.2484-1.537.7089-2.1664l1.6132-2.183c.8639-1.1712 2.1488-1.4806 3.5178-1.4806.5168-5.8963 1.7391-10.1032 4.6607-13.1838 5.565-5.8962 12.9519-6.4925 15.9994-6.4925s10.4344.5963 15.9994 6.4925c2.9183 3.0806 4.1439 7.2875 4.6607 13.1838 1.3717 0 2.651.3041 3.5145 1.4806l1.6132 2.1863c.4638.6294.7122 1.3813.7122 2.1631zm-10.1097-2.6997c-.0708-1.3528-1.1693-1.8836-2.3122-2.2592-1.205.7561-2.6764 1.0534-4.0843 1.0534-1.4972 0-4.2897-.3577-6.6117-2.6765-.5863-.583-.9872-1.4972-1.2588-2.5109-.7044-.0716-1.4119-.1092-2.12-.1126-.6294 0-1.3548.0365-2.1266.1126-.2716 1.0137-.6724 1.9279-1.2588 2.5109-2.3187 2.3188-5.1145 2.6765-6.6117 2.6765-1.4083 0-2.8834-.294-4.0876-1.0534-1.1392.3744-2.2331.9141-2.3055 2.2592-.1213 2.5424-.1319 5.0824-.1424 7.6237-.0055 1.2754-.0106 2.5511-.0299 3.8276.005.7409.4517 1.4292 1.1263 1.7357 5.4822 2.4977 10.6662 3.7564 15.4362 3.7564 4.7634 0 9.9475-1.2587 15.4263-3.7564.6746-.3065 1.1211-.9948 1.1263-1.7357.0657-3.8132.0128-7.6419-.169-11.4513zm-31.7603-5.3166c.8944.8944 2.5838 1.4906 4.4056 1.4906 1.3913 0 4.0413-.2981 6.2275-2.5175.9607-.9275 1.5569-3.2462 1.4907-5.5981-.0663-1.8881-.5963-3.445-1.3913-4.1075-.8612-.7619-2.8156-1.0931-5.0019-.8944-2.3187.2319-4.2731.9938-5.2668 2.0538-2.1532 2.3519-1.6894 8.3144-.4638 9.5731zm13.515-5.7969c.0663.3644.0994.7619.1325 1.1925 0 .2982 0 .5963-.0331.9275.6625-.0662 1.2256-.0662 1.7556-.0662.5299 0 1.0931 0 1.7556.0662-.0331-.3312-.0331-.6293-.0331-.9274.0331-.4306.0663-.8282.1325-1.1926-.6956-.0662-1.325-.0993-1.855-.0993s-1.1594.0331-1.855.0993zm5.1013-.8281c-.0663 2.3519.53 4.6706 1.4906 5.5981 2.1862 2.2194 4.8362 2.5175 6.2275 2.5175 1.8219 0 3.5112-.5962 4.4056-1.4906 1.2256-1.2587 1.6894-7.2212-.4637-9.5731-.9938-1.06-2.9482-1.8219-5.2669-2.0538-2.1863-.1987-4.1406.1325-5.0019.8944-.795.6625-1.325 2.2194-1.3912 4.1075z" fill-rule="evenodd"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m23.5 40.8203h50v15.3595h-50z"/></clipPath><path d="m0 0h96v96h-96z" fill="#6b50ff"/><g clip-path="url(#a)" fill="#fffdf5"><path d="m27.2996 52.4022c.5837 0 1.1262-.2438 1.5466-.5861.2594-.2106.527-.1535.5807.0944.0206.0923.0248.1898.0248.2894 0 1.0975-.8772 2.4107-3.0964 2.4107-1.805 0-3.0469-.7977-2.8309-3.225l.2149-2.4605c.1322-1.5457.7118-2.8589 1.838-3.5902.5961-.3828 1.3576-.5986 2.2843-.5986 1.4568 0 1.9207.582 1.9207 1.2137 0 .416-.2149.8641-.53 1.0809-.281-.0498-.5466-.083-.8111-.083-.53 0-1.0104.1162-1.3575.4326-.2976.2655-.497.6815-.5466 1.2634l-.2314 2.527c-.0662.7136.1487 1.2313.9939 1.2313z"/><path d="m33.1185 53.0322c-.0496.5653-.2976.9138-.6458 1.1472-.4969.333-1.0765.4326-1.5725.4326-.5135 0-.6622-.2822-.6126-.8143l.9608-11.0392c.0496-.5156.2149-.9637.5796-1.1805.529-.3153 1.0921-.4647 1.589-.4647.464 0 .7284.2489.6954.5819l-.3978 4.1389h.1984c.2149-.2655.4473-.4823.6788-.6483.4473-.2987.9432-.4491 1.5063-.4491 1.2088 0 1.805.6317 1.6728 2.0943l-.5301 6.1503c-.0496.5156-.2149.9139-.5796 1.1307-.5631.3496-1.0931.4989-1.589.4989-.5135 0-.7119-.2821-.6788-.6317l.53-6.1835c.0331-.333-.0661-.4989-.3482-.4989-.1818 0-.4639.0498-.5961.1327-.281.166-.3978.3496-.4308.6484z"/><path d="m45.3543 52.9824c-.0496.5155-.1984.8973-.5796 1.1307-.5631.3496-1.0766.4989-1.5229.4989-.4639 0-.6623-.2489-.6292-.5819l.0496-.6484h-.1818c-.1158.1826-.2149.3496-.3482.4824-.3978.416-.8937.7479-1.7223.7479-1.5395 0-2.0199-1.3464-1.9042-2.7427l.248-2.8754c.1488-1.7292.7284-2.6763 1.6551-3.3081.8276-.5653 1.8876-.947 3.1295-.947.6623 0 1.2584.0663 1.6221.1659.6788.1826.8276.4492.7945.8973zm-4.0397-1.0809c-.0331.4658.1488.6649.5135.6649.2149 0 .3977-.0664.5465-.1826.1819-.1327.2976-.3495.3141-.5985l.4308-4.9698c-.0661-.0166-.1818-.0332-.3481-.0332-.3317 0-.5962.1328-.7945.3662-.1819.2157-.2976.5487-.3317.9636z"/><path d="m50.2051 46.0828c.2645-.6483.7945-1.3465 1.7048-1.3465.7284 0 1.027.4326 1.027 1.0311 0 .499-.1984 1.0975-.5301 1.6629-.2975-.083-.5961-.1162-.8771-.0996-.8772.0332-1.589.5487-1.6717 1.4626l-.3482 4.2385c-.0496.5654-.2975.9139-.6457 1.1473-.497.333-1.0766.4326-1.5725.4326-.5135 0-.6623-.2822-.6127-.8143l.6457-7.4138c.0496-.5155.2149-.9637.5796-1.1805.5301-.3153 1.0601-.4657 1.556-.4657.4639 0 .6623.2489.6292.5819l-.0661.7645h.1818z"/><path d="m61.0335 53.9789.5468-6.4501c.033-.333-.0167-.4989-.2977-.4989-.1817 0-.4144.0498-.5464.1327-.2647.166-.4144.3994-.4311.665l-.4474 5.1534c-.0493.5156-.2147.9139-.5794 1.1307-.5631.3496-1.0931.4989-1.5892.4989-.5134 0-.7118-.2821-.6788-.6317l.5468-6.4501c.033-.333-.0167-.4989-.2977-.4989-.1817 0-.4308.0498-.5631.1327-.2811.166-.3977.3496-.4307.6484l-.4474 5.2198c-.0496.5653-.2976.9139-.6458 1.1473-.4969.333-1.0765.4325-1.5724.4325-.5135 0-.6623-.2821-.6127-.8143l.6457-7.4137c.0496-.5156.2149-.9637.5796-1.1805.53-.3153 1.06-.4658 1.556-.4658.464 0 .6623.249.6293.582l-.0496.5155h.1817c.1653-.1991.3317-.3827.5134-.5155.497-.3994 1.0601-.582 1.7058-.582 1.0765 0 1.4732.5322 1.6223 1.0975h.132c.182-.2157.4144-.4159.6127-.5653.4804-.3662 1.0272-.5322 1.6562-.5322 1.2089 0 1.7719.6318 1.6386 2.0944l-.5301 6.1503c-.0493.5156-.2147.9139-.5794 1.1307-.5631.3496-1.0931.4989-1.5892.4989-.5134 0-.7118-.2821-.6788-.6317z"/><path d="m65.2522 56.0558c-.4143 0-.6787-.1991-.6787-.6317 0-.7977.2644-1.2801.8274-1.2801h5.5461c.4307 0 .6954.1992.6954.6318 0 .7977-.2647 1.28-.8277 1.28z"/><path d="m72.2714 53.5412h-.182v-.112h.5013v.112h-.1798v.4938h-.1395zm.4751-.112h.2419l.1219.5135h.0238l.1196-.5135h.2461v.6058h-.1261v-.5176h-.0249l-.1219.5176h-.2098l-.1258-.5176h-.0248v.5176h-.12z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="47.825" x2="47.825" y1="48" y2="76"><stop offset=".16" stop-color="#5d5d5d"/><stop offset=".658" stop-color="#d5d5d5"/></linearGradient><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="72.1501" x2="47.8251" y1="34.0863" y2="48.35"><stop offset=".182" stop-color="#454545"/><stop offset=".715" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="47.825" x2="23.5" y1="20" y2="62"><stop offset="0" stop-color="#fff" stop-opacity=".6"/><stop offset=".667" stop-color="#fff" stop-opacity=".22"/></linearGradient><clipPath id="d"><path d="m23 20h50v56h-50z"/></clipPath><path d="m0 0h96v96h-96z" fill="#000"/><g clip-path="url(#d)"><path d="m47.825 76 24.325-14-24.325-14-24.325 14z" fill="url(#a)"/><path d="m72.1501 62v-28l-24.325-14v28z" fill="url(#b)"/><path d="m47.825 20-24.325 14v28l24.325-14z" fill="url(#c)"/><path d="m72.1501 34-24.325 42v-28z" fill="#555"/><path d="m72.15 34-24.325 14-24.325-14z" fill="#fff"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m0 0h96v96h-96z"/></clipPath><g clip-path="url(#a)"><path d="m0 0h96v96h-96z" fill="#ef6f2e"/><path d="m60.0878 30.1941c-.1023-.0247-.1979-.0707-.2802-.1347-.0823-.0641-.1496-.1447-.197-.2365-.0474-.0917-.0739-.1923-.0778-.2949-.0039-.1028.0151-.2049.0555-.2998 1.3959-3.3129 2.0118-5.9636 1.0179-7.0733-2.6326-2.9441-13.1899 2.9104-16.5559 4.8932-.0902.0529-.191.0862-.2956.0975-.1045.0114-.2103.0006-.3102-.0315s-.1915-.0849-.2685-.1547c-.0772-.0698-.1377-.155-.178-.2498-1.415-3.3059-2.9024-5.6053-4.4101-5.705-3.9963-.2667-7.2174 11.1537-8.1603 14.8759-.0252.0997-.0721.1929-.1376.2732-.0657.0803-.1483.1459-.2423.1921-.0939.0463-.197.0721-.3022.0759-.1051.0038-.2099-.0147-.3071-.0541-3.397-1.3613-6.1163-1.962-7.253-.9925-3.019 2.5672 2.9832 12.863 5.0164 16.1457.0544.0878.0886.1861.1004.2882.0118.1018.0008.2051-.0321.3025-.033.0976-.0872.1871-.1589.2622s-.1592.1341-.2566.1732c-3.3887 1.3799-5.7465 2.8305-5.8499 4.3008-.2723 3.8973 11.4371 7.0386 15.2551 7.9582.102.0248.1973.0708.2794.1348.082.064.1491.1446.1963.2362.0473.0915.0739.192.0777.2945.0039.1024-.015.2045-.0553.2991-1.3959 3.3129-2.0117 5.9649-1.0177 7.0734 2.6324 2.9441 13.1909-2.9093 16.5571-4.8922.09-.053.1909-.0864.2955-.0979.1045-.0115.2105-.0008.3104.0314s.1916.085.2686.155c.077.0699.1377.1552.1778.2501 1.4148 3.3047 2.9011 5.6043 4.41 5.7051 3.9963.2655 7.2174-11.1538 8.159-14.8772.0255-.0996.0727-.1927.1385-.2728.0656-.0803.1485-.1456.2425-.1918.0941-.046.1972-.0719.3024-.0755s.2099.0147.3071.0543c3.397 1.3614 6.1151 1.9607 7.253.9924 3.019-2.5672-2.9844-12.8641-5.0176-16.1469-.054-.0878-.088-.1862-.0994-.2879-.0117-.102-.0005-.2052.0324-.3025.0329-.0974.0869-.1867.1584-.2618.0714-.0751.1587-.1345.2558-.1739 3.3898-1.3798 5.7477-2.8306 5.85-4.3009.2734-3.8972-11.4373-7.0384-15.2539-7.9568zm-4.5849-3.7362c.7681 1.3428-3.1902 10.2901-6.1342 16.5483-.0492.1045-.1301.192-.2319.2504-.1016.0585-.2194.0851-.337.0764-.1178-.0087-.23-.0524-.3214-.1251-.0916-.0728-.1581-.1711-.1905-.2819-1.1891-4.0689-2.548-8.8496-4.0023-12.9081-.057-.1594-.0542-.3333.0081-.4906.0624-.1575.18-.2882.332-.3688 3.6313-1.9341 9.8451-4.5026 10.8772-2.7006zm-17.4026 1.1074c1.5161.4197 5.2044 9.476 7.6597 15.9313.0411.1079.0471.2254.0176.3368-.0296.1113-.0933.2112-.1827.2862-.0896.075-.2003.1214-.3177.1332s-.2355-.0118-.3388-.0674c-3.7942-2.0536-8.2185-4.5003-12.1898-6.3672-.1555-.0736-.2792-.1985-.3491-.3527-.0699-.1541-.0815-.3275-.0326-.4891 1.1688-3.8683 3.6966-9.9735 5.7334-9.4111zm-11.5025 12.7842c1.3757-.7491 10.5513 3.1112 16.9674 5.9823.1073.048.1969.1268.2569.2261.0599.0991.0872.2139.0783.3287-.0091.1148-.0537.2241-.1284.3135-.0746.0892-.1753.154-.2889.1857-4.1711 1.1596-9.0746 2.4849-13.2362 3.9031-.1631.0553-.3412.0524-.5023-.0083-.1612-.0608-.295-.1754-.3776-.3234-1.9797-3.5414-4.6181-9.6012-2.7692-10.6077zm1.1355 16.9714c.4293-1.4784 9.7167-5.0755 16.3359-7.47.1107-.0399.2312-.0458.3453-.017.1143.0288.2166.091.2936.1782.0768.0872.1246.1954.1367.3097.012.1144-.0122.2297-.0693.3305-2.1069 3.7002-4.6158 8.0149-6.53 11.8866-.0748.1522-.2029.2733-.3611.3418-.1582.0684-.3362.0797-.5022.0316-3.9666-1.1329-10.2267-3.605-9.6489-5.5914zm13.1089 11.2176c-.7692-1.3416 3.1902-10.2899 6.1342-16.547.0492-.1046.1302-.1921.2319-.2505.1017-.0585.2194-.0851.337-.0764.1179.0087.23.0524.3214.1251.0916.0728.1581.1711.1905.2819 1.1891 4.0678 2.548 8.8498 4.0023 12.9082.0567.1593.0534.333-.009.4901-.0625.1572-.1804.2877-.3323.368-3.6301 1.9305-9.8451 4.5038-10.8724 2.7006zm17.4026-1.1075c-1.5173-.4184-5.2056-9.4758-7.6609-15.931-.0411-.1081-.0475-.226-.0178-.3376.0295-.1115.0933-.2116.1831-.2866.0896-.0751.2008-.1214.3182-.133.1177-.0117.236.0122.3393.0682 3.793 2.0536 8.2185 4.5016 12.1886 6.3684.1559.0733.2798.1982.3498.3523.07.1543.0812.3279.0319.4896-1.1676 3.8741-3.6954 9.9733-5.7322 9.4097zm11.5025-12.7842c-1.3769.7503-10.5513-3.111-16.9685-5.9821-.1074-.048-.197-.1269-.2569-.2261-.06-.0992-.0872-.2139-.0782-.3288.0089-.1148.0535-.2241.1282-.3134.0746-.0892.1754-.154.289-.1857 4.1722-1.1596 9.0745-2.485 13.2361-3.9031.1634-.0553.3419-.0523.5032.0087s.2952.1759.3779.3241c1.9785 3.5402 4.6169 9.6011 2.7692 10.6064zm-1.1355-16.9713c-.4304 1.4796-9.7167 5.0767-16.3359 7.4712-.1109.0401-.2315.0461-.346.0174-.1143-.0289-.2169-.0912-.294-.1786-.0769-.0875-.1244-.1959-.1363-.3106-.0119-.1145.0124-.2299.07-.3308 2.1057-3.699 4.6146-8.0149 6.5289-11.8866.0753-.1518.2033-.2725.3614-.3407s.336-.0795.5018-.0316c3.9666 1.1388 10.2267 3.6039 9.6501 5.5903z" fill="#fff"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#4b32c3"/><g fill="#fff"><path d="m36.7517 41.1976 10.8107-6.2415c.2706-.1563.6041-.1563.8746 0l10.8109 6.2415c.2704.1562.4373.4448.4373.7573v12.4831c0 .3123-.1669.6011-.4373.7576l-10.8109 6.2415c-.2705.1562-.604.1562-.8746 0l-10.8107-6.2415c-.2705-.1563-.4372-.4451-.4372-.7576v-12.4831c.0002-.3125.1669-.6011.4372-.7573z" fill-opacity=".8"/><path d="m76.108 46.8833-12.9167-22.4715c-.4692-.8125-1.336-1.4118-2.2741-1.4118h-25.834c-.9384 0-1.8053.5993-2.2745 1.4118l-12.9168 22.4219c-.4692.8127-.4692 1.8384 0 2.6511l12.9168 22.2873c.4692.8125 1.3361 1.2279 2.2745 1.2279h25.8337c.9382 0 1.8052-.4029 2.2741-1.2156l12.9168-22.3237c.4696-.8123.4696-1.7649.0002-2.5774zm-10.6957 10.8058c0 .3303-.1989.6359-.4853.8013l-16.4531 9.4926c-.2862.1652-.6447.1652-.9308 0l-16.4659-9.4926c-.2862-.1654-.4864-.4708-.4864-.8013v-18.9855c0-.3306.1973-.636.4837-.8014l16.4525-9.4926c.2861-.1654.6442-.1654.9303 0l16.467 9.4926c.2864.1654.488.4708.488.8014z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="31.0027" x2="52.676" y1="53.314" y2="16.8571"><stop offset="0" stop-color="#f8682f"/><stop offset="1" stop-color="#dd2c00"/></linearGradient><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="51.2853" x2="48.8069" y1="43.147" y2="86.6391"><stop offset="0" stop-color="#f8682f"/><stop offset=".566586" stop-color="#e92a4e"/><stop offset="1" stop-color="#c447ff"/></linearGradient><mask id="c" height="64" maskUnits="userSpaceOnUse" width="45" x="26" y="16"><path d="m70.8 16h-44.8v64h44.8z" fill="#fff"/></mask><path d="m0 0h96v96h-96z" fill="#000"/><g mask="url(#c)"><path d="m57.3861 40.1497c.3967.0255.9498.1766 1.5983.2707l6.5823 4.2531-21.5177 12.7983c-.3236.1172-.7054.2411-1.1418.3527-.548.1406-1.0581.231-1.5169.2891-.3503.039-.827.0792-1.3917.0837l-8.2652-9.8571 17.3495-6.7345c-.0022.0023-.0056.0045-.0089.0067 1.7748-.6663 3.3183-1.0067 4.45-1.192 1.2557-.2055 2.4879-.3973 3.8641-.2701-.0006-.0003-.0013-.0004-.002-.0006z" fill="#ffc400"/><path d="m56.9898 23.7918c-.1373-.6194-.3102-1.1942-.5045-1.7233-.3449-.9543-1.1183-3.027-3.0113-4.8999-.3471-.3438-.8037-.7523-1.383-1.1686-2.3127 2.7837-4.3876 4.7927-5.7593 6.0428-3.5996 3.2793-9.4917 7.8298-13.2755 11.2552-.6563.5939-1.9901 1.9366-3.1944 3.9803-.0022.0033-.0045.0066-.0067.0111 0 0 0-.0022 0-.0033-.2177.3751-.4844.8605-.7623 1.4421-.0413.0837-.0837.1763-.1295.2745-.1172.2534-.2355.5223-.3527.807-.4721 1.1485-1.0503 2.5861-1.24 4.4992-.1664 1.6687.0323 2.9913.1384 3.565.039.2099.0837.414.1317.6161.1663.7188.3962 1.3896.6685 2.0113 1.297 3.008 3.4333 4.7492 3.7938 5.035 2.2781 1.8003 4.5807 2.3137 5.3151 2.4544 1.0414.1986 1.9354.2255 2.5805.2075 0-.0022-.001-.0056-.0022-.0078h.0089c-.0044-.0055-.0089-.0123-.0133-.0178-.1295-.4755-.2846-1.1676-.3594-2.0136-.2557-2.9019.6663-5.1376 1.1384-6.2504.3572-.8405 1.2334-2.8138 3.1007-4.6086.8706-.8371 1.8126-1.5123 2.7469-2.1251 1.0134-.6653 1.8997-1.1832 2.4053-1.5336.0167-.0101-.0168.01 0 0 .0189-.0123.0502-.0323.0659-.0446 1.7746-1.3126 5.2592-4.2737 7.0774-9.0442.2143-.5592.3806-1.1084.3806-1.1084.5704-1.7802 1.1318-4.5315.4398-7.6545z" fill="url(#a)"/><path d="m39.991 58.2023c-.6451.0179-1.5403-.0089-2.5805-.2075-.7345-.1406-3.0371-.6541-5.3152-2.4545-.4553-.3605-3.7435-3.0403-4.5951-7.6624-.1061-.5736-.3047-1.8963-.1384-3.565.1908-1.913.7679-3.3495 1.24-4.4991.4431-1.0793.9018-1.9354 1.2445-2.5247.1462.4084.3884.9833.7891 1.6095.8929 1.3963 1.9879 2.1396 2.8373 2.6977.3694.2422 2.095 1.3495 4.7068 1.9309 1.769.394 3.1665.3739 3.6398.3583 1.0614-.0334 2.7479-.2065 4.6599-.9487 1.1049-.4286 1.9968-.9554 2.5883-1.3248-.5067.3515-1.4421.9006-2.4555 1.5647-.9342.6128-1.8762 1.2881-2.7468 2.1252-1.8674 1.7948-2.7436 3.7681-3.1007 4.6086-.4732 1.1117-1.3941 3.3484-1.1385 6.2504.0759.8606.2356 1.5626.3661 2.0381z" fill="#ff9100"/><path d="m68.046 57.2869c.7903-1.5815 1.1362-3.2502 1.1362-3.2502.0881-.4252.2143-1.0525.2701-1.8327.0503-.6987.0179-1.836-.1495-2.7469-.5336-2.8907-2.7457-5.2324-2.9734-5.4679 0 0-1.4935-1.5482-3.6934-2.6096-.3225-.1552-.8785-.4253-1.6541-.6608-.7635-.2321-1.3863-.3247-2.0035-.414-.6541-.095-1.2055-.1406-1.6028-.1642.0937.0101.2244.0291.3773.0648.3605.0848.6138.2131.8114.3091.1842.0905.4631.2311.7702.4923.1249.1072.2801.24.434.4498.1262.1741.2914.4476.3796.8092.2657 1.0972-.404 2.1196-.6474 2.4913-1.7256 2.6352-11.0588 8.1289-16.5904 13.8313-1.4085 1.452-2.4087 2.7513-3.1553 4.4434-1.6855 3.8194-1.0827 7.3565-.9254 8.1713 1.0213 5.2973 4.8687 8.1657 5.7583 8.7953 2.7122-3.0315 5.1119-5.3453 6.8833-6.9604 4.4846-4.0873 10.3288-8.6054 10.3288-8.6054s4.4881-3.6275 6.2448-7.1445z" fill="url(#b)"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m23 23h50v50h-50z"/></clipPath><mask id="b" height="47" maskUnits="userSpaceOnUse" width="50" x="23" y="26"><path d="m23 26.3335h50v46.6667h-50z" fill="#fff"/></mask><mask id="c" height="60" maskUnits="userSpaceOnUse" width="85" x="16" y="26"><path d="m29.0016 85.7188-12.0297-25.3938 71.6188-33.9271 12.0293 25.3938z" fill="#fff"/></mask><mask id="d" height="48" maskUnits="userSpaceOnUse" width="79" x="22" y="26"><path d="m22.9871 73.0221 65.5932-46.6188 12.0297 25.3938z" fill="#fff"/></mask><mask id="e" height="60" maskUnits="userSpaceOnUse" width="65" x="19" y="17"><path d="m25.0646 76.1588-5.1505-5.6896 58.9161-53.3359 5.1505 5.6891z" fill="#fff"/></mask><mask id="f" height="57" maskUnits="userSpaceOnUse" width="62" x="22" y="17"><path d="m22.489 73.3142 56.3344-56.175 5.1505 5.6895z" fill="#fff"/></mask><mask id="g" height="59" maskUnits="userSpaceOnUse" width="69" x="19" y="19"><path d="m26.3713 77.2912-6.8396-8.4947 61.1875-49.2667 6.8396 8.4948z" fill="#fff"/></mask><mask id="h" height="55" maskUnits="userSpaceOnUse" width="66" x="22" y="19"><path d="m22.9517 73.0438 57.7578-53.5062 6.8396 8.4948z" fill="#fff"/></mask><path d="m0 0h96v96h-96z" fill="#000"/><g clip-path="url(#a)"><g mask="url(#b)"><g mask="url(#c)"><g mask="url(#d)"><path d="m29.0016 85.7188-12.0297-25.3938 71.6188-33.9271 12.0293 25.3938z" fill="#fc6c84"/></g></g></g><g mask="url(#e)"><g mask="url(#f)"><path d="m25.0646 76.1588-5.1505-5.6896 58.9161-53.3359 5.1505 5.6891z" fill="#fdffd9"/></g></g><g mask="url(#g)"><g mask="url(#h)"><path d="m26.3713 77.2912-6.8396-8.4947 61.1875-49.2667 6.8396 8.4948z" fill="#ffcc98"/></g></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><radialGradient id="a" cx="0" cy="0" gradientTransform="matrix(96.79554782 32.73185485 -262.20272286 775.39315499 9.528 39.018)" gradientUnits="userSpaceOnUse" r="1"><stop offset=".067" stop-color="#9168c0"/><stop offset=".343" stop-color="#5684d1"/><stop offset=".672" stop-color="#1ba1e3"/></radialGradient><clipPath id="b"><path d="m20 20h56v56h-56z"/></clipPath><path d="m0 0h96v96h-96z" fill="url(#a)"/><g clip-path="url(#b)"><path d="m76 48.056c-7.2653.4459-14.1169 3.5331-19.2639 8.6801s-8.2342 11.9986-8.6801 19.2639h-.112c-.4451-7.2656-3.5321-14.1175-8.6793-19.2647s-11.9991-8.2342-19.2647-8.6793v-.112c7.2656-.4451 14.1175-3.5321 19.2647-8.6793s8.2342-11.9991 8.6793-19.2647h.112c.4459 7.2653 3.5331 14.1169 8.6801 19.2639s11.9986 8.2342 19.2639 8.6801z" fill="#fff"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#fff"/><path d="m70.3883 75.0937c2.7231-.5913 5.6118-2.2009 5.6118-2.2009l-5.0557-4.1648c-2.4993-2.0571-4.6266-4.5288-6.2898-7.3058-2.2981-3.8369-5.4734-7.0747-9.2639-9.4471l-1.8512-1.078c-.6343-.441-1.0765-1.1282-1.1394-1.9036-.0404-.4998.0795-.9468.3589-1.3401.964-1.3586 5.9461-7.2707 6.8592-8.0262 1.1758-.972 2.4861-1.7804 3.7016-2.706.1728-.1318.3464-.2629.5171-.3967.006-.0059.0146-.0106.0199-.0159.39-.3079.7581-.635 1.0507-1.023 1.0568-1.2236 1.3136-2.3055 1.3765-2.7842-.1431-.4608-.5694-1.4911-1.7578-2.6796.7448.0457 1.6466.6349 2.4642 1.3282.549-.8773 1.1236-1.8042 1.6977-2.7332.3833-.6203-.1855-1.0846-.2014-1.0991l-.0032-.0007-.0007-.0033c-.0146-.0159-.4787-.5847-1.0977-.2012-1.3236.819-2.6465 1.6386-3.8229 2.3835 0 0-1.3944-.0291-3.0456 1.3972-.3886.2932-.7157.6614-1.0229 1.0507-.006.006-.0113.0139-.016.0199-.1344.1701-.2654.3436-.3965.5171-.9263 1.2163-1.7339 2.526-2.706 3.7019-.7547.9138-6.6671 5.8955-8.0258 6.8595-.3932.2795-.8395.4-1.34.359-.7746-.0623-1.4626-.5052-1.9034-1.1396l-1.0779-1.8512c-2.3724-3.792-5.6099-6.9663-9.4467-9.2645-2.7767-1.6632-5.2476-3.7913-7.3055-6.2901l-4.1658-5.0559s-1.6102 2.8882-2.2008 5.6122c.8217.9991 2.9649 3.4786 5.4597 5.3724-2.6822-1.2614-4.6651-2.2367-6.229-3.0525-.241 1.7838-.147 4.4813.1013 6.5703 1.6931.741 4.5757 1.8824 7.5101 2.4889-2.3471.5489-4.922.6488-6.9101.6098.3502 1.2931.8375 2.6121 1.4929 3.939.2787.6138.5839 1.2129.9136 1.7996 1.0521.2894 5.1829.8913 7.381.3973-2.1869.7807-5.8581 2.0922-5.8581 2.0922 2.8197 3.5087 5.9362 6.363 5.9362 6.363 4.7406-2.5492 5.8211-2.8974 9.3765-5.2228-5.7575 4.6852-7.2518 6.5981-8.8681 8.5639l-1.1262 1.5805c-.5852.8211-1.0931 1.6931-1.5174 2.6075-1.4202 3.0557-3.4302 9.5669-3.4302 9.5669-.359 1.1349.4726 1.9665 1.5744 1.5746 0 0 6.5096-2.0103 9.5664-3.4305.9137-.4251 1.7869-.9329 2.6073-1.5176l1.5804-1.1262c.5303-.4364 1.0574-.8641 1.636-1.3687 0 0 3.9784 4.7137 8.0682 7.8143 0 0 1.3116-3.6714 2.0921-5.8584-.4945 2.1989.1073 6.3299.3973 7.3813.5853.3299 1.1859.635 1.7996.9138 1.3274.6562 2.6457 1.1428 3.9386 1.493-.0383-1.989.061-4.5633.6099-6.9105.6065 2.9345 1.7473 5.8181 2.4888 7.5105 2.0888.2482 4.7862.3423 6.5698.1013-.8157-1.5639-1.7909-3.5483-3.0522-6.2292 1.8935 2.4948 4.3731 4.6381 5.3722 5.4597z" fill="#000"/></svg>
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
2
|
+
var z1=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var fe=Object.prototype.hasOwnProperty;var C1=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,i)=>(typeof require<"u"?require:e)[i]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')}),G1=t=>e=>{var i=t[e];if(i)return i();throw new Error("Module not found in bundle: "+e)};var $=(t,e)=>()=>(t&&(e=t(t=0)),e);var e1=(t,e)=>{for(var i in e)z1(t,i,{get:e[i],enumerable:!0})},me=(t,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of de(e))!fe.call(t,n)&&n!==i&&z1(t,n,{get:()=>e[n],enumerable:!(o=le(e,n))||o.enumerable});return t};var i1=t=>me(z1({},"__esModule",{value:!0}),t);import{access as s2,mkdir as r2,readFile as Ct,writeFile as a2}from"fs/promises";import{dirname as c2}from"path";import{parse as l2}from"jsonc-parser";var c,z,k,d2,f2,u,b,m2,p2,g2,r1,f=$(()=>{"use strict";c=async t=>{try{return await s2(t),!0}catch{return!1}},z=async()=>{if(await c("pnpm-workspace.yaml"))return!0;try{let t=l2(await Ct("package.json","utf-8"));return t?!!t.workspaces||!!t.workspace:!1}catch{return!1}},k=async({dependencies:t,devDependencies:e,scripts:i})=>{let o=await Ct("package.json","utf8"),n=JSON.parse(o),s={...n};(n.devDependencies||e)&&(s.devDependencies={...n.devDependencies,...e}),(n.dependencies||t)&&(s.dependencies={...n.dependencies,...t}),(n.scripts||i)&&(s.scripts={...n.scripts,...i}),await a2("package.json",JSON.stringify(s,null,2))},d2=/[ $(){}[\]&|;<>!"'`*?#~]/,f2=/'/g,u=t=>t.map(e=>d2.test(e)?`'${e.replace(f2,"'\\''")}' `:e),b=async t=>{let e=c2(t);if(e!=="."){let i=e.startsWith("./")?e.slice(2):e;await r2(i,{recursive:!0})}},m2=["./biome.json","./biome.jsonc"],p2=["./eslint.config.mjs","./eslint.config.js","./eslint.config.cjs","./eslint.config.ts","./eslint.config.mts","./eslint.config.cts"],g2="./.oxlintrc.json",r1=async()=>{for(let t of m2)if(await c(t))return"biome";for(let t of p2)if(await c(t))return"eslint";return await c(g2)?"oxlint":null}});var _t={};e1(_t,{husky:()=>B});import{execSync as X2}from"child_process";import{mkdir as Q2,readFile as K2,writeFile as Ft}from"fs/promises";import{addDevDependency as Y2,dlxCommand as O1}from"nypm";var $t,f1,B,B1=$(()=>{"use strict";f();$t=t=>`#!/bin/sh
|
|
3
3
|
# Exit on any error
|
|
4
4
|
set -e
|
|
5
5
|
|
|
@@ -67,10 +67,10 @@ if [ "$STAGED_HASH" != "$NEW_STAGED_HASH" ]; then
|
|
|
67
67
|
fi
|
|
68
68
|
|
|
69
69
|
exit $FORMAT_EXIT_CODE
|
|
70
|
-
`,
|
|
71
|
-
${
|
|
70
|
+
`,f1="./.husky/pre-commit",B={exists:()=>c(f1),install:async t=>{await Y2("husky",{packageManager:t,workspace:await z(),silent:!0}),await k({scripts:{prepare:"husky"}})},init:t=>{let e=O1(t,"husky",{args:["init"]});try{X2(e,{stdio:"pipe"})}catch{}},create:async t=>{await Q2(".husky",{recursive:!0});let e=O1(t,"ultracite",{args:["fix"],short:t==="npm"}),i=$t(e);await Ft(f1,i)},update:async t=>{let e=await K2(f1,"utf-8"),i=O1(t,"ultracite",{args:["fix"],short:t==="npm"}),o=$t(i);await Ft(f1,`${e}
|
|
71
|
+
${o}`)}}});var Dt={};e1(Dt,{lefthook:()=>W});import{execSync as Z2}from"child_process";import{readFile as q2,writeFile as Q}from"fs/promises";import{addDevDependency as t3,dlxCommand as Lt}from"nypm";var e3,i3,Rt,I,Ut,W,I1=$(()=>{"use strict";f();e3=/(pre-commit:\s*\n\s*jobs:\s*\n)/,i3=/(pre-commit:\s*\n)/,Rt=t=>Lt(t,"ultracite",{args:["fix"],short:t==="npm"}),I="./lefthook.yml",Ut=t=>`pre-commit:
|
|
72
72
|
jobs:
|
|
73
|
-
- run: ${
|
|
73
|
+
- run: ${Rt(t)}
|
|
74
74
|
glob:
|
|
75
75
|
- "*.js"
|
|
76
76
|
- "*.jsx"
|
|
@@ -80,7 +80,7 @@ ${i}`)}}});var Vt={};Q(Vt,{lefthook:()=>B});import{execSync as jn}from"child_pro
|
|
|
80
80
|
- "*.jsonc"
|
|
81
81
|
- "*.css"
|
|
82
82
|
stage_fixed: true
|
|
83
|
-
`,
|
|
83
|
+
`,W={exists:()=>c(I),install:async t=>{await t3("lefthook",{packageManager:t,workspace:await z(),silent:!0}),await k({scripts:{prepare:"lefthook install"}});let e=Lt(t,"lefthook",{args:["install"],short:t==="npm"});Z2(e,{stdio:"pipe"})},create:async t=>{let e=Ut(t);await Q(I,e)},update:async t=>{let e=await q2(I,"utf-8"),i=Rt(t),o=Ut(t);if(e.includes(i))return;if(e.startsWith("# EXAMPLE USAGE:")){await Q(I,o);return}if(e.includes("pre-commit:"))if(e.includes("jobs:")){let s=` - run: ${i}
|
|
84
84
|
glob:
|
|
85
85
|
- "*.js"
|
|
86
86
|
- "*.jsx"
|
|
@@ -89,9 +89,9 @@ ${i}`)}}});var Vt={};Q(Vt,{lefthook:()=>B});import{execSync as jn}from"child_pro
|
|
|
89
89
|
- "*.json"
|
|
90
90
|
- "*.jsonc"
|
|
91
91
|
- "*.css"
|
|
92
|
-
stage_fixed: true`,r=e.replace(
|
|
93
|
-
`);await
|
|
94
|
-
- run: ${
|
|
92
|
+
stage_fixed: true`,r=e.replace(e3,`$1${s}
|
|
93
|
+
`);await Q(I,r)}else{let s=` jobs:
|
|
94
|
+
- run: ${i}
|
|
95
95
|
glob:
|
|
96
96
|
- "*.js"
|
|
97
97
|
- "*.jsx"
|
|
@@ -100,51 +100,214 @@ ${i}`)}}});var Vt={};Q(Vt,{lefthook:()=>B});import{execSync as jn}from"child_pro
|
|
|
100
100
|
- "*.json"
|
|
101
101
|
- "*.jsonc"
|
|
102
102
|
- "*.css"
|
|
103
|
-
stage_fixed: true`,r=e.replace(
|
|
104
|
-
`);await
|
|
105
|
-
${
|
|
103
|
+
stage_fixed: true`,r=e.replace(i3,`$1${s}
|
|
104
|
+
`);await Q(I,r)}else await Q(I,`${e}
|
|
105
|
+
${o}`)}}});var Tt={};e1(Tt,{preCommit:()=>Y});import{readFile as o3,writeFile as F1}from"fs/promises";import{dlxCommand as n3}from"nypm";var K,s3,Nt,r3,Y,$1=$(()=>{"use strict";f();K="./.pre-commit-config.yaml",s3=/^repos:\s*\n/m,Nt=t=>n3(t,"ultracite",{args:["fix"],short:t==="npm"}),r3=t=>`repos:
|
|
106
106
|
- repo: local
|
|
107
107
|
hooks:
|
|
108
108
|
- id: ultracite
|
|
109
109
|
name: ultracite
|
|
110
|
-
entry: ${
|
|
110
|
+
entry: ${Nt(t)}
|
|
111
111
|
language: system
|
|
112
112
|
types_or: [javascript, jsx, ts, tsx, json, css]
|
|
113
113
|
pass_filenames: false
|
|
114
|
-
`,Y={exists:()=>c(
|
|
114
|
+
`,Y={exists:()=>c(K),create:async t=>{let e=r3(t);await F1(K,e)},update:async t=>{let e=await o3(K,"utf-8"),i=Nt(t);if(e.includes("id: ultracite"))return;let o=` - repo: local
|
|
115
115
|
hooks:
|
|
116
116
|
- id: ultracite
|
|
117
117
|
name: ultracite
|
|
118
|
-
entry: ${
|
|
118
|
+
entry: ${i}
|
|
119
119
|
language: system
|
|
120
120
|
types_or: [javascript, jsx, ts, tsx, json, css]
|
|
121
121
|
pass_filenames: false
|
|
122
|
-
`;if(e.includes("repos:")){let
|
|
123
|
-
${
|
|
122
|
+
`;if(e.includes("repos:")){let n=e.replace(s3,`repos:
|
|
123
|
+
${o}`);await F1(K,n)}else await F1(K,`${e}
|
|
124
124
|
repos:
|
|
125
|
-
${
|
|
126
|
-
`).filter(s=>s.trim()&&!s.trim().startsWith("#")),
|
|
127
|
-
`;for(let
|
|
128
|
-
`}else e+=`${
|
|
129
|
-
`;return e},
|
|
130
|
-
`;await F(t,r)},
|
|
131
|
-
`;await F(t,o)},Nt=async t=>{await F(".lintstagedrc.json",JSON.stringify(j(t),null,2))},Gn=async(t,e)=>{if(t==="./package.json"){await Bn(e);return}if(t.endsWith(".json")||t==="./.lintstagedrc"){await Wn(t,e);return}if(t.endsWith(".yaml")||t.endsWith(".yml")){await Un(t,e);return}let n=await _n();if(t.endsWith(".mjs")||t.endsWith(".js")&&n){try{await zn(t,e)}catch{await Nt(e)}return}if(t.endsWith(".cjs")||t.endsWith(".js")&&!n)try{await Hn(t,e)}catch{await Nt(e)}},W={exists:async()=>{for(let t of te)if(await c(t))return!0;return!1},install:async t=>{await An("lint-staged",{packageManager:t,workspace:await b(),silent:!0})},create:async t=>{await F(".lintstagedrc.json",JSON.stringify(j(t),null,2))},update:async t=>{let e=null;for(let n of te)if(await c(n)){e=n;break}if(!e){await Nt(t);return}await Gn(e,t)}}});import{options as C}from"@repo/data/options";import{initTRPC as Bi}from"@trpc/server";import{packageManagers as Wi}from"nypm";import{createCli as Ui}from"trpc-cli";import f from"zod";var y={name:"ultracite",description:"The AI-ready formatter that helps you write and generate code faster.",version:"7.0.0",type:"module",bin:{ultracite:"dist/index.js"},files:["config","dist","README.md"],scripts:{build:"tsup",test:"bun test","test:coverage":"bun test --coverage"},exports:{"./biome/*":"./config/biome/*/biome.jsonc","./eslint/*":"./config/eslint/*/eslint.config.mjs","./oxlint/*":"./config/oxlint/*/.oxlintrc.json","./prettier":"./config/prettier/prettier.config.mjs","./stylelint":"./config/stylelint/stylelint.config.mjs","./*":"./config/*/biome.jsonc"},author:"Hayden Bleasel <hello@haydenbleasel.com>",bugs:{url:"https://github.com/haydenbleasel/ultracite/issues"},homepage:"https://www.ultracite.ai/",keywords:["ultracite","biome","linter","formatter","fixer"],license:"MIT",publishConfig:{access:"public",registry:"https://registry.npmjs.org/"},repository:{type:"git",url:"git+https://github.com/haydenbleasel/ultracite.git"},devDependencies:{"@biomejs/biome":"catalog:","@eslint/js":"^9.39.2","@next/eslint-plugin-next":"^16.1.1","@tanstack/eslint-plugin-query":"^5.91.2","@types/node":"catalog:","@typescript-eslint/eslint-plugin":"^8.51.0","@typescript-eslint/parser":"^8.51.0","eslint-config-prettier":"^10.1.8","eslint-import-resolver-typescript":"^4.4.4","eslint-plugin-angular":"^5.0.0","eslint-plugin-astro":"^1.5.0","eslint-plugin-compat":"^6.0.2","eslint-plugin-cypress":"^5.2.0","eslint-plugin-github":"6.0.0","eslint-plugin-html":"^8.1.3","eslint-plugin-import":"^2.32.0","eslint-plugin-jest":"^29.12.0","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-n":"^17.23.1","eslint-plugin-prettier":"^5.5.4","eslint-plugin-promise":"^7.2.1","eslint-plugin-qwik":"^1.18.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-remix":"^1.1.1","eslint-plugin-solid":"^0.14.5","eslint-plugin-sonarjs":"^3.0.5","eslint-plugin-storybook":"^10.1.11","eslint-plugin-svelte":"^3.13.1","eslint-plugin-tailwindcss":"^3.18.2","eslint-plugin-unicorn":"^62.0.0","eslint-plugin-unused-imports":"^4.3.0","eslint-plugin-vue":"^10.6.2",globals:"^16.5.0","prettier-plugin-tailwindcss":"^0.7.2","stylelint-config-idiomatic-order":"^10.0.0","stylelint-config-standard":"^39.0.1","stylelint-prettier":"^5.0.3",tsup:"^8.5.1"},dependencies:{"@clack/prompts":"^0.11.0","@trpc/server":"^11.8.1","@repo/data":"workspace:*",deepmerge:"catalog:",glob:"^13.0.0","jsonc-parser":"^3.3.1",nypm:"^0.6.2",oxlint:"^1.36.0","trpc-cli":"^0.12.1",zod:"catalog:"},packageManager:"bun@1.3.5"};m();import{spawnSync as D}from"child_process";import L from"process";import{detectPackageManager as A,dlxCommand as J}from"nypm";var Je=async(t,e)=>{let n=["check","--no-errors-on-unmatched"];e&&n.push(`--diagnostic-level=${e}`),t.length>0?n.push(...d(t)):n.push("./");let o=(await A(L.cwd()))?.name||"npm",s=J(o,"@biomejs/biome",{args:n,short:o==="npm"}),r=D(s,{stdio:"inherit",shell:!0});if(r.error)throw new Error(`Failed to run Biome: ${r.error.message}`);return{hasErrors:r.status!==0}},Te=async t=>{let e=t.length>0?d(t):["."],i=(await A(L.cwd()))?.name||"npm",o=J(i,"eslint",{args:e,short:i==="npm"}),s=D(o,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run ESLint: ${s.error.message}`);return{hasErrors:s.status!==0}},Ie=async t=>{let e=["--check",...t.length>0?d(t):["."]],i=(await A(L.cwd()))?.name||"npm",o=J(i,"prettier",{args:e,short:i==="npm"}),s=D(o,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Prettier: ${s.error.message}`);return{hasErrors:s.status!==0}},Me=async t=>{let e=t.length>0?d(t):["."],i=(await A(L.cwd()))?.name||"npm",o=J(i,"stylelint",{args:e,short:i==="npm"}),s=D(o,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Stylelint: ${s.error.message}`);return{hasErrors:s.status!==0}},_e=async t=>{let e=t.length>0?d(t):["."],i=(await A(L.cwd()))?.name||"npm",o=J(i,"oxlint",{args:e,short:i==="npm"}),s=D(o,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Oxlint: ${s.error.message}`);return{hasErrors:s.status!==0}},Be=async t=>{let e=["--check",...t.length>0?d(t):["."]],i=(await A(L.cwd()))?.name||"npm",o=J(i,"oxfmt",{args:e,short:i==="npm"}),s=D(o,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run oxfmt: ${s.error.message}`);return{hasErrors:s.status!==0}},Tt=async t=>{let e=t?.[0]||[],n=t?.[1]["diagnostic-level"],o=t?.[1].linter||await q();if(!o)throw new Error("No linter configuration found. Run `ultracite init` to set up a linter.");switch(o){case"eslint":{let s=await Ie(e),r=await Te(e),a=await Me(e);return{hasErrors:s.hasErrors||r.hasErrors||a.hasErrors}}case"oxlint":{let s=await Be(e),r=await _e(e);return{hasErrors:s.hasErrors||r.hasErrors}}default:return Je(e,n)}};import{spawnSync as xt}from"child_process";import{existsSync as S}from"fs";import{readFile as et}from"fs/promises";import{join as O}from"path";import w from"process";import{intro as We,log as tt,outro as yt,spinner as Ue}from"@clack/prompts";import{parse as It}from"jsonc-parser";import{detectPackageManager as nt,dlxCommand as it}from"nypm";var ze=[".prettierrc",".prettierrc.js",".prettierrc.cjs",".prettierrc.mjs",".prettierrc.json",".prettierrc.yaml",".prettierrc.yml","prettier.config.js","prettier.config.mjs","prettier.config.cjs"],He=[".eslintrc",".eslintrc.js",".eslintrc.cjs",".eslintrc.mjs",".eslintrc.json",".eslintrc.yaml",".eslintrc.yml","eslint.config.js","eslint.config.mjs","eslint.config.cjs","eslint.config.ts","eslint.config.mts","eslint.config.cts"],Ge=async()=>{let e=(await nt(w.cwd()))?.name||"npm",n=it(e,"@biomejs/biome",{args:["--version"],short:e==="npm"}),i=xt(n,{shell:!0,encoding:"utf-8"});return i.status===0&&i.stdout?{name:"Biome installation",status:"pass",message:`Biome is installed (${i.stdout.trim()})`}:{name:"Biome installation",status:"fail",message:"Biome is not installed or not accessible"}},Ye=async()=>{let e=(await nt(w.cwd()))?.name||"npm",n=it(e,"eslint",{args:["--version"],short:e==="npm"}),i=xt(n,{shell:!0,encoding:"utf-8"});return i.status===0&&i.stdout?{name:"ESLint installation",status:"pass",message:`ESLint is installed (${i.stdout.trim()})`}:{name:"ESLint installation",status:"warn",message:"ESLint is not installed (optional)"}},Xe=async()=>{let e=(await nt(w.cwd()))?.name||"npm",n=it(e,"oxlint",{args:["--version"],short:e==="npm"}),i=xt(n,{shell:!0,encoding:"utf-8"});return i.status===0&&i.stdout?{name:"Oxlint installation",status:"pass",message:`Oxlint is installed (${i.stdout.trim()})`}:{name:"Oxlint installation",status:"warn",message:"Oxlint is not installed (optional)"}},Ke=async()=>{let t=O(w.cwd(),"biome.json"),e=O(w.cwd(),"biome.jsonc"),n=null;if(S(t)?n=t:S(e)&&(n=e),!n)return{name:"Biome configuration",status:"warn",message:"No biome.json or biome.jsonc file found"};try{let i=await et(n,"utf-8"),o=It(i);return Array.isArray(o?.extends)&&o.extends.includes("ultracite/biome/core")?{name:"Biome configuration",status:"pass",message:"biome.json(c) extends ultracite/biome/core"}:{name:"Biome configuration",status:"warn",message:"biome.json(c) exists but doesn't extend ultracite/biome/core"}}catch{return{name:"Biome configuration",status:"fail",message:"Could not parse biome.json(c) file"}}},Ve=async()=>{let t=["eslint.config.mjs","eslint.config.js","eslint.config.cjs","eslint.config.ts","eslint.config.mts","eslint.config.cts"],e=null;for(let n of t){let i=O(w.cwd(),n);if(S(i)){e=i;break}}if(!e)return{name:"ESLint configuration",status:"warn",message:"No eslint.config.* file found (optional)"};try{return(await et(e,"utf-8")).includes("ultracite/eslint")?{name:"ESLint configuration",status:"pass",message:"eslint.config.* imports ultracite/eslint"}:{name:"ESLint configuration",status:"warn",message:"eslint.config.* exists but doesn't import ultracite/eslint"}}catch{return{name:"ESLint configuration",status:"fail",message:"Could not read eslint.config.* file"}}},Qe=async()=>{let t=O(w.cwd(),".oxlintrc.json");if(!S(t))return{name:"Oxlint configuration",status:"warn",message:"No .oxlintrc.json file found (optional)"};try{let e=await et(t,"utf-8"),n=It(e);return Array.isArray(n?.extends)&&n.extends.includes("ultracite/oxlint/core")?{name:"Oxlint configuration",status:"pass",message:".oxlintrc.json extends ultracite/oxlint/core"}:{name:"Oxlint configuration",status:"warn",message:".oxlintrc.json exists but doesn't extend ultracite/oxlint/core"}}catch{return{name:"Oxlint configuration",status:"fail",message:"Could not parse .oxlintrc.json file"}}},Ze=async()=>{let t=O(w.cwd(),"package.json");if(!S(t))return{name:"Ultracite dependency",status:"warn",message:"No package.json found"};try{let e=JSON.parse(await et(t,"utf-8")),n=e.dependencies?.ultracite||e.devDependencies?.ultracite||e.peerDependencies?.ultracite;return n?{name:"Ultracite dependency",status:"pass",message:`Ultracite is in package.json (${n})`}:{name:"Ultracite dependency",status:"warn",message:"Ultracite not found in package.json dependencies"}}catch{return{name:"Ultracite dependency",status:"warn",message:"Could not parse package.json"}}},qe=()=>{let t=ze.some(i=>S(O(w.cwd(),i))),n=He.filter(i=>!i.startsWith("eslint.config")).some(i=>S(O(w.cwd(),i)));if(t||n){let i=[];return t&&i.push("Prettier"),n&&i.push("ESLint (legacy config)"),{name:"Conflicting tools",status:"warn",message:`Found potentially conflicting tools: ${i.join(", ")}`}}return{name:"Conflicting tools",status:"pass",message:"No conflicting formatting/linting tools found"}},E=async(t,e)=>{let n=Ue();n.start(`Checking ${e}...`);let i=await t();return i.status==="pass"||i.status,n.stop(i.message),i},Mt=async()=>{We(`Ultracite v${y.version} Doctor`);let e=(await nt(w.cwd()))?.name||"npm",n=it(e,"ultracite",{args:["init"],short:e==="npm"}),i=[];i.push(await E(Ge,"Biome installation")),i.push(await E(Ye,"ESLint installation")),i.push(await E(Xe,"Oxlint installation")),i.push(await E(Ke,"Biome configuration")),i.push(await E(Ve,"ESLint configuration")),i.push(await E(Qe,"Oxlint configuration")),i.push(await E(Ze,"Ultracite dependency")),i.push(await E(qe,"conflicting tools"));let o=i.filter(a=>a.status==="pass").length,s=i.filter(a=>a.status==="fail").length,r=i.filter(a=>a.status==="warn").length;if(tt.info(`Summary: ${o} passed, ${r} warnings, ${s} failed`),s>0)throw tt.error(`Some checks failed. Run '${n}' to fix issues.`),yt("Doctor complete"),new Error("Doctor checks failed");if(r>0){tt.warn(`Some optional improvements available. Run '${n}' to configure.`),yt("Doctor complete");return}tt.success("Everything looks good!"),yt("Doctor complete")};m();import{spawnSync as T}from"child_process";import I from"process";import{detectPackageManager as M,dlxCommand as _}from"nypm";var tn=async(t,e)=>{let n=["check","--write","--no-errors-on-unmatched"];e&&n.push("--unsafe"),t.length>0?n.push(...d(t)):n.push("./");let o=(await M(I.cwd()))?.name||"npm",s=_(o,"@biomejs/biome",{args:n,short:o==="npm"}),r=T(s,{stdio:"inherit",shell:!0});if(r.error)throw new Error(`Failed to run Biome: ${r.error.message}`);return{hasErrors:r.status!==0}},en=async t=>{let e=["--fix",...t.length>0?d(t):["."]],i=(await M(I.cwd()))?.name||"npm",o=_(i,"eslint",{args:e,short:i==="npm"}),s=T(o,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run ESLint: ${s.error.message}`);return{hasErrors:s.status!==0}},nn=async t=>{let e=["--write",...t.length>0?d(t):["."]],i=(await M(I.cwd()))?.name||"npm",o=_(i,"prettier",{args:e,short:i==="npm"}),s=T(o,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Prettier: ${s.error.message}`);return{hasErrors:s.status!==0}},on=async t=>{let e=["--fix",...t.length>0?d(t):["."]],i=(await M(I.cwd()))?.name||"npm",o=_(i,"stylelint",{args:e,short:i==="npm"}),s=T(o,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Stylelint: ${s.error.message}`);return{hasErrors:s.status!==0}},sn=async t=>{let e=["--fix",...t.length>0?d(t):["."]],i=(await M(I.cwd()))?.name||"npm",o=_(i,"oxlint",{args:e,short:i==="npm"}),s=T(o,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Oxlint: ${s.error.message}`);return{hasErrors:s.status!==0}},rn=async t=>{let e=["--write",...t.length>0?d(t):["."]],i=(await M(I.cwd()))?.name||"npm",o=_(i,"oxfmt",{args:e,short:i==="npm"}),s=T(o,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run oxfmt: ${s.error.message}`);return{hasErrors:s.status!==0}},_t=async(t,e={})=>{let n=e.linter||await q();if(!n)throw new Error("No linter configuration found. Run `ultracite init` to set up a linter.");switch(n){case"eslint":{let i=await nn(t),o=await en(t),s=await on(t);return{hasErrors:i.hasErrors||o.hasErrors||s.hasErrors}}case"oxlint":{let i=await rn(t),o=await sn(t);return{hasErrors:i.hasErrors||o.hasErrors}}default:return tn(t,e.unsafe)}};import xi from"process";import{cancel as U,intro as ki,isCancel as z,log as ut,multiselect as K,select as Ci,spinner as g}from"@clack/prompts";import{agents as bi}from"@repo/data/agents";import{editors as xe}from"@repo/data/editors";import{providers as Ei}from"@repo/data/providers";import{addDevDependency as ji,detectPackageManager as Pi}from"nypm";m();import{readFile as an,writeFile as kt}from"fs/promises";import{agents as cn}from"@repo/data/agents";import{getRules as ln}from"@repo/data/rules";import{dlxCommand as fn}from"nypm";var Bt=(t,e)=>{let n=cn.find(r=>r.id===t);if(!n)throw new Error(`Agent "${t}" not found`);let i=fn(e,""),o=ln(i),s=n.config.header?`${n.config.header}
|
|
125
|
+
${o}`)}}});var a3,_1=$(()=>{a3=G1({"./husky.ts":()=>(B1(),i1(_t)),"./lefthook.ts":()=>(I1(),i1(Dt)),"./lint-staged.ts":()=>(U1(),i1(Gt)),"./pre-commit.ts":()=>($1(),i1(Tt))})});var Gt={};e1(Gt,{lintStaged:()=>H});import{readFile as m1,writeFile as F}from"fs/promises";import{pathToFileURL as c3}from"url";import Z from"deepmerge";import{parse as R1}from"jsonc-parser";import{addDevDependency as l3,dlxCommand as d3}from"nypm";var S,Mt,f3,m3,p3,g3,u3,h3,w3,x3,v3,L1,y3,H,U1=$(()=>{"use strict";f();_1();S=t=>({"*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}":[d3(t,"ultracite",{args:["fix"],short:t==="npm"})]}),Mt=["./package.json","./.lintstagedrc.json","./.lintstagedrc.js","./.lintstagedrc.cjs","./.lintstagedrc.mjs","./lint-staged.config.js","./lint-staged.config.cjs","./lint-staged.config.mjs","./.lintstagedrc.yaml","./.lintstagedrc.yml","./.lintstagedrc"],f3=(t,e,i,o)=>{let n=t.trim();if(n.includes(":")&&!n.startsWith("-")){i&&o.length>0&&(e[i]=o);let[s,...r]=n.split(":"),a=r.join(":").trim(),m=s.trim().replace(/['"]/g,"");return a&&a!==""?(a.startsWith("[")&&a.endsWith("]")?e[m]=a.slice(1,-1).split(",").map(h=>h.trim().replace(/['"]/g,"")):e[m]=a.replace(/['"]/g,""),{newCurrentKey:null,newCurrentArray:[]}):{newCurrentKey:m,newCurrentArray:[]}}if(n.startsWith("-")&&i){let s=[...o,n.slice(1).trim().replace(/['"]/g,"")];return{newCurrentKey:i,newCurrentArray:s}}return{newCurrentKey:i,newCurrentArray:o}},m3=t=>{let e=t.split(`
|
|
126
|
+
`).filter(s=>s.trim()&&!s.trim().startsWith("#")),i={},o=null,n=[];for(let s of e){let r=f3(s,i,o,n);o=r.newCurrentKey,n=r.newCurrentArray}return o&&n.length>0&&(i[o]=n),i},p3=t=>{let e="";for(let[i,o]of Object.entries(t))if(Array.isArray(o)){e+=`${i}:
|
|
127
|
+
`;for(let n of o)e+=` - '${n}'
|
|
128
|
+
`}else e+=`${i}: '${o}'
|
|
129
|
+
`;return e},g3=async()=>{try{let t=R1(await m1("./package.json","utf-8"));return t?t.type==="module":!1}catch{return!1}},u3=async t=>{let e=R1(await m1("./package.json","utf-8"));e&&(e["lint-staged"]?e["lint-staged"]=Z(e["lint-staged"],S(t)):e["lint-staged"]=S(t),await F("./package.json",JSON.stringify(e,null,2)))},h3=async(t,e)=>{let i=await m1(t,"utf-8"),o=R1(i);if(!o)return;let n=Z(o,S(e));await F(t,JSON.stringify(n,null,2))},w3=async(t,e)=>{let i=await m1(t,"utf-8"),o=m3(i);if(!o)return;let n=Z(o,S(e));await F(t,p3(n))},x3=async(t,e)=>{let n=(await import(c3(t).href)).default||{},s=Z(n,S(e)),r=`export default ${JSON.stringify(s,null,2)};
|
|
130
|
+
`;await F(t,r)},v3=async(t,e)=>{delete C1.cache[C1.resolve(`./${t}`)];let i=a3(`./${t}`),o=Z(i,S(e)),n=`module.exports = ${JSON.stringify(o,null,2)};
|
|
131
|
+
`;await F(t,n)},L1=async t=>{await F(".lintstagedrc.json",JSON.stringify(S(t),null,2))},y3=async(t,e)=>{if(t==="./package.json"){await u3(e);return}if(t.endsWith(".json")||t==="./.lintstagedrc"){await h3(t,e);return}if(t.endsWith(".yaml")||t.endsWith(".yml")){await w3(t,e);return}let i=await g3();if(t.endsWith(".mjs")||t.endsWith(".js")&&i){try{await x3(t,e)}catch{await L1(e)}return}if(t.endsWith(".cjs")||t.endsWith(".js")&&!i)try{await v3(t,e)}catch{await L1(e)}},H={exists:async()=>{for(let t of Mt)if(await c(t))return!0;return!1},install:async t=>{await l3("lint-staged",{packageManager:t,workspace:await z(),silent:!0})},create:async t=>{await F(".lintstagedrc.json",JSON.stringify(S(t),null,2))},update:async t=>{let e=null;for(let i of Mt)if(await c(i)){e=i;break}if(!e){await L1(t);return}await y3(e,t)}}});var M1="./aider-K7JLZT2D.svg";var J1="./amazon-q-TSOJNPXB.svg";var W1="./amp-EV4LVL5I.svg";var H1="./augmentcode-Q62PVXKO.svg";var V1="./claude-6DLEHRDQ.svg";var X1="./cline-6HWKIYN7.svg";var Q1="./codex-NQZ5TJCL.svg";var K1="./copilot-L2IY45R2.svg";var Y1="./crush-LYLRDQGZ.svg";var Z1="./droid-266OHJBT.svg";var q1="./firebase-studio-ILLWWYU7.svg";var tt="./firebender-UNO6LSZG.svg";var et="./gemini-OYS6V4BH.svg";var it="./goose-XBIEVD4H.svg";var ot="./jules-HJPVWU73.svg";var nt="./junie-RUWBUV6N.svg";var st="./kilo-code-4QYUYY2E.svg";var rt="./open-hands-K5EYKO6T.svg";var at="./opencode-K3274JKQ.svg";var ct="./qwen-N3D5CQYL.svg";var lt="./roo-code-CVLBTS7D.svg";var dt="./warp-OZKAAQRT.svg";var _=[{id:"claude",name:"Claude Code",subtitle:"Anthropic's agentic CLI",description:"Anthropic's official CLI for Claude, an agentic coding tool that lives in your terminal.",config:{path:".claude/CLAUDE.md",appendMode:!0},logo:V1},{id:"codex",name:"Codex",subtitle:"OpenAI's coding agent",description:"OpenAI's cloud-based coding agent for autonomous software development tasks.",config:{path:"AGENTS.md",appendMode:!0},logo:Q1},{id:"jules",name:"Jules",subtitle:"Google's async agent",description:"Google's asynchronous AI coding agent that works in the background to complete development tasks.",config:{path:"AGENTS.md",appendMode:!0},logo:ot},{id:"copilot",name:"GitHub Copilot",subtitle:"GitHub's AI pair programmer",description:"GitHub's AI pair programmer that suggests code completions and helps write code faster.",config:{path:".github/copilot-instructions.md",appendMode:!0,header:`---
|
|
132
|
+
applyTo: "**/*.{ts,tsx,js,jsx}"
|
|
133
|
+
---`},logo:K1},{id:"cline",name:"Cline",subtitle:"Autonomous VS Code agent",description:"An autonomous coding agent for VS Code that can create and edit files, run commands, and more.",config:{path:".clinerules",appendMode:!0},logo:X1},{id:"amp",name:"AMP",subtitle:"Sourcegraph's coding agent",description:"Sourcegraph's AI coding agent that understands your entire codebase for intelligent assistance.",config:{path:"AGENT.md",appendMode:!0},logo:W1},{id:"aider",name:"Aider",subtitle:"Terminal pair programming",description:"AI pair programming in your terminal with support for multiple LLM providers.",config:{path:"ultracite.md"},logo:M1},{id:"firebase-studio",name:"Firebase Studio",subtitle:"Google's cloud IDE",description:"Google's AI-powered development environment integrated with Firebase services.",config:{path:".idx/airules.md",appendMode:!0},logo:q1},{id:"open-hands",name:"OpenHands",subtitle:"Open-source AI agents",description:"An open-source platform for AI software development agents with autonomous capabilities.",config:{path:".openhands/microagents/repo.md",appendMode:!0},logo:rt},{id:"gemini",name:"Gemini",subtitle:"Google's terminal AI",description:"Google's command-line interface for Gemini, bringing AI assistance to your terminal.",config:{path:"GEMINI.md",appendMode:!0},logo:et},{id:"junie",name:"Junie",subtitle:"JetBrains' AI agent",description:"JetBrains' AI coding agent integrated into their IDE ecosystem.",config:{path:".junie/guidelines.md",appendMode:!0},logo:nt},{id:"augmentcode",name:"Augment Code",subtitle:"Enterprise AI assistant",description:"An AI coding assistant focused on enterprise development workflows and team collaboration.",config:{path:".augment/rules/ultracite.md"},logo:H1},{id:"kilo-code",name:"Kilo Code",subtitle:"Customizable VS Code AI",description:"A VS Code extension providing AI-powered coding assistance with customizable rules.",config:{path:".kilocode/rules/ultracite.md"},logo:st},{id:"goose",name:"Goose",subtitle:"Block's open-source agent",description:"Block's open-source AI developer agent for autonomous software development.",config:{path:".goosehints",appendMode:!0},logo:it},{id:"roo-code",name:"Roo Code",subtitle:"Codebase navigation AI",description:"An AI coding assistant focused on understanding and navigating complex codebases.",config:{path:".roo/rules/ultracite.md",appendMode:!0},logo:lt},{id:"warp",name:"Warp",subtitle:"Modern AI terminal",description:"A modern terminal with AI-powered command suggestions and workflow automation.",config:{path:"WARP.md",appendMode:!0},logo:dt},{id:"droid",name:"Droid",subtitle:"Automated code generation",description:"An AI development agent focused on automated code generation and task completion.",config:{path:"AGENTS.md",appendMode:!0},logo:Z1},{id:"opencode",name:"OpenCode",subtitle:"Open-source coding agent",description:"An open-source AI coding agent that runs in your terminal, desktop, or IDE with support for 75+ LLM providers.",config:{path:"AGENTS.md",appendMode:!0},logo:at},{id:"crush",name:"Crush",subtitle:"Glamorous terminal agent",description:"Charmbracelet's glamorous AI coding agent for your terminal with multi-model support.",config:{path:"CRUSH.md",appendMode:!0},logo:Y1},{id:"qwen",name:"Qwen Code",subtitle:"Alibaba's coding CLI",description:"Alibaba's command-line interface for Qwen3-Coder, enabling agentic coding with natural language.",config:{path:"AGENTS.md",appendMode:!0},logo:ct},{id:"amazon-q-cli",name:"Amazon Q CLI",subtitle:"AWS's terminal AI",description:"Amazon's AI-powered CLI with command autocompletion, natural language chat, and AWS integration.",config:{path:".amazonq/rules/ultracite.md",appendMode:!0},logo:J1},{id:"firebender",name:"Firebender",subtitle:"Android Studio AI",description:"The most powerful AI coding assistant for Android Studio with codebase context and up-to-date Android knowledge.",config:{path:"firebender.json"},logo:tt}];import U from"deepmerge";var ft="./antigravity-JVONECNW.svg";var mt="./cursor-GQNH5LCA.svg";var pt="./kiro-N2M256R6.svg";var gt="./trae-RXVCFBOF.svg";var ut="./void-NYH3U3BB.svg";var ht="./vscode-DEOUEB65.svg";var wt="./windsurf-5T7JOTST.svg";var xt="./zed-SIARPESF.svg";var o1={"editor.defaultFormatter":"esbenp.prettier-vscode","typescript.tsdk":"node_modules/typescript/lib","editor.formatOnSave":!0,"editor.formatOnPaste":!0,"emmet.showExpandedAbbreviation":"never"},Me={"[javascript]":{"editor.defaultFormatter":"biomejs.biome"},"[typescript]":{"editor.defaultFormatter":"biomejs.biome"},"[javascriptreact]":{"editor.defaultFormatter":"biomejs.biome"},"[typescriptreact]":{"editor.defaultFormatter":"biomejs.biome"},"[json]":{"editor.defaultFormatter":"biomejs.biome"},"[jsonc]":{"editor.defaultFormatter":"biomejs.biome"},"[html]":{"editor.defaultFormatter":"biomejs.biome"},"[vue]":{"editor.defaultFormatter":"biomejs.biome"},"[svelte]":{"editor.defaultFormatter":"biomejs.biome"},"[css]":{"editor.defaultFormatter":"biomejs.biome"},"[yaml]":{"editor.defaultFormatter":"biomejs.biome"},"[graphql]":{"editor.defaultFormatter":"biomejs.biome"},"[markdown]":{"editor.defaultFormatter":"biomejs.biome"},"[mdx]":{"editor.defaultFormatter":"biomejs.biome"},"editor.codeActionsOnSave":{"source.fixAll.biome":"explicit","source.organizeImports.biome":"explicit"}},Je={"[javascript]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[javascriptreact]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[typescript]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[typescriptreact]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[json]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[jsonc]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[yaml]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[html]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[vue]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[vue-html]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[handlebars]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[css]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[scss]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[less]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[graphql]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"[markdown]":{"editor.defaultFormatter":"oxc.oxc-vscode"},"editor.codeActionsOnSave":{"source.fixAll.oxc":"explicit"}},We={"editor.codeActionsOnSave":{"source.fixAll.eslint":"explicit","source.organizeImports":"explicit"}},E=(t="biome")=>{switch(t){case"biome":return U(o1,Me);case"eslint":return U(o1,We);case"oxlint":return U(o1,Je);default:return o1}},n1={formatter:"language_server",format_on_save:"on",lsp:{"typescript-language-server":{settings:{typescript:{preferences:{includePackageJsonAutoImports:"on"}}}}}},He={languages:{JavaScript:{formatter:{language_server:{name:"biome"}},code_actions_on_format:{"source.fixAll.biome":!0,"source.organizeImports.biome":!0}},TypeScript:{formatter:{language_server:{name:"biome"}},code_actions_on_format:{"source.fixAll.biome":!0,"source.organizeImports.biome":!0}},TSX:{formatter:{language_server:{name:"biome"}},code_actions_on_format:{"source.fixAll.biome":!0,"source.organizeImports.biome":!0}}}},Ve={languages:{JavaScript:{formatter:{language_server:{name:"eslint"}},code_actions_on_format:{"source.fixAll.eslint":!0,"source.organizeImports.eslint":!0}},TypeScript:{formatter:{language_server:{name:"eslint"}},code_actions_on_format:{"source.fixAll.eslint":!0,"source.organizeImports.eslint":!0}},TSX:{formatter:{language_server:{name:"eslint"}},code_actions_on_format:{"source.fixAll.eslint":!0,"source.organizeImports.eslint":!0}}}},Xe={languages:{JavaScript:{formatter:{language_server:{name:"oxfmt"}},code_actions_on_format:{"source.fixAll.oxc":!0,"source.organizeImports.oxc":!0}},TypeScript:{formatter:{language_server:{name:"oxfmt"}},code_actions_on_format:{"source.fixAll.oxc":!0,"source.organizeImports.oxc":!0}},TSX:{formatter:{language_server:{name:"oxfmt"}},code_actions_on_format:{"source.fixAll.oxc":!0,"source.organizeImports.oxc":!0}}},lsp:{oxlint:{initialization_options:{settings:{disableNestedConfig:!1,fixKind:"safe_fix",run:"onType",typeAware:!0,unusedDisableDirectives:"deny"}}},oxfmt:{initialization_options:{settings:{configPath:null,flags:{},"fmt.configPath":null,"fmt.experimental":!0,run:"onSave",typeAware:!1,unusedDisableDirectives:!1}}}}},Qe=(t="biome")=>{switch(t){case"biome":return U(n1,He);case"eslint":return U(n1,Ve);case"oxlint":return U(n1,Xe);default:return n1}},x=[{id:"vscode",name:"Visual Studio Code",subtitle:"The most popular code editor",description:"Microsoft's popular code editor with extensive extension support and built-in Git integration.",logo:ht,config:{path:".vscode/settings.json",getContent:E,extensionCommand:"code --install-extension"}},{id:"cursor",name:"Cursor",subtitle:"The AI-first code editor",description:"The AI-first code editor built on VS Code with deep AI integration for coding assistance.",logo:mt,rules:{path:".cursor/rules/ultracite.mdc",header:`---
|
|
134
|
+
description: Ultracite Rules - AI-Ready Formatter and Linter
|
|
135
|
+
globs: "**/*.{ts,tsx,js,jsx,json,jsonc,html,vue,svelte,astro,css,yaml,yml,graphql,gql,md,mdx,grit}"
|
|
136
|
+
alwaysApply: false
|
|
137
|
+
---`},hooks:{path:".cursor/hooks.json",getContent:t=>({version:1,hooks:{afterFileEdit:[{command:t}]}})},config:{path:".vscode/settings.json",getContent:E,extensionCommand:"code --install-extension"}},{id:"windsurf",name:"Windsurf",subtitle:"The agentic IDE by Codeium",description:"Codeium's agentic IDE that combines AI assistance with a powerful VS Code-based development environment.",logo:wt,rules:{path:".windsurf/rules/ultracite.md"},hooks:{path:".windsurf/hooks.json",getContent:t=>({hooks:{post_write_code:[{command:t,show_output:!0}]}})},config:{path:".vscode/settings.json",getContent:E,extensionCommand:"code --install-extension"}},{id:"antigravity",name:"Antigravity",subtitle:"Google's next-generation IDE",description:"An AI-powered development platform built on VS Code for building and deploying applications faster.",logo:ft,config:{path:".vscode/settings.json",getContent:E,extensionCommand:"code --install-extension"}},{id:"kiro",name:"Kiro",subtitle:"AWS's spec-driven IDE",description:"AWS's spec-driven AI development environment for building production-ready applications.",logo:pt,rules:{path:".kiro/steering/ultracite.md"},config:{path:".vscode/settings.json",getContent:E,extensionCommand:"code --install-extension"}},{id:"trae",name:"Trae AI",subtitle:"ByteDance's AI IDE",description:"ByteDance's AI-powered IDE built on VS Code - the real AI engineer.",logo:gt,rules:{path:".trae/rules/project_rules.md"},config:{path:".vscode/settings.json",getContent:E,extensionCommand:"code --install-extension"}},{id:"void",name:"Void",subtitle:"Open-source AI editor",description:"An open-source AI code editor built on VS Code with a focus on privacy and extensibility.",logo:ut,config:{path:".vscode/settings.json",getContent:E,extensionCommand:"code --install-extension"}},{id:"zed",name:"Zed",subtitle:"The high-performance editor",description:"A high-performance, multiplayer code editor built in Rust with built-in AI assistance.",logo:xt,rules:{path:".rules",appendMode:!0},config:{path:".zed/settings.json",getContent:Qe}}];var vt="./biome-TVLEY2T4.svg";var yt="./eslint-7IULJKW7.svg";var kt="./oxlint-5IE3ABOZ.svg";var bt="./prettier-O4V2FSEA.svg";var zt="./stylelint-DEBSWZVS.svg";var s1=[{id:"biome",name:"Biome",subtitle:"The modern all-in-one toolchain",description:"The modern, all-in-one toolchain. Biome is a fast formatter and linter written in Rust that handles JavaScript, TypeScript, JSON, CSS, and more with a single tool.",benefits:[{title:"Lightning fast",description:"Written in Rust, Biome can format a large codebase in milliseconds.",icon:"Zap"},{title:"All-in-one toolchain",description:"No more juggling ESLint, Prettier, and other tools. Biome handles formatting and linting in a single pass.",icon:"Layers"},{title:"287 preconfigured rules",description:"Covers accessibility, complexity, correctness, performance, security, style, and suspicious patterns.",icon:"ShieldCheck"},{title:"Multi-language support",description:"Natively supports JavaScript, TypeScript, JSX, TSX, JSON, JSONC, CSS, GraphQL, and HTML.",icon:"Code"},{title:"Smart sorting",description:"Automatically organizes imports and JSX attributes, plus sorts Tailwind CSS classes.",icon:"ArrowUpDown"},{title:"Zero dependencies",description:"Biome has no JavaScript dependencies. One binary does everything with consistent behavior.",icon:"Package"}],logo:vt,videos:["https://www.youtube.com/watch?v=lEkXbneUnWg","https://www.youtube.com/watch?v=b_F4LaycQcE"],configFiles:[{name:"biome.jsonc",lang:"json",code:t=>`{
|
|
138
|
+
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
|
|
139
|
+
"extends": [
|
|
140
|
+
${t.map(e=>`"ultracite/biome/${e}"`).join(`,
|
|
141
|
+
`)}
|
|
142
|
+
]
|
|
143
|
+
}`}],vscodeExtensionId:"biomejs.biome"},{id:"eslint",name:"ESLint + Prettier + Stylelint",subtitle:"The most mature linting ecosystem",description:"The most mature and comprehensive linting solution. Combines ESLint for JavaScript/TypeScript, Prettier for formatting, and Stylelint for CSS with 20+ plugins and hundreds of preconfigured rules.",benefits:[{title:"Battle-tested",description:"Used by millions of developers worldwide. The largest ecosystem of plugins and configurations available.",icon:"ShieldCheck"},{title:"20+ plugins included",description:"React, TypeScript, JSX A11y, Import, Promise, Node, Next.js, Unicorn, SonarJS, and more preconfigured.",icon:"Puzzle"},{title:"Three tools in one",description:"ESLint handles code quality, Prettier ensures consistent formatting, and Stylelint keeps your CSS clean.",icon:"Layers"},{title:"Framework-aware",description:"First-class support for React, Next.js, Vue, Svelte, and more with framework-specific rules.",icon:"Box"},{title:"Type-aware linting",description:"Deep TypeScript integration with type-aware rules that catch bugs static analysis alone can't find.",icon:"FileCode"},{title:"Maximum coverage",description:"Hundreds of rules covering accessibility, security, performance, and best practices out of the box.",icon:"Target"}],includes:["ESLint","Prettier","Stylelint"],logo:yt,additionalLogos:[bt,zt],configFiles:[{name:"eslint.config.mjs",lang:"javascript",code:t=>`import { defineConfig } from "eslint/config";
|
|
144
|
+
${t.map(e=>`import ${e} from "ultracite/eslint/${e}";`).join(`
|
|
145
|
+
`)}
|
|
146
|
+
|
|
147
|
+
export default defineConfig([
|
|
148
|
+
{
|
|
149
|
+
extends: [
|
|
150
|
+
${t.join(`,
|
|
151
|
+
`)}
|
|
152
|
+
],
|
|
153
|
+
},
|
|
154
|
+
]);`},{name:"prettier.config.mjs",lang:"javascript",code:()=>'export { default } from "ultracite/prettier";'},{name:"stylelint.config.mjs",lang:"javascript",code:()=>'export { default } from "ultracite/stylelint";'}],vscodeExtensionId:"dbaeumer.vscode-eslint"},{id:"oxlint",name:"Oxlint + Oxfmt",subtitle:"The fastest linter available",description:"The fastest linter available. Oxlint is part of the Oxc project, running 50-100x faster than ESLint with a focus on catching bugs and reducing false positives.",benefits:[{title:"50-100x faster",description:"Lint your entire codebase in milliseconds. No more waiting for slow linting processes.",icon:"Zap"},{title:"15 plugin equivalents",description:"Built-in support for React, TypeScript, Next.js, Vue, Jest, Vitest, JSDoc, and more without extra deps.",icon:"Puzzle"},{title:"Bug-focused rules",description:"Prioritizes catching real bugs over stylistic issues. High signal-to-noise ratio.",icon:"Bug"},{title:"Oxc ecosystem",description:"Part of the larger Oxc project with parser, resolver, transformer, and minifier built for speed.",icon:"Boxes"},{title:"Category-based config",description:"Rules organized into correctness, suspicious, pedantic, performance, restriction, and style categories.",icon:"FolderTree"},{title:"Drop-in ready",description:"Works alongside your existing ESLint setup or as a complete replacement with Oxfmt for formatting.",icon:"RefreshCw"}],includes:["Oxlint","Oxfmt"],logo:kt,configFiles:[{name:".oxlintrc.json",lang:"json",code:t=>`{
|
|
155
|
+
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
|
156
|
+
"extends": [
|
|
157
|
+
${t.map(e=>`"ultracite/oxlint/${e}"`).join(`,
|
|
158
|
+
`)}
|
|
159
|
+
]
|
|
160
|
+
}`},{name:".oxfmtrc.jsonc",lang:"json",code:()=>`{
|
|
161
|
+
"$schema": "./node_modules/oxfmt/configuration_schema.json",
|
|
162
|
+
"tabWidth": 2,
|
|
163
|
+
"useTabs": false,
|
|
164
|
+
"semi": true,
|
|
165
|
+
"singleQuote": true,
|
|
166
|
+
"trailingComma": "es5",
|
|
167
|
+
"bracketSpacing": true,
|
|
168
|
+
"arrowParens": "always",
|
|
169
|
+
"proseWrap": "never",
|
|
170
|
+
"printWidth": 80,
|
|
171
|
+
}`}],vscodeExtensionId:"oxc.oxc-vscode"}];var e2=["react","next","solid","vue","svelte","qwik","remix","angular","astro"],i2=["husky","lefthook","lint-staged","pre-commit"],o2=["eslint","prettier"],v={linters:s1.map(t=>t.id),editorConfigs:x.map(t=>t.id),agents:_.map(t=>t.id),integrations:i2,hooks:x.filter(t=>t.hooks).map(t=>t.id),frameworks:e2,migrations:o2};import{initTRPC as pi}from"@trpc/server";import{packageManagers as gi}from"nypm";import{createCli as ui}from"trpc-cli";import d from"zod";var y={name:"ultracite",description:"The AI-ready formatter that helps you write and generate code faster.",version:"7.0.2",type:"module",bin:{ultracite:"dist/index.js"},files:["config","dist","README.md"],scripts:{build:"tsup",test:"bun test","test:coverage":"bun test --coverage"},exports:{"./biome/*":"./config/biome/*/biome.jsonc","./eslint/*":"./config/eslint/*/eslint.config.mjs","./oxlint/*":"./config/oxlint/*/.oxlintrc.json","./prettier":"./config/prettier/prettier.config.mjs","./stylelint":"./config/stylelint/stylelint.config.mjs","./*":"./config/*/biome.jsonc"},author:"Hayden Bleasel <hello@haydenbleasel.com>",bugs:{url:"https://github.com/haydenbleasel/ultracite/issues"},homepage:"https://www.ultracite.ai/",keywords:["ultracite","biome","linter","formatter","fixer"],license:"MIT",publishConfig:{access:"public",registry:"https://registry.npmjs.org/"},repository:{type:"git",url:"git+https://github.com/haydenbleasel/ultracite.git"},devDependencies:{"@biomejs/biome":"2.3.10","@eslint/js":"^9.39.2","@next/eslint-plugin-next":"^16.1.1","@repo/data":"workspace:*","@tanstack/eslint-plugin-query":"^5.91.2","@types/node":"^25.0.3","@typescript-eslint/eslint-plugin":"^8.51.0","@typescript-eslint/parser":"^8.51.0","eslint-config-prettier":"^10.1.8","eslint-import-resolver-typescript":"^4.4.4","eslint-plugin-angular":"^5.0.0","eslint-plugin-astro":"^1.5.0","eslint-plugin-compat":"^6.0.2","eslint-plugin-cypress":"^5.2.0","eslint-plugin-github":"6.0.0","eslint-plugin-html":"^8.1.3","eslint-plugin-import":"^2.32.0","eslint-plugin-jest":"^29.12.0","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-n":"^17.23.1","eslint-plugin-prettier":"^5.5.4","eslint-plugin-promise":"^7.2.1","eslint-plugin-qwik":"^1.18.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-remix":"^1.1.1","eslint-plugin-solid":"^0.14.5","eslint-plugin-sonarjs":"^3.0.5","eslint-plugin-storybook":"^10.1.11","eslint-plugin-svelte":"^3.13.1","eslint-plugin-tailwindcss":"^3.18.2","eslint-plugin-unicorn":"^62.0.0","eslint-plugin-unused-imports":"^4.3.0","eslint-plugin-vue":"^10.6.2",globals:"^16.5.0","prettier-plugin-tailwindcss":"^0.7.2","stylelint-config-idiomatic-order":"^10.0.0","stylelint-config-standard":"^39.0.1","stylelint-prettier":"^5.0.3",tsup:"^8.5.1"},dependencies:{"@clack/prompts":"^0.11.0","@trpc/server":"^11.8.1",deepmerge:"^4.3.1",glob:"^13.0.0","jsonc-parser":"^3.3.1",nypm:"^0.6.2",oxlint:"^1.36.0","trpc-cli":"^0.12.1",zod:"^4.3.2"},packageManager:"bun@1.3.5"};f();import{spawnSync as L}from"child_process";import R from"process";import{detectPackageManager as D,dlxCommand as N}from"nypm";var u2=async(t,e)=>{let i=["check","--no-errors-on-unmatched"];e&&i.push(`--diagnostic-level=${e}`),t.length>0?i.push(...u(t)):i.push("./");let n=(await D(R.cwd()))?.name||"npm",s=N(n,"@biomejs/biome",{args:i,short:n==="npm"}),r=L(s,{stdio:"inherit",shell:!0});if(r.error)throw new Error(`Failed to run Biome: ${r.error.message}`);return{hasErrors:r.status!==0}},h2=async t=>{let e=t.length>0?u(t):["."],o=(await D(R.cwd()))?.name||"npm",n=N(o,"eslint",{args:e,short:o==="npm"}),s=L(n,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run ESLint: ${s.error.message}`);return{hasErrors:s.status!==0}},w2=async t=>{let e=["--check",...t.length>0?u(t):["."]],o=(await D(R.cwd()))?.name||"npm",n=N(o,"prettier",{args:e,short:o==="npm"}),s=L(n,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Prettier: ${s.error.message}`);return{hasErrors:s.status!==0}},x2=async t=>{let e=t.length>0?u(t):["."],o=(await D(R.cwd()))?.name||"npm",n=N(o,"stylelint",{args:e,short:o==="npm"}),s=L(n,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Stylelint: ${s.error.message}`);return{hasErrors:s.status!==0}},v2=async t=>{let e=t.length>0?u(t):["."],o=(await D(R.cwd()))?.name||"npm",n=N(o,"oxlint",{args:e,short:o==="npm"}),s=L(n,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Oxlint: ${s.error.message}`);return{hasErrors:s.status!==0}},y2=async t=>{let e=["--check",...t.length>0?u(t):["."]],o=(await D(R.cwd()))?.name||"npm",n=N(o,"oxfmt",{args:e,short:o==="npm"}),s=L(n,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run oxfmt: ${s.error.message}`);return{hasErrors:s.status!==0}},St=async t=>{let e=t?.[0]||[],i=t?.[1]["diagnostic-level"],n=t?.[1].linter||await r1();if(!n)throw new Error("No linter configuration found. Run `ultracite init` to set up a linter.");switch(n){case"eslint":{let s=await w2(e),r=await h2(e),a=await x2(e);return{hasErrors:s.hasErrors||r.hasErrors||a.hasErrors}}case"oxlint":{let s=await y2(e),r=await v2(e);return{hasErrors:s.hasErrors||r.hasErrors}}default:return u2(e,i)}};import{spawnSync as j1}from"child_process";import{existsSync as A}from"fs";import{readFile as c1}from"fs/promises";import{join as O}from"path";import w from"process";import{intro as k2,log as a1,outro as S1,spinner as b2}from"@clack/prompts";import{parse as jt}from"jsonc-parser";import{detectPackageManager as l1,dlxCommand as d1}from"nypm";var z2=[".prettierrc",".prettierrc.js",".prettierrc.cjs",".prettierrc.mjs",".prettierrc.json",".prettierrc.yaml",".prettierrc.yml","prettier.config.js","prettier.config.mjs","prettier.config.cjs"],C2=[".eslintrc",".eslintrc.js",".eslintrc.cjs",".eslintrc.mjs",".eslintrc.json",".eslintrc.yaml",".eslintrc.yml","eslint.config.js","eslint.config.mjs","eslint.config.cjs","eslint.config.ts","eslint.config.mts","eslint.config.cts"],S2=async()=>{let e=(await l1(w.cwd()))?.name||"npm",i=d1(e,"@biomejs/biome",{args:["--version"],short:e==="npm"}),o=j1(i,{shell:!0,encoding:"utf-8"});return o.status===0&&o.stdout?{name:"Biome installation",status:"pass",message:`Biome is installed (${o.stdout.trim()})`}:{name:"Biome installation",status:"fail",message:"Biome is not installed or not accessible"}},j2=async()=>{let e=(await l1(w.cwd()))?.name||"npm",i=d1(e,"eslint",{args:["--version"],short:e==="npm"}),o=j1(i,{shell:!0,encoding:"utf-8"});return o.status===0&&o.stdout?{name:"ESLint installation",status:"pass",message:`ESLint is installed (${o.stdout.trim()})`}:{name:"ESLint installation",status:"warn",message:"ESLint is not installed (optional)"}},P2=async()=>{let e=(await l1(w.cwd()))?.name||"npm",i=d1(e,"oxlint",{args:["--version"],short:e==="npm"}),o=j1(i,{shell:!0,encoding:"utf-8"});return o.status===0&&o.stdout?{name:"Oxlint installation",status:"pass",message:`Oxlint is installed (${o.stdout.trim()})`}:{name:"Oxlint installation",status:"warn",message:"Oxlint is not installed (optional)"}},E2=async()=>{let t=O(w.cwd(),"biome.json"),e=O(w.cwd(),"biome.jsonc"),i=null;if(A(t)?i=t:A(e)&&(i=e),!i)return{name:"Biome configuration",status:"warn",message:"No biome.json or biome.jsonc file found"};try{let o=await c1(i,"utf-8"),n=jt(o);return Array.isArray(n?.extends)&&n.extends.includes("ultracite/biome/core")?{name:"Biome configuration",status:"pass",message:"biome.json(c) extends ultracite/biome/core"}:{name:"Biome configuration",status:"warn",message:"biome.json(c) exists but doesn't extend ultracite/biome/core"}}catch{return{name:"Biome configuration",status:"fail",message:"Could not parse biome.json(c) file"}}},A2=async()=>{let t=["eslint.config.mjs","eslint.config.js","eslint.config.cjs","eslint.config.ts","eslint.config.mts","eslint.config.cts"],e=null;for(let i of t){let o=O(w.cwd(),i);if(A(o)){e=o;break}}if(!e)return{name:"ESLint configuration",status:"warn",message:"No eslint.config.* file found (optional)"};try{return(await c1(e,"utf-8")).includes("ultracite/eslint")?{name:"ESLint configuration",status:"pass",message:"eslint.config.* imports ultracite/eslint"}:{name:"ESLint configuration",status:"warn",message:"eslint.config.* exists but doesn't import ultracite/eslint"}}catch{return{name:"ESLint configuration",status:"fail",message:"Could not read eslint.config.* file"}}},O2=async()=>{let t=O(w.cwd(),".oxlintrc.json");if(!A(t))return{name:"Oxlint configuration",status:"warn",message:"No .oxlintrc.json file found (optional)"};try{let e=await c1(t,"utf-8"),i=jt(e);return Array.isArray(i?.extends)&&i.extends.includes("ultracite/oxlint/core")?{name:"Oxlint configuration",status:"pass",message:".oxlintrc.json extends ultracite/oxlint/core"}:{name:"Oxlint configuration",status:"warn",message:".oxlintrc.json exists but doesn't extend ultracite/oxlint/core"}}catch{return{name:"Oxlint configuration",status:"fail",message:"Could not parse .oxlintrc.json file"}}},B2=async()=>{let t=O(w.cwd(),"package.json");if(!A(t))return{name:"Ultracite dependency",status:"warn",message:"No package.json found"};try{let e=JSON.parse(await c1(t,"utf-8")),i=e.dependencies?.ultracite||e.devDependencies?.ultracite||e.peerDependencies?.ultracite;return i?{name:"Ultracite dependency",status:"pass",message:`Ultracite is in package.json (${i})`}:{name:"Ultracite dependency",status:"warn",message:"Ultracite not found in package.json dependencies"}}catch{return{name:"Ultracite dependency",status:"warn",message:"Could not parse package.json"}}},I2=()=>{let t=z2.some(o=>A(O(w.cwd(),o))),i=C2.filter(o=>!o.startsWith("eslint.config")).some(o=>A(O(w.cwd(),o)));if(t||i){let o=[];return t&&o.push("Prettier"),i&&o.push("ESLint (legacy config)"),{name:"Conflicting tools",status:"warn",message:`Found potentially conflicting tools: ${o.join(", ")}`}}return{name:"Conflicting tools",status:"pass",message:"No conflicting formatting/linting tools found"}},C=async(t,e)=>{let i=b2();i.start(`Checking ${e}...`);let o=await t();return o.status==="pass"||o.status,i.stop(o.message),o},Pt=async()=>{k2(`Ultracite v${y.version} Doctor`);let e=(await l1(w.cwd()))?.name||"npm",i=d1(e,"ultracite",{args:["init"],short:e==="npm"}),o=[];o.push(await C(S2,"Biome installation")),o.push(await C(j2,"ESLint installation")),o.push(await C(P2,"Oxlint installation")),o.push(await C(E2,"Biome configuration")),o.push(await C(A2,"ESLint configuration")),o.push(await C(O2,"Oxlint configuration")),o.push(await C(B2,"Ultracite dependency")),o.push(await C(I2,"conflicting tools"));let n=o.filter(a=>a.status==="pass").length,s=o.filter(a=>a.status==="fail").length,r=o.filter(a=>a.status==="warn").length;if(a1.info(`Summary: ${n} passed, ${r} warnings, ${s} failed`),s>0)throw a1.error(`Some checks failed. Run '${i}' to fix issues.`),S1("Doctor complete"),new Error("Doctor checks failed");if(r>0){a1.warn(`Some optional improvements available. Run '${i}' to configure.`),S1("Doctor complete");return}a1.success("Everything looks good!"),S1("Doctor complete")};f();import{spawnSync as T}from"child_process";import G from"process";import{detectPackageManager as M,dlxCommand as J}from"nypm";var F2=async(t,e)=>{let i=["check","--write","--no-errors-on-unmatched"];e&&i.push("--unsafe"),t.length>0?i.push(...u(t)):i.push("./");let n=(await M(G.cwd()))?.name||"npm",s=J(n,"@biomejs/biome",{args:i,short:n==="npm"}),r=T(s,{stdio:"inherit",shell:!0});if(r.error)throw new Error(`Failed to run Biome: ${r.error.message}`);return{hasErrors:r.status!==0}},$2=async t=>{let e=["--fix",...t.length>0?u(t):["."]],o=(await M(G.cwd()))?.name||"npm",n=J(o,"eslint",{args:e,short:o==="npm"}),s=T(n,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run ESLint: ${s.error.message}`);return{hasErrors:s.status!==0}},_2=async t=>{let e=["--write",...t.length>0?u(t):["."]],o=(await M(G.cwd()))?.name||"npm",n=J(o,"prettier",{args:e,short:o==="npm"}),s=T(n,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Prettier: ${s.error.message}`);return{hasErrors:s.status!==0}},U2=async t=>{let e=["--fix",...t.length>0?u(t):["."]],o=(await M(G.cwd()))?.name||"npm",n=J(o,"stylelint",{args:e,short:o==="npm"}),s=T(n,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Stylelint: ${s.error.message}`);return{hasErrors:s.status!==0}},L2=async t=>{let e=["--fix",...t.length>0?u(t):["."]],o=(await M(G.cwd()))?.name||"npm",n=J(o,"oxlint",{args:e,short:o==="npm"}),s=T(n,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run Oxlint: ${s.error.message}`);return{hasErrors:s.status!==0}},R2=async t=>{let e=["--write",...t.length>0?u(t):["."]],o=(await M(G.cwd()))?.name||"npm",n=J(o,"oxfmt",{args:e,short:o==="npm"}),s=T(n,{stdio:"inherit",shell:!0});if(s.error)throw new Error(`Failed to run oxfmt: ${s.error.message}`);return{hasErrors:s.status!==0}},Et=async(t,e={})=>{let i=e.linter||await r1();if(!i)throw new Error("No linter configuration found. Run `ultracite init` to set up a linter.");switch(i){case"eslint":{let o=await _2(t),n=await $2(t),s=await U2(t);return{hasErrors:o.hasErrors||n.hasErrors||s.hasErrors}}case"oxlint":{let o=await R2(t),n=await L2(t);return{hasErrors:o.hasErrors||n.hasErrors}}default:return F2(t,e.unsafe)}};import V3 from"process";import{cancel as V,intro as X3,isCancel as X,log as k1,multiselect as q,select as Q3,spinner as p}from"@clack/prompts";import{addDevDependency as K3,detectPackageManager as Y3}from"nypm";import{readFile as D2,writeFile as P1}from"fs/promises";var At=t=>`# Ultracite Code Standards
|
|
172
|
+
|
|
173
|
+
This project uses **Ultracite**, a zero-config Biome preset that enforces strict code quality standards through automated formatting and linting.
|
|
174
|
+
|
|
175
|
+
## Quick Reference
|
|
176
|
+
|
|
177
|
+
- **Format code**: \`${t} ultracite fix\`
|
|
178
|
+
- **Check for issues**: \`${t} ultracite check\`
|
|
179
|
+
- **Diagnose setup**: \`${t} ultracite doctor\`
|
|
180
|
+
|
|
181
|
+
Biome (the underlying engine) provides extremely fast Rust-based linting and formatting. Most issues are automatically fixable.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Core Principles
|
|
186
|
+
|
|
187
|
+
Write code that is **accessible, performant, type-safe, and maintainable**. Focus on clarity and explicit intent over brevity.
|
|
188
|
+
|
|
189
|
+
### Type Safety & Explicitness
|
|
190
|
+
|
|
191
|
+
- Use explicit types for function parameters and return values when they enhance clarity
|
|
192
|
+
- Prefer \`unknown\` over \`any\` when the type is genuinely unknown
|
|
193
|
+
- Use const assertions (\`as const\`) for immutable values and literal types
|
|
194
|
+
- Leverage TypeScript's type narrowing instead of type assertions
|
|
195
|
+
- Use meaningful variable names instead of magic numbers - extract constants with descriptive names
|
|
196
|
+
|
|
197
|
+
### Modern JavaScript/TypeScript
|
|
198
|
+
|
|
199
|
+
- Use arrow functions for callbacks and short functions
|
|
200
|
+
- Prefer \`for...of\` loops over \`.forEach()\` and indexed \`for\` loops
|
|
201
|
+
- Use optional chaining (\`?.\`) and nullish coalescing (\`??\`) for safer property access
|
|
202
|
+
- Prefer template literals over string concatenation
|
|
203
|
+
- Use destructuring for object and array assignments
|
|
204
|
+
- Use \`const\` by default, \`let\` only when reassignment is needed, never \`var\`
|
|
205
|
+
|
|
206
|
+
### Async & Promises
|
|
207
|
+
|
|
208
|
+
- Always \`await\` promises in async functions - don't forget to use the return value
|
|
209
|
+
- Use \`async/await\` syntax instead of promise chains for better readability
|
|
210
|
+
- Handle errors appropriately in async code with try-catch blocks
|
|
211
|
+
- Don't use async functions as Promise executors
|
|
212
|
+
|
|
213
|
+
### React & JSX
|
|
214
|
+
|
|
215
|
+
- Use function components over class components
|
|
216
|
+
- Call hooks at the top level only, never conditionally
|
|
217
|
+
- Specify all dependencies in hook dependency arrays correctly
|
|
218
|
+
- Use the \`key\` prop for elements in iterables (prefer unique IDs over array indices)
|
|
219
|
+
- Nest children between opening and closing tags instead of passing as props
|
|
220
|
+
- Don't define components inside other components
|
|
221
|
+
- Use semantic HTML and ARIA attributes for accessibility:
|
|
222
|
+
- Provide meaningful alt text for images
|
|
223
|
+
- Use proper heading hierarchy
|
|
224
|
+
- Add labels for form inputs
|
|
225
|
+
- Include keyboard event handlers alongside mouse events
|
|
226
|
+
- Use semantic elements (\`<button>\`, \`<nav>\`, etc.) instead of divs with roles
|
|
227
|
+
|
|
228
|
+
### Error Handling & Debugging
|
|
229
|
+
|
|
230
|
+
- Remove \`console.log\`, \`debugger\`, and \`alert\` statements from production code
|
|
231
|
+
- Throw \`Error\` objects with descriptive messages, not strings or other values
|
|
232
|
+
- Use \`try-catch\` blocks meaningfully - don't catch errors just to rethrow them
|
|
233
|
+
- Prefer early returns over nested conditionals for error cases
|
|
234
|
+
|
|
235
|
+
### Code Organization
|
|
236
|
+
|
|
237
|
+
- Keep functions focused and under reasonable cognitive complexity limits
|
|
238
|
+
- Extract complex conditions into well-named boolean variables
|
|
239
|
+
- Use early returns to reduce nesting
|
|
240
|
+
- Prefer simple conditionals over nested ternary operators
|
|
241
|
+
- Group related code together and separate concerns
|
|
242
|
+
|
|
243
|
+
### Security
|
|
244
|
+
|
|
245
|
+
- Add \`rel="noopener"\` when using \`target="_blank"\` on links
|
|
246
|
+
- Avoid \`dangerouslySetInnerHTML\` unless absolutely necessary
|
|
247
|
+
- Don't use \`eval()\` or assign directly to \`document.cookie\`
|
|
248
|
+
- Validate and sanitize user input
|
|
249
|
+
|
|
250
|
+
### Performance
|
|
251
|
+
|
|
252
|
+
- Avoid spread syntax in accumulators within loops
|
|
253
|
+
- Use top-level regex literals instead of creating them in loops
|
|
254
|
+
- Prefer specific imports over namespace imports
|
|
255
|
+
- Avoid barrel files (index files that re-export everything)
|
|
256
|
+
- Use proper image components (e.g., Next.js \`<Image>\`) over \`<img>\` tags
|
|
257
|
+
|
|
258
|
+
### Framework-Specific Guidance
|
|
259
|
+
|
|
260
|
+
**Next.js:**
|
|
261
|
+
- Use Next.js \`<Image>\` component for images
|
|
262
|
+
- Use \`next/head\` or App Router metadata API for head elements
|
|
263
|
+
- Use Server Components for async data fetching instead of async Client Components
|
|
264
|
+
|
|
265
|
+
**React 19+:**
|
|
266
|
+
- Use ref as a prop instead of \`React.forwardRef\`
|
|
267
|
+
|
|
268
|
+
**Solid/Svelte/Vue/Qwik:**
|
|
269
|
+
- Use \`class\` and \`for\` attributes (not \`className\` or \`htmlFor\`)
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Testing
|
|
274
|
+
|
|
275
|
+
- Write assertions inside \`it()\` or \`test()\` blocks
|
|
276
|
+
- Avoid done callbacks in async tests - use async/await instead
|
|
277
|
+
- Don't use \`.only\` or \`.skip\` in committed code
|
|
278
|
+
- Keep test suites reasonably flat - avoid excessive \`describe\` nesting
|
|
279
|
+
|
|
280
|
+
## When Biome Can't Help
|
|
281
|
+
|
|
282
|
+
Biome's linter will catch most issues automatically. Focus your attention on:
|
|
283
|
+
|
|
284
|
+
1. **Business logic correctness** - Biome can't validate your algorithms
|
|
285
|
+
2. **Meaningful naming** - Use descriptive names for functions, variables, and types
|
|
286
|
+
3. **Architecture decisions** - Component structure, data flow, and API design
|
|
287
|
+
4. **Edge cases** - Handle boundary conditions and error states
|
|
288
|
+
5. **User experience** - Accessibility, performance, and usability considerations
|
|
289
|
+
6. **Documentation** - Add comments for complex logic, but prefer self-documenting code
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
Most formatting and common issues are automatically fixed by Biome. Run \`${t} ultracite fix\` before committing to ensure compliance.
|
|
294
|
+
`;f();import{dlxCommand as N2}from"nypm";var Ot=(t,e)=>{let i=_.find(r=>r.id===t);if(!i)throw new Error(`Agent "${t}" not found`);let o=N2(e,""),n=At(o),s=i.config.header?`${i.config.header}
|
|
132
295
|
|
|
133
|
-
${
|
|
296
|
+
${n}`:n;return{exists:()=>c(i.config.path),create:async()=>{await b(i.config.path),await P1(i.config.path,s)},update:async()=>{await b(i.config.path);let r=await c(i.config.path);if(!(i.config.appendMode&&r)){await P1(i.config.path,s);return}let a=await D2(i.config.path,"utf-8");a.includes(n.trim())||await P1(i.config.path,`${a}
|
|
134
297
|
|
|
135
|
-
${
|
|
298
|
+
${n}`)}}};import{spawnSync as T2}from"child_process";import{readFile as G2,writeFile as E1}from"fs/promises";f();import M2 from"deepmerge";import{parse as J2}from"jsonc-parser";var Bt=(t,e="biome")=>{let i=x.find(n=>n.id===t);if(!i)throw new Error(`Editor "${t}" not found`);let o=i.config.getContent(e);return{exists:()=>c(i.config.path),create:async()=>{await b(i.config.path),await E1(i.config.path,JSON.stringify(o,null,2))},update:async()=>{if(await b(i.config.path),!await c(i.config.path)){await E1(i.config.path,JSON.stringify(o,null,2));return}let s=await G2(i.config.path,"utf-8"),a=J2(s)||{},m=M2(a,o);await E1(i.config.path,JSON.stringify(m,null,2))},extension:i.config.extensionCommand?n=>T2(`${i.config.extensionCommand} ${n}`,{stdio:"pipe",shell:!0}):void 0}};import{readFile as W2,writeFile as A1}from"fs/promises";f();import H2 from"deepmerge";import{dlxCommand as V2}from"nypm";var It=(t,e)=>{let i=x.find(a=>a.id===t);if(!i)throw new Error(`Editor "${t}" not found`);if(!i.hooks)throw new Error(`Editor "${t}" does not support hooks`);let o=V2(e,"ultracite",{args:["fix"],short:e==="npm"}),n=i.hooks.getContent(o),s=a=>JSON.stringify(a).includes("ultracite"),r=async()=>{if(!i.hooks?.path)throw new Error(`Editor "${t}" does not support hooks`);if(!await c(i.hooks.path)){await A1(i.hooks.path,JSON.stringify(n,null,2));return}let m=await W2(i.hooks.path,"utf-8"),h=JSON.parse(m);if(!s(h)){let j=H2(h,n);await A1(i.hooks.path,JSON.stringify(j,null,2))}};return{exists:()=>i.hooks?.path?c(i.hooks.path):!1,create:async()=>{if(!i.hooks?.path)throw new Error(`Editor "${t}" does not support hooks`);await b(i.hooks.path),await A1(i.hooks.path,JSON.stringify(n,null,2))},update:async()=>{if(!i.hooks?.path)throw new Error(`Editor "${t}" does not support hooks`);await b(i.hooks.path),await r()}}};B1();I1();U1();$1();f();import{readFile as k3,writeFile as Jt}from"fs/promises";import b3 from"deepmerge";import{parse as z3}from"jsonc-parser";var Wt={$schema:"./node_modules/@biomejs/biome/configuration_schema.json",extends:["ultracite/biome/core"]},D1=async()=>await c("./biome.json")?"./biome.json":"./biome.jsonc",p1={exists:async()=>{let t=await D1();return c(t)},create:async t=>{let e=await D1(),i=["ultracite/biome/core"];if(t?.frameworks&&t.frameworks.length>0)for(let n of t.frameworks)i.push(`ultracite/biome/${n}`);let o={...Wt,extends:i};return Jt(e,JSON.stringify(o,null,2))},update:async t=>{let e=await D1(),i=await k3(e,"utf-8"),n=z3(i)||{},r=[...n.extends&&Array.isArray(n.extends)?n.extends:[]];if(r.includes("ultracite/biome/core")||r.push("ultracite/biome/core"),t?.frameworks&&t.frameworks.length>0)for(let h of t.frameworks){let j=`ultracite/biome/${h}`;r.includes(j)||r.push(j)}n.extends=r;let a={$schema:Wt.$schema},m=b3(n,a);await Jt(e,JSON.stringify(m,null,2))}};f();import{writeFile as Ht}from"fs/promises";var C3=["./eslint.config.mjs","./eslint.config.js","./eslint.config.cjs","./eslint.config.ts","./eslint.config.mts","./eslint.config.cts"],Vt="./eslint.config.mjs",S3=async()=>{for(let t of C3)if(await c(t))return t;return null},Xt=t=>{let e=['import core from "ultracite/eslint/core";'],i=["...core"];if(t?.frameworks&&t.frameworks.length>0)for(let o of t.frameworks)e.push(`import ${o} from "ultracite/eslint/${o}";`),i.push(`...${o}`);return`${e.join(`
|
|
136
299
|
`)}
|
|
137
300
|
|
|
138
301
|
export default [
|
|
139
|
-
${
|
|
302
|
+
${i.join(`,
|
|
140
303
|
`)},
|
|
141
304
|
];
|
|
142
|
-
`},
|
|
305
|
+
`},g1={exists:async()=>await S3()!==null,create:async t=>{let e=Xt(t);await Ht(Vt,e)},update:async t=>{let e=Xt(t);await Ht(Vt,e)}};f();import{readFile as j3,writeFile as Qt}from"fs/promises";import P3 from"deepmerge";import{parse as E3}from"jsonc-parser";var u1="./.oxfmtrc.jsonc",Kt={$schema:"./node_modules/oxfmt/configuration_schema.json",printWidth:80,tabWidth:2,useTabs:!1,semi:!0,singleQuote:!1,quoteProps:"as-needed",jsxSingleQuote:!1,trailingComma:"es5",bracketSpacing:!0,bracketSameLine:!1,arrowParens:"always",endOfLine:"lf",experimentalSortPackageJson:!0,experimentalSortImports:{ignoreCase:!0,newlinesBetween:!0,order:"asc"}},h1={exists:async()=>await c(u1),create:async()=>{let t=`// Ultracite oxfmt Configuration
|
|
143
306
|
// https://oxc.rs/docs/guide/usage/formatter/config-file-reference.html
|
|
144
|
-
${JSON.stringify(
|
|
145
|
-
`;return await
|
|
307
|
+
${JSON.stringify(Kt,null,2)}
|
|
308
|
+
`;return await Qt(u1,t)},update:async()=>{let t=await j3(u1,"utf-8"),i=E3(t)||{},o=P3(i,Kt),n=`// Ultracite oxfmt Configuration
|
|
146
309
|
// https://oxc.rs/docs/guide/usage/formatter/config-file-reference.html
|
|
147
|
-
${JSON.stringify(
|
|
148
|
-
`;await
|
|
149
|
-
`,
|
|
150
|
-
`,gt={exists:async()=>await mi()!==null,create:async()=>{let t=de();await ge(ue,t)},update:async()=>{let t=de();await ge(ue,t)}};import{readFile as pi,writeFile as he}from"fs/promises";import{glob as gi}from"glob";import{applyEdits as ui,modify as di,parse as hi}from"jsonc-parser";var we=async()=>{try{return await gi("**/tsconfig*.json",{ignore:["**/node_modules/**","**/dist/**","**/build/**","**/.next/**"],absolute:!1})}catch{return[]}},wi=t=>{if(!t)return!1;let e=t.compilerOptions;return e?e.strict===!0||e.strictNullChecks===!0:!1},yi=async t=>{try{let e=await pi(t,"utf-8"),n=hi(e);if(wi(n))return;if(n===void 0){await he(t,JSON.stringify({compilerOptions:{strictNullChecks:!0}},null,2));return}let o=di(e,["compilerOptions","strictNullChecks"],!0,{formattingOptions:{tabSize:2,insertSpaces:!0}}),s=ui(e,o);await he(t,s)}catch(e){console.warn(`Failed to update ${t}:`,e)}},Dt={exists:async()=>(await we()).length>0,update:async()=>{let t=await we();if(t.length===0){console.warn("No tsconfig.json files found in the project");return}await Promise.all(t.map(e=>yi(e)))}};m();var ye=y.devDependencies["@biomejs/biome"],Lt=y.version,$i=async(t,e="biome",n=!0,i=!1)=>{let o=g();i||o.start("Installing dependencies...");let s=[`ultracite@${Lt}`];if(e==="biome"&&s.push(`@biomejs/biome@${ye}`),e==="eslint"&&(s.push("eslint@latest"),s.push("prettier@latest"),s.push("stylelint@latest")),e==="oxlint"&&(s.push("oxlint@latest"),s.push("oxfmt@latest")),n)for(let r of s)await ji(r,{packageManager:t,workspace:await b(),silent:!0});else{let r={ultracite:Lt};e==="biome"&&(r["@biomejs/biome"]=ye),e==="eslint"&&(r.eslint="latest",r.prettier="latest",r.stylelint="latest"),e==="oxlint"&&(r.oxlint="latest",r.oxfmt="latest"),await x({devDependencies:r})}i||o.stop("Dependencies installed.")},Si=async(t=!1)=>{let e=g();if(t||e.start("Checking for tsconfig.json files..."),await Dt.exists()){t||e.message("Found tsconfig.json files, updating with strictNullChecks..."),await Dt.update(),t||e.stop("tsconfig.json files updated.");return}t||e.stop("No tsconfig.json files found, skipping.")},Oi=async(t,e="biome",n=!1)=>{let i=xe.find(r=>r.id===t);if(!i)throw new Error(`Editor "${t}" not found`);let o=Wt(t,e),s=g();if(n||s.start(`Checking for ${i.config.path}...`),await o.exists()){n||s.message(`${i.config.path} found, updating...`),await o.update(),n||s.stop(`${i.config.path} updated.`);return}if(n||s.message(`${i.config.path} not found, creating...`),await o.create(),o.extension){let r=Ei.find(a=>a.id===e)?.vscodeExtensionId;if(!r)throw new Error(`Linter extension not found for ${e}`);n||s.message(`Installing ${r} extension...`);try{if(o.extension(r).status===0){n||s.stop(`${i.config.path} created and ${r} extension installed.`);return}}catch{}n||s.stop(`${i.config.path} created. Install ${r} extension manually.`);return}n||(t==="zed"?s.stop(`${i.config.path} created. Install the Biome extension: https://biomejs.dev/reference/zed/`):s.stop(`${i.config.path} created.`))},vi=async(t,e=!1)=>{let n=g();if(e||n.start("Checking for Biome configuration..."),await rt.exists()){e||n.message("Biome configuration found, updating..."),await rt.update({frameworks:t}),e||n.stop("Biome configuration updated.");return}e||n.message("Biome configuration not found, creating..."),await rt.create({frameworks:t}),e||n.stop("Biome configuration created.")},Ni=async(t,e=!1)=>{let n=g();if(e||n.start("Checking for ESLint configuration..."),await at.exists()){e||n.message("ESLint configuration found, updating..."),await at.update({frameworks:t}),e||n.stop("ESLint configuration updated.");return}e||n.message("ESLint configuration not found, creating..."),await at.create({frameworks:t}),e||n.stop("ESLint configuration created.")},Fi=async(t,e=!1)=>{let n=g();if(e||n.start("Checking for Oxlint configuration..."),await mt.exists()){e||n.message("Oxlint configuration found, updating..."),await mt.update({frameworks:t}),e||n.stop("Oxlint configuration updated.");return}e||n.message("Oxlint configuration not found, creating..."),await mt.create({frameworks:t}),e||n.stop("Oxlint configuration created.")},Ri=async(t=!1)=>{let e=g();if(t||e.start("Checking for Prettier configuration..."),await pt.exists()){t||e.message("Prettier configuration found, updating..."),await pt.update(),t||e.stop("Prettier configuration updated.");return}t||e.message("Prettier configuration not found, creating..."),await pt.create(),t||e.stop("Prettier configuration created.")},Di=async(t=!1)=>{let e=g();if(t||e.start("Checking for Stylelint configuration..."),await gt.exists()){t||e.message("Stylelint configuration found, updating..."),await gt.update(),t||e.stop("Stylelint configuration updated.");return}t||e.message("Stylelint configuration not found, creating..."),await gt.create(),t||e.stop("Stylelint configuration created.")},Li=async(t=!1)=>{let e=g();if(t||e.start("Checking for oxfmt configuration..."),await lt.exists()){t||e.message("oxfmt configuration found, updating..."),await lt.update(),t||e.stop("oxfmt configuration updated.");return}t||e.message("oxfmt configuration not found, creating..."),await lt.create(),t||e.stop("oxfmt configuration created.")},Ai=async(t,e=!0,n=!1)=>{let i=g();if(n||(i.start("Initializing pre-commit hooks..."),i.message("Installing Husky...")),e?await v.install(t):await x({devDependencies:{husky:"latest"},scripts:{prepare:"husky"}}),n||i.message("Initializing Husky..."),v.init(t),await v.exists()){n||i.message("Pre-commit hook found, updating..."),await v.update(t),n||i.stop("Pre-commit hook updated.");return}n||i.message("Pre-commit hook not found, creating..."),await v.create(t),n||i.stop("Pre-commit hook created.")},Ji=async(t,e=!0,n=!1)=>{let i=g();if(n||(i.start("Initializing lefthook..."),i.message("Installing lefthook...")),e?await B.install(t):await x({devDependencies:{lefthook:"latest"}}),await B.exists()){n||i.message("lefthook.yml found, updating..."),await B.update(t),n||i.stop("lefthook.yml updated.");return}n||i.message("lefthook.yml not found, creating..."),await B.create(t),n||i.stop("lefthook.yml created.")},Ti=async(t,e=!0,n=!1)=>{let i=g();if(n||(i.start("Initializing lint-staged..."),i.message("Installing lint-staged...")),e?await W.install(t):await x({devDependencies:{"lint-staged":"latest"}}),await W.exists()){n||i.message("lint-staged found, updating..."),await W.update(t),n||i.stop("lint-staged updated.");return}n||i.message("lint-staged not found, creating..."),await W.create(t),n||i.stop("lint-staged created.")},Ii=async(t,e=!1)=>{let n=g();if(e||n.start("Initializing pre-commit..."),await Y.exists()){e||n.message(".pre-commit-config.yaml found, updating..."),await Y.update(t),e||n.stop(".pre-commit-config.yaml updated.");return}e||n.message(".pre-commit-config.yaml not found, creating..."),await Y.create(t),e||n.stop(".pre-commit-config.yaml created.")},Mi=async(t,e,n,i=!1)=>{let o=g();i||o.start(`Checking for ${e}...`);let s=Bt(t,n);if(await s.exists()){i||o.message(`${e} found, updating...`),await s.update(),i||o.stop(`${e} updated.`);return}i||o.message(`${e} not found, creating...`),await s.create(),i||o.stop(`${e} created.`)},_i=async(t,e,n,i=!1)=>{let o=g();i||o.start(`Checking for ${e} hooks...`);let s=Ut(t,n);if(await s.exists()){i||o.message(`${e} hooks found, updating...`),await s.update(),i||o.stop(`${e} hooks updated.`);return}i||o.message(`${e} hooks not found, creating...`),await s.create(),i||o.stop(`${e} hooks created.`)},ke=async t=>{let e=t??{},n=e.quiet??!1;n||ki(`Ultracite v${Lt} Initialization`);try{let{pm:i}=e;if(!i){let l=await Pi(xi.cwd());if(!l)throw new Error("No package manager specified or detected");if(!n&&l.warnings)for(let u of l.warnings)ut.warn(u);n||ut.info(`Detected lockfile, using ${l.name}`),i=l.name}let o=e.linter;if(o===void 0)if(n||e.pm||e.editors||e.agents||e.hooks||e.integrations!==void 0||e.frameworks!==void 0)o="biome";else{let u=await Ci({message:"Which linter do you want to use?",options:[{label:"Biome (Recommended)",value:"biome"},{label:"ESLint + Prettier + Stylelint",value:"eslint"},{label:"Oxlint + Oxfmt",value:"oxlint"}]});if(z(u)){U("Operation cancelled.");return}o=u}let s=e.frameworks;if(s===void 0)if(n||e.pm||e.editors||e.agents||e.hooks||e.integrations!==void 0)s=[];else{let u=await K({message:"Which frameworks are you using (optional)?",options:[{label:"React",value:"react"},{label:"Next.js",value:"next"},{label:"Solid",value:"solid"},{label:"Vue",value:"vue"},{label:"Svelte",value:"svelte"},{label:"Qwik",value:"qwik"},{label:"Angular",value:"angular"},{label:"Remix / TanStack Router / React Router",value:"remix"},{label:"Astro",value:"astro"}],required:!1});if(z(u)){U("Operation cancelled.");return}s=u}let r=e.editors;if(!r)if(n)r=[];else{let l=await K({message:"Which editors do you want to configure (recommended)?",options:[{label:"VSCode / Cursor / Windsurf",value:"vscode"},{label:"Zed",value:"zed"}],required:!1});if(z(l)){U("Operation cancelled.");return}r=l}let a=e.agents,p=e.hooks,h=Object.fromEntries(bi.map(l=>[l.id,l.name]));if(!a)if(n)a=[];else{let l=await K({message:"Which agents do you want to enable (optional)?",options:Object.entries(h).map(([u,dt])=>({value:u,label:dt})),required:!1});if(z(l)){U("Operation cancelled.");return}a=l}let P=Object.fromEntries(xe.filter(l=>l.hooks).map(l=>[l.id,l.name]));if(!p)if(n)p=[];else{let l=await K({message:"Which agent hooks do you want to enable (optional)?",options:Object.entries(P).map(([u,dt])=>({value:u,label:dt})),required:!1});if(z(l)){U("Operation cancelled.");return}p=l}let $=e.integrations;if($===void 0)if(n||e.pm||e.editors||e.agents||e.hooks)$=[];else{let u=await K({message:"Would you like any of the following (optional)?",options:[{label:"Husky pre-commit hook",value:"husky"},{label:"Lefthook pre-commit hook",value:"lefthook"},{label:"Lint-staged",value:"lint-staged"},{label:"pre-commit (Python framework)",value:"pre-commit"}],required:!1});if(z(u)){U("Operation cancelled.");return}$=u}await $i(i,o,!e.skipInstall,n),await Si(n),o==="biome"&&await vi(s,n),o==="eslint"&&(await Ni(s,n),await Ri(n),await Di(n)),o==="oxlint"&&(await Fi(s,n),await Li(n));for(let l of r??[])await Oi(l,o,n);for(let l of a??[])await Mi(l,h[l],i,n);for(let l of p??[])await _i(l,P[l],i,n);$?.includes("husky")&&await Ai(i,!e.skipInstall,n),$?.includes("lefthook")&&await Ji(i,!e.skipInstall,n),$?.includes("lint-staged")&&await Ti(i,!e.skipInstall,n),$?.includes("pre-commit")&&await Ii(i,n),n||ut.success("Successfully initialized Ultracite configuration!")}catch(i){let o=i instanceof Error?i.message:"Unknown error";throw n||ut.error(`Failed to initialize Ultracite configuration: ${o}`),i}};var V=Bi.meta().create(),zi=V.router({init:V.procedure.meta({description:"Initialize Ultracite in the current directory"}).input(f.object({pm:f.enum(Wi.map(t=>t.name)).optional().describe("Package manager to use"),linter:f.enum(C.linters).optional().describe("Linter / formatter to use"),editors:f.array(f.enum(C.editorConfigs)).optional().describe("Editors to configure"),agents:f.array(f.enum(C.agents)).optional().describe("Agents to enable"),hooks:f.array(f.enum(C.hooks)).optional().describe("Hooks to enable"),frameworks:f.array(f.enum(C.frameworks)).optional().describe("Frameworks being used"),integrations:f.array(f.enum(C.integrations)).optional().describe("Additional integrations to enable"),migrate:f.array(f.enum(C.migrations)).optional().describe("Migration tools to remove (e.g., eslint, prettier). Removes dependencies, config files, and editor settings."),skipInstall:f.boolean().default(!1).describe("Skip installing dependencies"),quiet:f.boolean().default(process.env.CI==="true"||process.env.CI==="1").describe("Suppress all interactive prompts and visual output. Automatically enabled in CI environments.")})).mutation(async({input:t})=>{await ke(t)}),check:V.procedure.meta({description:"Run linter without fixing files"}).input(f.tuple([f.array(f.string()).optional().default([]).describe("specific files to lint"),f.object({"diagnostic-level":f.enum(["info","warn","error"]).optional().describe("level of diagnostics to show. In order, from the lowest to the most important: info, warn, error."),linter:f.enum(C.linters).optional().describe("linter to use (biome, eslint, or oxlint)")})]).optional()).query(async({input:t})=>{await Tt(t)}),fix:V.procedure.meta({description:"Run linter and fix files"}).input(f.tuple([f.array(f.string()).optional().default([]).describe("specific files to format"),f.object({unsafe:f.boolean().optional().describe("apply unsafe fixes"),linter:f.enum(C.linters).optional().describe("linter to use (biome, eslint, or oxlint)")})]).optional()).mutation(async({input:t})=>{let[e,n]=t??[[],{}];await _t(e,{unsafe:n.unsafe,linter:n.linter})}),doctor:V.procedure.meta({description:"Verify your Ultracite setup and check for issues"}).query(async()=>{await Mt()})}),Hi=Ui({router:zi,name:y.name,version:y.version,description:y.description});process.env.TEST||Hi.run();export{zi as router};
|
|
310
|
+
${JSON.stringify(o,null,2)}
|
|
311
|
+
`;await Qt(u1,n)}};f();import{readFile as A3,writeFile as Yt}from"fs/promises";import O3 from"deepmerge";import{parse as B3}from"jsonc-parser";var w1="./.oxlintrc.json",Zt={$schema:"./node_modules/oxlint/configuration_schema.json",extends:["ultracite/oxlint/core"]},x1={exists:async()=>await c(w1),create:async t=>{let e=["ultracite/oxlint/core"];if(t?.frameworks&&t.frameworks.length>0)for(let o of t.frameworks)e.push(`ultracite/oxlint/${o}`);let i={...Zt,extends:e};return await Yt(w1,JSON.stringify(i,null,2))},update:async t=>{let e=await A3(w1,"utf-8"),o=B3(e)||{},s=[...o.extends&&Array.isArray(o.extends)?o.extends:[]];if(s.includes("ultracite/oxlint/core")||s.push("ultracite/oxlint/core"),t?.frameworks&&t.frameworks.length>0)for(let m of t.frameworks){let h=`ultracite/oxlint/${m}`;s.includes(h)||s.push(h)}o.extends=s;let r={$schema:Zt.$schema},a=O3(o,r);await Yt(w1,JSON.stringify(a,null,2))}};f();import{readFile as I3,writeFile as qt}from"fs/promises";var F3=["./.prettierrc.mjs","./prettier.config.mjs","./.prettierrc.mts","./prettier.config.mts","./.prettierrc.cjs","./prettier.config.cjs","./.prettierrc.cts","./prettier.config.cts","./.prettierrc.js","./prettier.config.js","./.prettierrc.ts","./prettier.config.ts","./.prettierrc","./.prettierrc.json","./.prettierrc.json5","./.prettierrc.yml","./.prettierrc.yaml","./.prettierrc.toml"],te="./prettier.config.mjs",$3=async()=>{try{return"prettier"in JSON.parse(await I3("./package.json","utf-8"))}catch{return!1}},_3=async()=>{if(await $3())return"./package.json";for(let t of F3)if(await c(t))return t;return null},ee=()=>`export { default } from "ultracite/prettier";
|
|
312
|
+
`,v1={exists:async()=>await _3()!==null,create:async()=>{let t=ee();await qt(te,t)},update:async()=>{let t=ee();await qt(te,t)}};f();import{readFile as U3,writeFile as ie}from"fs/promises";var L3=["./.stylelintrc.mjs","./stylelint.config.mjs","./.stylelintrc.cjs","./stylelint.config.cjs","./.stylelintrc.js","./stylelint.config.js","./.stylelintrc","./.stylelintrc.json","./.stylelintrc.yml","./.stylelintrc.yaml"],oe="./stylelint.config.mjs",R3=async()=>{try{return"stylelint"in JSON.parse(await U3("./package.json","utf-8"))}catch{return!1}},D3=async()=>{if(await R3())return"./package.json";for(let t of L3)if(await c(t))return t;return null},ne=()=>`export { default } from "ultracite/stylelint";
|
|
313
|
+
`,y1={exists:async()=>await D3()!==null,create:async()=>{let t=ne();await ie(oe,t)},update:async()=>{let t=ne();await ie(oe,t)}};import{readFile as N3,writeFile as se}from"fs/promises";import{glob as T3}from"glob";import{applyEdits as G3,modify as M3,parse as J3}from"jsonc-parser";var re=async()=>{try{return await T3("**/tsconfig*.json",{ignore:["**/node_modules/**","**/dist/**","**/build/**","**/.next/**"],absolute:!1})}catch{return[]}},W3=t=>{if(!t)return!1;let e=t.compilerOptions;return e?e.strict===!0||e.strictNullChecks===!0:!1},H3=async t=>{try{let e=await N3(t,"utf-8"),i=J3(e);if(W3(i))return;if(i===void 0){await se(t,JSON.stringify({compilerOptions:{strictNullChecks:!0}},null,2));return}let n=M3(e,["compilerOptions","strictNullChecks"],!0,{formattingOptions:{tabSize:2,insertSpaces:!0}}),s=G3(e,n);await se(t,s)}catch(e){console.warn(`Failed to update ${t}:`,e)}},N1={exists:async()=>(await re()).length>0,update:async()=>{let t=await re();if(t.length===0){console.warn("No tsconfig.json files found in the project");return}await Promise.all(t.map(e=>H3(e)))}};f();var ae=y.devDependencies["@biomejs/biome"],T1=y.version,Z3=async(t,e="biome",i=!0,o=!1)=>{let n=p();o||n.start("Installing dependencies...");let s=[`ultracite@${T1}`];if(e==="biome"&&s.push(`@biomejs/biome@${ae}`),e==="eslint"&&(s.push("eslint@latest"),s.push("prettier@latest"),s.push("stylelint@latest")),e==="oxlint"&&(s.push("oxlint@latest"),s.push("oxfmt@latest")),i)for(let r of s)await K3(r,{packageManager:t,workspace:await z(),silent:!0});else{let r={ultracite:T1};e==="biome"&&(r["@biomejs/biome"]=ae),e==="eslint"&&(r.eslint="latest",r.prettier="latest",r.stylelint="latest"),e==="oxlint"&&(r.oxlint="latest",r.oxfmt="latest"),await k({devDependencies:r})}o||n.stop("Dependencies installed.")},q3=async(t=!1)=>{let e=p();if(t||e.start("Checking for tsconfig.json files..."),await N1.exists()){t||e.message("Found tsconfig.json files, updating with strictNullChecks..."),await N1.update(),t||e.stop("tsconfig.json files updated.");return}t||e.stop("No tsconfig.json files found, skipping.")},ti=async(t,e="biome",i=!1)=>{let o=x.find(r=>r.id===t);if(!o)throw new Error(`Editor "${t}" not found`);let n=Bt(t,e),s=p();if(i||s.start(`Checking for ${o.config.path}...`),await n.exists()){i||s.message(`${o.config.path} found, updating...`),await n.update(),i||s.stop(`${o.config.path} updated.`);return}if(i||s.message(`${o.config.path} not found, creating...`),await n.create(),n.extension){let r=s1.find(a=>a.id===e)?.vscodeExtensionId;if(!r)throw new Error(`Linter extension not found for ${e}`);i||s.message(`Installing ${r} extension...`);try{if(n.extension(r).status===0){i||s.stop(`${o.config.path} created and ${r} extension installed.`);return}}catch{}i||s.stop(`${o.config.path} created. Install ${r} extension manually.`);return}i||(t==="zed"?s.stop(`${o.config.path} created. Install the Biome extension: https://biomejs.dev/reference/zed/`):s.stop(`${o.config.path} created.`))},ei=async(t,e=!1)=>{let i=p();if(e||i.start("Checking for Biome configuration..."),await p1.exists()){e||i.message("Biome configuration found, updating..."),await p1.update({frameworks:t}),e||i.stop("Biome configuration updated.");return}e||i.message("Biome configuration not found, creating..."),await p1.create({frameworks:t}),e||i.stop("Biome configuration created.")},ii=async(t,e=!1)=>{let i=p();if(e||i.start("Checking for ESLint configuration..."),await g1.exists()){e||i.message("ESLint configuration found, updating..."),await g1.update({frameworks:t}),e||i.stop("ESLint configuration updated.");return}e||i.message("ESLint configuration not found, creating..."),await g1.create({frameworks:t}),e||i.stop("ESLint configuration created.")},oi=async(t,e=!1)=>{let i=p();if(e||i.start("Checking for Oxlint configuration..."),await x1.exists()){e||i.message("Oxlint configuration found, updating..."),await x1.update({frameworks:t}),e||i.stop("Oxlint configuration updated.");return}e||i.message("Oxlint configuration not found, creating..."),await x1.create({frameworks:t}),e||i.stop("Oxlint configuration created.")},ni=async(t=!1)=>{let e=p();if(t||e.start("Checking for Prettier configuration..."),await v1.exists()){t||e.message("Prettier configuration found, updating..."),await v1.update(),t||e.stop("Prettier configuration updated.");return}t||e.message("Prettier configuration not found, creating..."),await v1.create(),t||e.stop("Prettier configuration created.")},si=async(t=!1)=>{let e=p();if(t||e.start("Checking for Stylelint configuration..."),await y1.exists()){t||e.message("Stylelint configuration found, updating..."),await y1.update(),t||e.stop("Stylelint configuration updated.");return}t||e.message("Stylelint configuration not found, creating..."),await y1.create(),t||e.stop("Stylelint configuration created.")},ri=async(t=!1)=>{let e=p();if(t||e.start("Checking for oxfmt configuration..."),await h1.exists()){t||e.message("oxfmt configuration found, updating..."),await h1.update(),t||e.stop("oxfmt configuration updated.");return}t||e.message("oxfmt configuration not found, creating..."),await h1.create(),t||e.stop("oxfmt configuration created.")},ai=async(t,e=!0,i=!1)=>{let o=p();if(i||(o.start("Initializing pre-commit hooks..."),o.message("Installing Husky...")),e?await B.install(t):await k({devDependencies:{husky:"latest"},scripts:{prepare:"husky"}}),i||o.message("Initializing Husky..."),B.init(t),await B.exists()){i||o.message("Pre-commit hook found, updating..."),await B.update(t),i||o.stop("Pre-commit hook updated.");return}i||o.message("Pre-commit hook not found, creating..."),await B.create(t),i||o.stop("Pre-commit hook created.")},ci=async(t,e=!0,i=!1)=>{let o=p();if(i||(o.start("Initializing lefthook..."),o.message("Installing lefthook...")),e?await W.install(t):await k({devDependencies:{lefthook:"latest"}}),await W.exists()){i||o.message("lefthook.yml found, updating..."),await W.update(t),i||o.stop("lefthook.yml updated.");return}i||o.message("lefthook.yml not found, creating..."),await W.create(t),i||o.stop("lefthook.yml created.")},li=async(t,e=!0,i=!1)=>{let o=p();if(i||(o.start("Initializing lint-staged..."),o.message("Installing lint-staged...")),e?await H.install(t):await k({devDependencies:{"lint-staged":"latest"}}),await H.exists()){i||o.message("lint-staged found, updating..."),await H.update(t),i||o.stop("lint-staged updated.");return}i||o.message("lint-staged not found, creating..."),await H.create(t),i||o.stop("lint-staged created.")},di=async(t,e=!1)=>{let i=p();if(e||i.start("Initializing pre-commit..."),await Y.exists()){e||i.message(".pre-commit-config.yaml found, updating..."),await Y.update(t),e||i.stop(".pre-commit-config.yaml updated.");return}e||i.message(".pre-commit-config.yaml not found, creating..."),await Y.create(t),e||i.stop(".pre-commit-config.yaml created.")},fi=async(t,e,i,o=!1)=>{let n=p();o||n.start(`Checking for ${e}...`);let s=Ot(t,i);if(await s.exists()){o||n.message(`${e} found, updating...`),await s.update(),o||n.stop(`${e} updated.`);return}o||n.message(`${e} not found, creating...`),await s.create(),o||n.stop(`${e} created.`)},mi=async(t,e,i,o=!1)=>{let n=p();o||n.start(`Checking for ${e} hooks...`);let s=It(t,i);if(await s.exists()){o||n.message(`${e} hooks found, updating...`),await s.update(),o||n.stop(`${e} hooks updated.`);return}o||n.message(`${e} hooks not found, creating...`),await s.create(),o||n.stop(`${e} hooks created.`)},ce=async t=>{let e=t??{},i=e.quiet??!1;i||X3(`Ultracite v${T1} Initialization`);try{let{pm:o}=e;if(!o){let l=await Y3(V3.cwd());if(!l)throw new Error("No package manager specified or detected");if(!i&&l.warnings)for(let g of l.warnings)k1.warn(g);i||k1.info(`Detected lockfile, using ${l.name}`),o=l.name}let n=e.linter;if(n===void 0)if(i||e.pm||e.editors||e.agents||e.hooks||e.integrations!==void 0||e.frameworks!==void 0)n="biome";else{let g=await Q3({message:"Which linter do you want to use?",options:[{label:"Biome (Recommended)",value:"biome"},{label:"ESLint + Prettier + Stylelint",value:"eslint"},{label:"Oxlint + Oxfmt",value:"oxlint"}]});if(X(g)){V("Operation cancelled.");return}n=g}let s=e.frameworks;if(s===void 0)if(i||e.pm||e.editors||e.agents||e.hooks||e.integrations!==void 0)s=[];else{let g=await q({message:"Which frameworks are you using (optional)?",options:[{label:"React",value:"react"},{label:"Next.js",value:"next"},{label:"Solid",value:"solid"},{label:"Vue",value:"vue"},{label:"Svelte",value:"svelte"},{label:"Qwik",value:"qwik"},{label:"Angular",value:"angular"},{label:"Remix / TanStack Router / React Router",value:"remix"},{label:"Astro",value:"astro"}],required:!1});if(X(g)){V("Operation cancelled.");return}s=g}let r=e.editors;if(!r)if(i)r=[];else{let l=await q({message:"Which editors do you want to configure (recommended)?",options:[{label:"VSCode / Cursor / Windsurf",value:"vscode"},{label:"Zed",value:"zed"}],required:!1});if(X(l)){V("Operation cancelled.");return}r=l}let a=e.agents,m=e.hooks,h=Object.fromEntries(_.map(l=>[l.id,l.name]));if(!a)if(i)a=[];else{let l=await q({message:"Which agents do you want to enable (optional)?",options:Object.entries(h).map(([g,b1])=>({value:g,label:b1})),required:!1});if(X(l)){V("Operation cancelled.");return}a=l}let j=Object.fromEntries(x.filter(l=>l.hooks).map(l=>[l.id,l.name]));if(!m)if(i)m=[];else{let l=await q({message:"Which agent hooks do you want to enable (optional)?",options:Object.entries(j).map(([g,b1])=>({value:g,label:b1})),required:!1});if(X(l)){V("Operation cancelled.");return}m=l}let P=e.integrations;if(P===void 0)if(i||e.pm||e.editors||e.agents||e.hooks)P=[];else{let g=await q({message:"Would you like any of the following (optional)?",options:[{label:"Husky pre-commit hook",value:"husky"},{label:"Lefthook pre-commit hook",value:"lefthook"},{label:"Lint-staged",value:"lint-staged"},{label:"pre-commit (Python framework)",value:"pre-commit"}],required:!1});if(X(g)){V("Operation cancelled.");return}P=g}await Z3(o,n,!e.skipInstall,i),await q3(i),n==="biome"&&await ei(s,i),n==="eslint"&&(await ii(s,i),await ni(i),await si(i)),n==="oxlint"&&(await oi(s,i),await ri(i));for(let l of r??[])await ti(l,n,i);for(let l of a??[])await fi(l,h[l],o,i);for(let l of m??[])await mi(l,j[l],o,i);P?.includes("husky")&&await ai(o,!e.skipInstall,i),P?.includes("lefthook")&&await ci(o,!e.skipInstall,i),P?.includes("lint-staged")&&await li(o,!e.skipInstall,i),P?.includes("pre-commit")&&await di(o,i),i||k1.success("Successfully initialized Ultracite configuration!")}catch(o){let n=o instanceof Error?o.message:"Unknown error";throw i||k1.error(`Failed to initialize Ultracite configuration: ${n}`),o}};var t1=pi.meta().create(),hi=t1.router({init:t1.procedure.meta({description:"Initialize Ultracite in the current directory"}).input(d.object({pm:d.enum(gi.map(t=>t.name)).optional().describe("Package manager to use"),linter:d.enum(v.linters).optional().describe("Linter / formatter to use"),editors:d.array(d.enum(v.editorConfigs)).optional().describe("Editors to configure"),agents:d.array(d.enum(v.agents)).optional().describe("Agents to enable"),hooks:d.array(d.enum(v.hooks)).optional().describe("Hooks to enable"),frameworks:d.array(d.enum(v.frameworks)).optional().describe("Frameworks being used"),integrations:d.array(d.enum(v.integrations)).optional().describe("Additional integrations to enable"),migrate:d.array(d.enum(v.migrations)).optional().describe("Migration tools to remove (e.g., eslint, prettier). Removes dependencies, config files, and editor settings."),skipInstall:d.boolean().default(!1).describe("Skip installing dependencies"),quiet:d.boolean().default(process.env.CI==="true"||process.env.CI==="1").describe("Suppress all interactive prompts and visual output. Automatically enabled in CI environments.")})).mutation(async({input:t})=>{await ce(t)}),check:t1.procedure.meta({description:"Run linter without fixing files"}).input(d.tuple([d.array(d.string()).optional().default([]).describe("specific files to lint"),d.object({"diagnostic-level":d.enum(["info","warn","error"]).optional().describe("level of diagnostics to show. In order, from the lowest to the most important: info, warn, error."),linter:d.enum(v.linters).optional().describe("linter to use (biome, eslint, or oxlint)")})]).optional()).query(async({input:t})=>{await St(t)}),fix:t1.procedure.meta({description:"Run linter and fix files"}).input(d.tuple([d.array(d.string()).optional().default([]).describe("specific files to format"),d.object({unsafe:d.boolean().optional().describe("apply unsafe fixes"),linter:d.enum(v.linters).optional().describe("linter to use (biome, eslint, or oxlint)")})]).optional()).mutation(async({input:t})=>{let[e,i]=t??[[],{}];await Et(e,{unsafe:i.unsafe,linter:i.linter})}),doctor:t1.procedure.meta({description:"Verify your Ultracite setup and check for issues"}).query(async()=>{await Pt()})}),wi=ui({router:hi,name:y.name,version:y.version,description:y.description});process.env.TEST||wi.run();export{hi as router};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#642cc2"/><path d="m69.3127 62.6326c-1.3186 0-2.3394 1.0634-2.3394 2.3394 0 1.3187-1.0634 2.3395-2.3395 2.3395s-2.4246-1.0208-2.4246-2.2969v-11.9952c.2978-.5955.4679-1.2336.4679-1.9567v-13.7391c0-8.167-6.6356-14.8026-14.76-14.8026s-14.8026 6.6356-14.8026 14.8026v13.7391c0 .9358.2978 1.8291.8082 2.5522v11.3997c0 1.3186-1.0634 2.3395-2.382 2.3395s-2.3395-1.0634-2.3395-2.3395-1.0634-2.3395-2.3395-2.3395c-1.3186 0-2.3395 1.0634-2.3395 2.3395 0 3.7432 2.935 6.7632 6.5931 7.0184.1702.0426.2978.0426.4679.0426.1702 0 .3403 0 .4679-.0426 3.6581-.2552 6.5931-3.2752 6.5931-7.0184v-9.443s-.1276-1.9992 1.5738-1.9992c1.7015 0 1.5739 1.9992 1.5739 1.9992v9.3579c0 1.3186 1.0634 2.3395 2.3395 2.3395 1.276 0 2.3395-1.0634 2.3395-2.3395v-9.3579s-.3403-1.9992 1.5738-1.9992 1.5738 1.9992 1.5738 1.9992v9.3579c0 1.3186 1.0634 2.3395 2.3395 2.3395 1.3186 0 2.3395-1.0634 2.3395-2.3395v-9.3579s-.1276-1.9992 1.5738-1.9992c1.7015 0 1.5739 1.9992 1.5739 1.9992v9.443c0 3.7432 2.935 6.7632 6.5931 7.0184.1701.0426.2977.0426.4679.0426.1701 0 .3403 0 .4679-.0426 3.7006-.2552 6.5931-3.2752 6.5931-7.0184.085-1.3186-.9784-2.382-2.2545-2.382zm-29.1372-13.3564c-1.3186 0-2.3395-1.3186-2.3395-2.935 0-1.6163 1.0634-2.935 2.3395-2.935s2.3395 1.3187 2.3395 2.935c.0425 1.6164-1.0209 2.935-2.3395 2.935zm15.7384 0c-1.3187 0-2.3395-1.3186-2.3395-2.935 0-1.6163 1.0634-2.935 2.3395-2.935s2.3395 1.3187 2.3395 2.935c.0425 1.6164-1.0209 2.935-2.3395 2.935z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#48e054"/><path d="m57.4639 38.6667h18.6666v3.1126c0 21.7794-9.338 34.2207-34.2206 34.2207h-3.1127v-18.6667h3.1127c10.885 0 15.554-4.669 15.554-15.554zm-18.7974 0h-18.6666v18.6666h18.6666zm18.6667-18.6667h-18.6667v18.6667h18.6667z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m20 20h56v56h-56z"/></clipPath><path d="m0 0h96v96h-96z" fill="#f0f0f0"/><g clip-path="url(#a)"><path d="m20 20v56h56v-56zm51.8519 51.8519h-47.7038v-47.7038h47.7038zm-17.6297-11.5825h5.1852v4.1481h-6.5185l-2.8148-2.8148v-6.5185h4.1481zm9.3334 0h-4.1482v-5.1852h-5.1852v-4.1482h6.5185l2.8149 2.8149zm-17.6297-6.047h-4.1481v-4.1482h4.1481zm-13.4815-4.1482h4.1482v9.3334h9.3333v4.1481h-10.6666l-2.8149-2.8148zm31.1112-8.2964v4.1481h-13.4815v-4.1481h4.6358v-5.1852h-4.6358v-4.1482h5.9691l2.8148 2.8149v6.5185zm-26.963-4.6667h5.1852l4.1481 4.1482v4.6666h-4.1481v-4.6666h-5.1852v4.6666h-4.1482v-13.4815h4.1482zm9.3333 0h-4.1481v-4.6667h4.1481z" fill="#231f20"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><mask id="a" height="57" maskUnits="userSpaceOnUse" width="47" x="24" y="20"><path d="m70.9987 20.026h-46.0601v56h46.0601z" fill="#fff"/></mask><path d="m0 0h96v96h-96z" fill="#9046ff"/><g mask="url(#a)"><path d="m33.8075 63.4223c-5.7924 12.8272 6.545 16.0468 15.6448 8.5396 2.6776 8.4172 12.705 2.1354 16.31-4.3924 7.9276-14.3847 4.725-29.0499 3.9025-32.0774-5.635-20.6324-33.8098-20.6675-38.6573.105-1.1375 3.64-1.155 7.77-1.785 12.0575-.315 2.17-.56 3.5525-1.3825 5.8273-.49 1.3128-1.1375 2.4676-2.1875 4.4275-1.61 3.0453-.9275 8.9077 7.4025 5.8628l.7875-.3499z" fill="#fff"/><g fill="#000"><path d="m50.5406 44.4358c-2.3099 0-2.6599-2.765-2.6599-4.41 0-1.4875.2625-2.6599.7702-3.4125.4374-.6649 1.0849-.9975 1.8897-.9975.8052 0 1.5051.3326 1.995 1.015.56.7701.8576 1.9425.8576 3.395 0 2.765-1.0672 4.41-2.8348 4.41z"/><path d="m60.0575 44.4358c-2.3099 0-2.6598-2.765-2.6598-4.41 0-1.4875.2624-2.6599.7701-3.4125.4374-.6649 1.0849-.9975 1.8897-.9975.8052 0 1.5051.3326 1.995 1.015.5601.7701.8576 1.9425.8576 3.395 0 2.765-1.0672 4.41-2.8348 4.41z"/></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m20 29h56v37.3333h-56z"/></clipPath><mask id="b" height="38" maskUnits="userSpaceOnUse" width="56" x="20" y="29"><path d="m76 29h-56v37.3333h56z" fill="#fff"/></mask><mask id="c" height="38" maskUnits="userSpaceOnUse" width="56" x="20" y="29"><path d="m76 29h-56v37.3333h56z" fill="#fff"/></mask><path d="m0 0h96v96h-96z" fill="#ffe165"/><g clip-path="url(#a)"><g mask="url(#b)"><g mask="url(#c)"><path d="m73.7941 40.1971c-1.7883-1.0708-2.9832.5704-2.8367 2.7987l-.0149.0169c.005-2.327-.3179-4.8971-1.391-6.9763-.38-.7363-1.1501-1.9468-2.6728-1.3764-.6682.2502-1.2743 1.0034-.9613 2.9478 0 0 .3478 2.0407.283 4.6059v.0361c-.4346-7.0749-2.0741-9.2334-4.419-9.0939-.7501.13-1.776.4452-1.4307 2.6206 0 0 .3751 2.2693.4968 4.0765l.0074.0915h-.0074c-1.1029-3.9008-2.5884-3.9538-3.664-3.8022-.9762.1372-2.0419 1.1238-1.5029 3.0682 1.6916 6.1003 1.3613 13.4471 1.2347 14.4987-.3454-.7194-.4522-1.2897-.9316-2.0791-1.9277-3.1693-2.8442-3.4026-3.9696-3.4508-1.1177-.0482-2.3249.6232-2.2455 1.9011.0821 1.2777.7503 1.4895 1.6991 3.2703.7403 1.3861.9514 3.2029 2.4419 6.5046 1.2344 2.7337 4.4613 5.7322 10.3384 5.376 4.7619-.1541 11.8738-1.776 10.6366-12.4269-.308-1.8505-.0769-3.4002.0846-4.9885.2508-2.4642.6185-6.5479-1.1726-7.6212z" fill="#ffe165"/><path d="m44.0604 48.2539c-1.1254.0697-2.0345.3176-3.9025 3.5206-.4644.7966-.5589 1.3691-.8916 2.0935-.1467-1.0491-.6162-8.3887.9586-14.5179.5019-1.9516-.5811-2.919-1.5599-3.0393-1.078-.1324-2.566-.053-3.5943 3.8864h-.0125l.0149-.1132c.087-1.8096.4198-4.0837.4198-4.0837.3006-2.1826-.7278-2.4786-1.4804-2.5965-2.34-.0962-3.9348 2.0719-4.2428 9.0843h-.0049c-.1068-2.5388.1987-4.5602.1987-4.5602.2757-1.9516-.3453-2.6928-1.0185-2.9311-1.5326-.5438-2.2803.6811-2.6455 1.4247-1.0333 2.0984-1.309 4.6733-1.2594 7.0003l-.0149-.0169c.1019-2.2307-1.1227-3.8503-2.8914-2.7481-1.7686 1.1045-1.324 5.181-1.0259 7.6404.1938 1.5859.4521 3.1308.1789 4.9861-1.0334 10.6701 6.1082 12.1645 10.8726 12.2343 5.8822.2527 9.0518-2.806 10.2341-5.5612 1.4259-3.3257 1.6048-5.1474 2.3177-6.5455.9141-1.7977 1.5798-2.0215 1.637-3.2993.0571-1.2779-1.1625-1.9276-2.2804-1.8601z" fill="#ffe165"/><g fill="#000"><path d="m46.415 48.2707c-.5962-.5655-1.4928-.8663-2.4044-.8134-1.4608.089-2.4966.6063-4.0888 3.1332-.0422-2.8901.1242-7.2289 1.1029-11.0455.3676-1.4343-.0025-2.3704-.38-2.9022-.4398-.6208-1.1229-1.0299-1.878-1.1214-.6881-.0842-1.5873-.089-2.4641.6088 0-.0096.0024-.0216.0024-.0216.2832-2.0503-.4471-3.2246-2.1685-3.4893l-.0944-.0097c-1.0607-.0457-1.9698.2912-2.7026.9987-.3925.3778-.7328.8663-1.0284 1.4703-.3304-.4692-.7552-.7075-1.0905-.8278-2.0493-.7291-3.182.8326-3.6739 1.8289-.5713 1.1599-.9265 2.4594-1.1253 3.7853-.0422-.0265-.0819-.0529-.1242-.077-.4521-.2527-1.3935-.5607-2.6156.2022-2.0717 1.2946-1.8084 5.015-1.3961 8.4031.0224.1806.0447.3587.0671.5391.1764 1.3886.3428 2.7.1143 4.2427l-.005.0384c-.4148 4.281.4173 7.5755 2.4741 9.7966 1.9773 2.1368 5.0749 3.2486 9.181 3.3088.3005.012.5936.0169.8793.0144 7.0149-.0626 9.5313-4.6228 10.1497-6.0666.7998-1.8675 1.2147-3.2606 1.5452-4.3821.2558-.8663.4594-1.5497.7476-2.1177.328-.6448.616-1.0637.8695-1.4341.4322-.6305.8048-1.1745.8495-2.1852.0322-.7314-.226-1.3811-.7502-1.8769zm-13.9105-13.5314c.3949-.3802.8495-.5486 1.4258-.5366.4993.0794.9514.1973.7452 1.6893-.0149.0939-.3378 2.3342-.4247 4.1583v.0361c-.4546 1.7808-.8347 4.346-1.0384 8.0953-.8818.0528-1.7611.1444-2.6157.2646-.2757-7.6067.3627-12.2198 1.9053-13.707zm-5.4674 2.0287c.6186-1.2514 1.1377-1.1888 1.6196-1.018.6682.2383.5639 1.5305.4869 2.0672-.0124.0866-.3105 2.1008-.2062 4.6636-.077 1.7976-.0671 3.8696.0248 6.24-.8172.1564-1.5922.3367-2.3002.5318-.3353-1.0926-1.8183-8.0328.3751-12.4822zm17.9049 14.6815c-.2683.3899-.6011.876-.9762 1.6124-.3552.6954-.5739 1.4413-.8544 2.3823-.3206 1.0806-.7204 2.4257-1.4831 4.209-.5415 1.2609-2.8169 5.3565-9.4617 5.0678-3.7036-.053-6.3218-.9625-8.0035-2.7795-1.7338-1.8722-2.4269-4.755-2.0617-8.5643.2533-1.7423.067-3.2176-.1143-4.6421-.0224-.1781-.0447-.3538-.0671-.5319-.1987-1.6435-.7303-6.0112.6533-6.8751.3726-.2334.6782-.2863.9042-.1612.385.2142.7725.9939.7179 2.2019-.0025.065.005.1275.0174.1901.0695 2.8155.5887 5.2653.8843 6.1845-.4844.1757-.9116.3585-1.2693.5414-.4024.207-.554.6884-.3404 1.0781.1491.272.4372.4261.7353.4236.1267 0 .2559-.0313.3776-.0939 2.0096-1.0324 6.7764-2.0815 10.9769-1.9684.4571.0072.8322-.3345.8446-.7749.0124-.4403-.3453-.8062-.7999-.8182-.2509-.0073-.5042-.0073-.7576-.0073.4198-7.5609 1.5749-10.0275 2.4741-10.7566.3726-.3008.7278-.3249 1.2197-.2648.1366.0169.4794.0939.7253.4404.2659.3778.3154.9361.1417 1.6147-1.5203 5.9222-1.1775 12.8865-1.0037 14.5758-.0298.0578-.0571.1155-.0894.1757-.3552.6472-1.0159 1.3211-1.8034 1.2754-.4496-.0217-.8446.3105-.8719.7484-.0273.4404.318.8181.7726.8445 1.3314.0772 2.5858-.7146 3.3558-2.1175.0821-.1493.1516-.2912.2137-.4284.005-.0097.0099-.0217.0149-.0312.1441-.313.2483-.5992.3403-.8568.144-.3994.2682-.7461.5166-1.1742 1.7638-3.0275 2.4792-3.0707 3.2368-3.1164.4445-.0265.8868.1106 1.1476.3609.1863.1756.2684.3947.2558.669-.0248.5655-.1863.8013-.5762 1.3693z"/><path d="m75.692 52.6793c-.2559-1.5377-.1143-2.8517.0348-4.2425.0198-.1806.0396-.3587.0572-.5391.3476-3.393.5415-7.1206-1.5576-8.3768-1.2371-.7411-2.1735-.4163-2.6207-.1564-.0421.0241-.0819.053-.1242.0794-.2261-1.3211-.6036-2.6133-1.1974-3.7636-.5091-.9867-1.6691-2.5292-3.706-1.7639-.333.1251-.7501.3706-1.0732.847-.308-.5992-.6583-1.0805-1.0581-1.451-.7453-.6931-1.6619-1.0156-2.72-.9506l-.0945.0096c-1.7163.296-2.4243 1.4824-2.1015 3.5327 0 0 0 .0096.0025.0168-.8892-.6834-1.7884-.6617-2.4741-.5655-.7526.1059-1.4282.527-1.8554 1.1551-.3654.539-.7204 1.4799-.3256 2.907 1.0534 3.7997 1.3018 8.1361 1.3141 11.0261-1.6394-2.4977-2.6853-2.9959-4.1459-3.0584-.9091-.0385-1.8059.2815-2.3895.8567-.5143.5054-.7602 1.1598-.7129 1.889.0645 1.0084.447 1.5474.8918 2.1682.2607.3657.5563.7796.8965 1.4173.3006.5632.5168 1.2417.7901 2.1032.3526 1.1143.7924 2.5004 1.6296 4.3534.6457 1.4318 3.2489 5.9486 10.244 5.8836.2832-.0023.5763-.012.8744-.0312 4.1284-.1324 7.2037-1.3019 9.1412-3.4726 2.0122-2.2572 2.7821-5.5659 2.2878-9.8398l-.005-.0385zm-8.965-15.1918c-.0869-.5438-.2185-1.8337.4472-2.0815.477-.1805.9985-.2503 1.6395.989 2.2779 4.411.9289 11.3776.6135 12.4749-.713-.1828-1.4905-.3489-2.3101-.4908.0448-2.3704.0149-4.4448-.0945-6.24.0547-2.5628-.2805-4.5722-.2956-4.6516zm-4.8562-3.535c.5789-.0241 1.0358.1371 1.4358.5125 1.5699 1.4607 2.2977 6.0594 2.1661 13.671-.8571-.1059-1.7364-.1805-2.6207-.219-.2732-3.7468-.7029-6.3025-1.1922-8.076 0-.012 0-.0241 0-.0361-.1219-1.8241-.4896-4.0572-.5044-4.1439-.236-1.4944.2137-1.6195.7129-1.7085zm12.1941 18.9626c.4372 3.8023-.2011 6.6971-1.8977 8.6005-1.6471 1.8458-4.2478 2.8037-7.9739 2.9239-6.6074.4043-8.9672-3.648-9.5311-4.8995-.8-1.771-1.2247-3.1066-1.5649-4.1823-.2981-.9386-.5316-1.6773-.8993-2.368-.3876-.7291-.7302-1.208-1.006-1.5931-.4-.5606-.5663-.7941-.6037-1.3596-.0173-.2743.0621-.4956.2435-.6737.2583-.2551.6956-.4019 1.1426-.3802.7577.0337 1.473.0625 3.2964 3.0585.2583.4236.3874.7676.5391 1.1647.0992.2575.2085.5438.3602.8543.0049.0095.0074.0192.0123.0265.0671.1371.1391.2767.2235.4259.7975 1.3886 2.0668 2.1586 3.3958 2.0575.452-.0337.7924-.4187.7575-.8568-.0347-.4379-.4297-.7628-.8842-.7339-.7874.0578-1.4608-.604-1.8284-1.2442-.0346-.06-.0621-.1154-.0918-.1731.1415-1.6893.3528-8.6608-1.2817-14.5541-.189-.6762-.1491-1.2345.1091-1.6172.241-.3513.5814-.4355.7179-.4548.4894-.0697.8471-.0505 1.2248.2431.9141.7147 2.1164 3.1596 2.6777 10.711-.2533.0024-.5066.0096-.7552.0217-.4545.0192-.8048.3922-.785.8326.02.4404.3976.7724.8597.7604 4.1954-.1876 8.9847.7748 11.0116 1.7735.1217.0602.2508.0867.38.0867.2981-.0023.5838-.1612.7278-.4379.2063-.3922.0447-.8736-.3627-1.0734-.3602-.1781-.7924-.3512-1.2792-.5198.2783-.924.7527-3.3834.7676-6.1989.0124-.0626.0173-.1251.0124-.1901-.0795-1.2056.2956-1.9925.6756-2.2139.2236-.13.5291-.0818.9067.1444 1.4011.8398.9539 5.2147.7849 6.8631-.0173.1781-.0371.3537-.0571.5318-.1539 1.4295-.313 2.9046-.0248 4.6444z"/><path d="m51.033 37.5284c-.1316 0-.2659-.024-.3926-.0818-.4643-.207-.6682-.7388-.4544-1.1888.6904-1.4607 1.7015-2.8083 2.9211-3.896.375-.3345.9613-.3128 1.3067.053.3453.3633.3228.9312-.0547 1.2657-1.0408.9289-1.9029 2.0792-2.4939 3.3257-.1541.3249-.4844.5198-.8322.5222z"/><path d="m47.9181 37.011c-.4794.0048-.8893-.3513-.9291-.823-.1764-2.1104-.1838-4.2497-.0174-6.3602.0397-.4933.4844-.8615.9911-.8254.5093.0385.8893.4669.852.9602-.1589 2.0166-.1514 4.0621.0175 6.0787.0421.4933-.3379.9264-.847.9649-.0225 0-.0448.0024-.0671.0024z"/><path d="m44.7335 37.5669c-.4149.0048-.7973-.2671-.9042-.6738-.3926-1.492-1.1352-2.9094-2.1463-4.0957-.3253-.3827-.2682-.9458.1242-1.261.395-.3153.9764-.2599 1.3017.1203 1.1825 1.3909 2.0518 3.049 2.509 4.7936.1266.4789-.1739.9674-.6684 1.0901-.0745.0193-.1465.0265-.221.0289z"/></g></g></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m28 23h40v50h-40z"/></clipPath><mask id="b" height="50" maskUnits="userSpaceOnUse" width="40" x="28" y="23"><path d="m68 23h-40v50h40z" fill="#fff"/></mask><path d="m0 0h96v96h-96z" fill="#fafafa"/><g clip-path="url(#a)"><g mask="url(#b)"><path d="m58 63h-20v-20h20z" fill="#bcbbbb"/><path d="m58 33h-20v30h20zm10 40h-40v-50h40z" fill="#211e1e"/></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m0 0h96v96h-96z"/></clipPath><clipPath id="b"><path d="m-.04541 8h96v96h-96z"/></clipPath><g clip-path="url(#a)"><path d="m0 0h96v96h-96z" fill="#91ede9"/><g clip-path="url(#b)"><path d="m7.95459 16h80.00001v80h-80.00001z" fill="#91ede9"/><path d="m101.025 99.9998h-105.08188v-21.1624s9.33092-7.6866 13.86502-8.0271c5.76006-.433 7.19036 1.7513 12.89206 2.6757 5.9984.973 9.8515-5.3028 15.811-4.1352 6.0811 1.187 13.9477 5.7698 18.9732 5.5946 10.625-.3697 9.9974-2.3692 18.7299-.4864 3.712.8027 7.672-7.0153 13.8651-5.838 3.1378.5936 10.9456 1.2163 10.9456 1.2163z" fill="#48acba"/><path d="m97.62 100h-103.13636v-19.4597s9.57417-5.2541 14.10828-5.5947c5.76008-.4329 6.94708 3.8579 12.64878 4.7871 5.9985.973 8.1488-4.9817 14.1083-3.8141 6.0811 1.1871 11.0288 6.986 16.0542 6.8109 10.625-.3697 11.2137-5.5314 19.9462-3.6487 3.7119.8027 4.6217 2.6757 13.3785.6519 8.7569-2.0238 12.8921.8076 12.8921.8076z" fill="#2b3c5a"/><path d="m47.9546 11.2031c1.7367 0 3.4209.5949 4.7725 1.6856 1.3515 1.0906 2.2893 2.6111 2.6562 4.3086.3669 1.6976.1409 3.47-.6396 5.0215-.6988 1.3887-1.8054 2.5241-3.1641 3.2617l.1289 3.7734 8.7978.6641h.002c.5022.0387.9712.2662 1.3135.6357.3422.3695.533.8547.5332 1.3584v2.5762l-.0088.1875c-.0411.4355-.2248.8474-.5244 1.1709-.3423.3694-.8114.596-1.3135.6347l-8.5342.6573.4199 15.9482.0342.9473c.1017 2.2255.3704 4.5304 1.0635 6.4414.7854 2.165 2.0625 3.6994 4.1621 4.1592h.002c.4922.1091.9948.1635 1.499.164 1.1717 0 2.5744-.7401 4.0254-2.0761 1.2176-1.1213 2.3807-2.5835 3.3564-4.1182-.3411-.1328-.6844-.2599-1.0312-.377l-.6416-.207c-1.1668-.359-1.3929-1.9466-.3799-2.6191 3.1444-2.086 5.6266-4.8817 7.1474-8.0918.2451-.5216.7448-.8019 1.2364-.8233.4996-.0215 1.0409.2271 1.3037.7813h.001c.5719 1.1993 1.0547 2.4394 1.4433 3.7099l.2022.6944c.9639 3.4826 1.1877 7.1318.6523 10.7109l-.0166.1065-.001.0058-.0195.1289v.001c-.1885 1.1905-1.6123 1.5039-2.374.7598v-.001c-.3701-.3585-.7545-.7016-1.1494-1.0322-2.2089 5.9941-6.474 10.5133-11.0635 13.5693-4.8486 3.2285-10.1397 4.8789-13.8916 4.8789-3.7498 0-9.0386-1.6486-13.8867-4.875-4.5894-3.0542-8.8571-7.5711-11.0694-13.5654-.3943.3302-.7778.6733-1.1474 1.0312l-.001.001c-.7693.7428-2.1717.4218-2.3682-.7559l-.04-.2402-.0029-.0127.0009-.001c-.5726-3.8194-.2795-7.7185.8584-11.4091l.1504-.4747c.3627-1.1052.7967-2.1861 1.2998-3.2353.5497-1.1491 2.0746-.9502 2.544.0381 1.5244 3.2135 4.0186 6.0134 7.1787 8.0996l.0019.001c1.0046.6667.8014 2.2569-.375 2.6191l-.0019.001c-.5793.1764-1.1516.3755-1.7158.5947.9752 1.5313 2.1369 2.9902 3.3525 4.1094 1.4489 1.334 2.8497 2.0741 4.0215 2.0742.5075 0 1.0103-.0568 1.5049-.165l.3838-.0987c1.8694-.5552 3.037-2.0305 3.7734-4.0605.7922-2.184 1.031-4.8824 1.0986-7.3887l.419-15.9482-8.5322-.6533h-.001c-.5032-.0388-.9731-.2661-1.3155-.6368-.3425-.3709-.5327-.8583-.5312-1.3632v-2.5694c-.0009-.504.1893-.99.5312-1.3603.3425-.3708.8123-.5989 1.3155-.6377h.0019l8.7969-.6641.1289-3.7734c-1.3584-.7376-2.4645-1.8732-3.1631-3.2617-.7806-1.5515-1.0065-3.3239-.6396-5.0215s1.3047-3.218 2.6562-4.3086c1.3516-1.0907 3.0357-1.6856 4.7725-1.6856zm0 4.3965c-.8486 0-1.6626.3375-2.2627.9375-.6001.6001-.9374 1.4141-.9375 2.2627 0 .8486.3375 1.6626.9375 2.2627.6001.6001 1.414.9375 2.2627.9375s1.6626-.3374 2.2627-.9375c.6-.6001.9375-1.4141.9375-2.2627-.0001-.8486-.3375-1.6626-.9375-2.2627-.6001-.6-1.4141-.9375-2.2627-.9375z" fill="#ff915c" stroke="#2b3c5a" stroke-width="1.6"/><g fill="#8a380f"><path d="m34.3545 34.8602c-.0006.2022.0754.3971.2127.5455s.3257.2393.5273.2545l9.66.74 2.652-2.652c.0452-.0445.0762-.1015.0889-.1636.0128-.0622.0068-.1267-.0172-.1855-.024-.0587-.065-.109-.1176-.1444-.0527-.0354-.1147-.0544-.1781-.0545h-12.828zm38.448 12.664c.0347-.054.0832-.0977.1405-.1267.0572-.029.1212-.0421.1853-.038.064.0041.1258.0252.1789.0612.0532.036.0957.0855.1233.1435.564 1.1787 1.0386 2.3982 1.42 3.648 1.1223 3.6529 1.3932 7.5142.792 11.288-.08.48-.676.652-1.028.312-1.336-1.2923-2.8259-2.4154-4.436-3.344-.1333-.0767-.2334-.2003-.2807-.3467-.0473-.1463-.0385-.3051.0247-.4453 1.348-3.032 2.34-6.668 2.82-10.988.0074-.0572.028-.112.06-.16z"/><path d="m50.7546 24.7998.2 5.2-2.328 2.172c-.057.0529-.1281.088-.2048.101-.0766.0131-.1553.0036-.2266-.0274s-.132-.0821-.1747-.147c-.0428-.0649-.0657-.1409-.0659-.2186v-7.08zm22.8 31.2c-1.6 16-17.6 24-25.6 24v-46.2c0-.1591.0632-.3117.1757-.4243.1125-.1125.2652-.1757.4243-.1757h13v1.316c-.0005.2971-.1112.5835-.3107.8037s-.4737.3586-.7693.3883l-9.32.692.44 16.708c.136 5.044.948 11.24 5.88 12.312.5424.1202 1.0964.1806 1.652.18-.2748.0019-.5463.0604-.7975.1719s-.4767.2736-.6625.4761c-1.948 2.32-4.16 4.656-7.428 5.712 8.6.4 20.44-5.452 22.516-24.36z"/><path d="m48.7546 23.9598c-.44.044-.8.4-.8.84s.36.804.8.752c1.5164-.1796 2.9282-.8644 4.008-1.944 1.2675-1.2673 1.9834-2.9837 1.992-4.776 0-.0042-.0008-.0084-.0024-.0122-.0017-.0039-.004-.0075-.007-.0104-.003-.003-.0065-.0054-.0104-.007-.0038-.0016-.008-.0024-.0122-.0024-.0078-.0001-.0154.0028-.0213.0079-.0059.0052-.0097.0123-.0107.0201-.42 2.692-2.868 4.812-5.936 5.132z"/></g></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#1a2b34"/><path d="m62.4 32.3999h-2.4c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h2.4c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#56b3b4"/><path d="m36 70.7998h-12c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h12c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#ea5e5e"/><path d="m60.0001 51.6001h-7.2c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h7.2c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" fill="#bf85bf"/><path d="m48 51.6001h-9.6c-.6628 0-1.2.5373-1.2 1.2s.5372 1.2 1.2 1.2h9.6c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" fill="#ea5e5e"/><path d="m33.6 51.6001h-9.6c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h9.6c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#56b3b4"/><path d="m36 61.2002h-12c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h12c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#bf85bf"/><path d="m36 42h-12c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h12c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#bf85bf"/><path d="m60 27.6001h-24c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h24c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#f7ba3e"/><path d="m31.2 27.6001h-7.2c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h7.2c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#ea5e5e"/><path d="m35.9999 66h-2.4c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h2.4c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" fill="#f7ba3e"/><path d="m35.9999 37.2002h-2.4c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h2.4c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" fill="#56b3b4"/><path d="m28.8 66h-4.8c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h4.8c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#56b3b4"/><path d="m28.8 37.2002h-4.8c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h4.8c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#f7ba3e"/><g fill="#4d616e"><path d="m57.6 66h-2.4c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h2.4c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m50.4001 66h-9.6c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h9.6c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m72 66h-9.6c-.6628 0-1.2.5373-1.2 1.2s.5372 1.2 1.2 1.2h9.6c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/></g><path d="m62.4 46.7998h-19.2c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h19.2c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" fill="#56b3b4"/><path d="m38.4 46.7998h-7.2c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h7.2c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" fill="#f7ba3e"/><path d="m26.4 46.7998h-2.4c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h2.4c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#ea5e5e"/><path d="m55.1999 32.3999h-9.6c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h9.6c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" fill="#bf85bf"/><path d="m40.8 32.3999h-16.8c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h16.8c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#56b3b4"/><path d="m52.8 56.3999h-21.6c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h21.6c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" fill="#f7ba3e"/><path d="m26.4 56.3999h-2.4c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h2.4c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" fill="#bf85bf"/><path d="m64.8001 37.2002h-12c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h12c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" fill="#ea5e5e"/><path d="m64.8001 42h-12c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h12c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" fill="#f7ba3e"/><path d="m52.8001 22.7998h-28.8001c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h28.8001c.6627 0 1.1999-.5373 1.1999-1.2s-.5372-1.2-1.1999-1.2z" fill="#56b3b4"/><g fill="#4d616e"><path d="m71.9999 22.7998h-14.4c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h14.4c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m62.3999 56.3999h-4.8c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h4.8c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m72 56.3999h-4.8c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h4.8c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m72.0001 51.6001h-7.2c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h7.2c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m72.0001 27.6001h-7.2c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h7.2c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m72 46.7998h-4.8c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h4.8c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m72 32.3999h-4.8c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h4.8c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m71.9999 37.2002h-2.4c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h2.4c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m71.9999 42h-2.4c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h2.4c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m72 61.2002h-21.6c-.6628 0-1.2.5373-1.2 1.2s.5372 1.2 1.2 1.2h21.6c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m45.6001 61.2002h-4.8c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h4.8c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m72 70.7998h-12c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h12c.6628 0 1.2-.5373 1.2-1.2s-.5372-1.2-1.2-1.2z" opacity=".5"/><path d="m55.2001 70.7998h-14.4c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h14.4c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m48.0001 37.2002h-7.2c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h7.2c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/><path d="m48.0001 42h-7.2c-.6627 0-1.2.5373-1.2 1.2s.5373 1.2 1.2 1.2h7.2c.6627 0 1.2-.5373 1.2-1.2s-.5373-1.2-1.2-1.2z" opacity=".5"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><radialGradient id="a" cx="0" cy="0" gradientTransform="matrix(0 65.9749 -65.1841 0 47.229 54.4158)" gradientUnits="userSpaceOnUse" r="1"><stop offset="0" stop-color="#665cee"/><stop offset="1" stop-color="#332e91"/></radialGradient><path d="m0 0h96v96h-96z" fill="url(#a)"/><g fill="#fff"><path d="m48.8006 23c.37 0 .7061.1972.8826.5129l2.9673 5.1943h12.8669c.37 0 .7063.1968.8829.5126l3.4832 5.8564c.2784.4888.2784 1.0932 0 1.5821l-3.4832 5.8564 6.5997 11.4581-1.1677-1.4903c.2783.4889.2784 1.0933 0 1.5822l-3.4832 5.8563c-.1765.3157-.5129.5126-.8829.5126h-5.8939l-6.5997 11.4549c-.1765.3156-.5126.5125-.8825.5125h-6.0908l13.573-25.3574 3.4494 6.0907h6.6001l-6.6001-11.4548 3.4836-5.8564h-26.5763l3.4832-6.0908-3.4832-6.2194-7.4826 12.3102h-7.7541l14.3538 24.1384h-6.5997l-3.945 6.2198h12.8672l3.8499 6.2197-.069-.0023c-.3425-.0228-.6484-.2143-.8139-.5102l-2.967-5.1947h-12.8672c-.37 0-.706-.1968-.8826-.5125l-3.4835-5.8564c-.2784-.4889-.2784-1.0933 0-1.5822l2.9673-5.1943-5.8938-10.6296c-.2784-.4888-.2784-1.0933 0-1.5821l3.4835-5.8564c.1765-.3157.5125-.5125.8826-.5126h6.8715l6.5997-11.4548c.1766-.3157.5129-.5129.8829-.5129z"/><path d="m57.0571 44.1545h-17.5589l8.5011 14.3541z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#000"/><path d="m78.99 21.9-1.73 6.24c-.09.33-.44.52-.77.42l-28.11-8.71c-.19-.06-.41-.02-.56.11l-28.95 23.22c-.08.07-.18.11-.29.13l-17.25 2.66c-.31.05-.53.32-.52.63l.11 2.47c.01.31.26.56.57.58l20.08 1.23c.11 0 .22-.02.31-.06l14.64-7.4c.21-.11.46-.08.64.06l9.37 7.03c.16.12.25.3.24.49l-.09 11.65c0 .13.04.25.11.35l14.74 21.15c.11.16.3.26.5.26h5.03c.46 0 .76-.5.54-.9l-10.87-19.92c-.1-.18-.1-.4 0-.58l5.51-10.48c.06-.11.15-.2.26-.26l19.56-9.92c.2-.1.43-.09.62.04l5.6 3.73c.1.07.22.1.34.1h5.15c.48 0 .77-.52.52-.93l-14.2-23.52c-.28-.46-.97-.36-1.11.15z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#000"/><path d="m48.34 71.6617c5.4687-19.5525 5.31-19.6412 9.2625-33.5825l.95.55c.5175.2963.94.0525.94-.5425v-6.65c1.05-3.6725 1.87-6.5125 2.1125-7.3625h4.2813l7.1137 6.5875-4.6725 4.0375 3.5338 3.8213-23.2863 33.1412c-.1125.1875-.2713.145-.235 0zm2.5438-42.145c.2125 0 .3825.1163.3825.2625v3.4063c0 .1425-.1713.2587-.3825.2587h-5.7501c-.2125 0-.3837-.1162-.3837-.26v-3.4075c0-.1437.1712-.2625.3825-.2625h5.75zm7.1-3.7725-6.3275 3.6525c.0725.1125.1174.2413.1174.3813v3.4087c0 .175-.0699.335-.1824.4625l6.3912 3.69c.435.2525.7925.0463.7925-.4562v-10.6813c0-.5037-.355-.7087-.7912-.4575zm-13.7425 7.4425v-3.41c0-.14.0449-.2687.1174-.38l-6.3275-3.655c-.435-.25-.7925-.045-.7925.4575v10.6813c0 .5025.3576.7087.7938.4562l6.39-3.69c-.1125-.1287-.18-.2875-.18-.4625zm3.1837 38.475h.235c-5.4675-19.5525-5.31-19.6412-9.2625-33.5825l-.95.55c-.5163.2963-.94.0525-.94-.5425v-6.65c-1.05-3.6712-1.87-6.5125-2.1125-7.3625h-4.28l-7.115 6.5875 4.6712 4.0375-3.5337 3.8225zm.4012-31.1012c.9541 0 1.7276-.7735 1.7276-1.7275 0-.9541-.7735-1.7275-1.7276-1.7275-.954 0-1.7274.7734-1.7274 1.7275 0 .954.7734 1.7275 1.7274 1.7275zm0 10.2687c.9541 0 1.7276-.7734 1.7276-1.7275s-.7735-1.7275-1.7276-1.7275c-.954 0-1.7274.7734-1.7274 1.7275s.7734 1.7275 1.7274 1.7275zm0 10.2713c.9541 0 1.7276-.7735 1.7276-1.7275 0-.9541-.7735-1.7275-1.7276-1.7275-.954 0-1.7274.7734-1.7274 1.7275 0 .954.7734 1.7275 1.7274 1.7275z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m23 29.75h50v37.5h-50z"/></clipPath><mask id="b" height="36" maskUnits="userSpaceOnUse" width="51" x="23" y="31"><path d="m23 31.2612h50.0036v35.7143h-50.0036z" fill="#fff"/></mask><path d="m0 0h96v96h-96z" fill="#32f08c"/><g clip-path="url(#a)"><g mask="url(#b)"><path d="m73.0036 66.9755h-42.8607v-7.1393h-7.1429v-28.575h50.0036zm-42.8607-7.1393h35.7178v-21.4339h-35.7178zm17.8607-10.825-5.0518 5.05-5.05-5.05 5.05-5.0518zm14.2857-.0035-5.05 5.05-5.0518-5.05 5.0518-5.0518z" fill="#000"/></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#000"/><path d="m69.5831 32.1928-19.648-10.7506c-.525-.29-1.1149-.4422-1.7147-.4422s-1.1898.1522-1.7148.4422l-19.648 10.7551c-.5611.307-1.0295.759-1.3562 1.3089-.3268.5498-.4999 1.1773-.5014 1.8169v21.3538c.0015.6396.1746 1.2671.5014 1.8169.3267.5499.7951 1.0019 1.3562 1.3089l19.648 10.7551c.525.29 1.115.4422 1.7148.4422s1.1897-.1522 1.7147-.4422l19.648-10.7551c.5611-.307 1.0295-.759 1.3563-1.3089.3267-.5498.4999-1.1773.5013-1.8169v-21.3516c-.0002-.6407-.1728-1.2696-.4996-1.8207-.3268-.5512-.7959-1.0042-1.358-1.3118zm-21.3627-7.6248 17.9377 9.824-17.9377 9.8241-17.9378-9.8241zm-19.648 12.9499 17.8618 9.7749v19.1545l-17.8618-9.7682zm21.4342 28.9294v-19.1456l17.8618-9.7838v19.1523z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><filter id="a" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="51.6576" width="65.3674" x="15.2993" y="28.8643"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" result="hardAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation="2.33334"/><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/><feBlend in2="BackgroundImageFix" mode="overlay" result="effect1_dropShadow_1_283"/><feBlend in="SourceGraphic" in2="effect1_dropShadow_1_283" mode="normal" result="shape"/></filter><filter id="b" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="65.0447" width="26.8333" x="53.8333" y="15.4777"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" result="hardAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation="2.33334"/><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/><feBlend in2="BackgroundImageFix" mode="overlay" result="effect1_dropShadow_1_283"/><feBlend in="SourceGraphic" in2="effect1_dropShadow_1_283" mode="normal" result="shape"/></filter><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="47.9659" x2="47.9659" y1="20.1444" y2="75.8557"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><clipPath id="d"><path d="m20 20h56v56h-56z"/></clipPath><mask id="e" height="56" maskUnits="userSpaceOnUse" width="56" x="20" y="20"><path clip-rule="evenodd" d="m59.7107 75.6176c.882.3436 1.8877.3216 2.7779-.1068l11.5294-5.5478c1.2116-.5829 1.982-1.809 1.982-3.1542v-37.6174c0-1.3451-.7704-2.5712-1.9819-3.1542l-11.5295-5.5479c-1.1683-.5622-2.5356-.4245-3.561.321-.1465.1065-.286.2254-.417.3564l-22.0717 20.1365-9.6141-7.2978c-.895-.6794-2.1468-.6237-2.978.1324l-3.0835 2.8049c-1.0167.9249-1.0179 2.5244-.0025 3.4508l8.3376 7.6066-8.3376 7.6065c-1.0154.9263-1.0142 2.5259.0025 3.4508l3.0835 2.8049c.8312.7561 2.083.8118 2.978.1324l9.6141-7.2978 22.0717 20.1365c.3492.3493.7592.6124 1.2001.7842zm2.2978-40.3302-16.7474 12.7127 16.7474 12.7126z" fill="#fff" fill-rule="evenodd"/></mask><path d="m0 0h96v96h-96z" fill="#fff"/><g clip-path="url(#d)"><g mask="url(#e)"><path d="m74.0184 26.0459-11.5386-5.5556c-1.3356-.6431-2.9317-.3718-3.9798.6764l-37.7728 34.4399c-1.016.9263-1.0148 2.5259.0025 3.4507l3.0854 2.8049c.8317.7561 2.0843.8118 2.9798.1325l45.4872-34.5076c1.526-1.1576 3.7179-.0692 3.7179 1.8462v-.1339c0-1.3446-.7702-2.5702-1.9816-3.1535z" fill="#0065a9"/><g filter="url(#a)"><path d="m74.0184 69.9541-11.5386 5.5556c-1.3356.6432-2.9317.3718-3.9798-.6763l-37.7728-34.4399c-1.016-.9264-1.0148-2.526.0025-3.4508l3.0854-2.8049c.8317-.7561 2.0843-.8118 2.9798-.1325l45.4872 34.5076c1.526 1.1576 3.7179.0692 3.7179-1.8462v.134c0 1.3445-.7702 2.5701-1.9816 3.1534z" fill="#007acc"/></g><g filter="url(#b)"><path d="m62.4804 75.5107c-1.336.6427-2.9321.3709-3.9804-.6774 1.2916 1.2916 3.5.3768 3.5-1.4497v-50.7672c0-1.8266-2.2084-2.7413-3.5-1.4498 1.0483-1.0482 2.6444-1.3198 3.9804-.6774l11.5365 5.548c1.2122.583 1.9831 1.8091 1.9831 3.1542v37.6174c0 1.3451-.7709 2.5712-1.9832 3.1542z" fill="#1f9cf0"/></g><path clip-rule="evenodd" d="m59.6766 75.6176c.882.3436 1.8878.3216 2.7779-.1068l11.5295-5.5477c1.2115-.583 1.9819-1.8091 1.9819-3.1543v-37.6173c0-1.3452-.7704-2.5713-1.9819-3.1543l-11.5295-5.5479c-1.1682-.5622-2.5356-.4245-3.561.321-.1464.1065-.286.2254-.4169.3564l-22.0718 20.1365-9.614-7.2978c-.895-.6794-2.1468-.6237-2.978.1324l-3.0836 2.8049c-1.0167.9249-1.0179 2.5244-.0025 3.4508l8.3376 7.6065-8.3376 7.6066c-1.0154.9264-1.0142 2.5259.0025 3.4507l3.0836 2.805c.8312.7561 2.083.8118 2.978.1324l9.614-7.2979 22.0718 20.1366c.3491.3493.7591.6125 1.2.7842zm2.2978-40.3302-16.7474 12.7126 16.7474 12.7127z" fill="url(#c)" fill-rule="evenodd" opacity=".25"/></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m0 0h96v96h-96z"/></clipPath><g clip-path="url(#a)"><path d="m96 0h-96v96h96z" fill="#000"/><g fill="#fff"><path d="m59.3973 30.7944-10.3014 40.7672h-23.5616c-3.3973 0-7.1233-2.411-7.1233-7.1233v-26.5206c0-4.8219 3.2877-7.1233 7.1233-7.1233z"/><path d="m70.685 63.6713h-31.7521l9.4706-37.4794h22.2815c2.6954 0 5.4794 1.868 5.4794 5.4794v26.5206c0 2.0129-.6718 3.3265-1.5827 4.151-.9376.8489-2.2954 1.3284-3.8967 1.3284z" stroke="#000" stroke-width="3.28767"/></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h96v96h-96z" fill="#faf3e9"/><path clip-rule="evenodd" d="m75.4881 32.0088h-.5336c-2.8085-.0044-5.0879 2.2705-5.0879 5.0791v11.3593c0 2.2683-1.8746 4.1058-4.1058 4.1058-1.3256 0-2.649-.6672-3.4342-1.7871l-11.6022-16.5697c-.9624-1.3759-2.5285-2.1962-4.2237-2.1962-2.6447 0-5.0246 2.2487-5.0246 5.0245v11.4249c0 2.2683-1.8593 4.1058-4.1058 4.1058-1.33 0-2.6512-.6672-3.4364-1.7872l-12.9824-18.5405c-.2931-.4178-.9515-.2122-.9515.2997v9.9068c0 .5009.1531.9865.4397 1.3977l12.7745 18.2453c.7546 1.0783 1.8681 1.8789 3.1521 2.1699 3.2133.7306 6.1707-1.7433 6.1707-4.8954v-11.4183c0-2.2684 1.8375-4.1058 4.1057-4.1058h.0067c1.3671 0 2.649.6671 3.4342 1.7871l11.602 16.5675c.9646 1.378 2.45 2.1962 4.2217 2.1962 2.7038 0 5.02-2.251 5.02-5.0246v-11.4226c0-2.2684 1.8375-4.1058 4.1059-4.1058h.4527c.2845 0 .5141-.2297.5141-.5141v-10.7905c0-.2844-.2296-.514-.5141-.514z" fill="#000" fill-rule="evenodd"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" height="96" viewBox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m20 20h56v56h-56z"/></clipPath><path d="m0 0h96v96h-96z" fill="#084ccf"/><g clip-path="url(#a)"><path clip-rule="evenodd" d="m25.25 23.5c-.9665 0-1.75.7835-1.75 1.75v38.5h-3.5v-38.5c0-2.8995 2.3505-5.25 5.25-5.25h46.8876c2.3386 0 3.5098 2.8275 1.8561 4.4812l-28.8782 28.8782h8.1345v-3.6094h3.5v4.4844c0 1.4497-1.1753 2.625-2.625 2.625h-12.5095l-6.0156 6.0156h27.2751v-21.875h3.5v21.875c0 1.933-1.567 3.5-3.5 3.5h-30.7751l-6.125 6.125h44.7751c.9665 0 1.75-.7835 1.75-1.75v-38.5h3.5v38.5c0 2.8995-2.3505 5.25-5.25 5.25h-46.8876c-2.3386 0-3.5098-2.8275-1.8561-4.4812l28.7688-28.7688h-8.0251v3.5h-3.5v-4.375c0-1.4497 1.1753-2.625 2.625-2.625h12.4001l6.125-6.125h-27.2751v21.875h-3.5v-21.875c0-1.933 1.567-3.5 3.5-3.5h30.7751l6.125-6.125z" fill="#fff" fill-rule="evenodd"/></g></svg>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ultracite",
|
|
3
3
|
"description": "The AI-ready formatter that helps you write and generate code faster.",
|
|
4
|
-
"version": "7.0.
|
|
4
|
+
"version": "7.0.2",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"ultracite": "dist/index.js"
|
|
@@ -46,11 +46,12 @@
|
|
|
46
46
|
"url": "git+https://github.com/haydenbleasel/ultracite.git"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@biomejs/biome": "
|
|
49
|
+
"@biomejs/biome": "2.3.10",
|
|
50
50
|
"@eslint/js": "^9.39.2",
|
|
51
51
|
"@next/eslint-plugin-next": "^16.1.1",
|
|
52
|
+
"@repo/data": "workspace:*",
|
|
52
53
|
"@tanstack/eslint-plugin-query": "^5.91.2",
|
|
53
|
-
"@types/node": "
|
|
54
|
+
"@types/node": "^25.0.3",
|
|
54
55
|
"@typescript-eslint/eslint-plugin": "^8.51.0",
|
|
55
56
|
"@typescript-eslint/parser": "^8.51.0",
|
|
56
57
|
"eslint-config-prettier": "^10.1.8",
|
|
@@ -89,14 +90,13 @@
|
|
|
89
90
|
"dependencies": {
|
|
90
91
|
"@clack/prompts": "^0.11.0",
|
|
91
92
|
"@trpc/server": "^11.8.1",
|
|
92
|
-
"
|
|
93
|
-
"deepmerge": "catalog:",
|
|
93
|
+
"deepmerge": "^4.3.1",
|
|
94
94
|
"glob": "^13.0.0",
|
|
95
95
|
"jsonc-parser": "^3.3.1",
|
|
96
96
|
"nypm": "^0.6.2",
|
|
97
97
|
"oxlint": "^1.36.0",
|
|
98
98
|
"trpc-cli": "^0.12.1",
|
|
99
|
-
"zod": "
|
|
99
|
+
"zod": "^4.3.2"
|
|
100
100
|
},
|
|
101
101
|
"packageManager": "bun@1.3.5"
|
|
102
102
|
}
|