diff --git a/examples/expo-example/App.tsx b/examples/expo-example/App.tsx index cfb168b52f..8b7d0383df 100644 --- a/examples/expo-example/App.tsx +++ b/examples/expo-example/App.tsx @@ -1,3 +1,48 @@ +// https://github.com/facebook/hermes/issues/817 +// NOTE this fixes metro not logging objects/arrays for some reason +if (__DEV__) { + const primitiveTypes = ['string', 'number', 'boolean']; + const logLevels = ['log', 'debug', 'info', 'warn', 'error']; + + const transformArgs = (args) => { + return args.map((arg) => { + if (arg === undefined) { + return 'undefined'; + } + if (arg instanceof Error) { + if (arg.stack) { + return arg.stack; + } + return arg.toString(); + } + if (arg instanceof Date) { + return arg.toString(); + } + if (primitiveTypes.includes(typeof arg)) { + return arg.toString(); + } else { + return JSON.stringify(arg); + } + }); + }; + + const consoleProxy = new Proxy(console, { + get: (target, prop) => { + //@ts-ignore + if (logLevels.includes(prop)) { + return (...args) => { + // we proxy the call to itself, but we transform the arguments to strings before + // so that they are printed in the terminal + return target[prop].apply(this, transformArgs(args)); + }; + } + return target[prop]; + }, + }); + + console = consoleProxy; +} + import { Text, View } from 'react-native'; import Constants from 'expo-constants'; diff --git a/examples/expo-example/components/ControlExamples/Check/Check.stories.tsx b/examples/expo-example/components/ControlExamples/Check/Check.stories.tsx new file mode 100644 index 0000000000..bdd2afe2c7 --- /dev/null +++ b/examples/expo-example/components/ControlExamples/Check/Check.stories.tsx @@ -0,0 +1,41 @@ +import type { StoryObj, Meta } from '@storybook/react'; +import { CheckExample } from './Check'; + +const meta: Meta = { + title: 'ControlExamples/Check', + component: CheckExample, + argTypes: { + rotationAxis: { + control: 'check', + options: ['x', 'y', 'z'], + }, + }, +}; + +export default meta; + +type Story = StoryObj; + +export const XAxis: Story = { + args: { + rotationAxis: ['x'], + }, +}; + +export const YAxis: Story = { + args: { + rotationAxis: ['y'], + }, +}; + +export const ZAxis: Story = { + args: { + rotationAxis: ['z'], + }, +}; + +export const XYZAxis: Story = { + args: { + rotationAxis: ['x', 'y', 'z'], + }, +}; diff --git a/examples/expo-example/components/ControlExamples/Check/Check.test.tsx b/examples/expo-example/components/ControlExamples/Check/Check.test.tsx new file mode 100644 index 0000000000..1c78ed64b8 --- /dev/null +++ b/examples/expo-example/components/ControlExamples/Check/Check.test.tsx @@ -0,0 +1,32 @@ +import { screen, render } from '@testing-library/react-native'; +import { composeStory } from '@storybook/react'; + +import Meta, { XAxis, XYZAxis, YAxis, ZAxis } from './Check.stories'; + +const XAxisStory = composeStory(XAxis, Meta); +const YAxisStory = composeStory(YAxis, Meta); +const ZAxisStory = composeStory(ZAxis, Meta); +const XYZAxisStory = composeStory(XYZAxis, Meta); + +test('x Axis story renders', () => { + render(); + + screen.getByText('axis: x'); +}); + +test('y Axis story renders', () => { + render(); + + screen.getByText('axis: y'); +}); + +test('z Axis story renders', () => { + render(); + + screen.getByText('axis: z'); +}); +test('xyz Axis story renders', () => { + render(); + + screen.getByText('axis: x, y, z'); +}); diff --git a/examples/expo-example/components/ControlExamples/Check/Check.tsx b/examples/expo-example/components/ControlExamples/Check/Check.tsx new file mode 100644 index 0000000000..4583cc6f62 --- /dev/null +++ b/examples/expo-example/components/ControlExamples/Check/Check.tsx @@ -0,0 +1,19 @@ +import React, { useEffect } from 'react'; +import { Text } from 'react-native'; + +interface Props { + rotationAxis: Array<'x' | 'y' | 'z'>; +} + +export const CheckExample = ({ rotationAxis }: Props) => { + useEffect(() => { + console.log( + 'rotationAxis', + JSON.stringify(rotationAxis), + typeof rotationAxis, + Array.isArray(rotationAxis) + ); + }); + + return axis: {rotationAxis.join(', ')}; +}; diff --git a/examples/expo-example/package.json b/examples/expo-example/package.json index b63caa9e82..dfef2a4edf 100644 --- a/examples/expo-example/package.json +++ b/examples/expo-example/package.json @@ -21,7 +21,7 @@ "test:ci": "jest --runInBand" }, "dependencies": { - "@expo/metro-runtime": "^3.1.1", + "@expo/metro-runtime": "~3.1.3", "@react-native-async-storage/async-storage": "1.21.0", "@react-native-community/datetimepicker": "7.6.1", "@react-native-community/slider": "4.4.2", @@ -34,8 +34,8 @@ "@storybook/addon-ondevice-controls": "^7.6.15", "@storybook/addon-ondevice-knobs": "^7.6.15", "@storybook/addon-ondevice-notes": "^7.6.15", - "@storybook/addon-react-native-server": "0.0.5--canary.3.18ef8d7.0", - "@storybook/addon-react-native-web": "^0.0.22", + "@storybook/addon-react-native-server": "^0.0.5", + "@storybook/addon-react-native-web": "^0.0.23", "@storybook/blocks": "^7.6.13", "@storybook/builder-webpack5": "^7.6.13", "@storybook/core-common": "^7.6.13", @@ -45,11 +45,11 @@ "@storybook/react-native": "^7.6.15", "@storybook/react-webpack5": "^7.6.13", "@storybook/test": "^7.6.13", - "expo": "^50.0.2", + "expo": "^50.0.6", "querystring": "^0.2.1", "react": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.2", + "react-native": "0.73.4", "react-native-safe-area-context": "4.8.2", "react-native-web": "~0.19.6", "storybook": "^7.6.13", @@ -65,7 +65,7 @@ "@types/ws": "^8.5.10", "babel-plugin-react-docgen-typescript": "^1.5.1", "jest": "29.7.0", - "jest-expo": "50.0.1", + "jest-expo": "~50.0.2", "metro-react-native-babel-preset": "^0.77.0", "ts-node": "^10.9.1", "typescript": "^5.3.3" diff --git a/packages/ondevice-controls/package.json b/packages/ondevice-controls/package.json index 1234bbb810..0d2c5d7ce6 100644 --- a/packages/ondevice-controls/package.json +++ b/packages/ondevice-controls/package.json @@ -42,6 +42,10 @@ "react-native-modal-selector": "^2.1.1", "tinycolor2": "^1.4.1" }, + "devDependencies": { + "cross-env": "^7.0.3", + "typescript": "^5.3.3" + }, "peerDependencies": { "@react-native-community/datetimepicker": "*", "@react-native-community/slider": "*", diff --git a/packages/ondevice-controls/src/types/Check.tsx b/packages/ondevice-controls/src/types/Check.tsx new file mode 100644 index 0000000000..ba1f8fe839 --- /dev/null +++ b/packages/ondevice-controls/src/types/Check.tsx @@ -0,0 +1,136 @@ +import type { FC } from 'react'; +import { useState, useEffect } from 'react'; +import { styled } from '@storybook/react-native-theming'; +import { logger } from '@storybook/client-logger'; +import type { Conditional } from '@storybook/types'; + +export type OptionsObject = Record; + +export interface NormalizedOptionsConfig { + options: OptionsObject; +} + +export type OptionsMultiSelection = any[]; + +export interface ArgType { + name?: string; + description?: string; + defaultValue?: any; + if?: Conditional; + [key: string]: any; +} + +export interface ControlProps { + name: string; + value?: T; + defaultValue?: T; + argType?: ArgType; + onChange: (value: T) => T | void; + onFocus?: (evt: any) => void; + onBlur?: (evt: any) => void; +} + +const Wrapper = styled.View(({}) => ({})); + +const Text = styled.Text({}); + +const Container = styled.TouchableOpacity<{ isLast: boolean }>(({ isLast, theme }) => ({ + marginBottom: isLast ? 0 : theme.tokens.spacing2, + flexDirection: 'row', + alignItems: 'center', +})); + +const Tick = styled.Image({}); + +const Box = styled.View<{ selected: boolean }>(({ theme, selected }) => ({ + width: 20, + height: 20, + marginRight: theme.inputs.radio.labelSpacing, + alignItems: 'center', + justifyContent: 'center', + borderColor: theme.inputs.text.borderColor, + borderWidth: 1, + borderRadius: theme.tokens.borderRadius.small, + backgroundColor: selected ? theme.inputs.radio.activeBackgroundColor : 'transparent', +})); + +export const selectedKeys = (value: any[], options: OptionsObject) => + value && options + ? Object.entries(options) + .filter((entry) => value?.includes?.(entry[1])) + .map((entry) => entry[0]) + : []; + +export const selectedValues = (keys: string[], options: OptionsObject) => + keys && options && keys.map((key) => options[key]); + +export const getControlId = (value: string) => `control-${value?.replace(/\s+/g, '-')}`; + +export const CheckboxControl: FC<{ + arg: { + name: string; + value: any; + options: Array | Record; + control: { + labels?: Record; + }; + }; + onChange: (value: any) => void; +}> = ({ onChange, arg: { name, value, options } }) => { + const initial = selectedKeys(value, options); + const [selected, setSelected] = useState(initial); + + const handleChange = (text) => { + const option = text; + const updated = [...selected]; + if (updated.includes(option)) { + updated.splice(updated.indexOf(option), 1); + } else { + updated.push(option); + } + onChange(selectedValues(updated, options)); + setSelected(updated); + }; + + useEffect(() => { + setSelected(selectedKeys(value, options)); + }, [options, value]); + + const controlId = getControlId(name); + + if (!options) { + logger.warn(`Checkbox with no options: ${name}`); + return null; + } + + return ( + + {Object.keys(options).map((key, index) => { + return ( + { + handleChange(key); + }} + > + + + + {options[key]} + + ); + })} + + ); +}; + +export default CheckboxControl; diff --git a/packages/ondevice-controls/src/types/index.ts b/packages/ondevice-controls/src/types/index.ts index 164119769d..7e6c7d7ae1 100644 --- a/packages/ondevice-controls/src/types/index.ts +++ b/packages/ondevice-controls/src/types/index.ts @@ -7,6 +7,7 @@ import SelectType from './Select'; import DateType from './Date'; import ArrayType from './Array'; import RadioType from './Radio'; +import CheckboxType from './Check'; export default { text: TextType, @@ -18,4 +19,5 @@ export default { date: DateType, array: ArrayType, radio: RadioType, + check: CheckboxType, }; diff --git a/yarn.lock b/yarn.lock index 7edb086904..4c2f06ef34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2322,9 +2322,9 @@ __metadata: languageName: node linkType: hard -"@expo/cli@npm:0.17.1": - version: 0.17.1 - resolution: "@expo/cli@npm:0.17.1" +"@expo/cli@npm:0.17.5": + version: 0.17.5 + resolution: "@expo/cli@npm:0.17.5" dependencies: "@babel/runtime": "npm:^7.20.0" "@expo/code-signing-certificates": "npm:0.0.5" @@ -2338,7 +2338,7 @@ __metadata: "@expo/osascript": "npm:^2.0.31" "@expo/package-manager": "npm:^1.1.1" "@expo/plist": "npm:^0.1.0" - "@expo/prebuild-config": "npm:6.7.3" + "@expo/prebuild-config": "npm:6.7.4" "@expo/rudder-sdk-node": "npm:1.1.1" "@expo/spawn-async": "npm:1.5.0" "@expo/xcpretty": "npm:^4.3.0" @@ -2378,6 +2378,7 @@ __metadata: npm-package-arg: "npm:^7.0.0" open: "npm:^8.3.0" ora: "npm:3.4.0" + picomatch: "npm:^3.0.1" pretty-bytes: "npm:5.6.0" progress: "npm:2.0.3" prompts: "npm:^2.3.2" @@ -2390,6 +2391,8 @@ __metadata: semver: "npm:^7.5.3" send: "npm:^0.18.0" slugify: "npm:^1.3.4" + source-map-support: "npm:~0.5.21" + stacktrace-parser: "npm:^0.1.10" structured-headers: "npm:^0.4.1" tar: "npm:^6.0.5" temp-dir: "npm:^2.0.0" @@ -2401,7 +2404,7 @@ __metadata: ws: "npm:^8.12.1" bin: expo-internal: build/bin/cli - checksum: 10/2eadf2d55e566ea40c676085c3405cea8d63ebd528a91820428b83e1318b0188329a521d626c876c656d79a863eed4d9a1d4ffe0cdbd8c980fabcb7c93738701 + checksum: 10/0b68ec76920ebab7b7be61fb91a114bd67da0f0cb370eb3cc73620c55207daf667e9916a904bd606cd4f012d9e8b1c690ba7eafa85f4e074a660d9efe20b481c languageName: node linkType: hard @@ -2590,9 +2593,9 @@ __metadata: languageName: node linkType: hard -"@expo/metro-config@npm:0.17.3": - version: 0.17.3 - resolution: "@expo/metro-config@npm:0.17.3" +"@expo/metro-config@npm:0.17.4": + version: 0.17.4 + resolution: "@expo/metro-config@npm:0.17.4" dependencies: "@babel/core": "npm:^7.20.0" "@babel/generator": "npm:^7.20.5" @@ -2616,7 +2619,7 @@ __metadata: sucrase: "npm:3.34.0" peerDependencies: "@react-native/babel-preset": "*" - checksum: 10/df1b7a8ed6118b44c0052850c5858ef416145dc3e8883fba234ce20a4b22dd29e66013c3c741715ceb2c5cf8d71219b168a909ad56819198049087cdb27608d6 + checksum: 10/807384d3a55d5df9d982b58a930487f32867af6297167181c576b41a1a2d4d9776fc4737cc3e129318142f594b674801320f4a6230ee15d5c869dc64ee46d7ee languageName: node linkType: hard @@ -2650,12 +2653,12 @@ __metadata: languageName: node linkType: hard -"@expo/metro-runtime@npm:^3.1.1": - version: 3.1.1 - resolution: "@expo/metro-runtime@npm:3.1.1" +"@expo/metro-runtime@npm:~3.1.3": + version: 3.1.3 + resolution: "@expo/metro-runtime@npm:3.1.3" peerDependencies: react-native: "*" - checksum: 10/348354c0c2adfb04e9488c0d072b9d2ea21803d3c2a24c43a5a8e69c52211c6b93184560c2af43bd48b2f6a77aed11729cb23009db9a5d34d47d0dc41d74070c + checksum: 10/406ff72275de6553b24c9e8d08a5f928826219a6d6edd151b33cfc805c591758c892a2219070835c85851a35b6b5d1f4f61946e44038d06e02bf1aa5398824fe languageName: node linkType: hard @@ -2700,9 +2703,9 @@ __metadata: languageName: node linkType: hard -"@expo/prebuild-config@npm:6.7.3": - version: 6.7.3 - resolution: "@expo/prebuild-config@npm:6.7.3" +"@expo/prebuild-config@npm:6.7.4": + version: 6.7.4 + resolution: "@expo/prebuild-config@npm:6.7.4" dependencies: "@expo/config": "npm:~8.5.0" "@expo/config-plugins": "npm:~7.8.0" @@ -2716,7 +2719,7 @@ __metadata: xml2js: "npm:0.6.0" peerDependencies: expo-modules-autolinking: ">=0.8.1" - checksum: 10/27dbe184cbf4810238109fae208edd27df295b4b5203b08e1bd44b0c8c5efe3ba80c1e74ee739615b8e537c85247063b933f8bcf43fec5412a32e7b85ced9527 + checksum: 10/388367cf3843a7305dd1137fcf8d3485b4806d76a01649e2dc35440258b183c697b8938e59a0a6c9c3df71c195ffc228cd01af99729fddd234530dd34c8ae1dd languageName: node linkType: hard @@ -4587,48 +4590,48 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-clean@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli-clean@npm:12.3.0" +"@react-native-community/cli-clean@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli-clean@npm:12.3.2" dependencies: - "@react-native-community/cli-tools": "npm:12.3.0" + "@react-native-community/cli-tools": "npm:12.3.2" chalk: "npm:^4.1.2" execa: "npm:^5.0.0" - checksum: 10/6e066f325fe590d422687a547ba9ec18953c8fe59efefcba974c3fe2f9be2c7838c0eaa29d80dcc02ca41ed687b232fab53460b2d9d0553d4ada5a14342a56e1 + checksum: 10/2857ff04914f2ae81e8a4fba2ca1beea51108d5b6e5232bdcf1a1e3eca4aecc854f75bb68d295f6dffe4880ca82e0243a0f7c51ef9adb3b28e760f544d9881a6 languageName: node linkType: hard -"@react-native-community/cli-config@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli-config@npm:12.3.0" +"@react-native-community/cli-config@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli-config@npm:12.3.2" dependencies: - "@react-native-community/cli-tools": "npm:12.3.0" + "@react-native-community/cli-tools": "npm:12.3.2" chalk: "npm:^4.1.2" cosmiconfig: "npm:^5.1.0" deepmerge: "npm:^4.3.0" glob: "npm:^7.1.3" joi: "npm:^17.2.1" - checksum: 10/f2600223ae1783497902d5da278183f194ae377903ab5d4d9923bcd7e2f4c9ae810c8951b660c810c50b33cd87ca3ff491de16f27fd5057aedd55ad5ef75c0b8 + checksum: 10/666a321ff2b29d1fb8711df33382126dd326d67685c5778402f600b5c8761fd74961493e9c9f4170333f34790236746a28f9090e5fac4db3474ae8c5447c0369 languageName: node linkType: hard -"@react-native-community/cli-debugger-ui@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli-debugger-ui@npm:12.3.0" +"@react-native-community/cli-debugger-ui@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli-debugger-ui@npm:12.3.2" dependencies: serve-static: "npm:^1.13.1" - checksum: 10/33502ff21a2b3e07a4b8cdf3b8eda01fe7b03dedb4a4210ea99b27d135a8066dffc46352a6761cdd6e58d1b5aa71e70f0340e0193ee4d00313b1a233c1b244f3 + checksum: 10/70658f892dcc3228408bafd5731599001a7d2cbf5d1f4a49d8c4a997057870b8375e4cf82a6754b43589322125db2239a83067d186392fbcd8db3015cde880b8 languageName: node linkType: hard -"@react-native-community/cli-doctor@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli-doctor@npm:12.3.0" +"@react-native-community/cli-doctor@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli-doctor@npm:12.3.2" dependencies: - "@react-native-community/cli-config": "npm:12.3.0" - "@react-native-community/cli-platform-android": "npm:12.3.0" - "@react-native-community/cli-platform-ios": "npm:12.3.0" - "@react-native-community/cli-tools": "npm:12.3.0" + "@react-native-community/cli-config": "npm:12.3.2" + "@react-native-community/cli-platform-android": "npm:12.3.2" + "@react-native-community/cli-platform-ios": "npm:12.3.2" + "@react-native-community/cli-tools": "npm:12.3.2" chalk: "npm:^4.1.2" command-exists: "npm:^1.2.8" deepmerge: "npm:^4.3.0" @@ -4642,64 +4645,64 @@ __metadata: strip-ansi: "npm:^5.2.0" wcwidth: "npm:^1.0.1" yaml: "npm:^2.2.1" - checksum: 10/0ab534dabca911aceeb0e0bba4e3675c53c5a9815e553e2b52ebd23b3e388b91be6f70d5596a3d703a2a4def698aced616064e8ca19de6cff94fb780205f7a6f + checksum: 10/cb14f8012edce2fff0c59e3e083e1fe95562a52b621502b884b571fe38572ef8d556e644f87c17d5ab1f214747389e6b91c9b21561c39a7eeff11337cfbcc55c languageName: node linkType: hard -"@react-native-community/cli-hermes@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli-hermes@npm:12.3.0" +"@react-native-community/cli-hermes@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli-hermes@npm:12.3.2" dependencies: - "@react-native-community/cli-platform-android": "npm:12.3.0" - "@react-native-community/cli-tools": "npm:12.3.0" + "@react-native-community/cli-platform-android": "npm:12.3.2" + "@react-native-community/cli-tools": "npm:12.3.2" chalk: "npm:^4.1.2" hermes-profile-transformer: "npm:^0.0.6" ip: "npm:^1.1.5" - checksum: 10/f9ba2db3163dfca554649cbcc8c20ffbfb28d1836e50b59e04aed5c1c358cde8d44b0e79fa476031069b4663e38603a6bc82cd43538f9ccf38c7a12449d3d623 + checksum: 10/60666fc41554ad82c4f2a18b3eca924f8fb0151d781b02704ce0c8053d6b4d0560dcfdbd98a9739e8e86004c6aa91244b1ed293062d28bef10fb822b44856fd5 languageName: node linkType: hard -"@react-native-community/cli-platform-android@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli-platform-android@npm:12.3.0" +"@react-native-community/cli-platform-android@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli-platform-android@npm:12.3.2" dependencies: - "@react-native-community/cli-tools": "npm:12.3.0" + "@react-native-community/cli-tools": "npm:12.3.2" chalk: "npm:^4.1.2" execa: "npm:^5.0.0" fast-xml-parser: "npm:^4.2.4" glob: "npm:^7.1.3" logkitty: "npm:^0.7.1" - checksum: 10/a4779739d83b0b6e993873579b901c9f5568976f3a34d6135099e8b7362cf4717e7ae0bb7049ea54ed3567706b869050b68e7ee2abbb841ee9607df5c90554cd + checksum: 10/bdf8f6e0be622cf4aa2cd2752ce4cb6559bb921c8a5081f741dfd62692b80f8c06884cc5075dae9bae20d83d9625bccb2b1dc62d60a15f37b747026935e117bf languageName: node linkType: hard -"@react-native-community/cli-platform-ios@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli-platform-ios@npm:12.3.0" +"@react-native-community/cli-platform-ios@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli-platform-ios@npm:12.3.2" dependencies: - "@react-native-community/cli-tools": "npm:12.3.0" + "@react-native-community/cli-tools": "npm:12.3.2" chalk: "npm:^4.1.2" execa: "npm:^5.0.0" fast-xml-parser: "npm:^4.0.12" glob: "npm:^7.1.3" ora: "npm:^5.4.1" - checksum: 10/2f21b52e9c5a57448bbe21283fcf377128d5caee7e025979a577e9cca12accf2bf5cd81aa7bec55b536ea9fc5daffd14e88fcd5c79aba6bf6b0be5979947be3e + checksum: 10/b54cae4a54d712fdca9687a5c14964e3abe0124c25b7e1639f8d665c2150c7ac73ef4e9c3af14cfcb55e91d284bd09494f82340fb2ef978594027aa1e143099d languageName: node linkType: hard -"@react-native-community/cli-plugin-metro@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli-plugin-metro@npm:12.3.0" - checksum: 10/d61386d05e97870b12250e34deb4c3c5823662a0f05f6ee08c6c7f938976f0af77d7a61399dfb8a610714d940423f22c2e2c32b8c75d59a1296ad8e9bba84462 +"@react-native-community/cli-plugin-metro@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli-plugin-metro@npm:12.3.2" + checksum: 10/a4b8409c400e9f52134c9eb378ca4b2fd863ef62d19534a5cf148ae7d4124e91fdecf432f0d6224b57ca1442706d38f440524a689b8f3be6236ad7b1e72efbbc languageName: node linkType: hard -"@react-native-community/cli-server-api@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli-server-api@npm:12.3.0" +"@react-native-community/cli-server-api@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli-server-api@npm:12.3.2" dependencies: - "@react-native-community/cli-debugger-ui": "npm:12.3.0" - "@react-native-community/cli-tools": "npm:12.3.0" + "@react-native-community/cli-debugger-ui": "npm:12.3.2" + "@react-native-community/cli-tools": "npm:12.3.2" compression: "npm:^1.7.1" connect: "npm:^3.6.5" errorhandler: "npm:^1.5.1" @@ -4707,13 +4710,13 @@ __metadata: pretty-format: "npm:^26.6.2" serve-static: "npm:^1.13.1" ws: "npm:^7.5.1" - checksum: 10/695dd3b7dbd1ed148d712999a2b98e8f48a28323c10707c19c90ba2506c739e17d44976ce7e4174ff4ce62025fe4016dbd2fcb4198b8523a967b26c44a1fa83b + checksum: 10/d8a12db7b2067837e4a3c009693db429d8e92db5f11dbcd54c99c52eba8b4ac2c804cd2cead7889e63b3806ceb5edb879f8e4783c11652a43eaa080ecea19204 languageName: node linkType: hard -"@react-native-community/cli-tools@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli-tools@npm:12.3.0" +"@react-native-community/cli-tools@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli-tools@npm:12.3.2" dependencies: appdirsjs: "npm:^1.2.4" chalk: "npm:^4.1.2" @@ -4725,32 +4728,32 @@ __metadata: semver: "npm:^7.5.2" shell-quote: "npm:^1.7.3" sudo-prompt: "npm:^9.0.0" - checksum: 10/f9c2891a4fb81010f472991655fe7d1b9237b0cfc09e9965b19e685486b2099b86d01b68c3aef8f14c70448f7a609c8083a75d40c2957b5b52f4637e9e918417 + checksum: 10/7afbab226a4c94dc3b72c5822bede7df830f6d869a24791c1bd830ead22e8d945552b4ab18e09e6e3a843c7f6011be23400704c8fe2e38105a43bfe1a9e2b1aa languageName: node linkType: hard -"@react-native-community/cli-types@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli-types@npm:12.3.0" +"@react-native-community/cli-types@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli-types@npm:12.3.2" dependencies: joi: "npm:^17.2.1" - checksum: 10/001bd07cc93e9248ee324334d0c3f55415c7174aae51f62f6884a7f2edc4b39a31c66420b2006d9980a4481da466c048c91cf2b936cc220a6dbc7726e614f981 + checksum: 10/c896ce454814971469af3a329c66d8c3f388b91428c12db51e823035ddd2fa48dc7d838c799780bc365c3c0f36f78da70f006423159b13b15d8537dbf2d3cdf9 languageName: node linkType: hard -"@react-native-community/cli@npm:12.3.0": - version: 12.3.0 - resolution: "@react-native-community/cli@npm:12.3.0" +"@react-native-community/cli@npm:12.3.2": + version: 12.3.2 + resolution: "@react-native-community/cli@npm:12.3.2" dependencies: - "@react-native-community/cli-clean": "npm:12.3.0" - "@react-native-community/cli-config": "npm:12.3.0" - "@react-native-community/cli-debugger-ui": "npm:12.3.0" - "@react-native-community/cli-doctor": "npm:12.3.0" - "@react-native-community/cli-hermes": "npm:12.3.0" - "@react-native-community/cli-plugin-metro": "npm:12.3.0" - "@react-native-community/cli-server-api": "npm:12.3.0" - "@react-native-community/cli-tools": "npm:12.3.0" - "@react-native-community/cli-types": "npm:12.3.0" + "@react-native-community/cli-clean": "npm:12.3.2" + "@react-native-community/cli-config": "npm:12.3.2" + "@react-native-community/cli-debugger-ui": "npm:12.3.2" + "@react-native-community/cli-doctor": "npm:12.3.2" + "@react-native-community/cli-hermes": "npm:12.3.2" + "@react-native-community/cli-plugin-metro": "npm:12.3.2" + "@react-native-community/cli-server-api": "npm:12.3.2" + "@react-native-community/cli-tools": "npm:12.3.2" + "@react-native-community/cli-types": "npm:12.3.2" chalk: "npm:^4.1.2" commander: "npm:^9.4.1" deepmerge: "npm:^4.3.0" @@ -4762,7 +4765,7 @@ __metadata: semver: "npm:^7.5.2" bin: react-native: build/bin.js - checksum: 10/8038141abf2b272b626e16fe49dc9633027270e917fbf1daca40196cb76bfb2090afa9b2b2629355b95cb66ad6a38f44251b9ae7cb9df04928665a58377891cf + checksum: 10/25452cb1bad04d4cebbf91cecbf1484b3c6f9a9d9e57841762c8f18e27821544476e4f5c92ec59ed726cfafeada76ee6deb3e35f4daa7666b7f47467d718da8f languageName: node linkType: hard @@ -4798,18 +4801,18 @@ __metadata: languageName: node linkType: hard -"@react-native/babel-plugin-codegen@npm:0.73.2": - version: 0.73.2 - resolution: "@react-native/babel-plugin-codegen@npm:0.73.2" +"@react-native/babel-plugin-codegen@npm:0.73.4": + version: 0.73.4 + resolution: "@react-native/babel-plugin-codegen@npm:0.73.4" dependencies: - "@react-native/codegen": "npm:0.73.2" - checksum: 10/0951dd53499342d2ac7c10bf7a764dac9e534b38d0bba673f9fa9cec80171a9bc8ad9dcea86e832453f04bcfa2bf7bf607a1b33056aa431e8666c05aa5f668af + "@react-native/codegen": "npm:0.73.3" + checksum: 10/b32651c29d694a530390347c06fa09cfbc0189bddb3ccdbe47caa050e2e909ea0e4e32182b1a2c12fb73e9b8f352da9f3c239fb77e6e892c59c297371758f53a languageName: node linkType: hard -"@react-native/babel-preset@npm:0.73.19": - version: 0.73.19 - resolution: "@react-native/babel-preset@npm:0.73.19" +"@react-native/babel-preset@npm:0.73.21": + version: 0.73.21 + resolution: "@react-native/babel-preset@npm:0.73.21" dependencies: "@babel/core": "npm:^7.20.0" "@babel/plugin-proposal-async-generator-functions": "npm:^7.0.0" @@ -4850,12 +4853,12 @@ __metadata: "@babel/plugin-transform-typescript": "npm:^7.5.0" "@babel/plugin-transform-unicode-regex": "npm:^7.0.0" "@babel/template": "npm:^7.0.0" - "@react-native/babel-plugin-codegen": "npm:0.73.2" + "@react-native/babel-plugin-codegen": "npm:0.73.4" babel-plugin-transform-flow-enums: "npm:^0.0.2" react-refresh: "npm:^0.14.0" peerDependencies: "@babel/core": "*" - checksum: 10/4473dca00c66031ca84c93c7b02bc3dc0040a38033bd67f9bca4c1a9ac26ad1359a1c0ccf082ee2e793e8d03ff8f11ebf2573173694169d2495979688207e1ef + checksum: 10/93e62bc1cd9cbc0fc86dc8498a03a6eb26aad75540c03752da9cce4ab56a55c4fc03a6542b624b2dc69269ce8209fa0f483d20afa60b64e35f1e1b3536c9c88d languageName: node linkType: hard @@ -4977,9 +4980,9 @@ __metadata: languageName: node linkType: hard -"@react-native/codegen@npm:0.73.2": - version: 0.73.2 - resolution: "@react-native/codegen@npm:0.73.2" +"@react-native/codegen@npm:0.73.3": + version: 0.73.3 + resolution: "@react-native/codegen@npm:0.73.3" dependencies: "@babel/parser": "npm:^7.20.0" flow-parser: "npm:^0.206.0" @@ -4990,18 +4993,18 @@ __metadata: nullthrows: "npm:^1.1.1" peerDependencies: "@babel/preset-env": ^7.1.6 - checksum: 10/d9487ea1b47e410ccd20b607bf544bb6c74900832f6fe78ce2e67f4d58637c79d6d173d0eb64e19b1bc2d817f507692d24c26f7df3254ee2574d55232bcaa796 + checksum: 10/3449b50e9cb388f910ceec9321aea1d741dece477d18dffed2b730219071a90d5f5067cf528bcea45e124213d4881198dcd7f712f8c0824294fda8d3c4f24334 languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.73.12": - version: 0.73.12 - resolution: "@react-native/community-cli-plugin@npm:0.73.12" +"@react-native/community-cli-plugin@npm:0.73.16": + version: 0.73.16 + resolution: "@react-native/community-cli-plugin@npm:0.73.16" dependencies: - "@react-native-community/cli-server-api": "npm:12.3.0" - "@react-native-community/cli-tools": "npm:12.3.0" + "@react-native-community/cli-server-api": "npm:12.3.2" + "@react-native-community/cli-tools": "npm:12.3.2" "@react-native/dev-middleware": "npm:0.73.7" - "@react-native/metro-babel-transformer": "npm:0.73.13" + "@react-native/metro-babel-transformer": "npm:0.73.15" chalk: "npm:^4.0.0" execa: "npm:^5.1.1" metro: "npm:^0.80.3" @@ -5009,7 +5012,7 @@ __metadata: metro-core: "npm:^0.80.3" node-fetch: "npm:^2.2.0" readline: "npm:^1.3.0" - checksum: 10/54a6caf7fb469d0f09183db52f559fbad510b95bb4ef0c938f012951af0d715ee1fbb7bb302d67058606be65aff5e92aea466f048147fb0185a85402ae583576 + checksum: 10/0e2ef69b6f475105da5644d74df9fa9de57635e8ac6b87686ca9d66062b387e18732fc6e1d538044ee2563f264fce421bf41a0ea1e76b41c3f26484d085c4569 languageName: node linkType: hard @@ -5101,17 +5104,17 @@ __metadata: languageName: node linkType: hard -"@react-native/metro-babel-transformer@npm:0.73.13": - version: 0.73.13 - resolution: "@react-native/metro-babel-transformer@npm:0.73.13" +"@react-native/metro-babel-transformer@npm:0.73.15": + version: 0.73.15 + resolution: "@react-native/metro-babel-transformer@npm:0.73.15" dependencies: "@babel/core": "npm:^7.20.0" - "@react-native/babel-preset": "npm:0.73.19" + "@react-native/babel-preset": "npm:0.73.21" hermes-parser: "npm:0.15.0" nullthrows: "npm:^1.1.1" peerDependencies: "@babel/core": "*" - checksum: 10/9cb4340c381e2d8683c67e9ede1f5bd602d39567323ef60b873cfb26de22eaf5f6300f722b47cfe75f4a257315cceca68daef72b308a53ccfd11e76fcf1813d1 + checksum: 10/8d7b448ecf60f4662de2b7b3be31e6b61d03ebcdd1cbe7f84fedf58faa3065622d185ce5f737257f4c512828a101f5a2008101ec43cc60623c049f493e628340 languageName: node linkType: hard @@ -5447,11 +5450,13 @@ __metadata: "@storybook/core-events": "npm:^7.6.13" "@storybook/manager-api": "npm:^7.6.13" "@storybook/react-native-theming": "npm:^7.6.15" + cross-env: "npm:^7.0.3" 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" + typescript: "npm:^5.3.3" peerDependencies: "@react-native-community/datetimepicker": "*" "@react-native-community/slider": "*" @@ -5510,18 +5515,18 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-react-native-server@npm:0.0.5--canary.3.18ef8d7.0": - version: 0.0.5--canary.3.18ef8d7.0 - resolution: "@storybook/addon-react-native-server@npm:0.0.5--canary.3.18ef8d7.0" +"@storybook/addon-react-native-server@npm:^0.0.5": + version: 0.0.5 + resolution: "@storybook/addon-react-native-server@npm:0.0.5" dependencies: ws: "npm:^8.16.0" - checksum: 10/4934f90c53db36ad71c9654884c926065570b880edeae5b8c43f7a12a946a2a772e1c7357891ec0393696fc7f5ccde27dd56fef85bbe40ae3cadb4cfb7011daa + checksum: 10/7f74fd152275b2b46a1b6e353b3f80ee3a0523089fdf85ff527206eca058df413e5258266646257631dde56b119d22505e1e6bdfc71b6b7951821210234dc185 languageName: node linkType: hard -"@storybook/addon-react-native-web@npm:^0.0.22": - version: 0.0.22 - resolution: "@storybook/addon-react-native-web@npm:0.0.22" +"@storybook/addon-react-native-web@npm:^0.0.23": + version: 0.0.23 + resolution: "@storybook/addon-react-native-web@npm:0.0.23" peerDependencies: "@babel/preset-react": "*" "@react-native/babel-preset": "*" @@ -5538,7 +5543,7 @@ __metadata: optional: true react-dom: optional: true - checksum: 10/5bcb1040a0d52cb2a98a8589b3b951b773ca90392a95616c3f9032ac41c2ebf691339cd427875d222fed3d121a42ba5b7fe64a0aabb0e13b10c4b0749f708807 + checksum: 10/a98a8f5ce538e19bd49c8288d11d546a48f5c143452adb451ecf2f2a79ec32e6277c8e5dc37a3153a01e2a5baaa6d832178863b82268ec98c66fc5411b9e0fd2 languageName: node linkType: hard @@ -11503,7 +11508,7 @@ __metadata: dependencies: "@babel/core": "npm:^7.19.3" "@babel/plugin-proposal-export-namespace-from": "npm:^7.18.9" - "@expo/metro-runtime": "npm:^3.1.1" + "@expo/metro-runtime": "npm:~3.1.3" "@react-native-async-storage/async-storage": "npm:1.21.0" "@react-native-community/datetimepicker": "npm:7.6.1" "@react-native-community/slider": "npm:4.4.2" @@ -11517,8 +11522,8 @@ __metadata: "@storybook/addon-ondevice-controls": "npm:^7.6.15" "@storybook/addon-ondevice-knobs": "npm:^7.6.15" "@storybook/addon-ondevice-notes": "npm:^7.6.15" - "@storybook/addon-react-native-server": "npm:0.0.5--canary.3.18ef8d7.0" - "@storybook/addon-react-native-web": "npm:^0.0.22" + "@storybook/addon-react-native-server": "npm:^0.0.5" + "@storybook/addon-react-native-web": "npm:^0.0.23" "@storybook/blocks": "npm:^7.6.13" "@storybook/builder-webpack5": "npm:^7.6.13" "@storybook/core-common": "npm:^7.6.13" @@ -11533,14 +11538,14 @@ __metadata: "@types/react-test-renderer": "npm:18.0.7" "@types/ws": "npm:^8.5.10" babel-plugin-react-docgen-typescript: "npm:^1.5.1" - expo: "npm:^50.0.2" + expo: "npm:^50.0.6" jest: "npm:29.7.0" - jest-expo: "npm:50.0.1" + jest-expo: "npm:~50.0.2" metro-react-native-babel-preset: "npm:^0.77.0" querystring: "npm:^0.2.1" react: "npm:18.2.0" react-dom: "npm:18.2.0" - react-native: "npm:0.73.2" + react-native: "npm:0.73.4" react-native-safe-area-context: "npm:4.8.2" react-native-web: "npm:~0.19.6" storybook: "npm:^7.6.13" @@ -11559,12 +11564,12 @@ __metadata: languageName: node linkType: hard -"expo-file-system@npm:~16.0.4": - version: 16.0.4 - resolution: "expo-file-system@npm:16.0.4" +"expo-file-system@npm:~16.0.6": + version: 16.0.6 + resolution: "expo-file-system@npm:16.0.6" peerDependencies: expo: "*" - checksum: 10/c13c041ec7e5b29f772913be0bc8c4edaf38414920ce775c4befafb18c437173ec56bc6294e63bda88574918a015531660d01d5cf71f69aba622b8816d4e02a4 + checksum: 10/63eb6ecb0f749225217dcd3657d9c38db2e3288b93e8d465fa67e32d0299a47ad78e1b52c06e58bf5b2e1d7de71222f7106d1b5f95b04cdc213eb4fc4af92021 languageName: node linkType: hard @@ -11588,9 +11593,9 @@ __metadata: languageName: node linkType: hard -"expo-modules-autolinking@npm:1.10.2": - version: 1.10.2 - resolution: "expo-modules-autolinking@npm:1.10.2" +"expo-modules-autolinking@npm:1.10.3": + version: 1.10.3 + resolution: "expo-modules-autolinking@npm:1.10.3" dependencies: "@expo/config": "npm:~8.5.0" chalk: "npm:^4.1.0" @@ -11600,41 +11605,41 @@ __metadata: fs-extra: "npm:^9.1.0" bin: expo-modules-autolinking: bin/expo-modules-autolinking.js - checksum: 10/9afe5833d379b3f3e791515342e4906efa6fb68073a0eb79ee516520c3082c0c98ce9efefc95c2cea37fe66ea336a4e66d12b75439b106f72640f1e26c235a76 + checksum: 10/69c10680fa415dc589dad06f837dfab163d936fbfd2f9bdf9264d80b16405fd54ad85495c2d976477c24e8a578cb6f09433d801365beb29d748b2f4eebdb584e languageName: node linkType: hard -"expo-modules-core@npm:1.11.7": - version: 1.11.7 - resolution: "expo-modules-core@npm:1.11.7" +"expo-modules-core@npm:1.11.8": + version: 1.11.8 + resolution: "expo-modules-core@npm:1.11.8" dependencies: invariant: "npm:^2.2.4" - checksum: 10/c8f60333605d8e79db0deae015fa1409ccf87dc595fd500c76e325115f7d23d5e7f3b8f783706a6aa1da8fb5f32018fdc828ddf4f1ca257b1c508810443549b3 + checksum: 10/5d1619fab75536534bd0008ac8f1870c13fdd5991707f4533dd459265034850c27ec47dd96a7fce2940e3d63d218ebb346078f3d87cd70cdc1b0263370c5bb39 languageName: node linkType: hard -"expo@npm:^50.0.2": - version: 50.0.2 - resolution: "expo@npm:50.0.2" +"expo@npm:^50.0.6": + version: 50.0.6 + resolution: "expo@npm:50.0.6" dependencies: "@babel/runtime": "npm:^7.20.0" - "@expo/cli": "npm:0.17.1" + "@expo/cli": "npm:0.17.5" "@expo/config": "npm:8.5.4" "@expo/config-plugins": "npm:7.8.4" - "@expo/metro-config": "npm:0.17.3" + "@expo/metro-config": "npm:0.17.4" "@expo/vector-icons": "npm:^14.0.0" babel-preset-expo: "npm:~10.0.1" expo-asset: "npm:~9.0.2" - expo-file-system: "npm:~16.0.4" + expo-file-system: "npm:~16.0.6" expo-font: "npm:~11.10.2" expo-keep-awake: "npm:~12.8.2" - expo-modules-autolinking: "npm:1.10.2" - expo-modules-core: "npm:1.11.7" + expo-modules-autolinking: "npm:1.10.3" + expo-modules-core: "npm:1.11.8" fbemitter: "npm:^3.0.0" whatwg-url-without-unicode: "npm:8.0.0-3" bin: expo: bin/cli - checksum: 10/869e0776a8eff33bf4b0e57e189c227306b043e9d7497fcddef9e2e0c21656b546549dd714ef04bb128cdb5c1f2a4857d1896c79e776b24da9b16fc2249dd70e + checksum: 10/2bc912248418427e637d4f29b2c32712da4e01880672fcaedad70c77e931c6b478201f169f721b0a822507e180d700adb15f66c77853eb5c4f0d285f64a7b44f languageName: node linkType: hard @@ -14299,9 +14304,9 @@ __metadata: languageName: node linkType: hard -"jest-expo@npm:50.0.1": - version: 50.0.1 - resolution: "jest-expo@npm:50.0.1" +"jest-expo@npm:~50.0.2": + version: 50.0.2 + resolution: "jest-expo@npm:50.0.2" dependencies: "@expo/config": "npm:~8.5.0" "@expo/json-file": "npm:^8.2.37" @@ -14317,7 +14322,7 @@ __metadata: stacktrace-js: "npm:^2.0.2" bin: jest: bin/jest.js - checksum: 10/07d9600d7d1dc7a1939f851602f594143377e2629bfd9e459194edb5b374d29334accd70afe82141d59d83be9cc50d161d6427bd331fbe1e3a9489168c50952f + checksum: 10/d8db0475645ebaa26689fc9ac3fbbd8c6f279f38ab8e383a4ac93e956effa34163bce29713a6cc57ab59dca9ce2b4442264f3a8244718c7085060315c7605fca languageName: node linkType: hard @@ -17958,6 +17963,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^3.0.1": + version: 3.0.1 + resolution: "picomatch@npm:3.0.1" + checksum: 10/65ac837fedbd0640586f7c214f6c7481e1e12f41cdcd22a95eb6a2914d1773707ed0f0b5bd2d1e39b5ec7860b43a4c9150152332a3884cd8dd1d419b2a2fa5b5 + languageName: node + linkType: hard + "pify@npm:5.0.0, pify@npm:^5.0.0": version: 5.0.0 resolution: "pify@npm:5.0.0" @@ -18782,17 +18794,17 @@ __metadata: languageName: node linkType: hard -"react-native@npm:0.73.2": - version: 0.73.2 - resolution: "react-native@npm:0.73.2" +"react-native@npm:0.73.4": + version: 0.73.4 + resolution: "react-native@npm:0.73.4" dependencies: "@jest/create-cache-key-function": "npm:^29.6.3" - "@react-native-community/cli": "npm:12.3.0" - "@react-native-community/cli-platform-android": "npm:12.3.0" - "@react-native-community/cli-platform-ios": "npm:12.3.0" + "@react-native-community/cli": "npm:12.3.2" + "@react-native-community/cli-platform-android": "npm:12.3.2" + "@react-native-community/cli-platform-ios": "npm:12.3.2" "@react-native/assets-registry": "npm:0.73.1" - "@react-native/codegen": "npm:0.73.2" - "@react-native/community-cli-plugin": "npm:0.73.12" + "@react-native/codegen": "npm:0.73.3" + "@react-native/community-cli-plugin": "npm:0.73.16" "@react-native/gradle-plugin": "npm:0.73.4" "@react-native/js-polyfills": "npm:0.73.1" "@react-native/normalize-colors": "npm:0.73.2" @@ -18801,6 +18813,7 @@ __metadata: anser: "npm:^1.4.9" ansi-regex: "npm:^5.0.0" base64-js: "npm:^1.5.1" + chalk: "npm:^4.0.0" deprecated-react-native-prop-types: "npm:^5.0.0" event-target-shim: "npm:^5.0.1" flow-enums-runtime: "npm:^0.0.6" @@ -18827,7 +18840,7 @@ __metadata: react: 18.2.0 bin: react-native: cli.js - checksum: 10/4fc5025ed7fa315c8db4c7309439bd7f761fd49694f5677e6b9412bf0222a620dd01607abfba9e09d8a5339afbf9402a5f9e455e23253ce2aca9c2927bd6972e + checksum: 10/77196bfccb4e3d45471b35d564662c3c754925b3d0ead9312003e92b1938b9534d0d5a1b2784b013cd3cc6092e5b5fcbae43f50ef2d985a9a5436e73edb5757b languageName: node linkType: hard @@ -20064,7 +20077,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.16, source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.16, source-map-support@npm:~0.5.20, source-map-support@npm:~0.5.21": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: