/** * @upsetjs/react * https://github.com/upsetjs/upsetjs * * Copyright (c) 2021 Samuel Gratzl */ import React, { PropsWithChildren, ReactElement } from 'react'; import Axis from './Axis'; import UpSetTitle from './UpSetTitle'; import type { UpSetDataInfo } from '../derive/deriveDataDependent'; import type { UpSetSizeInfo } from '../derive/deriveSizeDependent'; import type { UpSetStyleInfo } from '../derive/deriveStyleDependent'; import { addonPositionGenerator } from './utils'; import { clsx } from '../utils'; export type UpSetAxisProps = PropsWithChildren<{ size: UpSetSizeInfo; style: UpSetStyleInfo; data: UpSetDataInfo; }>; const UpSetAxis = /*!#__PURE__*/ React.memo(function UpSetAxis({ size, style, data }: UpSetAxisProps) { const setPosGen = addonPositionGenerator(size.sets.w + size.labels.w + size.cs.w, size.sets.addonPadding); const combinationPosGen = addonPositionGenerator(size.cs.h + size.sets.h, size.cs.addonPadding); const csNameOffset = style.cs.offset === 'auto' ? data.cs.labelOffset : style.cs.offset; const setNameOffset = style.sets.offset === 'auto' ? data.sets.labelOffset : style.sets.offset; return ( {size.cs.h > 0 && ( {style.cs.name} {size.cs.addons.map((addon) => { const pos = combinationPosGen(addon); const title = ( {addon.name} ); if (!addon.scale) { return title; } return ( {title} ); })} )} {size.sets.w > 0 && ( {style.sets.name} {size.sets.addons.map((addon) => { const pos = setPosGen(addon); const title = ( {addon.name} ); if (!addon.scale) { return title; } return ( {title} ); })} )} ); }); export default UpSetAxis as (props: UpSetAxisProps) => ReactElement;