diff --git a/.env.development b/.env.development index 26abe8f3..8d4b27e3 100644 --- a/.env.development +++ b/.env.development @@ -3,6 +3,7 @@ EAS_PROJECT_ID="" EXPO_APPLE_TEAM_ID="" API_URL="" +STORYBOOK_ENABLED="" ITUNES_ITEM_ID="" SENTRY_DSN="" diff --git a/.env.production b/.env.production index 03dd8cb0..3b84026c 100644 --- a/.env.production +++ b/.env.production @@ -3,6 +3,7 @@ EAS_PROJECT_ID="" EXPO_APPLE_TEAM_ID="" API_URL="" +STORYBOOK_ENABLED="" ITUNES_ITEM_ID="" SENTRY_DSN="" diff --git a/.env.staging b/.env.staging index aacb9144..0377dca3 100644 --- a/.env.staging +++ b/.env.staging @@ -3,6 +3,7 @@ EAS_PROJECT_ID="" EXPO_APPLE_TEAM_ID="" API_URL="" +STORYBOOK_ENABLED="" ITUNES_ITEM_ID="" SENTRY_DSN="" diff --git a/.storybook/index.ts b/.storybook/index.ts new file mode 100644 index 00000000..6eea7606 --- /dev/null +++ b/.storybook/index.ts @@ -0,0 +1,11 @@ +import AsyncStorage from '@react-native-async-storage/async-storage'; +import { view } from './storybook.requires'; + +const StorybookUIRoot = view.getStorybookUI({ + storage: { + getItem: AsyncStorage.getItem, + setItem: AsyncStorage.setItem, + }, +}); + +export default StorybookUIRoot; diff --git a/.storybook/main.ts b/.storybook/main.ts new file mode 100644 index 00000000..b216da72 --- /dev/null +++ b/.storybook/main.ts @@ -0,0 +1,12 @@ +import { StorybookConfig } from '@storybook/react-native'; + +const main: StorybookConfig = { + stories: ['../src/**/*.stories.?(ts|tsx|js|jsx)'], + addons: [ + '@storybook/addon-ondevice-controls', + '@storybook/addon-ondevice-backgrounds', + '@storybook/addon-ondevice-actions', + ], +}; + +export default main; diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx new file mode 100644 index 00000000..041126c5 --- /dev/null +++ b/.storybook/preview.tsx @@ -0,0 +1,25 @@ +import { withBackgrounds } from '@storybook/addon-ondevice-backgrounds'; +import type { Preview } from '@storybook/react'; + +const preview: Preview = { + decorators: [withBackgrounds], + + parameters: { + backgrounds: { + default: 'dark', + values: [ + { name: 'dark', value: '#1E1E1E' }, + { name: 'light', value: '#FFFFFF' }, + ], + }, + actions: { argTypesRegex: '^on[A-Z].*' }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, + }, +}; + +export default preview; diff --git a/.storybook/storybook.requires.ts b/.storybook/storybook.requires.ts new file mode 100644 index 00000000..fe2a7371 --- /dev/null +++ b/.storybook/storybook.requires.ts @@ -0,0 +1,50 @@ +/* do not change this file, it is auto generated by storybook. */ + +import { start, updateView } from "@storybook/react-native"; + +import "@storybook/addon-ondevice-controls/register"; +import "@storybook/addon-ondevice-backgrounds/register"; +import "@storybook/addon-ondevice-actions/register"; + +const normalizedStories = [ + { + titlePrefix: "", + directory: "./src", + files: "**/*.stories.?(ts|tsx|js|jsx)", + importPathMatcher: + /^\.(?:(?:^|\/|(?:(?:(?!(?:^|\/)\.).)*?)\/)(?!\.)(?=.)[^/]*?\.stories\.(?:ts|tsx|js|jsx)?)$/, + // @ts-ignore + req: require.context( + "../src", + true, + /^\.(?:(?:^|\/|(?:(?:(?!(?:^|\/)\.).)*?)\/)(?!\.)(?=.)[^/]*?\.stories\.(?:ts|tsx|js|jsx)?)$/ + ), + }, +]; + +declare global { + var view: ReturnType; + var STORIES: typeof normalizedStories; +} + +const annotations = [ + require("./preview"), + require("@storybook/react-native/preview"), + require("@storybook/addon-ondevice-actions/preview"), +]; + +global.STORIES = normalizedStories; + +// @ts-ignore +module?.hot?.accept?.(); + +if (!global.view) { + global.view = start({ + annotations, + storyEntries: normalizedStories, + }); +} else { + updateView(global.view, annotations, normalizedStories); +} + +export const view = global.view; diff --git a/.vscode/settings.json b/.vscode/settings.json index 0964c22f..e849631d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,5 +20,6 @@ "doppler.autocomplete.enable": true, "doppler.hover.enable": true, "typescript.tsdk": "node_modules/typescript/lib", - "typescript.enablePromptUseWorkspaceTsdk": true + "typescript.enablePromptUseWorkspaceTsdk": true, + "react-native-storybooks.storyRegex": "**/*.stories.?(ts|tsx|js|jsx)" } diff --git a/README.md b/README.md index 89a79c6e..51f21ed5 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ - [Environments](#environments) - [Internationalization](#internationalization) - [Adding images](#adding-images) - - [Using the custom Sandbox](#using-the-custom-sandbox) + - [Using Storybook](#using-storybook) - [Tests](#tests) - [Formatting and type checking](#formatting-and-type-checking) - [Github Actions](#github-actions) @@ -24,7 +24,7 @@ It's a basic start, but with most of the common dependencies and tools I use so Check the [React Native docs](https://reactnative.dev/docs/environment-setup) on how to properly setup your dev environment. It uses Expo with a custom Development Build, so you also need to setup [Expo tooling](https://docs.expo.dev/). -On the Developer Experience side, a test stack is setup (unit, functional and E2E), a CI on _Github Actions_, a custom _Storybook_, _TypeScript_ is also configured with _ESLint_ and _Prettier_. Commits are linted to automate the release workflows and the changelog generation. +On the Developer Experience side, a test stack is setup (unit, functional and E2E), a CI on _Github Actions_, _Storybook_, _TypeScript_ is also configured with _ESLint_ and _Prettier_. Commits are linted to automate the release workflows and the changelog generation. There are also some utilities like: @@ -140,11 +140,15 @@ To simplify adding new images to the project and optimizing them, you can run th yarn image:add [path/to/the/image/to/add|path/to/the/folder] ``` -## Using the custom Sandbox +## Using Storybook -A custom _Sandbox_ is configured with some basic examples and navigation. Once [StoryBook](https://storybook.js.org/) for React Native will support V8, I'll migrate to using that. +A _Storybook_ is configured with some basic stories. -To access it, you can access the dev menu on the device and select _Toggle Sandbox_ to have it shown in place of the app. +To access it, you simply have to run the app with the following command: + +``` +yarn start:storybook +``` ## Tests diff --git a/env.js b/env.js index afb769ef..3ef30b2b 100644 --- a/env.js +++ b/env.js @@ -36,6 +36,7 @@ const client = z.object({ VERSION: z.string(), // ADD CLIENT ENV VARS HERE + STORYBOOK_ENABLED: z.string().optional(), API_URL: z.string(), ITUNES_ITEM_ID: z.string(), FLAGSMITH_KEY: z.string(), @@ -63,13 +64,14 @@ const buildTime = z.object({ const _clientEnv = { APP_ENV, + APP_NAME: process.env.APP_NAME, BUNDLE_ID: withEnvSuffix(BUNDLE_ID), PACKAGE: withEnvSuffix(PACKAGE), VERSION: packageJSON.version, // ADD ENV VARS HERE TOO - APP_NAME: process.env.APP_NAME, API_URL: process.env.API_URL, + STORYBOOK_ENABLED: process.env.STORYBOOK_ENABLED, ITUNES_ITEM_ID: process.env.ITUNES_ITEM_ID, FLAGSMITH_KEY: process.env.FLAGSMITH_KEY, AMPLITUDE_API_KEY: process.env.AMPLITUDE_API_KEY, diff --git a/metro.config.js b/metro.config.js index 1e04d5bd..4b359d6e 100644 --- a/metro.config.js +++ b/metro.config.js @@ -1,8 +1,18 @@ // Learn more https://docs.expo.io/guides/customizing-metro // This replaces `const { getDefaultConfig } = require('expo/metro-config');` +const path = require('path'); + const { getSentryExpoConfig } = require('@sentry/react-native/metro'); +const withStorybook = require('@storybook/react-native/metro/withStorybook'); // This replaces `const config = getDefaultConfig(__dirname);` const config = getSentryExpoConfig(__dirname); -module.exports = config; +module.exports = withStorybook(config, { + enabled: process.env.STORYBOOK_ENABLED === 'true', + onDisabledRemoveStorybook: true, + websockets: { + port: 7007, + host: 'localhost', + }, +}); diff --git a/package.json b/package.json index 8be5b2de..d1a9b7ec 100644 --- a/package.json +++ b/package.json @@ -25,17 +25,17 @@ "node": ">=20" }, "scripts": { - "start:dev": "cross-env EXPO_NO_DOTENV=1 expo start --dev-client", - "start:staging": "cross-env APP_ENV=staging expo start --no-dev --minify", - "start:production": "cross-env APP_ENV=production expo start --no-dev --minify", + "start:dev": "EXPO_NO_DOTENV=1 expo start --dev-client", + "start:staging": "APP_ENV=staging expo start --no-dev --minify", + "start:production": "APP_ENV=production expo start --no-dev --minify", "//// BUILDS ////": "", - "build:dev:ios": "cross-env EXPO_NO_DOTENV=1 eas build --profile development --platform ios --local", - "build:dev:android": "cross-env EXPO_NO_DOTENV=1 eas build --profile development --platform android --local", - "build:dev-device:ios": "cross-env EXPO_NO_DOTENV=1 eas build --profile development-device --platform ios --local", - "build:staging:ios": "cross-env APP_ENV=staging eas build --profile staging --platform ios --local", - "build:staging:android": "cross-env APP_ENV=staging eas build --profile staging --platform android --local", - "build:production:ios": "cross-env APP_ENV=production eas build --profile production --platform ios --local", - "build:production:android": "cross-env APP_ENV=production eas build --profile production --platform android --local", + "build:dev:ios": "EXPO_NO_DOTENV=1 eas build --profile development --platform ios --local", + "build:dev:android": "EXPO_NO_DOTENV=1 eas build --profile development --platform android --local", + "build:dev-device:ios": "EXPO_NO_DOTENV=1 eas build --profile development-device --platform ios --local", + "build:staging:ios": "APP_ENV=staging eas build --profile staging --platform ios --local", + "build:staging:android": "APP_ENV=staging eas build --profile staging --platform android --local", + "build:production:ios": "APP_ENV=production eas build --profile production --platform ios --local", + "build:production:android": "APP_ENV=production eas build --profile production --platform android --local", "//// TESTS ////": "", "test": "jest --coverage=false", "test:coverage": "jest", @@ -43,12 +43,15 @@ "//// QUALITY ////": "", "lint:ts": "yarn tsc", "lint": "eslint ./ --ext .js,.ts,.tsx,.json --fix --ignore-path .gitignore", - "prettify": "yarn prettier --write './**/*.{js,ts,tsx}'", - "pretty:check": "yarn prettier --check './**/*.{js,ts,tsx}'", + "prettify": "yarn prettier --write './**/*.{js,ts,tsx}' '!.storybook/storybook.requires.ts'", + "pretty:check": "yarn prettier --check './**/*.{js,ts,tsx}' '!.storybook/storybook.requires.ts'", "//// UTILITIES ////": "", "codegen": "graphql-codegen --config codegen.ts", "image:add": "ts-node -T ./scripts/importImages/index.ts", "generate:icons": "svgr --config-file src/shared/icons/svgs/config/svgrConfig.js --svgo-config src/shared/icons/svgs/config/svgoConfig.js --index-template src/shared/icons/svgs/config/index-template.js --template src/shared/icons/svgs/config/icon-template.js --out-dir src/shared/icons/components -- src/shared/icons/svgs && eslint './src/shared/icons/components/**/*.{ts,tsx}' --ext .ts,.tsx --fix --quiet && prettier --write './src/shared/icons/components/**/*.{ts,tsx}'", + "//// STORYBOOK ////": "", + "storybook:generate": "sb-rn-get-stories", + "start:storybook": "STORYBOOK_ENABLED='true' expo start", "//// VERSIONNING ////": "", "version:bump": "standard-version --skip.commit --skip.changelog --skip.tag", "version:tag": "standard-version", @@ -59,11 +62,11 @@ }, "dependencies": { "@amplitude/analytics-react-native": "1.4.10", + "@gorhom/bottom-sheet": "5.0.6", "@hookform/resolvers": "3.9.0", "@react-native-async-storage/async-storage": "1.23.1", "@react-native-masked-view/masked-view": "0.3.1", "@react-navigation/native": "6.1.17", - "@react-navigation/native-stack": "6.9.26", "@sentry/react-native": "~5.24.3", "@shopify/flash-list": "1.6.4", "@shopify/restyle": "2.4.4", @@ -83,7 +86,7 @@ "expo-linking": "~6.3.1", "expo-localization": "~15.0.3", "expo-network": "~6.0.1", - "expo-router": "~3.5.23", + "expo-router": "~3.5.24", "expo-secure-store": "~13.0.2", "expo-splash-screen": "~0.27.6", "expo-status-bar": "~1.12.1", @@ -132,6 +135,13 @@ "@graphql-codegen/typescript": "4.1.0", "@graphql-codegen/typescript-operations": "4.3.0", "@graphql-codegen/typescript-react-query": "6.1.0", + "@react-native-community/datetimepicker": "^8.2.0", + "@react-native-community/slider": "^4.5.5", + "@storybook/addon-actions": "8.4.2", + "@storybook/addon-ondevice-actions": "8.4.2", + "@storybook/addon-ondevice-backgrounds": "8.4.2", + "@storybook/addon-ondevice-controls": "8.4.2", + "@storybook/react-native": "^8.4.2", "@svgr/cli": "8.1.0", "@testing-library/jest-native": "5.4.3", "@testing-library/react-native": "12.7.2", @@ -147,9 +157,9 @@ "@types/semver": "7.5.8", "@types/sharp": "0.31.0", "app-icon-badge": "0.0.15", + "babel-loader": "^8.4.1", "babel-plugin-root-import": "6.6.0", "babel-plugin-transform-remove-console": "6.9.4", - "cross-env": "7.0.3", "dotenv": "16.4.5", "eslint": "8.57.1", "eslint-config-tsyirvo-react-native": "https://github.com/tsyirvo/eslint-config-tsyirvo-react-native.git#develop", @@ -167,6 +177,7 @@ "prettier": "3.2.5", "sharp": "0.31.1", "standard-version": "9.5.0", + "storybook": "8.4.2", "ts-jest": "29.2.5", "ts-node": "10.9.2", "typescript": "~5.3.3" @@ -216,7 +227,7 @@ "!**/app.config.ts", "!**/**.e2e.ts", "!src/components/icons/components/**", - "!src/sandbox/**", + "!**/stories/**", "!**/**.types.ts" ] }, diff --git a/src/app/_layout.tsx b/src/app/_layout.tsx index faa7b6f4..89fe4bb7 100644 --- a/src/app/_layout.tsx +++ b/src/app/_layout.tsx @@ -3,6 +3,7 @@ import { Stack } from 'expo-router'; import { StatusBar } from 'expo-status-bar'; import Toast from 'react-native-toast-message'; +import { ErrorMonitoring } from '$core/monitoring'; import { useAppScreenTracking } from '$core/navigation/hooks/useAppScreenTracking'; import { useAppStateTracking } from '$core/navigation/hooks/useAppStateTracking'; import { Providers } from '$core/providers/Providers'; @@ -15,6 +16,9 @@ import 'react-native-gesture-handler'; import '../core/i18n'; +// Sentry is initialized here so that it runs before Sentry.wrap() +ErrorMonitoring.init(); + const RootLayout = () => { useCheckNetworkStateOnMount(); useAppStateTracking(); diff --git a/src/app/index.tsx b/src/app/index.tsx index 350ae15e..0dfaccd5 100644 --- a/src/app/index.tsx +++ b/src/app/index.tsx @@ -1,6 +1,7 @@ import { Stack, useRouter } from 'expo-router'; import { useTranslation } from 'react-i18next'; +import { config } from '$core/constants'; import { Header, Informations, Version } from '$features/home/components'; import { Button } from '$shared/uiKit/button'; import { Box, Text } from '$shared/uiKit/primitives'; @@ -46,4 +47,15 @@ const HomeScreen = () => { ); }; -export default HomeScreen; +// eslint-disable-next-line import/no-mutable-exports +let EntryPoint = HomeScreen; + +if (config.isStorybookEnabled) { + // eslint-disable-next-line + const StorybookUI = require('../../.storybook').default; + + // eslint-disable-next-line + EntryPoint = () => ; +} + +export default EntryPoint; diff --git a/src/core/bootstrapExternalSdks.ts b/src/core/bootstrapExternalSdks.ts index 16ad752c..b8b2c9af 100644 --- a/src/core/bootstrapExternalSdks.ts +++ b/src/core/bootstrapExternalSdks.ts @@ -2,7 +2,6 @@ import { Analytics } from './analytics'; import { Attribution } from './attribution'; import { initDateLocale } from './date'; import { getSupportedLocale } from './i18n'; -import { ErrorMonitoring } from './monitoring'; import { Notifications } from './notifications'; import { Purchase } from './purchase'; @@ -17,7 +16,6 @@ const initDateLib = (locale: string) => { export const bootstrapExternalSdks = async () => { // Core services to init first in a specific order - ErrorMonitoring.init(); await Analytics.init(); await Attribution.init(); diff --git a/src/core/constants/config.ts b/src/core/constants/config.ts index e8e73a27..9e4d8530 100644 --- a/src/core/constants/config.ts +++ b/src/core/constants/config.ts @@ -17,6 +17,7 @@ const runtimeVersion = Constants.expoConfig?.runtimeVersion; const iosBundleIdentifier = Constants.expoConfig?.ios?.bundleIdentifier ?? ''; const androidPackageName = Constants.expoConfig?.android?.package ?? ''; const apiURL = Env.API_URL; +const isStorybookEnabled = Env.STORYBOOK_ENABLED === 'true'; const sentryDsn = Env.SENTRY_DSN; const amplitudeApiKey = Env.AMPLITUDE_API_KEY; const flagsmithKey = Env.FLAGSMITH_KEY; @@ -37,6 +38,7 @@ export const config = { runtimeVersion, bundleId: IS_IOS ? iosBundleIdentifier : androidPackageName, apiURL, + isStorybookEnabled, // SDKs sentryDsn, amplitudeApiKey, diff --git a/src/core/i18n/resources/en/messages.ts b/src/core/i18n/resources/en/messages.ts index 12e931af..a37029fd 100644 --- a/src/core/i18n/resources/en/messages.ts +++ b/src/core/i18n/resources/en/messages.ts @@ -21,9 +21,10 @@ export const messages = { screenTitle: 'Home', title: 'Navigate to another page', }, - sandbox: { - content: 'Access the Sandbox form the Dev Menu with {{command}}', - title: 'Sandbox', + storybook: { + content: + 'Access Storybook by running the packager with "yarn start:storybook"', + title: 'Storybook', }, tests: { content: 'You can run tests with Jest or Maestro', diff --git a/src/core/i18n/resources/fr/messages.ts b/src/core/i18n/resources/fr/messages.ts index 9b69b2c8..9195d4a9 100644 --- a/src/core/i18n/resources/fr/messages.ts +++ b/src/core/i18n/resources/fr/messages.ts @@ -23,9 +23,10 @@ export const messages: MessagesTypes = { screenTitle: 'Accueil', title: 'Naviguer vers une autre page', }, - sandbox: { - content: 'Accéder à la Sandbox depuis le menu de dev avec {{command}}', - title: 'Sandbox', + storybook: { + content: + 'Accéder au Storybook en lançant le packager avec "yarn start:storybook"', + title: 'Storybook', }, tests: { content: 'Vous pouvez faire tourner les tests avec Jest ou Maestro', diff --git a/src/core/monitoring/errorMonitoring.ts b/src/core/monitoring/errorMonitoring.ts index 56672876..c828cfac 100644 --- a/src/core/monitoring/errorMonitoring.ts +++ b/src/core/monitoring/errorMonitoring.ts @@ -3,7 +3,6 @@ import * as Sentry from '@sentry/react-native'; import type { Breadcrumb, CaptureContext, SeverityLevel } from '@sentry/types'; import { config } from '$core/constants'; -import { Logger } from '$core/logger'; import type { tags } from './constants'; @@ -24,7 +23,8 @@ class ErrorMonitoringClass { const isEnabled = config.env !== 'development'; if (!config.sentryDsn) { - Logger.dev('Failed to initialize Sentry - No DSN found'); + // eslint-disable-next-line no-console + console.log('Failed to initialize Sentry - No DSN found'); return; } diff --git a/src/core/providers/Providers.tsx b/src/core/providers/Providers.tsx index 05497820..3e528cf9 100644 --- a/src/core/providers/Providers.tsx +++ b/src/core/providers/Providers.tsx @@ -12,7 +12,6 @@ import { persistOptions, queryClient } from '$core/api/queryClient'; import { FeatureFlagsProvider } from '$core/featureFlags'; import { ErrorMonitoring } from '$core/monitoring'; import { theme } from '$core/theme'; -import { Sandbox } from '$features/sandbox'; import { FullscreenErrorBoundary } from '$shared/components/FullscreenErrorBoundary'; import { Splashscreen } from '$shared/components/splashscreen'; @@ -75,9 +74,6 @@ const providers = [ { component: KeyboardProvider, }, - { - component: Sandbox, - }, { component: FeatureFlagsProvider, }, diff --git a/src/core/theme/stories/colors.stories.tsx b/src/core/theme/stories/colors.stories.tsx new file mode 100644 index 00000000..f3be6113 --- /dev/null +++ b/src/core/theme/stories/colors.stories.tsx @@ -0,0 +1,38 @@ +/* eslint-disable filename-rules/match */ + +import type { Meta, StoryObj } from '@storybook/react'; +import { ScrollView, View } from 'react-native'; + +import { Box, Text } from '$shared/uiKit/primitives'; + +import type { Colors as ThemeColors } from '../colors'; +import { theme } from '../theme'; + +const meta = { + title: 'Theme/Colors', + component: View, + render: () => ( + + + {(Object.keys(theme.colors) as ThemeColors[]).map((color) => ( + + {color} + + + + ))} + + + ), +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Colors: Story = {}; diff --git a/src/core/theme/stories/fonts.stories.tsx b/src/core/theme/stories/fonts.stories.tsx new file mode 100644 index 00000000..d59ffa18 --- /dev/null +++ b/src/core/theme/stories/fonts.stories.tsx @@ -0,0 +1,29 @@ +/* eslint-disable filename-rules/match */ + +import type { Meta, StoryObj } from '@storybook/react'; +import { View } from 'react-native'; + +import { Box, Text } from '$shared/uiKit/primitives'; + +import type { FontSizes as ThemeFontSizes } from '../fonts'; +import { fontSizes } from '../fonts'; + +const meta = { + title: 'Theme/FontSizes', + component: View, + render: () => ( + + {(Object.keys(fontSizes) as ThemeFontSizes[]).map((size) => ( + + {`This is a ${size} text`} + + ))} + + ), +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const FontSizes: Story = {}; diff --git a/src/core/theme/stories/radius.stories.tsx b/src/core/theme/stories/radius.stories.tsx new file mode 100644 index 00000000..db83efb7 --- /dev/null +++ b/src/core/theme/stories/radius.stories.tsx @@ -0,0 +1,31 @@ +/* eslint-disable filename-rules/match */ + +import type { Meta, StoryObj } from '@storybook/react'; +import { View } from 'react-native'; + +import { Box, Text } from '$shared/uiKit/primitives'; + +import type { BorderRadii } from '../radius'; +import { theme } from '../theme'; + +const meta = { + title: 'Theme/Radiuses', + component: View, + render: () => ( + + {(Object.keys(theme.borderRadii) as BorderRadii[]).map((radius) => ( + + {radius} + + + + ))} + + ), +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Radiuses: Story = {}; diff --git a/src/core/theme/stories/spacing.stories.tsx b/src/core/theme/stories/spacing.stories.tsx new file mode 100644 index 00000000..3cb8dad4 --- /dev/null +++ b/src/core/theme/stories/spacing.stories.tsx @@ -0,0 +1,37 @@ +/* eslint-disable filename-rules/match */ + +import type { Meta, StoryObj } from '@storybook/react'; +import { Fragment } from 'react'; +import { View } from 'react-native'; + +import { Box, Text } from '$shared/uiKit/primitives'; + +import { spacing, type Spacing as ThemeSpacing } from '../spacing'; +import { theme } from '../theme'; + +const meta = { + title: 'Theme/Spacing', + component: View, + render: () => ( + + {(Object.keys(theme.spacing) as ThemeSpacing[]).map((space) => ( + + {space} + + + + ))} + + ), +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Spacing: Story = {}; diff --git a/src/features/home/components/Informations.tsx b/src/features/home/components/Informations.tsx index b765947b..872eb1ea 100644 --- a/src/features/home/components/Informations.tsx +++ b/src/features/home/components/Informations.tsx @@ -1,6 +1,5 @@ import { useTranslation } from 'react-i18next'; -import { IS_IOS } from '$core/constants'; import { Text } from '$shared/uiKit/primitives'; export const Informations = () => { @@ -9,14 +8,10 @@ export const Informations = () => { return ( <> - {t('homeScreen.sandbox.title')} + {t('homeScreen.storybook.title')} - - {t('homeScreen.sandbox.content', { - command: IS_IOS ? 'Cmd+R' : 'Cmd+M', - })} - + {t('homeScreen.storybook.content')} {t('homeScreen.tests.title')} diff --git a/src/features/sandbox/Sandbox.tsx b/src/features/sandbox/Sandbox.tsx deleted file mode 100644 index dc49219a..00000000 --- a/src/features/sandbox/Sandbox.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import * as DevClient from 'expo-dev-client'; -import type { ReactElement } from 'react'; -import { Suspense, useState } from 'react'; - -import { Logger } from '$core/logger'; -import { useRunOnMount } from '$shared/hooks'; -import { Loader } from '$shared/uiKit/Loader'; - -import { SuspendedDebugStack } from './navigation'; - -type SandboxProps = { - children: ReactElement; -}; - -export const Sandbox = ({ children }: SandboxProps) => { - const [isShown, setIsShown] = useState(false); - - useRunOnMount(() => { - const devMenuItems = [ - { - name: 'Toggle the Sandbox', - callback: () => { - setIsShown((prevState) => !prevState); - }, - }, - ]; - - (async () => { - await DevClient.DevMenu.registerDevMenuItems(devMenuItems); - })().catch(() => { - Logger.dev('Failed to register the Sandbox in the Dev Menu'); - }); - }); - - if (!isShown) { - return children; - } - - return ( - }> - - - ); -}; diff --git a/src/features/sandbox/components/designSystem/Button.sandbox.tsx b/src/features/sandbox/components/designSystem/Button.sandbox.tsx deleted file mode 100644 index 4a43a677..00000000 --- a/src/features/sandbox/components/designSystem/Button.sandbox.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Alert } from 'react-native'; - -import { Button } from '$shared/uiKit/button'; -import { Screen } from '$shared/uiKit/Screen'; - -import { SandBoxItem } from '../menu/components/SandboxItem'; - -export const ButtonSandbox = () => { - return ( - - - { - Alert.alert('Text pressed'); - }} - > - Click here - - - - ); -}; diff --git a/src/features/sandbox/components/designSystem/DesignSystem.sandbox.tsx b/src/features/sandbox/components/designSystem/DesignSystem.sandbox.tsx deleted file mode 100644 index cd0c0978..00000000 --- a/src/features/sandbox/components/designSystem/DesignSystem.sandbox.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { useNavigation } from '@react-navigation/native'; - -import type { DesignSystemScreenNavigationProp } from '$features/sandbox/navigation/types/debugStackTypes'; -import { Screen } from '$shared/uiKit/Screen'; - -import { MenuCategory } from '../menu/components/MenuCategory'; -import { MenuLine } from '../menu/components/MenuLine'; - -export const DesignSystemSandbox = () => { - const navigation: DesignSystemScreenNavigationProp = useNavigation(); - - const menuItems = [ - { - label: 'Loader', - onPress: () => { - navigation.navigate('Loader'); - }, - }, - { - label: 'Button', - onPress: () => { - navigation.navigate('Button'); - }, - }, - { - label: 'Input', - onPress: () => { - navigation.navigate('Input'); - }, - }, - ]; - - return ( - - - {menuItems.map(({ label, onPress }) => ( - - ))} - - - ); -}; diff --git a/src/features/sandbox/components/designSystem/Input.sandbox.tsx b/src/features/sandbox/components/designSystem/Input.sandbox.tsx deleted file mode 100644 index 6bfdae0c..00000000 --- a/src/features/sandbox/components/designSystem/Input.sandbox.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Input } from '$shared/uiKit/input'; -import { Screen } from '$shared/uiKit/Screen'; - -import { SandBoxItem } from '../menu/components/SandboxItem'; - -export const InputSandbox = () => { - return ( - - - - - - - - - - - - - - - - - - ); -}; diff --git a/src/features/sandbox/components/designSystem/Loader.sandbox.tsx b/src/features/sandbox/components/designSystem/Loader.sandbox.tsx deleted file mode 100644 index 860c3d58..00000000 --- a/src/features/sandbox/components/designSystem/Loader.sandbox.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { Loader } from '$shared/uiKit/Loader'; -import { Screen } from '$shared/uiKit/Screen'; - -import { SandBoxItem } from '../menu/components/SandboxItem'; - -export const LoaderSandbox = () => { - return ( - - - - - - - - - - - - - - ); -}; diff --git a/src/features/sandbox/components/menu/Menu.tsx b/src/features/sandbox/components/menu/Menu.tsx deleted file mode 100644 index bbcb4776..00000000 --- a/src/features/sandbox/components/menu/Menu.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { Screen } from '$shared/uiKit/Screen'; - -import { Components } from './components/Components'; -import { Core } from './components/Core'; -import { Flows } from './components/Flows'; - -export const Menu = () => { - return ( - - - - - - - - ); -}; diff --git a/src/features/sandbox/components/menu/components/Components.tsx b/src/features/sandbox/components/menu/components/Components.tsx deleted file mode 100644 index 62b3356c..00000000 --- a/src/features/sandbox/components/menu/components/Components.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { useNavigation } from '@react-navigation/native'; - -import type { MenuScreenNavigationProp } from '$features/sandbox/navigation/types/debugStackTypes'; - -import { MenuCategory } from './MenuCategory'; -import { MenuLine } from './MenuLine'; - -export const Components = () => { - const navigation: MenuScreenNavigationProp = useNavigation(); - - const menuItems = [ - { - label: 'Primitives', - onPress: () => { - navigation.navigate('Primitives'); - }, - }, - { - label: 'Design System', - onPress: () => { - navigation.navigate('DesignSystem'); - }, - }, - ]; - - return ( - - {menuItems.map(({ label, onPress }) => ( - - ))} - - ); -}; diff --git a/src/features/sandbox/components/menu/components/Core.tsx b/src/features/sandbox/components/menu/components/Core.tsx deleted file mode 100644 index 5df18dc5..00000000 --- a/src/features/sandbox/components/menu/components/Core.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { useNavigation } from '@react-navigation/native'; - -import type { MenuScreenNavigationProp } from '$features/sandbox/navigation/types/debugStackTypes'; - -import { MenuCategory } from './MenuCategory'; -import { MenuLine } from './MenuLine'; - -export const Core = () => { - const navigation: MenuScreenNavigationProp = useNavigation(); - - const menuItems = [ - { - label: 'Theme', - onPress: () => { - navigation.navigate('Theme'); - }, - }, - ]; - - return ( - - {menuItems.map(({ label, onPress }) => ( - - ))} - - ); -}; diff --git a/src/features/sandbox/components/menu/components/Flows.tsx b/src/features/sandbox/components/menu/components/Flows.tsx deleted file mode 100644 index f68fbcee..00000000 --- a/src/features/sandbox/components/menu/components/Flows.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { Box } from '$shared/uiKit/primitives'; - -import { MenuCategory } from './MenuCategory'; - -export const Flows = () => { - return ( - - {/* Add flows or specific pages here for easy access */} - - - ); -}; diff --git a/src/features/sandbox/components/menu/components/MenuCategory.tsx b/src/features/sandbox/components/menu/components/MenuCategory.tsx deleted file mode 100644 index 91de65d7..00000000 --- a/src/features/sandbox/components/menu/components/MenuCategory.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import type { ReactNode } from 'react'; - -import { Box, Text } from '$shared/uiKit/primitives'; - -type MenuCategoryProps = { - category: string; - children: ReactNode; -}; - -export const MenuCategory = ({ category, children }: MenuCategoryProps) => { - return ( - - - {category} - - - {children} - - ); -}; diff --git a/src/features/sandbox/components/menu/components/MenuLine.tsx b/src/features/sandbox/components/menu/components/MenuLine.tsx deleted file mode 100644 index 5003d371..00000000 --- a/src/features/sandbox/components/menu/components/MenuLine.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { Pressable } from 'react-native'; - -import { Box, Text } from '$shared/uiKit/primitives'; - -import { Separator } from './Separator'; - -type MenuLineProps = { - label: string; - onPress: () => void; -}; - -export const MenuLine = ({ label, onPress }: MenuLineProps) => { - return ( - - - {label} - - - - - ); -}; diff --git a/src/features/sandbox/components/primitives/Box.sandbox.tsx b/src/features/sandbox/components/primitives/Box.sandbox.tsx deleted file mode 100644 index 389c3ee0..00000000 --- a/src/features/sandbox/components/primitives/Box.sandbox.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { Box } from '$shared/uiKit/primitives'; -import { Screen } from '$shared/uiKit/Screen'; - -import { SandBoxItem } from '../menu/components/SandboxItem'; - -export const BoxSandbox = () => { - return ( - - - - - - - - - - - - - - ); -}; diff --git a/src/features/sandbox/components/primitives/Primitives.sandbox.tsx b/src/features/sandbox/components/primitives/Primitives.sandbox.tsx deleted file mode 100644 index feaf4a8f..00000000 --- a/src/features/sandbox/components/primitives/Primitives.sandbox.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { useNavigation } from '@react-navigation/native'; - -import type { PrimitivesScreenNavigationProp } from '$features/sandbox/navigation/types/debugStackTypes'; -import { Screen } from '$shared/uiKit/Screen'; - -import { MenuCategory } from '../menu/components/MenuCategory'; -import { MenuLine } from '../menu/components/MenuLine'; - -export const PrimitivesSandbox = () => { - const navigation: PrimitivesScreenNavigationProp = useNavigation(); - - const menuItems = [ - { - label: 'Box', - onPress: () => { - navigation.navigate('Box'); - }, - }, - { - label: 'Text', - onPress: () => { - navigation.navigate('Text'); - }, - }, - ]; - - return ( - - - {menuItems.map(({ label, onPress }) => ( - - ))} - - - ); -}; diff --git a/src/features/sandbox/components/primitives/Text.sandbox.tsx b/src/features/sandbox/components/primitives/Text.sandbox.tsx deleted file mode 100644 index 47e67a7a..00000000 --- a/src/features/sandbox/components/primitives/Text.sandbox.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Text } from '$shared/uiKit/primitives'; -import { Screen } from '$shared/uiKit/Screen'; - -import { SandBoxItem } from '../menu/components/SandboxItem'; - -export const TextSandbox = () => { - return ( - - - Default styles - - - - Large variant - - - - - Custom styles - - - - - - Custom position - - - - ); -}; diff --git a/src/features/sandbox/components/theme/Colors.sandbox.tsx b/src/features/sandbox/components/theme/Colors.sandbox.tsx deleted file mode 100644 index 261742f0..00000000 --- a/src/features/sandbox/components/theme/Colors.sandbox.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import type { Colors } from '$core/theme'; -import { theme } from '$core/theme'; -import { Box, Text } from '$shared/uiKit/primitives'; -import { Screen } from '$shared/uiKit/Screen'; - -import { SandBoxItem } from '../menu/components/SandboxItem'; - -export const ColorsSandbox = () => { - return ( - - - {(Object.keys(theme.colors) as Colors[]).map((color) => ( - - {color} - - - - ))} - - - ); -}; diff --git a/src/features/sandbox/components/theme/FontSizes.sandbox.tsx b/src/features/sandbox/components/theme/FontSizes.sandbox.tsx deleted file mode 100644 index fd058a0e..00000000 --- a/src/features/sandbox/components/theme/FontSizes.sandbox.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import type { FontSizes } from '$core/theme'; -import { fontSizes } from '$core/theme'; -import { Text } from '$shared/uiKit/primitives'; -import { Screen } from '$shared/uiKit/Screen'; - -import { SandBoxItem } from '../menu/components/SandboxItem'; - -export const FontSizesSandbox = () => { - return ( - - - {(Object.keys(fontSizes) as FontSizes[]).map((size) => ( - - {`This is a ${size} text`} - - ))} - - - ); -}; diff --git a/src/features/sandbox/components/theme/Radiuses.sandbox.tsx b/src/features/sandbox/components/theme/Radiuses.sandbox.tsx deleted file mode 100644 index 589ee2ef..00000000 --- a/src/features/sandbox/components/theme/Radiuses.sandbox.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import type { BorderRadii } from '$core/theme'; -import { theme } from '$core/theme'; -import { Box, Text } from '$shared/uiKit/primitives'; -import { Screen } from '$shared/uiKit/Screen'; - -import { SandBoxItem } from '../menu/components/SandboxItem'; - -export const RadiusesSandbox = () => { - return ( - - - {(Object.keys(theme.borderRadii) as BorderRadii[]).map((radius) => ( - - {radius} - - - - ))} - - - ); -}; diff --git a/src/features/sandbox/components/theme/Spaces.sandbox.tsx b/src/features/sandbox/components/theme/Spaces.sandbox.tsx deleted file mode 100644 index 84d21d49..00000000 --- a/src/features/sandbox/components/theme/Spaces.sandbox.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { Fragment } from 'react'; - -import type { Spacing } from '$core/theme'; -import { spacing, theme } from '$core/theme'; -import { Box, Text } from '$shared/uiKit/primitives'; -import { Screen } from '$shared/uiKit/Screen'; - -import { SandBoxItem } from '../menu/components/SandboxItem'; - -export const SpacesSandbox = () => { - return ( - - - {(Object.keys(theme.spacing) as Spacing[]).map((space) => ( - - {space} - - - - ))} - - - ); -}; diff --git a/src/features/sandbox/components/theme/Theme.sandbox.tsx b/src/features/sandbox/components/theme/Theme.sandbox.tsx deleted file mode 100644 index 0e3a58f5..00000000 --- a/src/features/sandbox/components/theme/Theme.sandbox.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { useNavigation } from '@react-navigation/native'; - -import type { ThemeScreenNavigationProp } from '$features/sandbox/navigation/types/debugStackTypes'; -import { Screen } from '$shared/uiKit/Screen'; - -import { MenuCategory } from '../menu/components/MenuCategory'; -import { MenuLine } from '../menu/components/MenuLine'; - -export const ThemeSandbox = () => { - const navigation: ThemeScreenNavigationProp = useNavigation(); - - const menuItems = [ - { - label: 'Spaces', - onPress: () => { - navigation.navigate('Spaces'); - }, - }, - { - label: 'Colors', - onPress: () => { - navigation.navigate('Colors'); - }, - }, - { - label: 'Font Sizes', - onPress: () => { - navigation.navigate('FontSizes'); - }, - }, - { - label: 'Radiuses', - onPress: () => { - navigation.navigate('Radiuses'); - }, - }, - ]; - - return ( - - - {menuItems.map(({ label, onPress }) => ( - - ))} - - - ); -}; diff --git a/src/features/sandbox/index.ts b/src/features/sandbox/index.ts deleted file mode 100644 index 6c3b8452..00000000 --- a/src/features/sandbox/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Sandbox } from './Sandbox'; diff --git a/src/features/sandbox/navigation/DebugStack.tsx b/src/features/sandbox/navigation/DebugStack.tsx deleted file mode 100644 index 4166275f..00000000 --- a/src/features/sandbox/navigation/DebugStack.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { NavigationContainer } from '@react-navigation/native'; -import type { NativeStackNavigationOptions } from '@react-navigation/native-stack'; -import { createNativeStackNavigator } from '@react-navigation/native-stack'; - -import { colors } from '$core/theme'; - -import * as screens from './screens'; -import type { DebugStackParamList } from './types/debugStackTypes'; - -const Stack = createNativeStackNavigator(); - -const DebugStack = () => { - return ( - - - - - {/* ***** ***** Core ***** ***** */} - - {/* Theme */} - - - - - - - - - - - - {/* ***** ***** Components ***** ***** */} - - {/* Primitives */} - - - - - - - - {/* Design System */} - - - - - - - - - - - ); -}; - -const navigatorScreenOptions: NativeStackNavigationOptions = { - gestureEnabled: true, - headerTintColor: colors.clear, - headerStyle: { - backgroundColor: colors.duller, - }, -}; - -export default DebugStack; diff --git a/src/features/sandbox/navigation/index.ts b/src/features/sandbox/navigation/index.ts deleted file mode 100644 index 0b5976ac..00000000 --- a/src/features/sandbox/navigation/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { lazy } from 'react'; - -export const SuspendedDebugStack = lazy(async () => - import('./DebugStack').then((module) => ({ - default: module.default, - })), -); diff --git a/src/features/sandbox/navigation/screens.ts b/src/features/sandbox/navigation/screens.ts deleted file mode 100644 index 065bb628..00000000 --- a/src/features/sandbox/navigation/screens.ts +++ /dev/null @@ -1,24 +0,0 @@ -// Global -export { Menu } from '../components/menu/Menu'; - -/* ***** ***** Core ***** ***** */ - -// Theme -export { ThemeSandbox } from '../components/theme/Theme.sandbox'; -export { ColorsSandbox } from '../components/theme/Colors.sandbox'; -export { FontSizesSandbox } from '../components/theme/FontSizes.sandbox'; -export { RadiusesSandbox } from '../components/theme/Radiuses.sandbox'; -export { SpacesSandbox } from '../components/theme/Spaces.sandbox'; - -/* ***** ***** Components ***** ***** */ - -// Primitives -export { PrimitivesSandbox } from '../components/primitives/Primitives.sandbox'; -export { BoxSandbox } from '../components/primitives/Box.sandbox'; -export { TextSandbox } from '../components/primitives/Text.sandbox'; - -// Design System -export { DesignSystemSandbox } from '../components/designSystem/DesignSystem.sandbox'; -export { LoaderSandbox } from '../components/designSystem/Loader.sandbox'; -export { ButtonSandbox } from '../components/designSystem/Button.sandbox'; -export { InputSandbox } from '../components/designSystem/Input.sandbox'; diff --git a/src/features/sandbox/navigation/types/debugStackTypes.ts b/src/features/sandbox/navigation/types/debugStackTypes.ts deleted file mode 100644 index 415fca48..00000000 --- a/src/features/sandbox/navigation/types/debugStackTypes.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { NativeStackNavigationProp } from '@react-navigation/native-stack'; - -/* ***** ***** Stack router types ***** ***** */ - -export type DebugStackParamList = { - Menu: undefined; - - // Core - Theme: undefined; - Spaces: undefined; - Colors: undefined; - FontSizes: undefined; - Radiuses: undefined; - - // Components - Primitives: undefined; - Box: undefined; - Text: undefined; - Button: undefined; - Input: undefined; - - DesignSystem: undefined; - Loader: undefined; - // inject stack types before this -}; - -/* ***** ***** Pages navigation type ***** ***** */ - -export type MenuScreenNavigationProp = NativeStackNavigationProp< - DebugStackParamList, - 'Menu' ->; -export type ThemeScreenNavigationProp = NativeStackNavigationProp< - DebugStackParamList, - 'Theme' ->; -export type PrimitivesScreenNavigationProp = NativeStackNavigationProp< - DebugStackParamList, - 'Primitives' ->; -export type DesignSystemScreenNavigationProp = NativeStackNavigationProp< - DebugStackParamList, - 'DesignSystem' ->; -// inject page types before this diff --git a/src/shared/components/index.ts b/src/shared/components/index.ts new file mode 100644 index 00000000..c61089cb --- /dev/null +++ b/src/shared/components/index.ts @@ -0,0 +1 @@ +export { StorybookItem } from './storybook'; diff --git a/src/features/sandbox/components/menu/components/CenteredContent.tsx b/src/shared/components/storybook/CenteredContent.tsx similarity index 100% rename from src/features/sandbox/components/menu/components/CenteredContent.tsx rename to src/shared/components/storybook/CenteredContent.tsx diff --git a/src/features/sandbox/components/menu/components/Separator.tsx b/src/shared/components/storybook/Separator.tsx similarity index 89% rename from src/features/sandbox/components/menu/components/Separator.tsx rename to src/shared/components/storybook/Separator.tsx index 732563ae..fbec2ea8 100644 --- a/src/features/sandbox/components/menu/components/Separator.tsx +++ b/src/shared/components/storybook/Separator.tsx @@ -1,8 +1,8 @@ /* eslint-disable react/jsx-props-no-spreading */ import type { Colors } from '$core/theme'; -import { Box } from '$shared/uiKit/primitives'; import type { BoxProps } from '$shared/uiKit/primitives/Box'; +import { Box } from '$shared/uiKit/primitives/Box'; interface SeparatorProps extends BoxProps { height?: number; diff --git a/src/features/sandbox/components/menu/components/SandboxItem.tsx b/src/shared/components/storybook/StorybookItem.tsx similarity index 85% rename from src/features/sandbox/components/menu/components/SandboxItem.tsx rename to src/shared/components/storybook/StorybookItem.tsx index a16b788e..eca4c9d3 100644 --- a/src/features/sandbox/components/menu/components/SandboxItem.tsx +++ b/src/shared/components/storybook/StorybookItem.tsx @@ -5,17 +5,17 @@ import { Box, Text } from '$shared/uiKit/primitives'; import { CenteredContent } from './CenteredContent'; import { Separator } from './Separator'; -type SandBoxItemProps = { +type StorybookItemProps = { title?: string; isSingle?: boolean; children: ReactNode; }; -export const SandBoxItem = ({ +export const StorybookItem = ({ title, isSingle, children, -}: SandBoxItemProps) => { +}: StorybookItemProps) => { return ( {!!title && {title}} diff --git a/src/shared/components/storybook/index.ts b/src/shared/components/storybook/index.ts new file mode 100644 index 00000000..71a86fcb --- /dev/null +++ b/src/shared/components/storybook/index.ts @@ -0,0 +1 @@ +export { StorybookItem } from './StorybookItem'; diff --git a/src/shared/uiKit/button/ButtonWithIcon.tsx b/src/shared/uiKit/button/ButtonWithIcon.tsx index d77531da..09d3c0d6 100644 --- a/src/shared/uiKit/button/ButtonWithIcon.tsx +++ b/src/shared/uiKit/button/ButtonWithIcon.tsx @@ -41,7 +41,14 @@ const ButtonWithIcon = ({ onPress={handlePress} > - + + + - - ); diff --git a/src/shared/uiKit/button/stories/ButtonWithIcon.stories.tsx b/src/shared/uiKit/button/stories/ButtonWithIcon.stories.tsx new file mode 100644 index 00000000..dddebc37 --- /dev/null +++ b/src/shared/uiKit/button/stories/ButtonWithIcon.stories.tsx @@ -0,0 +1,51 @@ +import { action } from '@storybook/addon-actions'; +import type { Meta, StoryObj } from '@storybook/react'; + +import { CenteredContent } from '$shared/components/storybook/CenteredContent'; + +import { ButtonWithIcon } from '../ButtonWithIcon'; + +const meta = { + title: 'UIKit/Button/WithIcon', + component: ButtonWithIcon, + argTypes: { + variant: { + control: 'select', + options: ['base', 'otherVariant'], + }, + iconName: { + control: 'select', + options: ['Code', 'Grid', 'HeartRate', 'Laptop'], + }, + width: { control: 'number' }, + height: { control: 'number' }, + onPress: { action: 'onPress' }, + isDisabled: { control: 'boolean' }, + isLoading: { control: 'boolean' }, + }, + args: { + variant: 'base', + iconName: 'Code', + width: 24, + height: 24, + onPress: action('onPress called'), + }, + decorators: [ + // eslint-disable-next-line @typescript-eslint/naming-convention + (Story) => ( + + + + ), + ], +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const WithIcon: Story = { + args: { + children: 'Some CTA', + }, +}; diff --git a/src/shared/uiKit/button/stories/ButtonWithText.stories.tsx b/src/shared/uiKit/button/stories/ButtonWithText.stories.tsx new file mode 100644 index 00000000..f2deefbe --- /dev/null +++ b/src/shared/uiKit/button/stories/ButtonWithText.stories.tsx @@ -0,0 +1,47 @@ +import { action } from '@storybook/addon-actions'; +import type { Meta, StoryObj } from '@storybook/react'; + +import { CenteredContent } from '$shared/components/storybook/CenteredContent'; + +import { ButtonWithText } from '../ButtonWithText'; + +const meta = { + title: 'UIKit/Button/WithText', + component: ButtonWithText, + argTypes: { + variant: { + control: 'select', + options: ['base', 'otherVariant'], + }, + size: { + control: 'select', + options: ['regular', 'small'], + }, + onPress: { action: 'onPress' }, + isDisabled: { control: 'boolean' }, + isLoading: { control: 'boolean' }, + }, + args: { + variant: 'base', + size: 'regular', + onPress: action('onPress called'), + }, + decorators: [ + // eslint-disable-next-line @typescript-eslint/naming-convention + (Story) => ( + + + + ), + ], +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const WithText: Story = { + args: { + children: 'Some CTA', + }, +}; diff --git a/src/shared/uiKit/input/stories/Input.stories.tsx b/src/shared/uiKit/input/stories/Input.stories.tsx new file mode 100644 index 00000000..d16aefd2 --- /dev/null +++ b/src/shared/uiKit/input/stories/Input.stories.tsx @@ -0,0 +1,57 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import type { ComponentProps } from 'react'; + +import { Box } from '$shared/uiKit/primitives'; + +import { Input } from '../Input'; + +const meta = { + title: 'UIKit/Input', + component: Input, + argTypes: { + label: { control: 'text' }, + error: { control: 'text' }, + isEditable: { control: 'boolean' }, + }, + decorators: [ + // eslint-disable-next-line @typescript-eslint/naming-convention + (Story) => ( + + + + ), + ], +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +const sharedArgs: ComponentProps = { + label: 'Some label', + placeholder: 'Type here', +}; + +export const WithLabel: Story = { + args: sharedArgs, +}; + +export const WithError: Story = { + args: { + ...sharedArgs, + error: 'An error', + }, +}; + +export const WithoutLabel: Story = { + args: { + value: 'Some value', + }, +}; + +export const NotEditable: Story = { + args: { + ...sharedArgs, + isEditable: false, + }, +}; diff --git a/src/shared/uiKit/primitives/stories/Box.stories.tsx b/src/shared/uiKit/primitives/stories/Box.stories.tsx new file mode 100644 index 00000000..60b10df8 --- /dev/null +++ b/src/shared/uiKit/primitives/stories/Box.stories.tsx @@ -0,0 +1,48 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { View } from 'react-native'; + +import { StorybookItem } from '$shared/components'; +import { Box as BoxPrimitive } from '$shared/uiKit/primitives'; + +const meta = { + title: 'Primitives/Box', + component: View, + render: () => ( + + + + + + + + + + + + + + ), +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Box: Story = {}; diff --git a/src/shared/uiKit/primitives/stories/Text.stories.tsx b/src/shared/uiKit/primitives/stories/Text.stories.tsx new file mode 100644 index 00000000..a28c0478 --- /dev/null +++ b/src/shared/uiKit/primitives/stories/Text.stories.tsx @@ -0,0 +1,41 @@ +/* eslint-disable react-native/no-raw-text */ + +import type { Meta, StoryObj } from '@storybook/react'; +import { View } from 'react-native'; + +import { StorybookItem } from '$shared/components'; +import { Box, Text as TextPrimitive } from '$shared/uiKit/primitives'; + +const meta = { + title: 'Primitives/Text', + component: View, + render: () => ( + + + Default styles + + + + Large variant + + + + + Custom styles + + + + + + Custom position + + + + ), +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Text: Story = {}; diff --git a/src/shared/uiKit/stories/Loader.stories.tsx b/src/shared/uiKit/stories/Loader.stories.tsx new file mode 100644 index 00000000..a5ec782a --- /dev/null +++ b/src/shared/uiKit/stories/Loader.stories.tsx @@ -0,0 +1,30 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { Loader } from '../Loader'; + +const meta = { + title: 'UIKit/Loader', + component: Loader, + argTypes: { + delay: { control: 'number' }, + size: { control: 'select', options: ['large', 'small'] }, + }, +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = {}; + +export const WithoutDelay: Story = { + args: { + delay: 0, + }, +}; + +export const WithLongDelay: Story = { + args: { + delay: 3000, + }, +}; diff --git a/yarn.lock b/yarn.lock index d905bb1c..cf2fc2c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2371,6 +2371,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.17.8": + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/12c01357e0345f89f4f7e8c0e81921f2a3e3e101f06e8eaa18a382b517376520cd2fa8c237726eb094dab25532855df28a7baaf1c26342b52782f6936b07c287 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.20.0": version: 7.22.15 resolution: "@babel/runtime@npm:7.22.15" @@ -2813,6 +2822,174 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/aix-ppc64@npm:0.24.0" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-arm64@npm:0.24.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-arm@npm:0.24.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-x64@npm:0.24.0" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/darwin-arm64@npm:0.24.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/darwin-x64@npm:0.24.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/freebsd-arm64@npm:0.24.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/freebsd-x64@npm:0.24.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-arm64@npm:0.24.0" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-arm@npm:0.24.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-ia32@npm:0.24.0" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-loong64@npm:0.24.0" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-mips64el@npm:0.24.0" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-ppc64@npm:0.24.0" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-riscv64@npm:0.24.0" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-s390x@npm:0.24.0" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-x64@npm:0.24.0" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/netbsd-x64@npm:0.24.0" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/openbsd-arm64@npm:0.24.0" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/openbsd-x64@npm:0.24.0" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/sunos-x64@npm:0.24.0" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-arm64@npm:0.24.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-ia32@npm:0.24.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-x64@npm:0.24.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -2968,7 +3145,7 @@ __metadata: languageName: node linkType: hard -"@expo/config-plugins@npm:8.0.10, @expo/config-plugins@npm:~8.0.0-beta.0, @expo/config-plugins@npm:~8.0.8": +"@expo/config-plugins@npm:8.0.10, @expo/config-plugins@npm:~8.0.8": version: 8.0.10 resolution: "@expo/config-plugins@npm:8.0.10" dependencies: @@ -3204,27 +3381,6 @@ __metadata: languageName: node linkType: hard -"@expo/prebuild-config@npm:7.0.6": - version: 7.0.6 - resolution: "@expo/prebuild-config@npm:7.0.6" - dependencies: - "@expo/config": "npm:~9.0.0-beta.0" - "@expo/config-plugins": "npm:~8.0.0-beta.0" - "@expo/config-types": "npm:^51.0.0-unreleased" - "@expo/image-utils": "npm:^0.5.0" - "@expo/json-file": "npm:^8.3.0" - "@react-native/normalize-colors": "npm:0.74.84" - debug: "npm:^4.3.1" - fs-extra: "npm:^9.0.0" - resolve-from: "npm:^5.0.0" - semver: "npm:^7.6.0" - xml2js: "npm:0.6.0" - peerDependencies: - expo-modules-autolinking: ">=0.8.1" - checksum: 10c0/a76cc895f532640767d3063a2e657469c879c6b3cef1dfb982499fe0b3a40ecad333daf7ff98e98adae8f015ee030eb625634fec046b5c01f0f3a09ce53dd57f - languageName: node - linkType: hard - "@expo/prebuild-config@npm:7.0.8": version: 7.0.8 resolution: "@expo/prebuild-config@npm:7.0.8" @@ -3382,6 +3538,40 @@ __metadata: languageName: node linkType: hard +"@gorhom/bottom-sheet@npm:5.0.6": + version: 5.0.6 + resolution: "@gorhom/bottom-sheet@npm:5.0.6" + dependencies: + "@gorhom/portal": "npm:1.0.14" + invariant: "npm:^2.2.4" + peerDependencies: + "@types/react": "*" + "@types/react-native": "*" + react: "*" + react-native: "*" + react-native-gesture-handler: ">=2.16.1" + react-native-reanimated: ">=3.16.0" + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-native": + optional: true + checksum: 10c0/99eb540c13d13d3da844cdf598fa6b7db962088b3570d25ef3a77788a1388adf6e9b3f2f90f3bca8503041348e33a052ad0e8bb602796735368c6ca2810959a4 + languageName: node + linkType: hard + +"@gorhom/portal@npm:1.0.14": + version: 1.0.14 + resolution: "@gorhom/portal@npm:1.0.14" + dependencies: + nanoid: "npm:^3.3.1" + peerDependencies: + react: "*" + react-native: "*" + checksum: 10c0/86f33afc2ac2656a86a6f3fd1e41565419839576ede2c38333434a93a0a2fe4fb6fc18ab3360579427f2a1fc3b4564b933cc5ae1793a7e2825c93860a00b215f + languageName: node + linkType: hard + "@gql.tada/internal@npm:^1.0.0": version: 1.0.8 resolution: "@gql.tada/internal@npm:1.0.8" @@ -5380,6 +5570,32 @@ __metadata: languageName: node linkType: hard +"@react-native-community/datetimepicker@npm:^8.2.0": + version: 8.2.0 + resolution: "@react-native-community/datetimepicker@npm:8.2.0" + dependencies: + invariant: "npm:^2.2.4" + peerDependencies: + expo: ">=50.0.0" + react: "*" + react-native: "*" + react-native-windows: "*" + peerDependenciesMeta: + expo: + optional: true + react-native-windows: + optional: true + checksum: 10c0/bfb99fd5148f15be6a00653434979591a880394fc5b5c50c16fea7cac13d84d663603f3cb62dbfb6933c472d4805b69456bab445ea44122c95cbf437bc4b8bb3 + languageName: node + linkType: hard + +"@react-native-community/slider@npm:^4.5.5": + version: 4.5.5 + resolution: "@react-native-community/slider@npm:4.5.5" + checksum: 10c0/78c3364c072bbc82300612a625bced682b666145dce229e7beb87f93dde5f66a955e1cca4848f662f1a9d2246f26d4717ece5d4f86cd350a295db184c024002b + languageName: node + linkType: hard + "@react-native-masked-view/masked-view@npm:0.3.1": version: 0.3.1 resolution: "@react-native-masked-view/masked-view@npm:0.3.1" @@ -5660,13 +5876,6 @@ __metadata: languageName: node linkType: hard -"@react-native/normalize-colors@npm:0.74.84": - version: 0.74.84 - resolution: "@react-native/normalize-colors@npm:0.74.84" - checksum: 10c0/9046b848db5ba0001cb4817faebba18366c5fc7c86a72836685867868e0019d40477d0dd6a7cdddf305a2156b5bda0b569116d2446d873e6e0d79c3c85a6517e - languageName: node - linkType: hard - "@react-native/normalize-colors@npm:0.74.85": version: 0.74.85 resolution: "@react-native/normalize-colors@npm:0.74.85" @@ -5757,7 +5966,7 @@ __metadata: languageName: node linkType: hard -"@react-navigation/native-stack@npm:6.9.26, @react-navigation/native-stack@npm:~6.9.12": +"@react-navigation/native-stack@npm:~6.9.12": version: 6.9.26 resolution: "@react-navigation/native-stack@npm:6.9.26" dependencies: @@ -6290,6 +6499,307 @@ __metadata: languageName: node linkType: hard +"@storybook/addon-actions@npm:8.4.2": + version: 8.4.2 + resolution: "@storybook/addon-actions@npm:8.4.2" + dependencies: + "@storybook/global": "npm:^5.0.0" + "@types/uuid": "npm:^9.0.1" + dequal: "npm:^2.0.2" + polished: "npm:^4.2.2" + uuid: "npm:^9.0.0" + peerDependencies: + storybook: ^8.4.2 + checksum: 10c0/ac89e6e0517efa2f8d6442f8fc0b1c3912bfc1ad50e03cccd06721d3bb52d11f472126a590c746cd565875d8ac11c63457de94e7c1ff6a3f8151b3c6488802d6 + languageName: node + linkType: hard + +"@storybook/addon-actions@npm:^8.4.2": + version: 8.4.4 + resolution: "@storybook/addon-actions@npm:8.4.4" + dependencies: + "@storybook/global": "npm:^5.0.0" + "@types/uuid": "npm:^9.0.1" + dequal: "npm:^2.0.2" + polished: "npm:^4.2.2" + uuid: "npm:^9.0.0" + peerDependencies: + storybook: ^8.4.4 + checksum: 10c0/ba4f310a047f3c0c8eed7ac61d47470dcd388e0bd584e1f17918c22e89fc060e06b403ceb7c591746b12c1fdbf796fe46fe5f797ee2ff69f5272b29c173979f8 + languageName: node + linkType: hard + +"@storybook/addon-controls@npm:^8.4.2": + version: 8.4.4 + resolution: "@storybook/addon-controls@npm:8.4.4" + dependencies: + "@storybook/global": "npm:^5.0.0" + dequal: "npm:^2.0.2" + ts-dedent: "npm:^2.0.0" + peerDependencies: + storybook: ^8.4.4 + checksum: 10c0/a7e0de38fee916193441a35e89e4a922e1beb6b295758fd39b88b31899e78a27651eb184cf1d36c98eda94865a3cc9d1484acef68c8c495f5602f2989d8f0495 + languageName: node + linkType: hard + +"@storybook/addon-ondevice-actions@npm:8.4.2": + version: 8.4.2 + resolution: "@storybook/addon-ondevice-actions@npm:8.4.2" + dependencies: + "@storybook/addon-actions": "npm:^8.4.2" + "@storybook/core": "npm:^8.4.2" + "@storybook/global": "npm:^5.0.0" + fast-deep-equal: "npm:^2.0.1" + peerDependencies: + react: "*" + react-native: "*" + checksum: 10c0/23ddd79d5ed9ee84bd260f4ef69a5f89106e4b8e740c439f094eb035bdeb5252f23859d56c75aa3bd9e4bffc22804d9f63026f9b691f7cca95fd8c38a2751439 + languageName: node + linkType: hard + +"@storybook/addon-ondevice-backgrounds@npm:8.4.2": + version: 8.4.2 + resolution: "@storybook/addon-ondevice-backgrounds@npm:8.4.2" + dependencies: + "@storybook/core": "npm:^8.4.2" + "@storybook/react-native-theming": "npm:^8.4.2" + peerDependencies: + react: "*" + react-native: "*" + checksum: 10c0/1854c7119eab9d433fe2a5a9131012aaaed9e8006016bcac50fcee76819abddb9081d4b98a788a383244b636e61e9370caf71d36c052d55614e85e23cd6b0736 + languageName: node + linkType: hard + +"@storybook/addon-ondevice-controls@npm:8.4.2": + version: 8.4.2 + resolution: "@storybook/addon-ondevice-controls@npm:8.4.2" + dependencies: + "@storybook/addon-controls": "npm:^8.4.2" + "@storybook/core": "npm:^8.4.2" + "@storybook/react-native-theming": "npm:^8.4.2" + "@storybook/react-native-ui": "npm:^8.4.2" + deep-equal: "npm:^1.0.1" + prop-types: "npm:^15.7.2" + react-native-modal-datetime-picker: "npm:^14.0.0" + react-native-modal-selector: "npm:^2.1.1" + tinycolor2: "npm:^1.4.1" + peerDependencies: + "@gorhom/bottom-sheet": ">=4" + "@react-native-community/datetimepicker": "*" + "@react-native-community/slider": "*" + react: "*" + react-native: "*" + checksum: 10c0/1a33303bf4103e04862baf0d7cbab17f5b0e6d5693d079393b27aa050513c90df80a3e2e4de642a0291e7707fcf8653a4658ae3adfdf2d03346db997e3bafa99 + languageName: node + linkType: hard + +"@storybook/components@npm:8.4.4": + version: 8.4.4 + resolution: "@storybook/components@npm:8.4.4" + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10c0/fd87c6e38d62a72256fea85a3ff4a865c5f8357dc02ee6a0f09be8e9897c0bfbc886460126b1d277e8642d438241ad76f83d01035278989eac6f6a0c23f13f5a + languageName: node + linkType: hard + +"@storybook/core@npm:8.4.2": + version: 8.4.2 + resolution: "@storybook/core@npm:8.4.2" + dependencies: + "@storybook/csf": "npm:^0.1.11" + better-opn: "npm:^3.0.2" + browser-assert: "npm:^1.2.1" + esbuild: "npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0" + esbuild-register: "npm:^3.5.0" + jsdoc-type-pratt-parser: "npm:^4.0.0" + process: "npm:^0.11.10" + recast: "npm:^0.23.5" + semver: "npm:^7.6.2" + util: "npm:^0.12.5" + ws: "npm:^8.2.3" + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + checksum: 10c0/75a9a9e00d98bb77d171a2738fdc0e9ab1cfbd760410b95c286368c7f25bbb756b61bd23b89d512707a02e450b81ecbdc72bf05e63fb18ea35509a2a806b0e21 + languageName: node + linkType: hard + +"@storybook/core@npm:8.4.4, @storybook/core@npm:^8.4.2": + version: 8.4.4 + resolution: "@storybook/core@npm:8.4.4" + dependencies: + "@storybook/csf": "npm:^0.1.11" + better-opn: "npm:^3.0.2" + browser-assert: "npm:^1.2.1" + esbuild: "npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0" + esbuild-register: "npm:^3.5.0" + jsdoc-type-pratt-parser: "npm:^4.0.0" + process: "npm:^0.11.10" + recast: "npm:^0.23.5" + semver: "npm:^7.6.2" + util: "npm:^0.12.5" + ws: "npm:^8.2.3" + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + checksum: 10c0/101bb9c13bc339572c071215bb9d2e5a7c514c67f6957dba1d0ed28ec993d6b1f8bd0d367fb3b49c80b5489131c744647878f6701695b868dfd5dbd73581a82c + languageName: node + linkType: hard + +"@storybook/csf@npm:^0.1.1, @storybook/csf@npm:^0.1.11": + version: 0.1.11 + resolution: "@storybook/csf@npm:0.1.11" + dependencies: + type-fest: "npm:^2.19.0" + checksum: 10c0/c5329fc13e7d762049b5c91df1bc1c0e510a1a898c401b72b68f1ff64139a85ab64a92f8e681d2fcb226c0a4a55d0f23b569b2bdb517e0f067bd05ea46228356 + languageName: node + linkType: hard + +"@storybook/global@npm:^5.0.0": + version: 5.0.0 + resolution: "@storybook/global@npm:5.0.0" + checksum: 10c0/8f1b61dcdd3a89584540896e659af2ecc700bc740c16909a7be24ac19127ea213324de144a141f7caf8affaed017d064fea0618d453afbe027cf60f54b4a6d0b + languageName: node + linkType: hard + +"@storybook/manager-api@npm:8.4.4": + version: 8.4.4 + resolution: "@storybook/manager-api@npm:8.4.4" + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10c0/00d83105b8cd451c7b420d96eefaa8918254a9c362d852f8e825dd02a861994b0e80fc190f6bfab95d742a947319178587bbccb64d9051ad8f1b36533e7cb4ed + languageName: node + linkType: hard + +"@storybook/preview-api@npm:8.4.4": + version: 8.4.4 + resolution: "@storybook/preview-api@npm:8.4.4" + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10c0/7adc0a4adde3a55cdd18fe645428a239c4d3802b92afdb17914719201893be8aec7cbd53203c9914c532ecd8970469df745f0097b677a04326e696470bc110cd + languageName: node + linkType: hard + +"@storybook/react-dom-shim@npm:8.4.4": + version: 8.4.4 + resolution: "@storybook/react-dom-shim@npm:8.4.4" + 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.4.4 + checksum: 10c0/112467460ce65d23311bd9f559f5c6af1343287f98ab765695e4dda5d17f3d7acb696d96457087285b8781f20bd8e0ace26eb00624affdc2620b9699a9b28591 + languageName: node + linkType: hard + +"@storybook/react-native-theming@npm:^8.4.2": + version: 8.4.2 + resolution: "@storybook/react-native-theming@npm:8.4.2" + dependencies: + polished: "npm:^4.3.1" + peerDependencies: + react: "*" + react-native: ">=0.57.0" + checksum: 10c0/d4a8ae3a17ab972486d78af8500f75733dc3eef5dbb3b6ac3dfc90e96890ac32ea697edea124e902867c59fec67a3509b6cae44a2e66ea09682384a304eeaa9e + languageName: node + linkType: hard + +"@storybook/react-native-ui@npm:^8.4.2": + version: 8.4.2 + resolution: "@storybook/react-native-ui@npm:8.4.2" + dependencies: + "@storybook/core": "npm:^8.4.2" + "@storybook/react": "npm:^8.4.2" + "@storybook/react-native-theming": "npm:^8.4.2" + fuse.js: "npm:^7.0.0" + memoizerific: "npm:^1.11.3" + polished: "npm:^4.3.1" + store2: "npm:^2.14.3" + peerDependencies: + "@gorhom/bottom-sheet": ">=4" + react: "*" + react-native: ">=0.57.0" + react-native-gesture-handler: ">=2" + react-native-reanimated: ">=3" + react-native-safe-area-context: "*" + react-native-svg: ">=14" + checksum: 10c0/5a0758888a563542d74c4636b40f2993abbb2d7c12eebea8f6be57d8880d8246c961e6f4165026cc6827d05c0a7fb544beb8cd33dcff35aa857d162464db08c1 + languageName: node + linkType: hard + +"@storybook/react-native@npm:^8.4.2": + version: 8.4.2 + resolution: "@storybook/react-native@npm:8.4.2" + dependencies: + "@storybook/core": "npm:^8.4.2" + "@storybook/csf": "npm:^0.1.1" + "@storybook/global": "npm:^5.0.0" + "@storybook/react": "npm:^8.4.2" + "@storybook/react-native-theming": "npm:^8.4.2" + "@storybook/react-native-ui": "npm:^8.4.2" + chokidar: "npm:^3.5.1" + commander: "npm:^8.2.0" + dedent: "npm:^1.5.1" + deepmerge: "npm:^4.3.0" + glob: "npm:^7.1.7" + prettier: "npm:^2.4.1" + react-native-swipe-gestures: "npm:^1.0.5" + react-native-url-polyfill: "npm:^2.0.0" + setimmediate: "npm:^1.0.5" + storybook: "npm:^8.4.2" + type-fest: "npm:~2.19" + util: "npm:^0.12.4" + ws: "npm:^8.18.0" + peerDependencies: + "@gorhom/bottom-sheet": ">=4" + react: "*" + react-native: ">=0.72.0" + react-native-gesture-handler: ">=2" + react-native-safe-area-context: "*" + bin: + sb-rn-get-stories: ./bin/get-stories.js + sb-rn-watcher: ./bin/watcher.js + checksum: 10c0/c9dbf47c581b71c81ef35b0548d5d0a20e267cf182fb8ead2697c9b8a8a9655a9fb4cfb3e60dd76b3ba7f8c676193c0393bd583b3522d1707b85817fe17c9bed + languageName: node + linkType: hard + +"@storybook/react@npm:^8.4.2": + version: 8.4.4 + resolution: "@storybook/react@npm:8.4.4" + dependencies: + "@storybook/components": "npm:8.4.4" + "@storybook/global": "npm:^5.0.0" + "@storybook/manager-api": "npm:8.4.4" + "@storybook/preview-api": "npm:8.4.4" + "@storybook/react-dom-shim": "npm:8.4.4" + "@storybook/theming": "npm:8.4.4" + peerDependencies: + "@storybook/test": 8.4.4 + 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.4.4 + typescript: ">= 4.2.x" + peerDependenciesMeta: + "@storybook/test": + optional: true + typescript: + optional: true + checksum: 10c0/aabbfeb09efca705ee23673b62673760bbfa60307ca0f36d562b3541cbd999f943d4c5537971b67bc84ad513f53e82a0be56b418d5777ea499c33c04c7ca935d + languageName: node + linkType: hard + +"@storybook/theming@npm:8.4.4": + version: 8.4.4 + resolution: "@storybook/theming@npm:8.4.4" + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10c0/29b58bc6ef5ca7e2231f171ab360c12b3eeeac22747bed53cd61749f85cbe3f91c3cc6e3abf144f194043f624e79b3caa2ec6c77a0ea2584d7771b96061eb55e + languageName: node + linkType: hard + "@stylistic/eslint-plugin@npm:2.9.0": version: 2.9.0 resolution: "@stylistic/eslint-plugin@npm:2.9.0" @@ -6793,7 +7303,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -6984,6 +7494,13 @@ __metadata: languageName: node linkType: hard +"@types/uuid@npm:^9.0.1": + version: 9.0.8 + resolution: "@types/uuid@npm:9.0.8" + checksum: 10c0/b411b93054cb1d4361919579ef3508a1f12bf15b5fdd97337d3d351bece6c921b52b6daeef89b62340fd73fd60da407878432a1af777f40648cbe53a01723489 + languageName: node + linkType: hard + "@types/ws@npm:^8.0.0": version: 8.5.10 resolution: "@types/ws@npm:8.5.10" @@ -7485,6 +8002,15 @@ __metadata: languageName: node linkType: hard +"ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 10c0/0c57a47cbd656e8cdfd99d7c2264de5868918ffa207c8d7a72a7f63379d4333254b2ba03d69e3c035e996a3fd3eb6d5725d7a1597cca10694296e32510546360 + languageName: node + linkType: hard + "ajv-keywords@npm:^5.1.0": version: 5.1.0 resolution: "ajv-keywords@npm:5.1.0" @@ -7661,7 +8187,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3": +"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -7911,6 +8437,15 @@ __metadata: languageName: node linkType: hard +"ast-types@npm:^0.16.1": + version: 0.16.1 + resolution: "ast-types@npm:0.16.1" + dependencies: + tslib: "npm:^2.0.1" + checksum: 10c0/abcc49e42eb921a7ebc013d5bec1154651fb6dbc3f497541d488859e681256901b2990b954d530ba0da4d0851271d484f7057d5eff5e07cb73e8b10909f711bf + languageName: node + linkType: hard + "astral-regex@npm:^1.0.0": version: 1.0.0 resolution: "astral-regex@npm:1.0.0" @@ -8012,6 +8547,21 @@ __metadata: languageName: node linkType: hard +"babel-loader@npm:^8.4.1": + version: 8.4.1 + resolution: "babel-loader@npm:8.4.1" + dependencies: + find-cache-dir: "npm:^3.3.1" + loader-utils: "npm:^2.0.4" + make-dir: "npm:^3.1.0" + schema-utils: "npm:^2.6.5" + peerDependencies: + "@babel/core": ^7.0.0 + webpack: ">=2" + checksum: 10c0/efdca9c3ef502af58b923a32123d660c54fd0be125b7b64562c8a43bda0a3a55dac0db32331674104e7e5184061b75c3a0e395b2c5ccdc7cb2125dd9ec7108d2 + languageName: node + linkType: hard + "babel-plugin-istanbul@npm:^6.1.1": version: 6.1.1 resolution: "babel-plugin-istanbul@npm:6.1.1" @@ -8230,7 +8780,7 @@ __metadata: languageName: node linkType: hard -"better-opn@npm:~3.0.2": +"better-opn@npm:^3.0.2, better-opn@npm:~3.0.2": version: 3.0.2 resolution: "better-opn@npm:3.0.2" dependencies: @@ -8246,6 +8796,13 @@ __metadata: languageName: node linkType: hard +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: 10c0/230520f1ff920b2d2ce3e372d77a33faa4fa60d802fe01ca4ffbc321ee06023fe9a741ac02793ee778040a16b7e497f7d60c504d1c402b8fdab6f03bb785a25f + languageName: node + linkType: hard + "bin-build@npm:^3.0.0": version: 3.0.0 resolution: "bin-build@npm:3.0.0" @@ -8304,6 +8861,13 @@ __metadata: languageName: node linkType: hard +"binary-extensions@npm:^2.0.0": + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 + languageName: node + linkType: hard + "bl@npm:^1.0.0": version: 1.2.3 resolution: "bl@npm:1.2.3" @@ -8394,6 +8958,22 @@ __metadata: languageName: node linkType: hard +"braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"browser-assert@npm:^1.2.1": + version: 1.2.1 + resolution: "browser-assert@npm:1.2.1" + checksum: 10c0/902abf999f92c9c951fdb6d7352c09eea9a84706258699655f7e7906e42daa06a1ae286398a755872740e05a6a71c43c5d1a0c0431d67a8cdb66e5d859a3fc0c + languageName: node + linkType: hard + "browserslist@npm:^4.21.3, browserslist@npm:^4.21.5": version: 4.21.8 resolution: "browserslist@npm:4.21.8" @@ -8861,6 +9441,25 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^3.5.1": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 + languageName: node + linkType: hard + "chownr@npm:^1.1.1": version: 1.1.4 resolution: "chownr@npm:1.1.4" @@ -9189,6 +9788,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^8.2.0": + version: 8.3.0 + resolution: "commander@npm:8.3.0" + checksum: 10c0/8b043bb8322ea1c39664a1598a95e0495bfe4ca2fad0d84a92d7d1d8d213e2a155b441d2470c8e08de7c4a28cf2bc6e169211c49e1b21d9f7edc6ae4d9356060 + languageName: node + linkType: hard + "commander@npm:^9.4.1": version: 9.5.0 resolution: "commander@npm:9.5.0" @@ -9690,18 +10296,6 @@ __metadata: languageName: node linkType: hard -"cross-env@npm:7.0.3": - version: 7.0.3 - resolution: "cross-env@npm:7.0.3" - dependencies: - cross-spawn: "npm:^7.0.1" - bin: - cross-env: src/bin/cross-env.js - cross-env-shell: src/bin/cross-env-shell.js - checksum: 10c0/f3765c25746c69fcca369655c442c6c886e54ccf3ab8c16847d5ad0e91e2f337d36eedc6599c1227904bf2a228d721e690324446876115bc8e7b32a866735ecf - languageName: node - linkType: hard - "cross-fetch@npm:^3.1.5": version: 3.1.6 resolution: "cross-fetch@npm:3.1.6" @@ -9744,7 +10338,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -10133,6 +10727,32 @@ __metadata: languageName: node linkType: hard +"dedent@npm:^1.5.1": + version: 1.5.3 + resolution: "dedent@npm:1.5.3" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10c0/d94bde6e6f780be4da4fd760288fcf755ec368872f4ac5218197200d86430aeb8d90a003a840bff1c20221188e3f23adced0119cb811c6873c70d0ac66d12832 + languageName: node + linkType: hard + +"deep-equal@npm:^1.0.1": + version: 1.1.2 + resolution: "deep-equal@npm:1.1.2" + dependencies: + is-arguments: "npm:^1.1.1" + is-date-object: "npm:^1.0.5" + is-regex: "npm:^1.1.4" + object-is: "npm:^1.1.5" + object-keys: "npm:^1.1.1" + regexp.prototype.flags: "npm:^1.5.1" + checksum: 10c0/cd85d822d18e9b3e1532d0f6ba412d229aa9d22881d70da161674428ae96e47925191296f7cda29306bac252889007da40ed8449363bd1c96c708acb82068a00 + languageName: node + linkType: hard + "deep-extend@npm:^0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" @@ -10260,6 +10880,13 @@ __metadata: languageName: node linkType: hard +"dequal@npm:^2.0.2": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 10c0/f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 + languageName: node + linkType: hard + "destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" @@ -10578,6 +11205,13 @@ __metadata: languageName: node linkType: hard +"emojis-list@npm:^3.0.0": + version: 3.0.0 + resolution: "emojis-list@npm:3.0.0" + checksum: 10c0/7dc4394b7b910444910ad64b812392159a21e1a7ecc637c775a440227dcb4f80eff7fe61f4453a7d7603fa23d23d30cc93fe9e4b5ed985b88d6441cd4a35117b + languageName: node + linkType: hard + "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -10807,6 +11441,100 @@ __metadata: languageName: node linkType: hard +"esbuild-register@npm:^3.5.0": + version: 3.6.0 + resolution: "esbuild-register@npm:3.6.0" + dependencies: + debug: "npm:^4.3.4" + peerDependencies: + esbuild: ">=0.12 <1" + checksum: 10c0/77193b7ca32ba9f81b35ddf3d3d0138efb0b1429d71b39480cfee932e1189dd2e492bd32bf04a4d0bc3adfbc7ec7381ceb5ffd06efe35f3e70904f1f686566d5 + languageName: node + linkType: hard + +"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0": + version: 0.24.0 + resolution: "esbuild@npm:0.24.0" + dependencies: + "@esbuild/aix-ppc64": "npm:0.24.0" + "@esbuild/android-arm": "npm:0.24.0" + "@esbuild/android-arm64": "npm:0.24.0" + "@esbuild/android-x64": "npm:0.24.0" + "@esbuild/darwin-arm64": "npm:0.24.0" + "@esbuild/darwin-x64": "npm:0.24.0" + "@esbuild/freebsd-arm64": "npm:0.24.0" + "@esbuild/freebsd-x64": "npm:0.24.0" + "@esbuild/linux-arm": "npm:0.24.0" + "@esbuild/linux-arm64": "npm:0.24.0" + "@esbuild/linux-ia32": "npm:0.24.0" + "@esbuild/linux-loong64": "npm:0.24.0" + "@esbuild/linux-mips64el": "npm:0.24.0" + "@esbuild/linux-ppc64": "npm:0.24.0" + "@esbuild/linux-riscv64": "npm:0.24.0" + "@esbuild/linux-s390x": "npm:0.24.0" + "@esbuild/linux-x64": "npm:0.24.0" + "@esbuild/netbsd-x64": "npm:0.24.0" + "@esbuild/openbsd-arm64": "npm:0.24.0" + "@esbuild/openbsd-x64": "npm:0.24.0" + "@esbuild/sunos-x64": "npm:0.24.0" + "@esbuild/win32-arm64": "npm:0.24.0" + "@esbuild/win32-ia32": "npm:0.24.0" + "@esbuild/win32-x64": "npm:0.24.0" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/9f1aadd8d64f3bff422ae78387e66e51a5e09de6935a6f987b6e4e189ed00fdc2d1bc03d2e33633b094008529c8b6e06c7ad1a9782fb09fec223bf95998c0683 + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -11657,9 +12385,9 @@ __metadata: languageName: node linkType: hard -"expo-router@npm:~3.5.23": - version: 3.5.23 - resolution: "expo-router@npm:3.5.23" +"expo-router@npm:~3.5.24": + version: 3.5.24 + resolution: "expo-router@npm:3.5.24" dependencies: "@expo/metro-runtime": "npm:3.2.3" "@expo/server": "npm:^0.4.0" @@ -11667,7 +12395,7 @@ __metadata: "@react-navigation/bottom-tabs": "npm:~6.5.7" "@react-navigation/native": "npm:~6.1.6" "@react-navigation/native-stack": "npm:~6.9.12" - expo-splash-screen: "npm:0.27.5" + expo-splash-screen: "npm:0.27.7" react-native-helmet-async: "npm:2.0.4" schema-utils: "npm:^4.0.1" peerDependencies: @@ -11686,7 +12414,7 @@ __metadata: optional: true react-native-reanimated: optional: true - checksum: 10c0/b14b3598ed8bcfcb46d356203f5031a6ee7c4d905d951d22ffd45800329a4bbd1e833e50628f65c2c99d85b9aa94aac4625b4cdd272dc10530cc8d6ebc3ebcda + checksum: 10c0/867be5197d3950cbd72e043224b2bd372254b440e26f6b73fd55983fd09a480c6bba42d596f7721bbd76c44a9db8117433921966d0277620efd194be0a32feca languageName: node linkType: hard @@ -11699,14 +12427,14 @@ __metadata: languageName: node linkType: hard -"expo-splash-screen@npm:0.27.5": - version: 0.27.5 - resolution: "expo-splash-screen@npm:0.27.5" +"expo-splash-screen@npm:0.27.7": + version: 0.27.7 + resolution: "expo-splash-screen@npm:0.27.7" dependencies: - "@expo/prebuild-config": "npm:7.0.6" + "@expo/prebuild-config": "npm:7.0.9" peerDependencies: expo: "*" - checksum: 10c0/25ec881ca5cc15154c56320a094e885c90806faca5bad069550159681296c3d3fa2b405140a843b735bdd9a32628fb6d818dc6f5233f35f0bbb549682b4cc6a6 + checksum: 10c0/059ab08530f99e3ac124c0c18d6b42dc3333181b27e2d94b3d8ceb8bfa09221ebd1ee3577b98fc78a36a52b8eec36730292e72eb7257eae100d30b4a288480c3 languageName: node linkType: hard @@ -11856,6 +12584,13 @@ __metadata: languageName: node linkType: hard +"fast-deep-equal@npm:^2.0.1": + version: 2.0.1 + resolution: "fast-deep-equal@npm:2.0.1" + checksum: 10c0/1602e0d6ed63493c865cc6b03f9070d6d3926e8cd086a123060b58f80a295f3f08b1ecfb479ae7c45b7fd45535202aea7cf5b49bc31bffb81c20b1502300be84 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -12102,6 +12837,15 @@ __metadata: languageName: node linkType: hard +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + "filter-obj@npm:^1.1.0": version: 1.1.0 resolution: "filter-obj@npm:1.1.0" @@ -12135,6 +12879,17 @@ __metadata: languageName: node linkType: hard +"find-cache-dir@npm:^3.3.1": + version: 3.3.2 + resolution: "find-cache-dir@npm:3.3.2" + dependencies: + commondir: "npm:^1.0.1" + make-dir: "npm:^3.0.2" + pkg-dir: "npm:^4.1.0" + checksum: 10c0/92747cda42bff47a0266b06014610981cfbb71f55d60f2c8216bc3108c83d9745507fb0b14ecf6ab71112bed29cd6fb1a137ee7436179ea36e11287e3159e587 + languageName: node + linkType: hard + "find-up@npm:^2.0.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" @@ -12394,6 +13149,16 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" @@ -12403,6 +13168,15 @@ __metadata: languageName: node linkType: hard +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + "function-bind@npm:^1.1.1": version: 1.1.1 resolution: "function-bind@npm:1.1.1" @@ -12436,6 +13210,13 @@ __metadata: languageName: node linkType: hard +"fuse.js@npm:^7.0.0": + version: 7.0.0 + resolution: "fuse.js@npm:7.0.0" + checksum: 10c0/3574b7fc2e0ccb047e05dbe5f8f04e8f0754f62fa209669ef426ea1354a32ae7355620788af8f1d29f94e1fdecd513f1f3787f012848a31ec90bb4e0e6092504 + languageName: node + linkType: hard + "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" @@ -12652,7 +13433,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2": +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -13623,7 +14404,7 @@ __metadata: languageName: node linkType: hard -"is-arguments@npm:^1.0.4": +"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" dependencies: @@ -13675,6 +14456,15 @@ __metadata: languageName: node linkType: hard +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + "is-boolean-object@npm:^1.1.0": version: 1.1.2 resolution: "is-boolean-object@npm:1.1.2" @@ -13829,7 +14619,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:4.0.3, is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": +"is-glob@npm:4.0.3, is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -15185,6 +15975,13 @@ __metadata: languageName: node linkType: hard +"jsdoc-type-pratt-parser@npm:^4.0.0": + version: 4.1.0 + resolution: "jsdoc-type-pratt-parser@npm:4.1.0" + checksum: 10c0/7700372d2e733a32f7ea0a1df9cec6752321a5345c11a91b2ab478a031a426e934f16d5c1f15c8566c7b2c10af9f27892a29c2c789039f595470e929a4aa60ea + languageName: node + linkType: hard + "jsdom@npm:^20.0.0": version: 20.0.3 resolution: "jsdom@npm:20.0.3" @@ -15374,7 +16171,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.2.2, json5@npm:^2.2.3": +"json5@npm:^2.1.2, json5@npm:^2.2.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -15775,6 +16572,17 @@ __metadata: languageName: node linkType: hard +"loader-utils@npm:^2.0.4": + version: 2.0.4 + resolution: "loader-utils@npm:2.0.4" + dependencies: + big.js: "npm:^5.2.2" + emojis-list: "npm:^3.0.0" + json5: "npm:^2.1.2" + checksum: 10c0/d5654a77f9d339ec2a03d88221a5a695f337bf71eb8dea031b3223420bb818964ba8ed0069145c19b095f6c8b8fd386e602a3fc7ca987042bd8bb1dcc90d7100 + languageName: node + linkType: hard + "localforage@npm:^1.8.1": version: 1.10.0 resolution: "localforage@npm:1.10.0" @@ -16119,7 +16927,7 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.0.0": +"make-dir@npm:^3.0.0, make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" dependencies: @@ -16188,6 +16996,13 @@ __metadata: languageName: node linkType: hard +"map-or-similar@npm:^1.5.0": + version: 1.5.0 + resolution: "map-or-similar@npm:1.5.0" + checksum: 10c0/33c6ccfdc272992e33e4e99a69541a3e7faed9de3ac5bc732feb2500a9ee71d3f9d098980a70b7746e7eeb7f859ff7dfb8aa9b5ecc4e34170a32ab78cfb18def + languageName: node + linkType: hard + "marky@npm:^1.2.2": version: 1.2.5 resolution: "marky@npm:1.2.5" @@ -16263,6 +17078,15 @@ __metadata: languageName: node linkType: hard +"memoizerific@npm:^1.11.3": + version: 1.11.3 + resolution: "memoizerific@npm:1.11.3" + dependencies: + map-or-similar: "npm:^1.5.0" + checksum: 10c0/661bf69b7afbfad57f0208f0c63324f4c96087b480708115b78ee3f0237d86c7f91347f6db31528740b2776c2e34c709bcb034e1e910edee2270c9603a0a469e + languageName: node + linkType: hard + "memory-cache@npm:~0.2.0": version: 0.2.0 resolution: "memory-cache@npm:0.2.0" @@ -16903,7 +17727,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.7": +"nanoid@npm:^3.3.1, nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" bin: @@ -17142,7 +17966,7 @@ __metadata: languageName: node linkType: hard -"normalize-path@npm:^3.0.0": +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 @@ -17256,6 +18080,16 @@ __metadata: languageName: node linkType: hard +"object-is@npm:^1.1.5": + version: 1.1.6 + resolution: "object-is@npm:1.1.6" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + checksum: 10c0/506af444c4dce7f8e31f34fc549e2fb8152d6b9c4a30c6e62852badd7f520b579c679af433e7a072f9d78eb7808d230dc12e1cf58da9154dfbf8813099ea0fe0 + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -18001,7 +18835,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be @@ -18095,7 +18929,7 @@ __metadata: languageName: node linkType: hard -"pkg-dir@npm:^4.2.0": +"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" dependencies: @@ -18157,6 +18991,15 @@ __metadata: languageName: node linkType: hard +"polished@npm:^4.2.2, polished@npm:^4.3.1": + version: 4.3.1 + resolution: "polished@npm:4.3.1" + dependencies: + "@babel/runtime": "npm:^7.17.8" + checksum: 10c0/45480d4c7281a134281cef092f6ecc202a868475ff66a390fee6e9261386e16f3047b4de46a2f2e1cf7fb7aa8f52d30b4ed631a1e3bcd6f303ca31161d4f07fe + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.0.0 resolution: "possible-typed-array-names@npm:1.0.0" @@ -18234,7 +19077,7 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.8.7": +"prettier@npm:^2.4.1, prettier@npm:^2.8.7": version: 2.8.8 resolution: "prettier@npm:2.8.8" bin: @@ -18376,7 +19219,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:15.8.1, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:15.8.1, prop-types@npm:^15.5.10, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -18712,6 +19555,27 @@ __metadata: languageName: node linkType: hard +"react-native-modal-datetime-picker@npm:^14.0.0": + version: 14.0.1 + resolution: "react-native-modal-datetime-picker@npm:14.0.1" + dependencies: + prop-types: "npm:^15.7.2" + peerDependencies: + "@react-native-community/datetimepicker": ">=3.0.0" + react-native: ">=0.65.0" + checksum: 10c0/56b47e017a051427d1e6962c5b2f76b9983f9c4083c753808790f5040c3ada38703eebe4f2c243f39f590caf42baa9e3c48ba8947ea8e0b9f49a5b27f3380e0f + languageName: node + linkType: hard + +"react-native-modal-selector@npm:^2.1.1": + version: 2.1.2 + resolution: "react-native-modal-selector@npm:2.1.2" + dependencies: + prop-types: "npm:^15.5.10" + checksum: 10c0/651c6b6b0f1c2d82e372f3188ad5a8eb478728135a05b1c97315646f4fdbee446a0dd5bc8f79a96e7ab379a08c0a04bcdb2911f7dcf3bb6511f0cced7d55f0f0 + languageName: node + linkType: hard + "react-native-onesignal@npm:5.1.1": version: 5.1.1 resolution: "react-native-onesignal@npm:5.1.1" @@ -18818,6 +19682,13 @@ __metadata: languageName: node linkType: hard +"react-native-swipe-gestures@npm:^1.0.5": + version: 1.0.5 + resolution: "react-native-swipe-gestures@npm:1.0.5" + checksum: 10c0/33bb8bd402de82ed751a8f1913fe7e02ddc533edb7178bf9e499387b93d0d14154cef120f273c554bb988ad1ba87165b80be213611cb92af8875f2380ec7878b + languageName: node + linkType: hard + "react-native-toast-message@npm:2.2.1": version: 2.2.1 resolution: "react-native-toast-message@npm:2.2.1" @@ -18828,6 +19699,17 @@ __metadata: languageName: node linkType: hard +"react-native-url-polyfill@npm:^2.0.0": + version: 2.0.0 + resolution: "react-native-url-polyfill@npm:2.0.0" + dependencies: + whatwg-url-without-unicode: "npm:8.0.0-3" + peerDependencies: + react-native: "*" + checksum: 10c0/a48e6978f5a2c9e225bb93cc5f9985a8ac0fe7d8122105bcd88ef8d8420a3b33a67ce5d2bda2b606bf5fa94af9f6d04efce354580b60900e7c967fd2ebdc42cf + languageName: node + linkType: hard + "react-native@npm:~0.75.0": version: 0.75.4 resolution: "react-native@npm:0.75.4" @@ -19023,6 +19905,15 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + "readline@npm:^1.3.0": version: 1.3.0 resolution: "readline@npm:1.3.0" @@ -19042,6 +19933,19 @@ __metadata: languageName: node linkType: hard +"recast@npm:^0.23.5": + version: 0.23.9 + resolution: "recast@npm:0.23.9" + dependencies: + ast-types: "npm:^0.16.1" + esprima: "npm:~4.0.0" + source-map: "npm:~0.6.1" + tiny-invariant: "npm:^1.3.3" + tslib: "npm:^2.0.1" + checksum: 10c0/65d6e780351f0180ea4fe5c9593ac18805bf2b79977f5bedbbbf26f6d9b619ed0f6992c1bf9e06dd40fca1aea727ad6d62463cfb5d3a33342ee5a6e486305fe5 + languageName: node + linkType: hard + "recyclerlistview@npm:4.2.0": version: 4.2.0 resolution: "recyclerlistview@npm:4.2.0" @@ -19138,6 +20042,18 @@ __metadata: languageName: node linkType: hard +"regexp.prototype.flags@npm:^1.5.1": + version: 1.5.3 + resolution: "regexp.prototype.flags@npm:1.5.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/e1a7c7dc42cc91abf73e47a269c4b3a8f225321b7f617baa25821f6a123a91d23a73b5152f21872c566e699207e1135d075d2251cd3e84cc96d82a910adf6020 + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.2": version: 1.5.2 resolution: "regexp.prototype.flags@npm:1.5.2" @@ -19539,6 +20455,7 @@ __metadata: "@babel/core": "npm:7.25.8" "@commitlint/cli": "npm:19.5.0" "@commitlint/config-conventional": "npm:19.5.0" + "@gorhom/bottom-sheet": "npm:5.0.6" "@graphql-codegen/cli": "npm:5.0.3" "@graphql-codegen/client-preset": "npm:4.4.0" "@graphql-codegen/introspection": "npm:4.0.3" @@ -19547,12 +20464,18 @@ __metadata: "@graphql-codegen/typescript-react-query": "npm:6.1.0" "@hookform/resolvers": "npm:3.9.0" "@react-native-async-storage/async-storage": "npm:1.23.1" + "@react-native-community/datetimepicker": "npm:^8.2.0" + "@react-native-community/slider": "npm:^4.5.5" "@react-native-masked-view/masked-view": "npm:0.3.1" "@react-navigation/native": "npm:6.1.17" - "@react-navigation/native-stack": "npm:6.9.26" "@sentry/react-native": "npm:~5.24.3" "@shopify/flash-list": "npm:1.6.4" "@shopify/restyle": "npm:2.4.4" + "@storybook/addon-actions": "npm:8.4.2" + "@storybook/addon-ondevice-actions": "npm:8.4.2" + "@storybook/addon-ondevice-backgrounds": "npm:8.4.2" + "@storybook/addon-ondevice-controls": "npm:8.4.2" + "@storybook/react-native": "npm:^8.4.2" "@svgr/cli": "npm:8.1.0" "@tanstack/query-async-storage-persister": "npm:5.59.13" "@tanstack/react-query": "npm:5.59.13" @@ -19571,9 +20494,9 @@ __metadata: "@types/semver": "npm:7.5.8" "@types/sharp": "npm:0.31.0" app-icon-badge: "npm:0.0.15" + babel-loader: "npm:^8.4.1" babel-plugin-root-import: "npm:6.6.0" babel-plugin-transform-remove-console: "npm:6.9.4" - cross-env: "npm:7.0.3" dayjs: "npm:1.11.13" dotenv: "npm:16.4.5" eslint: "npm:8.57.1" @@ -19590,7 +20513,7 @@ __metadata: expo-linking: "npm:~6.3.1" expo-localization: "npm:~15.0.3" expo-network: "npm:~6.0.1" - expo-router: "npm:~3.5.23" + expo-router: "npm:~3.5.24" expo-secure-store: "npm:~13.0.2" expo-splash-screen: "npm:~0.27.6" expo-status-bar: "npm:~1.12.1" @@ -19639,6 +20562,7 @@ __metadata: semver: "npm:7.6.3" sharp: "npm:0.31.1" standard-version: "npm:9.5.0" + storybook: "npm:8.4.2" ts-jest: "npm:29.2.5" ts-node: "npm:10.9.2" typescript: "npm:~5.3.3" @@ -19764,6 +20688,17 @@ __metadata: languageName: node linkType: hard +"schema-utils@npm:^2.6.5": + version: 2.7.1 + resolution: "schema-utils@npm:2.7.1" + dependencies: + "@types/json-schema": "npm:^7.0.5" + ajv: "npm:^6.12.4" + ajv-keywords: "npm:^3.5.2" + checksum: 10c0/f484f34464edd8758712d5d3ba25a306e367dac988aecaf4ce112e99baae73f33a807b5cf869240bb6648c80720b36af2d7d72be3a27faa49a2d4fc63fa3f85f + languageName: node + linkType: hard + "schema-utils@npm:^4.0.1": version: 4.2.0 resolution: "schema-utils@npm:4.2.0" @@ -19839,7 +20774,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.6.3, semver@npm:^7.1.3, semver@npm:^7.6.3": +"semver@npm:7.6.3, semver@npm:^7.1.3, semver@npm:^7.6.2, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -20526,6 +21461,49 @@ __metadata: languageName: node linkType: hard +"store2@npm:^2.14.3": + version: 2.14.3 + resolution: "store2@npm:2.14.3" + checksum: 10c0/22e1096e6d69590672ca0b7f891d82b060837ef4c3e5df0d4563e6cbed14c52ddf2589fa94b79f4311b6ec41d95d6142e5d01d194539e0175c3fb4090cca8244 + languageName: node + linkType: hard + +"storybook@npm:8.4.2": + version: 8.4.2 + resolution: "storybook@npm:8.4.2" + dependencies: + "@storybook/core": "npm:8.4.2" + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + bin: + getstorybook: ./bin/index.cjs + sb: ./bin/index.cjs + storybook: ./bin/index.cjs + checksum: 10c0/54791f44de53d465a74c44ec16255ebe5248156eee54b768fdcc12a7556e1b6e2a23c9c5c5eec0c3fcc71c3820398999ede5042f711a851b0ca9c71e65c8ab19 + languageName: node + linkType: hard + +"storybook@npm:^8.4.2": + version: 8.4.4 + resolution: "storybook@npm:8.4.4" + dependencies: + "@storybook/core": "npm:8.4.4" + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + bin: + getstorybook: ./bin/index.cjs + sb: ./bin/index.cjs + storybook: ./bin/index.cjs + checksum: 10c0/cf680b8451fc4941812af91844b332fec83aa71739e1ce528bb6de623d89b119b7db6c4a3f6b4e600604d39e3c4e04f0cc6d500815c473da7ee676208fa3c782 + languageName: node + linkType: hard + "stream-buffers@npm:2.2.x, stream-buffers@npm:~2.2.0": version: 2.2.0 resolution: "stream-buffers@npm:2.2.0" @@ -21173,7 +22151,14 @@ __metadata: languageName: node linkType: hard -"tinycolor2@npm:^1.6.0": +"tiny-invariant@npm:^1.3.3": + version: 1.3.3 + resolution: "tiny-invariant@npm:1.3.3" + checksum: 10c0/65af4a07324b591a059b35269cd696aba21bef2107f29b9f5894d83cc143159a204b299553435b03874ebb5b94d019afa8b8eff241c8a4cfee95872c2e1c1c4a + languageName: node + linkType: hard + +"tinycolor2@npm:^1.4.1, tinycolor2@npm:^1.6.0": version: 1.6.0 resolution: "tinycolor2@npm:1.6.0" checksum: 10c0/9aa79a36ba2c2a87cb221453465cabacd04b9e35f9694373e846fdc78b1c768110f81e581ea41440106c0f24d9a023891d0887e8075885e790ac40eb0e74a5c1 @@ -21319,6 +22304,13 @@ __metadata: languageName: node linkType: hard +"ts-dedent@npm:^2.0.0": + version: 2.2.0 + resolution: "ts-dedent@npm:2.2.0" + checksum: 10c0/175adea838468cc2ff7d5e97f970dcb798bbcb623f29c6088cb21aa2880d207c5784be81ab1741f56b9ac37840cbaba0c0d79f7f8b67ffe61c02634cafa5c303 + languageName: node + linkType: hard + "ts-interface-checker@npm:^0.1.9": version: 0.1.13 resolution: "ts-interface-checker@npm:0.1.13" @@ -21575,6 +22567,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^2.19.0, type-fest@npm:~2.19": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: 10c0/a5a7ecf2e654251613218c215c7493574594951c08e52ab9881c9df6a6da0aeca7528c213c622bc374b4e0cb5c443aa3ab758da4e3c959783ce884c3194e12cb + languageName: node + linkType: hard + "type-fest@npm:^3.0.0": version: 3.13.1 resolution: "type-fest@npm:3.13.1" @@ -21997,7 +22996,7 @@ __metadata: languageName: node linkType: hard -"util@npm:^0.12.3": +"util@npm:^0.12.3, util@npm:^0.12.4, util@npm:^0.12.5": version: 0.12.5 resolution: "util@npm:0.12.5" dependencies: @@ -22044,6 +23043,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^9.0.0": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b + languageName: node + linkType: hard + "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -22493,6 +23501,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.18.0, ws@npm:^8.2.3": + version: 8.18.0 + resolution: "ws@npm:8.18.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/25eb33aff17edcb90721ed6b0eb250976328533ad3cd1a28a274bd263682e7296a6591ff1436d6cbc50fa67463158b062f9d1122013b361cec99a05f84680e06 + languageName: node + linkType: hard + "xcode@npm:^3.0.1": version: 3.0.1 resolution: "xcode@npm:3.0.1"