mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	Merge branch 'main' into task/Add_strategy_information_to_playground_results
This commit is contained in:
		
						commit
						f62d8d4c35
					
				@ -100,7 +100,7 @@
 | 
				
			|||||||
    "vite-plugin-env-compatible": "^1.1.1",
 | 
					    "vite-plugin-env-compatible": "^1.1.1",
 | 
				
			||||||
    "vite-plugin-svgr": "2.2.1",
 | 
					    "vite-plugin-svgr": "2.2.1",
 | 
				
			||||||
    "vite-tsconfig-paths": "3.5.0",
 | 
					    "vite-tsconfig-paths": "3.5.0",
 | 
				
			||||||
    "vitest": "0.16.0",
 | 
					    "vitest": "0.20.3",
 | 
				
			||||||
    "whatwg-fetch": "^3.6.2",
 | 
					    "whatwg-fetch": "^3.6.2",
 | 
				
			||||||
    "@codemirror/lang-json": "6.0.0",
 | 
					    "@codemirror/lang-json": "6.0.0",
 | 
				
			||||||
    "@codemirror/state": "6.1.0",
 | 
					    "@codemirror/state": "6.1.0",
 | 
				
			||||||
 | 
				
			|||||||
@ -2,17 +2,11 @@ import { makeStyles } from 'tss-react/mui';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export const useStyles = makeStyles()(theme => ({
 | 
					export const useStyles = makeStyles()(theme => ({
 | 
				
			||||||
    valueContainer: {
 | 
					    valueContainer: {
 | 
				
			||||||
        display: 'flex',
 | 
					        padding: theme.spacing(2, 3),
 | 
				
			||||||
        alignItems: 'center',
 | 
					        border: `1px solid ${theme.palette.dividerAlternative}`,
 | 
				
			||||||
        gap: '1ch',
 | 
					        borderRadius: theme.shape.borderRadius,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    valueSeparator: {
 | 
					    valueSeparator: {
 | 
				
			||||||
        color: theme.palette.grey[700],
 | 
					        color: theme.palette.grey[700],
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    summary: {
 | 
					 | 
				
			||||||
        width: '100%',
 | 
					 | 
				
			||||||
        padding: theme.spacing(2, 3),
 | 
					 | 
				
			||||||
        borderRadius: theme.shape.borderRadius,
 | 
					 | 
				
			||||||
        border: `1px solid ${theme.palette.divider}`,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
}));
 | 
					}));
 | 
				
			||||||
 | 
				
			|||||||
@ -1,56 +1,62 @@
 | 
				
			|||||||
import { Fragment } from 'react';
 | 
					import { Fragment, useMemo, VFC } from 'react';
 | 
				
			||||||
import { Box, Chip } from '@mui/material';
 | 
					import { Box, Chip, Tooltip } from '@mui/material';
 | 
				
			||||||
import { IFeatureStrategy } from 'interfaces/strategy';
 | 
					import { IFeatureStrategy } from 'interfaces/strategy';
 | 
				
			||||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
 | 
					import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
 | 
				
			||||||
import PercentageCircle from 'component/common/PercentageCircle/PercentageCircle';
 | 
					import PercentageCircle from 'component/common/PercentageCircle/PercentageCircle';
 | 
				
			||||||
import { StrategySeparator } from 'component/common/StrategySeparator/StrategySeparator';
 | 
					import { StrategySeparator } from 'component/common/StrategySeparator/StrategySeparator';
 | 
				
			||||||
import { ConstraintItem } from './ConstraintItem/ConstraintItem';
 | 
					import { ConstraintItem } from './ConstraintItem/ConstraintItem';
 | 
				
			||||||
import { useStrategies } from 'hooks/api/getters/useStrategies/useStrategies';
 | 
					import { useStrategies } from 'hooks/api/getters/useStrategies/useStrategies';
 | 
				
			||||||
import StringTruncator from 'component/common/StringTruncator/StringTruncator';
 | 
					import { useSegments } from 'hooks/api/getters/useSegments/useSegments';
 | 
				
			||||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
 | 
					import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
 | 
				
			||||||
import { FeatureOverviewSegment } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewSegment/FeatureOverviewSegment';
 | 
					import { FeatureOverviewSegment } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewSegment/FeatureOverviewSegment';
 | 
				
			||||||
import { ConstraintAccordionList } from 'component/common/ConstraintAccordion/ConstraintAccordionList/ConstraintAccordionList';
 | 
					import { ConstraintAccordionList } from 'component/common/ConstraintAccordion/ConstraintAccordionList/ConstraintAccordionList';
 | 
				
			||||||
import { useStyles } from './StrategyExecution.styles';
 | 
					import { useStyles } from './StrategyExecution.styles';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
    parseParameterString,
 | 
					 | 
				
			||||||
    parseParameterNumber,
 | 
					    parseParameterNumber,
 | 
				
			||||||
 | 
					    parseParameterString,
 | 
				
			||||||
    parseParameterStrings,
 | 
					    parseParameterStrings,
 | 
				
			||||||
} from 'utils/parseParameter';
 | 
					} from 'utils/parseParameter';
 | 
				
			||||||
 | 
					import StringTruncator from 'component/common/StringTruncator/StringTruncator';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface IStrategyExecutionProps {
 | 
					interface IStrategyExecutionProps {
 | 
				
			||||||
    strategy: IFeatureStrategy;
 | 
					    strategy: IFeatureStrategy;
 | 
				
			||||||
    percentageFill?: string;
 | 
					    percentageFill?: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const StrategyExecution = ({ strategy }: IStrategyExecutionProps) => {
 | 
					const NoItems: VFC = () => (
 | 
				
			||||||
 | 
					    <Box sx={{ px: 3, color: 'text.disabled' }}>
 | 
				
			||||||
 | 
					        This strategy does not have constraints or parameters.
 | 
				
			||||||
 | 
					    </Box>
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const StrategyExecution: VFC<IStrategyExecutionProps> = ({
 | 
				
			||||||
 | 
					    strategy,
 | 
				
			||||||
 | 
					}) => {
 | 
				
			||||||
    const { parameters, constraints = [] } = strategy;
 | 
					    const { parameters, constraints = [] } = strategy;
 | 
				
			||||||
    const { classes: styles } = useStyles();
 | 
					    const { classes: styles } = useStyles();
 | 
				
			||||||
    const { strategies } = useStrategies();
 | 
					    const { strategies } = useStrategies();
 | 
				
			||||||
    const { uiConfig } = useUiConfig();
 | 
					    const { uiConfig } = useUiConfig();
 | 
				
			||||||
 | 
					    const { segments } = useSegments(strategy.id);
 | 
				
			||||||
    if (!parameters) {
 | 
					 | 
				
			||||||
        return null;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const definition = strategies.find(strategyDefinition => {
 | 
					    const definition = strategies.find(strategyDefinition => {
 | 
				
			||||||
        return strategyDefinition.name === strategy.name;
 | 
					        return strategyDefinition.name === strategy.name;
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const renderParameters = () => {
 | 
					    const parametersList = useMemo(() => {
 | 
				
			||||||
        if (definition?.editable) return null;
 | 
					        if (!parameters || definition?.editable) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return Object.keys(parameters).map(key => {
 | 
					        return Object.keys(parameters).map(key => {
 | 
				
			||||||
            switch (key) {
 | 
					            switch (key) {
 | 
				
			||||||
                case 'rollout':
 | 
					                case 'rollout':
 | 
				
			||||||
                case 'Rollout':
 | 
					                case 'Rollout':
 | 
				
			||||||
                    const percentage = parseParameterNumber(parameters[key]);
 | 
					                    const percentage = parseParameterNumber(parameters[key]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    return (
 | 
					                    return (
 | 
				
			||||||
                        <Box
 | 
					                        <Box
 | 
				
			||||||
                            className={styles.summary}
 | 
					                            className={styles.valueContainer}
 | 
				
			||||||
                            key={key}
 | 
					 | 
				
			||||||
                            sx={{ display: 'flex', alignItems: 'center' }}
 | 
					                            sx={{ display: 'flex', alignItems: 'center' }}
 | 
				
			||||||
                        >
 | 
					                        >
 | 
				
			||||||
                            <Box sx={{ mr: '1rem' }}>
 | 
					                            <Box sx={{ mr: 2 }}>
 | 
				
			||||||
                                <PercentageCircle
 | 
					                                <PercentageCircle
 | 
				
			||||||
                                    percentage={percentage}
 | 
					                                    percentage={percentage}
 | 
				
			||||||
                                    size="2rem"
 | 
					                                    size="2rem"
 | 
				
			||||||
@ -93,191 +99,195 @@ export const StrategyExecution = ({ strategy }: IStrategyExecutionProps) => {
 | 
				
			|||||||
                    return null;
 | 
					                    return null;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    };
 | 
					    }, [parameters, definition, constraints, styles]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const customStrategyList = useMemo(() => {
 | 
				
			||||||
 | 
					        if (!parameters || !definition?.editable) return null;
 | 
				
			||||||
 | 
					        const isSetTo = (
 | 
				
			||||||
 | 
					            <span className={styles.valueSeparator}>{' is set to '}</span>
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return definition?.parameters.map(param => {
 | 
				
			||||||
 | 
					            const { type, name } = { ...param };
 | 
				
			||||||
 | 
					            if (!type || !name || parameters[name] === undefined) {
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            const nameItem = (
 | 
				
			||||||
 | 
					                <StringTruncator maxLength={15} maxWidth="150" text={name} />
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const renderCustomStrategy = () => {
 | 
					 | 
				
			||||||
        if (!definition?.editable) return null;
 | 
					 | 
				
			||||||
        return definition?.parameters.map((param: any, index: number) => {
 | 
					 | 
				
			||||||
            const notLastItem = index !== definition?.parameters?.length - 1;
 | 
					 | 
				
			||||||
            switch (param?.type) {
 | 
					            switch (param?.type) {
 | 
				
			||||||
                case 'list':
 | 
					                case 'list':
 | 
				
			||||||
                    const values = parseParameterStrings(
 | 
					                    const values = parseParameterStrings(parameters[name]);
 | 
				
			||||||
                        strategy?.parameters[param.name]
 | 
					
 | 
				
			||||||
                    );
 | 
					                    return values.length > 0 ? (
 | 
				
			||||||
                    return (
 | 
					                        <div className={styles.valueContainer}>
 | 
				
			||||||
                        <Fragment key={param?.name}>
 | 
					                            {nameItem}{' '}
 | 
				
			||||||
                            <ConstraintItem value={values} text={param.name} />
 | 
					                            <span className={styles.valueSeparator}>
 | 
				
			||||||
                            <ConditionallyRender
 | 
					                                has {values.length}{' '}
 | 
				
			||||||
                                condition={notLastItem}
 | 
					                                {values.length > 1 ? `items` : 'item'}:{' '}
 | 
				
			||||||
                                show={<StrategySeparator text="AND" />}
 | 
					                                {values.map((item: string) => (
 | 
				
			||||||
                            />
 | 
					                                    <Chip
 | 
				
			||||||
                        </Fragment>
 | 
					                                        key={item}
 | 
				
			||||||
                    );
 | 
					                                        label={
 | 
				
			||||||
                case 'percentage':
 | 
					                                            <StringTruncator
 | 
				
			||||||
                    return (
 | 
					                                                maxWidth="300"
 | 
				
			||||||
                        <Fragment key={param?.name}>
 | 
					                                                text={item}
 | 
				
			||||||
                            <div>
 | 
					                                                maxLength={50}
 | 
				
			||||||
                                <Chip
 | 
					                                            />
 | 
				
			||||||
                                    size="small"
 | 
					                                        }
 | 
				
			||||||
                                    variant="outlined"
 | 
					                                        sx={{ mr: 0.5 }}
 | 
				
			||||||
                                    color="success"
 | 
					 | 
				
			||||||
                                    label={`${
 | 
					 | 
				
			||||||
                                        strategy?.parameters[param.name]
 | 
					 | 
				
			||||||
                                    }%`}
 | 
					 | 
				
			||||||
                                />{' '}
 | 
					 | 
				
			||||||
                                of your base{' '}
 | 
					 | 
				
			||||||
                                {constraints?.length > 0
 | 
					 | 
				
			||||||
                                    ? 'who match constraints'
 | 
					 | 
				
			||||||
                                    : ''}{' '}
 | 
					 | 
				
			||||||
                                is included.
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
                            <PercentageCircle
 | 
					 | 
				
			||||||
                                percentage={parseParameterNumber(
 | 
					 | 
				
			||||||
                                    strategy.parameters[param.name]
 | 
					 | 
				
			||||||
                                )}
 | 
					 | 
				
			||||||
                            />
 | 
					 | 
				
			||||||
                            <ConditionallyRender
 | 
					 | 
				
			||||||
                                condition={notLastItem}
 | 
					 | 
				
			||||||
                                show={<StrategySeparator text="AND" />}
 | 
					 | 
				
			||||||
                            />
 | 
					 | 
				
			||||||
                        </Fragment>
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
                case 'boolean':
 | 
					 | 
				
			||||||
                    return (
 | 
					 | 
				
			||||||
                        <Fragment key={param.name}>
 | 
					 | 
				
			||||||
                            <p key={param.name}>
 | 
					 | 
				
			||||||
                                <StringTruncator
 | 
					 | 
				
			||||||
                                    maxLength={15}
 | 
					 | 
				
			||||||
                                    maxWidth="150"
 | 
					 | 
				
			||||||
                                    text={param.name}
 | 
					 | 
				
			||||||
                                />{' '}
 | 
					 | 
				
			||||||
                                {strategy.parameters[param.name]}
 | 
					 | 
				
			||||||
                            </p>
 | 
					 | 
				
			||||||
                            <ConditionallyRender
 | 
					 | 
				
			||||||
                                condition={
 | 
					 | 
				
			||||||
                                    typeof strategy.parameters[param.name] !==
 | 
					 | 
				
			||||||
                                    'undefined'
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                                show={
 | 
					 | 
				
			||||||
                                    <ConditionallyRender
 | 
					 | 
				
			||||||
                                        condition={notLastItem}
 | 
					 | 
				
			||||||
                                        show={<StrategySeparator text="AND" />}
 | 
					 | 
				
			||||||
                                    />
 | 
					                                    />
 | 
				
			||||||
                                }
 | 
					                                ))}
 | 
				
			||||||
 | 
					                            </span>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    ) : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case 'percentage':
 | 
				
			||||||
 | 
					                    const percentage = parseParameterNumber(parameters[name]);
 | 
				
			||||||
 | 
					                    return parameters[name] !== '' ? (
 | 
				
			||||||
 | 
					                        <Box
 | 
				
			||||||
 | 
					                            className={styles.valueContainer}
 | 
				
			||||||
 | 
					                            sx={{ display: 'flex', alignItems: 'center' }}
 | 
				
			||||||
 | 
					                        >
 | 
				
			||||||
 | 
					                            <Box sx={{ mr: 2 }}>
 | 
				
			||||||
 | 
					                                <PercentageCircle
 | 
				
			||||||
 | 
					                                    percentage={percentage}
 | 
				
			||||||
 | 
					                                    size="2rem"
 | 
				
			||||||
 | 
					                                />
 | 
				
			||||||
 | 
					                            </Box>
 | 
				
			||||||
 | 
					                            <div>
 | 
				
			||||||
 | 
					                                {nameItem}
 | 
				
			||||||
 | 
					                                {isSetTo}
 | 
				
			||||||
 | 
					                                <Chip
 | 
				
			||||||
 | 
					                                    color="success"
 | 
				
			||||||
 | 
					                                    variant="outlined"
 | 
				
			||||||
 | 
					                                    size="small"
 | 
				
			||||||
 | 
					                                    label={`${percentage}%`}
 | 
				
			||||||
 | 
					                                />
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        </Box>
 | 
				
			||||||
 | 
					                    ) : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case 'boolean':
 | 
				
			||||||
 | 
					                    return parameters[name] === 'true' ||
 | 
				
			||||||
 | 
					                        parameters[name] === 'false' ? (
 | 
				
			||||||
 | 
					                        <div className={styles.valueContainer}>
 | 
				
			||||||
 | 
					                            <StringTruncator
 | 
				
			||||||
 | 
					                                maxLength={15}
 | 
				
			||||||
 | 
					                                maxWidth="150"
 | 
				
			||||||
 | 
					                                text={name}
 | 
				
			||||||
                            />
 | 
					                            />
 | 
				
			||||||
                        </Fragment>
 | 
					                            {isSetTo}
 | 
				
			||||||
                    );
 | 
					                            <Chip
 | 
				
			||||||
 | 
					                                color={
 | 
				
			||||||
 | 
					                                    parameters[name] === 'true'
 | 
				
			||||||
 | 
					                                        ? 'success'
 | 
				
			||||||
 | 
					                                        : 'error'
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                                variant="outlined"
 | 
				
			||||||
 | 
					                                size="small"
 | 
				
			||||||
 | 
					                                label={parameters[name]}
 | 
				
			||||||
 | 
					                            />
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    ) : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                case 'string':
 | 
					                case 'string':
 | 
				
			||||||
                    const value = parseParameterString(
 | 
					                    const value = parseParameterString(parameters[name]);
 | 
				
			||||||
                        strategy.parameters[param.name]
 | 
					                    return typeof parameters[name] !== 'undefined' ? (
 | 
				
			||||||
                    );
 | 
					                        <div className={styles.valueContainer}>
 | 
				
			||||||
                    return (
 | 
					                            {nameItem}
 | 
				
			||||||
                        <ConditionallyRender
 | 
					                            <ConditionallyRender
 | 
				
			||||||
                            condition={
 | 
					                                condition={value === ''}
 | 
				
			||||||
                                typeof strategy.parameters[param.name] !==
 | 
					                                show={
 | 
				
			||||||
                                'undefined'
 | 
					                                    <span className={styles.valueSeparator}>
 | 
				
			||||||
                            }
 | 
					                                        {' is an empty string'}
 | 
				
			||||||
                            key={param.name}
 | 
					                                    </span>
 | 
				
			||||||
                            show={
 | 
					                                }
 | 
				
			||||||
                                <>
 | 
					                                elseShow={
 | 
				
			||||||
                                    <p className={styles.valueContainer}>
 | 
					                                    <>
 | 
				
			||||||
                                        <StringTruncator
 | 
					                                        {isSetTo}
 | 
				
			||||||
                                            maxWidth="150"
 | 
					 | 
				
			||||||
                                            maxLength={15}
 | 
					 | 
				
			||||||
                                            text={param.name}
 | 
					 | 
				
			||||||
                                        />
 | 
					 | 
				
			||||||
                                        <span className={styles.valueSeparator}>
 | 
					 | 
				
			||||||
                                            is set to
 | 
					 | 
				
			||||||
                                        </span>
 | 
					 | 
				
			||||||
                                        <StringTruncator
 | 
					                                        <StringTruncator
 | 
				
			||||||
                                            maxWidth="300"
 | 
					                                            maxWidth="300"
 | 
				
			||||||
                                            text={value}
 | 
					                                            text={value}
 | 
				
			||||||
                                            maxLength={50}
 | 
					                                            maxLength={50}
 | 
				
			||||||
                                        />
 | 
					                                        />
 | 
				
			||||||
                                    </p>
 | 
					                                    </>
 | 
				
			||||||
                                    <ConditionallyRender
 | 
					                                }
 | 
				
			||||||
                                        condition={notLastItem}
 | 
					                            />
 | 
				
			||||||
                                        show={<StrategySeparator text="AND" />}
 | 
					                        </div>
 | 
				
			||||||
                                    />
 | 
					                    ) : null;
 | 
				
			||||||
                                </>
 | 
					
 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        />
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
                case 'number':
 | 
					                case 'number':
 | 
				
			||||||
                    const number = parseParameterNumber(
 | 
					                    const number = parseParameterNumber(parameters[name]);
 | 
				
			||||||
                        strategy.parameters[param.name]
 | 
					                    return parameters[name] !== '' && number !== undefined ? (
 | 
				
			||||||
                    );
 | 
					                        <div className={styles.valueContainer}>
 | 
				
			||||||
                    return (
 | 
					                            {nameItem}
 | 
				
			||||||
                        <ConditionallyRender
 | 
					                            {isSetTo}
 | 
				
			||||||
                            condition={number !== undefined}
 | 
					                            <StringTruncator
 | 
				
			||||||
                            key={param.name}
 | 
					                                maxWidth="300"
 | 
				
			||||||
                            show={
 | 
					                                text={String(number)}
 | 
				
			||||||
                                <>
 | 
					                                maxLength={50}
 | 
				
			||||||
                                    <p className={styles.valueContainer}>
 | 
					                            />
 | 
				
			||||||
                                        <StringTruncator
 | 
					                        </div>
 | 
				
			||||||
                                            maxLength={15}
 | 
					                    ) : null;
 | 
				
			||||||
                                            maxWidth="150"
 | 
					 | 
				
			||||||
                                            text={param.name}
 | 
					 | 
				
			||||||
                                        />
 | 
					 | 
				
			||||||
                                        <span className={styles.valueSeparator}>
 | 
					 | 
				
			||||||
                                            is set to
 | 
					 | 
				
			||||||
                                        </span>
 | 
					 | 
				
			||||||
                                        <StringTruncator
 | 
					 | 
				
			||||||
                                            maxWidth="300"
 | 
					 | 
				
			||||||
                                            text={String(number)}
 | 
					 | 
				
			||||||
                                            maxLength={50}
 | 
					 | 
				
			||||||
                                        />
 | 
					 | 
				
			||||||
                                    </p>
 | 
					 | 
				
			||||||
                                    <ConditionallyRender
 | 
					 | 
				
			||||||
                                        condition={notLastItem}
 | 
					 | 
				
			||||||
                                        show={<StrategySeparator text="AND" />}
 | 
					 | 
				
			||||||
                                    />
 | 
					 | 
				
			||||||
                                </>
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        />
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
                case 'default':
 | 
					                case 'default':
 | 
				
			||||||
                    return null;
 | 
					                    return null;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    };
 | 
					    }, [parameters, definition, styles]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!parameters) {
 | 
				
			||||||
 | 
					        return <NoItems />;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const listItems = [
 | 
				
			||||||
 | 
					        Boolean(uiConfig.flags.SE) && segments && segments.length > 0 && (
 | 
				
			||||||
 | 
					            <FeatureOverviewSegment strategyId={strategy.id} />
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					        constraints.length > 0 && (
 | 
				
			||||||
 | 
					            <ConstraintAccordionList
 | 
				
			||||||
 | 
					                constraints={constraints}
 | 
				
			||||||
 | 
					                showLabel={false}
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					        strategy.name === 'default' && (
 | 
				
			||||||
 | 
					            <>
 | 
				
			||||||
 | 
					                <Box sx={{ width: '100%' }} className={styles.valueContainer}>
 | 
				
			||||||
 | 
					                    The standard strategy is{' '}
 | 
				
			||||||
 | 
					                    <Chip
 | 
				
			||||||
 | 
					                        variant="outlined"
 | 
				
			||||||
 | 
					                        size="small"
 | 
				
			||||||
 | 
					                        color="success"
 | 
				
			||||||
 | 
					                        label="ON"
 | 
				
			||||||
 | 
					                    />{' '}
 | 
				
			||||||
 | 
					                    for all users.
 | 
				
			||||||
 | 
					                </Box>
 | 
				
			||||||
 | 
					            </>
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					        ...(parametersList ?? []),
 | 
				
			||||||
 | 
					        ...(customStrategyList ?? []),
 | 
				
			||||||
 | 
					    ].filter(Boolean);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
        <>
 | 
					        <ConditionallyRender
 | 
				
			||||||
            <ConditionallyRender
 | 
					            condition={listItems.length > 0}
 | 
				
			||||||
                condition={Boolean(uiConfig.flags.SE)}
 | 
					            show={
 | 
				
			||||||
                show={<FeatureOverviewSegment strategyId={strategy.id} />}
 | 
					                <>
 | 
				
			||||||
            />
 | 
					                    {listItems.map((item, index) => (
 | 
				
			||||||
            <ConditionallyRender
 | 
					                        <Fragment key={index}>
 | 
				
			||||||
                condition={constraints.length > 0}
 | 
					                            <ConditionallyRender
 | 
				
			||||||
                show={
 | 
					                                condition={index > 0}
 | 
				
			||||||
                    <>
 | 
					                                show={<StrategySeparator text="AND" />}
 | 
				
			||||||
                        <ConstraintAccordionList
 | 
					                            />
 | 
				
			||||||
                            constraints={constraints}
 | 
					                            {item}
 | 
				
			||||||
                            showLabel={false}
 | 
					                        </Fragment>
 | 
				
			||||||
                        />
 | 
					                    ))}
 | 
				
			||||||
                        <StrategySeparator text="AND" />
 | 
					                </>
 | 
				
			||||||
                    </>
 | 
					            }
 | 
				
			||||||
                }
 | 
					            elseShow={<NoItems />}
 | 
				
			||||||
            />
 | 
					        />
 | 
				
			||||||
            <ConditionallyRender
 | 
					 | 
				
			||||||
                condition={strategy.name === 'default'}
 | 
					 | 
				
			||||||
                show={
 | 
					 | 
				
			||||||
                    <Box sx={{ width: '100%' }} className={styles.summary}>
 | 
					 | 
				
			||||||
                        The standard strategy is{' '}
 | 
					 | 
				
			||||||
                        <Chip
 | 
					 | 
				
			||||||
                            variant="outlined"
 | 
					 | 
				
			||||||
                            size="small"
 | 
					 | 
				
			||||||
                            color="success"
 | 
					 | 
				
			||||||
                            label="ON"
 | 
					 | 
				
			||||||
                        />{' '}
 | 
					 | 
				
			||||||
                        for all users.
 | 
					 | 
				
			||||||
                    </Box>
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            />
 | 
					 | 
				
			||||||
            {renderParameters()}
 | 
					 | 
				
			||||||
            {renderCustomStrategy()}
 | 
					 | 
				
			||||||
        </>
 | 
					 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,6 @@ import { Link } from 'react-router-dom';
 | 
				
			|||||||
import { DonutLarge } from '@mui/icons-material';
 | 
					import { DonutLarge } from '@mui/icons-material';
 | 
				
			||||||
import { useStyles } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewSegment/FeatureOverviewSegment.styles';
 | 
					import { useStyles } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewSegment/FeatureOverviewSegment.styles';
 | 
				
			||||||
import { useSegments } from 'hooks/api/getters/useSegments/useSegments';
 | 
					import { useSegments } from 'hooks/api/getters/useSegments/useSegments';
 | 
				
			||||||
import { StrategySeparator } from 'component/common/StrategySeparator/StrategySeparator';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface IFeatureOverviewSegmentProps {
 | 
					interface IFeatureOverviewSegmentProps {
 | 
				
			||||||
    strategyId: string;
 | 
					    strategyId: string;
 | 
				
			||||||
@ -32,7 +31,6 @@ export const FeatureOverviewSegment = ({
 | 
				
			|||||||
                            {segment.name}
 | 
					                            {segment.name}
 | 
				
			||||||
                        </Link>
 | 
					                        </Link>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                    <StrategySeparator text="AND" />
 | 
					 | 
				
			||||||
                </Fragment>
 | 
					                </Fragment>
 | 
				
			||||||
            ))}
 | 
					            ))}
 | 
				
			||||||
        </>
 | 
					        </>
 | 
				
			||||||
 | 
				
			|||||||
@ -309,6 +309,11 @@ export default createTheme({
 | 
				
			|||||||
                            ...(ownerState.color === 'default' && {
 | 
					                            ...(ownerState.color === 'default' && {
 | 
				
			||||||
                                color: theme.palette.text.secondary,
 | 
					                                color: theme.palette.text.secondary,
 | 
				
			||||||
                            }),
 | 
					                            }),
 | 
				
			||||||
 | 
					                            ...(ownerState.color === 'error' && {
 | 
				
			||||||
 | 
					                                color: theme.palette.error.dark,
 | 
				
			||||||
 | 
					                                background: theme.palette.error.light,
 | 
				
			||||||
 | 
					                                borderColor: theme.palette.error.border,
 | 
				
			||||||
 | 
					                            }),
 | 
				
			||||||
                        }),
 | 
					                        }),
 | 
				
			||||||
                }),
 | 
					                }),
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
 | 
				
			|||||||
@ -1512,6 +1512,11 @@
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
 | 
					  resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
 | 
				
			||||||
  integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
 | 
					  integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"@esbuild/linux-loong64@0.14.53":
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.53.tgz#251b4cd6760fadb4d68a05815e6dc5e432d69cd6"
 | 
				
			||||||
 | 
					  integrity sha512-W2dAL6Bnyn4xa/QRSU3ilIK4EzD5wgYXKXJiS1HDF5vU3675qc2bvFyLwbUcdmssDveyndy7FbitrCoiV/eMLg==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@eslint/eslintrc@^1.3.0":
 | 
					"@eslint/eslintrc@^1.3.0":
 | 
				
			||||||
  version "1.3.0"
 | 
					  version "1.3.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f"
 | 
					  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f"
 | 
				
			||||||
@ -3584,101 +3589,201 @@ esbuild-android-64@0.14.38:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz#5b94a1306df31d55055f64a62ff6b763a47b7f64"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz#5b94a1306df31d55055f64a62ff6b763a47b7f64"
 | 
				
			||||||
  integrity sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==
 | 
					  integrity sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-android-64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.53.tgz#259bc3ef1399a3cad8f4f67c40ee20779c4de675"
 | 
				
			||||||
 | 
					  integrity sha512-fIL93sOTnEU+NrTAVMIKiAw0YH22HWCAgg4N4Z6zov2t0kY9RAJ50zY9ZMCQ+RT6bnOfDt8gCTnt/RaSNA2yRA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-android-arm64@0.14.38:
 | 
					esbuild-android-arm64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz#78acc80773d16007de5219ccce544c036abd50b8"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz#78acc80773d16007de5219ccce544c036abd50b8"
 | 
				
			||||||
  integrity sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==
 | 
					  integrity sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-android-arm64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.53.tgz#2158253d4e8f9fdd2a081bbb4f73b8806178841e"
 | 
				
			||||||
 | 
					  integrity sha512-PC7KaF1v0h/nWpvlU1UMN7dzB54cBH8qSsm7S9mkwFA1BXpaEOufCg8hdoEI1jep0KeO/rjZVWrsH8+q28T77A==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-darwin-64@0.14.38:
 | 
					esbuild-darwin-64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz#e02b1291f629ebdc2aa46fabfacc9aa28ff6aa46"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz#e02b1291f629ebdc2aa46fabfacc9aa28ff6aa46"
 | 
				
			||||||
  integrity sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==
 | 
					  integrity sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-darwin-64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.53.tgz#b4681831fd8f8d06feb5048acbe90d742074cc2a"
 | 
				
			||||||
 | 
					  integrity sha512-gE7P5wlnkX4d4PKvLBUgmhZXvL7lzGRLri17/+CmmCzfncIgq8lOBvxGMiQ4xazplhxq+72TEohyFMZLFxuWvg==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-darwin-arm64@0.14.38:
 | 
					esbuild-darwin-arm64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz#01eb6650ec010b18c990e443a6abcca1d71290a9"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz#01eb6650ec010b18c990e443a6abcca1d71290a9"
 | 
				
			||||||
  integrity sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==
 | 
					  integrity sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-darwin-arm64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.53.tgz#d267d957852d121b261b3f76ead86e5b5463acc9"
 | 
				
			||||||
 | 
					  integrity sha512-otJwDU3hnI15Q98PX4MJbknSZ/WSR1I45il7gcxcECXzfN4Mrpft5hBDHXNRnCh+5858uPXBXA1Vaz2jVWLaIA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-freebsd-64@0.14.38:
 | 
					esbuild-freebsd-64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz#790b8786729d4aac7be17648f9ea8e0e16475b5e"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz#790b8786729d4aac7be17648f9ea8e0e16475b5e"
 | 
				
			||||||
  integrity sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==
 | 
					  integrity sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-freebsd-64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.53.tgz#aca2af6d72b537fe66a38eb8f374fb66d4c98ca0"
 | 
				
			||||||
 | 
					  integrity sha512-WkdJa8iyrGHyKiPF4lk0MiOF87Q2SkE+i+8D4Cazq3/iqmGPJ6u49je300MFi5I2eUsQCkaOWhpCVQMTKGww2w==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-freebsd-arm64@0.14.38:
 | 
					esbuild-freebsd-arm64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz#b66340ab28c09c1098e6d9d8ff656db47d7211e6"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz#b66340ab28c09c1098e6d9d8ff656db47d7211e6"
 | 
				
			||||||
  integrity sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==
 | 
					  integrity sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-freebsd-arm64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.53.tgz#76282e19312d914c34343c8a7da6cc5f051580b9"
 | 
				
			||||||
 | 
					  integrity sha512-9T7WwCuV30NAx0SyQpw8edbKvbKELnnm1FHg7gbSYaatH+c8WJW10g/OdM7JYnv7qkimw2ZTtSA+NokOLd2ydQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-linux-32@0.14.38:
 | 
					esbuild-linux-32@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz#7927f950986fd39f0ff319e92839455912b67f70"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz#7927f950986fd39f0ff319e92839455912b67f70"
 | 
				
			||||||
  integrity sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==
 | 
					  integrity sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-linux-32@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.53.tgz#1045d34cf7c5faaf2af3b29cc1573b06580c37e5"
 | 
				
			||||||
 | 
					  integrity sha512-VGanLBg5en2LfGDgLEUxQko2lqsOS7MTEWUi8x91YmsHNyzJVT/WApbFFx3MQGhkf+XdimVhpyo5/G0PBY91zg==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-linux-64@0.14.38:
 | 
					esbuild-linux-64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz#4893d07b229d9cfe34a2b3ce586399e73c3ac519"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz#4893d07b229d9cfe34a2b3ce586399e73c3ac519"
 | 
				
			||||||
  integrity sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==
 | 
					  integrity sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-linux-64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.53.tgz#ab3f2ee2ebb5a6930c72d9539cb34b428808cbe4"
 | 
				
			||||||
 | 
					  integrity sha512-pP/FA55j/fzAV7N9DF31meAyjOH6Bjuo3aSKPh26+RW85ZEtbJv9nhoxmGTd9FOqjx59Tc1ZbrJabuiXlMwuZQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-linux-arm64@0.14.38:
 | 
					esbuild-linux-arm64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz#8442402e37d0b8ae946ac616784d9c1a2041056a"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz#8442402e37d0b8ae946ac616784d9c1a2041056a"
 | 
				
			||||||
  integrity sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==
 | 
					  integrity sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-linux-arm64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.53.tgz#1f5530412f6690949e78297122350488d3266cfe"
 | 
				
			||||||
 | 
					  integrity sha512-GDmWITT+PMsjCA6/lByYk7NyFssW4Q6in32iPkpjZ/ytSyH+xeEx8q7HG3AhWH6heemEYEWpTll/eui3jwlSnw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-linux-arm@0.14.38:
 | 
					esbuild-linux-arm@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz#d5dbf32d38b7f79be0ec6b5fb2f9251fd9066986"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz#d5dbf32d38b7f79be0ec6b5fb2f9251fd9066986"
 | 
				
			||||||
  integrity sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==
 | 
					  integrity sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-linux-arm@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.53.tgz#a44ec9b5b42007ab6c0d65a224ccc6bbd97c54cf"
 | 
				
			||||||
 | 
					  integrity sha512-/u81NGAVZMopbmzd21Nu/wvnKQK3pT4CrvQ8BTje1STXcQAGnfyKgQlj3m0j2BzYbvQxSy+TMck4TNV2onvoPA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-linux-mips64le@0.14.38:
 | 
					esbuild-linux-mips64le@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz#95081e42f698bbe35d8ccee0e3a237594b337eb5"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz#95081e42f698bbe35d8ccee0e3a237594b337eb5"
 | 
				
			||||||
  integrity sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==
 | 
					  integrity sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-linux-mips64le@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.53.tgz#a4d0b6b17cfdeea4e41b0b085a5f73d99311be9f"
 | 
				
			||||||
 | 
					  integrity sha512-d6/XHIQW714gSSp6tOOX2UscedVobELvQlPMkInhx1NPz4ThZI9uNLQ4qQJHGBGKGfu+rtJsxM4NVHLhnNRdWQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-linux-ppc64le@0.14.38:
 | 
					esbuild-linux-ppc64le@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz#dceb0a1b186f5df679618882a7990bd422089b47"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz#dceb0a1b186f5df679618882a7990bd422089b47"
 | 
				
			||||||
  integrity sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==
 | 
					  integrity sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-linux-ppc64le@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.53.tgz#8c331822c85465434e086e3e6065863770c38139"
 | 
				
			||||||
 | 
					  integrity sha512-ndnJmniKPCB52m+r6BtHHLAOXw+xBCWIxNnedbIpuREOcbSU/AlyM/2dA3BmUQhsHdb4w3amD5U2s91TJ3MzzA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-linux-riscv64@0.14.38:
 | 
					esbuild-linux-riscv64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz#61fb8edb75f475f9208c4a93ab2bfab63821afd2"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz#61fb8edb75f475f9208c4a93ab2bfab63821afd2"
 | 
				
			||||||
  integrity sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==
 | 
					  integrity sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-linux-riscv64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.53.tgz#36fd75543401304bea8a2d63bf8ea18aaa508e00"
 | 
				
			||||||
 | 
					  integrity sha512-yG2sVH+QSix6ct4lIzJj329iJF3MhloLE6/vKMQAAd26UVPVkhMFqFopY+9kCgYsdeWvXdPgmyOuKa48Y7+/EQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-linux-s390x@0.14.38:
 | 
					esbuild-linux-s390x@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz#34c7126a4937406bf6a5e69100185fd702d12fe0"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz#34c7126a4937406bf6a5e69100185fd702d12fe0"
 | 
				
			||||||
  integrity sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==
 | 
					  integrity sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-linux-s390x@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.53.tgz#1622677ab6824123f48f75d3afc031cd41936129"
 | 
				
			||||||
 | 
					  integrity sha512-OCJlgdkB+XPYndHmw6uZT7jcYgzmx9K+28PVdOa/eLjdoYkeAFvH5hTwX4AXGLZLH09tpl4bVsEtvuyUldaNCg==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-netbsd-64@0.14.38:
 | 
					esbuild-netbsd-64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz#322ea9937d9e529183ee281c7996b93eb38a5d95"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz#322ea9937d9e529183ee281c7996b93eb38a5d95"
 | 
				
			||||||
  integrity sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==
 | 
					  integrity sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-netbsd-64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.53.tgz#e86d0efd0116658be335492ed12e66b26b4baf52"
 | 
				
			||||||
 | 
					  integrity sha512-gp2SB+Efc7MhMdWV2+pmIs/Ja/Mi5rjw+wlDmmbIn68VGXBleNgiEZG+eV2SRS0kJEUyHNedDtwRIMzaohWedQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-openbsd-64@0.14.38:
 | 
					esbuild-openbsd-64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz#1ca29bb7a2bf09592dcc26afdb45108f08a2cdbd"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz#1ca29bb7a2bf09592dcc26afdb45108f08a2cdbd"
 | 
				
			||||||
  integrity sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==
 | 
					  integrity sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-openbsd-64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.53.tgz#9bcbbe6f86304872c6e91f64c8eb73fc29c3588b"
 | 
				
			||||||
 | 
					  integrity sha512-eKQ30ZWe+WTZmteDYg8S+YjHV5s4iTxeSGhJKJajFfQx9TLZJvsJX0/paqwP51GicOUruFpSUAs2NCc0a4ivQQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-sunos-64@0.14.38:
 | 
					esbuild-sunos-64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz#c9446f7d8ebf45093e7bb0e7045506a88540019b"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz#c9446f7d8ebf45093e7bb0e7045506a88540019b"
 | 
				
			||||||
  integrity sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==
 | 
					  integrity sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-sunos-64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.53.tgz#f7a872f7460bfb7b131f7188a95fbce3d1c577e8"
 | 
				
			||||||
 | 
					  integrity sha512-OWLpS7a2FrIRukQqcgQqR1XKn0jSJoOdT+RlhAxUoEQM/IpytS3FXzCJM6xjUYtpO5GMY0EdZJp+ur2pYdm39g==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-windows-32@0.14.38:
 | 
					esbuild-windows-32@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz#f8e9b4602fd0ccbd48e5c8d117ec0ba4040f2ad1"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz#f8e9b4602fd0ccbd48e5c8d117ec0ba4040f2ad1"
 | 
				
			||||||
  integrity sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==
 | 
					  integrity sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-windows-32@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.53.tgz#c5e3ca50e2d1439cc2c9fe4defa63bcd474ce709"
 | 
				
			||||||
 | 
					  integrity sha512-m14XyWQP5rwGW0tbEfp95U6A0wY0DYPInWBB7D69FAXUpBpBObRoGTKRv36lf2RWOdE4YO3TNvj37zhXjVL5xg==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-windows-64@0.14.38:
 | 
					esbuild-windows-64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz#280f58e69f78535f470905ce3e43db1746518107"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz#280f58e69f78535f470905ce3e43db1746518107"
 | 
				
			||||||
  integrity sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==
 | 
					  integrity sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-windows-64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.53.tgz#ec2ab4a60c5215f092ffe1eab6d01319e88238af"
 | 
				
			||||||
 | 
					  integrity sha512-s9skQFF0I7zqnQ2K8S1xdLSfZFsPLuOGmSx57h2btSEswv0N0YodYvqLcJMrNMXh6EynOmWD7rz+0rWWbFpIHQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild-windows-arm64@0.14.38:
 | 
					esbuild-windows-arm64@0.14.38:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz#d97e9ac0f95a4c236d9173fa9f86c983d6a53f54"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz#d97e9ac0f95a4c236d9173fa9f86c983d6a53f54"
 | 
				
			||||||
  integrity sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==
 | 
					  integrity sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild-windows-arm64@0.14.53:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.53.tgz#f71d403806bdf9f4a1f9d097db9aec949bd675c8"
 | 
				
			||||||
 | 
					  integrity sha512-E+5Gvb+ZWts+00T9II6wp2L3KG2r3iGxByqd/a1RmLmYWVsSVUjkvIxZuJ3hYTIbhLkH5PRwpldGTKYqVz0nzQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esbuild@^0.14.27:
 | 
					esbuild@^0.14.27:
 | 
				
			||||||
  version "0.14.38"
 | 
					  version "0.14.38"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.38.tgz#99526b778cd9f35532955e26e1709a16cca2fb30"
 | 
					  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.38.tgz#99526b778cd9f35532955e26e1709a16cca2fb30"
 | 
				
			||||||
@ -3705,6 +3810,33 @@ esbuild@^0.14.27:
 | 
				
			|||||||
    esbuild-windows-64 "0.14.38"
 | 
					    esbuild-windows-64 "0.14.38"
 | 
				
			||||||
    esbuild-windows-arm64 "0.14.38"
 | 
					    esbuild-windows-arm64 "0.14.38"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					esbuild@^0.14.47:
 | 
				
			||||||
 | 
					  version "0.14.53"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.53.tgz#20b1007f686e8584f2a01a1bec5a37aac9498ce4"
 | 
				
			||||||
 | 
					  integrity sha512-ohO33pUBQ64q6mmheX1mZ8mIXj8ivQY/L4oVuAshr+aJI+zLl+amrp3EodrUNDNYVrKJXGPfIHFGhO8slGRjuw==
 | 
				
			||||||
 | 
					  optionalDependencies:
 | 
				
			||||||
 | 
					    "@esbuild/linux-loong64" "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-android-64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-android-arm64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-darwin-64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-darwin-arm64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-freebsd-64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-freebsd-arm64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-linux-32 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-linux-64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-linux-arm "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-linux-arm64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-linux-mips64le "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-linux-ppc64le "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-linux-riscv64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-linux-s390x "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-netbsd-64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-openbsd-64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-sunos-64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-windows-32 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-windows-64 "0.14.53"
 | 
				
			||||||
 | 
					    esbuild-windows-arm64 "0.14.53"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
escalade@^3.1.1:
 | 
					escalade@^3.1.1:
 | 
				
			||||||
  version "3.1.1"
 | 
					  version "3.1.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
 | 
					  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
 | 
				
			||||||
@ -4625,7 +4757,7 @@ is-ci@^3.0.0:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    ci-info "^3.2.0"
 | 
					    ci-info "^3.2.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
is-core-module@^2.2.0:
 | 
					is-core-module@^2.2.0, is-core-module@^2.9.0:
 | 
				
			||||||
  version "2.9.0"
 | 
					  version "2.9.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
 | 
					  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
 | 
				
			||||||
  integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
 | 
					  integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
 | 
				
			||||||
@ -5028,10 +5160,10 @@ listr2@^3.8.3:
 | 
				
			|||||||
    through "^2.3.8"
 | 
					    through "^2.3.8"
 | 
				
			||||||
    wrap-ansi "^7.0.0"
 | 
					    wrap-ansi "^7.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local-pkg@^0.4.1:
 | 
					local-pkg@^0.4.2:
 | 
				
			||||||
  version "0.4.1"
 | 
					  version "0.4.2"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.1.tgz#e7b0d7aa0b9c498a1110a5ac5b00ba66ef38cfff"
 | 
					  resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.2.tgz#13107310b77e74a0e513147a131a2ba288176c2f"
 | 
				
			||||||
  integrity sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==
 | 
					  integrity sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
locate-path@^2.0.0:
 | 
					locate-path@^2.0.0:
 | 
				
			||||||
  version "2.0.0"
 | 
					  version "2.0.0"
 | 
				
			||||||
@ -5218,6 +5350,11 @@ nanoid@^3.3.3:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
 | 
					  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
 | 
				
			||||||
  integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
 | 
					  integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					nanoid@^3.3.4:
 | 
				
			||||||
 | 
					  version "3.3.4"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
 | 
				
			||||||
 | 
					  integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
natural-compare@^1.4.0:
 | 
					natural-compare@^1.4.0:
 | 
				
			||||||
  version "1.4.0"
 | 
					  version "1.4.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
 | 
					  resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
 | 
				
			||||||
@ -5524,6 +5661,15 @@ postcss@^8.4.13:
 | 
				
			|||||||
    picocolors "^1.0.0"
 | 
					    picocolors "^1.0.0"
 | 
				
			||||||
    source-map-js "^1.0.2"
 | 
					    source-map-js "^1.0.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					postcss@^8.4.14:
 | 
				
			||||||
 | 
					  version "8.4.14"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
 | 
				
			||||||
 | 
					  integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
 | 
				
			||||||
 | 
					  dependencies:
 | 
				
			||||||
 | 
					    nanoid "^3.3.4"
 | 
				
			||||||
 | 
					    picocolors "^1.0.0"
 | 
				
			||||||
 | 
					    source-map-js "^1.0.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
prelude-ls@^1.2.1:
 | 
					prelude-ls@^1.2.1:
 | 
				
			||||||
  version "1.2.1"
 | 
					  version "1.2.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
 | 
					  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
 | 
				
			||||||
@ -5849,6 +5995,15 @@ resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.2
 | 
				
			|||||||
    path-parse "^1.0.7"
 | 
					    path-parse "^1.0.7"
 | 
				
			||||||
    supports-preserve-symlinks-flag "^1.0.0"
 | 
					    supports-preserve-symlinks-flag "^1.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					resolve@^1.22.1:
 | 
				
			||||||
 | 
					  version "1.22.1"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
 | 
				
			||||||
 | 
					  integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
 | 
				
			||||||
 | 
					  dependencies:
 | 
				
			||||||
 | 
					    is-core-module "^2.9.0"
 | 
				
			||||||
 | 
					    path-parse "^1.0.7"
 | 
				
			||||||
 | 
					    supports-preserve-symlinks-flag "^1.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
resolve@^2.0.0-next.3:
 | 
					resolve@^2.0.0-next.3:
 | 
				
			||||||
  version "2.0.0-next.3"
 | 
					  version "2.0.0-next.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
 | 
					  resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
 | 
				
			||||||
@ -5889,6 +6044,13 @@ rollup@^2.59.0:
 | 
				
			|||||||
  optionalDependencies:
 | 
					  optionalDependencies:
 | 
				
			||||||
    fsevents "~2.3.2"
 | 
					    fsevents "~2.3.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rollup@^2.75.6:
 | 
				
			||||||
 | 
					  version "2.77.2"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.2.tgz#6b6075c55f9cc2040a5912e6e062151e42e2c4e3"
 | 
				
			||||||
 | 
					  integrity sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==
 | 
				
			||||||
 | 
					  optionalDependencies:
 | 
				
			||||||
 | 
					    fsevents "~2.3.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
run-async@^2.4.0:
 | 
					run-async@^2.4.0:
 | 
				
			||||||
  version "2.4.1"
 | 
					  version "2.4.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
 | 
					  resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
 | 
				
			||||||
@ -6235,15 +6397,15 @@ through@^2.3.6, through@^2.3.8:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
 | 
					  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
 | 
				
			||||||
  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
 | 
					  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tinypool@^0.2.1:
 | 
					tinypool@^0.2.4:
 | 
				
			||||||
  version "0.2.1"
 | 
					  version "0.2.4"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.2.1.tgz#7c3347514de36113f224212590de17f04fdf0078"
 | 
					  resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.2.4.tgz#4d2598c4689d1a2ce267ddf3360a9c6b3925a20c"
 | 
				
			||||||
  integrity sha512-HFU5ZYVq3wBfhSaf8qdqGsneaqXm0FgJQpoUlJbVdHpRLzm77IneKAD3RjzJWZvIv0YpPB9S7LUW53f6BE6ZSg==
 | 
					  integrity sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tinyspy@^0.3.3:
 | 
					tinyspy@^1.0.0:
 | 
				
			||||||
  version "0.3.3"
 | 
					  version "1.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-0.3.3.tgz#8b57f8aec7fe1bf583a3a49cb9ab30c742f69237"
 | 
					  resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.0.0.tgz#0cb34587287b0432b33fe36a9bd945fe22b1eb89"
 | 
				
			||||||
  integrity sha512-gRiUR8fuhUf0W9lzojPf1N1euJYA30ISebSfgca8z76FOvXtVXqd5ojEIaKLWbDQhAaC3ibxZIjqbyi4ybjcTw==
 | 
					  integrity sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tmp@^0.0.33:
 | 
					tmp@^0.0.33:
 | 
				
			||||||
  version "0.0.33"
 | 
					  version "0.0.33"
 | 
				
			||||||
@ -6537,32 +6699,32 @@ vite@2.9.14:
 | 
				
			|||||||
  optionalDependencies:
 | 
					  optionalDependencies:
 | 
				
			||||||
    fsevents "~2.3.2"
 | 
					    fsevents "~2.3.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vite@^2.9.12:
 | 
					"vite@^2.9.12 || ^3.0.0-0":
 | 
				
			||||||
  version "2.9.12"
 | 
					  version "3.0.4"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/vite/-/vite-2.9.12.tgz#b1d636b0a8ac636afe9d83e3792d4895509a941b"
 | 
					  resolved "https://registry.yarnpkg.com/vite/-/vite-3.0.4.tgz#c61688d6b97573e96cf5ac25f2d68597b5ce68e8"
 | 
				
			||||||
  integrity sha512-suxC36dQo9Rq1qMB2qiRorNJtJAdxguu5TMvBHOc/F370KvqAe9t48vYp+/TbPKRNrMh/J55tOUmkuIqstZaew==
 | 
					  integrity sha512-NU304nqnBeOx2MkQnskBQxVsa0pRAH5FphokTGmyy8M3oxbvw7qAXts2GORxs+h/2vKsD+osMhZ7An6yK6F1dA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    esbuild "^0.14.27"
 | 
					    esbuild "^0.14.47"
 | 
				
			||||||
    postcss "^8.4.13"
 | 
					    postcss "^8.4.14"
 | 
				
			||||||
    resolve "^1.22.0"
 | 
					    resolve "^1.22.1"
 | 
				
			||||||
    rollup "^2.59.0"
 | 
					    rollup "^2.75.6"
 | 
				
			||||||
  optionalDependencies:
 | 
					  optionalDependencies:
 | 
				
			||||||
    fsevents "~2.3.2"
 | 
					    fsevents "~2.3.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vitest@0.16.0:
 | 
					vitest@0.20.3:
 | 
				
			||||||
  version "0.16.0"
 | 
					  version "0.20.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.16.0.tgz#6858a864b25850d28252bc480b0c89014ff48ce8"
 | 
					  resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.20.3.tgz#24e0744fd1671a9a5d9cf8876281eae65e8d3be6"
 | 
				
			||||||
  integrity sha512-Ntp6jrM8wf2NMtamMBLkRBBdeqHkgAH/WMh5Xryts1j2ft2D8QZQbiSVFkSl4WmEQzcPP0YM069g/Ga1vtnEtg==
 | 
					  integrity sha512-cXMjTbZxBBUUuIF3PUzEGPLJWtIMeURBDXVxckSHpk7xss4JxkiiWh5cnIlfGyfJne2Ii3QpbiRuFL5dMJtljw==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/chai" "^4.3.1"
 | 
					    "@types/chai" "^4.3.1"
 | 
				
			||||||
    "@types/chai-subset" "^1.3.3"
 | 
					    "@types/chai-subset" "^1.3.3"
 | 
				
			||||||
    "@types/node" "*"
 | 
					    "@types/node" "*"
 | 
				
			||||||
    chai "^4.3.6"
 | 
					    chai "^4.3.6"
 | 
				
			||||||
    debug "^4.3.4"
 | 
					    debug "^4.3.4"
 | 
				
			||||||
    local-pkg "^0.4.1"
 | 
					    local-pkg "^0.4.2"
 | 
				
			||||||
    tinypool "^0.2.1"
 | 
					    tinypool "^0.2.4"
 | 
				
			||||||
    tinyspy "^0.3.3"
 | 
					    tinyspy "^1.0.0"
 | 
				
			||||||
    vite "^2.9.12"
 | 
					    vite "^2.9.12 || ^3.0.0-0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
w3c-hr-time@^1.0.2:
 | 
					w3c-hr-time@^1.0.2:
 | 
				
			||||||
  version "1.0.2"
 | 
					  version "1.0.2"
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user