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.
Files changed (186) hide show
  1. package/dist/assets/{MazDropzone.DJ8au25t.css → MazDropzone.BW2grpTi.css} +1 -1
  2. package/dist/chunks/{MazDrawer.DANxKYxJ.js → MazDrawer.CC8zomfx.js} +2 -2
  3. package/dist/chunks/{MazDropzone.POH3pmfi.js → MazDropzone.Dez5j0WP.js} +2 -2
  4. package/dist/components/MazDrawer.js +1 -1
  5. package/dist/components/MazDropzone.js +1 -1
  6. package/dist/components/MazDropzone.vue.d.ts +2 -2
  7. package/dist/components/MazInputPrice.vue.d.ts +1 -1
  8. package/dist/components/index.js +2 -2
  9. package/docs/README.md +207 -0
  10. package/docs/agents/agents-md.md +52 -0
  11. package/docs/agents/claude-rule.md +52 -0
  12. package/docs/components/maz-accordion.md +76 -0
  13. package/docs/components/maz-alert.md +241 -0
  14. package/docs/components/maz-animated-counter.md +87 -0
  15. package/docs/components/maz-animated-element.md +46 -0
  16. package/docs/components/maz-animated-text.md +53 -0
  17. package/docs/components/maz-avatar.md +193 -0
  18. package/docs/components/maz-backdrop.md +178 -0
  19. package/docs/components/maz-badge.md +167 -0
  20. package/docs/components/maz-bottom-sheet.md +257 -0
  21. package/docs/components/maz-btn-group.md +316 -0
  22. package/docs/components/maz-btn.md +423 -0
  23. package/docs/components/maz-card-spotlight.md +84 -0
  24. package/docs/components/maz-card.md +321 -0
  25. package/docs/components/maz-carousel.md +153 -0
  26. package/docs/components/maz-chart.md +206 -0
  27. package/docs/components/maz-checkbox.md +138 -0
  28. package/docs/components/maz-checklist.md +251 -0
  29. package/docs/components/maz-circular-progress-bar.md +109 -0
  30. package/docs/components/maz-code-highlight.md +155 -0
  31. package/docs/components/maz-container.md +241 -0
  32. package/docs/components/maz-date-picker.md +791 -0
  33. package/docs/components/maz-dialog-confirm.md +215 -0
  34. package/docs/components/maz-dialog.md +143 -0
  35. package/docs/components/maz-drawer.md +106 -0
  36. package/docs/components/maz-dropdown.md +419 -0
  37. package/docs/components/maz-dropzone.md +387 -0
  38. package/docs/components/maz-expand-animation.md +82 -0
  39. package/docs/components/maz-fullscreen-loader.md +58 -0
  40. package/docs/components/maz-gallery.md +79 -0
  41. package/docs/components/maz-icon.md +203 -0
  42. package/docs/components/maz-input-code.md +73 -0
  43. package/docs/components/maz-input-number.md +79 -0
  44. package/docs/components/maz-input-phone-number.md +536 -0
  45. package/docs/components/maz-input-price.md +68 -0
  46. package/docs/components/maz-input-tags.md +112 -0
  47. package/docs/components/maz-input.md +334 -0
  48. package/docs/components/maz-lazy-img.md +113 -0
  49. package/docs/components/maz-link.md +146 -0
  50. package/docs/components/maz-loading-bar.md +38 -0
  51. package/docs/components/maz-markdown-editor.md +320 -0
  52. package/docs/components/maz-pagination.md +82 -0
  53. package/docs/components/maz-popover.md +794 -0
  54. package/docs/components/maz-pull-to-refresh.md +222 -0
  55. package/docs/components/maz-radio-buttons.md +313 -0
  56. package/docs/components/maz-radio.md +119 -0
  57. package/docs/components/maz-read-more.md +209 -0
  58. package/docs/components/maz-reading-progress-bar.md +96 -0
  59. package/docs/components/maz-select-country.md +513 -0
  60. package/docs/components/maz-select.md +318 -0
  61. package/docs/components/maz-sidebar-content.md +25 -0
  62. package/docs/components/maz-sidebar-footer.md +25 -0
  63. package/docs/components/maz-sidebar-group.md +27 -0
  64. package/docs/components/maz-sidebar-header.md +25 -0
  65. package/docs/components/maz-sidebar-menu-button.md +41 -0
  66. package/docs/components/maz-sidebar-menu-item.md +25 -0
  67. package/docs/components/maz-sidebar-menu-sub.md +32 -0
  68. package/docs/components/maz-sidebar-menu.md +25 -0
  69. package/docs/components/maz-sidebar-separator.md +21 -0
  70. package/docs/components/maz-sidebar-trigger.md +25 -0
  71. package/docs/components/maz-sidebar.md +507 -0
  72. package/docs/components/maz-skeleton.md +226 -0
  73. package/docs/components/maz-slider.md +165 -0
  74. package/docs/components/maz-spinner.md +84 -0
  75. package/docs/components/maz-stepper.md +301 -0
  76. package/docs/components/maz-switch.md +86 -0
  77. package/docs/components/maz-table-cell.md +27 -0
  78. package/docs/components/maz-table-row.md +28 -0
  79. package/docs/components/maz-table-title.md +27 -0
  80. package/docs/components/maz-table-virtualizer.md +31 -0
  81. package/docs/components/maz-table.md +426 -0
  82. package/docs/components/maz-tabs-bar.md +43 -0
  83. package/docs/components/maz-tabs-content-item.md +27 -0
  84. package/docs/components/maz-tabs-content.md +27 -0
  85. package/docs/components/maz-tabs.md +308 -0
  86. package/docs/components/maz-textarea.md +255 -0
  87. package/docs/components/maz-ticker.md +427 -0
  88. package/docs/components/maz-timeline.md +304 -0
  89. package/docs/components/maz-ui-provider.md +26 -0
  90. package/docs/components/maz-window-mockup.md +182 -0
  91. package/docs/composables/use-aos.md +41 -0
  92. package/docs/composables/use-breakpoints.md +42 -0
  93. package/docs/composables/use-dialog.md +58 -0
  94. package/docs/composables/use-display-names.md +130 -0
  95. package/docs/composables/use-drag.md +185 -0
  96. package/docs/composables/use-form-validator.md +1123 -0
  97. package/docs/composables/use-idle-timeout.md +172 -0
  98. package/docs/composables/use-pull-to-refresh.md +86 -0
  99. package/docs/composables/use-reading-time.md +132 -0
  100. package/docs/composables/use-string-matching.md +41 -0
  101. package/docs/composables/use-swipe.md +171 -0
  102. package/docs/composables/use-timer.md +104 -0
  103. package/docs/composables/use-toast.md +50 -0
  104. package/docs/composables/use-user-visibility.md +127 -0
  105. package/docs/composables/use-wait.md +50 -0
  106. package/docs/composables/use-window-size.md +25 -0
  107. package/docs/directives/click-outside.md +182 -0
  108. package/docs/directives/fullscreen-img.md +83 -0
  109. package/docs/directives/lazy-img.md +182 -0
  110. package/docs/directives/tooltip.md +298 -0
  111. package/docs/directives/zoom-img.md +100 -0
  112. package/docs/ecosystem/eslint-config.md +289 -0
  113. package/docs/ecosystem/icons/icon-set.md +25 -0
  114. package/docs/ecosystem/icons/index.md +584 -0
  115. package/docs/ecosystem/mcp.md +165 -0
  116. package/docs/ecosystem/node/exec-promise.md +93 -0
  117. package/docs/ecosystem/node/index.md +53 -0
  118. package/docs/ecosystem/node/logger.md +152 -0
  119. package/docs/ecosystem/node/print-banner.md +101 -0
  120. package/docs/ecosystem/node/setup-agents.md +102 -0
  121. package/docs/ecosystem/nuxt.md +551 -0
  122. package/docs/ecosystem/stylelint-config.md +310 -0
  123. package/docs/ecosystem/themes.md +966 -0
  124. package/docs/ecosystem/translations.md +1173 -0
  125. package/docs/ecosystem/utils/camel-case.md +37 -0
  126. package/docs/ecosystem/utils/capitalize.md +37 -0
  127. package/docs/ecosystem/utils/check-availability.md +85 -0
  128. package/docs/ecosystem/utils/cookie.md +86 -0
  129. package/docs/ecosystem/utils/country-code-to-unicode-flag.md +128 -0
  130. package/docs/ecosystem/utils/currency.md +53 -0
  131. package/docs/ecosystem/utils/date.md +53 -0
  132. package/docs/ecosystem/utils/debounce-callback.md +44 -0
  133. package/docs/ecosystem/utils/debounce-id.md +75 -0
  134. package/docs/ecosystem/utils/debounce.md +71 -0
  135. package/docs/ecosystem/utils/fetch-locale-ip.md +39 -0
  136. package/docs/ecosystem/utils/format-json.md +39 -0
  137. package/docs/ecosystem/utils/format-phone-number.md +43 -0
  138. package/docs/ecosystem/utils/get-browser-locale.md +35 -0
  139. package/docs/ecosystem/utils/get-country-flag-url.md +67 -0
  140. package/docs/ecosystem/utils/get-error-message.md +45 -0
  141. package/docs/ecosystem/utils/idle-timeout.md +96 -0
  142. package/docs/ecosystem/utils/index.md +57 -0
  143. package/docs/ecosystem/utils/is-client.md +38 -0
  144. package/docs/ecosystem/utils/is-equal.md +44 -0
  145. package/docs/ecosystem/utils/is-ios.md +43 -0
  146. package/docs/ecosystem/utils/is-server.md +37 -0
  147. package/docs/ecosystem/utils/is-standalone-mode.md +49 -0
  148. package/docs/ecosystem/utils/kebab-case.md +42 -0
  149. package/docs/ecosystem/utils/normalize-string.md +83 -0
  150. package/docs/ecosystem/utils/number.md +51 -0
  151. package/docs/ecosystem/utils/pascal-case.md +41 -0
  152. package/docs/ecosystem/utils/prevent-ios-input-zoom.md +72 -0
  153. package/docs/ecosystem/utils/script-loader.md +85 -0
  154. package/docs/ecosystem/utils/sleep.md +65 -0
  155. package/docs/ecosystem/utils/snake-case.md +42 -0
  156. package/docs/ecosystem/utils/swipe-handler.md +97 -0
  157. package/docs/ecosystem/utils/textarea-autogrow.md +47 -0
  158. package/docs/ecosystem/utils/throttle-id.md +54 -0
  159. package/docs/ecosystem/utils/throttle.md +63 -0
  160. package/docs/ecosystem/utils/truthy-filter.md +37 -0
  161. package/docs/ecosystem/utils/types/deep-key-of.md +54 -0
  162. package/docs/ecosystem/utils/types/deep-partial.md +48 -0
  163. package/docs/ecosystem/utils/types/deep-required.md +45 -0
  164. package/docs/ecosystem/utils/types/flatten-object-keys.md +50 -0
  165. package/docs/ecosystem/utils/types/generic-instance-type.md +48 -0
  166. package/docs/ecosystem/utils/types/infer-maybe-ref.md +41 -0
  167. package/docs/ecosystem/utils/upper-first.md +38 -0
  168. package/docs/ecosystem/utils/user-visibility.md +75 -0
  169. package/docs/guide/ai-agents.md +237 -0
  170. package/docs/guide/browser-support.md +88 -0
  171. package/docs/guide/getting-started.md +191 -0
  172. package/docs/guide/global-defaults.md +103 -0
  173. package/docs/guide/maz-ui-provider.md +231 -0
  174. package/docs/guide/migration-v5.md +871 -0
  175. package/docs/guide/resolvers.md +650 -0
  176. package/docs/guide/tailwind.md +483 -0
  177. package/docs/guide/vue.md +286 -0
  178. package/docs/manifest.json +1 -0
  179. package/docs/plugins/aos.md +312 -0
  180. package/docs/plugins/dialog.md +269 -0
  181. package/docs/plugins/toast.md +221 -0
  182. package/docs/plugins/wait.md +78 -0
  183. package/docs/reference/icons.md +46 -0
  184. package/docs/reference/tailwind-tokens.md +191 -0
  185. package/docs/rules.md +57 -0
  186. 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.