@scalepad/ui 0.1.0 → 0.2.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/README.md CHANGED
@@ -4,51 +4,198 @@ ScalePad's LM Design System for React. A Mantine 9 + vanilla-extract component l
4
4
 
5
5
  > **Private package.** This package is published under the `@scalepad` org with `access=restricted`. To install it, your npm user must be a member of the `@scalepad` npm org (or you must use an automation token scoped to the `@scalepad` scope in your CI).
6
6
 
7
+ ## TL;DR for Vite users
8
+
9
+ ```bash
10
+ # 1. Install @scalepad/ui plus the small set of peers it shares with your app.
11
+ # Mantine ships inside @scalepad/ui — do NOT install it yourself.
12
+ pnpm add @scalepad/ui @scalepad/ui-utils \
13
+ @tanstack/react-query@^5.0.0 @tanstack/react-table@^8.21.3 \
14
+ @vanilla-extract/css@^1.16.2 dayjs@^1.11.19 \
15
+ lucide-react@^0.469.0 react@^19.0.0 react-dom@^19.0.0
16
+ ```
17
+
18
+ ```ts
19
+ // 2. vite.config.ts — one plugin, zero further config.
20
+ import react from '@vitejs/plugin-react';
21
+ import { defineConfig } from 'vite';
22
+ import { scalepadUi } from '@scalepad/ui/vite';
23
+
24
+ export default defineConfig({
25
+ plugins: [react(), scalepadUi()],
26
+ });
27
+ ```
28
+
29
+ ```tsx
30
+ // 3. main.tsx
31
+ import '@mantine/core/styles.css'; // brought in transitively via @scalepad/ui
32
+ import { ThemeProvider } from '@scalepad/ui';
33
+
34
+ export function Root() {
35
+ return (
36
+ <ThemeProvider>
37
+ <App />
38
+ </ThemeProvider>
39
+ );
40
+ }
41
+ ```
42
+
43
+ That's it. No Mantine install. No Vite `optimizeDeps` config. No version-pin chess.
44
+
45
+ ## What's in the box
46
+
47
+ | Package | Where it lives | Notes |
48
+ |---|---|---|
49
+ | `@mantine/core`, `dates`, `hooks`, `notifications`, `schedule`, `tiptap`, `vanilla-extract` | Bundled into `@scalepad/ui` as runtime dependencies. | You don't install these. They come in transitively. |
50
+ | `recharts` | Same. | Loaded only when you import from `@scalepad/ui/charts`. |
51
+ | `clsx`, `react-intersection-observer` | Same. | Internal. |
52
+ | `@vanilla-extract/vite-plugin` | Same. | The `scalepadUi()` Vite preset uses it; you don't install it. |
53
+
7
54
  ## Install
8
55
 
9
56
  ```bash
10
- npm install @scalepad/ui @scalepad/ui-utils
11
- # or
12
57
  pnpm add @scalepad/ui @scalepad/ui-utils
13
58
  # or
59
+ npm install @scalepad/ui @scalepad/ui-utils
60
+ # or
14
61
  yarn add @scalepad/ui @scalepad/ui-utils
15
62
  ```
16
63
 
17
- `@scalepad/ui` ships with a long list of peer dependencies. Most are picky about version (Mantine, in particular, dedupes badly across mismatched copies). The fastest way to install them all in one command:
64
+ ### Required peers
65
+
66
+ These are packages your application code uses directly, so they MUST be the same instance shared with `@scalepad/ui`. Install them all in one go with the TL;DR command above.
67
+
68
+ | Package | Pin | Why it stays a peer |
69
+ |---|---|---|
70
+ | `react` / `react-dom` | `^19.0.0` | React reconciler is a singleton. React 18 is not supported. |
71
+ | `@tanstack/react-query` | `^5.0.0` | The `QueryClient` you create and provide must be the same instance `@scalepad/ui` uses. |
72
+ | `@tanstack/react-table` | `^8.21.3` | You define column / row types using its exports. |
73
+ | `@vanilla-extract/css` | `^1.16.2` | Your own `.css.ts` files import `style` / `globalStyle` directly. |
74
+ | `dayjs` | `^1.11.19` | Date helpers from `@scalepad/ui-utils` extend dayjs plugins on the shared instance. |
75
+ | `lucide-react` | `^0.469.0` | You import icons (`<Plus />`, `<Search />`, etc.) directly in your features. |
76
+
77
+ ### Optional features (rich-text editor)
78
+
79
+ The rich-text editor (`RichTextEditor`, `RichTextView`, `RichTextInline`, `EditableRichText`, `SlashRichTextEditor`) leans on Tiptap. Tiptap is kept as **optional peers** (not bundled into `@scalepad/ui`) so external adopters can pin their own Tiptap version if they need to. Notifications (`Notifications`, `showSuccessToast`, `showErrorToast`) ship in `@mantine/notifications`, which is bundled into `@scalepad/ui` — you don't install it separately.
80
+
81
+ If you use any of the rich-text components, install the full Tiptap set:
18
82
 
19
83
  ```bash
20
- pnpm add @mantine/core@9.0.1 @mantine/dates@9.0.1 @mantine/hooks@9.0.1 \
21
- @mantine/notifications@^9.0.1 @mantine/schedule@9.0.1 @mantine/tiptap@^9.0.1 \
22
- @mantine/vanilla-extract@^9.0.1 \
23
- @tanstack/react-query@^5.0.0 @tanstack/react-table@^8.21.3 \
24
- @tiptap/extension-bubble-menu@3.22.3 @tiptap/extension-image@3.22.3 \
25
- @tiptap/extension-link@3.22.3 @tiptap/extension-placeholder@3.22.3 \
26
- @tiptap/extension-underline@3.22.3 @tiptap/pm@3.22.3 @tiptap/react@3.22.3 \
27
- @tiptap/starter-kit@3.22.3 @tiptap/suggestion@3.22.3 \
28
- @vanilla-extract/css@^1.16.2 clsx@^2.1.1 dayjs@^1.11.19 geist@^1.5.1 \
29
- lucide-react@^0.469.0 react@^19.0.0 react-dom@^19.0.0 \
30
- react-intersection-observer@^10.0.0 recharts@^3.6.0
84
+ pnpm add @tiptap/core@^3.22.3 @tiptap/extensions@^3.22.3 \
85
+ @tiptap/pm@^3.22.3 @tiptap/react@^3.22.3 \
86
+ @tiptap/starter-kit@^3.22.3 @tiptap/suggestion@^3.22.3 \
87
+ @tiptap/extension-bubble-menu@^3.22.3 @tiptap/extension-image@^3.22.3 \
88
+ @tiptap/extension-link@^3.22.3 @tiptap/extension-placeholder@^3.22.3 \
89
+ @tiptap/extension-underline@^3.22.3 \
90
+ @tiptap/extension-blockquote@^3.22.3 @tiptap/extension-bold@^3.22.3 \
91
+ @tiptap/extension-bullet-list@^3.22.3 @tiptap/extension-code@^3.22.3 \
92
+ @tiptap/extension-code-block@^3.22.3 @tiptap/extension-document@^3.22.3 \
93
+ @tiptap/extension-dropcursor@^3.22.3 @tiptap/extension-gapcursor@^3.22.3 \
94
+ @tiptap/extension-hard-break@^3.22.3 @tiptap/extension-heading@^3.22.3 \
95
+ @tiptap/extension-horizontal-rule@^3.22.3 @tiptap/extension-italic@^3.22.3 \
96
+ @tiptap/extension-list@^3.22.3 @tiptap/extension-list-item@^3.22.3 \
97
+ @tiptap/extension-list-keymap@^3.22.3 @tiptap/extension-ordered-list@^3.22.3 \
98
+ @tiptap/extension-paragraph@^3.22.3 @tiptap/extension-strike@^3.22.3 \
99
+ @tiptap/extension-text@^3.22.3
100
+ ```
101
+
102
+ Tiptap v3 split `starter-kit` into many separately-published packages. Partial installs error in production with cryptic `Cannot find module '@tiptap/extension-…'` messages, so install the whole set together.
103
+
104
+ > **Pin all Tiptap packages to the same range.** Tiptap publishes the whole family in lockstep and uses exact-version internal peer deps (e.g. `@tiptap/extension-floating-menu@3.23.6` peers on `@tiptap/core@3.23.6` exactly). Using a caret `^3.22.3` range here lets your package manager resolve every Tiptap package to the same latest 3.x patch (currently 3.23.6) in one go. Pinning individual Tiptap packages to different exact versions will produce `npm warn ERESOLVE` warnings about mismatched optional-peer versions.
105
+
106
+ > **Note on TypeScript:** because `@scalepad/ui` ships source and re-exports a few Tiptap types (`JSONContent` from `@tiptap/react`) from its main barrel, `tsc` may need those types resolvable even if you don't use the rich-text editor at runtime. If you see `Cannot find module '@tiptap/react'` from `tsc` in a project that doesn't use the editor, install the Tiptap peers above. A future split of the barrel will remove this requirement.
107
+
108
+ ## Bundler setup
109
+
110
+ ### Vite (recommended — use the preset)
111
+
112
+ ```ts
113
+ import react from '@vitejs/plugin-react';
114
+ import { defineConfig } from 'vite';
115
+ import { scalepadUi } from '@scalepad/ui/vite';
116
+
117
+ export default defineConfig({
118
+ plugins: [react(), scalepadUi()],
119
+ });
120
+ ```
121
+
122
+ The preset wires up two things consumers commonly miss:
123
+
124
+ 1. The vanilla-extract Vite plugin (`@vanilla-extract/vite-plugin`), so every `.css.ts` file inside `node_modules/@scalepad/ui` is compiled at build time.
125
+ 2. `optimizeDeps.exclude: ['@scalepad/ui']` + `optimizeDeps.include: ['@mantine/dates', '@mantine/schedule', '@tiptap/react', 'dayjs', 'fast-deep-equal', 'prop-types']`, which together let Vite's esbuild pre-bundling step succeed (it can't ingest `.css.ts` files on its own) and ensure the transitive CommonJS deps reached through the excluded package still get pre-bundled.
126
+
127
+ You can extend the include list or pass options through to the vanilla-extract plugin:
128
+
129
+ ```ts
130
+ import { scalepadUi } from '@scalepad/ui/vite';
131
+
132
+ scalepadUi({
133
+ optimizeDepsInclude: ['some-other-cjs-package'],
134
+ vanillaExtract: { /* @vanilla-extract/vite-plugin options */ },
135
+ });
136
+ ```
137
+
138
+ ### Vite (manual setup, if you don't want the preset)
139
+
140
+ If you'd rather wire everything yourself — for example, because you already use the vanilla-extract plugin from another source — install the plugin and replicate the config the preset would have set:
141
+
142
+ ```bash
143
+ pnpm add -D @vanilla-extract/vite-plugin
144
+ ```
145
+
146
+ ```ts
147
+ import { vanillaExtractPlugin } from '@vanilla-extract/vite-plugin';
148
+ import react from '@vitejs/plugin-react';
149
+ import { defineConfig } from 'vite';
150
+
151
+ export default defineConfig({
152
+ plugins: [react(), vanillaExtractPlugin()],
153
+ optimizeDeps: {
154
+ exclude: ['@scalepad/ui'],
155
+ include: [
156
+ '@mantine/dates',
157
+ '@mantine/schedule',
158
+ '@tiptap/react',
159
+ 'dayjs',
160
+ 'fast-deep-equal',
161
+ 'prop-types',
162
+ ],
163
+ },
164
+ });
31
165
  ```
32
166
 
33
- ## Toolchain prerequisites
167
+ ### Webpack / Rspack
34
168
 
35
- This package distributes as TypeScript + vanilla-extract source — your bundler does the compilation. You MUST have all of the following wired up:
169
+ ```bash
170
+ pnpm add -D @vanilla-extract/webpack-plugin mini-css-extract-plugin
171
+ ```
172
+
173
+ Add the plugin per the [vanilla-extract webpack docs](https://vanilla-extract.style/documentation/integrations/webpack/). The default include pattern picks up `.css.ts` files inside `node_modules/@scalepad/ui` automatically.
36
174
 
37
- 1. **React 19** (`react@^19.0.0`, `react-dom@^19.0.0`). React 18 is not supported.
38
- 2. **A bundler with the vanilla-extract plugin.** All `.css.ts` files inside `node_modules/@scalepad/ui` must be processed at build time.
39
- - **Vite**: `npm install -D @vanilla-extract/vite-plugin` and add it to your `vite.config.ts`. The default include pattern picks up `node_modules/@scalepad/ui/**/*.css.ts` automatically.
40
- - **Webpack / Rspack**: `@vanilla-extract/webpack-plugin`. Same default.
41
- - **Next.js**: install the Next.js vanilla-extract plugin, AND add `transpilePackages: ['@scalepad/ui', '@scalepad/ui-utils']` to your `next.config.js`. Next.js skips transpiling `node_modules` by default; without `transpilePackages`, the TypeScript source in this package will fail to parse.
42
- 3. **TypeScript `moduleResolution` set to `bundler` or `node16` / `nodenext`.** The classic `node` resolution does not understand the subpath conditional exports in this package's `exports` map.
43
- 4. **Mantine 9.x global styles.** Either `import '@mantine/core/styles.css'` once at app entry, or wire up the `postcss-preset-mantine` PostCSS plugin per Mantine's docs.
44
- 5. **A live `ThemeProvider` wrapping your app** — see "Quick start" below.
175
+ ### Next.js
176
+
177
+ ```bash
178
+ pnpm add -D @vanilla-extract/next-plugin
179
+ ```
180
+
181
+ ```js
182
+ // next.config.js
183
+ const { createVanillaExtractPlugin } = require('@vanilla-extract/next-plugin');
184
+ const withVanillaExtract = createVanillaExtractPlugin();
185
+
186
+ module.exports = withVanillaExtract({
187
+ transpilePackages: ['@scalepad/ui', '@scalepad/ui-utils'],
188
+ });
189
+ ```
190
+
191
+ Next.js skips transpiling `node_modules` by default; without `transpilePackages`, the TypeScript source in this package fails to parse.
45
192
 
46
193
  ## Quick start
47
194
 
48
195
  ```tsx
49
196
  // src/main.tsx
50
- import { ThemeProvider } from '@scalepad/ui';
51
197
  import '@mantine/core/styles.css';
198
+ import { ThemeProvider } from '@scalepad/ui';
52
199
 
53
200
  import { App } from './App';
54
201
 
@@ -63,7 +210,7 @@ export function Root() {
63
210
 
64
211
  ```tsx
65
212
  // src/components/CreateClient.tsx
66
- import { Button, ConfirmationModal, Text } from '@scalepad/ui';
213
+ import { Button, Text } from '@scalepad/ui';
67
214
  import { Plus } from 'lucide-react';
68
215
 
69
216
  export function CreateClient() {
@@ -77,13 +224,64 @@ export function CreateClient() {
77
224
 
78
225
  ## Entrypoints
79
226
 
80
- The package exposes three import paths:
81
-
82
227
  | Import | Use for |
83
228
  |---|---|
84
229
  | `@scalepad/ui` | Main UI surface — components, hooks, `ThemeProvider`, design tokens, type augmentations |
85
230
  | `@scalepad/ui/charts` | Recharts-based chart components and selected raw recharts exports. Lives behind a subpath so the main bundle doesn't pull in recharts unless you import charts. |
86
231
  | `@scalepad/ui/mantine` | Raw Mantine pass-throughs for components without a design-system wrapper yet. Prefer the main entry — use this only when the design-system equivalent is missing. |
232
+ | `@scalepad/ui/vite` | Vite preset — `scalepadUi()` returns the vanilla-extract plugin + the right `optimizeDeps` config. Import-only from a `vite.config.ts`. |
233
+
234
+ ## Migration from 0.1.x
235
+
236
+ If you were on `@scalepad/ui@0.1.x`, Mantine, recharts, clsx, and `react-intersection-observer` used to be peer dependencies you installed yourself. They are now bundled into `@scalepad/ui` as regular dependencies, so:
237
+
238
+ 1. **Remove these from your `package.json`** if they're not used directly by your application code (they almost certainly aren't):
239
+
240
+ ```diff
241
+ - "@mantine/core": "...",
242
+ - "@mantine/dates": "...",
243
+ - "@mantine/hooks": "...",
244
+ - "@mantine/notifications": "...",
245
+ - "@mantine/schedule": "...",
246
+ - "@mantine/tiptap": "...",
247
+ - "@mantine/vanilla-extract": "...",
248
+ - "recharts": "...",
249
+ - "clsx": "...",
250
+ - "react-intersection-observer": "...",
251
+ ```
252
+
253
+ Leaving Mantine in your own dependencies is harmful — it creates **two copies** of `@mantine/core` in your bundle (yours + the one shipped with `@scalepad/ui`), which breaks Mantine's React context (modals don't open, theme doesn't apply, focus traps don't trap). Remove them.
254
+
255
+ 2. **Re-run `pnpm install`** (or `npm install` / `yarn install`).
256
+ 3. **Keep importing Mantine through `@scalepad/ui`**, never directly: `import { Button } from '@scalepad/ui'`, not `import { Button } from '@mantine/core'`.
257
+
258
+ ## Troubleshooting
259
+
260
+ ### `Cannot find module '@tiptap/core'` / `@tiptap/extensions` / similar
261
+
262
+ You're using a component from the rich-text editor (`RichTextEditor`, `EditableRichText`, `SlashRichTextEditor`, `RichTextView`, `RichTextInline`) without installing the optional Tiptap peer set. Install them with the block under "Optional features → Rich-text editor" above.
263
+
264
+ ### Modals don't open, theme doesn't apply, or `useMantineTheme()` returns undefined
265
+
266
+ You have two copies of `@mantine/core` in your bundle. Most commonly because `@mantine/core` is still listed in your own `package.json` after upgrading to `@scalepad/ui@0.2.x+`. Remove it (see "Migration from 0.1.x") and reinstall.
267
+
268
+ ### Vite throws on a `.css.ts` file inside `node_modules/@scalepad/ui`
269
+
270
+ The vanilla-extract Vite plugin isn't wired up, or the package is being pre-bundled by esbuild before the plugin sees it. Either:
271
+
272
+ - Use the preset: `import { scalepadUi } from '@scalepad/ui/vite'`, OR
273
+ - If wiring manually, make sure your `vite.config.ts` has BOTH `vanillaExtractPlugin()` in `plugins` AND `optimizeDeps.exclude: ['@scalepad/ui']`. Missing either one will fail.
274
+
275
+ ### `The requested module '…@mantine/dates' does not provide an export named '…'` (or similar from `@tiptap/react`, `dayjs`, `prop-types`)
276
+
277
+ These are CommonJS-or-mixed-module deps that Vite's dep scanner can't walk through once `@scalepad/ui` is excluded from pre-bundling. Either:
278
+
279
+ - Use the preset (it already lists them), OR
280
+ - Add them to `optimizeDeps.include` in your `vite.config.ts`. The current set the preset uses is `['@mantine/dates', '@mantine/schedule', '@tiptap/react', 'dayjs', 'fast-deep-equal', 'prop-types']`.
281
+
282
+ ### TypeScript errors referencing `@tiptap/react` in a project that doesn't use the rich-text editor
283
+
284
+ Because `@scalepad/ui` ships source, its main barrel re-exports a couple of Tiptap types. Install the rich-text peer set or stop importing from the main barrel. See the "Note on TypeScript" callout under "Optional features" above.
87
285
 
88
286
  ## Figma Code Connect
89
287
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scalepad/ui",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "ScalePad LM Design System — React + Mantine 9 + vanilla-extract component library",
@@ -10,11 +10,16 @@
10
10
  "exports": {
11
11
  ".": "./src/index.ts",
12
12
  "./charts": "./src/charts.ts",
13
- "./mantine": "./src/mantine.ts"
13
+ "./mantine": "./src/mantine.ts",
14
+ "./vite": {
15
+ "types": "./src/vite.d.ts",
16
+ "default": "./src/vite.js"
17
+ }
14
18
  },
15
19
  "files": [
16
20
  "src/**/*.ts",
17
21
  "src/**/*.tsx",
22
+ "src/**/*.js",
18
23
  "!src/**/*.test.ts",
19
24
  "!src/**/*.test.tsx",
20
25
  "!src/**/*.story.ts",
@@ -28,7 +33,8 @@
28
33
  "AGENTS.md",
29
34
  ".ai/**/*.md",
30
35
  "figma.config.json",
31
- "scripts/install-ai-rules.mjs"
36
+ "scripts/install-ai-rules.mjs",
37
+ "scripts/verify-consumption.mjs"
32
38
  ],
33
39
  "bin": {
34
40
  "scalepad-ui-install-ai-rules": "./scripts/install-ai-rules.mjs"
@@ -36,48 +42,158 @@
36
42
  "publishConfig": {
37
43
  "access": "restricted"
38
44
  },
45
+ "dependencies": {
46
+ "@mantine/core": "9.2.1",
47
+ "@mantine/dates": "9.2.1",
48
+ "@mantine/hooks": "9.2.1",
49
+ "@mantine/notifications": "9.2.1",
50
+ "@mantine/schedule": "9.2.1",
51
+ "@mantine/tiptap": "9.2.1",
52
+ "@mantine/vanilla-extract": "9.2.1",
53
+ "@vanilla-extract/vite-plugin": "^5.0.0",
54
+ "clsx": "^2.1.1",
55
+ "react-intersection-observer": "^10.0.0",
56
+ "recharts": "^3.6.0",
57
+ "@scalepad/ui-utils": "0.1.0"
58
+ },
39
59
  "peerDependencies": {
40
- "@mantine/core": "9.0.1",
41
- "@mantine/dates": "9.0.1",
42
- "@mantine/hooks": "9.0.1",
43
- "@mantine/notifications": "^9.0.1",
44
- "@mantine/schedule": "9.0.1",
45
- "@mantine/tiptap": "^9.0.1",
46
- "@mantine/vanilla-extract": "^9.0.1",
47
60
  "@tanstack/react-query": "^5.0.0",
48
61
  "@tanstack/react-table": "^8.21.3",
49
- "@tiptap/extension-bubble-menu": "3.22.3",
50
- "@tiptap/extension-image": "3.22.3",
51
- "@tiptap/extension-link": "3.22.3",
52
- "@tiptap/extension-placeholder": "3.22.3",
53
- "@tiptap/extension-underline": "3.22.3",
54
- "@tiptap/pm": "3.22.3",
55
- "@tiptap/react": "3.22.3",
56
- "@tiptap/starter-kit": "3.22.3",
57
- "@tiptap/suggestion": "3.22.3",
62
+ "@tiptap/core": "^3.22.3",
63
+ "@tiptap/extension-blockquote": "^3.22.3",
64
+ "@tiptap/extension-bold": "^3.22.3",
65
+ "@tiptap/extension-bubble-menu": "^3.22.3",
66
+ "@tiptap/extension-bullet-list": "^3.22.3",
67
+ "@tiptap/extension-code": "^3.22.3",
68
+ "@tiptap/extension-code-block": "^3.22.3",
69
+ "@tiptap/extension-document": "^3.22.3",
70
+ "@tiptap/extension-dropcursor": "^3.22.3",
71
+ "@tiptap/extension-gapcursor": "^3.22.3",
72
+ "@tiptap/extension-hard-break": "^3.22.3",
73
+ "@tiptap/extension-heading": "^3.22.3",
74
+ "@tiptap/extension-horizontal-rule": "^3.22.3",
75
+ "@tiptap/extension-image": "^3.22.3",
76
+ "@tiptap/extension-italic": "^3.22.3",
77
+ "@tiptap/extension-link": "^3.22.3",
78
+ "@tiptap/extension-list": "^3.22.3",
79
+ "@tiptap/extension-list-item": "^3.22.3",
80
+ "@tiptap/extension-list-keymap": "^3.22.3",
81
+ "@tiptap/extension-ordered-list": "^3.22.3",
82
+ "@tiptap/extension-paragraph": "^3.22.3",
83
+ "@tiptap/extension-placeholder": "^3.22.3",
84
+ "@tiptap/extension-strike": "^3.22.3",
85
+ "@tiptap/extension-text": "^3.22.3",
86
+ "@tiptap/extension-underline": "^3.22.3",
87
+ "@tiptap/extensions": "^3.22.3",
88
+ "@tiptap/pm": "^3.22.3",
89
+ "@tiptap/react": "^3.22.3",
90
+ "@tiptap/starter-kit": "^3.22.3",
91
+ "@tiptap/suggestion": "^3.22.3",
58
92
  "@vanilla-extract/css": "^1.16.2",
59
- "clsx": "^2.1.1",
60
93
  "dayjs": "^1.11.19",
61
- "geist": "^1.5.1",
62
94
  "lucide-react": "^0.469.0",
63
95
  "react": "^19.0.0",
64
96
  "react-dom": "^19.0.0",
65
- "react-intersection-observer": "^10.0.0",
66
- "recharts": "^3.6.0"
97
+ "vite": "^7.0.0"
67
98
  },
68
- "dependencies": {
69
- "@scalepad/ui-utils": "0.1.0"
99
+ "peerDependenciesMeta": {
100
+ "@tiptap/core": {
101
+ "optional": true
102
+ },
103
+ "@tiptap/extension-blockquote": {
104
+ "optional": true
105
+ },
106
+ "@tiptap/extension-bold": {
107
+ "optional": true
108
+ },
109
+ "@tiptap/extension-bubble-menu": {
110
+ "optional": true
111
+ },
112
+ "@tiptap/extension-bullet-list": {
113
+ "optional": true
114
+ },
115
+ "@tiptap/extension-code": {
116
+ "optional": true
117
+ },
118
+ "@tiptap/extension-code-block": {
119
+ "optional": true
120
+ },
121
+ "@tiptap/extension-document": {
122
+ "optional": true
123
+ },
124
+ "@tiptap/extension-dropcursor": {
125
+ "optional": true
126
+ },
127
+ "@tiptap/extension-gapcursor": {
128
+ "optional": true
129
+ },
130
+ "@tiptap/extension-hard-break": {
131
+ "optional": true
132
+ },
133
+ "@tiptap/extension-heading": {
134
+ "optional": true
135
+ },
136
+ "@tiptap/extension-horizontal-rule": {
137
+ "optional": true
138
+ },
139
+ "@tiptap/extension-image": {
140
+ "optional": true
141
+ },
142
+ "@tiptap/extension-italic": {
143
+ "optional": true
144
+ },
145
+ "@tiptap/extension-link": {
146
+ "optional": true
147
+ },
148
+ "@tiptap/extension-list": {
149
+ "optional": true
150
+ },
151
+ "@tiptap/extension-list-item": {
152
+ "optional": true
153
+ },
154
+ "@tiptap/extension-list-keymap": {
155
+ "optional": true
156
+ },
157
+ "@tiptap/extension-ordered-list": {
158
+ "optional": true
159
+ },
160
+ "@tiptap/extension-paragraph": {
161
+ "optional": true
162
+ },
163
+ "@tiptap/extension-placeholder": {
164
+ "optional": true
165
+ },
166
+ "@tiptap/extension-strike": {
167
+ "optional": true
168
+ },
169
+ "@tiptap/extension-text": {
170
+ "optional": true
171
+ },
172
+ "@tiptap/extension-underline": {
173
+ "optional": true
174
+ },
175
+ "@tiptap/extensions": {
176
+ "optional": true
177
+ },
178
+ "@tiptap/pm": {
179
+ "optional": true
180
+ },
181
+ "@tiptap/react": {
182
+ "optional": true
183
+ },
184
+ "@tiptap/starter-kit": {
185
+ "optional": true
186
+ },
187
+ "@tiptap/suggestion": {
188
+ "optional": true
189
+ },
190
+ "vite": {
191
+ "optional": true
192
+ }
70
193
  },
71
194
  "devDependencies": {
72
195
  "@chromatic-com/storybook": "^5.0.0",
73
196
  "@figma/code-connect": "^1.3.13",
74
- "@mantine/core": "9.0.1",
75
- "@mantine/dates": "9.0.1",
76
- "@mantine/hooks": "9.0.1",
77
- "@mantine/notifications": "^9.0.1",
78
- "@mantine/schedule": "9.0.1",
79
- "@mantine/tiptap": "^9.0.1",
80
- "@mantine/vanilla-extract": "^9.0.1",
81
197
  "@storybook/addon-themes": "^10.0.0",
82
198
  "@storybook/addon-vitest": "^10.1.11",
83
199
  "@storybook/react": "^10.0.0",
@@ -96,20 +212,15 @@
96
212
  "@types/react": "^19.2.2",
97
213
  "@types/react-dom": "^19.2.1",
98
214
  "@vanilla-extract/css": "^1.16.2",
99
- "@vanilla-extract/vite-plugin": "^4.0.0",
100
215
  "@vitejs/plugin-react": "^5.0.4",
101
216
  "@vitest/browser-playwright": "^4.0.17",
102
217
  "@vitest/coverage-v8": "^4.0.17",
103
- "clsx": "^2.1.1",
104
218
  "dayjs": "^1.11.19",
105
- "geist": "^1.5.1",
106
219
  "lucide-react": "^0.469.0",
107
220
  "playwright": "^1.57.0",
108
221
  "prop-types": "^15.8.1",
109
222
  "react": "^19.0.0",
110
223
  "react-dom": "^19.0.0",
111
- "react-intersection-observer": "^10.0.0",
112
- "recharts": "^3.6.0",
113
224
  "storybook": "^10.0.0",
114
225
  "typescript": "^6.0.3",
115
226
  "typescript-plugin-css-modules": "^5.2.0",
@@ -122,6 +233,7 @@
122
233
  "test": "exit 0",
123
234
  "storybook": "storybook dev -p 6006",
124
235
  "storybook:build": "storybook build",
125
- "sync:ai-rules": "node ./scripts/sync-ai-rules.mjs"
236
+ "sync:ai-rules": "node ./scripts/sync-ai-rules.mjs",
237
+ "verify:consumption": "node ./scripts/verify-consumption.mjs"
126
238
  }
127
239
  }