Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import React, { useMemo } from 'react'
import { VisXYContainer, VisLine, VisAxis } from '@unovis/react'
import { XYDataRecord, generateXYDataRecords } from '@src/utils/data'
import { ExampleViewerDurationProps } from '@src/components/ExampleViewer/index'

export const title = 'Grid Styling'
export const subTitle = 'Using CSS variables'

const gridHoverCss = `
.grid-hover-wrapper {
[axis-type='y'] {
--vis-axis-grid-opacity: 0;
--vis-axis-grid-transition: opacity 600ms ease-in-out;
}
}
.grid-hover-wrapper:hover {
[axis-type='y'] {
--vis-axis-grid-opacity: 1;
}
}
`

export const component = (props: ExampleViewerDurationProps): React.ReactNode => {
const data = useMemo(() => generateXYDataRecords(25), [])
const accessors = [
(d: XYDataRecord) => d.y,
(d: XYDataRecord) => d.y1,
(d: XYDataRecord) => d.y2,
]

return (
<div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>
<style>{gridHoverCss}</style>
<span>Grid lines always visible (default)</span>
<div>
<VisXYContainer<XYDataRecord> data={data}>
<VisLine x={d => d.x} y={accessors} duration={props.duration}/>
<VisAxis type='x' duration={props.duration} gridLine={true} />
<VisAxis type='y' duration={props.duration} gridLine={true} />
</VisXYContainer>
</div>

<span>Grid lines disabled</span>
<div>
<VisXYContainer<XYDataRecord> data={data}>
<VisLine x={d => d.x} y={accessors} duration={props.duration}/>
<VisAxis type='x' duration={props.duration} gridLine={false} />
<VisAxis type='y' duration={props.duration} gridLine={false} />
</VisXYContainer>
</div>

<span>Custom grid styling (using CSS variables)</span>
<div>
<VisXYContainer<XYDataRecord>
data={data}
style={{
'--vis-axis-grid-color': '#3b82f6',
'--vis-axis-grid-line-width': '0.5px',
'--vis-axis-grid-line-dasharray': '8 8',
}}
>
<VisLine x={d => d.x} y={accessors} duration={props.duration}/>
<VisAxis type='x' duration={props.duration} gridLine={true} />
<VisAxis type='y' duration={props.duration} gridLine={true} />
</VisXYContainer>
</div>

<span>Y Grid lines visible on hover (using CSS variables)</span>
<div className="grid-hover-wrapper">
<VisXYContainer<XYDataRecord> data={data}>
<VisLine x={d => d.x} y={accessors} duration={props.duration}/>
<VisAxis type='x' duration={props.duration} gridLine={true} />
<VisAxis type='y' duration={props.duration} gridLine={true} />
</VisXYContainer>
</div>
</div>
)
}
3 changes: 3 additions & 0 deletions packages/ts/src/components/axis/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ export class Axis<Datum> extends XYComponentCore<Datum, AxisConfigInterface<Datu
constructor (config?: AxisConfigInterface<Datum>) {
super()
if (config) this.setConfig(config)

this.g.attr('axis-type', this.config.type)

this.axisGroup = this.g.append('g')
this.gridGroup = this.g.append('g')
.attr('class', s.grid)
Expand Down
15 changes: 9 additions & 6 deletions packages/ts/src/components/axis/style.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@ export const root = css`
label: axis-component;
`

export const cssVarDefaults = {
// Undefined by default to allow proper fallback to var(--vis-font-family)
/* --vis-axis-font-family: */
export const cssVarDefaults: Record<string, string | undefined> = {
'--vis-axis-font-family': undefined, // Undefined by default to allow proper fallback to var(--vis-font-family)
'--vis-axis-tick-color': '#e8e9ef',
/* --vis-axis-domain-color: // Undefined by default to allow fallback to var(--vis-axis-tick-color) */
'--vis-axis-domain-color': undefined, // Undefined by default to allow fallback to var(--vis-axis-tick-color)
'--vis-axis-grid-color': '#e8e9ef',
'--vis-axis-grid-line-width': '1px',
'--vis-axis-grid-line-dasharray': 'none',
'--vis-axis-grid-opacity': '1',
'--vis-axis-grid-transition': 'none',

'--vis-axis-label-font-size': '14px',
'--vis-axis-label-color': '#6c778c',
Expand All @@ -27,10 +28,10 @@ export const cssVarDefaults = {
'--vis-axis-tick-line-width': '1px',
'--vis-axis-tick-label-hide-transition': 'opacity 400ms ease-in-out',

/* --vis-axis-domain-line-width: // Undefined by default to allow fallback to var(--vis-axis-grid-line-width) */
'--vis-axis-domain-line-width': undefined, // Undefined by default to allow fallback to var(--vis-axis-grid-line-width)

'--vis-dark-axis-tick-color': '#6c778c',
/* --vis-dark-axis-domain-color: // Undefined by default to allow fallback to var(--vis-dark-axis-tick-color) */
'--vis-dark-axis-domain-color': undefined, // Undefined by default to allow fallback to var(--vis-dark-axis-tick-color)
'--vis-dark-axis-tick-label-color': '#e8e9ef',
'--vis-dark-axis-grid-color': '#6c778c',
'--vis-dark-axis-label-color': '#fefefe',
Expand Down Expand Up @@ -82,6 +83,8 @@ export const grid = css`
stroke: var(--vis-axis-grid-color);
stroke-width: var(--vis-axis-grid-line-width);
stroke-dasharray: var(--vis-axis-grid-line-dasharray);
opacity: var(--vis-axis-grid-opacity);
transition: var(--vis-axis-grid-transition);
}
`

Expand Down