/** * @upsetjs/bundle * https://github.com/upsetjs/upsetjs * * Copyright (c) 2021 Samuel Gratzl */ import { isSet, isSetCombination, isGenerateSetCombinationOptions, isSetLike, isUpSetQuery } from '@upsetjs/model'; import type { UpSetStyleClassNames, UpSetFontSizes, UpSetMultiStyle, UpSetExportOptions, UpSetThemes, VennDiagramMultiStyle, VennDiagramFontSizes, UpSetLayoutProps, UpSetBaseDataProps, UpSetDataProps, UpSetSelectionProps, KarnaughMapMultiStyle, UpSetBaseStyleProps, UpSetStyleProps, KarnaughMapFontSizes, VennDiagramLayoutProps, } from './interfaces'; import { FONT_SIZES_KEYS, MULTI_STYLE_KEYS, EXPORT_OPTION_KEYS } from './defaults'; export function widthRatios(value?: UpSetLayoutProps['widthRatios']) { return value == null || (Array.isArray(value) && value.length >= 2 && value.every((v) => typeof v === 'number')); } export function heightRatios(value?: UpSetLayoutProps['heightRatios']) { return value == null || (Array.isArray(value) && value.length >= 1 && value.every((v) => typeof v === 'number')); } export function setLabelAlignment(value?: UpSetLayoutProps['setLabelAlignment']) { return value == null || value === 'left' || value === 'center' || value === 'right'; } export function sets(value: UpSetBaseDataProps['sets']) { return Array.isArray(value) && value.every(isSet); } export function combinations(value?: UpSetDataProps['combinations']) { return ( value == null || (Array.isArray(value) && value.every(isSetCombination)) || isGenerateSetCombinationOptions(value) ); } export function selection(value?: UpSetSelectionProps['selection']) { return value == null || Array.isArray(value) || isSetLike(value); } export function onHover(value?: UpSetSelectionProps['onHover']) { return value == null || typeof value === 'function'; } export function onClick(value?: UpSetSelectionProps['onClick']) { return value == null || typeof value === 'function'; } export function onContextMenu(value?: UpSetSelectionProps['onContextMenu']) { return value == null || typeof value === 'function'; } export function onMouseMove(value?: UpSetSelectionProps['onMouseMove']) { return value == null || typeof value === 'function'; } export function queries(value?: UpSetSelectionProps['queries']) { return !value || (Array.isArray(value) && value.every(isUpSetQuery)); } export function stringOrFalse(value?: string | false) { return value == null || typeof value === 'string' || value === false; } export function setLabelOffsets(value?: VennDiagramLayoutProps['setLabelOffsets']) { return ( value == null || (Array.isArray(value) && value.every((v) => (v! = null && typeof v?.x === 'number' && typeof v?.y === 'number'))) ); } export function theme(value?: UpSetThemes) { return value == null || value === 'light' || value === 'dark' || value === 'vega'; } export function classNames( value?: UpSetStyleClassNames | VennDiagramMultiStyle | KarnaughMapMultiStyle ) { return ( value == null || (Object.keys(value) as (keyof (UpSetStyleClassNames | VennDiagramMultiStyle))[]).every( (k) => MULTI_STYLE_KEYS.includes(k) && typeof value[k] === 'string' ) ); } export function fontSizes(value?: UpSetFontSizes | VennDiagramFontSizes | KarnaughMapFontSizes) { return ( value == null || (Object.keys(value) as (keyof (UpSetFontSizes | VennDiagramFontSizes))[]).every( (k) => FONT_SIZES_KEYS.includes(k) && typeof value[k] === 'string' ) ); } export function numericScale(value?: UpSetDataProps['numericScale']) { return value == null || value === 'linear' || value === 'log' || typeof value === 'function'; } export function bandScale(value?: UpSetDataProps['bandScale']) { return value == null || value === 'band' || typeof value === 'function'; } export function axisOffset(value?: UpSetStyleProps['setNameAxisOffset']) { return value == null || value === 'auto' || typeof value === 'number'; } export function style(value?: any) { return value == null || typeof value === 'object'; } export function styles(value?: UpSetMultiStyle | VennDiagramMultiStyle | KarnaughMapMultiStyle) { return ( value == null || Object.keys(value).every((k) => MULTI_STYLE_KEYS.includes(k as keyof (UpSetMultiStyle | VennDiagramMultiStyle)) ) ); } export function exportButtons(value?: UpSetBaseStyleProps['exportButtons']) { return ( value == null || typeof value === 'boolean' || (Object.keys(value) as (keyof UpSetExportOptions)[]).every( (k) => EXPORT_OPTION_KEYS.includes(k) && typeof value[k] === 'boolean' ) ); }