@antv/x6
Version:
JavaScript diagramming library that uses SVG and HTML for rendering
124 lines (98 loc) • 2.63 kB
text/typescript
import { FunctionExt, type JSONObject } from '../../common'
import type { PointLike, Rectangle } from '../../geometry'
import type { Cell } from '../../model'
import type { CellView } from '../../view'
import { Registry } from '../registry'
import * as attrs from './main'
import { raw } from './raw'
export type SimpleAttrValue = null | undefined | string | number
export type SimpleAttrs = { [name: string]: SimpleAttrValue }
export type ComplexAttrValue =
| null
| undefined
| boolean
| string
| number
| JSONObject
export type ComplexAttrs = { [name: string]: ComplexAttrValue }
export type CellAttrs = { [selector: string]: ComplexAttrs }
interface QualifyOptions {
elem: Element
attrs: ComplexAttrs
cell: Cell
view: CellView
}
export type QualifyFunction = (
this: CellView,
val: ComplexAttrValue,
options: QualifyOptions,
) => boolean
export interface AttrOptions extends QualifyOptions {
refBBox: Rectangle
}
export type AttrSetFunction = (
this: CellView,
val: ComplexAttrValue,
options: AttrOptions,
) => SimpleAttrValue | SimpleAttrs | void
export type AttrOffsetFunction = (
this: CellView,
val: ComplexAttrValue,
options: AttrOptions,
) => PointLike
export type AttrPositionFunction = (
this: CellView,
val: ComplexAttrValue,
options: AttrOptions,
) => PointLike | undefined | null
interface Qualify {
qualify?: QualifyFunction
}
export interface SetDefinition extends Qualify {
set: AttrSetFunction
}
export interface OffsetDefinition extends Qualify {
offset: AttrOffsetFunction
}
export interface AttrPositionDefinition extends Qualify {
/**
* Returns a point from the reference bounding box.
*/
position: AttrPositionFunction
}
export type AttrDefinition =
| string
| Qualify
| SetDefinition
| OffsetDefinition
| AttrPositionDefinition
export type AttrDefinitions = { [attrName: string]: AttrDefinition }
export function isValidDefinition(
this: CellView,
def: AttrDefinition | undefined | null,
val: ComplexAttrValue,
options: QualifyOptions,
): def is AttrDefinition {
if (def != null) {
if (typeof def === 'string') {
return true
}
if (
typeof def.qualify !== 'function' ||
FunctionExt.call(def.qualify, this, val, options)
) {
return true
}
}
return false
}
type Presets = typeof attrPresets
export type AttrNativeNames = keyof Presets
export const attrPresets: AttrDefinitions = {
...raw,
...attrs,
}
export const attrRegistry = Registry.create<AttrDefinition, Presets>({
type: 'attribute definition',
})
attrRegistry.register(attrPresets, true)