@undp/create-app 0.8.0 → 0.91.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 (37) hide show
  1. package/bin/generateFiles/generateLayoutForNext.js +16 -11
  2. package/bin/generateFiles/generatePackageJson.js +11 -9
  3. package/bin/generateFiles/generateStylesCss.js +2 -3
  4. package/bin/generateFiles/generateViteConfig.js +31 -19
  5. package/bin/generateFiles/index.js +10 -10
  6. package/bin/index.js +142 -101
  7. package/bin/templates/next/auth/app/globals.css +2 -1
  8. package/bin/templates/next/auth/app/layout.tsx +20 -22
  9. package/bin/templates/next/auth/biome.json +7 -2
  10. package/bin/templates/next/basic/app/globals.css +3 -1
  11. package/bin/templates/next/basic/app/layout.tsx +20 -23
  12. package/bin/templates/next/basic/biome.json +7 -2
  13. package/bin/templates/vite/basic/README.md +20 -7
  14. package/bin/templates/vite/basic/biome.json +7 -2
  15. package/bin/templates/vite/basic/src/main.tsx +16 -7
  16. package/bin/templates/vite/basic/src/styles/style.css +1 -2
  17. package/bin/templates/vite/query/README.md +20 -7
  18. package/bin/templates/vite/query/biome.json +7 -2
  19. package/bin/templates/vite/query/src/main.tsx +20 -15
  20. package/bin/templates/vite/query/src/styles/style.css +2 -2
  21. package/bin/templates/vite/query+router/biome.json +7 -2
  22. package/bin/templates/vite/query+router/src/main.tsx +52 -53
  23. package/bin/templates/vite/query+router/src/styles/style.css +2 -2
  24. package/bin/templates/vite/router/biome.json +7 -2
  25. package/bin/templates/vite/router/src/main.tsx +46 -47
  26. package/bin/templates/vite/router/src/styles/style.css +1 -2
  27. package/bin/templates/viteWithLanguage/basic/biome.json +7 -2
  28. package/bin/templates/viteWithLanguage/basic/src/styles/style.css +1 -2
  29. package/bin/templates/viteWithLanguage/query/biome.json +7 -2
  30. package/bin/templates/viteWithLanguage/query/src/styles/style.css +1 -2
  31. package/bin/templates/viteWithLanguage/query+router/biome.json +7 -2
  32. package/bin/templates/viteWithLanguage/query+router/src/main.tsx +70 -71
  33. package/bin/templates/viteWithLanguage/query+router/src/styles/style.css +1 -2
  34. package/bin/templates/viteWithLanguage/router/biome.json +7 -2
  35. package/bin/templates/viteWithLanguage/router/src/main.tsx +62 -66
  36. package/bin/templates/viteWithLanguage/router/src/styles/style.css +1 -2
  37. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.4.8/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.5.15/schema.json",
3
3
  "vcs": {
4
4
  "enabled": true,
5
5
  "clientKind": "git",
@@ -19,7 +19,7 @@
19
19
  "linter": {
20
20
  "enabled": true,
21
21
  "rules": {
22
- "recommended": true,
22
+ "preset": "recommended",
23
23
  "suspicious": {
24
24
  "noExplicitAny": "warn",
25
25
  "noUnassignedVariables": "warn",
@@ -66,5 +66,10 @@
66
66
  "organizeImports": "on"
67
67
  }
68
68
  }
69
+ },
70
+ "css": {
71
+ "parser": {
72
+ "tailwindDirectives": true
73
+ }
69
74
  }
70
75
  }
@@ -57,19 +57,32 @@ To embed the visualization on an external page, include:
57
57
  **HTML Placeholder**
58
58
 
59
59
  ```html
60
- <div id="root"></div>
60
+ <iframe
61
+ id="my-embed"
62
+ src="<url of the app>"
63
+ style="width: 100%; border: 0; display: block;"
64
+ scrolling="no"
65
+ />
61
66
  ```
62
67
 
63
- **Required `<script>` and `<link>` tags**
68
+ **Required `<script>`**
64
69
 
65
70
  ```
66
- <link rel="dns-prefetch" href="{{Visualization URL}}">
67
- <script defer="defer" type="module" src="{{Visualization URL}}/index.js"></script>
68
- <link rel="modulepreload" crossorigin href="{{Visualization URL}}/react-{{hash}}.js">
69
- <link rel="modulepreload" crossorigin href="{{Visualization URL}}/undp-{{hash}}.js">
70
- <link rel="stylesheet" href="{{Visualization URL}}/style.css"></link>
71
+ <script>
72
+ var iframe = document.getElementById('my-embed');
73
+ window.addEventListener('message', function (e) {
74
+ if (e.origin !== 'http://localhost:5173') return;
75
+ if (e.source !== iframe.contentWindow) return;
76
+ if (e.data && e.data.type === 'iframe-height') {
77
+ console.log('new height', e.data.height);
78
+ iframe.style.height = e.data.height + 'px';
79
+ }
80
+ });
81
+ </script>
71
82
  ```
72
83
 
84
+ _This script listens for height messages from the embedded web app and resizes the iframe to match its content, so the app displays without an inner scrollbar._
85
+
73
86
  ## 📬 Contact us
74
87
 
75
88
  For questions or feedback, contact us at [data@undp.org](mailto:data@undp.org).
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.4.8/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.5.15/schema.json",
3
3
  "vcs": {
4
4
  "enabled": true,
5
5
  "clientKind": "git",
@@ -19,7 +19,7 @@
19
19
  "linter": {
20
20
  "enabled": true,
21
21
  "rules": {
22
- "recommended": true,
22
+ "preset": "recommended",
23
23
  "suspicious": {
24
24
  "noExplicitAny": "warn",
25
25
  "noUnassignedVariables": "warn",
@@ -66,5 +66,10 @@
66
66
  "organizeImports": "on"
67
67
  }
68
68
  }
69
+ },
70
+ "css": {
71
+ "parser": {
72
+ "tailwindDirectives": true
73
+ }
69
74
  }
70
75
  }
@@ -1,10 +1,19 @@
1
- import React from 'react';
2
- import ReactDOM from 'react-dom/client';
1
+ import React from "react";
2
+ import ReactDOM from "react-dom/client";
3
3
 
4
- import App from './App';
4
+ import App from "./App";
5
5
 
6
- ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
7
- <React.StrictMode>
8
- <App />
9
- </React.StrictMode>,
6
+ const sendHeightForIframes = () =>
7
+ window.parent.postMessage(
8
+ { type: "iframe-height", height: document.documentElement.scrollHeight },
9
+ "*",
10
+ );
11
+
12
+ new ResizeObserver(sendHeightForIframes).observe(document.documentElement);
13
+ window.addEventListener("load", sendHeightForIframes);
14
+
15
+ ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
16
+ <React.StrictMode>
17
+ <App />
18
+ </React.StrictMode>,
10
19
  );
@@ -1,3 +1,2 @@
1
1
  @import "tailwindcss";
2
- @import "@undp/design-system-react/style.css";
3
- @import "@undp/design-system-react/theme.css";
2
+ @import "@undp/design-system-react/tailwind.css";
@@ -62,19 +62,32 @@ To embed the visualization on an external page, include:
62
62
  **HTML Placeholder**
63
63
 
64
64
  ```html
65
- <div id="root"></div>
65
+ <iframe
66
+ id="my-embed"
67
+ src="<url of the app>"
68
+ style="width: 100%; border: 0; display: block;"
69
+ scrolling="no"
70
+ />
66
71
  ```
67
72
 
68
- **Required `<script>` and `<link>` tags**
73
+ **Required `<script>`**
69
74
 
70
75
  ```
71
- <link rel="dns-prefetch" href="{{Visualization URL}}">
72
- <script defer="defer" type="module" src="{{Visualization URL}}/index.js"></script>
73
- <link rel="modulepreload" crossorigin href="{{Visualization URL}}/react-{{hash}}.js">
74
- <link rel="modulepreload" crossorigin href="{{Visualization URL}}/undp-{{hash}}.js">
75
- <link rel="stylesheet" href="{{Visualization URL}}/style.css"></link>
76
+ <script>
77
+ var iframe = document.getElementById('my-embed');
78
+ window.addEventListener('message', function (e) {
79
+ if (e.origin !== 'http://localhost:5173') return;
80
+ if (e.source !== iframe.contentWindow) return;
81
+ if (e.data && e.data.type === 'iframe-height') {
82
+ console.log('new height', e.data.height);
83
+ iframe.style.height = e.data.height + 'px';
84
+ }
85
+ });
86
+ </script>
76
87
  ```
77
88
 
89
+ _This script listens for height messages from the embedded web app and resizes the iframe to match its content, so the app displays without an inner scrollbar._
90
+
78
91
  ## 📬 Contact us
79
92
 
80
93
  For questions or feedback, contact us at [data@undp.org](mailto:data@undp.org).
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.4.8/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.5.15/schema.json",
3
3
  "vcs": {
4
4
  "enabled": true,
5
5
  "clientKind": "git",
@@ -19,7 +19,7 @@
19
19
  "linter": {
20
20
  "enabled": true,
21
21
  "rules": {
22
- "recommended": true,
22
+ "preset": "recommended",
23
23
  "suspicious": {
24
24
  "noExplicitAny": "warn",
25
25
  "noUnassignedVariables": "warn",
@@ -66,5 +66,10 @@
66
66
  "organizeImports": "on"
67
67
  }
68
68
  }
69
+ },
70
+ "css": {
71
+ "parser": {
72
+ "tailwindDirectives": true
73
+ }
69
74
  }
70
75
  }
@@ -1,21 +1,26 @@
1
- import { StrictMode } from 'react';
2
- import ReactDOM from 'react-dom/client';
1
+ import { StrictMode } from "react";
2
+ import ReactDOM from "react-dom/client";
3
+ import App from "./App";
4
+ import * as TanStackQueryProvider from "./integration/tanstack-query";
3
5
 
4
- import * as TanStackQueryProvider from './integration/tanstack-query';
5
- import App from './App';
6
+ const sendHeightForIframes = () =>
7
+ window.parent.postMessage(
8
+ { type: "iframe-height", height: document.documentElement.scrollHeight },
9
+ "*",
10
+ );
6
11
 
7
- import './styles/fonts.css';
8
- import './styles/style.css';
12
+ new ResizeObserver(sendHeightForIframes).observe(document.documentElement);
13
+ window.addEventListener("load", sendHeightForIframes);
9
14
 
10
15
  const TanStackQueryProviderContext = TanStackQueryProvider.getContext();
11
- const rootElement = document.getElementById('root');
16
+ const rootElement = document.getElementById("root");
12
17
  if (rootElement) {
13
- const root = ReactDOM.createRoot(rootElement);
14
- root.render(
15
- <StrictMode>
16
- <TanStackQueryProvider.Provider {...TanStackQueryProviderContext}>
17
- <App />
18
- </TanStackQueryProvider.Provider>
19
- </StrictMode>,
20
- );
18
+ const root = ReactDOM.createRoot(rootElement);
19
+ root.render(
20
+ <StrictMode>
21
+ <TanStackQueryProvider.Provider {...TanStackQueryProviderContext}>
22
+ <App />
23
+ </TanStackQueryProvider.Provider>
24
+ </StrictMode>,
25
+ );
21
26
  }
@@ -1,2 +1,2 @@
1
- @import 'tailwindcss';
2
- @import '@undp/design-system-react/style.css';
1
+ @import "tailwindcss";
2
+ @import "@undp/design-system-react/tailwind.css";
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.4.8/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.5.15/schema.json",
3
3
  "vcs": {
4
4
  "enabled": true,
5
5
  "clientKind": "git",
@@ -19,7 +19,7 @@
19
19
  "linter": {
20
20
  "enabled": true,
21
21
  "rules": {
22
- "recommended": true,
22
+ "preset": "recommended",
23
23
  "suspicious": {
24
24
  "noExplicitAny": "warn",
25
25
  "noUnassignedVariables": "warn",
@@ -66,5 +66,10 @@
66
66
  "organizeImports": "on"
67
67
  }
68
68
  }
69
+ },
70
+ "css": {
71
+ "parser": {
72
+ "tailwindDirectives": true
73
+ }
69
74
  }
70
75
  }
@@ -1,73 +1,72 @@
1
- import { StrictMode } from 'react';
2
- import ReactDOM from 'react-dom/client';
3
1
  import {
4
- Outlet,
5
- RouterProvider,
6
- createRootRoute,
7
- createRoute,
8
- createRouter,
9
- } from '@tanstack/react-router';
2
+ createRootRoute,
3
+ createRoute,
4
+ createRouter,
5
+ Outlet,
6
+ RouterProvider,
7
+ } from "@tanstack/react-router";
8
+ import { StrictMode } from "react";
9
+ import ReactDOM from "react-dom/client";
10
+ import App from "./App";
11
+ import FooterEl from "./components/Footer";
12
+ import HeaderEl from "./components/Header";
13
+ import * as TanStackQueryProvider from "./integration/tanstack-query";
14
+ import createTanStackQueryDemoRoute from "./routes/queryDemo.route";
10
15
 
11
- import * as TanStackQueryProvider from './integration/tanstack-query';
12
- import HeaderEl from './components/Header';
13
- import FooterEl from './components/Footer';
14
- import App from './App';
15
- import createTanStackQueryDemoRoute from './routes/queryDemo.route';
16
-
17
- import './styles/fonts.css';
18
- import './styles/style.css';
16
+ import "./styles/fonts.css";
17
+ import "./styles/style.css";
19
18
 
20
19
  const rootRoute = createRootRoute({
21
- component: () => (
22
- <div className='flex flex-col gap-0 min-h-screen'>
23
- <HeaderEl />
24
- <main className='grow-1 flex flex-col justify-center'>
25
- <div className='flex flex-col justify-center'>
26
- <Outlet />
27
- </div>
28
- </main>
29
- <FooterEl />
30
- </div>
31
- ),
20
+ component: () => (
21
+ <div className="flex flex-col gap-0 min-h-screen">
22
+ <HeaderEl />
23
+ <main className="grow flex flex-col justify-center">
24
+ <div className="flex flex-col justify-center">
25
+ <Outlet />
26
+ </div>
27
+ </main>
28
+ <FooterEl />
29
+ </div>
30
+ ),
32
31
  });
33
32
 
34
33
  const indexRoute = createRoute({
35
- getParentRoute: () => rootRoute,
36
- path: '/',
37
- component: App,
34
+ getParentRoute: () => rootRoute,
35
+ path: "/",
36
+ component: App,
38
37
  });
39
38
 
40
39
  const routeTree = rootRoute.addChildren([
41
- indexRoute,
42
- createTanStackQueryDemoRoute(rootRoute),
40
+ indexRoute,
41
+ createTanStackQueryDemoRoute(rootRoute),
43
42
  ]);
44
43
 
45
44
  const TanStackQueryProviderContext = TanStackQueryProvider.getContext();
46
45
  const router = createRouter({
47
- routeTree,
48
- context: {
49
- ...TanStackQueryProviderContext,
50
- },
51
- defaultPreload: 'intent',
52
- scrollRestoration: true,
53
- defaultStructuralSharing: true,
54
- defaultPreloadStaleTime: 0,
46
+ routeTree,
47
+ context: {
48
+ ...TanStackQueryProviderContext,
49
+ },
50
+ defaultPreload: "intent",
51
+ scrollRestoration: true,
52
+ defaultStructuralSharing: true,
53
+ defaultPreloadStaleTime: 0,
55
54
  });
56
55
 
57
- declare module '@tanstack/react-router' {
58
- interface Register {
59
- router: typeof router;
60
- }
56
+ declare module "@tanstack/react-router" {
57
+ interface Register {
58
+ router: typeof router;
59
+ }
61
60
  }
62
61
 
63
- const rootElement = document.getElementById('root');
62
+ const rootElement = document.getElementById("root");
64
63
  if (rootElement) {
65
- const root = ReactDOM.createRoot(rootElement);
66
- root.render(
67
- <StrictMode>
68
- <TanStackQueryProvider.Provider {...TanStackQueryProviderContext}>
69
- <RouterProvider router={router} />
70
- </TanStackQueryProvider.Provider>
71
- </StrictMode>,
72
- );
64
+ const root = ReactDOM.createRoot(rootElement);
65
+ root.render(
66
+ <StrictMode>
67
+ <TanStackQueryProvider.Provider {...TanStackQueryProviderContext}>
68
+ <RouterProvider router={router} />
69
+ </TanStackQueryProvider.Provider>
70
+ </StrictMode>,
71
+ );
73
72
  }
@@ -1,2 +1,2 @@
1
- @import 'tailwindcss';
2
- @import '@undp/design-system-react/style.css';
1
+ @import "tailwindcss";
2
+ @import "@undp/design-system-react/tailwind.css";
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.4.8/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.5.15/schema.json",
3
3
  "vcs": {
4
4
  "enabled": true,
5
5
  "clientKind": "git",
@@ -19,7 +19,7 @@
19
19
  "linter": {
20
20
  "enabled": true,
21
21
  "rules": {
22
- "recommended": true,
22
+ "preset": "recommended",
23
23
  "suspicious": {
24
24
  "noExplicitAny": "warn",
25
25
  "noUnassignedVariables": "warn",
@@ -66,5 +66,10 @@
66
66
  "organizeImports": "on"
67
67
  }
68
68
  }
69
+ },
70
+ "css": {
71
+ "parser": {
72
+ "tailwindDirectives": true
73
+ }
69
74
  }
70
75
  }
@@ -1,66 +1,65 @@
1
- import { StrictMode } from 'react';
2
- import ReactDOM from 'react-dom/client';
3
1
  import {
4
- Outlet,
5
- RouterProvider,
6
- createRootRoute,
7
- createRoute,
8
- createRouter,
9
- } from '@tanstack/react-router';
2
+ createRootRoute,
3
+ createRoute,
4
+ createRouter,
5
+ Outlet,
6
+ RouterProvider,
7
+ } from "@tanstack/react-router";
8
+ import { StrictMode } from "react";
9
+ import ReactDOM from "react-dom/client";
10
+ import App from "./App";
11
+ import FooterEl from "./components/Footer";
12
+ import HeaderEl from "./components/Header";
13
+ import createAboutRoute from "./routes/about.route";
10
14
 
11
- import HeaderEl from './components/Header';
12
- import FooterEl from './components/Footer';
13
- import App from './App';
14
- import createAboutRoute from './routes/about.route';
15
-
16
- import './styles/fonts.css';
17
- import './styles/style.css';
15
+ import "./styles/fonts.css";
16
+ import "./styles/style.css";
18
17
 
19
18
  const rootRoute = createRootRoute({
20
- component: () => (
21
- <div className='flex flex-col gap-0 min-h-screen'>
22
- <HeaderEl />
23
- <main className='grow-1 flex flex-col justify-center'>
24
- <div className='flex flex-col justify-center'>
25
- <Outlet />
26
- </div>
27
- </main>
28
- <FooterEl />
29
- </div>
30
- ),
19
+ component: () => (
20
+ <div className="flex flex-col gap-0 min-h-screen">
21
+ <HeaderEl />
22
+ <main className="grow flex flex-col justify-center">
23
+ <div className="flex flex-col justify-center">
24
+ <Outlet />
25
+ </div>
26
+ </main>
27
+ <FooterEl />
28
+ </div>
29
+ ),
31
30
  });
32
31
 
33
32
  const indexRoute = createRoute({
34
- getParentRoute: () => rootRoute,
35
- path: '/',
36
- component: App,
33
+ getParentRoute: () => rootRoute,
34
+ path: "/",
35
+ component: App,
37
36
  });
38
37
 
39
38
  const routeTree = rootRoute.addChildren([
40
- indexRoute,
41
- createAboutRoute(rootRoute),
39
+ indexRoute,
40
+ createAboutRoute(rootRoute),
42
41
  ]);
43
42
 
44
43
  const router = createRouter({
45
- routeTree,
46
- defaultPreload: 'intent',
47
- scrollRestoration: true,
48
- defaultStructuralSharing: true,
49
- defaultPreloadStaleTime: 0,
44
+ routeTree,
45
+ defaultPreload: "intent",
46
+ scrollRestoration: true,
47
+ defaultStructuralSharing: true,
48
+ defaultPreloadStaleTime: 0,
50
49
  });
51
50
 
52
- declare module '@tanstack/react-router' {
53
- interface Register {
54
- router: typeof router;
55
- }
51
+ declare module "@tanstack/react-router" {
52
+ interface Register {
53
+ router: typeof router;
54
+ }
56
55
  }
57
56
 
58
- const rootElement = document.getElementById('root');
57
+ const rootElement = document.getElementById("root");
59
58
  if (rootElement) {
60
- const root = ReactDOM.createRoot(rootElement);
61
- root.render(
62
- <StrictMode>
63
- <RouterProvider router={router} />
64
- </StrictMode>,
65
- );
59
+ const root = ReactDOM.createRoot(rootElement);
60
+ root.render(
61
+ <StrictMode>
62
+ <RouterProvider router={router} />
63
+ </StrictMode>,
64
+ );
66
65
  }
@@ -1,3 +1,2 @@
1
1
  @import "tailwindcss";
2
- @import "@undp/design-system-react/style.css";
3
- @import "@undp/design-system-react/theme.css";
2
+ @import "@undp/design-system-react/tailwind.css";
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.4.8/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.5.15/schema.json",
3
3
  "vcs": {
4
4
  "enabled": true,
5
5
  "clientKind": "git",
@@ -19,7 +19,7 @@
19
19
  "linter": {
20
20
  "enabled": true,
21
21
  "rules": {
22
- "recommended": true,
22
+ "preset": "recommended",
23
23
  "suspicious": {
24
24
  "noExplicitAny": "warn",
25
25
  "noUnassignedVariables": "warn",
@@ -66,5 +66,10 @@
66
66
  "organizeImports": "on"
67
67
  }
68
68
  }
69
+ },
70
+ "css": {
71
+ "parser": {
72
+ "tailwindDirectives": true
73
+ }
69
74
  }
70
75
  }
@@ -1,3 +1,2 @@
1
1
  @import "tailwindcss";
2
- @import "@undp/design-system-react/style.css";
3
- @import "@undp/design-system-react/theme.css";
2
+ @import "@undp/design-system-react/tailwind.css";
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.4.8/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.5.15/schema.json",
3
3
  "vcs": {
4
4
  "enabled": true,
5
5
  "clientKind": "git",
@@ -19,7 +19,7 @@
19
19
  "linter": {
20
20
  "enabled": true,
21
21
  "rules": {
22
- "recommended": true,
22
+ "preset": "recommended",
23
23
  "suspicious": {
24
24
  "noExplicitAny": "warn",
25
25
  "noUnassignedVariables": "warn",
@@ -66,5 +66,10 @@
66
66
  "organizeImports": "on"
67
67
  }
68
68
  }
69
+ },
70
+ "css": {
71
+ "parser": {
72
+ "tailwindDirectives": true
73
+ }
69
74
  }
70
75
  }
@@ -1,3 +1,2 @@
1
1
  @import "tailwindcss";
2
- @import "@undp/design-system-react/style.css";
3
- @import "@undp/design-system-react/theme.css";
2
+ @import "@undp/design-system-react/tailwind.css";
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.4.8/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.5.15/schema.json",
3
3
  "vcs": {
4
4
  "enabled": true,
5
5
  "clientKind": "git",
@@ -19,7 +19,7 @@
19
19
  "linter": {
20
20
  "enabled": true,
21
21
  "rules": {
22
- "recommended": true,
22
+ "preset": "recommended",
23
23
  "suspicious": {
24
24
  "noExplicitAny": "warn",
25
25
  "noUnassignedVariables": "warn",
@@ -66,5 +66,10 @@
66
66
  "organizeImports": "on"
67
67
  }
68
68
  }
69
+ },
70
+ "css": {
71
+ "parser": {
72
+ "tailwindDirectives": true
73
+ }
69
74
  }
70
75
  }