Merge branch 'dev' into fix/cookie-config

This commit is contained in:
Ubbe
2025-06-19 19:28:07 +04:00
committed by GitHub
22 changed files with 1335 additions and 258 deletions

View File

@@ -590,7 +590,7 @@ async def execute_graph(
dependencies=[Depends(auth_middleware)],
)
async def stop_graph_run(
graph_exec_id: str, user_id: Annotated[str, Depends(get_user_id)]
graph_id: str, graph_exec_id: str, user_id: Annotated[str, Depends(get_user_id)]
) -> execution_db.GraphExecution:
if not await execution_db.get_graph_execution_meta(
user_id=user_id, execution_id=graph_exec_id

View File

@@ -1,7 +1,12 @@
import type { StorybookConfig } from "@storybook/nextjs";
const config: StorybookConfig = {
stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
stories: [
"../src/components/overview.stories.@(js|jsx|mjs|ts|tsx)",
"../src/components/tokens/**/*.stories.@(js|jsx|mjs|ts|tsx)",
"../src/components/atoms/**/*.stories.@(js|jsx|mjs|ts|tsx)",
"../src/components/agptui/**/*.stories.@(js|jsx|mjs|ts|tsx)",
],
addons: [
"@storybook/addon-a11y",
"@storybook/addon-onboarding",

View File

@@ -1,18 +1,17 @@
import React from "react";
import { initialize, mswLoader } from "msw-storybook-addon";
import "../src/app/globals.css";
import "../src/components/styles/fonts.css";
import {
Controls,
Description,
Primary,
Source,
Stories,
Subtitle,
Title,
} from "@storybook/addon-docs/blocks";
import { theme } from "./theme";
import { Preview } from "@storybook/nextjs";
import { initialize, mswLoader } from "msw-storybook-addon";
import React from "react";
import "../src/app/globals.css";
import "../src/components/styles/fonts.css";
import { theme } from "./theme";
// Initialize MSW
initialize();

View File

@@ -50,6 +50,7 @@
"@sentry/nextjs": "9.27.0",
"@supabase/ssr": "0.6.1",
"@supabase/supabase-js": "2.50.0",
"@tanstack/react-query": "5.80.7",
"@tanstack/react-table": "8.21.3",
"@types/jaro-winkler": "0.2.4",
"@xyflow/react": "12.6.4",
@@ -91,14 +92,14 @@
},
"devDependencies": {
"@chromatic-com/storybook": "4.0.0",
"@playwright/test": "1.52.0",
"@storybook/addon-a11y": "9.0.11",
"@storybook/addon-docs": "9.0.11",
"@storybook/addon-links": "9.0.11",
"@storybook/addon-onboarding": "9.0.11",
"@storybook/nextjs": "9.0.11",
"@playwright/test": "1.53.1",
"@storybook/addon-a11y": "9.0.12",
"@storybook/addon-docs": "9.0.12",
"@storybook/addon-links": "9.0.12",
"@storybook/addon-onboarding": "9.0.12",
"@storybook/nextjs": "9.0.12",
"@types/canvas-confetti": "1.9.0",
"@types/lodash": "4.17.17",
"@types/lodash": "4.17.18",
"@types/negotiator": "0.6.4",
"@types/node": "22.15.30",
"@types/react": "18.3.17",
@@ -108,16 +109,16 @@
"chromatic": "11.25.2",
"concurrently": "9.1.2",
"eslint": "8.57.1",
"eslint-config-next": "15.3.3",
"eslint-plugin-storybook": "9.0.11",
"import-in-the-middle": "1.14.0",
"eslint-config-next": "15.3.4",
"eslint-plugin-storybook": "9.0.12",
"import-in-the-middle": "1.14.2",
"msw": "2.10.2",
"msw-storybook-addon": "2.0.5",
"postcss": "8.5.4",
"postcss": "8.5.6",
"prettier": "3.5.3",
"prettier-plugin-tailwindcss": "0.6.12",
"require-in-the-middle": "7.5.2",
"storybook": "9.0.11",
"storybook": "9.0.12",
"tailwindcss": "3.4.17",
"typescript": "5.8.3"
},

View File

@@ -16,7 +16,7 @@ importers:
version: 5.1.1(react-hook-form@7.57.0(react@18.3.1))
'@next/third-parties':
specifier: 15.3.3
version: 15.3.3(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
version: 15.3.3(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@phosphor-icons/react':
specifier: 2.1.10
version: 2.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -79,13 +79,16 @@ importers:
version: 1.2.7(@types/react-dom@18.3.5(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@sentry/nextjs':
specifier: 9.27.0
version: 9.27.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.99.9(esbuild@0.25.5))
version: 9.27.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.99.9(esbuild@0.25.5))
'@supabase/ssr':
specifier: 0.6.1
version: 0.6.1(@supabase/supabase-js@2.50.0)
'@supabase/supabase-js':
specifier: 2.50.0
version: 2.50.0
'@tanstack/react-query':
specifier: 5.80.7
version: 5.80.7(react@18.3.1)
'@tanstack/react-table':
specifier: 8.21.3
version: 8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -130,7 +133,7 @@ importers:
version: 12.16.0(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
geist:
specifier: 1.4.2
version: 1.4.2(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
version: 1.4.2(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
jaro-winkler:
specifier: 0.2.8
version: 0.2.8
@@ -148,7 +151,7 @@ importers:
version: 2.30.1
next:
specifier: 15.3.3
version: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
version: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-themes:
specifier: 0.4.6
version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -203,31 +206,31 @@ importers:
devDependencies:
'@chromatic-com/storybook':
specifier: 4.0.0
version: 4.0.0(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))
version: 4.0.0(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@playwright/test':
specifier: 1.52.0
version: 1.52.0
specifier: 1.53.1
version: 1.53.1
'@storybook/addon-a11y':
specifier: 9.0.11
version: 9.0.11(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))
specifier: 9.0.12
version: 9.0.12(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@storybook/addon-docs':
specifier: 9.0.11
version: 9.0.11(@types/react@18.3.17)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))
specifier: 9.0.12
version: 9.0.12(@types/react@18.3.17)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@storybook/addon-links':
specifier: 9.0.11
version: 9.0.11(react@18.3.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))
specifier: 9.0.12
version: 9.0.12(react@18.3.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@storybook/addon-onboarding':
specifier: 9.0.11
version: 9.0.11(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))
specifier: 9.0.12
version: 9.0.12(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@storybook/nextjs':
specifier: 9.0.11
version: 9.0.11(esbuild@0.25.5)(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))
specifier: 9.0.12
version: 9.0.12(esbuild@0.25.5)(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))
'@types/canvas-confetti':
specifier: 1.9.0
version: 1.9.0
'@types/lodash':
specifier: 4.17.17
version: 4.17.17
specifier: 4.17.18
version: 4.17.18
'@types/negotiator':
specifier: 0.6.4
version: 0.6.4
@@ -245,7 +248,7 @@ importers:
version: 3.16.3
axe-playwright:
specifier: 2.1.0
version: 2.1.0(playwright@1.53.0)
version: 2.1.0(playwright@1.53.1)
chromatic:
specifier: 11.25.2
version: 11.25.2
@@ -256,14 +259,14 @@ importers:
specifier: 8.57.1
version: 8.57.1
eslint-config-next:
specifier: 15.3.3
version: 15.3.3(eslint@8.57.1)(typescript@5.8.3)
specifier: 15.3.4
version: 15.3.4(eslint@8.57.1)(typescript@5.8.3)
eslint-plugin-storybook:
specifier: 9.0.11
version: 9.0.11(eslint@8.57.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)
specifier: 9.0.12
version: 9.0.12(eslint@8.57.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)
import-in-the-middle:
specifier: 1.14.0
version: 1.14.0
specifier: 1.14.2
version: 1.14.2
msw:
specifier: 2.10.2
version: 2.10.2(@types/node@22.15.30)(typescript@5.8.3)
@@ -271,8 +274,8 @@ importers:
specifier: 2.0.5
version: 2.0.5(msw@2.10.2(@types/node@22.15.30)(typescript@5.8.3))
postcss:
specifier: 8.5.4
version: 8.5.4
specifier: 8.5.6
version: 8.5.6
prettier:
specifier: 3.5.3
version: 3.5.3
@@ -283,8 +286,8 @@ importers:
specifier: 7.5.2
version: 7.5.2
storybook:
specifier: 9.0.11
version: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
specifier: 9.0.12
version: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
tailwindcss:
specifier: 3.4.17
version: 3.4.17
@@ -1292,8 +1295,8 @@ packages:
'@next/env@15.3.3':
resolution: {integrity: sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==}
'@next/eslint-plugin-next@15.3.3':
resolution: {integrity: sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==}
'@next/eslint-plugin-next@15.3.4':
resolution: {integrity: sha512-lBxYdj7TI8phbJcLSAqDt57nIcobEign5NYIKCiy0hXQhrUbTqLqOaSDi568U6vFg4hJfBdZYsG4iP/uKhCqgg==}
'@next/swc-darwin-arm64@15.3.3':
resolution: {integrity: sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==}
@@ -1573,8 +1576,8 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
'@playwright/test@1.52.0':
resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==}
'@playwright/test@1.53.1':
resolution: {integrity: sha512-Z4c23LHV0muZ8hfv4jw6HngPJkbbtZxTkxPNIg7cJcTc9C28N/p2q7g3JZS2SiKBBHJ3uM1dgDye66bB7LEk5w==}
engines: {node: '>=18'}
hasBin: true
@@ -2362,48 +2365,48 @@ packages:
'@standard-schema/utils@0.3.0':
resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==}
'@storybook/addon-a11y@9.0.11':
resolution: {integrity: sha512-MJ4hMQ74L5G/E8ygJQPqcFTrnYfRASdioQfcpOM80Uw1mufhm0OTdBKIutdbjx9WjFz6HZAIyRtduI++Y0tong==}
'@storybook/addon-a11y@9.0.12':
resolution: {integrity: sha512-xdJPYNxYU6A3DA48h6y0o3XziCp4YDGXcFKkc5Ce1GPFCa7ebFFh2trHqzevoFSGdQxWc5M3W0A4dhQtkpT4Ww==}
peerDependencies:
storybook: ^9.0.11
storybook: ^9.0.12
'@storybook/addon-docs@9.0.11':
resolution: {integrity: sha512-SvhNGhkh9SBoVgIE/hXi/JNxErC/nk0AmMJL3l0bE+MNoswTacq9vFRjanxgn5h5CO6ErPldqshHCIkqAnRmfA==}
'@storybook/addon-docs@9.0.12':
resolution: {integrity: sha512-bAuFy4BWGEBIC0EAS4N+V8mHj7NZiSdDnJUSr4Al3znEVzNHLpQAMRznkga2Ok8x+gwcyBG7W47dLbDXVqLZDg==}
peerDependencies:
storybook: ^9.0.11
storybook: ^9.0.12
'@storybook/addon-links@9.0.11':
resolution: {integrity: sha512-W9JmvEOzc6FCpHaV4CSJNqO0wPOnnA/m6DvC1DQxmpvyWFDrIioOa/2zdVIvV358zug30q3flqiGFxzRGSsXyQ==}
'@storybook/addon-links@9.0.12':
resolution: {integrity: sha512-Ix7WXnCMkEWrgBrGCoZAFH276Xj/4g8e5Kao9BSZneUBjJJC2LuCaTftGeiM4kQ7sKBPOc/L6zIyusWckBvXIQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
storybook: ^9.0.11
storybook: ^9.0.12
peerDependenciesMeta:
react:
optional: true
'@storybook/addon-onboarding@9.0.11':
resolution: {integrity: sha512-YGeNh/aJ3ExJmreok9OZrEd+610+04SX0yfUElJpeDM6wNraJCdoZsGGufrpFArtR2ZJbx/Igptv6thAHEG4fA==}
'@storybook/addon-onboarding@9.0.12':
resolution: {integrity: sha512-hqgaINYMDiA2op+Cb77LvwdJkgpMUMAnp5ugJjkn5icLpSTkZxnaQrlC0lTHOZBxUjR5NlS2ApSAuMvrCXQLAw==}
peerDependencies:
storybook: ^9.0.11
storybook: ^9.0.12
'@storybook/builder-webpack5@9.0.11':
resolution: {integrity: sha512-91vSdY8sg1hbaPFmZ5dsacRqmd0dkLRgkrXuDV1Qd0iTh2NPFP78poit+ztSBC0nn8DFxEAV0C4DSfbbv4Qjtg==}
'@storybook/builder-webpack5@9.0.12':
resolution: {integrity: sha512-zfmGYZjDppYPZZgSwW9ZRfIrCvshZcLombKmVEodlt/RMs5N5zaTCNf5p7+Z1BBcRpH5HXHWjwmrlobW6LzsLg==}
peerDependencies:
storybook: ^9.0.11
storybook: ^9.0.12
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
'@storybook/core-webpack@9.0.11':
resolution: {integrity: sha512-G7XfPGrFE9z70KNNvYaL3UsB0MosAY65cFr0dSe5hdnYBA2sDJH0sFiUf/SUkrXxvgJxvnZakmSsbc9Qtw5v5A==}
'@storybook/core-webpack@9.0.12':
resolution: {integrity: sha512-soFgpQh8pfba94YjkFBMNO4460/NEhdWe2WUPJs5drz2tOyGSElYma9KKjkbn+SQtr4qG0Xu7P56e8DJMXiMDg==}
peerDependencies:
storybook: ^9.0.11
storybook: ^9.0.12
'@storybook/csf-plugin@9.0.11':
resolution: {integrity: sha512-uJc8ovkAjUbBT5zLPPubBBEIpYOFG5zY5yDbgunq3ZrhWJl3axBe3mHJJ7RH4FtgKw3gKpn7Z5vNqWpMuL5Tbw==}
'@storybook/csf-plugin@9.0.12':
resolution: {integrity: sha512-5EueJQJAu77Lh+EedG4Q/kEOZNlTY/g+fWsT7B5DTtLVy0ypnghsHY8X3KYT/0+NNgTtoO0if4F+ejVYaLnMzA==}
peerDependencies:
storybook: ^9.0.11
storybook: ^9.0.12
'@storybook/global@5.0.0':
resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
@@ -2415,14 +2418,14 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
'@storybook/nextjs@9.0.11':
resolution: {integrity: sha512-RZbSV5wT4gU/+e+HyMm3HOzK3Svxpt0Gc5ChDGV7HQ9hY8uZow2BLUwiOVOuScCGwVnadDE/aLo/vZDVMwCbEQ==}
'@storybook/nextjs@9.0.12':
resolution: {integrity: sha512-7+toUNcn17S1MlJTMj3miZ3ev8WIeWcr/2OVbwzFp+BKyZVVOXd5+YSWBqwg+k4H5CmwTrFYegQ3Yp2lqzgKoA==}
engines: {node: '>=20.0.0'}
peerDependencies:
next: ^14.1.0 || ^15.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
storybook: ^9.0.11
storybook: ^9.0.12
typescript: '*'
webpack: ^5.0.0
peerDependenciesMeta:
@@ -2431,13 +2434,13 @@ packages:
webpack:
optional: true
'@storybook/preset-react-webpack@9.0.11':
resolution: {integrity: sha512-nbgvut+eh4t+xkJUWLRBeD9znJYZkfV4+ePTzgwVE1owfNXLcb/8o3JOXIya/ffo/UVCIfV3pW/u3G1jBXS8Mw==}
'@storybook/preset-react-webpack@9.0.12':
resolution: {integrity: sha512-Tl3Qrll29dwltI4lP15zbeSXqikKa4Ucp6NKf4+W/4adzOqGRjj/bIzO3FsIPoGNs4wfy5DsOgUUPHxI4Jx97w==}
engines: {node: '>=20.0.0'}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
storybook: ^9.0.11
storybook: ^9.0.12
typescript: '*'
peerDependenciesMeta:
typescript:
@@ -2449,20 +2452,20 @@ packages:
typescript: '>= 4.x'
webpack: '>= 4'
'@storybook/react-dom-shim@9.0.11':
resolution: {integrity: sha512-sfuJgQ7zXe8Yak3eiAJwTM+0T1whmvFlpalj1CNpsBVjxESUItgqI8U6Zf1viTe5Z6xR9lgyqxcnCRpSdS02Mg==}
'@storybook/react-dom-shim@9.0.12':
resolution: {integrity: sha512-OMBitzkJRga/UJF1ScSnaxgBSlAVePCK8wzPkGDn0MmsjZ4oDWuNZeKnVO1+tb6n2rZHws7RmKGxHzHAZTY+zQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
storybook: ^9.0.11
storybook: ^9.0.12
'@storybook/react@9.0.11':
resolution: {integrity: sha512-YXJ/H/ivBs61xrf5Ee5zxPbzH0M4rFGdUOecq6NUWXZaWM+b5OKX0bbAbkaK1YZEv4gfY2Zrt1wqg7rXiGIrJA==}
'@storybook/react@9.0.12':
resolution: {integrity: sha512-rDrf5MDfsguNDTSOfGqhAjQDhp3jDMdzAoCqLjQ75M647C8nsv9i+fftO3k0rMxIJRrESpZWqVZ4tsjOX+J3DA==}
engines: {node: '>=20.0.0'}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
storybook: ^9.0.11
storybook: ^9.0.12
typescript: '>= 4.9.x'
peerDependenciesMeta:
typescript:
@@ -2501,6 +2504,14 @@ packages:
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
'@tanstack/query-core@5.80.7':
resolution: {integrity: sha512-s09l5zeUKC8q7DCCCIkVSns8zZrK4ZDT6ryEjxNBFi68G4z2EBobBS7rdOY3r6W1WbUDpc1fe5oY+YO/+2UVUg==}
'@tanstack/react-query@5.80.7':
resolution: {integrity: sha512-u2F0VK6+anItoEvB3+rfvTO9GEh2vb00Je05OwlUe/A0lkJBgW1HckiY3f9YZa+jx6IOe4dHPh10dyp9aY3iRQ==}
peerDependencies:
react: ^18 || ^19
'@tanstack/react-table@8.21.3':
resolution: {integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==}
engines: {node: '>=12'}
@@ -2631,8 +2642,8 @@ packages:
'@types/junit-report-builder@3.0.2':
resolution: {integrity: sha512-R5M+SYhMbwBeQcNXYWNCZkl09vkVfAtcPIaCGdzIkkbeaTrVbGQ7HVgi4s+EmM/M1K4ZuWQH0jGcvMvNePfxYA==}
'@types/lodash@4.17.17':
resolution: {integrity: sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ==}
'@types/lodash@4.17.18':
resolution: {integrity: sha512-KJ65INaxqxmU6EoCiJmRPZC9H9RVWCRd349tXM2M3O5NA7cY6YL7c0bHAHQ93NOfTObEQ004kd2QVHs/r0+m4g==}
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
@@ -3722,8 +3733,8 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
electron-to-chromium@1.5.169:
resolution: {integrity: sha512-q7SQx6mkLy0GTJK9K9OiWeaBMV4XQtBSdf6MJUzDB/H/5tFXfIiX38Lci1Kl6SsgiEhz1SQI1ejEOU5asWEhwQ==}
electron-to-chromium@1.5.170:
resolution: {integrity: sha512-GP+M7aeluQo9uAyiTCxgIj/j+PrWhMlY7LFVj8prlsPljd0Fdg9AprlfUi+OCSFWy9Y5/2D/Jrj9HS8Z4rpKWA==}
elliptic@6.6.1:
resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==}
@@ -3824,8 +3835,8 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
eslint-config-next@15.3.3:
resolution: {integrity: sha512-QJLv/Ouk2vZnxL4b67njJwTLjTf7uZRltI0LL4GERYR4qMF5z08+gxkfODAeaK7TiC6o+cER91bDaEnwrTWV6Q==}
eslint-config-next@15.3.4:
resolution: {integrity: sha512-WqeumCq57QcTP2lYlV6BRUySfGiBYEXlQ1L0mQ+u4N4X4ZhUVSSQ52WtjqHv60pJ6dD7jn+YZc0d1/ZSsxccvg==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: '>=3.3.1'
@@ -3898,12 +3909,12 @@ packages:
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
eslint-plugin-storybook@9.0.11:
resolution: {integrity: sha512-U4aaAUnusTYJaNZPIXD762V0qsOhi++t/7QwGFVAMo2MezrRjwvWEeYY7hcxlE/rtFXgue42HYQWX4jIvgoRVA==}
eslint-plugin-storybook@9.0.12:
resolution: {integrity: sha512-dSzcozoI7tQRqfMODWfxahrRmKWsK88yKSUcO0+s361oYcX7nf8nEu99TQ/wuDLRHh+Zi7E2j43cPMH8gFo8OA==}
engines: {node: '>=20.0.0'}
peerDependencies:
eslint: '>=8'
storybook: ^9.0.11
storybook: ^9.0.12
eslint-scope@5.1.1:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
@@ -4059,6 +4070,10 @@ packages:
resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
find-up@7.0.0:
resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
engines: {node: '>=18'}
flat-cache@3.2.0:
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
engines: {node: ^10.12.0 || >=12.0.0}
@@ -4321,8 +4336,8 @@ packages:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
import-in-the-middle@1.14.0:
resolution: {integrity: sha512-g5zLT0HaztRJWysayWYiUq/7E5H825QIiecMD2pI5QO7Wzr847l6GDvPvmZaDIdrDtS2w7qRczywxiK6SL5vRw==}
import-in-the-middle@1.14.2:
resolution: {integrity: sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==}
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
@@ -5166,23 +5181,13 @@ packages:
resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==}
engines: {node: '>=14.16'}
playwright-core@1.52.0:
resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==}
playwright-core@1.53.1:
resolution: {integrity: sha512-Z46Oq7tLAyT0lGoFx4DOuB1IA9D1TPj0QkYxpPVUnGDqHHvDpCftu1J2hM2PiWsNMoZh8+LQaarAWcDfPBc6zg==}
engines: {node: '>=18'}
hasBin: true
playwright-core@1.53.0:
resolution: {integrity: sha512-mGLg8m0pm4+mmtB7M89Xw/GSqoNC+twivl8ITteqvAndachozYe2ZA7srU6uleV1vEdAHYqjq+SV8SNxRRFYBw==}
engines: {node: '>=18'}
hasBin: true
playwright@1.52.0:
resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==}
engines: {node: '>=18'}
hasBin: true
playwright@1.53.0:
resolution: {integrity: sha512-ghGNnIEYZC4E+YtclRn4/p6oYbdPiASELBIYkBXfaTVKreQUYbMUYQDwS12a8F0/HtIjr/CkGjtwABeFPGcS4Q==}
playwright@1.53.1:
resolution: {integrity: sha512-LJ13YLr/ocweuwxyGf1XNFWIU4M2zUSo149Qbp+A4cpwDjsxRPj7k6H25LBrEHiEwxvRbD8HdwvQmRMSvquhYw==}
engines: {node: '>=18'}
hasBin: true
@@ -5276,8 +5281,8 @@ packages:
resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
engines: {node: ^10 || ^12 || >=14}
postcss@8.5.4:
resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==}
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
postgres-array@2.0.0:
@@ -5848,8 +5853,8 @@ packages:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'}
storybook@9.0.11:
resolution: {integrity: sha512-Bci1V4HQ8kCNelcZQd7p3mPUFzrgfeuZumo8ZwP1zEhdLmitQxQF+nK7V4dF7anmivx7exaXNCD50O+wxbByBw==}
storybook@9.0.12:
resolution: {integrity: sha512-mpACe6BMd/M5sqcOiA8NmWIm2zdx0t4ujnA4NTcq4aErdK/KKuU255UM4pO3DIf5zWR5VrDfNV5UaMi/VgE2mA==}
hasBin: true
peerDependencies:
prettier: ^2 || ^3
@@ -6032,8 +6037,8 @@ packages:
uglify-js:
optional: true
terser@5.42.0:
resolution: {integrity: sha512-UYCvU9YQW2f/Vwl+P0GfhxJxbUGLwd+5QrrGgLajzWAtC/23AX0vcise32kkP7Eu0Wu9VlzzHAXkLObgjQfFlQ==}
terser@5.43.1:
resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==}
engines: {node: '>=10'}
hasBin: true
@@ -6191,6 +6196,10 @@ packages:
resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
engines: {node: '>=4'}
unicorn-magic@0.1.0:
resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
engines: {node: '>=18'}
unified@11.0.5:
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
@@ -7219,13 +7228,13 @@ snapshots:
'@types/tough-cookie': 4.0.5
tough-cookie: 4.1.4
'@chromatic-com/storybook@4.0.0(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))':
'@chromatic-com/storybook@4.0.0(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))':
dependencies:
'@neoconfetti/react': 1.0.0
chromatic: 12.2.0
filesize: 10.1.6
jsonfile: 6.1.0
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
strip-ansi: 7.1.0
transitivePeerDependencies:
- '@chromatic-com/cypress'
@@ -7555,7 +7564,7 @@ snapshots:
'@next/env@15.3.3': {}
'@next/eslint-plugin-next@15.3.3':
'@next/eslint-plugin-next@15.3.4':
dependencies:
fast-glob: 3.3.1
@@ -7583,9 +7592,9 @@ snapshots:
'@next/swc-win32-x64-msvc@15.3.3':
optional: true
'@next/third-parties@15.3.3(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
'@next/third-parties@15.3.3(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies:
next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
third-party-capital: 1.0.20
@@ -7823,7 +7832,7 @@ snapshots:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.57.2
'@types/shimmer': 1.2.0
import-in-the-middle: 1.14.0
import-in-the-middle: 1.14.2
require-in-the-middle: 7.5.2
semver: 7.7.2
shimmer: 1.2.1
@@ -7862,9 +7871,9 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
'@playwright/test@1.52.0':
'@playwright/test@1.53.1':
dependencies:
playwright: 1.52.0
playwright: 1.53.1
'@pmmmwh/react-refresh-webpack-plugin@0.5.16(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))':
dependencies:
@@ -8594,7 +8603,7 @@ snapshots:
'@sentry/core@9.27.0': {}
'@sentry/nextjs@9.27.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.99.9(esbuild@0.25.5))':
'@sentry/nextjs@9.27.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.99.9(esbuild@0.25.5))':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/semantic-conventions': 1.34.0
@@ -8607,7 +8616,7 @@ snapshots:
'@sentry/vercel-edge': 9.27.0
'@sentry/webpack-plugin': 3.5.0(webpack@5.99.9(esbuild@0.25.5))
chalk: 3.0.0
next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
resolve: 1.22.8
rollup: 4.35.0
stacktrace-parser: 0.1.11
@@ -8655,7 +8664,7 @@ snapshots:
'@prisma/instrumentation': 6.8.2(@opentelemetry/api@1.9.0)
'@sentry/core': 9.27.0
'@sentry/opentelemetry': 9.27.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.34.0)
import-in-the-middle: 1.14.0
import-in-the-middle: 1.14.2
minimatch: 9.0.5
transitivePeerDependencies:
- supports-color
@@ -8694,39 +8703,39 @@ snapshots:
'@standard-schema/utils@0.3.0': {}
'@storybook/addon-a11y@9.0.11(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))':
'@storybook/addon-a11y@9.0.12(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))':
dependencies:
'@storybook/global': 5.0.0
axe-core: 4.10.3
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
'@storybook/addon-docs@9.0.11(@types/react@18.3.17)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))':
'@storybook/addon-docs@9.0.12(@types/react@18.3.17)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))':
dependencies:
'@mdx-js/react': 3.1.0(@types/react@18.3.17)(react@18.3.1)
'@storybook/csf-plugin': 9.0.11(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@storybook/csf-plugin': 9.0.12(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@storybook/icons': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@storybook/react-dom-shim': 9.0.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@storybook/react-dom-shim': 9.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
ts-dedent: 2.2.0
transitivePeerDependencies:
- '@types/react'
'@storybook/addon-links@9.0.11(react@18.3.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))':
'@storybook/addon-links@9.0.12(react@18.3.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))':
dependencies:
'@storybook/global': 5.0.0
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
optionalDependencies:
react: 18.3.1
'@storybook/addon-onboarding@9.0.11(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))':
'@storybook/addon-onboarding@9.0.12(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))':
dependencies:
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
'@storybook/builder-webpack5@9.0.11(esbuild@0.25.5)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)':
'@storybook/builder-webpack5@9.0.12(esbuild@0.25.5)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)':
dependencies:
'@storybook/core-webpack': 9.0.11(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@storybook/core-webpack': 9.0.12(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))
case-sensitive-paths-webpack-plugin: 2.4.0
cjs-module-lexer: 1.4.3
css-loader: 6.11.0(webpack@5.99.9(esbuild@0.25.5))
@@ -8734,7 +8743,7 @@ snapshots:
fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.5))
html-webpack-plugin: 5.6.3(webpack@5.99.9(esbuild@0.25.5))
magic-string: 0.30.17
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
style-loader: 3.3.4(webpack@5.99.9(esbuild@0.25.5))
terser-webpack-plugin: 5.3.14(esbuild@0.25.5)(webpack@5.99.9(esbuild@0.25.5))
ts-dedent: 2.2.0
@@ -8751,14 +8760,14 @@ snapshots:
- uglify-js
- webpack-cli
'@storybook/core-webpack@9.0.11(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))':
'@storybook/core-webpack@9.0.12(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))':
dependencies:
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
ts-dedent: 2.2.0
'@storybook/csf-plugin@9.0.11(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))':
'@storybook/csf-plugin@9.0.12(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))':
dependencies:
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
unplugin: 1.16.1
'@storybook/global@5.0.0': {}
@@ -8768,7 +8777,7 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
'@storybook/nextjs@9.0.11(esbuild@0.25.5)(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))':
'@storybook/nextjs@9.0.12(esbuild@0.25.5)(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))':
dependencies:
'@babel/core': 7.27.4
'@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.4)
@@ -8784,25 +8793,25 @@ snapshots:
'@babel/preset-typescript': 7.27.1(@babel/core@7.27.4)
'@babel/runtime': 7.27.6
'@pmmmwh/react-refresh-webpack-plugin': 0.5.16(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))
'@storybook/builder-webpack5': 9.0.11(esbuild@0.25.5)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)
'@storybook/preset-react-webpack': 9.0.11(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)
'@storybook/react': 9.0.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)
'@storybook/builder-webpack5': 9.0.12(esbuild@0.25.5)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)
'@storybook/preset-react-webpack': 9.0.12(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)
'@storybook/react': 9.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)
'@types/semver': 7.7.0
babel-loader: 9.2.1(@babel/core@7.27.4)(webpack@5.99.9(esbuild@0.25.5))
css-loader: 6.11.0(webpack@5.99.9(esbuild@0.25.5))
image-size: 2.0.2
loader-utils: 3.3.1
next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
node-polyfill-webpack-plugin: 2.0.1(webpack@5.99.9(esbuild@0.25.5))
postcss: 8.5.4
postcss-loader: 8.1.1(postcss@8.5.4)(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.5))
postcss: 8.5.6
postcss-loader: 8.1.1(postcss@8.5.6)(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.5))
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-refresh: 0.14.2
resolve-url-loader: 5.0.0
sass-loader: 14.2.1(webpack@5.99.9(esbuild@0.25.5))
semver: 7.7.2
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
style-loader: 3.3.4(webpack@5.99.9(esbuild@0.25.5))
styled-jsx: 5.1.7(@babel/core@7.27.4)(react@18.3.1)
tsconfig-paths: 4.2.0
@@ -8828,19 +8837,19 @@ snapshots:
- webpack-hot-middleware
- webpack-plugin-serve
'@storybook/preset-react-webpack@9.0.11(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)':
'@storybook/preset-react-webpack@9.0.12(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)':
dependencies:
'@storybook/core-webpack': 9.0.11(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@storybook/core-webpack': 9.0.12(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.5))
'@types/semver': 7.7.0
find-up: 5.0.0
find-up: 7.0.0
magic-string: 0.30.17
react: 18.3.1
react-docgen: 7.1.1
react-dom: 18.3.1(react@18.3.1)
resolve: 1.22.10
semver: 7.7.2
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
tsconfig-paths: 4.2.0
webpack: 5.99.9(esbuild@0.25.5)
optionalDependencies:
@@ -8866,19 +8875,19 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@storybook/react-dom-shim@9.0.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))':
'@storybook/react-dom-shim@9.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))':
dependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
'@storybook/react@9.0.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)':
'@storybook/react@9.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3)':
dependencies:
'@storybook/global': 5.0.0
'@storybook/react-dom-shim': 9.0.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))
'@storybook/react-dom-shim': 9.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
optionalDependencies:
typescript: 5.8.3
@@ -8935,6 +8944,13 @@ snapshots:
dependencies:
tslib: 2.8.1
'@tanstack/query-core@5.80.7': {}
'@tanstack/react-query@5.80.7(react@18.3.1)':
dependencies:
'@tanstack/query-core': 5.80.7
react: 18.3.1
'@tanstack/react-table@8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@tanstack/table-core': 8.21.3
@@ -9081,7 +9097,7 @@ snapshots:
'@types/junit-report-builder@3.0.2': {}
'@types/lodash@4.17.17': {}
'@types/lodash@4.17.18': {}
'@types/mdast@4.0.4':
dependencies:
@@ -9624,14 +9640,14 @@ snapshots:
axe-core: 4.10.3
mustache: 4.2.0
axe-playwright@2.1.0(playwright@1.53.0):
axe-playwright@2.1.0(playwright@1.53.1):
dependencies:
'@types/junit-report-builder': 3.0.2
axe-core: 4.10.3
axe-html-reporter: 2.2.11(axe-core@4.10.3)
junit-report-builder: 5.1.1
picocolors: 1.1.1
playwright: 1.53.0
playwright: 1.53.1
axobject-query@4.1.0: {}
@@ -9751,7 +9767,7 @@ snapshots:
browserslist@4.25.0:
dependencies:
caniuse-lite: 1.0.30001723
electron-to-chromium: 1.5.169
electron-to-chromium: 1.5.170
node-releases: 2.0.19
update-browserslist-db: 1.1.3(browserslist@4.25.0)
@@ -10019,12 +10035,12 @@ snapshots:
css-loader@6.11.0(webpack@5.99.9(esbuild@0.25.5)):
dependencies:
icss-utils: 5.1.0(postcss@8.5.4)
postcss: 8.5.4
postcss-modules-extract-imports: 3.1.0(postcss@8.5.4)
postcss-modules-local-by-default: 4.2.0(postcss@8.5.4)
postcss-modules-scope: 3.2.1(postcss@8.5.4)
postcss-modules-values: 4.0.0(postcss@8.5.4)
icss-utils: 5.1.0(postcss@8.5.6)
postcss: 8.5.6
postcss-modules-extract-imports: 3.1.0(postcss@8.5.6)
postcss-modules-local-by-default: 4.2.0(postcss@8.5.6)
postcss-modules-scope: 3.2.1(postcss@8.5.6)
postcss-modules-values: 4.0.0(postcss@8.5.6)
postcss-value-parser: 4.2.0
semver: 7.7.2
optionalDependencies:
@@ -10260,7 +10276,7 @@ snapshots:
eastasianwidth@0.2.0: {}
electron-to-chromium@1.5.169: {}
electron-to-chromium@1.5.170: {}
elliptic@6.6.1:
dependencies:
@@ -10455,9 +10471,9 @@ snapshots:
escape-string-regexp@4.0.0: {}
eslint-config-next@15.3.3(eslint@8.57.1)(typescript@5.8.3):
eslint-config-next@15.3.4(eslint@8.57.1)(typescript@5.8.3):
dependencies:
'@next/eslint-plugin-next': 15.3.3
'@next/eslint-plugin-next': 15.3.4
'@rushstack/eslint-patch': 1.11.0
'@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)
'@typescript-eslint/parser': 8.34.1(eslint@8.57.1)(typescript@5.8.3)
@@ -10583,11 +10599,11 @@ snapshots:
string.prototype.matchall: 4.0.12
string.prototype.repeat: 1.0.0
eslint-plugin-storybook@9.0.11(eslint@8.57.1)(storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3):
eslint-plugin-storybook@9.0.12(eslint@8.57.1)(storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.8.3):
dependencies:
'@typescript-eslint/utils': 8.34.1(eslint@8.57.1)(typescript@5.8.3)
eslint: 8.57.1
storybook: 9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3)
storybook: 9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3)
transitivePeerDependencies:
- supports-color
- typescript
@@ -10766,6 +10782,12 @@ snapshots:
locate-path: 7.2.0
path-exists: 5.0.0
find-up@7.0.0:
dependencies:
locate-path: 7.2.0
path-exists: 5.0.0
unicorn-magic: 0.1.0
flat-cache@3.2.0:
dependencies:
flatted: 3.3.3
@@ -10841,9 +10863,9 @@ snapshots:
functions-have-names@1.2.3: {}
geist@1.4.2(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
geist@1.4.2(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
dependencies:
next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
gensync@1.0.0-beta.2: {}
@@ -11013,7 +11035,7 @@ snapshots:
he: 1.2.0
param-case: 3.0.4
relateurl: 0.2.7
terser: 5.42.0
terser: 5.43.1
html-url-attributes@3.0.1: {}
@@ -11043,9 +11065,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
icss-utils@5.1.0(postcss@8.5.4):
icss-utils@5.1.0(postcss@8.5.6):
dependencies:
postcss: 8.5.4
postcss: 8.5.6
ieee754@1.2.1: {}
@@ -11060,7 +11082,7 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
import-in-the-middle@1.14.0:
import-in-the-middle@1.14.2:
dependencies:
acorn: 8.15.0
acorn-import-attributes: 1.9.5(acorn@8.15.0)
@@ -11770,7 +11792,7 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@next/env': 15.3.3
'@swc/counter': 0.1.3
@@ -11791,7 +11813,7 @@ snapshots:
'@next/swc-win32-arm64-msvc': 15.3.3
'@next/swc-win32-x64-msvc': 15.3.3
'@opentelemetry/api': 1.9.0
'@playwright/test': 1.52.0
'@playwright/test': 1.53.1
sharp: 0.34.2
transitivePeerDependencies:
- '@babel/core'
@@ -12058,78 +12080,70 @@ snapshots:
dependencies:
find-up: 6.3.0
playwright-core@1.52.0: {}
playwright-core@1.53.1: {}
playwright-core@1.53.0: {}
playwright@1.52.0:
playwright@1.53.1:
dependencies:
playwright-core: 1.52.0
optionalDependencies:
fsevents: 2.3.2
playwright@1.53.0:
dependencies:
playwright-core: 1.53.0
playwright-core: 1.53.1
optionalDependencies:
fsevents: 2.3.2
possible-typed-array-names@1.1.0: {}
postcss-import@15.1.0(postcss@8.5.4):
postcss-import@15.1.0(postcss@8.5.6):
dependencies:
postcss: 8.5.4
postcss: 8.5.6
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.10
postcss-js@4.0.1(postcss@8.5.4):
postcss-js@4.0.1(postcss@8.5.6):
dependencies:
camelcase-css: 2.0.1
postcss: 8.5.4
postcss: 8.5.6
postcss-load-config@4.0.2(postcss@8.5.4):
postcss-load-config@4.0.2(postcss@8.5.6):
dependencies:
lilconfig: 3.1.3
yaml: 2.8.0
optionalDependencies:
postcss: 8.5.4
postcss: 8.5.6
postcss-loader@8.1.1(postcss@8.5.4)(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.5)):
postcss-loader@8.1.1(postcss@8.5.6)(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.5)):
dependencies:
cosmiconfig: 9.0.0(typescript@5.8.3)
jiti: 1.21.7
postcss: 8.5.4
postcss: 8.5.6
semver: 7.7.2
optionalDependencies:
webpack: 5.99.9(esbuild@0.25.5)
transitivePeerDependencies:
- typescript
postcss-modules-extract-imports@3.1.0(postcss@8.5.4):
postcss-modules-extract-imports@3.1.0(postcss@8.5.6):
dependencies:
postcss: 8.5.4
postcss: 8.5.6
postcss-modules-local-by-default@4.2.0(postcss@8.5.4):
postcss-modules-local-by-default@4.2.0(postcss@8.5.6):
dependencies:
icss-utils: 5.1.0(postcss@8.5.4)
postcss: 8.5.4
icss-utils: 5.1.0(postcss@8.5.6)
postcss: 8.5.6
postcss-selector-parser: 7.1.0
postcss-value-parser: 4.2.0
postcss-modules-scope@3.2.1(postcss@8.5.4):
postcss-modules-scope@3.2.1(postcss@8.5.6):
dependencies:
postcss: 8.5.4
postcss: 8.5.6
postcss-selector-parser: 7.1.0
postcss-modules-values@4.0.0(postcss@8.5.4):
postcss-modules-values@4.0.0(postcss@8.5.6):
dependencies:
icss-utils: 5.1.0(postcss@8.5.4)
postcss: 8.5.4
icss-utils: 5.1.0(postcss@8.5.6)
postcss: 8.5.6
postcss-nested@6.2.0(postcss@8.5.4):
postcss-nested@6.2.0(postcss@8.5.6):
dependencies:
postcss: 8.5.4
postcss: 8.5.6
postcss-selector-parser: 6.1.2
postcss-selector-parser@6.1.2:
@@ -12156,7 +12170,7 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
postcss@8.5.4:
postcss@8.5.6:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
@@ -12538,7 +12552,7 @@ snapshots:
adjust-sourcemap-loader: 4.0.0
convert-source-map: 1.9.0
loader-utils: 2.0.4
postcss: 8.5.4
postcss: 8.5.6
source-map: 0.6.1
resolve@1.22.10:
@@ -12796,7 +12810,7 @@ snapshots:
es-errors: 1.3.0
internal-slot: 1.1.0
storybook@9.0.11(@testing-library/dom@10.4.0)(prettier@3.5.3):
storybook@9.0.12(@testing-library/dom@10.4.0)(prettier@3.5.3):
dependencies:
'@storybook/global': 5.0.0
'@testing-library/jest-dom': 6.6.3
@@ -13012,11 +13026,11 @@ snapshots:
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.1.1
postcss: 8.5.4
postcss-import: 15.1.0(postcss@8.5.4)
postcss-js: 4.0.1(postcss@8.5.4)
postcss-load-config: 4.0.2(postcss@8.5.4)
postcss-nested: 6.2.0(postcss@8.5.4)
postcss: 8.5.6
postcss-import: 15.1.0(postcss@8.5.6)
postcss-js: 4.0.1(postcss@8.5.6)
postcss-load-config: 4.0.2(postcss@8.5.6)
postcss-nested: 6.2.0(postcss@8.5.6)
postcss-selector-parser: 6.1.2
resolve: 1.22.10
sucrase: 3.35.0
@@ -13031,12 +13045,12 @@ snapshots:
jest-worker: 27.5.1
schema-utils: 4.3.2
serialize-javascript: 6.0.2
terser: 5.42.0
terser: 5.43.1
webpack: 5.99.9(esbuild@0.25.5)
optionalDependencies:
esbuild: 0.25.5
terser@5.42.0:
terser@5.43.1:
dependencies:
'@jridgewell/source-map': 0.3.6
acorn: 8.15.0
@@ -13192,6 +13206,8 @@ snapshots:
unicode-property-aliases-ecmascript@2.1.0: {}
unicorn-magic@0.1.0: {}
unified@11.0.5:
dependencies:
'@types/unist': 3.0.3

View File

@@ -8,19 +8,24 @@ import { TooltipProvider } from "@/components/ui/tooltip";
import CredentialsProvider from "@/components/integrations/credentials-provider";
import { LaunchDarklyProvider } from "@/components/feature-flag/feature-flag-provider";
import OnboardingProvider from "@/components/onboarding/onboarding-provider";
import { QueryClientProvider } from "@tanstack/react-query";
import { getQueryClient } from "@/lib/react-query/queryClient";
export function Providers({ children, ...props }: ThemeProviderProps) {
const queryClient = getQueryClient();
return (
<NextThemesProvider {...props}>
<BackendAPIProvider>
<CredentialsProvider>
<LaunchDarklyProvider>
<OnboardingProvider>
<TooltipProvider>{children}</TooltipProvider>
</OnboardingProvider>
</LaunchDarklyProvider>
</CredentialsProvider>
</BackendAPIProvider>
</NextThemesProvider>
<QueryClientProvider client={queryClient}>
<NextThemesProvider {...props}>
<BackendAPIProvider>
<CredentialsProvider>
<LaunchDarklyProvider>
<OnboardingProvider>
<TooltipProvider>{children}</TooltipProvider>
</OnboardingProvider>
</LaunchDarklyProvider>
</CredentialsProvider>
</BackendAPIProvider>
</NextThemesProvider>
</QueryClientProvider>
);
}

View File

@@ -0,0 +1,526 @@
import type { Meta, StoryObj } from "@storybook/nextjs";
import { Play, Plus } from "lucide-react";
import { Button } from "./Button";
const meta: Meta<typeof Button> = {
title: "Atoms/Button",
tags: ["autodocs"],
component: Button,
parameters: {
layout: "centered",
docs: {
description: {
component:
"Button component with multiple variants and sizes based on our design system. Built on top of shadcn/ui button with custom styling.",
},
},
},
argTypes: {
variant: {
control: "select",
options: [
"primary",
"secondary",
"destructive",
"outline",
"ghost",
"loading",
],
description: "Button style variant",
},
size: {
control: "select",
options: ["small", "large", "icon"],
description: "Button size",
},
loading: {
control: "boolean",
description: "Show loading spinner and disable button",
},
disabled: {
control: "boolean",
description: "Disable the button",
},
children: {
control: "text",
description: "Button content",
},
},
args: {
children: "Button",
variant: "primary",
size: "large",
loading: false,
disabled: false,
},
};
export default meta;
type Story = StoryObj<typeof meta>;
// Basic variants
export const Primary: Story = {
args: {
variant: "primary",
children: "Primary Button",
},
};
export const Secondary: Story = {
args: {
variant: "secondary",
children: "Secondary Button",
},
};
export const Destructive: Story = {
args: {
variant: "destructive",
children: "Delete",
},
};
export const Outline: Story = {
args: {
variant: "outline",
children: "Outline Button",
},
};
export const Ghost: Story = {
args: {
variant: "ghost",
children: "Ghost Button",
},
};
export const Link: Story = {
args: {
variant: "link",
children: "Add to library",
},
};
// Loading states
export const Loading: Story = {
args: {
loading: true,
children: "Processing...",
},
};
export const LoadingSecondary: Story = {
args: {
variant: "secondary",
loading: true,
children: "Loading...",
},
};
// Sizes
export const SmallButtons: Story = {
render: renderSmallButtons,
};
export const LargeButtons: Story = {
render: renderLargeButtons,
};
// With icons
export const WithLeftIcon: Story = {
args: {
variant: "primary",
leftIcon: <Play className="h-4 w-4" />,
children: "Play",
},
};
export const WithRightIcon: Story = {
args: {
variant: "outline",
rightIcon: <Plus className="h-4 w-4" />,
children: "Add Item",
},
};
export const IconOnly: Story = {
args: {
variant: "icon",
size: "icon",
children: <Plus className="h-4 w-4" />,
"aria-label": "Add item",
},
};
// States
export const Disabled: Story = {
render: renderDisabledButtons,
};
// Complete showcase matching Figma design
export const AllVariants: Story = {
render: renderAllVariants,
};
// Render functions as function declarations
function renderSmallButtons() {
return (
<div className="flex flex-wrap gap-4">
<Button variant="primary" size="small">
Primary
</Button>
<Button variant="secondary" size="small">
Secondary
</Button>
<Button variant="destructive" size="small">
Delete
</Button>
<Button variant="outline" size="small">
Outline
</Button>
<Button variant="ghost" size="small">
Ghost
</Button>
</div>
);
}
function renderLargeButtons() {
return (
<div className="flex flex-wrap gap-4">
<Button variant="primary" size="large">
Primary
</Button>
<Button variant="secondary" size="large">
Secondary
</Button>
<Button variant="destructive" size="large">
Delete
</Button>
<Button variant="outline" size="large">
Outline
</Button>
<Button variant="ghost" size="large">
Ghost
</Button>
</div>
);
}
function renderDisabledButtons() {
return (
<div className="flex flex-wrap gap-4">
<Button variant="primary" disabled>
Primary Disabled
</Button>
<Button variant="secondary" disabled>
Secondary Disabled
</Button>
<Button variant="destructive" disabled>
Destructive Disabled
</Button>
<Button variant="outline" disabled>
Outline Disabled
</Button>
<Button variant="ghost" disabled>
Ghost Disabled
</Button>
</div>
);
}
function renderAllVariants() {
return (
<div className="space-y-12 p-8">
{/* Large buttons section */}
<div className="space-y-8">
<h2 className="text-3xl font-semibold text-neutral-900">
Large buttons
</h2>
<div className="flex flex-wrap gap-20">
{/* Primary */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-neutral-900">
Primary
</div>
<div className="flex flex-col gap-8">
<Button variant="primary" size="large">
Save
</Button>
<Button variant="primary" size="large" loading>
Loading
</Button>
<Button variant="primary" size="large" disabled>
Disabled
</Button>
<Button
variant="primary"
size="large"
leftIcon={<Play className="h-5 w-5" />}
>
Play
</Button>
</div>
</div>
{/* Secondary */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-neutral-900">
Secondary
</div>
<div className="flex flex-col gap-8">
<Button variant="secondary" size="large">
Save
</Button>
<Button variant="secondary" size="large" loading>
Loading
</Button>
<Button variant="secondary" size="large" disabled>
Disabled
</Button>
<Button
variant="secondary"
size="large"
leftIcon={<Play className="h-5 w-5" />}
>
Play
</Button>
</div>
</div>
{/* Destructive */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-neutral-900">
Destructive
</div>
<div className="flex flex-col gap-8">
<Button variant="destructive" size="large">
Save
</Button>
<Button variant="destructive" size="large" loading>
Loading
</Button>
<Button variant="destructive" size="large" disabled>
Disabled
</Button>
<Button
variant="destructive"
size="large"
leftIcon={<Play className="h-5 w-5" />}
>
Play
</Button>
</div>
</div>
{/* Outline */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-neutral-900">
Outline
</div>
<div className="flex flex-col gap-8">
<Button variant="outline" size="large">
Save
</Button>
<Button variant="outline" size="large" loading>
Loading
</Button>
<Button variant="outline" size="large" disabled>
Disabled
</Button>
<Button
variant="outline"
size="large"
leftIcon={<Play className="h-5 w-5" />}
>
Play
</Button>
</div>
</div>
{/* Ghost */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-neutral-900">
Save
</div>
<div className="flex flex-col gap-8">
<Button variant="ghost" size="large">
Text
</Button>
<Button variant="ghost" size="large" loading>
Loading
</Button>
<Button variant="ghost" size="large" disabled>
Disabled
</Button>
<Button
variant="ghost"
size="large"
leftIcon={<Play className="h-5 w-5" />}
>
Play
</Button>
</div>
</div>
</div>
</div>
{/* Small buttons section */}
<div className="space-y-8">
<h2 className="text-3xl font-semibold text-neutral-900">
Small buttons
</h2>
<div className="flex flex-wrap gap-20">
{/* Primary Small */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-neutral-900">
Primary
</div>
<div className="flex flex-col gap-8">
<Button variant="primary" size="small">
Save
</Button>
<Button variant="primary" size="small" loading>
Loading
</Button>
<Button variant="primary" size="small" disabled>
Disabled
</Button>
<Button
variant="primary"
size="small"
leftIcon={<Play className="h-4 w-4" />}
>
Play
</Button>
</div>
</div>
{/* Secondary Small */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-neutral-900">
Secondary
</div>
<div className="flex flex-col gap-8">
<Button variant="secondary" size="small">
Save
</Button>
<Button variant="secondary" size="small" disabled>
Disabled
</Button>
<Button
variant="secondary"
size="small"
leftIcon={<Play className="h-4 w-4" />}
>
Play
</Button>
</div>
</div>
{/* Destructive Small */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-neutral-900">
Destructive
</div>
<div className="flex flex-col gap-8">
<Button variant="destructive" size="small">
Save
</Button>
<Button variant="destructive" size="small" disabled>
Disabled
</Button>
<Button
variant="destructive"
size="small"
leftIcon={<Play className="h-4 w-4" />}
>
Play
</Button>
</div>
</div>
{/* Outline Small */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-neutral-900">
Outline
</div>
<div className="flex flex-col gap-8">
<Button variant="outline" size="small">
Save
</Button>
<Button variant="outline" size="small" disabled>
Disabled
</Button>
<Button
variant="outline"
size="small"
leftIcon={<Play className="h-4 w-4" />}
>
Play
</Button>
</div>
</div>
{/* Ghost Small */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-neutral-900">
Ghost
</div>
<div className="flex flex-col gap-8">
<Button variant="ghost" size="small">
Save
</Button>
<Button variant="ghost" size="small" disabled>
Disabled
</Button>
<Button
variant="ghost"
size="small"
leftIcon={<Play className="h-4 w-4" />}
>
Play
</Button>
</div>
</div>
</div>
</div>
{/* Other button types */}
<div className="space-y-8">
<h2 className="text-3xl font-semibold text-neutral-900">
Other button types
</h2>
<div className="flex gap-20">
{/* Link */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-zinc-800">
Link
</div>
<div className="flex flex-col gap-8">
<Button variant="link">Add to library</Button>
</div>
</div>
{/* Icon */}
<div className="flex flex-col gap-5">
<div className="font-['Geist'] text-base font-medium text-zinc-800">
Icon
</div>
<div className="flex flex-col gap-8">
<Button variant="icon" size="icon">
<Plus className="h-4 w-4" />
</Button>
<Button variant="primary" size="icon" className="bg-zinc-700">
<Plus className="h-4 w-4" />
</Button>
<Button variant="icon" size="icon" disabled>
<Plus className="h-4 w-4" />
</Button>
</div>
</div>
</div>
</div>
</div>
);
}

View File

@@ -0,0 +1,81 @@
import { cn } from "@/lib/utils";
import { CircleNotchIcon } from "@phosphor-icons/react/dist/ssr";
import { cva, type VariantProps } from "class-variance-authority";
import React from "react";
// Extended button variants based on our design system
const extendedButtonVariants = cva(
"inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-neutral-950 disabled:pointer-events-none disabled:opacity-50 font-['Geist'] leading-snug border",
{
variants: {
variant: {
primary:
"bg-zinc-800 border-zinc-800 text-white hover:bg-zinc-900 hover:border-zinc-900 rounded-full disabled:text-white disabled:bg-zinc-200 disabled:border-zinc-200 disabled:opacity-1",
secondary:
"bg-zinc-100 border-zinc-100 text-black hover:bg-zinc-300 hover:border-zinc-300 rounded-full disabled:text-zinc-300 disabled:bg-zinc-50 disabled:border-zinc-50 disabled:opacity-1",
destructive:
"bg-red-500 border-red-500 text-white hover:bg-red-600 hover:border-red-600 rounded-full disabled:text-white disabled:bg-zinc-200 disabled:border-zinc-200 disabled:opacity-1",
outline:
"bg-transparent border-zinc-700 text-black hover:bg-zinc-100 hover:border-zinc-700 rounded-full disabled:border-zinc-200 disabled:text-zinc-200 disabled:opacity-1",
ghost:
"bg-transparent border-transparent text-black hover:bg-zinc-50 hover:border-zinc-50 rounded-full disabled:text-zinc-200 disabled:opacity-1",
link: "bg-transparent border-transparent text-black hover:underline rounded-none p-0 h-auto min-w-auto disabled:opacity-1",
icon: "bg-white text-black border border-zinc-600 hover:bg-zinc-100 rounded-[96px] disabled:opacity-1",
},
size: {
small: "px-3 py-2 text-sm gap-1.5 h-[2.25rem]",
large: "min-w-20 px-4 py-3 text-sm gap-2",
icon: "p-3",
},
},
defaultVariants: {
variant: "primary",
size: "large",
},
},
);
export interface ButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof extendedButtonVariants> {
loading?: boolean;
leftIcon?: React.ReactNode;
rightIcon?: React.ReactNode;
asChild?: boolean;
}
function Button({
className,
variant,
size,
loading = false,
leftIcon,
rightIcon,
children,
disabled,
...props
}: ButtonProps) {
const isDisabled = disabled;
return (
<button
className={cn(
extendedButtonVariants({ variant, size, className }),
loading && "pointer-events-none",
)}
disabled={isDisabled}
{...props}
>
{loading && (
<CircleNotchIcon className="h-4 w-4 animate-spin" weight="bold" />
)}
{!loading && leftIcon}
{children}
{!loading && rightIcon}
</button>
);
}
Button.displayName = "Button";
export { Button, extendedButtonVariants };

View File

@@ -1,9 +1,9 @@
import { StoryCode } from "@/stories/helpers/StoryCode";
import { StoryCode } from "@/components/tokens/helpers/StoryCode";
import type { Meta, StoryObj } from "@storybook/nextjs";
import { Text, textVariants } from "./Text";
const meta: Meta<typeof Text> = {
title: "Design System/Atoms/Text",
title: "Atoms/Text",
component: Text,
tags: ["autodocs"],
parameters: {

View File

@@ -26,9 +26,9 @@ export function CronScheduler({
}: CronSchedulerProps) {
const [frequency, setFrequency] = useState<
"minute" | "hour" | "daily" | "weekly" | "monthly" | "yearly" | "custom"
>("minute");
>("daily");
const [selectedDays, setSelectedDays] = useState<number[]>([]);
const [selectedTime, setSelectedTime] = useState<string>("00:00");
const [selectedTime, setSelectedTime] = useState<string>("09:00");
const [showCustomDays, setShowCustomDays] = useState<boolean>(false);
const [selectedMinute, setSelectedMinute] = useState<string>("0");
const [customInterval, setCustomInterval] = useState<{
@@ -77,7 +77,7 @@ export function CronScheduler({
<Select
onValueChange={(value: any) => setFrequency(value)}
defaultValue="minute"
defaultValue="daily"
>
<SelectTrigger>
<SelectValue placeholder="Select frequency" />

View File

@@ -456,7 +456,6 @@ const meta: Meta<typeof OverviewComponent> = {
component: OverviewComponent,
parameters: {
layout: "fullscreen",
controls: { disable: true },
},
};

View File

@@ -0,0 +1,79 @@
export const colors = {
slate: {
50: "#f0f1f3",
100: "#cfd4db",
200: "#b8bfca",
300: "#97a2b1",
400: "#8390a2",
500: "#64748b",
600: "#5b6a7e",
700: "#475263",
800: "#37404c",
900: "#2a313a",
},
zinc: {
50: "#f4f4f5",
100: "#e5e5e6",
200: "#cacace",
300: "#adadb3",
400: "#8d8d95",
500: "#71717a",
600: "#65656c",
700: "#505057",
800: "#3e3e43",
900: "#2C2C30",
},
red: {
50: "#fdecec",
100: "#fac5c5",
200: "#f8a9a9",
300: "#f48282",
400: "#f26969",
500: "#ef4444",
600: "#d93e3e",
700: "#aa3030",
800: "#832525",
900: "#641d1d",
},
orange: {
50: "#fff3e6",
100: "#ffdab0",
200: "#ffc88a",
300: "#feaf54",
400: "#fe9f33",
500: "#fe8700",
600: "#e77b00",
700: "#b46000",
800: "#8c4a00",
900: "#6b3900",
},
yellow: {
50: "#fef9e6",
100: "#fcebb0",
200: "#fae28a",
300: "#f8d554",
400: "#f7cd33",
500: "#f5c000",
600: "#dfaf00",
700: "#ae8800",
800: "#876a00",
900: "#675100",
},
green: {
50: "#e8f6ed",
100: "#b7e2c7",
200: "#94d5ac",
300: "#63c186",
400: "#45b56e",
500: "#16a34a",
600: "#149443",
700: "#107435",
800: "#0c5a29",
900: "#09441f",
},
// Special semantic colors
white: "#fefefe",
black: "#141414",
lightGrey: "#F3F4F6",
};

View File

@@ -1,10 +1,10 @@
import { Text } from "@/components/atoms/Text/Text";
import type { Meta } from "@storybook/nextjs";
import { Text } from "@/components/_new/Text/Text";
import { StoryCode } from "@/stories/helpers/StoryCode";
import { SquareArrowOutUpRight } from "lucide-react";
import { StoryCode } from "./helpers/StoryCode";
const meta: Meta = {
title: "Design System/ Tokens /Border Radius",
title: "Tokens /Border Radius",
parameters: {
layout: "fullscreen",
controls: { disable: true },

View File

@@ -0,0 +1,323 @@
import { Text } from "@/components/atoms/Text/Text";
import { colors } from "@/components/styles/colors";
import type { Meta } from "@storybook/nextjs";
import { StoryCode } from "./helpers/StoryCode";
const meta: Meta = {
title: "Tokens /Colors",
parameters: {
layout: "fullscreen",
controls: { disable: true },
},
};
export default meta;
// Helper function to convert hex to RGB
function hexToRgb(hex: string): string {
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
if (!result) return hex;
const r = parseInt(result[1], 16);
const g = parseInt(result[2], 16);
const b = parseInt(result[3], 16);
return `rgb(${r}, ${g}, ${b})`;
}
// Generate color categories from colors.ts
const colorCategories = Object.entries(colors)
.filter(([key]) => !["white", "black"].includes(key))
.map(([colorName, colorShades]) => {
const descriptions: Record<string, string> = {
slate: "Cool gray tones for modern, professional interfaces",
zinc: "Neutral gray scale for backgrounds and subtle elements",
red: "Error states, warnings, and destructive actions",
orange: "Warnings, notifications, and secondary call-to-actions",
yellow: "Highlights, cautions, and attention-grabbing elements",
green: "Success states, confirmations, and positive actions",
};
return {
name: colorName.charAt(0).toUpperCase() + colorName.slice(1),
description: descriptions[colorName] || `${colorName} color variations`,
colors: Object.entries(colorShades as Record<string, string>).map(
([shade, hex]) => ({
name: `${colorName}-${shade}`,
hex,
rgb: hexToRgb(hex),
class: `bg-${colorName}-${shade}`,
textClass: `text-${colorName}-${shade}`,
}),
),
};
});
// Special colors from colors.ts
const specialColors = [
{
name: "Text",
description: "Primary text colors for content and typography",
colors: [
{
name: "text-white",
hex: colors.white,
rgb: hexToRgb(colors.white),
class: "text-white",
bgClass: "bg-white",
},
{
name: "text-black",
hex: colors.black,
rgb: hexToRgb(colors.black),
class: "text-black",
bgClass: "bg-black",
},
],
},
{
name: "Background",
description: "Standard background colors for layouts and surfaces",
colors: [
{
name: "bg-white",
hex: colors.white,
rgb: hexToRgb(colors.white),
class: "bg-white",
textClass: "text-white",
},
{
name: "bg-light-grey",
hex: colors.lightGrey,
rgb: hexToRgb(colors.lightGrey),
class: "bg-light-grey",
textClass: "text-light-grey",
},
],
},
];
export function AllVariants() {
return (
<div className="space-y-12">
{/* Color System Documentation */}
<div className="space-y-8">
<div>
<Text variant="h1" className="mb-4 text-zinc-800">
Color Palette
</Text>
<Text variant="large" className="text-zinc-600">
Use only these approved colors in your components. Many are named
like Tailwind&apos;s default theme but override those values with
our custom palette.
</Text>
</div>
<div className="grid gap-8 md:grid-cols-2">
<div>
<Text
variant="h2"
className="mb-2 text-xl font-semibold text-zinc-800"
>
How to Use
</Text>
<div className="space-y-4">
<div className="rounded-lg border border-gray-200 p-4">
<Text variant="body" className="mb-2 text-zinc-600">
Use any of the approved colors combined with{" "}
<a
href="https://tailwindcss.com/docs/colors"
target="_blank"
rel="noopener noreferrer"
className="text-blue-500"
>
tailwind classes
</a>
</Text>
<div className="font-mono text-sm text-zinc-800">
bg-slate-500 background-color: {colors.slate[500]}
</div>
</div>
<div className="rounded-lg border-2 border-dashed border-red-200 bg-red-50 p-4">
<Text
variant="body-medium"
className="mb-2 font-semibold text-red-800"
>
Only Use These Colors
</Text>
<Text variant="body" className="text-red-700">
These are the ONLY approved colors. Don&apos;t use other
Tailwind colors or arbitrary values.
</Text>
</div>
</div>
</div>
<div>
<Text
variant="h2"
className="mb-2 text-xl font-semibold text-zinc-800"
>
Color Selection Guide
</Text>
<div className="space-y-2 text-zinc-600">
<Text variant="body">
<strong>50-200:</strong> Light backgrounds, subtle borders
</Text>
<Text variant="body">
<strong>300-500:</strong> Interactive elements, primary colors
</Text>
<Text variant="body">
<strong>600-900:</strong> Text colors, dark backgrounds
</Text>
<Text variant="body">
<strong>Semantic:</strong> Red for errors, green for success
</Text>
</div>
</div>
</div>
</div>
{/* Special Colors */}
<div className="space-y-8">
<div className="grid gap-8 md:grid-cols-2">
{specialColors.map((category) => (
<div key={category.name} className="space-y-4">
<div>
<Text
variant="h3"
className="mb-1 text-lg font-semibold text-zinc-800"
>
{category.name}
</Text>
<Text variant="body" className="text-zinc-600">
{category.description}
</Text>
</div>
<div className="grid gap-3 sm:grid-cols-1">
{category.colors.map((color) => (
<div
key={color.name}
className="flex items-center gap-4 rounded-lg border border-gray-200 p-4"
>
<div
className="h-12 w-12 flex-shrink-0 rounded border border-gray-300"
style={{ backgroundColor: color.hex }}
></div>
<div className="flex-1 space-y-1">
<Text
variant="body-medium"
className="font-mono text-zinc-800"
>
{color.name}
</Text>
<Text variant="small" className="font-mono text-zinc-500">
{color.class}
</Text>
<div className="space-y-0.5">
<p className="font-mono text-xs text-zinc-500">
{color.hex}
</p>
<p className="font-mono text-xs text-zinc-500">
{color.rgb}
</p>
</div>
</div>
</div>
))}
</div>
</div>
))}
</div>
</div>
{/* Color Categories */}
<div className="space-y-12">
{colorCategories.map((category) => (
<div key={category.name} className="space-y-4">
<div>
<Text
variant="h3"
className="mb-1 text-lg font-semibold text-zinc-800"
>
{category.name}
</Text>
<Text variant="body" className="text-zinc-600">
{category.description}
</Text>
</div>
<div className="grid gap-3 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5">
{category.colors.map((color) => (
<div
key={color.name}
className="space-y-3 rounded-lg border border-gray-200 p-4"
>
<div
className="h-16 w-full rounded border border-gray-300"
style={{ backgroundColor: color.hex }}
></div>
<div className="space-y-1">
<Text
variant="body-medium"
className="font-mono text-zinc-800"
>
{color.name}
</Text>
<Text variant="small" className="font-mono text-zinc-500">
{color.class}
</Text>
<div className="space-y-0.5">
<p className="font-mono text-xs text-zinc-500">
{color.hex}
</p>
<p className="font-mono text-xs text-zinc-500">
{color.rgb}
</p>
</div>
</div>
</div>
))}
</div>
</div>
))}
</div>
{/* Usage Examples */}
<div className="space-y-8">
<div>
<Text
variant="h2"
className="mb-2 text-xl font-semibold text-zinc-800"
>
Usage Examples
</Text>
</div>
<StoryCode
code={`// ✅ CORRECT - Use approved design tokens
<div className="bg-slate-100 text-slate-800">
Content with approved colors
</div>
<button className="bg-green-500 text-white hover:bg-green-600">
Success Button
</button>
// Text colors
<h1 className="text-black">Primary heading</h1>
<p className="text-zinc-600">Secondary text</p>
// Semantic usage
<div className="bg-green-50 border-green-200 text-green-800">Success</div>
<div className="bg-red-50 border-red-200 text-red-800">Error</div>
<div className="bg-yellow-50 border-yellow-200 text-yellow-800">Warning</div>
// ❌ INCORRECT - Don't use these
<div className="bg-blue-500 text-purple-600">❌ Not approved</div>
<div className="bg-[#1234ff]">❌ Arbitrary values</div>`}
/>
</div>
</div>
);
}

View File

@@ -1,5 +1,4 @@
import { Text } from "@/components/_new/Text/Text";
import { StoryCode } from "@/stories/helpers/StoryCode";
import { Text } from "@/components/atoms/Text/Text";
import {
Alien,
ArrowClockwise,
@@ -40,9 +39,10 @@ import {
} from "@phosphor-icons/react";
import type { Meta } from "@storybook/nextjs";
import { SquareArrowOutUpRight } from "lucide-react";
import { StoryCode } from "./helpers/StoryCode";
const meta: Meta = {
title: "Design System/ Tokens /Icons",
title: "Tokens /Icons",
parameters: {
layout: "fullscreen",
controls: { disable: true },

View File

@@ -1,10 +1,10 @@
import { Text } from "@/components/atoms/Text/Text";
import type { Meta } from "@storybook/nextjs";
import { Text } from "@/components/_new/Text/Text";
import { StoryCode } from "@/stories/helpers/StoryCode";
import { SquareArrowOutUpRight } from "lucide-react";
import { StoryCode } from "./helpers/StoryCode";
const meta: Meta = {
title: "Design System/ Tokens /Spacing",
title: "Tokens /Spacing",
parameters: {
layout: "fullscreen",
controls: { disable: true },

View File

@@ -1,9 +1,9 @@
import { Text } from "@/components/atoms/Text/Text";
import type { Meta } from "@storybook/nextjs";
import { Text } from "@/components/_new/Text/Text";
import { StoryCode } from "@/stories/helpers/StoryCode";
import { StoryCode } from "./helpers/StoryCode";
const meta: Meta<typeof Text> = {
title: "Design System/ Tokens /Typography",
title: "Tokens /Typography",
component: Text,
parameters: {
layout: "fullscreen",

View File

@@ -0,0 +1,35 @@
"use client";
import { isServer, QueryClient } from "@tanstack/react-query";
function makeQueryClient() {
return new QueryClient({
defaultOptions: {
queries: {
// Added this because if staleTime is 0 (default), the data fetched on the server becomes stale immediately on the client, and it refetches again.
staleTime: 60 * 1000,
// Highlighting some important defaults to avoid confusion
// Queries are stale by default → triggers background refetch
// Refetch triggers: on mount, window focus, reconnect
// Failed queries retry 3 times with exponential backoff
// Inactive queries are GC'd after 5 mins (gcTime = 5 * 60 * 1000)
// Structural sharing is enabled for efficient data comparison
// For more info, visit https://tanstack.com/query/latest/docs/framework/react/guides/important-defaults
},
},
});
}
let browserQueryClient: QueryClient | undefined = undefined;
export function getQueryClient() {
if (isServer) {
// Server: create new client every time (so one user's data doesn't leak to another)
return makeQueryClient();
} else {
// Client: reuse the same client (to keep cache + avoid bugs if React suspends)
if (!browserQueryClient) browserQueryClient = makeQueryClient();
return browserQueryClient;
}
}

View File

@@ -1,4 +1,6 @@
import type { Config } from "tailwindcss";
import tailwindcssAnimate from "tailwindcss-animate";
import { colors } from "./src/components/styles/colors";
const config = {
darkMode: ["class"],
@@ -19,6 +21,13 @@ const config = {
poppins: ["var(--font-poppins)"],
},
colors: {
// *** APPROVED DESIGN SYSTEM COLORS ***
// These are the ONLY colors that should be used in our app
...colors,
// Legacy colors - DO NOT USE THESE IN NEW CODE
// These are kept only to prevent breaking existing styles
// Use the approved design system colors above instead
border: "hsl(var(--border))",
input: "hsl(var(--input))",
ring: "hsl(var(--ring))",
@@ -52,7 +61,6 @@ const config = {
DEFAULT: "hsl(var(--card))",
foreground: "hsl(var(--card-foreground))",
},
// Extend the color palette with custom colors
customGray: {
100: "#d9d9d9",
200: "#a8a8a8",
@@ -141,7 +149,7 @@ const config = {
},
},
},
plugins: [require("tailwindcss-animate")],
plugins: [tailwindcssAnimate],
} satisfies Config;
export default config;