From 0768bda02abb5a45b88536d0fc825415756110ef Mon Sep 17 00:00:00 2001 From: Antonette Caldwell <134739862+nebula-aac@users.noreply.github.com> Date: Fri, 29 Sep 2023 00:14:52 +0000 Subject: [PATCH] chore: update fork Signed-off-by: Antonette Caldwell <134739862+nebula-aac@users.noreply.github.com> --- packages/components/package.json | 3 + .../components/src/theme/SistentProvider.tsx | 61 ++++++++++ packages/components/src/theme/defaultTheme.ts | 87 ++++++++++++++ packages/components/src/theme/index.ts | 2 + .../components/src/theme/types/ColorTheme.ts | 4 + .../components/src/theme/types/DeepPartial.ts | 7 ++ .../src/theme/types/SistentColor.ts | 35 ++++++ .../src/theme/types/SistentSizes.ts | 30 +++++ .../src/theme/types/SistentTheme.ts | 102 ++++++++++++++++ packages/components/src/theme/types/Tuple.ts | 20 ++++ .../src/theme/utils/attachFunctions.ts | 7 ++ .../src/theme/utils/defaultColors.ts | 3 + .../src/theme/utils/getBreakpointValue.ts | 15 +++ .../components/src/theme/utils/mergeTheme.ts | 109 ++++++++++++++++++ .../src/theme/utils/primaryColor.ts | 9 ++ .../src/theme/utils/primaryShade.ts | 10 ++ yarn.lock | 99 +++++++++++----- 17 files changed, 572 insertions(+), 31 deletions(-) create mode 100644 packages/components/src/theme/SistentProvider.tsx create mode 100644 packages/components/src/theme/defaultTheme.ts create mode 100644 packages/components/src/theme/index.ts create mode 100644 packages/components/src/theme/types/ColorTheme.ts create mode 100644 packages/components/src/theme/types/DeepPartial.ts create mode 100644 packages/components/src/theme/types/SistentColor.ts create mode 100644 packages/components/src/theme/types/SistentSizes.ts create mode 100644 packages/components/src/theme/types/SistentTheme.ts create mode 100644 packages/components/src/theme/types/Tuple.ts create mode 100644 packages/components/src/theme/utils/attachFunctions.ts create mode 100644 packages/components/src/theme/utils/defaultColors.ts create mode 100644 packages/components/src/theme/utils/getBreakpointValue.ts create mode 100644 packages/components/src/theme/utils/mergeTheme.ts create mode 100644 packages/components/src/theme/utils/primaryColor.ts create mode 100644 packages/components/src/theme/utils/primaryShade.ts diff --git a/packages/components/package.json b/packages/components/package.json index a951dd20..44931fa5 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -19,6 +19,7 @@ }, "devDependencies": { "@mui/material": "^5.14.10", + "@types/ramda": "^0.29.3", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", "@typescript-eslint/eslint-plugin": "^6.0.0", @@ -26,6 +27,8 @@ "@vitejs/plugin-react-swc": "^3.3.2", "eslint": "^8.45.0", "eslint-plugin-react": "^7.33.2", + "io-ts": "^2.2.20", + "ramda": "^0.29.0", "react-error-boundary": "^4.0.11", "typescript": "^5.0.2", "vite": "^4.4.5", diff --git a/packages/components/src/theme/SistentProvider.tsx b/packages/components/src/theme/SistentProvider.tsx new file mode 100644 index 00000000..e7d7e0ca --- /dev/null +++ b/packages/components/src/theme/SistentProvider.tsx @@ -0,0 +1,61 @@ +import { EmotionCache } from '@emotion/react'; +import { ThemeProvider } from '@mui/material'; +import { ReactNode, createContext, useContext } from 'react'; +import { DEFAULT_THEME } from './defaultTheme'; +import { SistentTheme, SistentThemeOverride } from './types/SistentTheme'; +import { mergeThemeWithFn } from './utils/mergeTheme'; + +type SistentProviderContextType = { + theme: SistentTheme; + emotionCache?: EmotionCache; +}; + +const SistentProviderContext = createContext({ + theme: DEFAULT_THEME +}); + +export function useSistentTheme() { + return useContext(SistentProviderContext)?.theme || DEFAULT_THEME; +} + +export function useSistentProviderStyles(component: string | string[]) { + const theme = useSistentTheme(); + + const getStyles = (name: string) => ({}); + + if (Array.isArray(component)) { + return component.map(getStyles); + } + + return [getStyles(component)]; +} + +export function useSistentEmotionCache() { + return useContext(SistentProviderContext)?.emotionCache; +} + +export type SistentProviderProps = { + theme?: SistentThemeOverride; + emotionCache?: EmotionCache; + children: ReactNode; + inherit?: boolean; +}; + +export function SistentProvider({ + theme, + emotionCache, + children, + inherit = false +}: SistentProviderProps) { + const ctx = useContext(SistentProviderContext); + + const mergedTheme = mergeThemeWithFn(DEFAULT_THEME, inherit ? { ...ctx.theme, ...theme } : theme); + + return ( + + + {children} + + + ); +} diff --git a/packages/components/src/theme/defaultTheme.ts b/packages/components/src/theme/defaultTheme.ts new file mode 100644 index 00000000..100c9849 --- /dev/null +++ b/packages/components/src/theme/defaultTheme.ts @@ -0,0 +1,87 @@ +import { SistentThemeBase } from './types/SistentTheme'; +import { DEFAULT_COLORS } from './utils/defaultColors'; + +export const DEFAULT_THEME: SistentThemeBase = { + dir: 'ltr', + colorScheme: 'light', + white: '#FFF', + black: '#000', + primaryColor: 'green', + fontFamily: undefined, + lineHeight: undefined, + primaryShade: 0, + other: {}, + components: {}, + colors: DEFAULT_COLORS, + fontSizes: { + xs: '', + sm: '', + md: '', + lg: '', + xl: '' + }, + radius: { + xs: '', + sm: '', + md: '', + lg: '', + xl: '' + }, + spacing: { + xs: '', + sm: '', + md: '', + lg: '', + xl: '' + }, + breakpoints: { + xs: '0', + sm: '600', + md: '960', + lg: '1280', + xl: '1920' + }, + shadows: { + xs: '', + sm: '', + md: '', + lg: '', + xl: '' + }, + headings: { + fontFamily: undefined, + fontWeight: undefined, + sizes: { + h1: { + fontSize: '', + fontWeight: undefined, + lineHeight: undefined + }, + h2: { + fontSize: '', + fontWeight: undefined, + lineHeight: undefined + }, + h3: { + fontSize: '', + fontWeight: undefined, + lineHeight: undefined + }, + h4: { + fontSize: '', + fontWeight: undefined, + lineHeight: undefined + }, + h5: { + fontSize: '', + fontWeight: undefined, + lineHeight: undefined + }, + h6: { + fontSize: '', + fontWeight: undefined, + lineHeight: undefined + } + } + } +}; diff --git a/packages/components/src/theme/index.ts b/packages/components/src/theme/index.ts new file mode 100644 index 00000000..ba27bb63 --- /dev/null +++ b/packages/components/src/theme/index.ts @@ -0,0 +1,2 @@ +export { SistentProvider, useSistentTheme } from './SistentProvider'; +export type { SistentProviderProps } from './SistentProvider'; diff --git a/packages/components/src/theme/types/ColorTheme.ts b/packages/components/src/theme/types/ColorTheme.ts new file mode 100644 index 00000000..b76d6021 --- /dev/null +++ b/packages/components/src/theme/types/ColorTheme.ts @@ -0,0 +1,4 @@ +import * as t from 'io-ts'; + +export const ColorSchemeType = t.string; +export type ColorScheme = 'ight' | 'dark'; diff --git a/packages/components/src/theme/types/DeepPartial.ts b/packages/components/src/theme/types/DeepPartial.ts new file mode 100644 index 00000000..5c25f9ea --- /dev/null +++ b/packages/components/src/theme/types/DeepPartial.ts @@ -0,0 +1,7 @@ +export type DeepPartial = { + [P in keyof T]?: T[P] extends (...args: infer Args) => infer Return + ? (...args: Args) => DeepPartial + : T[P] extends object + ? DeepPartial + : T[P]; +}; diff --git a/packages/components/src/theme/types/SistentColor.ts b/packages/components/src/theme/types/SistentColor.ts new file mode 100644 index 00000000..e1509c4d --- /dev/null +++ b/packages/components/src/theme/types/SistentColor.ts @@ -0,0 +1,35 @@ +import * as t from 'io-ts'; +import { TupleCodec } from './Tuple'; + +const DefaultSistentColorType = t.union([ + t.literal('dark'), + t.literal('gray'), + t.literal('red'), + t.literal('pink'), + t.literal('grape'), + t.literal('violet'), + t.literal('indigo'), + t.literal('blue'), + t.literal('cyan'), + t.literal('green'), + t.literal('lime'), + t.literal('yellow'), + t.literal('orange'), + t.literal('teal'), + t.string +]); + +export type DefaultSistentColor = t.TypeOf; + +const SistentThemeColorsOverrideType = t.record(t.string, TupleCodec(t.string, 10)); + +export type SistentThemeColorsOverride = t.TypeOf; + +export const SistentThemeColorsType = t.union([ + SistentThemeColorsOverrideType, + t.record(DefaultSistentColorType, TupleCodec(t.string, 10)) +]); + +export type SistentThemeColors = t.TypeOf; + +export type SistentColor = keyof SistentThemeColors; diff --git a/packages/components/src/theme/types/SistentSizes.ts b/packages/components/src/theme/types/SistentSizes.ts new file mode 100644 index 00000000..21d3b584 --- /dev/null +++ b/packages/components/src/theme/types/SistentSizes.ts @@ -0,0 +1,30 @@ +import * as t from 'io-ts'; + +export const SistentSizeType = t.union([ + t.literal('xs'), + t.literal('sm'), + t.literal('md'), + t.literal('lg'), + t.literal('xl'), + t.string +]); + +export type SistentSize = t.TypeOf; + +export const SistentNumberSizeType = t.union([SistentSizeType, t.number]); + +export type SistentNumberSize = t.TypeOf; + +// Create a Keyof codec for known keys +const knownSizes = t.keyof({ + xs: null, + sm: null, + md: null, + lg: null, + xl: null +}); + +// Create the SistentSizesType using the known keys +export const SistentSizesType = t.record(knownSizes, t.string); + +export type SistentSizes = t.TypeOf; diff --git a/packages/components/src/theme/types/SistentTheme.ts b/packages/components/src/theme/types/SistentTheme.ts new file mode 100644 index 00000000..41586cbd --- /dev/null +++ b/packages/components/src/theme/types/SistentTheme.ts @@ -0,0 +1,102 @@ +import * as t from 'io-ts'; +import { ColorSchemeType } from './ColorTheme'; +import { DeepPartial } from './DeepPartial'; +import { SistentThemeColorsType } from './SistentColor'; +import { SistentSizesType } from './SistentSizes'; + +const SISTENT_SIZES = { + xs: null, + sm: null, + md: null, + lg: null, + xl: null +}; + +type ThemeComponent = {}; + +export type SistentThemeOther = Record; +export type SistentThemeComponents = Record; + +/* +export type HeadingStyle = { + fontSize: string; + fontWeight: CSSProperties['fontWeight']; + lineHeight: CSSProperties['lineHeight']; +} +*/ + +const HeadingStyleType = t.type({ + fontSize: t.string, + fontWeight: t.string, + lineHeight: t.string +}); + +const HeadingsType = t.type({ + fontFamily: t.string, + fontWeight: t.string, + sizes: t.type({ + h1: HeadingStyleType, + h2: HeadingStyleType, + h3: HeadingStyleType, + h4: HeadingStyleType, + h5: HeadingStyleType, + h6: HeadingStyleType + }) +}); + +const ShadeType = t.keyof({ + '0': null, + '1': null, + '2': null, + '3': null, + '4': null, + '5': null, + '6': null, + '7': null, + '8': null, + '9': null +}); + +type Shade = t.TypeOf; +/** + * type Shade = keyof typeof allowedShades; +const allowedShades = { + 0: true, 1: true, 2: true, 3: true, 4: true, + 5: true, 6: true, 7: true, 8: true, 9: true, +}; + +type FontFamilyType = CSSProperties['fontFamily']; +type LineHeightType = CSSProperties['lineHeight']; +*/ + +const SistentPrimaryShade = t.type({ + light: ShadeType, + dark: ShadeType +}); + +const SistentThemeType = t.type({ + dir: t.union([t.literal('ltr'), t.literal('rtl')]), + fontFamily: t.string, + lineHeight: t.string, + primaryShade: t.union([ShadeType, SistentPrimaryShade]), + other: t.record(t.string, t.any), + white: t.string, + black: t.string, + components: t.record(t.string, t.unknown), + colors: t.record(t.string, t.tuple([t.string, t.number])), + primaryColor: t.keyof(SistentThemeColorsType), + colorScheme: ColorSchemeType, + fontSizes: SistentSizesType, + radius: SistentSizesType, + spacing: SistentSizesType, + breakpoints: SistentSizesType, + shadows: t.record(t.keyof(SISTENT_SIZES), t.string), + headings: HeadingsType +}); + +export type SistentTheme = t.TypeOf; + +export type SistentThemeBase = Omit; + +export type SistentThemeOverride = DeepPartial> & + Partial>; diff --git a/packages/components/src/theme/types/Tuple.ts b/packages/components/src/theme/types/Tuple.ts new file mode 100644 index 00000000..9ea4992f --- /dev/null +++ b/packages/components/src/theme/types/Tuple.ts @@ -0,0 +1,20 @@ +import * as t from 'io-ts'; + +export function TupleCodec(itemCodec: T, length: number): t.Type { + return new t.Type( + `Tuple<${itemCodec.name}, ${length}>`, + (input: unknown): input is T[] => { + if (Array.isArray(input) && input.length === length) { + return input.every((item) => itemCodec.is(item)); + } + return false; + }, + (input, context) => { + if (Array.isArray(input) && input.length === length) { + return t.success(input); + } + return t.failure(input, context); + }, + t.identity + ); +} diff --git a/packages/components/src/theme/utils/attachFunctions.ts b/packages/components/src/theme/utils/attachFunctions.ts new file mode 100644 index 00000000..fe1e6e65 --- /dev/null +++ b/packages/components/src/theme/utils/attachFunctions.ts @@ -0,0 +1,7 @@ +import { SistentTheme, SistentThemeBase } from '../types/SistentTheme'; + +export function attachFns(themeBase: SistentThemeBase): SistentTheme { + return { + ...themeBase + }; +} diff --git a/packages/components/src/theme/utils/defaultColors.ts b/packages/components/src/theme/utils/defaultColors.ts new file mode 100644 index 00000000..31ba89f1 --- /dev/null +++ b/packages/components/src/theme/utils/defaultColors.ts @@ -0,0 +1,3 @@ +import { Tuple } from '../types/Tuple'; + +export const DEFAULT_COLORS = {} as Record>; diff --git a/packages/components/src/theme/utils/getBreakpointValue.ts b/packages/components/src/theme/utils/getBreakpointValue.ts new file mode 100644 index 00000000..62b8e5f2 --- /dev/null +++ b/packages/components/src/theme/utils/getBreakpointValue.ts @@ -0,0 +1,15 @@ +export function getBreakpointValue(value: string | number) { + if (typeof value === 'number') { + return value; + } + + if (typeof value === 'string' && value.includes('rem')) { + return Number(value.replace('rem', '')) * 16; + } + + if (typeof value === 'string' && value.includes('em')) { + return Number(value.replace('em', '')) * 16; + } + + return Number(value); +} diff --git a/packages/components/src/theme/utils/mergeTheme.ts b/packages/components/src/theme/utils/mergeTheme.ts new file mode 100644 index 00000000..d1add5a5 --- /dev/null +++ b/packages/components/src/theme/utils/mergeTheme.ts @@ -0,0 +1,109 @@ +import R from 'ramda'; +import { SistentSizes } from '../types/SistentSizes'; +import { SistentTheme, SistentThemeBase, SistentThemeOverride } from '../types/SistentTheme'; +import { attachFns } from './attachFunctions'; +import { getBreakpointValue } from './getBreakpointValue'; + +export function mergeTheme( + currentTheme: SistentThemeBase, + themeOverride?: SistentThemeOverride +): SistentThemeBase { + if (!themeOverride) { + return currentTheme; + } + + const result = R.mergeDeepRight(currentTheme, themeOverride); + + if (themeOverride?.headings?.sizes) { + result.headings = { + ...result.headings, + sizes: R.mergeDeepRight(currentTheme.headings.sizes, themeOverride.headings.sizes) + }; + } + + if (themeOverride.breakpoints) { + result.breakpoints = R.pipe( + R.toPairs, + R.sortBy(([key, value]) => getBreakpointValue(value as string)), + R.fromPairs + )(R.mergeRight(currentTheme.breakpoints, themeOverride.breakpoints)) as SistentSizes; + } + + if (themeOverride.fontFamily && !themeOverride.headings?.fontFamily) { + result.headings.fontFamily = themeOverride.fontFamily; + } + + if (!(result.primaryColor in result.colors)) { + throw new Error( + 'SistentProvider: Invalid theme.primaryColor, it accepts only key of theme.colors, learn more – https://mantine.dev/theming/colors/#primary-color' + ); + } + + return result as SistentThemeBase; + + /* + const result: SistentThemeBase = Object.keys(currentTheme).reduce((acc, key) => { + if (key === 'headings' && themeOverride.headings) { + const sizes = themeOverride.headings.sizes + ? Object.keys(currentTheme.headings.sizes).reduce((headingsAcc, h) => { + headingsAcc[h] = { + ...currentTheme.headings.sizes[h], + ...themeOverride.headings.sizes[h], + }; + return headingsAcc; + }, {} as SistentThemeBase['headings']['sizes']) + : currentTheme.headings.sizes; + return { + ...acc, + headings: { + ...currentTheme.headings, + ...themeOverride.headings, + sizes, + }, + }; + } + + if (key === 'breakpoints' && themeOverride.breakpoints) { + const mergedBreakpoints = { ...currentTheme.breakpoints, ...themeOverride.breakpoints }; + + return { + ...acc, + breakpoints: Object.fromEntries( + Object.entries(mergedBreakpoints).sort( + (a, b) => getBreakpointValue(a[1]) - getBreakpointValue(b[1]) + ) + ), + }; + } + + acc[key] = + typeof themeOverride[key] === 'object' + ? { ...currentTheme[key], ...themeOverride[key] } + : typeof themeOverride[key] === 'number' || + typeof themeOverride[key] === 'boolean' || + typeof themeOverride[key] === 'function' + ? themeOverride[key] + : themeOverride[key] || currentTheme[key]; + return acc; + }, {} as SistentThemeBase); + + if (themeOverride?.fontFamily && !themeOverride?.headings?.fontFamily) { + result.headings.fontFamily = themeOverride.fontFamily as string; + } + + if (!(result.primaryColor in result.colors)) { + throw new Error( + 'SistentProvider: Invalid theme.primaryColor, it accepts only key of theme.colors, learn more – https://mantine.dev/theming/colors/#primary-color' + ); + } + + return result; + */ +} + +export function mergeThemeWithFn( + currentTheme: SistentThemeBase, + themeOverride?: SistentThemeOverride +): SistentTheme { + return attachFns(mergeTheme(currentTheme, themeOverride)); +} diff --git a/packages/components/src/theme/utils/primaryColor.ts b/packages/components/src/theme/utils/primaryColor.ts new file mode 100644 index 00000000..0623beab --- /dev/null +++ b/packages/components/src/theme/utils/primaryColor.ts @@ -0,0 +1,9 @@ +import { SistentThemeBase } from '../types/SistentTheme'; +import { primaryShade } from './primaryShade'; + +export function primaryColor(theme: SistentThemeBase) { + return (colorScheme?: 'light' | 'dark') => { + const shade = primaryShade(theme)(colorScheme); + return theme.colors[theme.primaryColor][shade]; + }; +} diff --git a/packages/components/src/theme/utils/primaryShade.ts b/packages/components/src/theme/utils/primaryShade.ts new file mode 100644 index 00000000..678d6730 --- /dev/null +++ b/packages/components/src/theme/utils/primaryShade.ts @@ -0,0 +1,10 @@ +import { SistentThemeBase } from '../types/SistentTheme'; + +export function primaryShade(theme: SistentThemeBase) { + return (colorScheme?: 'light' | 'dark') => { + if (typeof theme.primaryShade === 'number') { + return theme.primaryShade; + } + return theme.primaryShade[colorScheme || theme.colorScheme]; + }; +} diff --git a/yarn.lock b/yarn.lock index 040cbe9c..9e11133c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2198,6 +2198,7 @@ __metadata: dependencies: "@layer5/sistent-svg": 0.6.6 "@mui/material": ^5.14.10 + "@types/ramda": ^0.29.3 "@types/react": ^18.2.15 "@types/react-dom": ^18.2.7 "@typescript-eslint/eslint-plugin": ^6.0.0 @@ -2205,6 +2206,8 @@ __metadata: "@vitejs/plugin-react-swc": ^3.3.2 eslint: ^8.45.0 eslint-plugin-react: ^7.33.2 + io-ts: ^2.2.20 + ramda: ^0.29.0 react-error-boundary: ^4.0.11 typescript: ^5.0.2 vite: ^4.4.5 @@ -2350,25 +2353,25 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.28.1": - version: 7.28.1 - resolution: "@microsoft/api-extractor-model@npm:7.28.1" +"@microsoft/api-extractor-model@npm:7.28.2": + version: 7.28.2 + resolution: "@microsoft/api-extractor-model@npm:7.28.2" dependencies: "@microsoft/tsdoc": 0.14.2 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.60.1 - checksum: 65e675c20213e48654f0b08290da1ae8feccfaa0fe89e8a6283346828065d4a6f0326453b18b9d5b39ba6b725308d18c74758939b8dbd07399cf766a447ec84d + "@rushstack/node-core-library": 3.61.0 + checksum: 0eb1cb511414813eeb890778af7dc57e5adcd078ba040a91a736a63964b306a1d31f8b97a76286884432a7884808960a16160d49720c46e23472124f035b9023 languageName: node linkType: hard "@microsoft/api-extractor@npm:^7.36.4": - version: 7.37.1 - resolution: "@microsoft/api-extractor@npm:7.37.1" + version: 7.37.2 + resolution: "@microsoft/api-extractor@npm:7.37.2" dependencies: - "@microsoft/api-extractor-model": 7.28.1 + "@microsoft/api-extractor-model": 7.28.2 "@microsoft/tsdoc": 0.14.2 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.60.1 + "@rushstack/node-core-library": 3.61.0 "@rushstack/rig-package": 0.5.1 "@rushstack/ts-command-line": 4.16.1 colors: ~1.2.1 @@ -2379,7 +2382,7 @@ __metadata: typescript: ~5.0.4 bin: api-extractor: bin/api-extractor - checksum: fb1b0760af6bd25d7cce756b0ada308e80437beff7d2037cb49f43b7d011694fb77f69ec5985eed05e103f312f8d819e0a53393470185f0e09b61819f8f0e3db + checksum: 0981f80246653ae6e245a302683deec7d61718ff75d686f871c4ecd31df5b97de7e37a089576c55f6e944ed410216de1c00d2dc98b24ccd8a872471a4e1d0b43 languageName: node linkType: hard @@ -3618,9 +3621,9 @@ __metadata: languageName: node linkType: hard -"@rushstack/node-core-library@npm:3.60.1": - version: 3.60.1 - resolution: "@rushstack/node-core-library@npm:3.60.1" +"@rushstack/node-core-library@npm:3.61.0": + version: 3.61.0 + resolution: "@rushstack/node-core-library@npm:3.61.0" dependencies: colors: ~1.2.1 fs-extra: ~7.0.1 @@ -3634,7 +3637,7 @@ __metadata: peerDependenciesMeta: "@types/node": optional: true - checksum: 1e18d74cea169c240fb8e68ec06c42060f16d927178ffac705cce796e7d5c27efb4d4b20c162f62947a7fc92b49100acb1fd6caa223918c0c92b3e349a00f7d5 + checksum: a6f790cd521ca5b0b10ee918d8352c7dd7a0b2457aaf6a4f37d8f7bedee680d7d0126476f5ee5147952e08b11dea37926acb45f7432cd16c828690d3b9bfd34b languageName: node linkType: hard @@ -5296,6 +5299,15 @@ __metadata: languageName: node linkType: hard +"@types/ramda@npm:^0.29.3": + version: 0.29.5 + resolution: "@types/ramda@npm:0.29.5" + dependencies: + types-ramda: ^0.29.4 + checksum: 01aa02655f712b5a1411a2399f94a77d8651da0cea95f753a3482ba00af558f54928b692cbb5629cd231aca461b5b9eeddeaeb46f25f4f224d1bba5e4334a7e7 + languageName: node + linkType: hard + "@types/range-parser@npm:*": version: 1.2.5 resolution: "@types/range-parser@npm:1.2.5" @@ -6516,16 +6528,16 @@ __metadata: linkType: hard "browserslist@npm:^4.21.10, browserslist@npm:^4.21.9": - version: 4.22.0 - resolution: "browserslist@npm:4.22.0" + version: 4.22.1 + resolution: "browserslist@npm:4.22.1" dependencies: - caniuse-lite: ^1.0.30001539 - electron-to-chromium: ^1.4.530 + caniuse-lite: ^1.0.30001541 + electron-to-chromium: ^1.4.535 node-releases: ^2.0.13 update-browserslist-db: ^1.0.13 bin: browserslist: cli.js - checksum: 14fc119bbfb85b65e2ee4a82205fabf9327520d010c4c586f1176ceaf9136cfdb391397045a4eafaa9defe52b6dbdf875916714695826c69091a936d5838f9ec + checksum: 7e6b10c53f7dd5d83fd2b95b00518889096382539fed6403829d447e05df4744088de46a571071afb447046abc3c66ad06fbc790e70234ec2517452e32ffd862 languageName: node linkType: hard @@ -6683,7 +6695,7 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001539": +"caniuse-lite@npm:^1.0.30001541": version: 1.0.30001541 resolution: "caniuse-lite@npm:1.0.30001541" checksum: 972f6c223cf4ea2c6821b817b419249285006bbf67ebe415fe58097cf07551e3bae898586736d92f7c40b9f0ac28638dbf760631c23742b780affd0254f44d17 @@ -7745,10 +7757,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.530": - version: 1.4.535 - resolution: "electron-to-chromium@npm:1.4.535" - checksum: 31659d1b89efb5c2066ae250d4c8cd6afbcd2b5354bb5453559d9021e1f6c427c5f821904b764473d8eaef75b38bd8accc5eef36c6f698db99496a02cb77fc16 +"electron-to-chromium@npm:^1.4.535": + version: 1.4.536 + resolution: "electron-to-chromium@npm:1.4.536" + checksum: 3c1f04f9b7526964a8c0d256eb223231a678b6a76411a547a3cf59aac32b773212e4e6497fa5534c77ee95d7fd634ffa9f18c1eeb72d229d6423eea4b81663e0 languageName: node linkType: hard @@ -8738,9 +8750,9 @@ __metadata: linkType: hard "flow-parser@npm:0.*": - version: 0.217.0 - resolution: "flow-parser@npm:0.217.0" - checksum: 086d7ef5e7ae448bbb666e3a30e73d7424627fcca6c1000fb497b84bc7e13608fac2c82399b5a056317b67e2d3741e53fbb3b0510a368f743fd21333c1c7914d + version: 0.217.1 + resolution: "flow-parser@npm:0.217.1" + checksum: 968756576ae9862395807c3736cf6faad5db829a092b30d46d84f2605a8e43d31436693dea4caf6cffa2e5227e38ccdbfae2a1cea0d3c1f350106d2ae629d33e languageName: node linkType: hard @@ -9746,6 +9758,15 @@ __metadata: languageName: node linkType: hard +"io-ts@npm:^2.2.20": + version: 2.2.20 + resolution: "io-ts@npm:2.2.20" + peerDependencies: + fp-ts: ^2.5.0 + checksum: 72517bf72ab1ad61b81960cb37f46e7a9f6dc84235b7d9b62f346ca84120dd89134b652fc3a0b9751129331084fd3e059349561bb96587d91ba7b40985fe7aac + languageName: node + linkType: hard + "ip@npm:^2.0.0": version: 2.0.0 resolution: "ip@npm:2.0.0" @@ -12809,13 +12830,13 @@ __metadata: linkType: hard "postcss@npm:^8.2.14, postcss@npm:^8.4.21, postcss@npm:^8.4.27": - version: 8.4.30 - resolution: "postcss@npm:8.4.30" + version: 8.4.31 + resolution: "postcss@npm:8.4.31" dependencies: nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 6c810c10c9bd3e03ca016e0b6b6756261e640aba1a9a7b1200b55502bc34b9165e38f590aef3493afc2f30ab55cdfcd43fd0f8408d69a77318ddbcf2a8ad164b + checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea languageName: node linkType: hard @@ -13077,7 +13098,7 @@ __metadata: languageName: node linkType: hard -"ramda@npm:0.29.0": +"ramda@npm:0.29.0, ramda@npm:^0.29.0": version: 0.29.0 resolution: "ramda@npm:0.29.0" checksum: 9ab26c06eb7545cbb7eebcf75526d6ee2fcaae19e338f165b2bf32772121e7b28192d6664d1ba222ff76188ba26ab307342d66e805dbb02c860560adc4d5dd57 @@ -14971,6 +14992,13 @@ __metadata: languageName: node linkType: hard +"ts-toolbelt@npm:^9.6.0": + version: 9.6.0 + resolution: "ts-toolbelt@npm:9.6.0" + checksum: 9f35fd95d895a5d32ea9fd2e532a695b0bae6cbff6832b77292efa188a0ed1ed6e54f63f74a8920390f3d909a7a3adb20a144686372a8e78b420246a9bd3d58a + languageName: node + linkType: hard + "tsconfck@npm:^2.1.0": version: 2.1.2 resolution: "tsconfck@npm:2.1.2" @@ -15175,6 +15203,15 @@ __metadata: languageName: node linkType: hard +"types-ramda@npm:^0.29.4": + version: 0.29.4 + resolution: "types-ramda@npm:0.29.4" + dependencies: + ts-toolbelt: ^9.6.0 + checksum: 08a872e71555fe6a3f1fd9381989a573d493f2156d9689f3bb72278db73c848122d67a9efff1867ce97b3dfbb2fdadaa3864daaee014ab19cf9bbfe2c171ed52 + languageName: node + linkType: hard + "typescript@npm:>=3 < 6, typescript@npm:^5.0.2, typescript@npm:^5.2.2": version: 5.2.2 resolution: "typescript@npm:5.2.2"