UI Package: refactor (#4529)

* Separate styles responsibilities

* Add misssing dependencies

* Intro page added

* formatting fix
This commit is contained in:
Pavel Laptev 2024-07-29 13:52:14 +02:00 committed by GitHub
parent 16400aa4f0
commit 1c6b03eb6b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 332 additions and 164 deletions

View File

@ -29,5 +29,8 @@
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[mdx]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}

View File

@ -1,6 +1,7 @@
<script lang="ts">
import '@gitbutler/ui/fonts.css';
import '@gitbutler/ui/main.css';
import '../styles.css';
import { PromptService as AIPromptService } from '$lib/ai/promptService';
import { AIService } from '$lib/ai/service';

119
apps/desktop/src/styles.css Normal file
View File

@ -0,0 +1,119 @@
.link {
text-decoration: underline;
&:hover {
text-decoration: none;
}
}
body {
color: var(--clr-text-1);
background-color: var(--clr-bg-2);
}
/**
* Prevents elements within drop-zones from firing mouse events, making
* it much easier to manage in/out/over/leave events since they fire less
* frequently.
*/
.drop-zone-hover * {
pointer-events: none;
}
/* FOCUS STATE */
.focus-state {
&:focus-within {
outline: 1px solid transaparent;
animation: focus-animation var(--transition-fast) forwards;
}
}
@keyframes focus-animation {
0% {
outline-offset: 0;
}
100% {
outline-offset: 2px;
outline: 1px solid var(--focus-color);
}
}
/* CODE */
.code-string {
font-family: var(--mono-font-family);
border-radius: var(--radius-s);
background: var(--clr-scale-ntrl-80);
padding: 1px 4px;
}
/* TRANSITION ANIMATION */
.transition-fly {
animation: transition-fly 0.25s forwards ease-in-out;
}
@keyframes transition-fly {
0% {
transform: translateY(6px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
/* STATES */
.wiggle {
animation: wiggle-animation 0.35s forwards;
}
@keyframes wiggle-animation {
0% {
transform: translateX(-3px);
}
25% {
transform: translateX(3px);
}
50% {
transform: translateX(-2px);
}
75% {
transform: translateX(2px);
}
100% {
transform: translateX(0);
}
}
.locked-file-animation {
--locked-color: oklch(from var(--clr-scale-warn-50) l c h / 0.2);
border: 1px solid var(--clr-bg-1);
animation: locked-file-animation 1.4s ease-out forwards;
}
@keyframes locked-file-animation {
0% {
transform: translateX(-3px);
background-color: var(--clr-bg-1);
}
10% {
transform: translateX(3px);
background-color: var(--locked-color);
}
15% {
transform: translateX(-3px);
}
25% {
transform: translateX(3px);
background-color: var(--locked-color);
}
30%,
70% {
transform: translateX(0);
}
100% {
background-color: var(--clr-bg-1);
}
}

View File

@ -23,8 +23,10 @@
"storybook:build": "storybook build"
},
"devDependencies": {
"@chromatic-com/storybook": "^1.6.1",
"@csstools/postcss-bundler": "^1.0.15",
"@csstools/postcss-minify": "^1.1.5",
"@storybook/addon-docs": "^8.2.6",
"@storybook/addon-essentials": "^8.1.10",
"@storybook/addon-interactions": "^8.1.10",
"@storybook/addon-links": "^8.1.10",

View File

@ -0,0 +1,7 @@
import { Meta } from '@storybook/addon-docs';
<Meta title="About/Introduction" />
# 🤖 Welcome to GitButler UI
<img src="https://i.imgflip.com/39lzga.jpg" alt="" />

View File

@ -24,9 +24,6 @@
margin: 0;
line-height: inherit;
color: var(--clr-text-1);
background-color: var(--clr-bg-2);
/* optimise font rendering */
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;

View File

@ -5,6 +5,7 @@
/* UTILITY */
@import './utility/text.css';
@import './utility/helpers.css';
/* SHARABLE */
@import './sharable/card.css';
@ -20,164 +21,3 @@
/* LAYERS PRIORITY */
@layer reset, sharable;
/* scrollbar helpers */
.hide-native-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
&::-webkit-scrollbar {
display: none;
}
}
.truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* custom scrollbar */
.scrollbar,
pre {
&::-webkit-scrollbar {
background-color: transaparent;
width: 14px;
}
&::-webkit-scrollbar-track {
background-color: transaparent;
}
&::-webkit-scrollbar-thumb {
background-color: var(--clr-border-1);
background-clip: padding-box;
border-radius: 12px;
border: 4px solid rgba(0, 0, 0, 0);
opacity: 0.3;
}
&::-webkit-scrollbar-thumb:hover {
opacity: 0.8;
}
&::-webkit-scrollbar-button {
display: none;
}
}
.link {
text-decoration: underline;
&:hover {
text-decoration: none;
}
}
/**
* Prevents elements within drop-zones from firing mouse events, making
* it much easier to manage in/out/over/leave events since they fire less
* frequently.
*/
.drop-zone-hover * {
pointer-events: none;
}
/* FOCUS STATE */
.focus-state {
&:focus-within {
outline: 1px solid transaparent;
animation: focus-animation var(--transition-fast) forwards;
}
}
@keyframes focus-animation {
0% {
outline-offset: 0;
}
100% {
outline-offset: 2px;
outline: 1px solid var(--focus-color);
}
}
/* CODE */
.code-string {
font-family: var(--mono-font-family);
border-radius: var(--radius-s);
background: var(--clr-scale-ntrl-80);
padding: 1px 4px;
}
/* TRANSITION ANIMATION */
.transition-fly {
animation: transition-fly 0.25s forwards ease-in-out;
}
@keyframes transition-fly {
0% {
transform: translateY(6px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
/* STATES */
.wiggle {
animation: wiggle-animation 0.35s forwards;
}
@keyframes wiggle-animation {
0% {
transform: translateX(-3px);
}
25% {
transform: translateX(3px);
}
50% {
transform: translateX(-2px);
}
75% {
transform: translateX(2px);
}
100% {
transform: translateX(0);
}
}
.locked-file-animation {
--locked-color: oklch(from var(--clr-scale-warn-50) l c h / 0.2);
border: 1px solid var(--clr-bg-1);
animation: locked-file-animation 1.4s ease-out forwards;
}
@keyframes locked-file-animation {
0% {
transform: translateX(-3px);
background-color: var(--clr-bg-1);
}
10% {
transform: translateX(3px);
background-color: var(--locked-color);
}
15% {
transform: translateX(-3px);
}
25% {
transform: translateX(3px);
background-color: var(--locked-color);
}
30%,
70% {
transform: translateX(0);
}
100% {
background-color: var(--clr-bg-1);
}
}

View File

@ -0,0 +1,44 @@
/* scrollbar helpers */
.hide-native-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
&::-webkit-scrollbar {
display: none;
}
}
/* custom scrollbar */
.scrollbar,
pre {
&::-webkit-scrollbar {
background-color: transaparent;
width: 14px;
}
&::-webkit-scrollbar-track {
background-color: transaparent;
}
&::-webkit-scrollbar-thumb {
background-color: var(--clr-border-1);
background-clip: padding-box;
border-radius: 12px;
border: 4px solid rgba(0, 0, 0, 0);
opacity: 0.3;
}
&::-webkit-scrollbar-thumb:hover {
opacity: 0.8;
}
&::-webkit-scrollbar-button {
display: none;
}
}
.truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}

View File

@ -288,12 +288,18 @@ importers:
packages/ui:
devDependencies:
'@chromatic-com/storybook':
specifier: ^1.6.1
version: 1.6.1(react@18.3.1)
'@csstools/postcss-bundler':
specifier: ^1.0.15
version: 1.0.15(postcss@8.4.39)
'@csstools/postcss-minify':
specifier: ^1.1.5
version: 1.1.5(postcss@8.4.39)
'@storybook/addon-docs':
specifier: ^8.2.6
version: 8.2.6(storybook@8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
'@storybook/addon-essentials':
specifier: ^8.1.10
version: 8.1.10(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -1002,6 +1008,10 @@ packages:
resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==}
engines: {node: '>=6.9.0'}
'@chromatic-com/storybook@1.6.1':
resolution: {integrity: sha512-x1x1NB3j4xpfeSWKr96emc+7ZvfsvH+/WVb3XCjkB24PPbT8VZXb3mJSAQMrSzuQ8+eQE9kDogYHH9Fj3tb/Cw==}
engines: {node: '>=16.0.0', yarn: '>=1.22.18'}
'@codemirror/autocomplete@6.16.2':
resolution: {integrity: sha512-MjfDrHy0gHKlPWsvSsikhO1+BOh+eBHNgfH1OXs1+DAf30IonQldgMM3kxLDTG9ktE7kDLaA1j/l7KMPA4KNfw==}
peerDependencies:
@ -2038,6 +2048,11 @@ packages:
'@storybook/addon-docs@8.1.10':
resolution: {integrity: sha512-jzmIeCoykiHg/KLPrYEDtXO/+dcQaEOqyJHS77eTzAO2iSXJlE+yva5Uwc8apG7UxDVa4Ycc1lPwMzB5GaHsGQ==}
'@storybook/addon-docs@8.2.6':
resolution: {integrity: sha512-qe7hxntaezqjKdU9QS+Q9NFL6i/uNdBxdvOnCKgPhBAY/zY6yhk5t3sOvonynPK5nkaNAowfSNPIzNxAXlJ1sA==}
peerDependencies:
storybook: ^8.2.6
'@storybook/addon-essentials@8.1.10':
resolution: {integrity: sha512-xgAXdl/MaKWmwqJJpw4z1YaD1V/r74VHHLqY3Z4YaU9DmlApkCa+FmZSS9QVAf7g6JNUcD1Dbtw5j62uNn+YyA==}
@ -2078,6 +2093,18 @@ packages:
react-dom:
optional: true
'@storybook/blocks@8.2.6':
resolution: {integrity: sha512-nMlZJjVTyfOJ6xwORptsNuS1AZZlDbJUVXc2R8uukGd5GIXxxCdrPk4NvUsjfQslMT9LhYuFld3z62FATsM2rw==}
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: ^8.2.6
peerDependenciesMeta:
react:
optional: true
react-dom:
optional: true
'@storybook/builder-manager@8.1.10':
resolution: {integrity: sha512-dhg54zpaglR9XKNAiwMqm5/IONMCEG/hO/iTfNHJI1rAGeWhvM71cmhF+VlKUcjpTlIfHe7J19+TL+sWQJNgtg==}
@ -2132,12 +2159,20 @@ packages:
'@storybook/csf-plugin@8.1.10':
resolution: {integrity: sha512-EwW9Olw85nKamUH/2YrkD+bxDvDP4TJ2MqS1qR3UU+lBP/HMQA2zFAgiW1TUmmdHmhAeiDOXbDhijxMa30sppQ==}
'@storybook/csf-plugin@8.2.6':
resolution: {integrity: sha512-USn7E/bMQYVqvFBuW6d9rKoSuCImjk0BAmc/0wIOuMQ/yQNp2Xze0m8eVkNHUIUDokyx0TXDjRjwq10Xxk16ag==}
peerDependencies:
storybook: ^8.2.6
'@storybook/csf-tools@8.1.10':
resolution: {integrity: sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==}
'@storybook/csf@0.0.1':
resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==}
'@storybook/csf@0.1.11':
resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==}
'@storybook/csf@0.1.8':
resolution: {integrity: sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==}
@ -2181,6 +2216,13 @@ 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/react-dom-shim@8.2.6':
resolution: {integrity: sha512-B+x8UAEQPDp1yhN3tMh09NvSL38QNfJB7PAyLgKrfE7xIAzvewq+RLW2DfGkoZCy+Zr7QSHm1p7NOgud8+sQCg==}
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: ^8.2.6
'@storybook/router@8.1.10':
resolution: {integrity: sha512-JDEgZ0vVDx0GLz+dKD+R1xqWwjqsCdA2F+s3/si7upHqkFRWU5ocextZ63oKsRnCoaeUh6OavAU4EdkrKiQtQw==}
@ -2991,6 +3033,18 @@ packages:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
chromatic@11.5.6:
resolution: {integrity: sha512-ycX/hlZLs69BltwwBNsEXr+As6x5/0rlwp6W/CiHMZ3tpm7dmkd+hQCsb8JGHb1h49W3qPOKQ/Lh9evqcJ1yeQ==}
hasBin: true
peerDependencies:
'@chromatic-com/cypress': ^0.*.* || ^1.0.0
'@chromatic-com/playwright': ^0.*.* || ^1.0.0
peerDependenciesMeta:
'@chromatic-com/cypress':
optional: true
'@chromatic-com/playwright':
optional: true
citty@0.1.6:
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
@ -3644,6 +3698,10 @@ packages:
filelist@1.0.4:
resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
filesize@10.1.4:
resolution: {integrity: sha512-ryBwPIIeErmxgPnm6cbESAzXjuEFubs+yKYLBZvg3CaiNcmkJChoOGcBSrZ6IwkMwPABwPpVXE6IlNdGJJrvEg==}
engines: {node: '>= 10.4.0'}
fill-range@7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
@ -4436,6 +4494,12 @@ packages:
peerDependencies:
react: '>= 0.14.0'
markdown-to-jsx@7.4.7:
resolution: {integrity: sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==}
engines: {node: '>= 10'}
peerDependencies:
react: '>= 0.14.0'
marked@10.0.0:
resolution: {integrity: sha512-YiGcYcWj50YrwBgNzFoYhQ1hT6GmQbFG8SksnYJX1z4BXTHSOrz1GB5/Jm2yQvMg4nN1FHP4M6r03R10KrVUiA==}
engines: {node: '>= 18'}
@ -5099,6 +5163,12 @@ packages:
react: '>=16.8.0'
react-dom: '>=16.8.0'
react-confetti@6.1.0:
resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==}
engines: {node: '>=10.18'}
peerDependencies:
react: ^16.3.0 || ^17.0.1 || ^18.0.0
react-dom@18.3.1:
resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
peerDependencies:
@ -5756,6 +5826,9 @@ packages:
resolution: {integrity: sha512-QaLaUL1CqblSKKPgLrFW3lZWkWG4pGBQNW+q1ScJB5v1D/nFWtsrD/yZljW/bdawg90ihi4/ftQJ3h6fz1FamA==}
hasBin: true
tween-functions@1.2.0:
resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==}
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
@ -7012,6 +7085,18 @@ snapshots:
'@babel/helper-validator-identifier': 7.24.7
to-fast-properties: 2.0.0
'@chromatic-com/storybook@1.6.1(react@18.3.1)':
dependencies:
chromatic: 11.5.6
filesize: 10.1.4
jsonfile: 6.1.0
react-confetti: 6.1.0(react@18.3.1)
strip-ansi: 7.1.0
transitivePeerDependencies:
- '@chromatic-com/cypress'
- '@chromatic-com/playwright'
- react
'@codemirror/autocomplete@6.16.2(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1)':
dependencies:
'@codemirror/language': 6.10.2
@ -8210,6 +8295,25 @@ snapshots:
- prettier
- supports-color
'@storybook/addon-docs@8.2.6(storybook@8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@babel/core': 7.24.7
'@mdx-js/react': 3.0.1(@types/react@18.3.3)(react@18.3.1)
'@storybook/blocks': 8.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
'@storybook/csf-plugin': 8.2.6(storybook@8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
'@storybook/global': 5.0.0
'@storybook/react-dom-shim': 8.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
'@types/react': 18.3.3
fs-extra: 11.2.0
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
rehype-external-links: 3.0.0
rehype-slug: 6.0.0
storybook: 8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
ts-dedent: 2.2.0
transitivePeerDependencies:
- supports-color
'@storybook/addon-essentials@8.1.10(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@storybook/addon-actions': 8.1.10
@ -8314,6 +8418,27 @@ snapshots:
- prettier
- supports-color
'@storybook/blocks@8.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@storybook/csf': 0.1.11
'@storybook/global': 5.0.0
'@storybook/icons': 1.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@types/lodash': 4.17.5
color-convert: 2.0.1
dequal: 2.0.3
lodash: 4.17.21
markdown-to-jsx: 7.4.7(react@18.3.1)
memoizerific: 1.11.3
polished: 4.3.1
react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
storybook: 8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
telejson: 7.2.0
ts-dedent: 2.2.0
util-deprecate: 1.0.2
optionalDependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
'@storybook/builder-manager@8.1.10(prettier@3.3.2)':
dependencies:
'@fal-works/esbuild-plugin-global-externals': 2.1.2
@ -8564,6 +8689,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@storybook/csf-plugin@8.2.6(storybook@8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
storybook: 8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
unplugin: 1.10.1
'@storybook/csf-tools@8.1.10':
dependencies:
'@babel/generator': 7.24.7
@ -8582,6 +8712,10 @@ snapshots:
dependencies:
lodash: 4.17.21
'@storybook/csf@0.1.11':
dependencies:
type-fest: 2.19.0
'@storybook/csf@0.1.8':
dependencies:
type-fest: 2.19.0
@ -8669,6 +8803,12 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
'@storybook/react-dom-shim@8.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
storybook: 8.1.10(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@storybook/router@8.1.10':
dependencies:
'@storybook/client-logger': 8.1.10
@ -9679,6 +9819,8 @@ snapshots:
chownr@2.0.0: {}
chromatic@11.5.6: {}
citty@0.1.6:
dependencies:
consola: 3.2.3
@ -10546,6 +10688,8 @@ snapshots:
dependencies:
minimatch: 5.1.6
filesize@10.1.4: {}
fill-range@7.0.1:
dependencies:
to-regex-range: 5.0.1
@ -11350,6 +11494,10 @@ snapshots:
dependencies:
react: 18.3.1
markdown-to-jsx@7.4.7(react@18.3.1):
dependencies:
react: 18.3.1
marked@10.0.0: {}
media-typer@0.3.0: {}
@ -11960,6 +12108,11 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-confetti@6.1.0(react@18.3.1):
dependencies:
react: 18.3.1
tween-functions: 1.2.0
react-dom@18.3.1(react@18.3.1):
dependencies:
loose-envify: 1.4.0
@ -12686,6 +12839,8 @@ snapshots:
turbo-windows-64: 2.0.9
turbo-windows-arm64: 2.0.9
tween-functions@1.2.0: {}
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1