maz-ui 5.0.0 → 5.1.0-beta.0
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/dist/assets/{MazDropzone.DJ8au25t.css → MazDropzone.BW2grpTi.css} +1 -1
- package/dist/chunks/{MazDrawer.DANxKYxJ.js → MazDrawer.CC8zomfx.js} +2 -2
- package/dist/chunks/{MazDropzone.POH3pmfi.js → MazDropzone.Dez5j0WP.js} +2 -2
- package/dist/components/MazDrawer.js +1 -1
- package/dist/components/MazDropzone.js +1 -1
- package/dist/components/MazDropzone.vue.d.ts +2 -2
- package/dist/components/MazInputPrice.vue.d.ts +1 -1
- package/dist/components/index.js +2 -2
- package/docs/README.md +207 -0
- package/docs/agents/agents-md.md +52 -0
- package/docs/agents/claude-rule.md +52 -0
- package/docs/components/maz-accordion.md +76 -0
- package/docs/components/maz-alert.md +241 -0
- package/docs/components/maz-animated-counter.md +87 -0
- package/docs/components/maz-animated-element.md +46 -0
- package/docs/components/maz-animated-text.md +53 -0
- package/docs/components/maz-avatar.md +193 -0
- package/docs/components/maz-backdrop.md +178 -0
- package/docs/components/maz-badge.md +167 -0
- package/docs/components/maz-bottom-sheet.md +257 -0
- package/docs/components/maz-btn-group.md +316 -0
- package/docs/components/maz-btn.md +423 -0
- package/docs/components/maz-card-spotlight.md +84 -0
- package/docs/components/maz-card.md +321 -0
- package/docs/components/maz-carousel.md +153 -0
- package/docs/components/maz-chart.md +206 -0
- package/docs/components/maz-checkbox.md +138 -0
- package/docs/components/maz-checklist.md +251 -0
- package/docs/components/maz-circular-progress-bar.md +109 -0
- package/docs/components/maz-code-highlight.md +155 -0
- package/docs/components/maz-container.md +241 -0
- package/docs/components/maz-date-picker.md +791 -0
- package/docs/components/maz-dialog-confirm.md +215 -0
- package/docs/components/maz-dialog.md +143 -0
- package/docs/components/maz-drawer.md +106 -0
- package/docs/components/maz-dropdown.md +419 -0
- package/docs/components/maz-dropzone.md +387 -0
- package/docs/components/maz-expand-animation.md +82 -0
- package/docs/components/maz-fullscreen-loader.md +58 -0
- package/docs/components/maz-gallery.md +79 -0
- package/docs/components/maz-icon.md +203 -0
- package/docs/components/maz-input-code.md +73 -0
- package/docs/components/maz-input-number.md +79 -0
- package/docs/components/maz-input-phone-number.md +536 -0
- package/docs/components/maz-input-price.md +68 -0
- package/docs/components/maz-input-tags.md +112 -0
- package/docs/components/maz-input.md +334 -0
- package/docs/components/maz-lazy-img.md +113 -0
- package/docs/components/maz-link.md +146 -0
- package/docs/components/maz-loading-bar.md +38 -0
- package/docs/components/maz-markdown-editor.md +320 -0
- package/docs/components/maz-pagination.md +82 -0
- package/docs/components/maz-popover.md +794 -0
- package/docs/components/maz-pull-to-refresh.md +222 -0
- package/docs/components/maz-radio-buttons.md +313 -0
- package/docs/components/maz-radio.md +119 -0
- package/docs/components/maz-read-more.md +209 -0
- package/docs/components/maz-reading-progress-bar.md +96 -0
- package/docs/components/maz-select-country.md +513 -0
- package/docs/components/maz-select.md +318 -0
- package/docs/components/maz-sidebar-content.md +25 -0
- package/docs/components/maz-sidebar-footer.md +25 -0
- package/docs/components/maz-sidebar-group.md +27 -0
- package/docs/components/maz-sidebar-header.md +25 -0
- package/docs/components/maz-sidebar-menu-button.md +41 -0
- package/docs/components/maz-sidebar-menu-item.md +25 -0
- package/docs/components/maz-sidebar-menu-sub.md +32 -0
- package/docs/components/maz-sidebar-menu.md +25 -0
- package/docs/components/maz-sidebar-separator.md +21 -0
- package/docs/components/maz-sidebar-trigger.md +25 -0
- package/docs/components/maz-sidebar.md +507 -0
- package/docs/components/maz-skeleton.md +226 -0
- package/docs/components/maz-slider.md +165 -0
- package/docs/components/maz-spinner.md +84 -0
- package/docs/components/maz-stepper.md +301 -0
- package/docs/components/maz-switch.md +86 -0
- package/docs/components/maz-table-cell.md +27 -0
- package/docs/components/maz-table-row.md +28 -0
- package/docs/components/maz-table-title.md +27 -0
- package/docs/components/maz-table-virtualizer.md +31 -0
- package/docs/components/maz-table.md +426 -0
- package/docs/components/maz-tabs-bar.md +43 -0
- package/docs/components/maz-tabs-content-item.md +27 -0
- package/docs/components/maz-tabs-content.md +27 -0
- package/docs/components/maz-tabs.md +308 -0
- package/docs/components/maz-textarea.md +255 -0
- package/docs/components/maz-ticker.md +427 -0
- package/docs/components/maz-timeline.md +304 -0
- package/docs/components/maz-ui-provider.md +26 -0
- package/docs/components/maz-window-mockup.md +182 -0
- package/docs/composables/use-aos.md +41 -0
- package/docs/composables/use-breakpoints.md +42 -0
- package/docs/composables/use-dialog.md +58 -0
- package/docs/composables/use-display-names.md +130 -0
- package/docs/composables/use-drag.md +185 -0
- package/docs/composables/use-form-validator.md +1123 -0
- package/docs/composables/use-idle-timeout.md +172 -0
- package/docs/composables/use-pull-to-refresh.md +86 -0
- package/docs/composables/use-reading-time.md +132 -0
- package/docs/composables/use-string-matching.md +41 -0
- package/docs/composables/use-swipe.md +171 -0
- package/docs/composables/use-timer.md +104 -0
- package/docs/composables/use-toast.md +50 -0
- package/docs/composables/use-user-visibility.md +127 -0
- package/docs/composables/use-wait.md +50 -0
- package/docs/composables/use-window-size.md +25 -0
- package/docs/directives/click-outside.md +182 -0
- package/docs/directives/fullscreen-img.md +83 -0
- package/docs/directives/lazy-img.md +182 -0
- package/docs/directives/tooltip.md +298 -0
- package/docs/directives/zoom-img.md +100 -0
- package/docs/ecosystem/eslint-config.md +289 -0
- package/docs/ecosystem/icons/icon-set.md +25 -0
- package/docs/ecosystem/icons/index.md +584 -0
- package/docs/ecosystem/mcp.md +165 -0
- package/docs/ecosystem/node/exec-promise.md +93 -0
- package/docs/ecosystem/node/index.md +53 -0
- package/docs/ecosystem/node/logger.md +152 -0
- package/docs/ecosystem/node/print-banner.md +101 -0
- package/docs/ecosystem/node/setup-agents.md +102 -0
- package/docs/ecosystem/nuxt.md +551 -0
- package/docs/ecosystem/stylelint-config.md +310 -0
- package/docs/ecosystem/themes.md +966 -0
- package/docs/ecosystem/translations.md +1173 -0
- package/docs/ecosystem/utils/camel-case.md +37 -0
- package/docs/ecosystem/utils/capitalize.md +37 -0
- package/docs/ecosystem/utils/check-availability.md +85 -0
- package/docs/ecosystem/utils/cookie.md +86 -0
- package/docs/ecosystem/utils/country-code-to-unicode-flag.md +128 -0
- package/docs/ecosystem/utils/currency.md +53 -0
- package/docs/ecosystem/utils/date.md +53 -0
- package/docs/ecosystem/utils/debounce-callback.md +44 -0
- package/docs/ecosystem/utils/debounce-id.md +75 -0
- package/docs/ecosystem/utils/debounce.md +71 -0
- package/docs/ecosystem/utils/fetch-locale-ip.md +39 -0
- package/docs/ecosystem/utils/format-json.md +39 -0
- package/docs/ecosystem/utils/format-phone-number.md +43 -0
- package/docs/ecosystem/utils/get-browser-locale.md +35 -0
- package/docs/ecosystem/utils/get-country-flag-url.md +67 -0
- package/docs/ecosystem/utils/get-error-message.md +45 -0
- package/docs/ecosystem/utils/idle-timeout.md +96 -0
- package/docs/ecosystem/utils/index.md +57 -0
- package/docs/ecosystem/utils/is-client.md +38 -0
- package/docs/ecosystem/utils/is-equal.md +44 -0
- package/docs/ecosystem/utils/is-ios.md +43 -0
- package/docs/ecosystem/utils/is-server.md +37 -0
- package/docs/ecosystem/utils/is-standalone-mode.md +49 -0
- package/docs/ecosystem/utils/kebab-case.md +42 -0
- package/docs/ecosystem/utils/normalize-string.md +83 -0
- package/docs/ecosystem/utils/number.md +51 -0
- package/docs/ecosystem/utils/pascal-case.md +41 -0
- package/docs/ecosystem/utils/prevent-ios-input-zoom.md +72 -0
- package/docs/ecosystem/utils/script-loader.md +85 -0
- package/docs/ecosystem/utils/sleep.md +65 -0
- package/docs/ecosystem/utils/snake-case.md +42 -0
- package/docs/ecosystem/utils/swipe-handler.md +97 -0
- package/docs/ecosystem/utils/textarea-autogrow.md +47 -0
- package/docs/ecosystem/utils/throttle-id.md +54 -0
- package/docs/ecosystem/utils/throttle.md +63 -0
- package/docs/ecosystem/utils/truthy-filter.md +37 -0
- package/docs/ecosystem/utils/types/deep-key-of.md +54 -0
- package/docs/ecosystem/utils/types/deep-partial.md +48 -0
- package/docs/ecosystem/utils/types/deep-required.md +45 -0
- package/docs/ecosystem/utils/types/flatten-object-keys.md +50 -0
- package/docs/ecosystem/utils/types/generic-instance-type.md +48 -0
- package/docs/ecosystem/utils/types/infer-maybe-ref.md +41 -0
- package/docs/ecosystem/utils/upper-first.md +38 -0
- package/docs/ecosystem/utils/user-visibility.md +75 -0
- package/docs/guide/ai-agents.md +237 -0
- package/docs/guide/browser-support.md +88 -0
- package/docs/guide/getting-started.md +191 -0
- package/docs/guide/global-defaults.md +103 -0
- package/docs/guide/maz-ui-provider.md +231 -0
- package/docs/guide/migration-v5.md +871 -0
- package/docs/guide/resolvers.md +650 -0
- package/docs/guide/tailwind.md +483 -0
- package/docs/guide/vue.md +286 -0
- package/docs/manifest.json +1 -0
- package/docs/plugins/aos.md +312 -0
- package/docs/plugins/dialog.md +269 -0
- package/docs/plugins/toast.md +221 -0
- package/docs/plugins/wait.md +78 -0
- package/docs/reference/icons.md +46 -0
- package/docs/reference/tailwind-tokens.md +191 -0
- package/docs/rules.md +57 -0
- package/package.json +31 -4
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "MCP server"
|
|
3
|
+
description: "The maz-ui MCP server gives AI coding agents the version-matched knowledge of maz-ui and its ecosystem - search by need, exact component APIs, icons, Tailwind theme tokens, setup guides and code review."
|
|
4
|
+
package: "@maz-ui/mcp"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/mcp"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# MCP server
|
|
9
|
+
|
|
10
|
+
> The maz-ui MCP server gives AI coding agents the version-matched knowledge of maz-ui and its ecosystem - search by need, exact component APIs, icons, Tailwind theme tokens, setup guides and code review.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/mcp`
|
|
13
|
+
- Web: https://maz-ui.com/ecosystem/mcp
|
|
14
|
+
|
|
15
|
+
**Tip: Start with `npx @maz-ui/mcp init`**
|
|
16
|
+
|
|
17
|
+
It registers the server and writes the maz-ui rules for the agents of your project. See [AI agents](../guide/ai-agents.md) for the complete picture (rules, version-matched docs, Claude Code plugin, code review in CI).
|
|
18
|
+
|
|
19
|
+
## Tools
|
|
20
|
+
|
|
21
|
+
| Tool | Purpose |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| `search_docs` | Find what maz-ui provides for a need, described in plain words ("user avatar with initials", "confirm before delete", "debounce search") or by name. Understands the vocabulary of other libraries ("modal", "snackbar", "combobox") |
|
|
24
|
+
| `get_component_api` | Exact API of up to 10 components: props with types, defaults and accepted values, `v-model`, events with payload, slots with bindings, exposed methods |
|
|
25
|
+
| `find_icons` | Icons of `@maz-ui/icons` by meaning ("delete", "settings", "france flag") with their imports |
|
|
26
|
+
| `get_theme_tokens` | Every Tailwind class and CSS variable of the maz-ui theme: colors, radius, shadows, spacing, breakpoints, fonts, z-index, utilities |
|
|
27
|
+
| `get_doc` | Any documentation page by id or name (`components/maz-btn`, `useToast`, `guide/tailwind`), whole or by sections |
|
|
28
|
+
| `list_docs` | Catalog of the components, composables, directives, plugins, helpers, packages and guides |
|
|
29
|
+
| `get_setup_guide` | Installation steps for Vue or Nuxt, with or without Tailwind |
|
|
30
|
+
| `review_code` | Review files or code against the installed maz-ui: unknown props or values, unknown icons, native elements and libraries maz-ui already covers, default Tailwind palette, `maz:` prefix... |
|
|
31
|
+
|
|
32
|
+
Every tool is read-only. The server also gives agents instructions on when to use them, so they look maz-ui up before writing code.
|
|
33
|
+
|
|
34
|
+
### Prompts
|
|
35
|
+
|
|
36
|
+
| Prompt | Purpose |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| `build` | Implement a feature with the maz-ui ecosystem (search, APIs, icons, tokens, review) |
|
|
39
|
+
| `audit` | Find and fix what re-implements maz-ui in existing files |
|
|
40
|
+
| `setup` | Install and configure maz-ui in the project |
|
|
41
|
+
|
|
42
|
+
In Claude Code, they are available as `/maz-ui:build`, `/maz-ui:audit` and `/maz-ui:setup`.
|
|
43
|
+
|
|
44
|
+
## Version-matched docs
|
|
45
|
+
|
|
46
|
+
The server serves the documentation of the **maz-ui version installed in your project** (`node_modules/maz-ui/docs`), found from the directory it is started in (monorepos: the root, then `apps/*` and `packages/*`). Without maz-ui installed, it serves the docs bundled with `@maz-ui/mcp` (latest release).
|
|
47
|
+
|
|
48
|
+
To force a folder, pass `--docs <dir>` or set `MAZ_UI_DOCS_DIR`.
|
|
49
|
+
|
|
50
|
+
## Configuration
|
|
51
|
+
|
|
52
|
+
`npx @maz-ui/mcp init` writes the configuration of Claude Code, Cursor and VS Code for you. To configure an agent by hand, start the server with `npx -y @maz-ui/mcp@latest`.
|
|
53
|
+
|
|
54
|
+
### Claude Code
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# for every project, without any file in them
|
|
58
|
+
claude mcp add maz-ui --scope user -- npx -y @maz-ui/mcp@latest
|
|
59
|
+
# or for this project only (written in .mcp.json, shared with your team)
|
|
60
|
+
claude mcp add maz-ui --scope project -- npx -y @maz-ui/mcp@latest
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Or in `.mcp.json`:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"mcpServers": {
|
|
68
|
+
"maz-ui": {
|
|
69
|
+
"type": "stdio",
|
|
70
|
+
"command": "npx",
|
|
71
|
+
"args": ["-y", "@maz-ui/mcp@latest"]
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The [Claude Code plugin](../guide/ai-agents.md#claude-code-plugin) includes the server.
|
|
78
|
+
|
|
79
|
+
### Cursor
|
|
80
|
+
|
|
81
|
+
`.cursor/mcp.json`:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"mcpServers": {
|
|
86
|
+
"maz-ui": {
|
|
87
|
+
"command": "npx",
|
|
88
|
+
"args": ["-y", "@maz-ui/mcp@latest"]
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### VS Code (GitHub Copilot)
|
|
95
|
+
|
|
96
|
+
`.vscode/mcp.json`:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"servers": {
|
|
101
|
+
"maz-ui": {
|
|
102
|
+
"type": "stdio",
|
|
103
|
+
"command": "npx",
|
|
104
|
+
"args": ["-y", "@maz-ui/mcp@latest"]
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Codex
|
|
111
|
+
|
|
112
|
+
`~/.codex/config.toml`:
|
|
113
|
+
|
|
114
|
+
```toml
|
|
115
|
+
[mcp_servers.maz-ui]
|
|
116
|
+
command = "npx"
|
|
117
|
+
args = ["-y", "@maz-ui/mcp@latest"]
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Windsurf, Claude Desktop, Cline, Zed...
|
|
121
|
+
|
|
122
|
+
Add the same `command` and `args` to the MCP configuration of the client (`mcpServers` key):
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"mcpServers": {
|
|
127
|
+
"maz-ui": {
|
|
128
|
+
"command": "npx",
|
|
129
|
+
"args": ["-y", "@maz-ui/mcp@latest"]
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Command line
|
|
136
|
+
|
|
137
|
+
The package is also a CLI:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
npx @maz-ui/mcp # start the MCP server (stdio)
|
|
141
|
+
npx @maz-ui/mcp init # configure the AI agents of the project
|
|
142
|
+
npx @maz-ui/mcp review <paths...> # review files against maz-ui (CI)
|
|
143
|
+
npx @maz-ui/mcp search <query> # search the docs from the terminal
|
|
144
|
+
npx @maz-ui/mcp --help
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
See [Code review in CI](../guide/ai-agents.md#code-review-in-ci) for the review options and rules.
|
|
148
|
+
|
|
149
|
+
## Programmatic API
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
import { createMazUiMcpServer, loadKnowledge, reviewCode } from '@maz-ui/mcp'
|
|
153
|
+
|
|
154
|
+
const knowledge = loadKnowledge({ cwd: process.cwd() })
|
|
155
|
+
const findings = reviewCode('<template><MazBtn color="red" /></template>', {
|
|
156
|
+
knowledge,
|
|
157
|
+
filename: 'Example.vue',
|
|
158
|
+
})
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Debugging
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
npx @modelcontextprotocol/inspector npx -y @maz-ui/mcp@latest
|
|
165
|
+
```
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "execPromise"
|
|
3
|
+
description: "Promise-based wrapper around `child_process.exec` with structured stdout/stderr/error logging, package-scoped prefixes, and per-call log silencing."
|
|
4
|
+
package: "@maz-ui/node"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/node/exec-promise"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# execPromise
|
|
9
|
+
|
|
10
|
+
> Promise-based wrapper around `child_process.exec` with structured stdout/stderr/error logging, package-scoped prefixes, and per-call log silencing.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/node`
|
|
13
|
+
- Import: `import { execPromise } from '@maz-ui/node'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/node/exec-promise
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
import { execPromise, logger } from '@maz-ui/node'
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
const { stdout } = await execPromise('npm --version')
|
|
23
|
+
logger.log('npm version:', stdout.trim())
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
logger.error('Command failed', error)
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## API
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
function execPromise(
|
|
34
|
+
command: string,
|
|
35
|
+
options?: ExecPromiseOptions,
|
|
36
|
+
): Promise<{ stdout: string, stderr: string }>
|
|
37
|
+
|
|
38
|
+
interface ExecPromiseOptions {
|
|
39
|
+
logger?: CustomLogger
|
|
40
|
+
packageName?: string
|
|
41
|
+
noSuccess?: boolean
|
|
42
|
+
noStdout?: boolean
|
|
43
|
+
noStderr?: boolean
|
|
44
|
+
noError?: boolean
|
|
45
|
+
logLevel?: LogLevel
|
|
46
|
+
cwd?: string
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Options
|
|
51
|
+
|
|
52
|
+
| Option | Type | Default | Description |
|
|
53
|
+
| ------------- | ------------- | ----------- | --------------------------------------------------------------------------------- |
|
|
54
|
+
| `logger` | `CustomLogger` | built-in | Custom logger (must expose `log`, `error`, `info`, `warn`, `debug` methods). |
|
|
55
|
+
| `packageName` | `string` | - | Prepended to logs as `[name]: ` - useful when many commands share a logger. |
|
|
56
|
+
| `noSuccess` | `boolean` | `false` | Skip the `info` line printed when the command finishes successfully. |
|
|
57
|
+
| `noStdout` | `boolean` | `false` | Don't pipe stdout to the logger (still returned in the promise result). |
|
|
58
|
+
| `noStderr` | `boolean` | `false` | Don't pipe stderr to the logger (still returned in the promise result). |
|
|
59
|
+
| `noError` | `boolean` | `false` | Don't log errors before rejecting. |
|
|
60
|
+
| `logLevel` | `LogLevel` | unchanged | Temporarily sets the default logger's level for this call. |
|
|
61
|
+
| `cwd` | `string` | `process.cwd()` | Working directory for the command. |
|
|
62
|
+
|
|
63
|
+
The returned promise **resolves** with `{ stdout, stderr }` on success and **rejects** with the exec error on failure.
|
|
64
|
+
|
|
65
|
+
## Examples
|
|
66
|
+
|
|
67
|
+
Run a build silently, only reporting success/failure:
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
await execPromise('npm run build', {
|
|
71
|
+
packageName: 'build',
|
|
72
|
+
noStdout: true,
|
|
73
|
+
noStderr: true,
|
|
74
|
+
})
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Use a custom logger for an isolated subsystem:
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
import { createLogger, execPromise } from '@maz-ui/node'
|
|
81
|
+
|
|
82
|
+
const ciLogger = createLogger({ level: 2 })
|
|
83
|
+
|
|
84
|
+
await execPromise('npm test', {
|
|
85
|
+
logger: ciLogger,
|
|
86
|
+
packageName: 'tests',
|
|
87
|
+
})
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Notes
|
|
91
|
+
|
|
92
|
+
- `execPromise` uses Node's `child_process.exec`, which buffers all output in memory. For commands that produce very large streams, prefer `child_process.spawn` directly.
|
|
93
|
+
- `stdout`/`stderr` are still returned in the promise result even when `noStdout`/`noStderr` are set - the flags only affect logging.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "@maz-ui/node"
|
|
3
|
+
description: "Lightweight Node.js utilities - promise-based shell execution, an opinionated consola-backed logger, and a banner printer for CLIs."
|
|
4
|
+
package: "@maz-ui/node"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/node/"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# @maz-ui/node
|
|
9
|
+
|
|
10
|
+
> Lightweight Node.js utilities - promise-based shell execution, an opinionated consola-backed logger, and a banner printer for CLIs.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/node`
|
|
13
|
+
- Web: https://maz-ui.com/ecosystem/node/
|
|
14
|
+
|
|
15
|
+
`@maz-ui/node` powers the CLIs and build scripts inside the maz-ui ecosystem. It's intentionally tiny: an `exec` wrapper that returns a real `Promise`, a colourful logger built on [consola](https://github.com/unjs/consola), and a banner helper using [figlet](https://github.com/patorjk/figlet.js).
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash [pnpm]
|
|
20
|
+
pnpm add @maz-ui/node
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```bash [npm]
|
|
24
|
+
npm install @maz-ui/node
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```bash [yarn]
|
|
28
|
+
yarn add @maz-ui/node
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Basic usage
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
import { execPromise, logger, printBanner } from '@maz-ui/node'
|
|
35
|
+
|
|
36
|
+
printBanner({ name: 'my-cli', version: '1.0.0' })
|
|
37
|
+
|
|
38
|
+
logger.info('Running tests…')
|
|
39
|
+
await execPromise('npm test', { packageName: 'tests' })
|
|
40
|
+
logger.success('Done')
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## What's inside
|
|
44
|
+
|
|
45
|
+
- [`execPromise`](./exec-promise.md) - Promise-based `child_process.exec` with structured logging.
|
|
46
|
+
- [`logger` / `createLogger`](./logger.md) - consola-backed logger with semantic log levels and helpers (`box`, `divider`, `brand`, …).
|
|
47
|
+
- [`printBanner`](./print-banner.md) - ASCII-art banner printer (figlet) with versioning, dividers and clearing.
|
|
48
|
+
- [`setupAgents`](./setup-agents.md) - Configure the AI coding agents of a project for maz-ui (rules and MCP server), as `npx @maz-ui/mcp init` does.
|
|
49
|
+
|
|
50
|
+
## Requirements
|
|
51
|
+
|
|
52
|
+
- Node.js >= 22.12.0
|
|
53
|
+
- ESM only - published as `"type": "module"`.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "logger / createLogger"
|
|
3
|
+
description: "Opinionated [consola](https://github.com/unjs/consola)-backed logger with semantic levels, status helpers (`success`, `ready`, `fail`), and formatting helpers (`box`, `divider`, `brand`)."
|
|
4
|
+
package: "@maz-ui/node"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/node/logger"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# logger / createLogger
|
|
9
|
+
|
|
10
|
+
> Opinionated [consola](https://github.com/unjs/consola)-backed logger with semantic levels, status helpers (`success`, `ready`, `fail`), and formatting helpers (`box`, `divider`, `brand`).
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/node`
|
|
13
|
+
- Import: `import { logger } from '@maz-ui/node'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/node/logger
|
|
15
|
+
|
|
16
|
+
The default `logger` is a singleton ready to use; `createLogger` builds a fresh instance with its own level and reporters.
|
|
17
|
+
|
|
18
|
+
## Quick start
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { logger } from '@maz-ui/node'
|
|
22
|
+
|
|
23
|
+
logger.info('Build started')
|
|
24
|
+
logger.success('All checks passed')
|
|
25
|
+
logger.warn('Deprecated flag used')
|
|
26
|
+
logger.error('Build failed', errorObject)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Default instance
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { logger } from '@maz-ui/node'
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
A pre-configured `Logger` with `level: 'default'` (numeric 3). Suitable for most scripts.
|
|
36
|
+
|
|
37
|
+
## Custom instances
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
import { createLogger } from '@maz-ui/node'
|
|
41
|
+
|
|
42
|
+
const dev = createLogger({ level: 4 }) // debug
|
|
43
|
+
const ci = createLogger({ level: 2 }) // normal
|
|
44
|
+
const silent = createLogger({ level: Number.NEGATIVE_INFINITY })
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
function createLogger(options?: LoggerOptions): Logger
|
|
49
|
+
|
|
50
|
+
type LoggerOptions = Partial<ConsolaOptions>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`LoggerOptions` is forwarded directly to [consola's `createConsola()`](https://github.com/unjs/consola#instance-options) - see consola docs for every accepted field (tag, reporters, formatOptions, …).
|
|
54
|
+
|
|
55
|
+
## API
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
interface Logger {
|
|
59
|
+
// Core
|
|
60
|
+
log(message, ...args): void
|
|
61
|
+
info(message, ...args): void
|
|
62
|
+
warn(message, ...args): void
|
|
63
|
+
error(message, ...args): void
|
|
64
|
+
debug(message, ...args): void
|
|
65
|
+
trace(message, ...args): void
|
|
66
|
+
verbose(message, ...args): void
|
|
67
|
+
silent(message, ...args): void
|
|
68
|
+
fatal(message, ...args): void
|
|
69
|
+
|
|
70
|
+
// Status
|
|
71
|
+
start(message, ...args): void
|
|
72
|
+
ready(message, ...args): void
|
|
73
|
+
success(message, ...args): void
|
|
74
|
+
fail(message, ...args): void
|
|
75
|
+
|
|
76
|
+
// Formatting
|
|
77
|
+
box(message, ...args): void
|
|
78
|
+
brand(message: string): void
|
|
79
|
+
divider(character?: string): void
|
|
80
|
+
eot(): void
|
|
81
|
+
break(count?: number): void
|
|
82
|
+
clear(): void
|
|
83
|
+
|
|
84
|
+
// Reporters
|
|
85
|
+
addReporter(reporter: ConsolaReporter): void
|
|
86
|
+
removeReporter(reporter: ConsolaReporter): void
|
|
87
|
+
|
|
88
|
+
// Level control
|
|
89
|
+
setLevel(level: LogLevel): void
|
|
90
|
+
getLevel(): number
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Log levels
|
|
95
|
+
|
|
96
|
+
`setLevel()` accepts a semantic name. Anything below the active level is suppressed.
|
|
97
|
+
|
|
98
|
+
| Level | Numeric | Description |
|
|
99
|
+
| ----------- | ----------------- | ---------------------------- |
|
|
100
|
+
| `'silent'` | `-Infinity` | No logs displayed |
|
|
101
|
+
| `'error'` | `0` | Fatal and error only |
|
|
102
|
+
| `'warning'` | `1` | Warnings and above |
|
|
103
|
+
| `'normal'` | `2` | Normal logs and above |
|
|
104
|
+
| `'default'` | `3` (default) | Informational logs |
|
|
105
|
+
| `'debug'` | `4` | Debug logs and above |
|
|
106
|
+
| `'trace'` | `5` | All logs including trace |
|
|
107
|
+
| `'verbose'` | `Infinity` | Maximum verbosity |
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
logger.setLevel('debug')
|
|
111
|
+
logger.debug('Now visible')
|
|
112
|
+
|
|
113
|
+
logger.setLevel('silent')
|
|
114
|
+
logger.error('No longer printed')
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Formatting helpers
|
|
118
|
+
|
|
119
|
+
| Method | Output |
|
|
120
|
+
| ------------ | ------------------------------------------------------------------- |
|
|
121
|
+
| `box(msg)` | Renders the message inside a bordered box. |
|
|
122
|
+
| `brand(msg)` | Prints in bright blue - used by `printBanner`. |
|
|
123
|
+
| `divider(c)` | Prints a separator line that adapts to the terminal width. |
|
|
124
|
+
| `eot()` | Prints a blank line (end-of-transmission marker). |
|
|
125
|
+
| `break(n)` | Prints `n` blank lines (default: 1). |
|
|
126
|
+
|
|
127
|
+
## Examples
|
|
128
|
+
|
|
129
|
+
Build script with mixed levels:
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
import { createLogger, execPromise } from '@maz-ui/node'
|
|
133
|
+
|
|
134
|
+
const log = createLogger({ level: 3 })
|
|
135
|
+
|
|
136
|
+
log.box('🚀 Build starting')
|
|
137
|
+
log.divider()
|
|
138
|
+
|
|
139
|
+
await execPromise('npm install', { logger: log, packageName: 'setup' })
|
|
140
|
+
log.ready('Dependencies installed')
|
|
141
|
+
|
|
142
|
+
await execPromise('npm run build', { logger: log, packageName: 'build' })
|
|
143
|
+
log.success('Build complete')
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Switch verbosity from an env flag:
|
|
147
|
+
|
|
148
|
+
```ts
|
|
149
|
+
const log = createLogger({
|
|
150
|
+
level: process.env.CI ? 2 : 4,
|
|
151
|
+
})
|
|
152
|
+
```
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "printBanner"
|
|
3
|
+
description: "Print an ASCII-art banner via figlet with optional version, dividers and clearing - handy for CLI entry points."
|
|
4
|
+
package: "@maz-ui/node"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/node/print-banner"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# printBanner
|
|
9
|
+
|
|
10
|
+
> Print an ASCII-art banner via figlet with optional version, dividers and clearing - handy for CLI entry points.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/node`
|
|
13
|
+
- Import: `import { printBanner } from '@maz-ui/node'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/node/print-banner
|
|
15
|
+
|
|
16
|
+
Print an ASCII-art banner (via [figlet](https://github.com/patorjk/figlet.js)) with optional version, dividers and clearing - handy for CLI entry points.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { printBanner } from '@maz-ui/node'
|
|
22
|
+
|
|
23
|
+
printBanner({
|
|
24
|
+
name: 'maz-cli',
|
|
25
|
+
version: 'v1.0.0',
|
|
26
|
+
})
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Renders:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
███╗ ███╗ █████╗ ███████╗ ██████╗██╗ ██╗
|
|
33
|
+
████╗ ████║██╔══██╗╚══███╔╝ ██╔════╝██║ ██║
|
|
34
|
+
██╔████╔██║███████║ ███╔╝ ██║ ██║ ██║
|
|
35
|
+
██║╚██╔╝██║██╔══██║ ███╔╝ ██║ ██║ ██║
|
|
36
|
+
██║ ╚═╝ ██║██║ ██║███████╗ ╚██████╗███████╗██║
|
|
37
|
+
╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═════╝╚══════╝╚═╝
|
|
38
|
+
|
|
39
|
+
v1.0.0
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## API
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
function printBanner(args: {
|
|
46
|
+
name: string
|
|
47
|
+
version?: string
|
|
48
|
+
options?: FigletOptions & {
|
|
49
|
+
clear?: boolean
|
|
50
|
+
divider?: boolean
|
|
51
|
+
breakBefore?: boolean
|
|
52
|
+
breakAfter?: boolean
|
|
53
|
+
}
|
|
54
|
+
}): void
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
| Parameter | Type | Description |
|
|
58
|
+
| --------- | --------- | -------------------------------------------- |
|
|
59
|
+
| `name` | `string` | Text rendered as ASCII art (required). |
|
|
60
|
+
| `version` | `string` | Optional version line printed under the banner. |
|
|
61
|
+
| `options` | `object` | Figlet options + extras (see below). |
|
|
62
|
+
|
|
63
|
+
### Options
|
|
64
|
+
|
|
65
|
+
| Option | Type | Default | Description |
|
|
66
|
+
| ------------------ | --------- | -------------- | ------------------------------------------------------------------------ |
|
|
67
|
+
| `clear` | `boolean` | `true` | Clear the terminal screen before printing. |
|
|
68
|
+
| `divider` | `boolean` | `false` | Print a separator line after the banner. |
|
|
69
|
+
| `breakBefore` | `boolean` | `true` | Print a blank line before the banner. |
|
|
70
|
+
| `breakAfter` | `boolean` | `true` | Print a blank line after the banner. |
|
|
71
|
+
| `font` | `string` | `'ANSI Shadow'` | Any [figlet font name](https://github.com/patorjk/figlet.js#fonts). |
|
|
72
|
+
| `horizontalLayout` | `string` | `'full'` | Figlet horizontal layout: `'default'`, `'full'`, `'fitted'`, … |
|
|
73
|
+
|
|
74
|
+
All standard [`figlet` options](https://github.com/patorjk/figlet.js#api) are forwarded.
|
|
75
|
+
|
|
76
|
+
## Examples
|
|
77
|
+
|
|
78
|
+
Minimal banner:
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
printBanner({ name: 'maz-cli' })
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Banner with divider, no screen clearing:
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
printBanner({
|
|
88
|
+
name: 'maz-cli',
|
|
89
|
+
version: 'v1.0.0',
|
|
90
|
+
options: { clear: false, divider: true },
|
|
91
|
+
})
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Custom font:
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
printBanner({
|
|
98
|
+
name: 'Hi!',
|
|
99
|
+
options: { font: 'Standard', horizontalLayout: 'fitted' },
|
|
100
|
+
})
|
|
101
|
+
```
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "setupAgents"
|
|
3
|
+
description: "Configure the AI coding agents of a project for maz-ui - version-matched rules for Claude Code and AGENTS.md, and the maz-ui MCP server in the agent configs - without touching the files you own."
|
|
4
|
+
package: "@maz-ui/node"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/node/setup-agents"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# setupAgents
|
|
9
|
+
|
|
10
|
+
> Configure the AI coding agents of a project for maz-ui - version-matched rules for Claude Code and AGENTS.md, and the maz-ui MCP server in the agent configs - without touching the files you own.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/node`
|
|
13
|
+
- Import: `import { setupAgents } from '@maz-ui/node'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/node/setup-agents
|
|
15
|
+
|
|
16
|
+
`setupAgents` is the engine of [`npx @maz-ui/mcp init`](../mcp.md) and of the `agents` option of the [Nuxt module](../nuxt.md#ai-agents). Use it directly to integrate the setup in your own tooling (a project generator, a postinstall script...). See the [AI agents guide](../../guide/ai-agents.md) for what it brings to your agents.
|
|
17
|
+
|
|
18
|
+
## Quick start
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { setupAgents } from '@maz-ui/node'
|
|
22
|
+
|
|
23
|
+
const { changes } = setupAgents({ rootDir: process.cwd() })
|
|
24
|
+
|
|
25
|
+
for (const change of changes) {
|
|
26
|
+
console.log(change.action, change.file)
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## What it writes
|
|
31
|
+
|
|
32
|
+
The content comes from the `docs/agents` folder of the `maz-ui` package installed in `rootDir`, so the rules always match the installed version.
|
|
33
|
+
|
|
34
|
+
| Target | Files |
|
|
35
|
+
| --- | --- |
|
|
36
|
+
| `claude` | `.claude/rules/maz-ui.md` (a Claude Code rule, loaded on top of your `CLAUDE.md`) and the `maz-ui` server in `.mcp.json` |
|
|
37
|
+
| `agents-md` | A section between `<!-- BEGIN:maz-ui -->` and `<!-- END:maz-ui -->` in `AGENTS.md` (Codex, Cursor, Copilot, Windsurf, Zed...) |
|
|
38
|
+
| `cursor` | The `maz-ui` server in `.cursor/mcp.json` |
|
|
39
|
+
| `vscode` | The `maz-ui` server in `.vscode/mcp.json` (GitHub Copilot) |
|
|
40
|
+
|
|
41
|
+
Guarantees:
|
|
42
|
+
|
|
43
|
+
- A file it did not generate is never overwritten (it is reported as `skip`).
|
|
44
|
+
- In `AGENTS.md`, only the delimited section is managed: your content stays as is.
|
|
45
|
+
- MCP config files are edited in place, keeping their formatting and comments. When a server already runs `@maz-ui/mcp` under another name, nothing is added.
|
|
46
|
+
- Without `CLAUDE.md` in the project, Claude Code reads `AGENTS.md`: the Claude rule is then skipped to avoid loading the rules twice.
|
|
47
|
+
- Running it again is idempotent: unchanged files are reported as `unchanged`.
|
|
48
|
+
|
|
49
|
+
## Options
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
import { setupAgents } from '@maz-ui/node'
|
|
53
|
+
|
|
54
|
+
setupAgents({
|
|
55
|
+
rootDir: process.cwd(),
|
|
56
|
+
// Agents to configure, default: the agents detected in the project
|
|
57
|
+
targets: ['claude', 'agents-md', 'cursor', 'vscode'],
|
|
58
|
+
// Write the rules (Claude Code rule, AGENTS.md section), default: true
|
|
59
|
+
rules: true,
|
|
60
|
+
// Register the maz-ui MCP server, default: true
|
|
61
|
+
mcp: true,
|
|
62
|
+
// Compute the changes without writing anything
|
|
63
|
+
dryRun: false,
|
|
64
|
+
// Remove everything setupAgents added
|
|
65
|
+
remove: false,
|
|
66
|
+
// Folder of the maz-ui agent docs, default: node_modules/maz-ui/docs
|
|
67
|
+
docsDir: undefined,
|
|
68
|
+
// Command of the MCP server, default: npx -y @maz-ui/mcp@latest
|
|
69
|
+
mcpServer: { command: 'npx', args: ['-y', '@maz-ui/mcp@latest'] },
|
|
70
|
+
})
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Result
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
import { setupAgents } from '@maz-ui/node'
|
|
77
|
+
|
|
78
|
+
const result = setupAgents({ rootDir: process.cwd(), dryRun: true })
|
|
79
|
+
|
|
80
|
+
result.version // version of the installed maz-ui
|
|
81
|
+
result.targets // configured agents
|
|
82
|
+
result.changes // [{ file: '.mcp.json', action: 'create' | 'update' | 'remove' | 'unchanged' | 'skip', reason?: string }]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Detecting the agents
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
import { detectAgentTargets } from '@maz-ui/node'
|
|
89
|
+
|
|
90
|
+
detectAgentTargets(process.cwd()) // ['claude', 'agents-md']
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
| Target | Detected from |
|
|
94
|
+
| --- | --- |
|
|
95
|
+
| `claude` | `.claude/`, `CLAUDE.md`, `CLAUDE.local.md`, `.mcp.json` |
|
|
96
|
+
| `cursor` | `.cursor/`, `.cursorrules` |
|
|
97
|
+
| `vscode` | `.vscode/mcp.json`, `.github/copilot-instructions.md`, `.github/instructions/` |
|
|
98
|
+
| `agents-md` | `AGENTS.md`, `GEMINI.md`, `.codex/`, `.windsurf/`, `.devin/`, `.windsurfrules`, or any of `cursor` and `vscode` |
|
|
99
|
+
|
|
100
|
+
## Errors
|
|
101
|
+
|
|
102
|
+
`setupAgents` throws when the rules are requested and `maz-ui` is not installed in `rootDir` (or its parent folders), or when the installed version does not ship the agent docs: upgrade maz-ui to the latest version. With `rules: false`, only the MCP server is registered and the docs are not needed.
|