From 69d4dcf2f19507344cb17f641e96d4e442328316 Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Thu, 6 Jul 2023 11:47:23 +0800 Subject: [PATCH 001/268] fix: doc search apiKey --- site/.dumirc.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 09f3180a9..95845f059 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -26,8 +26,11 @@ export default defineConfig({ '0.x': 'https://v0-charts.ant.design/', }, docsearchOptions: { - apiKey: 'cd83d8f913aeb993cd93f45fdbe9b5ac', - // indexName: 'charts-ant-design', + appId: 'I1DYJKMAUK', + apiKey: '5d0fcf465bcfa6fe6ef14d1bb1b7fb0f', + indexName: 'ant-design-charts-antgroup', + // container: '### REPLACE ME WITH A CONTAINER (e.g. div) ###', + debug: false, }, navs: [ { From fbde7a147929f2ce35783d805a5a6b7fad893c70 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 20 Jul 2023 14:20:53 +0800 Subject: [PATCH 002/268] feat: code parse (#2000) * fix: doc search apiKey * feat: AST parser 3.0 --- package.json | 2 +- scripts/ast3.0/README.md | 4 + scripts/ast3.0/code-template.js | 29 +++ scripts/ast3.0/core/constants.js | 81 ++++++ scripts/ast3.0/core/global.js | 26 ++ scripts/ast3.0/core/index.js | 3 + scripts/ast3.0/core/parser.js | 247 +++++++++++++++++++ scripts/ast3.0/core/utils.js | 169 +++++++++++++ scripts/ast3.0/examples-parser/connector.js | 145 +++++++++++ scripts/ast3.0/examples-parser/geo-map.js | 47 ++++ scripts/ast3.0/examples-parser/interval.js | 28 +++ scripts/ast3.0/examples-parser/line.js | 66 +++++ scripts/ast3.0/examples-parser/regression.js | 71 ++++++ scripts/ast3.0/examples-parser/text.js | 141 +++++++++++ scripts/ast3.0/examples/connector.js | 103 ++++++++ scripts/ast3.0/examples/geo-map.js | 44 ++++ scripts/ast3.0/examples/interval.js | 22 ++ scripts/ast3.0/examples/line.js | 52 ++++ scripts/ast3.0/examples/regression.js | 54 ++++ scripts/ast3.0/examples/text.js | 102 ++++++++ scripts/ast3.0/generator.js | 34 +++ site/.dumirc.ts | 7 +- 22 files changed, 1474 insertions(+), 3 deletions(-) create mode 100644 scripts/ast3.0/README.md create mode 100644 scripts/ast3.0/code-template.js create mode 100644 scripts/ast3.0/core/constants.js create mode 100644 scripts/ast3.0/core/global.js create mode 100644 scripts/ast3.0/core/index.js create mode 100644 scripts/ast3.0/core/parser.js create mode 100644 scripts/ast3.0/core/utils.js create mode 100644 scripts/ast3.0/examples-parser/connector.js create mode 100644 scripts/ast3.0/examples-parser/geo-map.js create mode 100644 scripts/ast3.0/examples-parser/interval.js create mode 100644 scripts/ast3.0/examples-parser/line.js create mode 100644 scripts/ast3.0/examples-parser/regression.js create mode 100644 scripts/ast3.0/examples-parser/text.js create mode 100644 scripts/ast3.0/examples/connector.js create mode 100644 scripts/ast3.0/examples/geo-map.js create mode 100644 scripts/ast3.0/examples/interval.js create mode 100644 scripts/ast3.0/examples/line.js create mode 100644 scripts/ast3.0/examples/regression.js create mode 100644 scripts/ast3.0/examples/text.js create mode 100644 scripts/ast3.0/generator.js diff --git a/package.json b/package.json index b1f4018e6..852c83bce 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "lodash": "^4.17.20", "np": "*", "npm-run-all": "^4.1.5", - "prettier": "^2.0.2", + "prettier": "^2.8.7", "pretty-quick": "^3.0.1", "react-dev-utils": "^12.0.1", "style-loader": "^3.3.0", diff --git a/scripts/ast3.0/README.md b/scripts/ast3.0/README.md new file mode 100644 index 000000000..7aaed2a85 --- /dev/null +++ b/scripts/ast3.0/README.md @@ -0,0 +1,4 @@ + +```bash +$ node ./generator.js +``` \ No newline at end of file diff --git a/scripts/ast3.0/code-template.js b/scripts/ast3.0/code-template.js new file mode 100644 index 000000000..6b6df192b --- /dev/null +++ b/scripts/ast3.0/code-template.js @@ -0,0 +1,29 @@ +const { transformSign } = require('./core'); + +/** + * @param {object} meta + * @description 生成模板组件 + */ +const codeTemplate = (meta) => { + const { staticCode = [], config = [], chartConfig = {}, fetchURL, imported } = meta; + + let code = ''; + + staticCode.forEach((str) => { + code += `${str}\n\n`; + }); + + return ` + const imported = ${transformSign(JSON.stringify(imported, null, 2))}; + + ${code} + + const chartConfig = ${transformSign(JSON.stringify(chartConfig, null, 2))}; + + const children = ${transformSign(JSON.stringify(config, null, 2))}; + `; +}; + +module.exports = { + codeTemplate, +}; diff --git a/scripts/ast3.0/core/constants.js b/scripts/ast3.0/core/constants.js new file mode 100644 index 000000000..9cda9e18d --- /dev/null +++ b/scripts/ast3.0/core/constants.js @@ -0,0 +1,81 @@ +const { uniqBy, concat, filter, get } = require('lodash'); + +/** + * 函数标识 + * 用于标识函数做最后的解析 + * @type {string} + */ +const SIGN = '-FN-'; + +/** + * 图表类型 + * @enum {string[]} + */ +const SHAPES = [ + 'interval', + 'line', + 'point', + 'area', + 'polygon', + 'edge', + 'schema', + 'heatmap', + 'path', + 'pointStack', + 'link', + 'treemap', + 'facetRect', + 'lineX', + 'lineY', + 'geoPath', + 'text', + 'connector', +]; +/** + * 处理流程 + * @enum {string[]} + */ +const PIPELINE = [ + { key: 'data' }, + { key: 'encode' }, + { key: 'axis' }, + { key: 'legend' }, + { key: 'interaction' }, + { key: 'style' }, + { key: 'call' }, + { key: 'attr' }, + { key: 'scale' }, + { key: 'animate' }, + { key: 'coordinate' }, + { key: 'layout' }, + { + key: 'tooltip', + callback: (origin, value) => { + if (!value) { + origin['tooltip'] = value; + } else { + origin['tooltip'] = { + items: filter(concat(get(origin, ['tooltip', 'items']), value), Boolean), + }; + } + }, + }, + { + key: 'label', + callback: (origin, value) => { + origin['labels'] = filter(concat(origin['labels'], value), Boolean); + }, + }, + { + key: 'transform', + callback: (origin, value) => { + origin['transform'] = uniqBy(filter(concat(origin['transform'], value), Boolean), 'type'); + }, + }, +]; + +module.exports = { + SIGN, + SHAPES, + PIPELINE, +}; diff --git a/scripts/ast3.0/core/global.js b/scripts/ast3.0/core/global.js new file mode 100644 index 000000000..35734ab57 --- /dev/null +++ b/scripts/ast3.0/core/global.js @@ -0,0 +1,26 @@ +// global object +let GLOBALSTATE = { + staticCode: [], +}; + +const RESETGLOBAL = () => { + GLOBALSTATE = { staticCode: [] }; +}; + +const SETGLOBAL = ([start, end]) => { + GLOBALSTATE['staticCode'].push([start, end]); +}; + +const INGLOBALRANGE = ([start, end]) => { + const { staticCode } = GLOBALSTATE; + let flag = false; + for (let i = 0; i < staticCode.length; i++) { + const [s, e] = staticCode[i]; + if ((start >= s && start <= e) || (end >= s && end <= e)) { + flag = true; + } + } + return flag; +}; + +module.exports = { RESETGLOBAL, INGLOBALRANGE, SETGLOBAL }; diff --git a/scripts/ast3.0/core/index.js b/scripts/ast3.0/core/index.js new file mode 100644 index 000000000..ae9663878 --- /dev/null +++ b/scripts/ast3.0/core/index.js @@ -0,0 +1,3 @@ +const { parser, transformSign } = require('./parser'); + +module.exports = { parser, transformSign }; diff --git a/scripts/ast3.0/core/parser.js b/scripts/ast3.0/core/parser.js new file mode 100644 index 000000000..116ca466a --- /dev/null +++ b/scripts/ast3.0/core/parser.js @@ -0,0 +1,247 @@ +const fs = require('fs'); +const babel = require('@babel/core'); +const chalk = require('chalk'); +const { get, pick } = require('lodash'); +const { PIPELINE } = require('./constants'); +const { SETGLOBAL, RESETGLOBAL, INGLOBALRANGE } = require('./global'); +const { + isShape, + isNewExpression, + isMatchType, + getObjectValue, + getValue, + log, + isFetch, + transformSign, +} = require('./utils.js'); + +const meta = { + fetchURL: '', // fetch url + shape: '', // 图表类型 + imported: {}, // import 信息 + staticCode: [], // 静态代码 + config: [], // 配置项 + chartConfig: {}, // 图表配置项 + position: { min: 0, max: Infinity }, // 位置信息 + nextStatement: {}, // 下一步 + currentEnd: Infinity, // 当前结束 + code: '', // 原始代码 +}; + +// 状态重置 +const reset = () => { + RESETGLOBAL(); + Object.keys(meta).forEach((key) => { + if (key === 'position') { + meta[key] = { min: 0, max: Infinity }; + } else { + meta[key] = meta[key] instanceof Array ? [] : typeof meta[key] === 'string' ? '' : {}; + } + }); +}; + +/** + * Set config + * @param {string} key + * @param {*} node + */ +const setConfigObject = (key, node, cfg, item) => { + const { code } = meta; + const arguments = get(node, 'arguments'); + const { callback } = item; + // .transform + if (typeof callback === 'function') { + const value = getValue(get(node, 'arguments.0'), code); + callback(cfg, value); + } else { + if (arguments.length === 2) { + cfg[key] = { + ...cfg[key], + [get(node, 'arguments.0.value')]: getValue(get(node, 'arguments.1'), code), + }; + } + if (arguments.length === 1) { + const value = getValue(get(node, 'arguments.0'), code); + if (typeof value === 'object') { + cfg[key] = { + ...cfg[key], + ...value, + }; + } else { + cfg[key] = value; + } + } + } +}; + +/** + * Use static code + * @param {*} path + */ +const setStaticCode = ({ node }) => { + const { start, end } = node; + const { code } = meta; + let isStatic = true; + const content = code.slice(start, end); + PIPELINE.forEach(({ key }) => { + if (content.includes(`.${key}(`)) { + isStatic = false; + } + }); + if (INGLOBALRANGE([start, end])) { + isStatic = false; + } + // new Chart() + if (get(node, 'declarations.0.init.type') === 'NewExpression') { + isStatic = false; + } + // .render() + if (get(node, 'expression.callee.property.name') === 'render') { + isStatic = false; + } + if (isStatic) { + SETGLOBAL([start, end]); + meta.staticCode.push(code.slice(start, end)); + } +}; + +/** + * Get config + */ +const getConfig = () => meta.config[meta.config.length - 1]; + +/** + * Availabe code + * @param {numebr} start + * @param {number} end + * @description 判断当前表达式适合放入的config + */ +const availabeCode = (start, end) => { + const { min, max } = meta.position; + // 在范围内 + if (start <= min && end >= max) { + return true; + } + return false; +}; + +const getResult = () => { + return pick(meta, 'chartConfig', 'config', 'staticCode', 'imported', 'fetchURL'); +}; + +/** + * @param {string} params + * @param {string} type + * @description 解析代码,当 type 为 code 时,说明 params 是已经读取的代码,否则是文件路径 + */ +const parser = (params, type) => { + try { + reset(); + meta.config.push({}); + if (type === 'code') { + meta.code = params; + } else { + meta.code = fs.readFileSync(params, 'utf-8'); + + const visitorExpressions = { + // import 信息 + ImportDeclaration(path) { + const { node } = path; + meta.imported = { + ...meta.imported, + [get(node, 'source.value')]: get(node, 'specifiers', []).map((item) => { + return item.imported.name; + }), + }; + }, + // new Chart + NewExpression(path) { + const { node } = path; + // .chart + if (isNewExpression(node)) { + meta.chartConfig = Object.assign(meta.chartConfig, getObjectValue(get(node, 'arguments.0'), meta.code)); + } + }, + // 抽取静态代码 start end + 'FunctionDeclaration|VariableDeclaration|ExpressionStatement'(path) { + setStaticCode(path); + }, + CallExpression(path) { + const { node } = path; + const { start, end } = node; + + // .shape + if (isShape(node)) { + const shape = get(node, 'callee.property.name'); + const setMetaInfo = () => { + meta.shape = shape; + meta.position.min = start; + meta.position.max = end; + }; + if (!meta.shape) setMetaInfo(); + if (shape !== meta.shape) { + meta.config.push({}); + setMetaInfo(); + } + getConfig()['type'] = get(node, 'callee.property.name'); + } + if (isFetch(node)) { + meta.fetchURL = get(node, 'arguments.0.value'); + } + + if (end > meta.currentEnd) { + const lastConfig = getConfig(); + if (lastConfig.type) { + Object.assign(lastConfig, meta.nextStatement); + } else { + meta.chartConfig = Object.assign(meta.chartConfig, meta.nextStatement); + } + meta.nextStatement = {}; + } + + meta.currentEnd = end; + + // 通用处理逻辑 + PIPELINE.forEach((item) => { + const { key } = item; + if (isMatchType(node, key)) { + if (availabeCode(start, end)) { + setConfigObject(key, node, getConfig(), item); + } else { + setConfigObject(key, node, meta.nextStatement, item); + } + } + }); + + // recursive + // path.traverse(visitorExpressions); + }, + }; + const vistorPlugins = { + visitor: visitorExpressions, + }; + babel.transform(fs.readFileSync(params, 'utf-8'), { + plugins: [vistorPlugins], + }); + } + + const lastConfig = getConfig(); + + if (Object.keys(meta.nextStatement).length) { + Object.assign(lastConfig, meta.nextStatement); + meta.nextStatement = {}; + } + log(chalk.green(`解析成功:${params}`)); + return getResult(); + } catch (err) { + log(chalk.red(`解析出错:params: ${params}; type: ${type}`)); + log(chalk.red(`出错信息:${err}`)); + return { + hasError: true, + errMessage: err, + errPath: params, + }; + } +}; + +module.exports = { parser, transformSign }; diff --git a/scripts/ast3.0/core/utils.js b/scripts/ast3.0/core/utils.js new file mode 100644 index 000000000..1ac058874 --- /dev/null +++ b/scripts/ast3.0/core/utils.js @@ -0,0 +1,169 @@ +const { get } = require('lodash'); +const { SHAPES, SIGN } = require('./constants'); +const { SETGLOBAL } = require('./global'); + +const startRegex = new RegExp(`"${SIGN}`, 'g'); +const endRegex = new RegExp(`${SIGN}"`, 'g'); + +const log = console.log; + +/** + * nullExpression + * @param {*} node + */ +const isNullExpression = (node) => { + return node.type === 'ExpressionStatement' && !node.expression; +}; + +/** + * new表达式 + * @param {*} node + */ +const isNewExpression = (node) => { + return get(node, 'callee.name') === 'Chart'; +}; + +/** + * Match chart type + * @param {*} node + */ +const isMatchType = (node, type) => { + return get(node, 'callee.property.name') === type; +}; + +/** + * Get chart shape + * @param {*} node + */ +const isShape = (node) => { + return SHAPES.includes(get(node, 'callee.property.name')); +}; + +/** + * Is function + * @param {string} nodeType + */ +const isFunction = (nodeType) => { + return /FunctionExpression|ArrowFunctionExpression/.test(nodeType); +}; + +/** + * Use single + * @param {string} str + */ +const useSign = (str) => { + return replaceEnter(`${SIGN}${str}${SIGN}`); +}; + +/** + * Replace enter + * @param {*} str + */ +const replaceEnter = (str) => { + return str.replace(/\n/g, ' '); +}; + +/** + * isFetch + * @param {*} node + * @description 判断该表达式是否是 fetch + */ +const isFetch = (node) => { + return get(node, 'callee.name') === 'fetch'; +}; + +/** + * transform sign + * @param {string} str + * @description 解析 meta 时,去掉 SIGN + */ +const transformSign = (str) => { + return str.replace(startRegex, '').replace(endRegex, ''); +}; + +/** + * Get loop object + * @param {*} node + * @param {string} code code + */ +const getObjectValue = (node, code) => { + const { properties } = node; + const obj = {}; + properties.forEach((item) => { + const { key, value } = item; + if (isFunction(value.type)) { + // .legend('color', { labelFormatter: (d) => (d === 1 ? 'Male' : 'Female') }) + const { start, end } = value; + SETGLOBAL([start, end]); + obj[key.name] = useSign(code.slice(start, end)); + } else if (value.type === 'ArrayExpression') { + // .scale('color', { type: 'ordinal', range: ['#ca8861', '#675193'] }) + const { start, end } = value; + SETGLOBAL([start, end]); + obj[key.name] = useSign(code.slice(start, end)); + } else if (value.type === 'ObjectExpression') { + // recursive + obj[key.name] = getObjectValue(value, code); + } else { + obj[key.name] = getValue(value); + } + }); + return obj; +}; + +/** + * Get node value + * @param {*} arguments + * @param {string} code + */ +const getValue = (arguments, code = '') => { + const { start, end } = arguments; + + // .encode('y', 'frequency') + if (arguments.type === 'StringLiteral') { + return arguments.value; + } + // .encode('y', EPSILON) + if (arguments.type === 'Identifier') { + return useSign(arguments.name); + } + // .scale('y', { nice: true) + if (arguments.type === 'ObjectExpression') { + return getObjectValue(arguments, code); + } + // .encode('y', (d) => (d.sex === 1 ? -d.people : d.people)) + if (isFunction(arguments.type)) { + SETGLOBAL([start, end]); + return useSign(code.slice(start, end)); + } + /** + * .data({ + * transform: [ + * { + * type: 'filter', + * callback: (d) => d.year === 2000, + * }, + * ], + * }) + */ + if (arguments.type === 'ArrayExpression') { + SETGLOBAL([start, end]); + return useSign(code.slice(start, end)); + } + return arguments.value; +}; + +module.exports = { + isNullExpression, + isNewExpression, + isShape, + isFunction, + useSign, + replaceEnter, + getValue, + getObjectValue, + isMatchType, + log, + isFetch, + transformSign, +}; diff --git a/scripts/ast3.0/examples-parser/connector.js b/scripts/ast3.0/examples-parser/connector.js new file mode 100644 index 000000000..870018883 --- /dev/null +++ b/scripts/ast3.0/examples-parser/connector.js @@ -0,0 +1,145 @@ +const imported = { + '@antv/g2': ['Chart'], +}; + +function linkData(data) { + return data.reduce((r, d, idx) => { + if (idx > 0) { + return r.concat({ + x1: data[idx - 1].x, + x2: d.x, + value: d.isTotal ? d.end : d.start, + }); + } + return r; + }, []); +} + +function connectorData(data) { + return [ + { + x1: data[0].x, + y1: data[0].end, + x2: data[data.length - 1].x, + y2: data[data.length - 1].end, + }, + ]; +} + +const chartConfig = { + container: 'container', + theme: 'classic', + paddingBottom: 120, + paddingLeft: 60, + paddingTop: 40, + axis: { + y: { + labelFormatter: '~s', + }, + x: { + title: false, + style: { + labelTransform: 'rotate(-90)', + }, + }, + }, + data: [ + { x: 'Net Sales', value: 5085000, start: 0, end: 5085000 }, + { x: 'Cost of Sales', value: -1250450, start: 5085000, end: 3834550 }, + { x: 'Operating Expenses', value: -2350050, start: 3834550, end: 1484500 }, + { x: 'Other Income', value: 750000, start: 1484500, end: 2234500 }, + { x: 'Extraordinary Gain', value: -230050, start: 2234500, end: 2004450 }, + { x: 'Interest Expense', value: -500000, start: 2004450, end: 1504450 }, + { x: 'Taxes', value: 490000, start: 1504450, end: 1994450 }, + { x: 'Net Income', isTotal: true, value: 1994450, start: 0, end: 1994450 }, + ], +}; + +const children = [ + { + type: 'link', + tooltip: false, + style: { + lineDash: [4, 2], + stroke: '#697474', + }, + encode: { + y: 'value', + x: ['x1', 'x2'], + }, + data: { + transform: [{ type: 'custom', callback: linkData }], + }, + }, + { + type: 'connector', + tooltip: false, + style: { + stroke: '#697474', + offset: 16, + }, + labels: [ + { + text: (d) => `${d.y2 - d.y1}`, + formatter: '~s', + style: { + fontSize: 10, + dy: 2, + }, + }, + ], + encode: { + y: ['y1', 'y2'], + x: ['x1', 'x2'], + }, + data: { + transform: [{ type: 'custom', callback: connectorData }], + }, + }, + { + type: 'interval', + tooltip: { + items: [ + { + channel: 'y3', + valueFormatter: '~s', + }, + { + channel: 'y1', + valueFormatter: '~s', + }, + { + channel: 'y', + valueFormatter: '~s', + }, + ], + }, + labels: [ + { + text: 'value', + formatter: '~s', + position: (d) => (d.value > 0 ? 'top' : 'bottom'), + style: { + textBaseline: (d) => (d.value > 0 ? 'bottom' : 'top'), + fontSize: 10, + dy: (d) => (d.value > 0 ? -4 : 4), + }, + }, + ], + style: { + stroke: '#697474', + }, + encode: { + size: 24, + color: (d, idx) => (idx === 0 || d.isTotal ? 'D' : d.value > 0 ? 'P' : 'N'), + y: ['start', 'end'], + x: 'x', + }, + scale: { + color: { + domain: ['P', 'N', 'D'], + range: ['#64b5f6', '#ef6c00', '#96a6a6'], + }, + }, + }, +]; diff --git a/scripts/ast3.0/examples-parser/geo-map.js b/scripts/ast3.0/examples-parser/geo-map.js new file mode 100644 index 000000000..c6f7b95da --- /dev/null +++ b/scripts/ast3.0/examples-parser/geo-map.js @@ -0,0 +1,47 @@ +const imported = { + '@antv/g2': ['Chart', 'register'], + topojson: ['feature'], +}; + +register('data.feature', ({ name }) => { + return (data) => feature(data, data.objects[name]).features; +}); + +const chartConfig = { + container: 'container', + theme: 'classic', + autoFit: true, +}; + +const children = [ + { + type: 'geoPath', + legend: { + color: { + layout: { + justifyContent: 'center', + }, + }, + }, + encode: { + color: 'rate', + }, + scale: { + color: { + palette: 'ylGnBu', + unknown: '#fff', + }, + }, + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/us-10m.json', + transform: [ + { type: 'feature', name: 'counties' }, + { type: 'join', join: data, on: ['id', 'id'], select: ['rate'] }, + ], + }, + coordinate: { + type: 'albersUsa', + }, + }, +]; diff --git a/scripts/ast3.0/examples-parser/interval.js b/scripts/ast3.0/examples-parser/interval.js new file mode 100644 index 000000000..06f9f7840 --- /dev/null +++ b/scripts/ast3.0/examples-parser/interval.js @@ -0,0 +1,28 @@ +const imported = { + '@antv/g2': ['Chart'], +}; + +const chartConfig = { + container: 'container', + theme: 'classic', + autoFit: true, +}; + +const children = [ + { + type: 'interval', + axis: { + y: { + labelFormatter: '.0%', + }, + }, + encode: { + y: 'frequency', + x: 'letter', + }, + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv', + }, + }, +]; diff --git a/scripts/ast3.0/examples-parser/line.js b/scripts/ast3.0/examples-parser/line.js new file mode 100644 index 000000000..3ee0a2ca7 --- /dev/null +++ b/scripts/ast3.0/examples-parser/line.js @@ -0,0 +1,66 @@ +const imported = { + '@antv/g2': ['Chart'], + 'd3-regression': ['regressionExp'], +}; + +const chartConfig = { + container: 'container', + theme: 'classic', + autoFit: true, + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/exponential-regression.json', + }, +}; + +const children = [ + { + type: 'point', + axis: { + y: { + labelFormatter: '~s', + }, + }, + style: { + fillOpacity: 0.75, + }, + scale: { + y: { + domain: [0, 100000], + }, + x: { + domain: [0, 18], + }, + }, + encode: { + shape: 'point', + y: (d) => d[1], + x: (d) => d[0], + }, + }, + { + type: 'line', + tooltip: false, + labels: [ + { + text: 'y = 3477.32e^(0.18x)\nThe coefficient of determination, or R^2, is 0.998', + selector: 'last', + style: { + textAlign: 'end', + }, + }, + ], + style: { + lineWidth: 2, + stroke: '#30BF78', + }, + encode: { + shape: 'smooth', + y: (d) => d[1], + x: (d) => d[0], + }, + data: { + transform: [{ type: 'custom', callback: regressionExp() }], + }, + }, +]; diff --git a/scripts/ast3.0/examples-parser/regression.js b/scripts/ast3.0/examples-parser/regression.js new file mode 100644 index 000000000..d783df8d4 --- /dev/null +++ b/scripts/ast3.0/examples-parser/regression.js @@ -0,0 +1,71 @@ +const imported = { + '@antv/g2': ['Chart'], + 'd3-regression': ['regressionLog'], +}; + +const logRegression = regressionLog() + .x((d) => d.x) + .y((d) => d.y) + .domain([0.81, 35]); + +const chartConfig = { + container: 'container', + theme: 'classic', + autoFit: true, + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/logarithmic-regression.json', + }, +}; + +const children = [ + { + type: 'point', + axis: { + y: { + title: false, + }, + x: { + title: false, + }, + }, + style: { + fillOpacity: 0.75, + }, + scale: { + x: { + domain: [0, 35], + }, + }, + encode: { + shape: 'point', + y: 'y', + x: 'x', + }, + }, + { + type: 'line', + tooltip: false, + labels: [ + { + text: 'y = 0.881·ln(x) + 4.173\nThe coefficient of determination, or R^22, is 0.958', + selector: 'last', + style: { + textAlign: 'end', + }, + }, + ], + style: { + lineWidth: 2, + stroke: '#30BF78', + }, + encode: { + shape: 'smooth', + y: (d) => d[1], + x: (d) => d[0], + }, + data: { + transform: [{ type: 'custom', callback: logRegression }], + }, + }, +]; diff --git a/scripts/ast3.0/examples-parser/text.js b/scripts/ast3.0/examples-parser/text.js new file mode 100644 index 000000000..e69298db7 --- /dev/null +++ b/scripts/ast3.0/examples-parser/text.js @@ -0,0 +1,141 @@ +const imported = { + '@antv/g2': ['Chart'], +}; + +function linkData(data) { + return data.reduce((r, d, idx) => { + if (idx > 0) { + return r.concat({ + x1: data[idx - 1].x, + x2: d.x, + value: d.isTotal ? d.end : d.start, + }); + } + return r; + }, []); +} + +function connectorData(data) { + return [ + { + x1: data[0].x, + y1: data[0].end, + x2: data[data.length - 1].x, + y2: data[data.length - 1].end, + }, + ]; +} + +const chartConfig = { + container: 'container', + theme: 'classic', + paddingBottom: 120, + paddingLeft: 60, + paddingTop: 40, + axis: { + y: { + labelFormatter: '~s', + }, + x: { + title: false, + style: { + labelTransform: 'rotate(-90)', + }, + }, + }, + data: [ + { x: 'Net Sales', value: 5085000, start: 0, end: 5085000 }, + { x: 'Cost of Sales', value: -1250450, start: 5085000, end: 3834550 }, + { x: 'Operating Expenses', value: -2350050, start: 3834550, end: 1484500 }, + { x: 'Other Income', value: 750000, start: 1484500, end: 2234500 }, + { x: 'Extraordinary Gain', value: -230050, start: 2234500, end: 2004450 }, + { x: 'Interest Expense', value: -500000, start: 2004450, end: 1504450 }, + { x: 'Taxes', value: 490000, start: 1504450, end: 1994450 }, + { x: 'Net Income', isTotal: true, value: 1994450, start: 0, end: 1994450 }, + ], +}; + +const children = [ + { + type: 'link', + tooltip: false, + style: { + lineDash: [4, 2], + stroke: '#697474', + }, + encode: { + y: 'value', + x: ['x1', 'x2'], + }, + data: { + transform: [{ type: 'custom', callback: linkData }], + }, + }, + { + type: 'connector', + tooltip: false, + style: { + stroke: '#697474', + offset: 16, + }, + labels: [ + { + text: (d) => `${d.y2 - d.y1}`, + formatter: '~s', + style: { + fontSize: 10, + dy: 2, + }, + }, + ], + encode: { + y: ['y1', 'y2'], + x: ['x1', 'x2'], + }, + data: { + transform: [{ type: 'custom', callback: connectorData }], + }, + }, + { + type: 'interval', + tooltip: { + items: [ + { + channel: 'y1', + valueFormatter: '~s', + }, + { + channel: 'y', + valueFormatter: '~s', + }, + ], + }, + labels: [ + { + text: 'value', + formatter: '~s', + position: (d) => (d.value > 0 ? 'top' : 'bottom'), + style: { + textBaseline: (d) => (d.value > 0 ? 'bottom' : 'top'), + fontSize: 10, + dy: (d) => (d.value > 0 ? -4 : 4), + }, + }, + ], + style: { + stroke: '#697474', + }, + encode: { + size: 24, + color: (d, idx) => (idx === 0 || d.isTotal ? 'D' : d.value > 0 ? 'P' : 'N'), + y: ['start', 'end'], + x: 'x', + }, + scale: { + color: { + domain: ['P', 'N', 'D'], + range: ['#64b5f6', '#ef6c00', '#96a6a6'], + }, + }, + }, +]; diff --git a/scripts/ast3.0/examples/connector.js b/scripts/ast3.0/examples/connector.js new file mode 100644 index 000000000..937fafaea --- /dev/null +++ b/scripts/ast3.0/examples/connector.js @@ -0,0 +1,103 @@ +/** + * A recreation of this demo: https://www.anychart.com/products/anychart/gallery/Waterfall_Charts/Waterfall_Arrows.php + */ +import { Chart } from '@antv/g2'; + +const chart = new Chart({ + container: 'container', + theme: 'classic', + paddingBottom: 120, + paddingLeft: 60, + paddingTop: 40, +}); + +chart + .data([ + { x: 'Net Sales', value: 5085000, start: 0, end: 5085000 }, + { x: 'Cost of Sales', value: -1250450, start: 5085000, end: 3834550 }, + { x: 'Operating Expenses', value: -2350050, start: 3834550, end: 1484500 }, + { x: 'Other Income', value: 750000, start: 1484500, end: 2234500 }, + { x: 'Extraordinary Gain', value: -230050, start: 2234500, end: 2004450 }, + { x: 'Interest Expense', value: -500000, start: 2004450, end: 1504450 }, + { x: 'Taxes', value: 490000, start: 1504450, end: 1994450 }, + { x: 'Net Income', isTotal: true, value: 1994450, start: 0, end: 1994450 }, + ]) + .axis('x', { title: false, style: { labelTransform: 'rotate(-90)' } }) + .axis('y', { labelFormatter: '~s' }) + .legend(null); + +chart + .link() + .data({ transform: [{ type: 'custom', callback: linkData }] }) + .encode('x', ['x1', 'x2']) + .encode('y', 'value') + .style('stroke', '#697474') + .style('lineDash', [4, 2]) + .tooltip(false); + +chart + .connector() + .data({ transform: [{ type: 'custom', callback: connectorData }] }) + .encode('x', ['x1', 'x2']) + .encode('y', ['y1', 'y2']) + .label({ + text: (d) => `${d.y2 - d.y1}`, + formatter: '~s', + style: { + fontSize: 10, + dy: 2, + }, + }) + .style({ stroke: '#697474', offset: 16 }) + .tooltip(false); + +chart + .interval() + .encode('x', 'x') + .encode('y', ['start', 'end']) + .encode('color', (d, idx) => (idx === 0 || d.isTotal ? 'D' : d.value > 0 ? 'P' : 'N')) + .scale('color', { + domain: ['P', 'N', 'D'], + range: ['#64b5f6', '#ef6c00', '#96a6a6'], + }) + .encode('size', 24) + .style('stroke', '#697474') + .label({ + text: 'value', + formatter: '~s', + position: (d) => (d.value > 0 ? 'top' : 'bottom'), + style: { + textBaseline: (d) => (d.value > 0 ? 'bottom' : 'top'), + fontSize: 10, + dy: (d) => (d.value > 0 ? -4 : 4), + }, + }) + .tooltip({ channel: 'y', valueFormatter: '~s' }) + .tooltip({ channel: 'y1', valueFormatter: '~s' }) + .tooltip({ channel: 'y3', valueFormatter: '~s' }); + +chart.render(); + +// Process data. +function linkData(data) { + return data.reduce((r, d, idx) => { + if (idx > 0) { + return r.concat({ + x1: data[idx - 1].x, + x2: d.x, + value: d.isTotal ? d.end : d.start, + }); + } + return r; + }, []); +} +function connectorData(data) { + return [ + { + x1: data[0].x, + y1: data[0].end, + x2: data[data.length - 1].x, + y2: data[data.length - 1].end, + }, + ]; +} diff --git a/scripts/ast3.0/examples/geo-map.js b/scripts/ast3.0/examples/geo-map.js new file mode 100644 index 000000000..346d6cf7b --- /dev/null +++ b/scripts/ast3.0/examples/geo-map.js @@ -0,0 +1,44 @@ +/** + * A recreation of this demo: https://vega.github.io/vega-lite/examples/geo_choropleth.html + */ +import { Chart, register } from '@antv/g2'; +import { feature } from 'topojson'; + +register('data.feature', ({ name }) => { + return (data) => feature(data, data.objects[name]).features; +}); + +fetch('https://assets.antv.antgroup.com/g2/unemployment2.json') + .then((res) => res.json()) + .then((data) => { + const chart = new Chart({ + container: 'container', + theme: 'classic', + autoFit: true, + }); + + chart + .geoPath() + .coordinate({ type: 'albersUsa' }) + .data({ + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/us-10m.json', + transform: [ + { type: 'feature', name: 'counties' }, + { + type: 'join', + join: data, + on: ['id', 'id'], + select: ['rate'], + }, + ], + }) + .scale('color', { + palette: 'ylGnBu', + unknown: '#fff', + }) + .encode('color', 'rate') + .legend({ color: { layout: { justifyContent: 'center' } } }); + + chart.render(); + }); diff --git a/scripts/ast3.0/examples/interval.js b/scripts/ast3.0/examples/interval.js new file mode 100644 index 000000000..57850a5e0 --- /dev/null +++ b/scripts/ast3.0/examples/interval.js @@ -0,0 +1,22 @@ +/** + * A recreation of this demo: https://observablehq.com/@d3/bar-chart + */ +import { Chart } from '@antv/g2'; + +const chart = new Chart({ + container: 'container', + theme: 'classic', + autoFit: true, +}); + +chart + .interval() + .data({ + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv', + }) + .encode('x', 'letter') + .encode('y', 'frequency') + .axis('y', { labelFormatter: '.0%' }); + +chart.render(); diff --git a/scripts/ast3.0/examples/line.js b/scripts/ast3.0/examples/line.js new file mode 100644 index 000000000..e949f0175 --- /dev/null +++ b/scripts/ast3.0/examples/line.js @@ -0,0 +1,52 @@ +/** + * A recreation of this demo: https://echarts.apache.org/examples/zh/editor.html?c=scatter-exponential-regression + */ +import { Chart } from '@antv/g2'; +import { regressionExp } from 'd3-regression'; + +const chart = new Chart({ + container: 'container', + theme: 'classic', + autoFit: true, +}); + +chart.data({ + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/exponential-regression.json', +}); + +chart + .point() + .encode('x', (d) => d[0]) + .encode('y', (d) => d[1]) + .encode('shape', 'point') + .scale('x', { domain: [0, 18] }) + .scale('y', { domain: [0, 100000] }) + .style('fillOpacity', 0.75) + .axis('y', { labelFormatter: '~s' }); + +chart + .line() + .data({ + transform: [ + { + type: 'custom', + callback: regressionExp(), + }, + ], + }) + .encode('x', (d) => d[0]) + .encode('y', (d) => d[1]) + .encode('shape', 'smooth') + .style('stroke', '#30BF78') + .style('lineWidth', 2) + .label({ + text: 'y = 3477.32e^(0.18x)\nThe coefficient of determination, or R^2, is 0.998', + selector: 'last', + style: { + textAlign: 'end', + }, + }) + .tooltip(false); + +chart.render(); diff --git a/scripts/ast3.0/examples/regression.js b/scripts/ast3.0/examples/regression.js new file mode 100644 index 000000000..ba7d99c88 --- /dev/null +++ b/scripts/ast3.0/examples/regression.js @@ -0,0 +1,54 @@ +import { Chart } from '@antv/g2'; +import { regressionLog } from 'd3-regression'; + +const chart = new Chart({ + container: 'container', + theme: 'classic', + autoFit: true, +}); + +chart.data({ + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/logarithmic-regression.json', +}); + +chart + .point() + .encode('x', 'x') + .encode('y', 'y') + .encode('shape', 'point') + .scale('x', { domain: [0, 35] }) + .style('fillOpacity', 0.75) + .axis('x', { title: false }) + .axis('y', { title: false }); + +const logRegression = regressionLog() + .x((d) => d.x) + .y((d) => d.y) + .domain([0.81, 35]); + +chart + .line() + .data({ + transform: [ + { + type: 'custom', + callback: logRegression, + }, + ], + }) + .encode('x', (d) => d[0]) + .encode('y', (d) => d[1]) + .encode('shape', 'smooth') + .style('stroke', '#30BF78') + .style('lineWidth', 2) + .label({ + text: 'y = 0.881·ln(x) + 4.173\nThe coefficient of determination, or R^22, is 0.958', + selector: 'last', + style: { + textAlign: 'end', + }, + }) + .tooltip(false); + +chart.render(); diff --git a/scripts/ast3.0/examples/text.js b/scripts/ast3.0/examples/text.js new file mode 100644 index 000000000..8cdfbc6e6 --- /dev/null +++ b/scripts/ast3.0/examples/text.js @@ -0,0 +1,102 @@ +/** + * A recreation of this demo: https://www.anychart.com/products/anychart/gallery/Waterfall_Charts/Waterfall_Arrows.php + */ +import { Chart } from '@antv/g2'; + +const chart = new Chart({ + container: 'container', + theme: 'classic', + paddingBottom: 120, + paddingLeft: 60, + paddingTop: 40, +}); + +chart + .data([ + { x: 'Net Sales', value: 5085000, start: 0, end: 5085000 }, + { x: 'Cost of Sales', value: -1250450, start: 5085000, end: 3834550 }, + { x: 'Operating Expenses', value: -2350050, start: 3834550, end: 1484500 }, + { x: 'Other Income', value: 750000, start: 1484500, end: 2234500 }, + { x: 'Extraordinary Gain', value: -230050, start: 2234500, end: 2004450 }, + { x: 'Interest Expense', value: -500000, start: 2004450, end: 1504450 }, + { x: 'Taxes', value: 490000, start: 1504450, end: 1994450 }, + { x: 'Net Income', isTotal: true, value: 1994450, start: 0, end: 1994450 }, + ]) + .axis('x', { title: false, style: { labelTransform: 'rotate(-90)' } }) + .axis('y', { labelFormatter: '~s' }) + .legend(null); + +chart + .link() + .data({ transform: [{ type: 'custom', callback: linkData }] }) + .encode('x', ['x1', 'x2']) + .encode('y', 'value') + .style('stroke', '#697474') + .style('lineDash', [4, 2]) + .tooltip(false); + +chart + .connector() + .data({ transform: [{ type: 'custom', callback: connectorData }] }) + .encode('x', ['x1', 'x2']) + .encode('y', ['y1', 'y2']) + .label({ + text: (d) => `${d.y2 - d.y1}`, + formatter: '~s', + style: { + fontSize: 10, + dy: 2, + }, + }) + .style({ stroke: '#697474', offset: 16 }) + .tooltip(false); + +chart + .interval() + .encode('x', 'x') + .encode('y', ['start', 'end']) + .encode('color', (d, idx) => (idx === 0 || d.isTotal ? 'D' : d.value > 0 ? 'P' : 'N')) + .scale('color', { + domain: ['P', 'N', 'D'], + range: ['#64b5f6', '#ef6c00', '#96a6a6'], + }) + .encode('size', 24) + .style('stroke', '#697474') + .label({ + text: 'value', + formatter: '~s', + position: (d) => (d.value > 0 ? 'top' : 'bottom'), + style: { + textBaseline: (d) => (d.value > 0 ? 'bottom' : 'top'), + fontSize: 10, + dy: (d) => (d.value > 0 ? -4 : 4), + }, + }) + .tooltip({ channel: 'y', valueFormatter: '~s' }) + .tooltip({ channel: 'y1', valueFormatter: '~s' }); + +chart.render(); + +// Process data. +function linkData(data) { + return data.reduce((r, d, idx) => { + if (idx > 0) { + return r.concat({ + x1: data[idx - 1].x, + x2: d.x, + value: d.isTotal ? d.end : d.start, + }); + } + return r; + }, []); +} +function connectorData(data) { + return [ + { + x1: data[0].x, + y1: data[0].end, + x2: data[data.length - 1].x, + y2: data[data.length - 1].end, + }, + ]; +} diff --git a/scripts/ast3.0/generator.js b/scripts/ast3.0/generator.js new file mode 100644 index 000000000..e27bb852e --- /dev/null +++ b/scripts/ast3.0/generator.js @@ -0,0 +1,34 @@ +const fs = require('fs'); +const path = require('path'); +const prettier = require('prettier'); +const { parser } = require('./core'); +const { codeTemplate } = require('./code-template'); + +/** + * @param {string} dir 扫描目录 + * @description 递归扫描目录,调用 parser 方法解析代码,调用 codeTemplate 方法生成代码模板 + */ +const scanDir = async (dir) => { + const files = await fs.readdirSync(dir); + files.forEach(async (file) => { + const filePath = path.resolve(dir, file); + const stats = fs.statSync(filePath); + if (stats.isFile()) { + // 获取文件元信息 + const meta = parser(filePath); + // 格式化代码 + const formattedCode = prettier.format(codeTemplate(meta), { + semi: true, + singleQuote: true, + printWidth: 120, + parser: 'babel', + }); + // 示例代码生成 + fs.writeFileSync(path.resolve(__dirname, `./examples-parser/${file}`), formattedCode); + } else { + scanDir(filePath); + } + }); +}; + +scanDir(path.resolve(__dirname, './examples')); diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 09f3180a9..95845f059 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -26,8 +26,11 @@ export default defineConfig({ '0.x': 'https://v0-charts.ant.design/', }, docsearchOptions: { - apiKey: 'cd83d8f913aeb993cd93f45fdbe9b5ac', - // indexName: 'charts-ant-design', + appId: 'I1DYJKMAUK', + apiKey: '5d0fcf465bcfa6fe6ef14d1bb1b7fb0f', + indexName: 'ant-design-charts-antgroup', + // container: '### REPLACE ME WITH A CONTAINER (e.g. div) ###', + debug: false, }, navs: [ { From f4bd4278f862baa94ae34cbaf3cefbb8778bfcf0 Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Wed, 2 Aug 2023 13:44:27 +0800 Subject: [PATCH 003/268] feat: remove @antv/g2plot and more docs --- CHANGELOG.md | 394 +-------- README.md | 10 - packages/charts/package.json | 5 +- packages/charts/src/index.ts | 5 +- packages/flowchart/.babelrc | 3 - packages/flowchart/.eslintignore | 5 - packages/flowchart/.eslintrc.js | 3 - packages/flowchart/CHANGELOG.md | 31 - packages/flowchart/README.md | 173 ---- packages/flowchart/jest.config.js | 10 - packages/flowchart/jest.setup.js | 15 - packages/flowchart/package.json | 67 -- packages/flowchart/scripts/less.js | 113 --- .../flowchart/src/components/menu/index.ts | 106 --- .../src/components/toolbar/constants.ts | 38 - .../src/components/toolbar/index.tsx | 30 - .../flowchart/src/components/toolbar/util.ts | 337 -------- packages/flowchart/src/context.ts | 5 - packages/flowchart/src/graph/appendUtils.ts | 30 - packages/flowchart/src/graph/constants.ts | 12 - packages/flowchart/src/graph/index.less | 70 -- packages/flowchart/src/graph/index.tsx | 130 --- packages/flowchart/src/graph/service/cmd.ts | 24 - packages/flowchart/src/graph/service/index.ts | 2 - .../flowchart/src/graph/service/keyBinding.ts | 72 -- packages/flowchart/src/index.ts | 43 - packages/flowchart/src/interface.ts | 205 ----- packages/flowchart/src/util/global.ts | 44 - packages/flowchart/src/util/index.ts | 2 - packages/flowchart/src/util/util.ts | 90 -- .../flowchart/tests/graph/normal-spec.tsx | 127 --- packages/flowchart/tsconfig.json | 10 - packages/flowchart/tsconfig.prod.json | 4 - packages/flowchart/typings/global/index.d.ts | 4 - packages/flowchart/webpack.config.js | 3 - packages/graphs/.babelrc | 3 - packages/graphs/.eslintignore | 5 - packages/graphs/.eslintrc.js | 3 - packages/graphs/CHANGELOG.md | 142 --- packages/graphs/README.md | 284 ------ packages/graphs/jest.config.js | 8 - packages/graphs/jest.setup.js | 1 - packages/graphs/package.json | 63 -- .../behaviors/custom-click.ts | 68 -- .../behaviors/custom-hover.ts | 128 --- .../conversion-dagre-graph/behaviors/index.ts | 13 - .../constants/defaultConfig.ts | 37 - .../conversion-dagre-graph/constants/index.ts | 2 - .../constants/states.ts | 5 - .../conversion-dagre-graph/edges/baseEdge.ts | 88 -- .../edges/convCubicHorizontal.ts | 31 - .../edges/convCubicVertical.ts | 32 - .../conversion-dagre-graph/edges/convLine.ts | 20 - .../conversion-dagre-graph/edges/index.ts | 9 - .../conversion-dagre-graph/index.tsx | 308 ------- .../layout/conv-preset.ts | 11 - .../conversion-dagre-graph/layout/index.ts | 5 - .../conversion-dagre-graph/nodes/convNode.ts | 171 ---- .../conversion-dagre-graph/nodes/index.ts | 5 - .../conversion-dagre-graph/types/graph.ts | 55 -- .../conversion-dagre-graph/types/index.ts | 2 - .../types/propsAndState.ts | 66 -- .../conversion-dagre-graph/utils/edge.ts | 84 -- .../conversion-dagre-graph/utils/graph.ts | 40 - .../conversion-dagre-graph/utils/index.ts | 6 - .../conversion-dagre-graph/utils/layer.ts | 152 ---- .../conversion-dagre-graph/utils/state.ts | 236 ----- .../conversion-dagre-graph/utils/text.ts | 53 -- .../conversion-dagre-graph/utils/transform.ts | 154 ---- .../decomposition-tree-graph/events.ts | 72 -- .../decomposition-tree-graph/index.tsx | 119 --- .../components/file-tree-graph/customItem.ts | 794 ----------------- .../src/components/file-tree-graph/events.ts | 72 -- .../src/components/file-tree-graph/index.tsx | 157 ---- .../flow-analysis-graph/customItem.ts | 698 --------------- .../components/flow-analysis-graph/events.ts | 158 ---- .../components/flow-analysis-graph/index.tsx | 92 -- .../components/fund-flow-graph/customItem.ts | 277 ------ .../src/components/fund-flow-graph/index.tsx | 85 -- .../src/components/mind-map-graph/index.tsx | 117 --- .../organization-graph/customItem.ts | 180 ---- .../components/organization-graph/index.tsx | 109 --- .../src/components/radial-graph/events.ts | 78 -- .../src/components/radial-graph/index.tsx | 65 -- .../components/radial-tree-graph/index.tsx | 62 -- packages/graphs/src/constants/event.ts | 1 - packages/graphs/src/constants/index.ts | 73 -- packages/graphs/src/errorBoundary/index.tsx | 45 - packages/graphs/src/hooks/useFullscreen.ts | 64 -- packages/graphs/src/hooks/useGraphs.ts | 438 ---------- packages/graphs/src/hooks/useProps.ts | 42 - packages/graphs/src/index.ts | 43 - packages/graphs/src/interface.ts | 379 -------- packages/graphs/src/layout/index.ts | 29 - packages/graphs/src/layout/radial-sector.ts | 106 --- .../graphs/src/plugins/components/base.ts | 108 --- .../src/plugins/components/menu/index.ts | 221 ----- .../src/plugins/components/toolbar/index.tsx | 116 --- packages/graphs/src/plugins/index.ts | 5 - packages/graphs/src/plugins/menu.ts | 26 - packages/graphs/src/plugins/minimap.ts | 22 - packages/graphs/src/plugins/toolbar.tsx | 33 - packages/graphs/src/plugins/tooltip.ts | 34 - packages/graphs/src/utils/async-events.ts | 19 - packages/graphs/src/utils/chart-loading.tsx | 47 - .../graphs/src/utils/clone-besides-img.ts | 20 - .../graphs/src/utils/close-fetch-loading.ts | 8 - packages/graphs/src/utils/count-by.ts | 38 - .../graphs/src/utils/create-fetch-loading.ts | 40 - packages/graphs/src/utils/create-marker.ts | 25 - packages/graphs/src/utils/create-node.ts | 14 - packages/graphs/src/utils/deep-clone.ts | 23 - packages/graphs/src/utils/event-data.ts | 13 - .../graphs/src/utils/get-anchor-points.ts | 12 - packages/graphs/src/utils/get-arrow-cfg.ts | 29 - packages/graphs/src/utils/get-center-node.ts | 23 - .../graphs/src/utils/get-children-data.ts | 23 - packages/graphs/src/utils/get-common-cfg.ts | 22 - packages/graphs/src/utils/get-css-padding.ts | 26 - .../graphs/src/utils/get-flow-level-data.ts | 22 - packages/graphs/src/utils/get-graph-id.ts | 9 - packages/graphs/src/utils/get-graph-size.ts | 20 - .../graphs/src/utils/get-marker-position.ts | 25 - .../graphs/src/utils/get-parent-children.ts | 14 - packages/graphs/src/utils/get-size.ts | 8 - packages/graphs/src/utils/get-status-bbox.ts | 30 - packages/graphs/src/utils/get-status-cfg.ts | 47 - packages/graphs/src/utils/get-style.ts | 14 - .../graphs/src/utils/get-tree-level-data.ts | 20 - packages/graphs/src/utils/get-type.ts | 3 - packages/graphs/src/utils/global.ts | 10 - packages/graphs/src/utils/index.ts | 38 - packages/graphs/src/utils/is-type.ts | 5 - packages/graphs/src/utils/log.ts | 1 - packages/graphs/src/utils/render-graph.ts | 33 - packages/graphs/src/utils/render.ts | 105 --- packages/graphs/src/utils/set-ellipsis.ts | 23 - packages/graphs/src/utils/set-flow-tag.ts | 65 -- packages/graphs/src/utils/set-level-data.ts | 16 - packages/graphs/src/utils/set-styles.ts | 6 - packages/graphs/src/utils/set-tree-tag.ts | 18 - packages/graphs/src/utils/state-events.ts | 84 -- packages/graphs/src/utils/uuid.ts | 7 - packages/graphs/tests/data/conv-dagre.ts | 451 ---------- packages/graphs/tests/data/file-tree.ts | 139 --- packages/graphs/tests/data/flow-loop.ts | 290 ------- packages/graphs/tests/data/flow.ts | 189 ---- packages/graphs/tests/data/index.ts | 8 - packages/graphs/tests/data/org.ts | 105 --- packages/graphs/tests/data/radial-tree.ts | 20 - packages/graphs/tests/data/radial.ts | 82 -- packages/graphs/tests/data/tree.ts | 219 ----- .../tests/graphs/anchor-callback-spec.tsx | 319 ------- .../graphs/tests/graphs/chore-plugin-spec.tsx | 66 -- .../graphs/conversion-dagre-graph-spec.tsx | 46 - .../tests/graphs/edge-cfg-label-spec.tsx | 114 --- .../tests/graphs/error-boundary-spec.tsx | 74 -- .../tests/graphs/fetch-loading-spec.tsx | 119 --- .../graphs/tests/graphs/file-tree-spec.tsx | 110 --- .../tests/graphs/flow-analysis-sync-spec.tsx | 155 ---- .../graphs/tests/graphs/flow-level-spec.tsx | 156 ---- .../tests/graphs/flow-loop-edges-spec.tsx | 76 -- .../graphs/tests/graphs/fund-line-spec.tsx | 351 -------- .../tests/graphs/get-children-types-spec.tsx | 67 -- .../graphs/tests/graphs/level-fn-spec.tsx | 90 -- .../tests/graphs/marker-cfg-array-spec.tsx | 114 --- packages/graphs/tests/graphs/menu-spec.tsx | 72 -- .../graphs/tests/graphs/mind-map-spec.tsx | 243 ------ .../graphs/tests/graphs/node-explore-spec.tsx | 122 --- .../graphs/percent-badge-auto-width-spec.tsx | 157 ---- .../tests/graphs/percent-badge-spec.tsx | 231 ----- packages/graphs/tests/graphs/tooltip-spec.tsx | 97 --- .../graphs/tests/graphs/tree-level-spec.tsx | 73 -- packages/graphs/tests/issues/1077-spec.tsx | 75 -- packages/graphs/tests/issues/1286-spec.tsx | 142 --- packages/graphs/tests/issues/1291-spec.tsx | 38 - packages/graphs/tests/issues/1338-spec.tsx | 262 ------ packages/graphs/tests/issues/1441-spec.tsx | 167 ---- packages/graphs/tests/issues/1489-spec.tsx | 131 --- packages/graphs/tests/issues/1577-spec.tsx | 111 --- packages/graphs/tests/issues/1614-spec.tsx | 48 -- packages/graphs/tests/issues/1752-spec.tsx | 174 ---- packages/graphs/tests/issues/1764-spec.tsx | 73 -- packages/graphs/tests/issues/1801-spec.tsx | 387 --------- packages/graphs/tests/utils/count-by-spec.ts | 25 - .../graphs/tests/utils/deep-clone.spec.ts | 33 - packages/graphs/tests/utils/is-type-spec.ts | 13 - packages/graphs/tsconfig.json | 4 - packages/graphs/tsconfig.prod.json | 4 - packages/graphs/webpack.config.js | 3 - packages/maps/.babelrc | 3 - packages/maps/.eslintignore | 5 - packages/maps/.eslintrc.js | 3 - packages/maps/CHANGELOG.md | 24 - packages/maps/README.md | 150 ---- packages/maps/jest.config.js | 5 - packages/maps/jest.setup.js | 1 - packages/maps/package.json | 57 -- .../maps/src/components/area-map/index.tsx | 43 - .../src/components/choropleth-map/index.tsx | 43 - .../maps/src/components/dot-map/index.tsx | 43 - .../maps/src/components/flow-map/index.tsx | 43 - .../components/geographic-heatmap/index.tsx | 43 - .../maps/src/components/grid-map/index.tsx | 43 - .../maps/src/components/hexbin-map/index.tsx | 43 - .../maps/src/components/path-map/index.tsx | 43 - packages/maps/src/errorBoundary/index.tsx | 45 - packages/maps/src/hooks/useL7Plot.ts | 105 --- packages/maps/src/index.ts | 29 - packages/maps/src/types.ts | 9 - packages/maps/src/util/config.ts | 13 - packages/maps/src/util/createLoading.tsx | 49 -- packages/maps/src/util/getChart.ts | 16 - packages/maps/src/util/index.ts | 4 - packages/maps/src/util/render.ts | 105 --- packages/maps/src/util/utils.ts | 43 - packages/maps/tests/maps/heat-map.test.tsx | 65 -- .../maps/tests/utils/error-boundary.test.tsx | 43 - packages/maps/tests/utils/util.test.ts | 37 - packages/maps/tsconfig.json | 4 - packages/maps/tsconfig.prod.json | 4 - packages/maps/webpack.config.js | 3 - packages/plots/package.json | 8 +- packages/plots/src/components/base/index.tsx | 4 +- packages/plots/src/components/base/plots.ts | 1 - .../plots/src/components/column/index.tsx | 2 +- packages/plots/src/components/index.ts | 4 + packages/plots/src/components/interface.ts | 1 + packages/plots/src/components/line/index.tsx | 10 + .../plots/src/g2-core/components/index.ts | 1 + packages/plots/src/g2-core/components/mark.ts | 8 + packages/plots/src/g2-core/core/plot.ts | 208 +++++ packages/plots/src/g2-core/index.ts | 11 + packages/plots/src/g2-core/module.d.ts | 1 + .../plots/src/g2-core/plots/column/adaptor.ts | 21 + .../plots/src/g2-core/plots/column/index.ts | 33 + .../plots/src/g2-core/plots/column/type.ts | 3 + .../plots/src/g2-core/plots/line/adaptor.ts | 21 + .../plots/src/g2-core/plots/line/index.ts | 33 + packages/plots/src/g2-core/plots/line/type.ts | 3 + packages/plots/src/g2-core/types/common.ts | 10 + packages/plots/src/g2-core/types/index.ts | 3 + packages/plots/src/g2-core/utils/index.ts | 2 + .../src/g2-core/utils/is-composite-plot.ts | 6 + packages/plots/src/hooks/useChart.ts | 3 +- packages/plots/src/index.ts | 8 +- packages/plots/src/interface.ts | 4 +- scripts/ast/md-parse-l7plot.mjs | 73 -- scripts/ast/md-parse.mjs | 73 -- scripts/ast/parse.js | 252 ------ scripts/docs/l7plot.mjs | 102 --- scripts/examples/l7plot.js | 160 ---- scripts/website/build-website.sh | 2 - scripts/website/package.json | 58 -- site/.dumi/global.ts | 5 - site/.dumirc.ts | 96 +-- site/docs/api/common-graph/common-graph.en.md | 637 -------------- site/docs/api/common-graph/common-graph.zh.md | 638 -------------- site/docs/api/flowchart/flowchart-api.zh.md | 223 ----- .../api/graphs/decomposition-tree-graph.en.md | 461 ---------- .../api/graphs/decomposition-tree-graph.zh.md | 464 ---------- .../docs/api/graphs/flow-analysis-graph.en.md | 512 ----------- .../docs/api/graphs/flow-analysis-graph.zh.md | 515 ----------- site/docs/api/graphs/fund-flow-graph.en.md | 66 -- site/docs/api/graphs/fund-flow-graph.zh.md | 66 -- site/docs/api/graphs/mind-map-graph.en.md | 461 ---------- site/docs/api/graphs/mind-map-graph.zh.md | 464 ---------- site/docs/api/graphs/organization-graph.en.md | 337 -------- site/docs/api/graphs/organization-graph.zh.md | 340 -------- site/docs/api/graphs/radial-graph.en.md | 289 ------- site/docs/api/graphs/radial-graph.zh.md | 288 ------- site/docs/api/graphs/radial-tree-graph.en.md | 252 ------ site/docs/api/graphs/radial-tree-graph.zh.md | 251 ------ site/docs/map-api/advanced-plot/index.en.md | 602 ------------- site/docs/map-api/advanced-plot/index.zh.md | 597 ------------- site/docs/map-api/components/label.en.md | 111 --- site/docs/map-api/components/label.zh.md | 106 --- site/docs/map-api/components/layer-menu.en.md | 50 -- site/docs/map-api/components/layer-menu.zh.md | 45 - site/docs/map-api/components/legend.en.md | 123 --- site/docs/map-api/components/legend.zh.md | 118 --- site/docs/map-api/components/scale.en.md | 44 - site/docs/map-api/components/scale.zh.md | 39 - site/docs/map-api/components/tooltip.en.md | 154 ---- site/docs/map-api/components/tooltip.zh.md | 149 ---- site/docs/map-api/components/zoom.en.md | 44 - site/docs/map-api/components/zoom.zh.md | 39 - .../composite-layers/bubble-layer.en.md | 586 ------------- .../composite-layers/bubble-layer.zh.md | 581 ------------- .../composite-layers/choropleth-layer.en.md | 567 ------------ .../composite-layers/choropleth-layer.zh.md | 562 ------------ .../composite-layers/heatmap-layer.en.md | 529 ------------ .../composite-layers/heatmap-layer.zh.md | 524 ------------ .../map-api/composite-layers/line-layer.en.md | 566 ------------ .../map-api/composite-layers/line-layer.zh.md | 561 ------------ .../composite-layers/point-layer.en.md | 641 -------------- .../composite-layers/point-layer.zh.md | 636 -------------- .../composite-layers/polygon-layer.en.md | 550 ------------ .../composite-layers/polygon-layer.zh.md | 545 ------------ .../map-api/composite-layers/text-layer.en.md | 405 --------- .../map-api/composite-layers/text-layer.zh.md | 400 --------- site/docs/map-api/layers/arc-layer.en.md | 242 ------ site/docs/map-api/layers/arc-layer.zh.md | 237 ----- site/docs/map-api/layers/area-layer.en.md | 253 ------ site/docs/map-api/layers/area-layer.zh.md | 248 ------ .../map-api/layers/dot-density-layer.en.md | 189 ---- .../map-api/layers/dot-density-layer.zh.md | 184 ---- site/docs/map-api/layers/dot-layer.en.md | 380 --------- site/docs/map-api/layers/dot-layer.zh.md | 375 -------- site/docs/map-api/layers/grid-layer.en.md | 212 ----- site/docs/map-api/layers/grid-layer.zh.md | 207 ----- site/docs/map-api/layers/heatmap-layer.en.md | 119 --- site/docs/map-api/layers/heatmap-layer.zh.md | 114 --- site/docs/map-api/layers/hexbin-layer.en.md | 204 ----- site/docs/map-api/layers/hexbin-layer.zh.md | 199 ----- site/docs/map-api/layers/icon-layer.en.md | 293 ------- site/docs/map-api/layers/icon-layer.zh.md | 288 ------- site/docs/map-api/layers/path-layer.en.md | 203 ----- site/docs/map-api/layers/path-layer.zh.md | 198 ----- site/docs/map-api/layers/plot-layer.en.md | 214 ----- site/docs/map-api/layers/plot-layer.zh.md | 209 ----- site/docs/map-api/layers/prism-layer.en.md | 267 ------ site/docs/map-api/layers/prism-layer.zh.md | 262 ------ site/docs/map-api/layers/text-layer.en.md | 137 --- site/docs/map-api/layers/text-layer.zh.md | 132 --- site/docs/map-api/plot-api/index.en.md | 682 --------------- site/docs/map-api/plot-api/index.zh.md | 675 --------------- site/docs/map-api/plots/area.en.md | 328 ------- site/docs/map-api/plots/area.zh.md | 323 ------- site/docs/map-api/plots/choropleth.en.md | 522 ----------- site/docs/map-api/plots/choropleth.zh.md | 517 ----------- site/docs/map-api/plots/dot.en.md | 455 ---------- site/docs/map-api/plots/dot.zh.md | 450 ---------- site/docs/map-api/plots/flow.en.md | 357 -------- site/docs/map-api/plots/flow.zh.md | 352 -------- site/docs/map-api/plots/grid.en.md | 287 ------- site/docs/map-api/plots/grid.zh.md | 282 ------ site/docs/map-api/plots/heatmap.en.md | 194 ----- site/docs/map-api/plots/heatmap.zh.md | 189 ---- site/docs/map-api/plots/hexbin.en.md | 279 ------ site/docs/map-api/plots/hexbin.zh.md | 274 ------ site/docs/map-api/plots/path.en.md | 264 ------ site/docs/map-api/plots/path.zh.md | 259 ------ site/docs/map-api/source/index.en.md | 287 ------- site/docs/map-api/source/index.zh.md | 282 ------ site/docs/map-api/theme/index.en.md | 23 - site/docs/map-api/theme/index.zh.md | 18 - .../map-common/attribute/area-state.en.md | 0 .../map-common/attribute/area-state.zh.md | 85 -- .../map-common/attribute/area-style.en.md | 0 .../map-common/attribute/area-style.zh.md | 51 -- site/docs/map-common/attribute/color.en.md | 0 site/docs/map-common/attribute/color.zh.md | 66 -- .../map-common/attribute/components.en.md | 0 .../map-common/attribute/components.zh.md | 35 - .../map-common/attribute/grid-style.en.md | 0 .../map-common/attribute/grid-style.zh.md | 33 - site/docs/map-common/attribute/map.en.md | 0 site/docs/map-common/attribute/map.zh.md | 80 -- .../map-common/attribute/path-color.en.md | 0 .../map-common/attribute/path-color.zh.md | 75 -- .../attribute/path-components.en.md | 0 .../attribute/path-components.zh.md | 29 - .../docs/map-common/attribute/path-size.en.md | 0 .../docs/map-common/attribute/path-size.zh.md | 75 -- .../map-common/attribute/path-style.en.md | 0 .../map-common/attribute/path-style.zh.md | 33 - .../docs/map-common/attribute/radiation.en.md | 0 .../docs/map-common/attribute/radiation.zh.md | 38 - site/docs/map-common/attribute/scale.en.md | 0 site/docs/map-common/attribute/scale.zh.md | 10 - site/docs/map-common/attribute/size.en.md | 0 site/docs/map-common/attribute/size.zh.md | 66 -- site/docs/map-common/attribute/state.en.md | 0 site/docs/map-common/attribute/state.zh.md | 49 -- site/docs/map-common/attribute/style.en.md | 0 site/docs/map-common/attribute/style.zh.md | 33 - .../choropleth-layer/state.en.md | 0 .../choropleth-layer/state.zh.md | 77 -- .../composite-common/attribute.en.md | 0 .../composite-common/attribute.zh.md | 23 - .../composite-common/event.en.md | 0 .../composite-common/event.zh.md | 53 -- .../composite-common/method.en.md | 0 .../composite-common/method.zh.md | 119 --- .../composite-common/options.en.md | 58 -- .../composite-common/options.zh.md | 58 -- .../core-common/attribute.en.md | 0 .../core-common/attribute.zh.md | 23 - .../composite-layers/core-common/event.en.md | 0 .../composite-layers/core-common/event.zh.md | 53 -- .../composite-layers/core-common/method.en.md | 0 .../composite-layers/core-common/method.zh.md | 127 --- .../core-common/options.en.md | 58 -- .../core-common/options.zh.md | 58 -- .../heatmap-layer/shape.en.md | 0 .../heatmap-layer/shape.zh.md | 30 - .../composite-layers/heatmap-layer/size.en.md | 0 .../composite-layers/heatmap-layer/size.zh.md | 59 -- .../heatmap-layer/style.en.md | 0 .../heatmap-layer/style.zh.md | 51 -- .../composite-layers/line-layer/animate.en.md | 0 .../composite-layers/line-layer/animate.zh.md | 22 - .../composite-layers/line-layer/shape.en.md | 0 .../composite-layers/line-layer/shape.zh.md | 13 - .../composite-layers/line-layer/source.en.md | 0 .../composite-layers/line-layer/source.zh.md | 19 - .../composite-layers/line-layer/style.en.md | 0 .../composite-layers/line-layer/style.zh.md | 25 - .../point-layer/animate.en.md | 0 .../point-layer/animate.zh.md | 11 - .../composite-layers/point-layer/shape.en.md | 0 .../composite-layers/point-layer/shape.zh.md | 108 --- .../composite-layers/point-layer/source.en.md | 0 .../composite-layers/point-layer/source.zh.md | 14 - .../composite-layers/point-layer/style.en.md | 0 .../composite-layers/point-layer/style.zh.md | 21 - .../polygon-layer/shape.en.md | 0 .../polygon-layer/shape.zh.md | 8 - .../polygon-layer/source.en.md | 0 .../polygon-layer/source.zh.md | 40 - .../polygon-layer/style.en.md | 0 .../polygon-layer/style.zh.md | 17 - .../composite-layers/text-layer/style.en.md | 0 .../composite-layers/text-layer/style.zh.md | 36 - .../map-common/layers/arc-layer/shape.en.md | 0 .../map-common/layers/arc-layer/shape.zh.md | 13 - .../map-common/layers/arc-layer/size.en.md | 0 .../map-common/layers/arc-layer/size.zh.md | 66 -- .../map-common/layers/arc-layer/style.en.md | 0 .../map-common/layers/arc-layer/style.zh.md | 25 - .../map-common/layers/area-layer/source.en.md | 0 .../map-common/layers/area-layer/source.zh.md | 40 - .../map-common/layers/area-layer/state.en.md | 0 .../map-common/layers/area-layer/state.zh.md | 81 -- .../map-common/layers/area-layer/style.en.md | 0 .../map-common/layers/area-layer/style.zh.md | 27 - .../map-common/layers/dot-layer/animate.en.md | 0 .../map-common/layers/dot-layer/animate.zh.md | 17 - .../map-common/layers/dot-layer/shape.en.md | 0 .../map-common/layers/dot-layer/shape.zh.md | 108 --- .../map-common/layers/dot-layer/size.en.md | 0 .../map-common/layers/dot-layer/size.zh.md | 66 -- .../map-common/layers/dot-layer/source.en.md | 0 .../map-common/layers/dot-layer/source.zh.md | 14 - .../map-common/layers/dot-layer/style.en.md | 0 .../map-common/layers/dot-layer/style.zh.md | 21 - .../map-common/layers/grid-layer/shape.en.md | 0 .../map-common/layers/grid-layer/shape.zh.md | 20 - .../map-common/layers/grid-layer/size.en.md | 0 .../map-common/layers/grid-layer/size.zh.md | 41 - .../map-common/layers/grid-layer/source.en.md | 0 .../map-common/layers/grid-layer/source.zh.md | 29 - .../map-common/layers/grid-layer/style.en.md | 0 .../map-common/layers/grid-layer/style.zh.md | 21 - .../layers/heatmap-layer/shape.en.md | 0 .../layers/heatmap-layer/shape.zh.md | 12 - .../layers/heatmap-layer/size.en.md | 0 .../layers/heatmap-layer/size.zh.md | 23 - .../layers/heatmap-layer/style.en.md | 0 .../layers/heatmap-layer/style.zh.md | 37 - .../layers/hexbin-layer/shape.en.md | 0 .../layers/hexbin-layer/shape.zh.md | 12 - .../layers/lines-layer/animate.en.md | 0 .../layers/lines-layer/animate.zh.md | 22 - .../map-common/layers/path-layer/size.en.md | 0 .../map-common/layers/path-layer/size.zh.md | 62 -- .../map-common/layers/path-layer/source.en.md | 0 .../map-common/layers/path-layer/source.zh.md | 19 - .../map-common/layers/path-layer/style.en.md | 0 .../map-common/layers/path-layer/style.zh.md | 23 - .../map-common/layers/text-layer/style.en.md | 0 .../map-common/layers/text-layer/style.zh.md | 36 - site/examples/flowchart/basic/API.en.md | 1 - site/examples/flowchart/basic/API.zh.md | 1 - site/examples/flowchart/basic/demo/basic.js | 70 -- .../flowchart/basic/demo/complex-form.js | 267 ------ .../flowchart/basic/demo/custom-form.js | 173 ---- .../flowchart/basic/demo/custom-node.js | 114 --- site/examples/flowchart/basic/demo/meta.json | 48 -- site/examples/flowchart/basic/demo/read.js | 807 ------------------ site/examples/flowchart/basic/index.en.md | 4 - site/examples/flowchart/basic/index.zh.md | 5 - site/examples/line/basic/API.en.md | 1 + site/examples/line/basic/API.zh.md | 1 + site/examples/line/basic/demo/basic.js | 23 + .../basic}/demo/meta.json | 6 +- site/examples/line/basic/design.en.md | 29 + site/examples/line/basic/design.zh.md | 29 + site/examples/line/basic/index.en.md | 4 + site/examples/line/basic/index.zh.md | 6 + .../map-advanced-plot/muti-layers/API.en.md | 1 - .../map-advanced-plot/muti-layers/API.zh.md | 1 - .../muti-layers/demo/meta.json | 16 - .../muti-layers/demo/wind-field.js | 67 -- .../map-advanced-plot/muti-layers/index.en.md | 4 - .../map-advanced-plot/muti-layers/index.zh.md | 4 - site/examples/map-area/division/API.en.md | 1 - site/examples/map-area/division/API.zh.md | 1 - .../map-area/division/demo/europe-pop-est.js | 78 -- .../examples/map-area/division/demo/meta.json | 24 - .../division/demo/us-states-density.js | 78 -- site/examples/map-area/division/index.en.md | 4 - site/examples/map-area/division/index.zh.md | 4 - site/examples/map-area/interactive/API.en.md | 1 - site/examples/map-area/interactive/API.zh.md | 1 - .../map-area/interactive/demo/meta.json | 24 - .../interactive/demo/multiple-choice.js | 93 -- .../interactive/demo/single-choice.js | 78 -- .../examples/map-area/interactive/index.en.md | 4 - .../examples/map-area/interactive/index.zh.md | 4 - site/examples/map-dot/bobble/API.en.md | 1 - site/examples/map-dot/bobble/API.zh.md | 1 - .../map-dot/bobble/demo/air-temperature.js | 112 --- site/examples/map-dot/bobble/demo/animate.js | 70 -- .../bobble/demo/distribution-cities.js | 70 -- .../map-dot/bobble/demo/earthquake-level.js | 75 -- site/examples/map-dot/bobble/demo/meta.json | 40 - site/examples/map-dot/bobble/index.en.md | 6 - site/examples/map-dot/bobble/index.zh.md | 6 - site/examples/map-dot/dot-density/API.en.md | 1 - site/examples/map-dot/dot-density/API.zh.md | 1 - .../dot-density/demo/beijing-traffic.js | 75 -- .../dot-density/demo/cuisine-nationwide.js | 49 -- .../map-dot/dot-density/demo/meta.json | 32 - .../dot-density/demo/shanghai-traffic.js | 59 -- site/examples/map-dot/dot-density/index.en.md | 10 - site/examples/map-dot/dot-density/index.zh.md | 10 - site/examples/map-dot/icon/API.en.md | 1 - site/examples/map-dot/icon/API.zh.md | 1 - site/examples/map-dot/icon/demo/bank.js | 86 -- site/examples/map-dot/icon/demo/meta.json | 24 - site/examples/map-dot/icon/demo/poi.js | 62 -- site/examples/map-dot/icon/index.en.md | 4 - site/examples/map-dot/icon/index.zh.md | 4 - site/examples/map-dot/map-scatter/API.en.md | 1 - site/examples/map-dot/map-scatter/API.zh.md | 1 - .../map-scatter/demo/classified-scatter.js | 89 -- .../map-scatter/demo/distribution-cities.js | 100 --- .../map-dot/map-scatter/demo/meta.json | 24 - site/examples/map-dot/map-scatter/index.en.md | 4 - site/examples/map-dot/map-scatter/index.zh.md | 4 - site/examples/map-heat/grid/API.en.md | 1 - site/examples/map-heat/grid/API.zh.md | 1 - site/examples/map-heat/grid/demo/grid2d.js | 58 -- site/examples/map-heat/grid/demo/grid3d.js | 77 -- site/examples/map-heat/grid/demo/meta.json | 24 - site/examples/map-heat/grid/index.en.md | 4 - site/examples/map-heat/grid/index.zh.md | 4 - site/examples/map-heat/heatmap/API.en.md | 1 - site/examples/map-heat/heatmap/API.zh.md | 1 - .../map-heat/heatmap/demo/global-2d.js | 79 -- .../map-heat/heatmap/demo/global-3d.js | 46 - .../heatmap/demo/housing-transaction.js | 80 -- site/examples/map-heat/heatmap/demo/meta.json | 40 - .../map-heat/heatmap/demo/traffic-accident.js | 47 - site/examples/map-heat/heatmap/index.en.md | 4 - site/examples/map-heat/heatmap/index.zh.md | 4 - site/examples/map-heat/hexbin/API.en.md | 1 - site/examples/map-heat/hexbin/API.zh.md | 1 - .../examples/map-heat/hexbin/demo/hexbin3d.js | 78 -- site/examples/map-heat/hexbin/demo/meta.json | 24 - .../map-heat/hexbin/demo/traffic-delay.js | 60 -- site/examples/map-heat/hexbin/index.en.md | 4 - site/examples/map-heat/hexbin/index.zh.md | 4 - .../decomposition-tree-graph/API.en.md | 1 - .../decomposition-tree-graph/API.zh.md | 1 - .../demo/async-load.js | 147 ---- .../demo/auto-width.js | 117 --- .../decomposition-tree-graph/demo/basic.js | 112 --- .../decomposition-tree-graph/demo/layout.js | 124 --- .../demo/line-style.js | 158 ---- .../decomposition-tree-graph/demo/meta.json | 72 -- .../demo/no-stroke.js | 158 ---- .../decomposition-tree-graph/demo/percent.js | 199 ----- .../decomposition-tree-graph/demo/style.js | 150 ---- .../decomposition-tree-graph/index.en.md | 4 - .../decomposition-tree-graph/index.zh.md | 4 - .../flow-analysis-graph/API.en.md | 1 - .../flow-analysis-graph/API.zh.md | 1 - .../flow-analysis-graph/demo/basic.js | 288 ------- .../flow-analysis-graph/demo/custom.js | 221 ----- .../flow-analysis-graph/demo/layout.js | 234 ----- .../flow-analysis-graph/demo/line-style.js | 288 ------- .../flow-analysis-graph/demo/meta.json | 56 -- .../flow-analysis-graph/demo/state.js | 299 ------- .../flow-analysis-graph/demo/type.js | 299 ------- .../flow-analysis-graph/index.en.md | 4 - .../flow-analysis-graph/index.zh.md | 4 - .../relation-graph/fund-flow-graph/API.en.md | 1 - .../relation-graph/fund-flow-graph/API.zh.md | 1 - .../fund-flow-graph/demo/basic.js | 99 --- .../fund-flow-graph/demo/meta.json | 24 - .../fund-flow-graph/demo/style.js | 135 --- .../fund-flow-graph/index.en.md | 4 - .../fund-flow-graph/index.zh.md | 4 - .../relation-graph/mind-map-graph/API.en.md | 1 - .../relation-graph/mind-map-graph/API.zh.md | 1 - .../mind-map-graph/demo/basic.js | 279 ------ .../relation-graph/mind-map-graph/index.en.md | 4 - .../relation-graph/mind-map-graph/index.zh.md | 4 - .../organization-graph/API.en.md | 1 - .../organization-graph/API.zh.md | 1 - .../organization-graph/demo/basic.js | 112 --- .../organization-graph/demo/custom.js | 320 ------- .../organization-graph/demo/meta.json | 32 - .../organization-graph/demo/style.js | 141 --- .../organization-graph/index.en.md | 4 - .../organization-graph/index.zh.md | 4 - .../relation-graph/radial-graph/API.en.md | 1 - .../relation-graph/radial-graph/API.zh.md | 1 - .../relation-graph/radial-graph/demo/basic.js | 179 ---- .../radial-graph/demo/meta.json | 16 - .../relation-graph/radial-graph/index.en.md | 4 - .../relation-graph/radial-graph/index.zh.md | 4 - .../radial-tree-graph/API.en.md | 1 - .../radial-tree-graph/API.zh.md | 1 - .../radial-tree-graph/demo/basic.js | 87 -- .../radial-tree-graph/demo/layout.js | 107 --- .../radial-tree-graph/demo/meta.json | 32 - .../radial-tree-graph/demo/style.js | 167 ---- .../radial-tree-graph/index.en.md | 4 - .../radial-tree-graph/index.zh.md | 4 - site/package.json | 3 +- template/chart/index.ejs | 76 +- template/doc/demo.ejs | 2 +- 626 files changed, 537 insertions(+), 58464 deletions(-) delete mode 100644 packages/flowchart/.babelrc delete mode 100644 packages/flowchart/.eslintignore delete mode 100644 packages/flowchart/.eslintrc.js delete mode 100644 packages/flowchart/CHANGELOG.md delete mode 100644 packages/flowchart/README.md delete mode 100644 packages/flowchart/jest.config.js delete mode 100644 packages/flowchart/jest.setup.js delete mode 100644 packages/flowchart/package.json delete mode 100644 packages/flowchart/scripts/less.js delete mode 100644 packages/flowchart/src/components/menu/index.ts delete mode 100644 packages/flowchart/src/components/toolbar/constants.ts delete mode 100644 packages/flowchart/src/components/toolbar/index.tsx delete mode 100644 packages/flowchart/src/components/toolbar/util.ts delete mode 100644 packages/flowchart/src/context.ts delete mode 100644 packages/flowchart/src/graph/appendUtils.ts delete mode 100644 packages/flowchart/src/graph/constants.ts delete mode 100644 packages/flowchart/src/graph/index.less delete mode 100644 packages/flowchart/src/graph/index.tsx delete mode 100644 packages/flowchart/src/graph/service/cmd.ts delete mode 100644 packages/flowchart/src/graph/service/index.ts delete mode 100644 packages/flowchart/src/graph/service/keyBinding.ts delete mode 100644 packages/flowchart/src/index.ts delete mode 100644 packages/flowchart/src/interface.ts delete mode 100644 packages/flowchart/src/util/global.ts delete mode 100644 packages/flowchart/src/util/index.ts delete mode 100644 packages/flowchart/src/util/util.ts delete mode 100644 packages/flowchart/tests/graph/normal-spec.tsx delete mode 100644 packages/flowchart/tsconfig.json delete mode 100644 packages/flowchart/tsconfig.prod.json delete mode 100644 packages/flowchart/typings/global/index.d.ts delete mode 100644 packages/flowchart/webpack.config.js delete mode 100644 packages/graphs/.babelrc delete mode 100644 packages/graphs/.eslintignore delete mode 100644 packages/graphs/.eslintrc.js delete mode 100644 packages/graphs/CHANGELOG.md delete mode 100644 packages/graphs/README.md delete mode 100644 packages/graphs/jest.config.js delete mode 100644 packages/graphs/jest.setup.js delete mode 100644 packages/graphs/package.json delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/behaviors/custom-click.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/behaviors/custom-hover.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/behaviors/index.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/constants/defaultConfig.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/constants/index.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/constants/states.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/edges/baseEdge.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/edges/convCubicHorizontal.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/edges/convCubicVertical.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/edges/convLine.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/edges/index.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/index.tsx delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/layout/conv-preset.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/layout/index.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/nodes/convNode.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/nodes/index.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/types/graph.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/types/index.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/types/propsAndState.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/utils/edge.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/utils/graph.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/utils/index.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/utils/layer.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/utils/state.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/utils/text.ts delete mode 100644 packages/graphs/src/components/conversion-dagre-graph/utils/transform.ts delete mode 100644 packages/graphs/src/components/decomposition-tree-graph/events.ts delete mode 100644 packages/graphs/src/components/decomposition-tree-graph/index.tsx delete mode 100644 packages/graphs/src/components/file-tree-graph/customItem.ts delete mode 100644 packages/graphs/src/components/file-tree-graph/events.ts delete mode 100644 packages/graphs/src/components/file-tree-graph/index.tsx delete mode 100644 packages/graphs/src/components/flow-analysis-graph/customItem.ts delete mode 100644 packages/graphs/src/components/flow-analysis-graph/events.ts delete mode 100644 packages/graphs/src/components/flow-analysis-graph/index.tsx delete mode 100644 packages/graphs/src/components/fund-flow-graph/customItem.ts delete mode 100644 packages/graphs/src/components/fund-flow-graph/index.tsx delete mode 100644 packages/graphs/src/components/mind-map-graph/index.tsx delete mode 100644 packages/graphs/src/components/organization-graph/customItem.ts delete mode 100644 packages/graphs/src/components/organization-graph/index.tsx delete mode 100644 packages/graphs/src/components/radial-graph/events.ts delete mode 100644 packages/graphs/src/components/radial-graph/index.tsx delete mode 100644 packages/graphs/src/components/radial-tree-graph/index.tsx delete mode 100644 packages/graphs/src/constants/event.ts delete mode 100644 packages/graphs/src/constants/index.ts delete mode 100644 packages/graphs/src/errorBoundary/index.tsx delete mode 100644 packages/graphs/src/hooks/useFullscreen.ts delete mode 100644 packages/graphs/src/hooks/useGraphs.ts delete mode 100644 packages/graphs/src/hooks/useProps.ts delete mode 100644 packages/graphs/src/index.ts delete mode 100644 packages/graphs/src/interface.ts delete mode 100644 packages/graphs/src/layout/index.ts delete mode 100644 packages/graphs/src/layout/radial-sector.ts delete mode 100644 packages/graphs/src/plugins/components/base.ts delete mode 100644 packages/graphs/src/plugins/components/menu/index.ts delete mode 100644 packages/graphs/src/plugins/components/toolbar/index.tsx delete mode 100644 packages/graphs/src/plugins/index.ts delete mode 100644 packages/graphs/src/plugins/menu.ts delete mode 100644 packages/graphs/src/plugins/minimap.ts delete mode 100644 packages/graphs/src/plugins/toolbar.tsx delete mode 100644 packages/graphs/src/plugins/tooltip.ts delete mode 100644 packages/graphs/src/utils/async-events.ts delete mode 100644 packages/graphs/src/utils/chart-loading.tsx delete mode 100644 packages/graphs/src/utils/clone-besides-img.ts delete mode 100644 packages/graphs/src/utils/close-fetch-loading.ts delete mode 100644 packages/graphs/src/utils/count-by.ts delete mode 100644 packages/graphs/src/utils/create-fetch-loading.ts delete mode 100644 packages/graphs/src/utils/create-marker.ts delete mode 100644 packages/graphs/src/utils/create-node.ts delete mode 100644 packages/graphs/src/utils/deep-clone.ts delete mode 100644 packages/graphs/src/utils/event-data.ts delete mode 100644 packages/graphs/src/utils/get-anchor-points.ts delete mode 100644 packages/graphs/src/utils/get-arrow-cfg.ts delete mode 100644 packages/graphs/src/utils/get-center-node.ts delete mode 100644 packages/graphs/src/utils/get-children-data.ts delete mode 100644 packages/graphs/src/utils/get-common-cfg.ts delete mode 100644 packages/graphs/src/utils/get-css-padding.ts delete mode 100644 packages/graphs/src/utils/get-flow-level-data.ts delete mode 100644 packages/graphs/src/utils/get-graph-id.ts delete mode 100644 packages/graphs/src/utils/get-graph-size.ts delete mode 100644 packages/graphs/src/utils/get-marker-position.ts delete mode 100644 packages/graphs/src/utils/get-parent-children.ts delete mode 100644 packages/graphs/src/utils/get-size.ts delete mode 100644 packages/graphs/src/utils/get-status-bbox.ts delete mode 100644 packages/graphs/src/utils/get-status-cfg.ts delete mode 100644 packages/graphs/src/utils/get-style.ts delete mode 100644 packages/graphs/src/utils/get-tree-level-data.ts delete mode 100644 packages/graphs/src/utils/get-type.ts delete mode 100644 packages/graphs/src/utils/global.ts delete mode 100644 packages/graphs/src/utils/index.ts delete mode 100644 packages/graphs/src/utils/is-type.ts delete mode 100644 packages/graphs/src/utils/log.ts delete mode 100644 packages/graphs/src/utils/render-graph.ts delete mode 100644 packages/graphs/src/utils/render.ts delete mode 100644 packages/graphs/src/utils/set-ellipsis.ts delete mode 100644 packages/graphs/src/utils/set-flow-tag.ts delete mode 100644 packages/graphs/src/utils/set-level-data.ts delete mode 100644 packages/graphs/src/utils/set-styles.ts delete mode 100644 packages/graphs/src/utils/set-tree-tag.ts delete mode 100644 packages/graphs/src/utils/state-events.ts delete mode 100644 packages/graphs/src/utils/uuid.ts delete mode 100644 packages/graphs/tests/data/conv-dagre.ts delete mode 100644 packages/graphs/tests/data/file-tree.ts delete mode 100644 packages/graphs/tests/data/flow-loop.ts delete mode 100644 packages/graphs/tests/data/flow.ts delete mode 100644 packages/graphs/tests/data/index.ts delete mode 100644 packages/graphs/tests/data/org.ts delete mode 100644 packages/graphs/tests/data/radial-tree.ts delete mode 100644 packages/graphs/tests/data/radial.ts delete mode 100644 packages/graphs/tests/data/tree.ts delete mode 100644 packages/graphs/tests/graphs/anchor-callback-spec.tsx delete mode 100644 packages/graphs/tests/graphs/chore-plugin-spec.tsx delete mode 100644 packages/graphs/tests/graphs/conversion-dagre-graph-spec.tsx delete mode 100644 packages/graphs/tests/graphs/edge-cfg-label-spec.tsx delete mode 100644 packages/graphs/tests/graphs/error-boundary-spec.tsx delete mode 100644 packages/graphs/tests/graphs/fetch-loading-spec.tsx delete mode 100644 packages/graphs/tests/graphs/file-tree-spec.tsx delete mode 100644 packages/graphs/tests/graphs/flow-analysis-sync-spec.tsx delete mode 100644 packages/graphs/tests/graphs/flow-level-spec.tsx delete mode 100644 packages/graphs/tests/graphs/flow-loop-edges-spec.tsx delete mode 100644 packages/graphs/tests/graphs/fund-line-spec.tsx delete mode 100644 packages/graphs/tests/graphs/get-children-types-spec.tsx delete mode 100644 packages/graphs/tests/graphs/level-fn-spec.tsx delete mode 100644 packages/graphs/tests/graphs/marker-cfg-array-spec.tsx delete mode 100644 packages/graphs/tests/graphs/menu-spec.tsx delete mode 100644 packages/graphs/tests/graphs/mind-map-spec.tsx delete mode 100644 packages/graphs/tests/graphs/node-explore-spec.tsx delete mode 100644 packages/graphs/tests/graphs/percent-badge-auto-width-spec.tsx delete mode 100644 packages/graphs/tests/graphs/percent-badge-spec.tsx delete mode 100644 packages/graphs/tests/graphs/tooltip-spec.tsx delete mode 100644 packages/graphs/tests/graphs/tree-level-spec.tsx delete mode 100644 packages/graphs/tests/issues/1077-spec.tsx delete mode 100644 packages/graphs/tests/issues/1286-spec.tsx delete mode 100644 packages/graphs/tests/issues/1291-spec.tsx delete mode 100644 packages/graphs/tests/issues/1338-spec.tsx delete mode 100644 packages/graphs/tests/issues/1441-spec.tsx delete mode 100644 packages/graphs/tests/issues/1489-spec.tsx delete mode 100644 packages/graphs/tests/issues/1577-spec.tsx delete mode 100644 packages/graphs/tests/issues/1614-spec.tsx delete mode 100644 packages/graphs/tests/issues/1752-spec.tsx delete mode 100644 packages/graphs/tests/issues/1764-spec.tsx delete mode 100644 packages/graphs/tests/issues/1801-spec.tsx delete mode 100644 packages/graphs/tests/utils/count-by-spec.ts delete mode 100644 packages/graphs/tests/utils/deep-clone.spec.ts delete mode 100644 packages/graphs/tests/utils/is-type-spec.ts delete mode 100644 packages/graphs/tsconfig.json delete mode 100644 packages/graphs/tsconfig.prod.json delete mode 100644 packages/graphs/webpack.config.js delete mode 100644 packages/maps/.babelrc delete mode 100644 packages/maps/.eslintignore delete mode 100644 packages/maps/.eslintrc.js delete mode 100644 packages/maps/CHANGELOG.md delete mode 100644 packages/maps/README.md delete mode 100644 packages/maps/jest.config.js delete mode 100644 packages/maps/jest.setup.js delete mode 100644 packages/maps/package.json delete mode 100644 packages/maps/src/components/area-map/index.tsx delete mode 100644 packages/maps/src/components/choropleth-map/index.tsx delete mode 100644 packages/maps/src/components/dot-map/index.tsx delete mode 100644 packages/maps/src/components/flow-map/index.tsx delete mode 100644 packages/maps/src/components/geographic-heatmap/index.tsx delete mode 100644 packages/maps/src/components/grid-map/index.tsx delete mode 100644 packages/maps/src/components/hexbin-map/index.tsx delete mode 100644 packages/maps/src/components/path-map/index.tsx delete mode 100644 packages/maps/src/errorBoundary/index.tsx delete mode 100644 packages/maps/src/hooks/useL7Plot.ts delete mode 100644 packages/maps/src/index.ts delete mode 100644 packages/maps/src/types.ts delete mode 100644 packages/maps/src/util/config.ts delete mode 100644 packages/maps/src/util/createLoading.tsx delete mode 100644 packages/maps/src/util/getChart.ts delete mode 100644 packages/maps/src/util/index.ts delete mode 100644 packages/maps/src/util/render.ts delete mode 100644 packages/maps/src/util/utils.ts delete mode 100644 packages/maps/tests/maps/heat-map.test.tsx delete mode 100644 packages/maps/tests/utils/error-boundary.test.tsx delete mode 100644 packages/maps/tests/utils/util.test.ts delete mode 100644 packages/maps/tsconfig.json delete mode 100644 packages/maps/tsconfig.prod.json delete mode 100644 packages/maps/webpack.config.js delete mode 100644 packages/plots/src/components/base/plots.ts create mode 100644 packages/plots/src/components/index.ts create mode 100644 packages/plots/src/components/line/index.tsx create mode 100644 packages/plots/src/g2-core/components/index.ts create mode 100644 packages/plots/src/g2-core/components/mark.ts create mode 100644 packages/plots/src/g2-core/core/plot.ts create mode 100644 packages/plots/src/g2-core/index.ts create mode 100644 packages/plots/src/g2-core/module.d.ts create mode 100644 packages/plots/src/g2-core/plots/column/adaptor.ts create mode 100644 packages/plots/src/g2-core/plots/column/index.ts create mode 100644 packages/plots/src/g2-core/plots/column/type.ts create mode 100644 packages/plots/src/g2-core/plots/line/adaptor.ts create mode 100644 packages/plots/src/g2-core/plots/line/index.ts create mode 100644 packages/plots/src/g2-core/plots/line/type.ts create mode 100644 packages/plots/src/g2-core/types/common.ts create mode 100644 packages/plots/src/g2-core/types/index.ts create mode 100644 packages/plots/src/g2-core/utils/index.ts create mode 100644 packages/plots/src/g2-core/utils/is-composite-plot.ts delete mode 100644 scripts/ast/md-parse-l7plot.mjs delete mode 100644 scripts/ast/md-parse.mjs delete mode 100644 scripts/ast/parse.js delete mode 100644 scripts/docs/l7plot.mjs delete mode 100644 scripts/examples/l7plot.js delete mode 100644 scripts/website/package.json delete mode 100644 site/docs/api/common-graph/common-graph.en.md delete mode 100644 site/docs/api/common-graph/common-graph.zh.md delete mode 100644 site/docs/api/flowchart/flowchart-api.zh.md delete mode 100644 site/docs/api/graphs/decomposition-tree-graph.en.md delete mode 100644 site/docs/api/graphs/decomposition-tree-graph.zh.md delete mode 100644 site/docs/api/graphs/flow-analysis-graph.en.md delete mode 100644 site/docs/api/graphs/flow-analysis-graph.zh.md delete mode 100644 site/docs/api/graphs/fund-flow-graph.en.md delete mode 100644 site/docs/api/graphs/fund-flow-graph.zh.md delete mode 100644 site/docs/api/graphs/mind-map-graph.en.md delete mode 100644 site/docs/api/graphs/mind-map-graph.zh.md delete mode 100644 site/docs/api/graphs/organization-graph.en.md delete mode 100644 site/docs/api/graphs/organization-graph.zh.md delete mode 100644 site/docs/api/graphs/radial-graph.en.md delete mode 100644 site/docs/api/graphs/radial-graph.zh.md delete mode 100644 site/docs/api/graphs/radial-tree-graph.en.md delete mode 100644 site/docs/api/graphs/radial-tree-graph.zh.md delete mode 100644 site/docs/map-api/advanced-plot/index.en.md delete mode 100644 site/docs/map-api/advanced-plot/index.zh.md delete mode 100644 site/docs/map-api/components/label.en.md delete mode 100644 site/docs/map-api/components/label.zh.md delete mode 100644 site/docs/map-api/components/layer-menu.en.md delete mode 100644 site/docs/map-api/components/layer-menu.zh.md delete mode 100644 site/docs/map-api/components/legend.en.md delete mode 100644 site/docs/map-api/components/legend.zh.md delete mode 100644 site/docs/map-api/components/scale.en.md delete mode 100644 site/docs/map-api/components/scale.zh.md delete mode 100644 site/docs/map-api/components/tooltip.en.md delete mode 100644 site/docs/map-api/components/tooltip.zh.md delete mode 100644 site/docs/map-api/components/zoom.en.md delete mode 100644 site/docs/map-api/components/zoom.zh.md delete mode 100644 site/docs/map-api/composite-layers/bubble-layer.en.md delete mode 100644 site/docs/map-api/composite-layers/bubble-layer.zh.md delete mode 100644 site/docs/map-api/composite-layers/choropleth-layer.en.md delete mode 100644 site/docs/map-api/composite-layers/choropleth-layer.zh.md delete mode 100644 site/docs/map-api/composite-layers/heatmap-layer.en.md delete mode 100644 site/docs/map-api/composite-layers/heatmap-layer.zh.md delete mode 100644 site/docs/map-api/composite-layers/line-layer.en.md delete mode 100644 site/docs/map-api/composite-layers/line-layer.zh.md delete mode 100644 site/docs/map-api/composite-layers/point-layer.en.md delete mode 100644 site/docs/map-api/composite-layers/point-layer.zh.md delete mode 100644 site/docs/map-api/composite-layers/polygon-layer.en.md delete mode 100644 site/docs/map-api/composite-layers/polygon-layer.zh.md delete mode 100644 site/docs/map-api/composite-layers/text-layer.en.md delete mode 100644 site/docs/map-api/composite-layers/text-layer.zh.md delete mode 100644 site/docs/map-api/layers/arc-layer.en.md delete mode 100644 site/docs/map-api/layers/arc-layer.zh.md delete mode 100644 site/docs/map-api/layers/area-layer.en.md delete mode 100644 site/docs/map-api/layers/area-layer.zh.md delete mode 100644 site/docs/map-api/layers/dot-density-layer.en.md delete mode 100644 site/docs/map-api/layers/dot-density-layer.zh.md delete mode 100644 site/docs/map-api/layers/dot-layer.en.md delete mode 100644 site/docs/map-api/layers/dot-layer.zh.md delete mode 100644 site/docs/map-api/layers/grid-layer.en.md delete mode 100644 site/docs/map-api/layers/grid-layer.zh.md delete mode 100644 site/docs/map-api/layers/heatmap-layer.en.md delete mode 100644 site/docs/map-api/layers/heatmap-layer.zh.md delete mode 100644 site/docs/map-api/layers/hexbin-layer.en.md delete mode 100644 site/docs/map-api/layers/hexbin-layer.zh.md delete mode 100644 site/docs/map-api/layers/icon-layer.en.md delete mode 100644 site/docs/map-api/layers/icon-layer.zh.md delete mode 100644 site/docs/map-api/layers/path-layer.en.md delete mode 100644 site/docs/map-api/layers/path-layer.zh.md delete mode 100644 site/docs/map-api/layers/plot-layer.en.md delete mode 100644 site/docs/map-api/layers/plot-layer.zh.md delete mode 100644 site/docs/map-api/layers/prism-layer.en.md delete mode 100644 site/docs/map-api/layers/prism-layer.zh.md delete mode 100644 site/docs/map-api/layers/text-layer.en.md delete mode 100644 site/docs/map-api/layers/text-layer.zh.md delete mode 100644 site/docs/map-api/plot-api/index.en.md delete mode 100644 site/docs/map-api/plot-api/index.zh.md delete mode 100644 site/docs/map-api/plots/area.en.md delete mode 100644 site/docs/map-api/plots/area.zh.md delete mode 100644 site/docs/map-api/plots/choropleth.en.md delete mode 100644 site/docs/map-api/plots/choropleth.zh.md delete mode 100644 site/docs/map-api/plots/dot.en.md delete mode 100644 site/docs/map-api/plots/dot.zh.md delete mode 100644 site/docs/map-api/plots/flow.en.md delete mode 100644 site/docs/map-api/plots/flow.zh.md delete mode 100644 site/docs/map-api/plots/grid.en.md delete mode 100644 site/docs/map-api/plots/grid.zh.md delete mode 100644 site/docs/map-api/plots/heatmap.en.md delete mode 100644 site/docs/map-api/plots/heatmap.zh.md delete mode 100644 site/docs/map-api/plots/hexbin.en.md delete mode 100644 site/docs/map-api/plots/hexbin.zh.md delete mode 100644 site/docs/map-api/plots/path.en.md delete mode 100644 site/docs/map-api/plots/path.zh.md delete mode 100644 site/docs/map-api/source/index.en.md delete mode 100644 site/docs/map-api/source/index.zh.md delete mode 100644 site/docs/map-api/theme/index.en.md delete mode 100644 site/docs/map-api/theme/index.zh.md delete mode 100644 site/docs/map-common/attribute/area-state.en.md delete mode 100644 site/docs/map-common/attribute/area-state.zh.md delete mode 100644 site/docs/map-common/attribute/area-style.en.md delete mode 100644 site/docs/map-common/attribute/area-style.zh.md delete mode 100644 site/docs/map-common/attribute/color.en.md delete mode 100644 site/docs/map-common/attribute/color.zh.md delete mode 100644 site/docs/map-common/attribute/components.en.md delete mode 100644 site/docs/map-common/attribute/components.zh.md delete mode 100644 site/docs/map-common/attribute/grid-style.en.md delete mode 100644 site/docs/map-common/attribute/grid-style.zh.md delete mode 100644 site/docs/map-common/attribute/map.en.md delete mode 100644 site/docs/map-common/attribute/map.zh.md delete mode 100644 site/docs/map-common/attribute/path-color.en.md delete mode 100644 site/docs/map-common/attribute/path-color.zh.md delete mode 100644 site/docs/map-common/attribute/path-components.en.md delete mode 100644 site/docs/map-common/attribute/path-components.zh.md delete mode 100644 site/docs/map-common/attribute/path-size.en.md delete mode 100644 site/docs/map-common/attribute/path-size.zh.md delete mode 100644 site/docs/map-common/attribute/path-style.en.md delete mode 100644 site/docs/map-common/attribute/path-style.zh.md delete mode 100644 site/docs/map-common/attribute/radiation.en.md delete mode 100644 site/docs/map-common/attribute/radiation.zh.md delete mode 100644 site/docs/map-common/attribute/scale.en.md delete mode 100644 site/docs/map-common/attribute/scale.zh.md delete mode 100644 site/docs/map-common/attribute/size.en.md delete mode 100644 site/docs/map-common/attribute/size.zh.md delete mode 100644 site/docs/map-common/attribute/state.en.md delete mode 100644 site/docs/map-common/attribute/state.zh.md delete mode 100644 site/docs/map-common/attribute/style.en.md delete mode 100644 site/docs/map-common/attribute/style.zh.md delete mode 100644 site/docs/map-common/composite-layers/choropleth-layer/state.en.md delete mode 100644 site/docs/map-common/composite-layers/choropleth-layer/state.zh.md delete mode 100644 site/docs/map-common/composite-layers/composite-common/attribute.en.md delete mode 100644 site/docs/map-common/composite-layers/composite-common/attribute.zh.md delete mode 100644 site/docs/map-common/composite-layers/composite-common/event.en.md delete mode 100644 site/docs/map-common/composite-layers/composite-common/event.zh.md delete mode 100644 site/docs/map-common/composite-layers/composite-common/method.en.md delete mode 100644 site/docs/map-common/composite-layers/composite-common/method.zh.md delete mode 100644 site/docs/map-common/composite-layers/composite-common/options.en.md delete mode 100644 site/docs/map-common/composite-layers/composite-common/options.zh.md delete mode 100644 site/docs/map-common/composite-layers/core-common/attribute.en.md delete mode 100644 site/docs/map-common/composite-layers/core-common/attribute.zh.md delete mode 100644 site/docs/map-common/composite-layers/core-common/event.en.md delete mode 100644 site/docs/map-common/composite-layers/core-common/event.zh.md delete mode 100644 site/docs/map-common/composite-layers/core-common/method.en.md delete mode 100644 site/docs/map-common/composite-layers/core-common/method.zh.md delete mode 100644 site/docs/map-common/composite-layers/core-common/options.en.md delete mode 100644 site/docs/map-common/composite-layers/core-common/options.zh.md delete mode 100644 site/docs/map-common/composite-layers/heatmap-layer/shape.en.md delete mode 100644 site/docs/map-common/composite-layers/heatmap-layer/shape.zh.md delete mode 100644 site/docs/map-common/composite-layers/heatmap-layer/size.en.md delete mode 100644 site/docs/map-common/composite-layers/heatmap-layer/size.zh.md delete mode 100644 site/docs/map-common/composite-layers/heatmap-layer/style.en.md delete mode 100644 site/docs/map-common/composite-layers/heatmap-layer/style.zh.md delete mode 100644 site/docs/map-common/composite-layers/line-layer/animate.en.md delete mode 100644 site/docs/map-common/composite-layers/line-layer/animate.zh.md delete mode 100644 site/docs/map-common/composite-layers/line-layer/shape.en.md delete mode 100644 site/docs/map-common/composite-layers/line-layer/shape.zh.md delete mode 100644 site/docs/map-common/composite-layers/line-layer/source.en.md delete mode 100644 site/docs/map-common/composite-layers/line-layer/source.zh.md delete mode 100644 site/docs/map-common/composite-layers/line-layer/style.en.md delete mode 100644 site/docs/map-common/composite-layers/line-layer/style.zh.md delete mode 100644 site/docs/map-common/composite-layers/point-layer/animate.en.md delete mode 100644 site/docs/map-common/composite-layers/point-layer/animate.zh.md delete mode 100644 site/docs/map-common/composite-layers/point-layer/shape.en.md delete mode 100644 site/docs/map-common/composite-layers/point-layer/shape.zh.md delete mode 100644 site/docs/map-common/composite-layers/point-layer/source.en.md delete mode 100644 site/docs/map-common/composite-layers/point-layer/source.zh.md delete mode 100644 site/docs/map-common/composite-layers/point-layer/style.en.md delete mode 100644 site/docs/map-common/composite-layers/point-layer/style.zh.md delete mode 100644 site/docs/map-common/composite-layers/polygon-layer/shape.en.md delete mode 100644 site/docs/map-common/composite-layers/polygon-layer/shape.zh.md delete mode 100644 site/docs/map-common/composite-layers/polygon-layer/source.en.md delete mode 100644 site/docs/map-common/composite-layers/polygon-layer/source.zh.md delete mode 100644 site/docs/map-common/composite-layers/polygon-layer/style.en.md delete mode 100644 site/docs/map-common/composite-layers/polygon-layer/style.zh.md delete mode 100644 site/docs/map-common/composite-layers/text-layer/style.en.md delete mode 100644 site/docs/map-common/composite-layers/text-layer/style.zh.md delete mode 100644 site/docs/map-common/layers/arc-layer/shape.en.md delete mode 100644 site/docs/map-common/layers/arc-layer/shape.zh.md delete mode 100644 site/docs/map-common/layers/arc-layer/size.en.md delete mode 100644 site/docs/map-common/layers/arc-layer/size.zh.md delete mode 100644 site/docs/map-common/layers/arc-layer/style.en.md delete mode 100644 site/docs/map-common/layers/arc-layer/style.zh.md delete mode 100644 site/docs/map-common/layers/area-layer/source.en.md delete mode 100644 site/docs/map-common/layers/area-layer/source.zh.md delete mode 100644 site/docs/map-common/layers/area-layer/state.en.md delete mode 100644 site/docs/map-common/layers/area-layer/state.zh.md delete mode 100644 site/docs/map-common/layers/area-layer/style.en.md delete mode 100644 site/docs/map-common/layers/area-layer/style.zh.md delete mode 100644 site/docs/map-common/layers/dot-layer/animate.en.md delete mode 100644 site/docs/map-common/layers/dot-layer/animate.zh.md delete mode 100644 site/docs/map-common/layers/dot-layer/shape.en.md delete mode 100644 site/docs/map-common/layers/dot-layer/shape.zh.md delete mode 100644 site/docs/map-common/layers/dot-layer/size.en.md delete mode 100644 site/docs/map-common/layers/dot-layer/size.zh.md delete mode 100644 site/docs/map-common/layers/dot-layer/source.en.md delete mode 100644 site/docs/map-common/layers/dot-layer/source.zh.md delete mode 100644 site/docs/map-common/layers/dot-layer/style.en.md delete mode 100644 site/docs/map-common/layers/dot-layer/style.zh.md delete mode 100644 site/docs/map-common/layers/grid-layer/shape.en.md delete mode 100644 site/docs/map-common/layers/grid-layer/shape.zh.md delete mode 100644 site/docs/map-common/layers/grid-layer/size.en.md delete mode 100644 site/docs/map-common/layers/grid-layer/size.zh.md delete mode 100644 site/docs/map-common/layers/grid-layer/source.en.md delete mode 100644 site/docs/map-common/layers/grid-layer/source.zh.md delete mode 100644 site/docs/map-common/layers/grid-layer/style.en.md delete mode 100644 site/docs/map-common/layers/grid-layer/style.zh.md delete mode 100644 site/docs/map-common/layers/heatmap-layer/shape.en.md delete mode 100644 site/docs/map-common/layers/heatmap-layer/shape.zh.md delete mode 100644 site/docs/map-common/layers/heatmap-layer/size.en.md delete mode 100644 site/docs/map-common/layers/heatmap-layer/size.zh.md delete mode 100644 site/docs/map-common/layers/heatmap-layer/style.en.md delete mode 100644 site/docs/map-common/layers/heatmap-layer/style.zh.md delete mode 100644 site/docs/map-common/layers/hexbin-layer/shape.en.md delete mode 100644 site/docs/map-common/layers/hexbin-layer/shape.zh.md delete mode 100644 site/docs/map-common/layers/lines-layer/animate.en.md delete mode 100644 site/docs/map-common/layers/lines-layer/animate.zh.md delete mode 100644 site/docs/map-common/layers/path-layer/size.en.md delete mode 100644 site/docs/map-common/layers/path-layer/size.zh.md delete mode 100644 site/docs/map-common/layers/path-layer/source.en.md delete mode 100644 site/docs/map-common/layers/path-layer/source.zh.md delete mode 100644 site/docs/map-common/layers/path-layer/style.en.md delete mode 100644 site/docs/map-common/layers/path-layer/style.zh.md delete mode 100644 site/docs/map-common/layers/text-layer/style.en.md delete mode 100644 site/docs/map-common/layers/text-layer/style.zh.md delete mode 100644 site/examples/flowchart/basic/API.en.md delete mode 100644 site/examples/flowchart/basic/API.zh.md delete mode 100644 site/examples/flowchart/basic/demo/basic.js delete mode 100644 site/examples/flowchart/basic/demo/complex-form.js delete mode 100644 site/examples/flowchart/basic/demo/custom-form.js delete mode 100644 site/examples/flowchart/basic/demo/custom-node.js delete mode 100644 site/examples/flowchart/basic/demo/meta.json delete mode 100644 site/examples/flowchart/basic/demo/read.js delete mode 100644 site/examples/flowchart/basic/index.en.md delete mode 100644 site/examples/flowchart/basic/index.zh.md create mode 100644 site/examples/line/basic/API.en.md create mode 100644 site/examples/line/basic/API.zh.md create mode 100644 site/examples/line/basic/demo/basic.js rename site/examples/{relation-graph/mind-map-graph => line/basic}/demo/meta.json (64%) create mode 100644 site/examples/line/basic/design.en.md create mode 100644 site/examples/line/basic/design.zh.md create mode 100644 site/examples/line/basic/index.en.md create mode 100644 site/examples/line/basic/index.zh.md delete mode 100644 site/examples/map-advanced-plot/muti-layers/API.en.md delete mode 100644 site/examples/map-advanced-plot/muti-layers/API.zh.md delete mode 100644 site/examples/map-advanced-plot/muti-layers/demo/meta.json delete mode 100644 site/examples/map-advanced-plot/muti-layers/demo/wind-field.js delete mode 100644 site/examples/map-advanced-plot/muti-layers/index.en.md delete mode 100644 site/examples/map-advanced-plot/muti-layers/index.zh.md delete mode 100644 site/examples/map-area/division/API.en.md delete mode 100644 site/examples/map-area/division/API.zh.md delete mode 100644 site/examples/map-area/division/demo/europe-pop-est.js delete mode 100644 site/examples/map-area/division/demo/meta.json delete mode 100644 site/examples/map-area/division/demo/us-states-density.js delete mode 100644 site/examples/map-area/division/index.en.md delete mode 100644 site/examples/map-area/division/index.zh.md delete mode 100644 site/examples/map-area/interactive/API.en.md delete mode 100644 site/examples/map-area/interactive/API.zh.md delete mode 100644 site/examples/map-area/interactive/demo/meta.json delete mode 100644 site/examples/map-area/interactive/demo/multiple-choice.js delete mode 100644 site/examples/map-area/interactive/demo/single-choice.js delete mode 100644 site/examples/map-area/interactive/index.en.md delete mode 100644 site/examples/map-area/interactive/index.zh.md delete mode 100644 site/examples/map-dot/bobble/API.en.md delete mode 100644 site/examples/map-dot/bobble/API.zh.md delete mode 100644 site/examples/map-dot/bobble/demo/air-temperature.js delete mode 100644 site/examples/map-dot/bobble/demo/animate.js delete mode 100644 site/examples/map-dot/bobble/demo/distribution-cities.js delete mode 100644 site/examples/map-dot/bobble/demo/earthquake-level.js delete mode 100644 site/examples/map-dot/bobble/demo/meta.json delete mode 100644 site/examples/map-dot/bobble/index.en.md delete mode 100644 site/examples/map-dot/bobble/index.zh.md delete mode 100644 site/examples/map-dot/dot-density/API.en.md delete mode 100644 site/examples/map-dot/dot-density/API.zh.md delete mode 100644 site/examples/map-dot/dot-density/demo/beijing-traffic.js delete mode 100644 site/examples/map-dot/dot-density/demo/cuisine-nationwide.js delete mode 100644 site/examples/map-dot/dot-density/demo/meta.json delete mode 100644 site/examples/map-dot/dot-density/demo/shanghai-traffic.js delete mode 100644 site/examples/map-dot/dot-density/index.en.md delete mode 100644 site/examples/map-dot/dot-density/index.zh.md delete mode 100644 site/examples/map-dot/icon/API.en.md delete mode 100644 site/examples/map-dot/icon/API.zh.md delete mode 100644 site/examples/map-dot/icon/demo/bank.js delete mode 100644 site/examples/map-dot/icon/demo/meta.json delete mode 100644 site/examples/map-dot/icon/demo/poi.js delete mode 100644 site/examples/map-dot/icon/index.en.md delete mode 100644 site/examples/map-dot/icon/index.zh.md delete mode 100644 site/examples/map-dot/map-scatter/API.en.md delete mode 100644 site/examples/map-dot/map-scatter/API.zh.md delete mode 100644 site/examples/map-dot/map-scatter/demo/classified-scatter.js delete mode 100644 site/examples/map-dot/map-scatter/demo/distribution-cities.js delete mode 100644 site/examples/map-dot/map-scatter/demo/meta.json delete mode 100644 site/examples/map-dot/map-scatter/index.en.md delete mode 100644 site/examples/map-dot/map-scatter/index.zh.md delete mode 100644 site/examples/map-heat/grid/API.en.md delete mode 100644 site/examples/map-heat/grid/API.zh.md delete mode 100644 site/examples/map-heat/grid/demo/grid2d.js delete mode 100644 site/examples/map-heat/grid/demo/grid3d.js delete mode 100644 site/examples/map-heat/grid/demo/meta.json delete mode 100644 site/examples/map-heat/grid/index.en.md delete mode 100644 site/examples/map-heat/grid/index.zh.md delete mode 100644 site/examples/map-heat/heatmap/API.en.md delete mode 100644 site/examples/map-heat/heatmap/API.zh.md delete mode 100644 site/examples/map-heat/heatmap/demo/global-2d.js delete mode 100644 site/examples/map-heat/heatmap/demo/global-3d.js delete mode 100644 site/examples/map-heat/heatmap/demo/housing-transaction.js delete mode 100644 site/examples/map-heat/heatmap/demo/meta.json delete mode 100644 site/examples/map-heat/heatmap/demo/traffic-accident.js delete mode 100644 site/examples/map-heat/heatmap/index.en.md delete mode 100644 site/examples/map-heat/heatmap/index.zh.md delete mode 100644 site/examples/map-heat/hexbin/API.en.md delete mode 100644 site/examples/map-heat/hexbin/API.zh.md delete mode 100644 site/examples/map-heat/hexbin/demo/hexbin3d.js delete mode 100644 site/examples/map-heat/hexbin/demo/meta.json delete mode 100644 site/examples/map-heat/hexbin/demo/traffic-delay.js delete mode 100644 site/examples/map-heat/hexbin/index.en.md delete mode 100644 site/examples/map-heat/hexbin/index.zh.md delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/API.en.md delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/API.zh.md delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/demo/async-load.js delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/demo/auto-width.js delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/demo/basic.js delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/demo/layout.js delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/demo/line-style.js delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/demo/meta.json delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/demo/no-stroke.js delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/demo/percent.js delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/demo/style.js delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/index.en.md delete mode 100644 site/examples/relation-graph/decomposition-tree-graph/index.zh.md delete mode 100644 site/examples/relation-graph/flow-analysis-graph/API.en.md delete mode 100644 site/examples/relation-graph/flow-analysis-graph/API.zh.md delete mode 100644 site/examples/relation-graph/flow-analysis-graph/demo/basic.js delete mode 100644 site/examples/relation-graph/flow-analysis-graph/demo/custom.js delete mode 100644 site/examples/relation-graph/flow-analysis-graph/demo/layout.js delete mode 100644 site/examples/relation-graph/flow-analysis-graph/demo/line-style.js delete mode 100644 site/examples/relation-graph/flow-analysis-graph/demo/meta.json delete mode 100644 site/examples/relation-graph/flow-analysis-graph/demo/state.js delete mode 100644 site/examples/relation-graph/flow-analysis-graph/demo/type.js delete mode 100644 site/examples/relation-graph/flow-analysis-graph/index.en.md delete mode 100644 site/examples/relation-graph/flow-analysis-graph/index.zh.md delete mode 100644 site/examples/relation-graph/fund-flow-graph/API.en.md delete mode 100644 site/examples/relation-graph/fund-flow-graph/API.zh.md delete mode 100644 site/examples/relation-graph/fund-flow-graph/demo/basic.js delete mode 100644 site/examples/relation-graph/fund-flow-graph/demo/meta.json delete mode 100644 site/examples/relation-graph/fund-flow-graph/demo/style.js delete mode 100644 site/examples/relation-graph/fund-flow-graph/index.en.md delete mode 100644 site/examples/relation-graph/fund-flow-graph/index.zh.md delete mode 100644 site/examples/relation-graph/mind-map-graph/API.en.md delete mode 100644 site/examples/relation-graph/mind-map-graph/API.zh.md delete mode 100644 site/examples/relation-graph/mind-map-graph/demo/basic.js delete mode 100644 site/examples/relation-graph/mind-map-graph/index.en.md delete mode 100644 site/examples/relation-graph/mind-map-graph/index.zh.md delete mode 100644 site/examples/relation-graph/organization-graph/API.en.md delete mode 100644 site/examples/relation-graph/organization-graph/API.zh.md delete mode 100644 site/examples/relation-graph/organization-graph/demo/basic.js delete mode 100644 site/examples/relation-graph/organization-graph/demo/custom.js delete mode 100644 site/examples/relation-graph/organization-graph/demo/meta.json delete mode 100644 site/examples/relation-graph/organization-graph/demo/style.js delete mode 100644 site/examples/relation-graph/organization-graph/index.en.md delete mode 100644 site/examples/relation-graph/organization-graph/index.zh.md delete mode 100644 site/examples/relation-graph/radial-graph/API.en.md delete mode 100644 site/examples/relation-graph/radial-graph/API.zh.md delete mode 100644 site/examples/relation-graph/radial-graph/demo/basic.js delete mode 100644 site/examples/relation-graph/radial-graph/demo/meta.json delete mode 100644 site/examples/relation-graph/radial-graph/index.en.md delete mode 100644 site/examples/relation-graph/radial-graph/index.zh.md delete mode 100644 site/examples/relation-graph/radial-tree-graph/API.en.md delete mode 100644 site/examples/relation-graph/radial-tree-graph/API.zh.md delete mode 100644 site/examples/relation-graph/radial-tree-graph/demo/basic.js delete mode 100644 site/examples/relation-graph/radial-tree-graph/demo/layout.js delete mode 100644 site/examples/relation-graph/radial-tree-graph/demo/meta.json delete mode 100644 site/examples/relation-graph/radial-tree-graph/demo/style.js delete mode 100644 site/examples/relation-graph/radial-tree-graph/index.en.md delete mode 100644 site/examples/relation-graph/radial-tree-graph/index.zh.md diff --git a/CHANGELOG.md b/CHANGELOG.md index ec2f7b59c..bdbc24379 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,393 +1,3 @@ -## 1.4.2 +## 2.0.0-alpah.0 -`2022-07-19` - -- 🐞 [Critical security vulnerabilities immer and minimist](https://github.com/ant-design/ant-design-charts/issues/1289) -## 1.4.1 - -`2022-07-13` - -- 🐞 修复 umd 不可用 - -## 1.4.0 - -`2022-07-12` - -- 🔥 文件目录命名风格统一 -- `@ant-design/maps` Heatmap 重命名为 GeographicHeatmap -- 支持自定义 anchor -- 🆕 OrganizationGraph 支持自定义 anchor -- 🐞 修复 scaleToolbarPanelProps 为空时出错 -- 🐞 修复流程图保存数据失败 - -## 1.3.6 - -`2022-03-22` - -- 🆕 Flowchart 阅读态完善,支持取消键盘事件和画布事件 -- 🆕 Graph 支持自定义布局 -- 🐞 修复 TS 类型错误 -## 1.3.5 - -`2022-01-25` - -- 🐞 修复 umd 命名错误问题 [1120](https://github.com/ant-design/ant-design-charts/issues/1120) -- 🐞 修复流程图无法异步加载数据 [1117](https://github.com/ant-design/ant-design-charts/issues/1117) -- 🐞 修复关系图 tooltipCfg.container 配置报错 - -## 1.3.4 - -`2022-01-07` - -- 🆕 官网示例更新 -- 🐞 修复 interaction tooltip 导致页面崩溃 -- 🐞 修复 OrganizationGraph 接口和实现不一致 -## 1.3.3 - -`2021-12-24` - -- 🆕 新增 Venn 图 -- 🆕 主包导出 flowchart 样式文件 -- 🆕 新增 PR 巡检 -- 🐞 修复官网示例 - -## 1.3.2 - -`2021-12-07` - -- 🐞 修复 peerDependencies - -## 1.3.1 - -`2021-11-26` - -- 🆕 CDN 引入变量重命名 - - window.charts -> window.Charts - - window.plots -> window.Plots - - window.maps -> window.Maps - - window.graphs -> window.Graphs - -## 1.3.0 - -`2021-11-25` - -- 🆕 新增流程图 [Flowchart](https://charts.ant.design/zh/examples/flowchart/basic#basic) - -流程图除 `react`、`react-dom` 外,还依赖 `antd`、`@ant-design/icons`、`lodash`,使用时确保已经安装,同时记得引入样式文件 `import "@ant-design/flowchart/dist/index.css";` - -```ts -"peerDependencies": { - "@ant-design/icons": "^4.6.0", - "antd": "^4.6.3", - "lodash": "^4.17.20", - "react": ">=16.8.4", - "react-dom": ">=16.8.4" - } -``` - -```tsx -import { Flowchart } from '@ant-design/charts'; -import "@ant-design/flowchart/dist/index.css"; -``` - -- 🆕 新增地理可视化 [Maps](https://charts.ant.design/zh/examples/map-area/division#chinese-provinces) -- 🆕 新增 CirclePacking -- 🆕 Ant Design Charts 完成拆包,推荐使用子包 - - 统计图表:@ant-design/plots - - 流程图:@ant-design/flowchart - - 地理可视化:@ant-design/maps - - 关系图:@ant-design/graphs - - -## 1.2.4 - -`2021-07-27` - -- 🆕 DagreGraph 新增 card 类型。 -- 🐞 修复 FlowAnalysisGraph 类型错误。 -- 🐞 修复 autoFit 布局偏移。 - -## 1.2.3 - -`2021-07-20` - -### New Features - -- 新增资金流向图(FundFlowGraph): 支持节自定义;展开收起;边、节点格式化配置等。 - -- FlowAnalysisGraph 、DecompositionTreeGraph 新增 badge 配置 - -- 关系图支持默认节点类型 - -- `indicator-card` 新增 `LR` 布局 - -### Bug fixes - -- 修复 FlowAnalysisGraph 、DecompositionTreeGraph 空数据报错 - -## 1.2.2 - -`2021-07-20` - -- 🐞 旧 Graph 节点注册 -- 🐞 修复 FlowAnalysisGraph 空数据异常 - -## 1.2.1 - -`2021-07-20` - -- 🆕 FlowAnalysisGraph layout 新增 `follow` -- 🆕 Graphs ArrowCfg 新增 size -- 🆕 Graphs 默认值&文档优化 - -## 1.2.0 - -> 图组件全新 API ,新增&优化多个图组件,新增交互、节点自定义等。调整目录结构,类型引入定义更简单。 - -### 新功能 - -> 新增节点、边交互状态,来源去向图、组织架构图、指标拆解树支持自定义节点,节点、边个性化设置,更灵活。 - -#### 来源去向图 - -> FlowAnalysisGraph - -| ![image.png](https://cdn.nlark.com/yuque/0/2021/png/278352/1626337308273-1869606d-da26-470b-99ac-7dce4a324eb6.png#clientId=uc4615b79-7491-4&from=paste&height=396&id=ufe21e8a7&margin=%5Bobject%20Object%5D&name=image.png&originHeight=396&originWidth=754&originalType=binary&ratio=1&size=103139&status=done&style=none&taskId=u8c9cb519-5085-4006-a5cc-7a15448f60a&width=754) | ![image.png](https://cdn.nlark.com/yuque/0/2021/png/278352/1626335599778-010ac67d-982c-4fca-b240-d53ef55ef35a.png#clientId=ua9a3d129-b5b7-4&from=paste&height=448&id=u2b24628b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=448&originWidth=931&originalType=binary&ratio=1&size=89087&status=done&style=none&taskId=uc41711ad-8b1a-45d9-bacc-acab2f49541&width=931) | -| --- | --- | - -#### 组织架构图 - -> OrganizationGraph - -| ![image.png](https://cdn.nlark.com/yuque/0/2021/png/278352/1626336025336-fe4de176-5cf4-490a-b222-dac7039bf628.png#clientId=ua9a3d129-b5b7-4&from=paste&height=506&id=u3f49c5ea&margin=%5Bobject%20Object%5D&name=image.png&originHeight=506&originWidth=923&originalType=binary&ratio=1&size=125664&status=done&style=none&taskId=uee2b4d05-5a34-41ab-824a-bd0b2af281f&width=923) | ![image.png](https://cdn.nlark.com/yuque/0/2021/png/278352/1626336047983-fe2acb21-072f-486f-b0d8-3bb1498d52f1.png#clientId=ua9a3d129-b5b7-4&from=paste&height=372&id=u2cda8a8f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=372&originWidth=866&originalType=binary&ratio=1&size=92687&status=done&style=none&taskId=u6ab558b7-7d5a-43c3-b025-819b815da49&width=866) | -| --- | --- | - -​
- -#### 指标拆解树 - -> DecompositionTreeGraph - -| ![image.png](https://cdn.nlark.com/yuque/0/2021/png/278352/1626336487396-701f2b89-4d96-4b43-aa2c-0a98e4ead468.png#clientId=ua9a3d129-b5b7-4&from=paste&height=340&id=ue6de2099&margin=%5Bobject%20Object%5D&name=image.png&originHeight=340&originWidth=721&originalType=binary&ratio=1&size=95783&status=done&style=none&taskId=u0babaee1-4b72-4114-8a53-5643b8d543c&width=721) | ![image.png](https://cdn.nlark.com/yuque/0/2021/png/278352/1626336513538-be5d3195-b73f-4ed8-87d1-4e68834d7e71.png#clientId=ua9a3d129-b5b7-4&from=paste&height=361&id=u651a2cae&margin=%5Bobject%20Object%5D&name=image.png&originHeight=361&originWidth=692&originalType=binary&ratio=1&size=74657&status=done&style=none&taskId=ua5a066c3-d3d8-4f01-bf7c-a2bc4c30f0a&width=692) | -| --- | --- | - -#### 辐射树图 - -> RadialTreeGraph - -| ![image.png](https://cdn.nlark.com/yuque/0/2021/png/278352/1626336586223-5d573bc5-01da-43d8-b9cc-250e56cbe79f.png#clientId=ua9a3d129-b5b7-4&from=paste&height=213&id=ub106f57d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=525&originWidth=620&originalType=binary&ratio=1&size=157766&status=done&style=none&taskId=ufcc3ccab-ea60-42b4-98ba-10b0ca74d6c&width=252) | ![image.png](https://cdn.nlark.com/yuque/0/2021/png/278352/1626336604503-8982ef00-7d01-4a60-8132-4c78f2ffdb0a.png#clientId=ua9a3d129-b5b7-4&from=paste&height=225&id=u4541d37d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=513&originWidth=547&originalType=binary&ratio=1&size=133385&status=done&style=none&taskId=u468c94a6-439f-4b6b-b83d-78287c4251a&width=240) | -| --- | --- | - -​
- -### 不兼容改动 - -> 调整目录结构带来不兼容 - -#### 类型引入 - -旧: - -```typescript -import { Line } from '@ant-design/charts'; -import { LineConfig } from '@ant-design/charts/es/line'; -``` - -新: - -```typescript -import { Line, LineConfig } from '@ant-design/charts'; -``` - -#### 按需引入 - -旧: - -```typescript -import Line from '@ant-design/charts/es/line'; -``` - -新: - -```typescript -import Line from '@ant-design/charts/es/plots/line'; -``` - -#### 官网示例少了 - -由于目前 API 做了升级,还没来得及升级的图表暂时不在官网透出,但任然可以正常使用,也可以在官网访问。
只需手动输入网址即可。 - -```typescript -// 组件名为中划线格式 -https://charts.ant.design/zh-CN/demos/ + 组件名 -// OrganizationalGraph -https://charts.ant.design/zh-CN/demos/organizational-graph -``` - -## 1.1.20 - -`2021-06-29` - -- 🐞 修复 useGraph props 丢失,导致更新失败。 - -## 1.1.19 - -`2021-06-28` - -- 🆕 OrganizationalGraph 新增 [Title](https://charts.ant.design/demos/organizational-graph#set-title)。 - -## 1.1.18 - -`2021-06-24` - -- 🐞 修复 onReady & onEvent 类型错误。 -- ContainerOptions 统一为 ContainerConfig,并从 src/hooks/useChart 动到 src/interface 。 - -## 1.1.17 - -`2021-06-17` - -- 🐞 修复 graph autoFit 不生效。 -- 🆕 新增 Violin 文档。 - -## 1.1.16 - -`2021-06-15` - -- 🆕 新增 [Facet](https://charts.ant.design/demos/facet)。 -- 🆕 新增 Violin 组件,文档暂未透出。 - -## 1.1.15 - -`2021-06-14` - -- 🐞 所有图表 ts 类型统一。 - - ContainerProps to ContainerConfig. - - RelationGraph to CommonConfig. - - IndentedTreeProps to IndentedTreeGraphConfig. - - OrganizationTreeProps to OrganizationalGraphConfig. - -## 1.1.14 - -`2021-06-14` - -- 🆕 新增 [RadialGraph](https://charts.ant.design/demos/radial-graph#base)。 -- 🆕 IndentedTreeGraph 新增 markerPosition 功能,配合布局使用。 -- 🐞 修复 OrganizationalGraph 不支持线文本配置。 - -## 1.1.13 - -`2021-06-11` - -- 🆕 新增 OrganizationalGraph。OrganizationTreeGraph 的升级版,OrganizationTreeGraph 后续不在官网透出。 -- 🐞 修复 OrganizationTreeGraph changeData 布局出错。 - -## 1.1.12 - -`2021-06-10` - -- 🐞 大小写问题 - -## 1.1.11 - -`2021-06-09` - -- 🐞 合理化文件路径。 -- 🆕 IndentedTreeGraph 新增 animate 配置。 - -## 1.1.10 - -`2021-06-07` - -- 💄 CDN 使用方式 charts_g6 改名为 graphs - -## 1.1.9 - -`2021-06-04` - -- 🐞 修复引用类型,数据不更新。 - -## 1.1.8 - -`2021-06-04` - -- 🐞 修复 IndentedTreeGraph ts 类型出错。 - -## 1.1.5 - -`2021-06-01` - -- 🆕 新增 IndentedTreeGraph, 功能类似 IndentedTree ,IndentedTree 不再官网继续透出,功能保留。 -- 🆕 关系图内置 `grahpId` , 默认支持一个页面使用多个关系图。 -- 🆕 关系图新增 `loading`、`onReady`、`loadingTemplate` 等 props. - -## 1.1.4 - -`2021-05-14` - -- 🔥 已经废弃 MultiView ,更名为 Mix ,MultiView 继续保留,但不在文档透出。 - -## 1.1.3 - -`2021-04-28` - -- 🔥 默认支持按需加载 [#475](https://github.com/ant-design/ant-design-charts/issues/475) - -## 1.1.2 - -`2021-04-12` - -- 🐞 修复更新逻辑,config immutable 避免底层修改 config 后出现重复更新。 - -## 1.1.1 - -- remname: history -> CHANGELOG -- fix: graph layout and changeData error - -## 1.1.0 - -- 文档更新 [#545](https://github.com/ant-design/ant-design-charts/pull/545) -- feat: 新增弦图(Chord) [#545](https://github.com/ant-design/ant-design-charts/pull/545) -- fix: fund flow graph with large slope edges [#540](https://github.com/ant-design/ant-design-charts/pull/540) -- fix: 兼容 React17 [#542](https://github.com/ant-design/ant-design-charts/pull/542) -- 导出 G2Plot 相关 function [#545](https://github.com/ant-design/ant-design-charts/pull/545) - - flow - - measureTextWidth - - adaptors - -## 1.0.1 - -- 新增瀑布图 - -## 1.0.0 - -- 底层依赖架构全新升级 -- 新增全量 API -- 持续迭代 - -## 0.9.6 - -- 新增 onlyChangeData props 用于控制 changeData 。 - -## 0.9.5 - -- tooltip 添加 ReactNode 支持。 -- 提供额外 API : downloadImage()、toDataURL() 。 -- 新增 memoData props 用于控制 rerender 。 - -## 0.9.4 - -新增图表 - -- column-line -- dual-line -- groupedColumn-line -- stackedColumn-line - -删除图表 - -- OverlappedComboPlot - -## 0.9.2 - -修改 props 属性名,chartStyle => style。 +`2023-08-31` diff --git a/README.md b/README.md index 8478a81a3..a2e41a730 100644 --- a/README.md +++ b/README.md @@ -25,16 +25,6 @@ A React chart library, based on [G2Plot](https://github.com/antvis/G2Plot), [G6] ### Statistical charts -### Flowchart - - -### Maps - - -### Relation Graphs - - - ## ✨ Features - Easy to use diff --git a/packages/charts/package.json b/packages/charts/package.json index 953850fac..3b02e246c 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@ant-design/charts", - "version": "1.4.2", + "version": "2.0.0-alpha.0", "description": "AntV upper level visual component library", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" @@ -31,9 +31,6 @@ "copy": "node ./scripts/copy.js" }, "dependencies": { - "@ant-design/flowchart": "workspace:*", - "@ant-design/graphs": "workspace:*", - "@ant-design/maps": "workspace:*", "@ant-design/plots": "workspace:*" }, "peerDependencies": { diff --git a/packages/charts/src/index.ts b/packages/charts/src/index.ts index a1bf6a389..49a0ba5a1 100644 --- a/packages/charts/src/index.ts +++ b/packages/charts/src/index.ts @@ -1,6 +1,3 @@ export * from '@ant-design/plots'; -export * from '@ant-design/flowchart'; -export * from '@ant-design/graphs'; -export * from '@ant-design/maps'; -export const version = '1.4.2'; +export const version = '2.0.0-alpha.0'; diff --git a/packages/flowchart/.babelrc b/packages/flowchart/.babelrc deleted file mode 100644 index 633f93f42..000000000 --- a/packages/flowchart/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../.babelrc" -} diff --git a/packages/flowchart/.eslintignore b/packages/flowchart/.eslintignore deleted file mode 100644 index cc6f6d2b0..000000000 --- a/packages/flowchart/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -dist -es -lib -node_modules -tests \ No newline at end of file diff --git a/packages/flowchart/.eslintrc.js b/packages/flowchart/.eslintrc.js deleted file mode 100644 index 6a8e85093..000000000 --- a/packages/flowchart/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '../../.eslintrc.js', -}; diff --git a/packages/flowchart/CHANGELOG.md b/packages/flowchart/CHANGELOG.md deleted file mode 100644 index 7282fac7d..000000000 --- a/packages/flowchart/CHANGELOG.md +++ /dev/null @@ -1,31 +0,0 @@ -## 1.2.2 - -`2023-01-12` - -- 🐞 修复 React18 页面卡死 -- 🔥 新增 `onDelNode、onCopy、onPaste` 方法 - -## 1.2.1 - -`2022-08-23` - -- 🐞 修复流程图 `canvasProps.config` 配置无效 - -## 1.2.0 - -`2022-08-16` - -- 🔥 新增 canvasProps.showPortsOnNodeSelected 属性,支持选中节点时连线 -- 🔥 新增 canvasProps.edgeConfig 属性,支持默认连线配置 - -## 1.1.9 - -`2022-07-26` - -- 🐞 [新建边无反应](https://github.com/ant-design/ant-design-charts/issues/1455) - -## 1.1.8 - -`2022-07-19` - -- 🐞 [Critical security vulnerabilities immer](https://github.com/ant-design/ant-design-charts/issues/1289) diff --git a/packages/flowchart/README.md b/packages/flowchart/README.md deleted file mode 100644 index 66c214483..000000000 --- a/packages/flowchart/README.md +++ /dev/null @@ -1,173 +0,0 @@ -# @ant-design/flowchart - -
- -Flowchart solutions, based on [XFlow](https://github.com/antvis/xflow). - -![npm](https://img.shields.io/npm/v/@ant-design/charts) ![npm](https://img.shields.io/npm/dm/@ant-design/flowchart) [![GitHub stars](https://img.shields.io/github/stars/ant-design/ant-design-charts)](https://github.com/ant-design/ant-design-charts/stargazers) [![npm License](https://img.shields.io/npm/l/@ant-design/charts.svg)](https://www.npmjs.com/package/@ant-design/charts) - -

- Website • - Quick Start • - Gallery • - FAQ • - Blog -

- -
- -## Case - -
- - -
- -## ✨ Features - -- Easy to use -- TypeScript - -## 📦 Installation - -```bash | pure -$ npm install @ant-design/flowchart -``` - -## 🔨 Usage - -```tsx | pure -import React from 'react'; -import { Flowchart } from '@ant-design/flowchart'; -import 'antd/dist/antd.css'; -import '@ant-design/flowchart/dist/index.css'; - -const DemoFlowchart = () => { - return ( -
- { - console.log(d, JSON.stringify(d)); - }} - toolbarPanelProps={{ - position: { - top: 0, - left: 0, - right: 0, - }, - }} - scaleToolbarPanelProps={{ - layout: 'horizontal', - position: { - right: 0, - top: -40, - }, - style: { - width: 150, - height: 39, - left: 'auto', - background: 'transparent', - }, - }} - canvasProps={{ - position: { - top: 40, - left: 0, - right: 0, - bottom: 0, - }, - }} - nodePanelProps={{ - position: { width: 160, top: 40, bottom: 0, left: 0 }, - }} - detailPanelProps={{ - position: { width: 200, top: 40, bottom: 0, right: 0 }, - }} - /> -
- ); -}; -export default DemoFlowchart; -``` - -Preview - - - -## 📜 Document & API - -```ts -export interface FlowchartProps extends FlowchartContainerProps { - /** 默认数据 */ - data?: Datum; - - /** 画布是否自动居中 */ - isAutoCenter?: boolean; - - /** 节点面板配置 */ - nodePanelProps?: NodePanelProps; - - /** 画布主要区域配置 */ - canvasProps?: CanvasProps; - - /** - * @title 画布状态 - * @description scan 会禁用一些画布事件,例如连线、鼠标右键等 - * @default "edit" - */ - mode?: 'edit' | 'scan'; - - /** toolbar */ - toolbarPanelProps?: ToolbarPanelProps; - - /** keyBinding */ - keyBindingProps?: false | KeybindingConfig; - - /** scale toolbar */ - scaleToolbarPanelProps?: ScaleToolbarPanelProps; - - /** form editor */ - detailPanelProps?: DetailPanelProps; - - /** 右键菜单配置 */ - contextMenuPanelProps?: ContextMenuPanelProps; - - /** popover */ - popoverProps?: PopoverProps; - - /** onReady */ - onReady?: (graph: IFlowchartGraph, app: IApplication) => void; - - /** 点击回调,仅支持 save-graph-data */ - onSave?: (data: Datum) => void; - - /** 新增节点时回调 */ - onAddNode?: (node: NsGraph.INodeConfig) => void; - - /** 新增边时回调 */ - onAddEdge?: (edge: NsGraph.IEdgeConfig) => void; - - /** xflow app 销毁前的回调 */ - onDestroy?: IAppDestroy; - - /** xflow app 初始化后的回调 */ - onConfigReady?: IAppConfigReady; - - /** 节点或边更新数据时调用 */ - onConfigChange?: (params: { data: Datum; type: string; config?: NsGraph.INodeConfig | NsGraph.IEdgeConfig }) => void; -} -``` - -## 🤝 How to Contribute - -Your contributions are always welcome! Please Do have a look at the [issues](https://github.com/ant-design/ant-design-charts/issues) first. - -## 📧 Contact us - -DingTalk group number: `44788198 `. - - - -## License - -MIT diff --git a/packages/flowchart/jest.config.js b/packages/flowchart/jest.config.js deleted file mode 100644 index 6f8dc6a64..000000000 --- a/packages/flowchart/jest.config.js +++ /dev/null @@ -1,10 +0,0 @@ -const { BaseJestConfig, OnlineConfig } = require('../../config/jest'); -module.exports = { - ...BaseJestConfig, - ...(process.env.DEBUG_MODE === '1' ? OnlineConfig : {}), - moduleNameMapper: { - '^lodash-es$': 'lodash', - '^.+\\.(css|less)$': 'identity-obj-proxy', - '@antv/xflow': '/node_modules/@antv/xflow/dist/index.umd.js', - }, -}; diff --git a/packages/flowchart/jest.setup.js b/packages/flowchart/jest.setup.js deleted file mode 100644 index 172d187cc..000000000 --- a/packages/flowchart/jest.setup.js +++ /dev/null @@ -1,15 +0,0 @@ -require('../../config/setup'); -if (!global._babelPolyfill) { - require('babel-polyfill'); - if (process.env.DEBUG_MODE) { - const createLink = (src) => { - const link = document.createElement('link'); - link.rel = 'stylesheet'; - link.className = 'dynamic-link'; - link.href = src; - document.getElementsByTagName('head')[0].appendChild(link); - }; - createLink('https://unpkg.com/antd@4.21.1/dist/antd.css'); - createLink('https://unpkg.com/@ant-design/flowchart@1.2.0/dist/index.css'); - } -} diff --git a/packages/flowchart/package.json b/packages/flowchart/package.json deleted file mode 100644 index 839c290ee..000000000 --- a/packages/flowchart/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "@ant-design/flowchart", - "version": "1.2.2", - "description": "Flowchart", - "bugs": { - "url": "https://github.com/ant-design/ant-design-charts/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ant-design/ant-design-charts.git" - }, - "main": "lib/index.js", - "unpkg": "dist/flowchart.min.js", - "module": "es/index.js", - "types": "es/index.d.ts", - "files": [ - "/lib", - "/es", - "/dist" - ], - "scripts": { - "start": "pnpm lib:es --w", - "build": "run-s clean lib dist less", - "build:lib": "pnpm build", - "ci": "pnpm run build && pnpm run test:coverage", - "clean": "rimraf lib es dist", - "dist": "webpack --config webpack.config.js --mode production", - "profile": "webpack --config webpack.config.js --mode production --profile --json > stats.json", - "lib": "run-p lib:*", - "lib:cjs": "tsc -p tsconfig.prod.json --target ES5 --module commonjs --outDir lib", - "lib:es": "tsc -p tsconfig.prod.json --target ES5 --module ESNext --outDir es", - "less": "run-p less:*", - "less:build": "node ./scripts/less.js", - "lint": "eslint --cache --ext .js,.jsx,.ts,.tsx --fix --format=pretty ./src && pnpm run lint:prettier", - "lint:prettier": "pnpm run prettier && git diff && prettier --version && prettier --check \"src/**/**.{js,jsx,tsx,ts,less,md,json}\" --end-of-line auto", - "prettier": "prettier --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", - "test": "jest", - "test:live": "cross-env DEBUG_MODE=1 jest --watch ./tests/graph/normal-spec.tsx --no-cache" - }, - "dependencies": { - "@antv/layout": "^0.1.17", - "@antv/x6": "^1.25.0", - "@antv/x6-react-components": "^1.1.13", - "@antv/x6-react-shape": "^1.4.5", - "@antv/xflow": "^1.0.53", - "react-color": "2.17.3", - "react-use": "17.3.1" - }, - "peerDependencies": { - "@ant-design/icons": "^4.6.0", - "antd": "^4.6.3", - "lodash": "^4.17.20", - "react": ">=16.8.4", - "react-dom": ">=16.8.4" - }, - "sideEffects": false, - "license": "MIT", - "devDependencies": { - "@types/react": "^18.0.0", - "antd": "^4.16.13", - "lodash": "^4.17.20", - "cross-env": "^7.0.3", - "npm-run-all": "^4.1.5", - "rimraf": "^3.0.2", - "@types/jest": "^26.0.0" - } -} diff --git a/packages/flowchart/scripts/less.js b/packages/flowchart/scripts/less.js deleted file mode 100644 index c8e982f9d..000000000 --- a/packages/flowchart/scripts/less.js +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env node - -const fs = require('fs'); -const os = require('os'); -const path = require('path'); -const fse = require('fs-extra'); -const cp = require('child_process'); - -const cwd = process.cwd(); -const es = path.join(cwd, 'es'); -const lib = path.join(cwd, 'lib'); -const dist = path.join(cwd, 'dist'); -const src = path.join(cwd, 'src'); -const styleEntry = path.join(cwd, 'src/style'); - -function compile(source, target) { - try { - let cmd = '../../node_modules/.bin/lessc'; - if (os.type() === 'Windows_NT') { - cmd = path.join(cwd, '../../node_modules/.bin/lessc.cmd'); - } - - cp.execFileSync(cmd, [ - // https://www.npmjs.com/package/less-plugin-npm-import - '--npm-import=prefix=~', - //https://lesscss.org/usage/#command-line-usage-relative-urls - '--rewrite-urls=all', - '--js', - source, - target, - ]); - } catch (error) { - console.log(error, source, target); - } -} - -let lessFiles = []; - -// Copy less files -function readdir(dir) { - if (fs.existsSync(dir)) { - const files = fs.readdirSync(dir); - files.forEach((file) => { - const sub = path.join(dir, file); - const stat = fs.statSync(sub); - if (stat && stat.isDirectory()) { - readdir(sub); - } else { - const ext = path.extname(file); - if (ext === '.less' || ext === '.css') { - console.log('find less file, compiling', file); - const less = path.relative(src, sub); - lessFiles.push({ - file: file, - absolutePath: sub, - relativePath: path.relative(styleEntry, sub), - }); - const name = less.substr(0, less.length - ext.length); - // copy less - fse.copySync(sub, path.join(es, less)); - fse.copySync(sub, path.join(lib, less)); - // compile less to css and compile - compile(sub, path.join(es, `${name}.css`)); - compile(sub, path.join(lib, `${name}.css`)); - } - } - }); - } -} - -// create dist for styles -function ensureDistIsCreated() { - const dirs = [es, lib]; - dirs.forEach((dir) => { - const dirPath = path.join(dir, 'style'); - if (!fs.existsSync(dirPath)) { - fs.mkdirSync(dirPath); - console.log('dir is created:', dirPath); - } - }); -} - -// Build components in one file: lib/style/components.less -function rollup(files) { - console.log('Generate "style/components.less"'); - let content = ''; - files.forEach((file) => { - if (fs.existsSync(file.absolutePath)) { - content += `@import "${file.relativePath}";\n`; - } - }); - const source = path.join(es, 'style', 'components.less'); - fs.writeFileSync(source, content); - fs.writeFileSync(path.join(lib, 'style', 'components.less'), content); - compile(source, path.join(es, 'style', 'components.css')); - compile(source, path.join(lib, 'style', 'components.css')); - compile(source, path.join(dist, 'index.css')); -} - -fs.readdir(src, (err, files) => { - lessFiles = []; - files.forEach((file) => { - const dirPath = path.join(src, file); - const stat = fs.statSync(dirPath); - if (stat.isDirectory()) { - readdir(path.join(src, file)); - } - }); - // create dist for styles - ensureDistIsCreated(); - // Build components in one file: lib/style/components.less - rollup(lessFiles); -}); diff --git a/packages/flowchart/src/components/menu/index.ts b/packages/flowchart/src/components/menu/index.ts deleted file mode 100644 index 49c5d8846..000000000 --- a/packages/flowchart/src/components/menu/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import type { NsNodeCmd, NsEdgeCmd, IMenuOptions, NsGraph } from '@antv/xflow'; -import { createCtxMenuConfig, MenuItemType } from '@antv/xflow'; -import { IconStore, XFlowNodeCommands, XFlowEdgeCommands } from '@antv/xflow'; -import { DeleteOutlined, EditOutlined, StopOutlined } from '@ant-design/icons'; - -/** menuitem 配置 */ -export namespace NsMenuItemConfig { - /** 注册菜单依赖的icon */ - IconStore.set('DeleteOutlined', DeleteOutlined); - IconStore.set('EditOutlined', EditOutlined); - IconStore.set('StopOutlined', StopOutlined); - - export const DELETE_EDGE: IMenuOptions = { - id: XFlowEdgeCommands.DEL_EDGE.id, - label: '删除边', - iconName: 'DeleteOutlined', - onClick: async ({ target, commandService }) => { - if (target.data) { - commandService.executeCommand(XFlowEdgeCommands.DEL_EDGE.id, { - edgeConfig: target.data as NsGraph.IEdgeConfig, - }); - } - }, - }; - - export const DELETE_NODE = (onDelNode): IMenuOptions => { - return { - id: XFlowNodeCommands.DEL_NODE.id, - label: '删除节点', - iconName: 'DeleteOutlined', - onClick: async ({ target, commandService }) => { - if (target.data && target?.data?.id) { - commandService.executeCommand(XFlowNodeCommands.DEL_NODE.id, { - nodeConfig: { id: target?.data?.id }, - }); - if (typeof onDelNode === 'function') onDelNode(target.data); - } - }, - }; - }; - - export const EMPTY_MENU: IMenuOptions = { - id: 'EMPTY_MENU_ITEM', - label: '暂无可用', - isEnabled: false, - iconName: 'DeleteOutlined', - }; - - export const SEPARATOR: IMenuOptions = { - id: 'separator', - type: MenuItemType.Separator, - }; -} - -export const useMenuConfig: Function = createCtxMenuConfig((config, proxy) => { - const { showOfficial = true, submenu, onDelNode } = proxy.getValue(); - config.setMenuModelService(async (target, model) => { - if (!target) { - return; - } - const { type } = target; - - switch (type) { - /** 节点菜单 */ - case 'node' /* */: - model.setValue({ - id: 'root', - type: MenuItemType.Root, - submenu: (showOfficial ? [NsMenuItemConfig.DELETE_NODE(onDelNode)] : []).concat( - submenu ? submenu({ ...config, menuType: 'node' }) : [], - ), - }); - break; - /** 边菜单 */ - case 'edge': - model.setValue({ - id: 'root', - type: MenuItemType.Root, - submenu: (showOfficial ? [NsMenuItemConfig.DELETE_EDGE] : []).concat( - submenu ? submenu({ ...config, menuType: 'edge' }) : [], - ), - }); - break; - /** 画布菜单 */ - case 'blank': - model.setValue({ - id: 'root', - type: MenuItemType.Root, - submenu: (showOfficial ? [NsMenuItemConfig.EMPTY_MENU] : []).concat( - submenu ? submenu({ ...config, menuType: 'blank' }) : [], - ), - }); - break; - /** 默认菜单 */ - default: - model.setValue({ - id: 'root', - type: MenuItemType.Root, - submenu: (showOfficial ? [NsMenuItemConfig.EMPTY_MENU] : []).concat( - submenu ? submenu({ ...config, menuType: 'blank' }) : [], - ), - }); - break; - } - }); -}); diff --git a/packages/flowchart/src/components/toolbar/constants.ts b/packages/flowchart/src/components/toolbar/constants.ts deleted file mode 100644 index 77c020e82..000000000 --- a/packages/flowchart/src/components/toolbar/constants.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * 全量 Command,用户通过 name 指定,支持配置式和命令式 - * enum Command {Undo, Redo, SaveGraphData,frontNode,backNode} - */ - -/** undo 操作 */ -const UNDO_CMD = 'undo-cmd'; -/** redo 操作 */ -const REDO_CMD = 'redo-cmd'; -/** 保存 */ -const SAVE_GRAPH_DATA = 'save-graph-data'; -/** 置前 */ -const FRONT_NODE = 'front-node'; -/** 置后 */ -const BACK_NODE = 'back-node'; - -const MULTI_SELECT = 'graph-toggle-multi-select'; - -const ADD_GROUP = 'add-group'; - -const DEL_GROUP = 'del-group'; - -const COPY = 'graph-copy-selection'; - -const PASTE = 'graph-paste-selection'; - -export const CommandPool = { - UNDO_CMD, - REDO_CMD, - SAVE_GRAPH_DATA, - FRONT_NODE, - BACK_NODE, - MULTI_SELECT, - ADD_GROUP, - DEL_GROUP, - COPY, - PASTE, -}; diff --git a/packages/flowchart/src/components/toolbar/index.tsx b/packages/flowchart/src/components/toolbar/index.tsx deleted file mode 100644 index f18e6cf1d..000000000 --- a/packages/flowchart/src/components/toolbar/index.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react'; -import { CanvasToolbar as XFlowToolbarPanel } from '@antv/xflow'; -import { useToolbarConfig } from './util'; -import { FlowchartProps } from '../../interface'; - -export const ToolbarPanel: React.FC = (props) => { - const { - layout = 'horizontal', - position = { top: 0, left: 240, right: 240, bottom: 0 }, - show = true, - className, - style, - } = props; - - const toolbarConfig = useToolbarConfig(props); - if (!show) { - return null; - } - return ( - - ); -}; - -export default ToolbarPanel; diff --git a/packages/flowchart/src/components/toolbar/util.ts b/packages/flowchart/src/components/toolbar/util.ts deleted file mode 100644 index 16d701e34..000000000 --- a/packages/flowchart/src/components/toolbar/util.ts +++ /dev/null @@ -1,337 +0,0 @@ -import { - createToolbarConfig, - IModelService, - IToolbarItemOptions, - NsGroupCmd, - uuidv4, - XFlowGroupCommands, - XFlowNodeCommands, - XFlowGraphCommands, - NsGraphCmd, - NsNodeCmd, - IconStore, - MODELS, -} from '@antv/xflow'; -import { getProps, Log, getGraphHistory, getGraphInstance } from '../../util'; -import { - UngroupOutlined, - SaveOutlined, - GroupOutlined, - GatewayOutlined, - UndoOutlined, - RedoOutlined, - VerticalAlignTopOutlined, - VerticalAlignBottomOutlined, - CopyOutlined, - SnippetsOutlined, -} from '@ant-design/icons'; -import { CommandPool } from './constants'; -import { CommandItem, FlowchartProps } from '../../interface'; - -export namespace TOOLBAR_ITEMS { - export const BACK_NODE = XFlowNodeCommands.BACK_NODE.id; - export const FRONT_NODE = XFlowNodeCommands.FRONT_NODE.id; - export const SAVE_GRAPH_DATA = XFlowGraphCommands.SAVE_GRAPH_DATA.id; - export const REDO_CMD = `${XFlowGraphCommands.REDO_CMD.id}`; - export const UNDO_CMD = `${XFlowGraphCommands.UNDO_CMD.id}`; - export const MULTI_SELECT = `${XFlowGraphCommands.GRAPH_TOGGLE_MULTI_SELECT.id}`; - export const ADD_GROUP = `${XFlowGroupCommands.ADD_GROUP.id}`; - export const DEL_GROUP = `${XFlowGroupCommands.DEL_GROUP.id}`; - export const COPY = `${XFlowGraphCommands.GRAPH_COPY.id}`; - export const PASTE = `${XFlowGraphCommands.GRAPH_PASTE.id}`; -} - -namespace NSToolbarConfig { - /** toolbar依赖的状态 */ - export interface IToolbarState { - isMultiSelctionActive: boolean; - isGroupSelected: boolean; - isNodeSelected: boolean; - isUndoable: boolean; - isRedoable: boolean; - } - - export const getDependencies = async (modelService: IModelService) => { - return [ - await MODELS.SELECTED_NODES.getModel(modelService), - await MODELS.GRAPH_ENABLE_MULTI_SELECT.getModel(modelService), - ]; - }; - - /** toolbar依赖的状态 */ - export const getToolbarState = async (modelService: IModelService) => { - // isMultiSelctionActive - const { isEnable: isMultiSelctionActive } = await MODELS.GRAPH_ENABLE_MULTI_SELECT.useValue(modelService); - // isGroupSelected - const isGroupSelected = await MODELS.IS_GROUP_SELECTED.useValue(modelService); - // isNormalNodesSelected: node不能是GroupNode - const isNormalNodesSelected = await MODELS.IS_NORMAL_NODES_SELECTED.useValue(modelService); - // undo redo - const isUndoable = await MODELS.COMMAND_UNDOABLE.useValue(modelService); - const isRedoable = await MODELS.COMMAND_REDOABLE.useValue(modelService); - - return { - isUndoable, - isRedoable, - isNodeSelected: isNormalNodesSelected, - isGroupSelected, - isMultiSelctionActive, - } as NSToolbarConfig.IToolbarState; - }; - - export const getToolbarItems = async ( - state: IToolbarState, - getIconConfig: any, - commands: CommandItem[], - flowchartId: string, - ) => { - const toolbarGroup: IToolbarItemOptions[] = []; - const history = getGraphHistory(flowchartId); - const graph = getGraphInstance(flowchartId); - const selectedCells = graph.getSelectedCells(); - - /** 撤销 */ - toolbarGroup.push({ - ...getIconConfig(CommandPool.UNDO_CMD), - id: TOOLBAR_ITEMS.UNDO_CMD, - isEnabled: history.canUndo(), - onClick: async () => { - history.undo(); - }, - }); - - /** 重做 */ - toolbarGroup.push({ - ...getIconConfig(CommandPool.REDO_CMD), - id: TOOLBAR_ITEMS.REDO_CMD, - isEnabled: history.canRedo(), - onClick: async () => { - history.redo(); - }, - }); - - /** FRONT_NODE */ - toolbarGroup.push({ - ...getIconConfig(CommandPool.FRONT_NODE), - id: TOOLBAR_ITEMS.FRONT_NODE, - isEnabled: state.isNodeSelected, - onClick: async ({ commandService, modelService }) => { - const node = await MODELS.SELECTED_NODE.useValue(modelService); - commandService.executeCommand(TOOLBAR_ITEMS.FRONT_NODE, { - nodeId: node?.id, - }); - }, - }); - - /** BACK_NODE */ - toolbarGroup.push({ - ...getIconConfig(CommandPool.BACK_NODE), - id: TOOLBAR_ITEMS.BACK_NODE, - isEnabled: state.isNodeSelected, - onClick: async ({ commandService, modelService }) => { - const node = await MODELS.SELECTED_NODE.useValue(modelService); - commandService.executeCommand(TOOLBAR_ITEMS.BACK_NODE, { - nodeId: node?.id, - }); - }, - }); - - /** 开启框选 */ - toolbarGroup.push({ - ...getIconConfig(CommandPool.MULTI_SELECT), - id: TOOLBAR_ITEMS.MULTI_SELECT, - active: state.isMultiSelctionActive, - onClick: async ({ commandService }) => { - commandService.executeCommand(TOOLBAR_ITEMS.MULTI_SELECT, {}); - }, - }); - - /** 新建群组 */ - toolbarGroup.push({ - ...getIconConfig(CommandPool.ADD_GROUP), - id: TOOLBAR_ITEMS.ADD_GROUP, - isEnabled: state.isNodeSelected, - onClick: async ({ commandService, modelService }) => { - const cells = await MODELS.SELECTED_CELLS.useValue(modelService); - const groupChildren = cells.map((cell) => cell.id); - commandService.executeCommand(TOOLBAR_ITEMS.ADD_GROUP, { - nodeConfig: { - id: uuidv4(), - renderKey: 'GROUP_NODE_RENDER_ID', // xflow 需要导出 - groupChildren, - groupCollapsedSize: { width: 200, height: 40 }, - label: '新建群组', - }, - }); - }, - }); - - /** 解散群组 */ - toolbarGroup.push({ - ...getIconConfig(CommandPool.DEL_GROUP), - id: TOOLBAR_ITEMS.DEL_GROUP, - isEnabled: state.isGroupSelected, - onClick: async ({ commandService, modelService }) => { - const cell = await MODELS.SELECTED_NODE.useValue(modelService); - const nodeConfig = cell.getData(); - commandService.executeCommand(XFlowGroupCommands.DEL_GROUP.id, { - nodeConfig: nodeConfig, - }); - }, - }); - - /** copy */ - toolbarGroup.push({ - ...getIconConfig(CommandPool.COPY), - id: TOOLBAR_ITEMS.COPY, - isEnabled: !!selectedCells?.length, - onClick: async ({ commandService }) => { - commandService.executeCommand(XFlowGraphCommands.GRAPH_COPY.id, {}); - }, - }); - - /** paste */ - toolbarGroup.push({ - ...getIconConfig(CommandPool.PASTE), - id: CommandPool.PASTE, - isEnabled: true, - onClick: async ({ commandService }) => { - commandService.executeCommand(XFlowGraphCommands.GRAPH_PASTE.id, {}); - }, - }); - - /** 保存数据 */ - toolbarGroup.push({ - ...getIconConfig(CommandPool.SAVE_GRAPH_DATA), - id: TOOLBAR_ITEMS.SAVE_GRAPH_DATA, - onClick: async ({ commandService }) => { - commandService.executeCommand(TOOLBAR_ITEMS.SAVE_GRAPH_DATA, { - saveGraphDataService: (meta, graphData) => { - const onSave = getProps(flowchartId, 'onSave'); - if (onSave) { - return onSave(graphData); - } - }, - }); - }, - }); - return [ - { - name: 'graphData', - items: toolbarGroup - .filter((item) => !!item?.iconName) - .sort((pre: IToolbarItemOptions & { command: string }, next: IToolbarItemOptions & { command: string }) => { - return ( - commands.findIndex((item: CommandItem) => item.command === pre.command) - - commands.findIndex((item: CommandItem) => item.command === next.command) - ); - }), - }, - ]; - }; -} - -/** 注册icon 类型 */ -const registerIcon = () => { - IconStore.set('SaveOutlined', SaveOutlined); - IconStore.set('UndoOutlined', UndoOutlined); - IconStore.set('RedoOutlined', RedoOutlined); - IconStore.set('VerticalAlignTopOutlined', VerticalAlignTopOutlined); - IconStore.set('VerticalAlignBottomOutlined', VerticalAlignBottomOutlined); - IconStore.set('GatewayOutlined', GatewayOutlined); - IconStore.set('GroupOutlined', GroupOutlined); - IconStore.set('UngroupOutlined', UngroupOutlined); - IconStore.set('CopyOutlined', CopyOutlined); - IconStore.set('SnippetsOutlined', SnippetsOutlined); -}; - -export const useToolbarConfig: Function = createToolbarConfig( - (toolbarConfig, proxy) => { - const { flowchartId } = proxy.getValue(); - const toolbarPanelProps = getProps(flowchartId, 'toolbarPanelProps') ?? {}; - registerIcon(); - - let { - commands = [ - { - command: CommandPool.REDO_CMD, - tooltip: '重做', - iconName: 'RedoOutlined', - }, - { - command: CommandPool.UNDO_CMD, - tooltip: '撤销', - iconName: 'UndoOutlined', - }, - { - command: CommandPool.FRONT_NODE, - tooltip: '置前', - iconName: 'VerticalAlignTopOutlined', - }, - { - command: CommandPool.BACK_NODE, - tooltip: '置后', - iconName: 'VerticalAlignBottomOutlined', - }, - { - command: CommandPool.MULTI_SELECT, - tooltip: '开启框选', - iconName: 'GatewayOutlined', - }, - { - command: CommandPool.ADD_GROUP, - tooltip: '新建群组', - iconName: 'GroupOutlined', - }, - { - command: CommandPool.DEL_GROUP, - tooltip: '解散群组', - iconName: 'UngroupOutlined', - }, - { - command: CommandPool.COPY, - tooltip: '复制', - iconName: 'CopyOutlined', - }, - { - command: CommandPool.PASTE, - tooltip: '粘贴', - iconName: 'SnippetsOutlined', - }, - { - command: CommandPool.SAVE_GRAPH_DATA, - tooltip: '保存', - iconName: 'SaveOutlined', - }, - ] as CommandItem[], - } = toolbarPanelProps; - - const getIconConfig = (commandName: string) => { - if (!Object.values(CommandPool).includes(commandName)) { - Log.warn(`unknown command: ${commandName}`); - return {}; - } - /** 暂时不支持自定义 icon,感觉使用上并不方便,后续再考虑接入 */ - return commands.find((item: CommandItem) => item.command === commandName); - }; - - /** 生产 toolbar item */ - toolbarConfig.setToolbarModelService(async (toolbarModel, modelService, toDispose) => { - const updateToolbarModel = async () => { - const state = await NSToolbarConfig.getToolbarState(modelService); - const toolbarItems = await NSToolbarConfig.getToolbarItems(state, getIconConfig, commands, flowchartId); - - toolbarModel.setValue((toolbar) => { - toolbar.mainGroups = toolbarItems; - }); - }; - const models = await NSToolbarConfig.getDependencies(modelService); - const subscriptions = models.map((model) => { - return model.watch(async () => { - updateToolbarModel(); - }); - }); - toDispose.pushAll(subscriptions); - }); - }, -); diff --git a/packages/flowchart/src/context.ts b/packages/flowchart/src/context.ts deleted file mode 100644 index c8d62e916..000000000 --- a/packages/flowchart/src/context.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createContext } from 'react'; - -const AppContext: any = createContext({}); - -export default AppContext; diff --git a/packages/flowchart/src/graph/appendUtils.ts b/packages/flowchart/src/graph/appendUtils.ts deleted file mode 100644 index 96bc6ac6e..000000000 --- a/packages/flowchart/src/graph/appendUtils.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** 向 graph 原型上挂在一系列方法 */ -import { IApplication } from '@antv/xflow'; -import { getGraphData, excLoadData } from '../util'; -import { IFlowchartGraph as IGraph } from '../interface'; - -export const appendUtils = (graph: IGraph, app: IApplication) => { - const x6Graph = graph; - /** 更新节点指定数据 - * @param {id} string 节点 id - * @param {key} string 需要更新的字段 - * @param {data} object 更新内容 - */ - const updateNodeKeyById = (id: string, key: string, data: object) => { - const currentNode = x6Graph.getCellById(id); - if (currentNode) { - x6Graph.getCellById(id).prop(key, { - ...currentNode[key], - ...data, - }); - } - }; - - x6Graph.updateNodeKeyById = updateNodeKeyById; - x6Graph.getGraphData = getGraphData; - x6Graph.loadData = (data) => { - excLoadData(app, data); - }; - - return x6Graph; -}; diff --git a/packages/flowchart/src/graph/constants.ts b/packages/flowchart/src/graph/constants.ts deleted file mode 100644 index f8129022a..000000000 --- a/packages/flowchart/src/graph/constants.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const DEFAULT_SCALE_TOOLBAR_PROPS = { - layout: 'horizontal', - position: { - right: 0, - top: -140, - }, - style: { - width: 150, - background: 'transparent', - left: 'auto', - }, -}; diff --git a/packages/flowchart/src/graph/index.less b/packages/flowchart/src/graph/index.less deleted file mode 100644 index 73b0fc389..000000000 --- a/packages/flowchart/src/graph/index.less +++ /dev/null @@ -1,70 +0,0 @@ -@import (inline) '../../node_modules/@antv/xflow/dist/index.css'; -@primaryColor: #3572f9; -@light-border: ~'1px solid #d9d9d9'; - -.xflow-app-workspace { - overflow: hidden; - border: 1px solid #d9d9d9; - - .xflow-workspace-panel { - z-index: 1; - background: #fff; - } - - svg { - overflow: visible !important; - } - - .x6-edge { - stroke-width: 1px; - &.x6-edge-selected { - path:nth-child(2) { - stroke: @primaryColor; - } - } - &:hover { - path:nth-child(2) { - stroke: @primaryColor; - } - } - &.hoverHighlight { - path:nth-child(2) { - stroke: @primaryColor; - } - } - } - .x6-port { - > circle { - stroke: #69c0ff; - } - } - .x6-widget-transform { - box-sizing: border-box !important; - margin: 0; - padding: 0; - border: 2px solid #3572f9; - box-shadow: 0 4px 4px 0 #dbe6ff; - - > div { - width: 8px; - height: 8px; - background-color: #fff; - border: 1px solid #3572f9; - } - } - - .xflow-json-form .ant-tabs-content-holder { - padding: 0 !important; - } - - .ant-collapse-header { - display: flex; - flex-wrap: nowrap; - align-items: flex-start; - padding: 12px 16px; - color: rgba(0, 0, 0, 0.85); - line-height: 1.5715; - cursor: pointer; - transition: all 0.3s, visibility 0s; - } -} diff --git a/packages/flowchart/src/graph/index.tsx b/packages/flowchart/src/graph/index.tsx deleted file mode 100644 index 1946cbff9..000000000 --- a/packages/flowchart/src/graph/index.tsx +++ /dev/null @@ -1,130 +0,0 @@ -// @ts-nocheck -import React, { useRef, useEffect, useCallback } from 'react'; -import { - XFlow, - FlowchartCanvas, - CanvasContextMenu, - KeyBindings, - uuidv4, - FlowchartNodePanel, - FlowchartFormPanel, - CanvasScaleToolbar, - FlowchartExtension, - // CanvasMiniMap, -} from '@antv/xflow'; -import { ToolbarPanel } from '../components/toolbar'; -import { useMenuConfig } from '../components/menu'; -import { setProps, setInstance, excLoadData } from '../util'; -import { useCmdConfig, useKeybindingConfig } from './service'; -import { FlowchartProps, IFlowchartGraph as IGraph } from '../interface'; -import AppContext from '../context'; -import { appendUtils } from './appendUtils'; -import { DEFAULT_SCALE_TOOLBAR_PROPS } from './constants'; - -const Flowchart: React.FC = (props) => { - const { - className, - style, - detailPanelProps, - toolbarPanelProps, - nodePanelProps = {}, - scaleToolbarPanelProps = {}, - contextMenuPanelProps = {}, - canvasProps = {}, - keyBindingProps, - // miniMapProps = {}, - onAddNode, - onDelNode, - onCopy, - onPaste, - onAddEdge, - onConfigChange, - onDestroy, - onConfigReady, - isAutoCenter, - data, - mode, - onReady, - } = props as any; - const uuidv4Ref = useRef(uuidv4()); - const container = useRef(); - setProps(props, uuidv4Ref.current, container); - const { - position = { top: 40, left: 240, right: 240, bottom: 0 }, - showPortsOnNodeSelected, - edgeConfig = {}, - } = canvasProps; - // const { position: miniMapPosition = { bottom: 12, right: 12 }, show: showMinimMap = true } = miniMapProps; - const graphRef = useRef(); - const menuConfig = useMenuConfig({ ...contextMenuPanelProps, onDelNode }); - const commandConfig = useCmdConfig({ - flowchartId: uuidv4Ref.current, - }); // 需要 getProps - const keybindingConfig = keyBindingProps || useKeybindingConfig({ onDelNode, onCopy, onPaste }); - const { show = true } = scaleToolbarPanelProps; - const { show: showMenu = true } = contextMenuPanelProps; - const loadData = useCallback( - async (app) => { - if (data) { - excLoadData(app, data); - } - }, - [data], - ); - - useEffect(() => { - return () => { - graphRef.current?.dispose(); - }; - }, []); - - return ( - -
- { - const X6Graph = (await app.getGraphInstance()) as any; - setInstance(X6Graph, app, uuidv4Ref.current); - X6Graph.flowchartId = uuidv4Ref.current; - graphRef.current = X6Graph; - loadData(app); - onReady?.(appendUtils(X6Graph, app), app); - }} - > - - - - - {show && } - {showMenu && } - {/* {showMinimMap && } */} - - - {keyBindingProps !== false && } - -
-
- ); -}; - -export default Flowchart; diff --git a/packages/flowchart/src/graph/service/cmd.ts b/packages/flowchart/src/graph/service/cmd.ts deleted file mode 100644 index d5825621b..000000000 --- a/packages/flowchart/src/graph/service/cmd.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { createCmdConfig, DisposableCollection, uuidv4 } from '@antv/xflow'; - -export const useCmdConfig: Function = createCmdConfig((config, proxy) => { - // 设置hook - config.setRegisterHookFn((hooks) => { - const list = [ - hooks.addNode.registerHook({ - name: 'get node config from backend api', - handler: async (args) => { - args.nodeConfig = { - ...args.nodeConfig, - id: args.nodeConfig.id || `node-${uuidv4()}`, - zIndex: args.nodeConfig.zIndex || 10, - /** 移除 _copied */ - label: args.nodeConfig.label?.replace?.(/\_copied/g, ''), - }; - }, - }), - ]; - const toDispose = new DisposableCollection(); - toDispose.pushAll(list); - return toDispose; - }); -}); diff --git a/packages/flowchart/src/graph/service/index.ts b/packages/flowchart/src/graph/service/index.ts deleted file mode 100644 index 0dfb95acc..000000000 --- a/packages/flowchart/src/graph/service/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { useCmdConfig } from './cmd'; -export { useKeybindingConfig } from './keyBinding'; diff --git a/packages/flowchart/src/graph/service/keyBinding.ts b/packages/flowchart/src/graph/service/keyBinding.ts deleted file mode 100644 index 7938c3c23..000000000 --- a/packages/flowchart/src/graph/service/keyBinding.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { - createKeybindingConfig, - XFlowNodeCommands, - XFlowEdgeCommands, - NsNodeCmd, - MODELS, - NsGraphCmd, - XFlowGraphCommands, -} from '@antv/xflow'; - -export const useKeybindingConfig = createKeybindingConfig((config, proxy) => { - const { onDelNode, onCopy, onPaste } = proxy.getValue(); - const emitBindEvents = async (modelService, callback) => { - const cells = await MODELS.SELECTED_CELLS.useValue(modelService); - if (typeof callback === 'function') callback(cells.map((item) => item.data)); - }; - config.setKeybindingFunc((regsitry) => { - return regsitry.registerKeybinding([ - { - id: 'delete node or edge', - keybinding: ['delete', 'backspace'], - callback: async function (item, modelService, cmd, e) { - const cells = await MODELS.SELECTED_CELLS.useValue(modelService); - // 先删除edges - await Promise.all( - cells.map((cell) => { - if (cell.isEdge()) { - return cmd.executeCommand(XFlowEdgeCommands.DEL_EDGE.id, { - edgeConfig: { ...cell.getData(), id: cell.id }, - }); - } - return null; - }), - ); - // 先删除nodes - await Promise.all( - cells.map((cell) => { - if (cell.isNode()) { - return cmd.executeCommand(XFlowNodeCommands.DEL_NODE.id, { - nodeConfig: { - ...cell.getData(), - id: cell.id, - }, - }); - } - return null; - }), - ); - emitBindEvents(modelService, onDelNode); - }, - }, - { - id: 'copy', - keybinding: ['command+c', 'ctrl+c'], - callback: async function (item, modelService, cmd, e) { - e.preventDefault(); - cmd.executeCommand(XFlowGraphCommands.GRAPH_COPY.id, {}); - emitBindEvents(modelService, onCopy); - }, - }, - { - id: 'paste', - keybinding: ['command+v', 'ctrl+v'], - callback: async function (item, modelService, cmd, e) { - e.preventDefault(); - cmd.executeCommand(XFlowGraphCommands.GRAPH_PASTE.id, {}); - emitBindEvents(modelService, onPaste); - }, - }, - ]); - }); -}); diff --git a/packages/flowchart/src/index.ts b/packages/flowchart/src/index.ts deleted file mode 100644 index ce8eda548..000000000 --- a/packages/flowchart/src/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { - XFlowNodeCommands, - XFlowGraphCommands, - IconStore, - WorkspacePanel, - usePanelContext, - FormItemWrapper, - XFlowAppProvider, - useXFlowApp, - XFlowEdgeCommands, - createKeybindingConfig, - FlowchartFormPanel as FormPanel, - FlowchartFormWrapper as FormWrapper, - EditorPanels, - FlowchartService, -} from '@antv/xflow'; -// 临时方案 -import Flowchart from './graph'; - -export { ToolbarPanel } from './components/toolbar'; -const { NodeService, EdgeService, GroupService, CanvasService } = FlowchartService; -export { - Flowchart, - WorkspacePanel, - XFlowNodeCommands, - XFlowGraphCommands, - usePanelContext, - FormItemWrapper, - IconStore, - XFlowAppProvider, - useXFlowApp, - XFlowEdgeCommands, - createKeybindingConfig, - FormPanel, - FormWrapper, - EditorPanels, - NodeService, - EdgeService, - GroupService, - CanvasService, -}; - -export * from './interface'; diff --git a/packages/flowchart/src/interface.ts b/packages/flowchart/src/interface.ts deleted file mode 100644 index 64c0a44d5..000000000 --- a/packages/flowchart/src/interface.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { - IGraphCommandService, - IModelService, - NsGraph, - IPosition, - NsJsonSchemaForm, - IToolbarLayout, - IAppDestroy, - IAppConfigReady, - IApplication, - KeybindingConfig, - IFlowchartGraphProps, - IFlowchartNodePanelProps, -} from '@antv/xflow'; -import { Cell, Graph } from '@antv/x6'; -import { PopoverProps as AntDPopoverConfig } from 'antd/es/popover'; - -export interface FlowchartContainerProps { - style?: React.CSSProperties; - className?: string; - loading?: boolean; - loadingTemplate?: React.ReactElement; - errorTemplate?: (e: Error) => React.ReactNode; -} - -type Datum = { - nodes?: unknown[]; - edges?: unknown[]; -}; - -export interface CustomNode { - /** 节点名称,唯一 */ - name: string; - /** 节点 React 组件 */ - component: NsGraph.INodeRender; - /** popover 组件 */ - popover?: React.Component | React.FC; - /** 默认标签 */ - label?: string; - /** 默认宽度 */ - width?: number; - /** 默认高度 */ - height?: number; - /** 连接锚点配置,默认上下左右四个 */ - ports?: NsGraph.INodeConfig['ports']; -} - -export interface RegisterNode { - title?: string; - nodes: CustomNode[]; -} - -export interface BaseProps { - style?: React.CSSProperties; - className?: string; - /** 是否展示 */ - show?: boolean; - /** 节点位置 */ - position?: IPosition; -} - -export type NodePanelProps = IFlowchartNodePanelProps; - -export type CanvasProps = Omit; - -export type Command = - | 'undo-cmd' - | 'redo-cmd' - | 'front-node' - | 'back-node' - | 'save-graph-data' - | 'multi-select' - | 'add-group' - | 'del-group' - | 'graph-toggle-multi-select' - | 'graph-copy-selection' - | 'graph-paste-selection'; - -export type CommandItem = { - /** 命令 */ - command: Command; - /** 名称 */ - text?: string; - /** tooltip */ - tooltip?: string; - /** iconName */ - iconName?: string; -}; -export interface ToolbarPanelProps extends BaseProps { - commands?: CommandItem[]; - layout?: IToolbarLayout; - readonly flowchartId?: string; -} - -export interface ScaleToolbarPanelProps extends BaseProps { - layout?: IToolbarLayout; -} - -export type MenuItem = { - id: string; - label: string; - render: () => JSX.Element; -}; - -export type MenuType = 'node' | 'edge' | 'blank'; - -export type ContextMenuPanelProps = Pick & { - /** 是否展示内置功能 */ - showOfficial?: boolean; - /** 自定义menu */ - submenu?: (cfg: { menuType: MenuType }) => MenuItem[]; -}; - -export interface DetailPanelProps extends BaseProps { - controlMapService?: (editorMap: NsJsonSchemaForm.IControlMap) => NsJsonSchemaForm.IControlMap; - formSchemaService?: (args: { - cell: Cell; - targetType: NsJsonSchemaForm.TargetType; - targetData: NsJsonSchemaForm.TargetData; - modelService: IModelService; - commandService: IGraphCommandService; - }) => Promise; - prefixClz?: string; - header?: React.ReactNode; - footer?: React.ReactNode; -} - -export interface GraphEvents { - /** 节点点击事件 */ - handleNodeClick?: (node: NsGraph.INodeConfig) => void; - /** 边点击事件 */ - handleEdgeClick?: (edge: NsGraph.IEdgeConfig) => void; -} - -export interface PopoverProps extends Omit { - title?: (data: NsGraph.INodeConfig) => React.ReactNode; - content?: (data: NsGraph.INodeConfig) => React.ReactNode; -} - -export interface IFlowchartGraph extends Graph { - getGraphData?: (flowchartId: string) => Promise; - updateNodeKeyById?: (id: string, key: string, data: object) => void; - loadData?: (data: Datum) => void; - readonly flowchartId?: string; -} - -export interface IGraphConfig {} - -// Flowchart 通用配置 -export interface FlowchartProps extends FlowchartContainerProps { - /** 默认数据 */ - data?: Datum; - /** 主题 */ - theme?: 'light' | 'dark'; - /** 画布的配置 */ - // graphConfig?: GraphConfig; - /** 画布是否自动居中 */ - isAutoCenter?: boolean; - /** 节点面板配置 */ - nodePanelProps?: NodePanelProps; - /** 画布主要区域配置 */ - canvasProps?: CanvasProps; - /** - * @title 画布状态 - * @description scan 会禁用一些画布事件,例如连线、鼠标右键等 - * @default "edit" - */ - mode?: 'edit' | 'scan'; - /** toolbar */ - toolbarPanelProps?: ToolbarPanelProps; - /** keyBinding */ - keyBindingProps?: false | KeybindingConfig; - /** scale toolbar */ - scaleToolbarPanelProps?: ScaleToolbarPanelProps; - /** mini map */ - // miniMapProps?: MiniMapProps; - /** form editor */ - detailPanelProps?: DetailPanelProps; - /** 右键菜单配置 */ - contextMenuPanelProps?: ContextMenuPanelProps; - /** popover */ - popoverProps?: PopoverProps; - /** onReady */ - onReady?: (graph: IFlowchartGraph, app: IApplication) => void; - /** 点击回调,仅支持 save-graph-data */ - onSave?: (data: Datum) => void; - /** 新增节点时回调 */ - onAddNode?: (node: NsGraph.INodeConfig) => void; - /** 删除节点时回调 */ - onDelNode?: (node: NsGraph.INodeConfig | NsGraph.INodeConfig[]) => void; - /** 复制节点时回调 */ - onCopy?: (node: NsGraph.INodeConfig[]) => void; - /** 粘贴节点时回调 */ - onPaste?: (node: NsGraph.INodeConfig[]) => void; - /** 新增边时回调 */ - onAddEdge?: (edge: NsGraph.IEdgeConfig) => void; - /** xflow app 销毁前的回调 */ - onDestroy?: IAppDestroy; - /** xflow app 初始化后的回调 */ - onConfigReady?: IAppConfigReady; - /** 节点或边更新数据时调用 */ - onConfigChange?: (params: { data: Datum; type: string; config?: NsGraph.INodeConfig | NsGraph.IEdgeConfig }) => void; -} - -export { NsGraph }; diff --git a/packages/flowchart/src/util/global.ts b/packages/flowchart/src/util/global.ts deleted file mode 100644 index 41bfc0d26..000000000 --- a/packages/flowchart/src/util/global.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { MutableRefObject } from 'react'; -import { IApplication } from '@antv/xflow'; -import { FlowchartProps, IFlowchartGraph as IGraph } from '../interface'; - -// 解决 xflow hooks 获取不到上层配置 -interface IGlobalProps { - [key: string]: { - config: object; - container?: MutableRefObject; - }; -} -export const globalProps: IGlobalProps = {}; - -/** 设置全局状态 */ -export const setProps = (props: FlowchartProps, flowchartId: string, container?: MutableRefObject) => { - globalProps[flowchartId] = { - config: props, - container, - }; -}; - -const graphInstance = new Map(); -const appInstance = new Map(); - -export const setInstance = (x6graph: IGraph, app: IApplication, flowchartId: string) => { - graphInstance.set(`${flowchartId}-x6graph`, x6graph); - appInstance.set(`${flowchartId}-app`, app); -}; - -export const getGraphInstance = (flowchartId: string) => { - return graphInstance.get(`${flowchartId}-x6graph`) as IGraph; -}; - -export const getAppInstance = (flowchartId: string) => { - return appInstance.get(`${flowchartId}-app`); -}; - -/** 获取全局状态 */ -export const getProps = (flowchartId: string, key: string) => { - return globalProps[flowchartId]?.config?.[key]; -}; -export const getContainer = (flowchartId: string, type = 'container') => { - return globalProps[flowchartId]?.[type]?.current; -}; diff --git a/packages/flowchart/src/util/index.ts b/packages/flowchart/src/util/index.ts deleted file mode 100644 index b54ddf104..000000000 --- a/packages/flowchart/src/util/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './global'; -export * from './util'; diff --git a/packages/flowchart/src/util/util.ts b/packages/flowchart/src/util/util.ts deleted file mode 100644 index a4b3c88da..000000000 --- a/packages/flowchart/src/util/util.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { getProps, getGraphInstance, getAppInstance } from './global'; -import { XFlowGraphCommands, NsGraphCmd } from '@antv/xflow'; - -export const Log = window.console; - -export const getGraphData = async (flowchartId: string) => { - const app = getAppInstance(flowchartId); - let data; - await app.executeCommand(XFlowGraphCommands.SAVE_GRAPH_DATA.id, { - saveGraphDataService: async (graphMeta, graphData) => { - data = graphData; - }, - } as NsGraphCmd.SaveGraphData.IArgs); - return data; -}; - -export const excLoadData = async (app, data) => { - if (!data?.nodes?.length) { - return; - } - const res = await app.executeCommand(XFlowGraphCommands.LOAD_DATA.id, { - loadDataService: async () => { - return data; - }, - } as NsGraphCmd.GraphLoadData.IArgs); - const { graphData } = res?.contextProvider()?.getResult(); - /** 3. 画布内容渲染 */ - await app.executeCommand(XFlowGraphCommands.GRAPH_RENDER.id, { - graphData, - }); -}; - -export const getFlowchartId = (e) => { - let currentNode = e?.e?.currentTarget; - if (!currentNode) { - return document.getElementsByClassName('xflow-canvas-container')[0]?.getAttribute('data-flowchart-id'); - } - let containter = null; - while (!containter) { - const current = currentNode.getElementsByClassName('xflow-canvas-container'); - if (current?.length > 0) { - containter = current; - } - currentNode = currentNode.parentNode; - } - return containter[0]?.getAttribute('data-flowchart-id'); -}; - -/** - * 防抖函数 - * @param func 执行函数 - * @param delay 延迟时间 ms - * @param immediate 是否立即执行 - */ -export const debounce = (func: Function, delay: number, immediate: boolean = false): Function => { - let timer: number | undefined; - - return function (this: unknown, ...args: any[]) { - let that = this; - if (immediate) { - func.apply(that, args); - immediate = false; - return; - } - clearTimeout(timer); - timer = window.setTimeout(() => { - func.apply(that, args); - }, delay); - }; -}; - -export const getGraphHistory = (flowchartId: string) => { - return getGraphInstance(flowchartId).history; -}; - -/** 更新配置时通知上传执行保存 */ -export const onConfigChange = debounce( - (config, flowchartId) => { - const configChange = getProps(flowchartId, 'onConfigChange'); - if (!configChange || typeof configChange !== 'function') { - return; - } - return configChange({ - data: getGraphData(flowchartId), - ...config, - }); - }, - 300, - true, -); diff --git a/packages/flowchart/tests/graph/normal-spec.tsx b/packages/flowchart/tests/graph/normal-spec.tsx deleted file mode 100644 index ae8702363..000000000 --- a/packages/flowchart/tests/graph/normal-spec.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { act } from 'react-dom/test-utils'; -import { Flowchart } from '../../src'; - -describe('Flowchart render', () => { - let container; - const DATA = {}; - beforeEach(() => { - container = document.createElement('div'); - container.className = 'container'; - container.style.height = '600px'; - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('chart render', () => { - const NODE_LINK = { - id: 'NODE_LINK', - label: 'NODE_LINK', - render: (ev) => { - return ( - <> - - 自定义渲染 - -

{ - console.log(ev); - }} - > - click -

- - ); - }, - }; - - act(() => { - ReactDOM.render( - { - console.log(d); - }} - onDelNode={(data) => { - console.log(data); - }} - toolbarPanelProps={{ - position: { - top: 0, - left: 0, - right: 0, - }, - }} - contextMenuPanelProps={{ - // showOfficial: false, - // @ts-ignore - submenu: (cfg) => { - const { menuType } = cfg; - if (menuType === 'node') { - return [NODE_LINK]; - } - return []; - }, - }} - scaleToolbarPanelProps={{ - layout: 'horizontal', - position: { - right: 0, - top: -40, - }, - // style: { - // background: 'transparent', - // }, - }} - onAddNode={() => { - console.log('onAddNode'); - }} - onAddEdge={() => { - console.log('onAddEdge'); - }} - onConfigChange={() => { - console.log('onConfigChange'); - }} - canvasProps={{ - showPortsOnNodeSelected: true, - config: { - connecting: { - router: '', - }, - }, - edgeConfig: { - attrs: { - line: { - stroke: 'red', - strokeDasharray: '', - }, - }, - }, - position: { - top: 40, - left: 0, - right: 0, - bottom: 0, - }, - }} - nodePanelProps={{ - position: { width: 160, top: 40, bottom: 0, left: 0 }, - }} - detailPanelProps={{ - position: { width: 200, top: 40, bottom: 0, right: 0 }, - }} - onReady={(graph, app) => { - // graph.loadData(DATA); - }} - />, - container, - ); - }); - const flowchartContainer = document.getElementsByClassName('xflow-canvas-container')[0]; - expect(flowchartContainer).not.toBeUndefined(); - }); -}); diff --git a/packages/flowchart/tsconfig.json b/packages/flowchart/tsconfig.json deleted file mode 100644 index 1452f0cf4..000000000 --- a/packages/flowchart/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "paths": { - "@antv/xflow-extension": ["node_modules/@antv/xflow-extension/"], - "@antv/xflow-core": ["node_modules/@antv/xflow-core/"] - } - }, - "include": ["src", "tests"] -} diff --git a/packages/flowchart/tsconfig.prod.json b/packages/flowchart/tsconfig.prod.json deleted file mode 100644 index 596e2cf72..000000000 --- a/packages/flowchart/tsconfig.prod.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["src"] -} diff --git a/packages/flowchart/typings/global/index.d.ts b/packages/flowchart/typings/global/index.d.ts deleted file mode 100644 index e4d598cc1..000000000 --- a/packages/flowchart/typings/global/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.less'; -declare module '*.module.less'; -declare module '*.png'; -declare module '*.svg'; diff --git a/packages/flowchart/webpack.config.js b/packages/flowchart/webpack.config.js deleted file mode 100644 index 5a4f05dd0..000000000 --- a/packages/flowchart/webpack.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const { getWebpackConfig } = require('../../config/webpack'); - -module.exports = getWebpackConfig('flowchart', 'Flowchart'); diff --git a/packages/graphs/.babelrc b/packages/graphs/.babelrc deleted file mode 100644 index 633f93f42..000000000 --- a/packages/graphs/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../.babelrc" -} diff --git a/packages/graphs/.eslintignore b/packages/graphs/.eslintignore deleted file mode 100644 index cc6f6d2b0..000000000 --- a/packages/graphs/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -dist -es -lib -node_modules -tests \ No newline at end of file diff --git a/packages/graphs/.eslintrc.js b/packages/graphs/.eslintrc.js deleted file mode 100644 index 6a8e85093..000000000 --- a/packages/graphs/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '../../.eslintrc.js', -}; diff --git a/packages/graphs/CHANGELOG.md b/packages/graphs/CHANGELOG.md deleted file mode 100644 index f8b989529..000000000 --- a/packages/graphs/CHANGELOG.md +++ /dev/null @@ -1,142 +0,0 @@ -## 1.4.0 - -`2023-02-20` - -- 🐞 修复 FlowAnalysisGraph edges `A->B && B -> A` 连线丢失问题 - -## 1.3.9 - -`2023-02-16` - -- 🐞 修复 FlowAnalysisGraph 数据成环时导致的 loop - -## 1.3.7 - -`2023-02-08` - -- 🐞 修复 [render-graph setFlowTag 会导致nodes和edges异常](https://github.com/ant-design/ant-design-charts/issues/1801) - -## 1.3.6 - -## 1.3.5 - -`2023-01-29` - -- 🔥 新增 `FlowAnalysisGraph level` 配置 -- 内置 [markerCfg.collapsed](https://github.com/ant-design/ant-design-charts/pull/1775/commits/2a37066cc436752d8726e008127d2f9bc5eb1fa6) 逻辑 -- 🐞 [Avoid duplicated graph](https://github.com/ant-design/ant-design-charts/pull/1749) when useGraph hook being called twice on dev build with StrictMode turned on - -## 1.3.4 - -`2023-01-16` - -- 🐞 `set ellipsis` 对非中文字符长度计算不准 - -## 1.3.3 - -- 新增 `marker:click` 事件 -- 🔥 新增 `FileTreeGraph` - - -## 1.3.3-beta.3 - -- 🔥 `FileTreeGraph` 新增 `nodeCfg.lineStyle` 配置 - -`2022-11-10` -## 1.3.3-beta.0 - -`2022-10-17` - -- 🔥 新增 `FileTreeGraph` - - -## 1.3.2 - -`2022-10-17` - -- 🔥 Graphs 支持 React18 - -## 1.3.2-beta.1 - -## 1.3.2-beta.0 - -`2022-10-13` - -- 🔥 MarkerCfg 支持 Array -- 🔥 ToolbarCfg customContent 透出 graph 实例 - -## 1.3.1 - -`2022-09-27` - -- 🐞 dist-tag `1.3.0` -- 🐞 修复 `getChildren` `syncData` 等类型错误 - -## 1.3.0 - -`2022-09-19` - -- 🔥 新增 `MindMapGraph` -- 🐞 修复 `getChildrenData` 数据异常报错 - -## 1.2.8 - -`2022-09-05` - -- 🐞 修复节点配置 level 后无法区分 markerCfg.show 状态 - -```ts -const level = 2; -const chartProps = { - data: TreeData, - level, - markerCfg: (cfg) => { - return { - position: 'right', - show: cfg.children?.length, - collapsed: cfg.depth >= level - 1, - }; - }, -}; -``` - -## 1.2.7 - -`2022-08-25` - -- 🔥 nodeCfg 新增 `percent` 配置 - - - -## 1.2.6 - -`2022-08-23` - -- 🐞 修复 `edgeCfg` 透传错误 - -## 1.2.5 - -`2022-08-22` - -- 🔥 `RadialGraph` 升级,可以动态拓展 -- 🔥 新增 `fetchLoading` 配置,可配合 `asyncData` `getChildren` 等配置做自定义 loading -- 🐞 完善 `layout` 定义 - -## 1.2.4 - -`2022-08-19` - -- 🔥 新增 `menuCfg` 配置 -- 🐞 [关系图透传节点配置,支持 image 等节点](https://github.com/ant-design/ant-design-charts/issues/1489) - -## 1.2.3 - -`2022-07-22` - -- 🐞 [指标拆解图 fitCenter 设置为 false 时, 树从头节点重新展开](https://github.com/ant-design/ant-design-charts/issues/1441) - -## 1.2.2 - -`2022-07-21` - -- 🔥 [来源去向图新增一个异步加载功能](https://github.com/ant-design/ant-design-charts/issues/1437) diff --git a/packages/graphs/README.md b/packages/graphs/README.md deleted file mode 100644 index 6f26a6576..000000000 --- a/packages/graphs/README.md +++ /dev/null @@ -1,284 +0,0 @@ -# @ant-design/graphs - -
- -A React relation graphs component library, based on [G6](https://github.com/antvis/G6). - -![npm](https://img.shields.io/npm/v/@ant-design/graphs) ![npm](https://img.shields.io/npm/dm/@ant-design/graphs) [![GitHub stars](https://img.shields.io/github/stars/ant-design/ant-design-charts)](https://github.com/ant-design/ant-design-charts/stargazers) [![npm License](https://img.shields.io/npm/l/@ant-design/charts.svg)](https://www.npmjs.com/package/@ant-design/charts) - -

- Website • - Quick Start • - Gallery • - FAQ • - Blog -

- -
- -## Case - -
- - - -
-
- - - -
- -## ✨ Features - -- Easy to use -- TypeScript - -## 📦 Installation - -```bash | pure -$ npm install @ant-design/graphs -``` - -## 🔨 Usage - -```tsx | pure -import React from 'react'; -import { DecompositionTreeGraph } from '@ant-design/graphs'; - -const DemoDecompositionTreeGraph = () => { - const data = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '广东', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '广西', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A13', - value: { - title: '海南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '华北', - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }; - - const config = { - data, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - nodeCfg: { - title: { - style: (cfg) => { - return { - fill: cfg?.value?.title === '青年' ? 'yellow' : '#fff', - }; - }, - }, - items: { - containerStyle: { - fill: '#fff', - }, - style: (cfg, group, type) => { - const styles = { - value: { - fill: '#52c41a', - }, - text: { - fill: '#aaa', - }, - icon: { - width: 10, - height: 10, - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - style: { - radius: [2, 2, 2, 2], - }, - }, - markerCfg: (cfg) => { - const { children } = cfg; - return { - show: children?.length, - }; - }, - }; - - return ; -}; - -export default DemoDecompositionTreeGraph; -``` - -## 📜 Document & API - -See chart API for details. Common props: - -````ts -// Graph 通用配置 -export interface CommonConfig extends GraphContainerConfig { - data: Datum; - /** 是否缩放节点大小自适应容器 */ - autoFit?: boolean; - - /** 是否将图平移到中心位置 */ - fitCenter?: boolean; - - width?: number; - height?: number; - pixelRatio?: number; - - /** 不同组件 layout 有差别,参考对应组件文档 */ - layout?: any; - - /** 边配置 */ - edgeCfg?: EdgeCfg; - - /** 节点配置 */ - nodeCfg?: NodeCfg; - - /** marker 配置 */ - markerCfg?: IMarkerCfg; - - /** 迷你地 */ - minimapCfg?: MiniMapConfig; - - /** 交互组件 */ - toolbarCfg?: ToolbarCfg; - - /** 提示 */ - tooltipCfg?: TooltipCfg; - - /** 交互行为 */ - behaviors?: string[]; - - /** 是否开启动画 */ - animate?: boolean; - - /** - * @title 是否自定义布局 - * @description 开启后,layout 失效,使用 data 里面的 x/y 进行数据布局 - * @example - * ```ts - * { - * id: '-3', - * x: 100, - * y: 100, - * value: { - * title: '来源页面A', - * items: [ - * { - * text: '曝光PV', - * value: '10.30万', - * icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - * }, - * ], - * }, - * }, - * ``` - * @default false - */ - customLayout?: boolean; - - /** 图表渲染完成回调 */ - onReady?: (graph: IGraph) => void; -} -```` - -## 🤝 How to Contribute - -Your contributions are always welcome! Please Do have a look at the [issues](https://github.com/ant-design/ant-design-charts/issues) first. - -## 📧 Contact us - -DingTalk group number: `44788198 `. - - - -## License - -MIT diff --git a/packages/graphs/jest.config.js b/packages/graphs/jest.config.js deleted file mode 100644 index fa82ad77e..000000000 --- a/packages/graphs/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -const { BaseJestConfig, OnlineConfig } = require('../../config/jest'); -module.exports = { - ...BaseJestConfig, - ...(process.env.DEBUG_MODE === '1' ? OnlineConfig : {}), - moduleNameMapper: { - 'd3-((?!linear)\\S*)': `/../../node_modules/d3-$1/dist/d3-$1.min.js`, - }, -}; diff --git a/packages/graphs/jest.setup.js b/packages/graphs/jest.setup.js deleted file mode 100644 index 52173dcfa..000000000 --- a/packages/graphs/jest.setup.js +++ /dev/null @@ -1 +0,0 @@ -require('../../config/setup'); diff --git a/packages/graphs/package.json b/packages/graphs/package.json deleted file mode 100644 index 6b278c879..000000000 --- a/packages/graphs/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "@ant-design/graphs", - "version": "1.4.0", - "description": "Relation graph", - "bugs": { - "url": "https://github.com/ant-design/ant-design-charts/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ant-design/ant-design-charts.git" - }, - "main": "lib/index.js", - "unpkg": "dist/graphs.min.js", - "module": "es/index.js", - "types": "es/index.d.ts", - "files": [ - "/lib", - "/es", - "/dist" - ], - "scripts": { - "start": "pnpm lib:es --w", - "build": "run-s clean lib dist", - "build:lib": "run-s clean lib", - "ci": "pnpm run build && pnpm run test:coverage", - "clean": "rimraf lib es dist", - "dist": "webpack --config webpack.config.js --mode production", - "profile": "webpack --config webpack.config.js --mode production --profile --json > stats.json", - "lib": "run-p lib:*", - "lib:cjs": "tsc -p tsconfig.prod.json --target ES5 --module commonjs --outDir lib", - "lib:es": "tsc -p tsconfig.prod.json --target ES5 --module ESNext --outDir es", - "lint": "eslint --cache --ext .js,.jsx,.ts,.tsx --fix --format=pretty ./src && pnpm run lint:prettier", - "lint:prettier": "pnpm run prettier && git diff && prettier --version && prettier --check \"src/**/**.{js,jsx,tsx,ts,less,md,json}\" --end-of-line auto", - "prettier": "prettier --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", - "test": "jest", - "test:live": "cross-env DEBUG_MODE=1 jest --watch ./tests/graphs/flow-loop-edges-spec.tsx --no-cache" - }, - "dependencies": { - "@antv/dom-util": "^2.0.4", - "@antv/g6": "^4.2.4", - "@antv/layout": "^0.1.17", - "@antv/util": "^2.0.9", - "insert-css": "^2.0.0", - "react-content-loader": "^5.0.4" - }, - "devDependencies": { - "@types/jest": "^26.0.0", - "@types/react": "^18.0.0", - "@types/react-dom": "^18.0.0", - "cross-env": "^7.0.3", - "npm-run-all": "^4.1.5", - "rimraf": "^3.0.2" - }, - "peerDependencies": { - "react": ">=16.8.4", - "react-dom": ">=16.8.4" - }, - "publishConfig": { - "access": "public" - }, - "sideEffects": false, - "license": "MIT" -} diff --git a/packages/graphs/src/components/conversion-dagre-graph/behaviors/custom-click.ts b/packages/graphs/src/components/conversion-dagre-graph/behaviors/custom-click.ts deleted file mode 100644 index edd5e8dbe..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/behaviors/custom-click.ts +++ /dev/null @@ -1,68 +0,0 @@ -import G6 from '@antv/g6'; -import type { G6GraphEvent } from '@antv/g6'; -import { setItemState, paintOnce, resetBaseStates } from '../utils'; -import { ITEM_STATE } from '../types'; - -G6.registerBehavior('conv-click', { - getDefaultCfg() { - return { - multiple: false, // 是否支持多选 - }; - }, - getEvents() { - return { - 'node:click': 'onNodeClick', - 'canvas:click': 'onCanvasClick', - 'edge:click': 'onEdgeClick', - }; - }, - handleNodeDetailInfoClick(event: G6GraphEvent) { - const shape = event.target; - // click节点详情icon时emit事件,用于节点详情的弹窗的展示和隐藏 - if (shape.get('name') === 'node-detail-info-icon') { - this.graph.emit('node:detailinfoclick', { - ...event, - type: 'node:detailinfoclick', - name: 'node:detailinfoclick', - }); - } else { - this.graph.emit('node:otherareaclick', { - ...event, - type: 'node:otherareaclick', - name: 'node:otherareaclick', - }); - } - }, - onNodeClick(event: G6GraphEvent) { - this.handleNodeDetailInfoClick(event); - const { item: currentNode } = event; - const { graph } = this; - // 获取之前的选中状态 - const isSelected = currentNode.hasState(ITEM_STATE.Selected); - paintOnce(graph, () => { - resetBaseStates(graph); - // 设置最新选中状态 - setItemState(graph, currentNode, ITEM_STATE.Selected, !isSelected); - // 重绘节点相关的边,暂时不做 - // refreshRelatedEdges(currentNode); - }); - }, - onEdgeClick(event: G6GraphEvent) { - const { item: currentEdge } = event; - const { graph } = this; - // 获取之前的选中状态 - const isSelected = currentEdge.hasState(ITEM_STATE.Selected); - paintOnce(graph, () => { - resetBaseStates(graph); - // 设置最新选中状态 - setItemState(graph, currentEdge, ITEM_STATE.Selected, !isSelected); - }); - }, - onCanvasClick() { - const { graph } = this; - // 点击画布,重置元素状态为初始值 - paintOnce(graph, () => { - resetBaseStates(graph); - }); - }, -}); diff --git a/packages/graphs/src/components/conversion-dagre-graph/behaviors/custom-hover.ts b/packages/graphs/src/components/conversion-dagre-graph/behaviors/custom-hover.ts deleted file mode 100644 index afc33fbd1..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/behaviors/custom-hover.ts +++ /dev/null @@ -1,128 +0,0 @@ -import G6 from '@antv/g6'; -import type { G6GraphEvent } from '@antv/g6'; -import { setItemState, paintOnce, getInOutPathEdges, clearActiveStates } from '../utils'; -import { ITEM_STATE } from '../types'; - -G6.registerBehavior('conv-hover', { - getDefaultCfg() { - return { - highlightData: { - nodes: [], - edges: [], - // 触发高亮的节点id - nodeId: null, - }, - }; - }, - getEvents() { - return { - 'node:mouseenter': 'onNodeMouseEnter', - 'node:mouseleave': 'onNodeMouseLeave', - 'node:mousemove': 'onNodeMouseMove', - 'edge:mouseenter': 'onEdgeMouseEnter', - 'edge:mouseleave': 'onEdgeMouseLeave', - }; - }, - handleNodeNameTooltip(event: G6GraphEvent) { - const shape = event.target; - // hover节点名称时emit事件,用于节点名称的tooltip的展示和隐藏 - if (shape.get('name') === 'node-name') { - this.graph.emit('node:nametooltipshow', { - ...event, - type: 'node:nametooltipshow', - name: 'node:nametooltipshow', - }); - } else { - this.graph.emit('node:nametooltiphide', { - ...event, - type: 'node:nametooltiphide', - name: 'node:nametooltiphide', - }); - } - }, - onNodeMouseEnter(event: G6GraphEvent) { - this.handleNodeNameTooltip(event); - const currentNode = event.item; - const model = currentNode.getModel(); - if (!currentNode || currentNode.destroyed || model.disabled) return; - - const states = currentNode.getStates(); - if (states.length) return; - - if (!this.highlightData.nodeId) { - this.highlightData = { - nodes: this.graph.getNodes().map((node) => node.getModel()), - edges: this.graph.getEdges().map((edge) => edge.getModel()), - }; - } - - // 高亮节点相关链路 - this.highlightPath(currentNode, this.highlightData.edges); - }, - onNodeMouseLeave(event: G6GraphEvent) { - // 清空所有元素的激活状态 - paintOnce(this.graph, () => { - clearActiveStates(this.graph); - }); - this.highlightData = { - nodes: [], - edges: [], - nodeId: null, - }; - }, - onNodeMouseMove(event: G6GraphEvent) { - this.handleNodeNameTooltip(event); - }, - onEdgeMouseEnter(event: G6GraphEvent) { - const currentEdge = event.item; - const model = currentEdge.getModel(); - - if (!currentEdge || currentEdge.destroyed || model.disabled) return; - - const states = currentEdge.getStates(); - if (states.length) return; - paintOnce(this.graph, () => { - setItemState(this.graph, currentEdge, ITEM_STATE.Active, true); - // 提升边层级 - currentEdge.toFront(); - }); - }, - onEdgeMouseLeave(event: G6GraphEvent) { - const edge = event.item; - setItemState(this.graph, edge, ITEM_STATE.Active, false); - }, - // 高亮节点相关的链路 - highlightPath(currentNode, queriedEdges = []) { - const currentNodeId = currentNode.getModel().id; - const { nodeId: lastNodeId, edges: lastHighlightEdges } = this.highlightData; - // 要高亮节点与上一次高亮节点一样,同时相关路径也一样,则不再触发高亮操作 - if (lastNodeId === currentNodeId && queriedEdges === lastHighlightEdges) { - return; - } - const { relativeOutEdges, relativeInEdges } = getInOutPathEdges(currentNodeId, queriedEdges); - const relativeNodeIds = new Set(); - relativeOutEdges.forEach((edge) => { - relativeNodeIds.add(edge.source); - relativeNodeIds.add(edge.target); - }); - const relativeEdgeIds = relativeOutEdges.map((edge) => edge.id); - - paintOnce(this.graph, () => { - relativeEdgeIds.forEach((edgeId) => { - const edge = this.graph.findById(edgeId); - setItemState(this.graph, edge, ITEM_STATE.Active, true); - // 置顶 - edge.toFront(); - }); - setItemState(this.graph, currentNode, ITEM_STATE.Active, true); - // 提升节点层级 - currentNode.toFront(); - }); - - this.highlightData = { - nodeId: currentNodeId, - edges: relativeOutEdges, - nodes: relativeNodeIds, - }; - }, -}); diff --git a/packages/graphs/src/components/conversion-dagre-graph/behaviors/index.ts b/packages/graphs/src/components/conversion-dagre-graph/behaviors/index.ts deleted file mode 100644 index b976391b0..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/behaviors/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Graph } from '@antv/g6'; -import './custom-hover'; -import './custom-click'; - -const modes = { - default: ['conv-hover', 'conv-click'], -}; - -export default (graph: Graph) => { - Object.keys(modes).forEach((key) => { - graph.addBehaviors(modes[key], key); - }); -}; diff --git a/packages/graphs/src/components/conversion-dagre-graph/constants/defaultConfig.ts b/packages/graphs/src/components/conversion-dagre-graph/constants/defaultConfig.ts deleted file mode 100644 index d85c364e7..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/constants/defaultConfig.ts +++ /dev/null @@ -1,37 +0,0 @@ -// 默认布局配置 -export const DEFAULT_LAYOUT_OPTIONS = { - rankdir: 'TB', - align: undefined, // 节点居中对齐 - // align: 'UL', // 节点居中对齐在设置layer的情况下有bug,暂时使用这个 - nodesep: 20, - ranksep: 75, -}; - -// 默认节点配置 -export const DEFAULT_NODE = { - type: 'conv-node', - anchorPoints: [ - [0.5, 0], - [0.5, 1], - [0, 0.5], - [1, 0.5], - ], -}; - -// 默认边配置 -export const DEFAULT_EDGE = { - type: 'conv-cubic-vertical', - sourceAnchor: 1, - targetAnchor: 0, - style: { - stroke: '#B8C3D9', - lineWidth: 1, - }, -}; - -// 默认画布mode -export const DEFAULT_MODE = [ - 'drag-canvas', // 拖动画布 - 'zoom-canvas', // 缩放画布 - 'drag-node', // 拖动节点 -]; diff --git a/packages/graphs/src/components/conversion-dagre-graph/constants/index.ts b/packages/graphs/src/components/conversion-dagre-graph/constants/index.ts deleted file mode 100644 index 5b27ddc81..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/constants/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './defaultConfig'; -export * from './states'; diff --git a/packages/graphs/src/components/conversion-dagre-graph/constants/states.ts b/packages/graphs/src/components/conversion-dagre-graph/constants/states.ts deleted file mode 100644 index e62679029..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/constants/states.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ITEM_STATE } from '../types'; - -export const BASE_STATES: ITEM_STATE[] = [ITEM_STATE.Active, ITEM_STATE.Selected]; - -export const SIZE_IMPACT_STATES: ITEM_STATE[] = [ITEM_STATE.Active, ITEM_STATE.Selected]; diff --git a/packages/graphs/src/components/conversion-dagre-graph/edges/baseEdge.ts b/packages/graphs/src/components/conversion-dagre-graph/edges/baseEdge.ts deleted file mode 100644 index 7892c7f20..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/edges/baseEdge.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { setItemStateStyle, getArrowConfig } from '../utils'; - -export default { - draw(cfg, group, path) { - const { - custom: { ratio }, - style: { dashed, stroke, endArrow = true, sizeMapping = true }, - } = cfg; - let borderWidth = 0; - // 如果开启了大小映射,则根据比率映射边框宽度 - if (sizeMapping) { - borderWidth = !isNaN(ratio) && ratio !== Infinity ? Math.max(2, Math.min(72, 72 * ratio)) : 2; - } - - // 添加边框 - const keyShape = group?.addShape('path', { - attrs: { - stroke, - opacity: 0.2, - path, - lineWidth: borderWidth, - }, - name: 'path-border-shape', - }); - - // 路径主线 - group?.addShape('path', { - attrs: { - stroke, - path, - endArrow: endArrow ? getArrowConfig(stroke) : null, - lineDash: dashed ? [3, 3] : [], - }, - name: 'path-shape', - }); - return keyShape; - }, - afterDraw(cfg, group) { - const { - label, - style: { labelFill }, - } = cfg; - const shape = group?.get('children')[0]; - // 获取路径图形的中点坐标 - const midPoint = shape.getPoint(0.5); - if (label) { - // 绘制label - const labelShape = group?.addShape('text', { - attrs: { - text: label, - x: midPoint.x, - y: midPoint.y, - fill: labelFill, - opacity: 0.85, - fontFamily: 'Roboto-Regular', - fontSize: 12, - textAlign: 'center', - textBaseline: 'middle', - }, - name: 'label-shape', - }); - const labelBbox = labelShape?.getBBox(); - const padding = 5; // 四周的留白 - - // 绘制label背景框 - group?.addShape('rect', { - attrs: { - width: labelBbox.width + padding * 2, - height: labelBbox.height + padding * 2, - x: midPoint.x - labelBbox.width / 2 - padding, - y: midPoint.y - labelBbox.height / 2 - padding, - fill: '#fff', - }, - name: 'label-bg-shape', - labelRelated: true, - }); - - // 边名称labelShape上移一个层级 - if (labelShape) { - labelShape.toFront(); - } - } - }, - setState(name, value, edge) { - // 设置状态样式 - setItemStateStyle(edge, 'edge'); - }, -}; diff --git a/packages/graphs/src/components/conversion-dagre-graph/edges/convCubicHorizontal.ts b/packages/graphs/src/components/conversion-dagre-graph/edges/convCubicHorizontal.ts deleted file mode 100644 index 719270f8a..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/edges/convCubicHorizontal.ts +++ /dev/null @@ -1,31 +0,0 @@ -import G6 from '@antv/g6'; -import type { EdgeConfig } from '@antv/g6'; -import baseEdge from './baseEdge'; - -// 自定义转化边 -export const registerConvCubicHorizontal = () => { - G6.registerEdge('conv-cubic-horizontal', { - ...baseEdge, - draw(cfg: EdgeConfig, group) { - const { startPoint, endPoint } = cfg; - const hgap = Math.abs(endPoint.y - startPoint.y); - // 水平三阶贝塞尔曲线,两端留4px的汇总直线 - const path = [ - ['M', startPoint.x, startPoint.y], - ['L', startPoint.x + 4, startPoint.y], - [ - 'C', - startPoint.x < endPoint.x ? startPoint.x + hgap / 2 : startPoint.x - hgap / 2, - startPoint.y, - startPoint.x < endPoint.x ? endPoint.x - hgap / 2 : endPoint.x + hgap / 2, - endPoint.y, - endPoint.x - 15, - endPoint.y, - ], - ['L', endPoint.x, endPoint.y], - ]; - - return baseEdge.draw(cfg, group, path); - }, - }); -} diff --git a/packages/graphs/src/components/conversion-dagre-graph/edges/convCubicVertical.ts b/packages/graphs/src/components/conversion-dagre-graph/edges/convCubicVertical.ts deleted file mode 100644 index 306b3348f..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/edges/convCubicVertical.ts +++ /dev/null @@ -1,32 +0,0 @@ -import G6 from '@antv/g6'; -import type { EdgeConfig } from '@antv/g6'; -import { getArrowConfig } from '../utils'; -import baseEdge from './baseEdge'; - -// 自定义转化边 -export const registerConvCubicVertical = () => { - G6.registerEdge('conv-cubic-vertical', { - ...baseEdge, - draw(cfg: EdgeConfig, group) { - const { startPoint, endPoint } = cfg; - const hgap = Math.abs(endPoint.y - startPoint.y); - // 垂直三阶贝塞尔曲线,两端留4px的汇总直线 - const path = [ - ['M', startPoint.x, startPoint.y], - ['L', startPoint.x, startPoint.y + 4], - [ - 'C', - startPoint.x, - startPoint.y < endPoint.y ? startPoint.y + hgap / 2 : startPoint.y - hgap / 2, - endPoint.x, - startPoint.y < endPoint.y ? endPoint.y - hgap / 2 : endPoint.y + hgap / 2, - endPoint.x, - endPoint.y - 15, - ], - ['L', endPoint.x, endPoint.y], - ]; - - return baseEdge.draw(cfg, group, path); - }, - }); -} diff --git a/packages/graphs/src/components/conversion-dagre-graph/edges/convLine.ts b/packages/graphs/src/components/conversion-dagre-graph/edges/convLine.ts deleted file mode 100644 index 3182e34e6..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/edges/convLine.ts +++ /dev/null @@ -1,20 +0,0 @@ -import G6 from '@antv/g6'; -import type { EdgeConfig } from '@antv/g6'; -import baseEdge from './baseEdge'; - - -export const registerConvLine = () => { - // 自定义转化边 - G6.registerEdge('conv-line', { - ...baseEdge, - draw(cfg: EdgeConfig, group) { - const { startPoint, endPoint } = cfg; - // 直线,线条样式、箭头自定义 - const path = [ - ['M', startPoint.x, startPoint.y], - ['L', endPoint.x, endPoint.y], - ]; - return baseEdge.draw(cfg, group, path); - }, - }); -} diff --git a/packages/graphs/src/components/conversion-dagre-graph/edges/index.ts b/packages/graphs/src/components/conversion-dagre-graph/edges/index.ts deleted file mode 100644 index 5d0498975..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/edges/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { registerConvCubicVertical } from './convCubicVertical'; -import { registerConvCubicHorizontal } from './convCubicHorizontal'; -import { registerConvLine } from './convLine'; - -export const resigterEdges = () => { - registerConvCubicVertical(); - registerConvCubicHorizontal(); - registerConvLine(); -}; \ No newline at end of file diff --git a/packages/graphs/src/components/conversion-dagre-graph/index.tsx b/packages/graphs/src/components/conversion-dagre-graph/index.tsx deleted file mode 100644 index 46a1fefa6..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/index.tsx +++ /dev/null @@ -1,308 +0,0 @@ -import React, { Component } from 'react'; -import G6 from '@antv/g6'; -import type { Graph as G6Graph } from '@antv/g6'; -import { isEqual } from 'lodash'; -import { DEFAULT_LAYOUT_OPTIONS, DEFAULT_NODE, DEFAULT_EDGE, DEFAULT_MODE } from './constants'; -import type { Props } from './types'; -import { ITEM_STATE } from './types'; -import { transformOriginData, drawLayerName, updateEdgeAnchorAndType } from './utils'; -import registerBehavior from './behaviors'; -import { resigterNodes } from './nodes'; -import { resigterEdges } from './edges'; -import { resigterLayout } from './layout'; - -export default class ConversionDagreGraph extends Component { - private container: HTMLElement | null; - private graph: G6Graph | null; - private shouldCacheZoomAndTranslate: boolean; - private cacheData; - private resizeObserver: any; - - static defaultProps = { - data: null, - layerOrder: [], - segmLayer: '', - ratioMethod: 'both', - layout: { - rankdir: 'TB', // 默认从上到下 - }, - }; - - constructor(props: Props) { - super(props); - this.container = null; - this.graph = null; - this.shouldCacheZoomAndTranslate = false; - const { data, layerOrder, segmLayer, ratioMethod } = props; - this.state = { - graphData: transformOriginData(data, layerOrder, segmLayer, ratioMethod), - }; - } - - componentDidMount() { - // 先做图相关的注册:如节点、边、布局 - this.registerGraphRelative(); - // 创建主图 - this.newGraph(); - // 绘制节点和边 - this.renderGraph(); - } - - static getDerivedStateFromProps(props, state) { - const { data, layerOrder, segmLayer, ratioMethod } = props; - // props数据 -> G6渲染图数据 - const graphData = transformOriginData(data, layerOrder, segmLayer, ratioMethod); - return { - graphData, - }; - } - - componentDidUpdate(prevProps) { - const { layerOrder, layout, data } = this.props; - // 缓存当前视口状态 - this.handleCacheGraph(); - const { graphData } = this.state; - const prevGraphData = transformOriginData( - prevProps.data, - prevProps.layerOrder, - prevProps.segmLayer, - prevProps.ratioMethod, - ); - this.shouldCacheZoomAndTranslate = !this.getGraphShallowDiff(data, prevProps.data); - if (isEqual(prevGraphData, graphData) && !isEqual(layout, prevProps.layout)) { - // 仅更新布局 - this.graph.updateLayout(this.getLayoutParams(!isEqual(layout, prevProps.layout))); - return; - } - // 数据变化或者层级顺序发生变化 - if (!isEqual(prevGraphData, graphData) || !isEqual(layerOrder, prevProps.layerOrder)) { - // 更新布局 - this.graph.updateLayout(this.getLayoutParams(!isEqual(layerOrder, prevProps.layerOrder))); - // 重新绘制节点和边 - this.renderGraph(); - } - } - - shouldComponentUpdate(nextProps, nextState) { - const { graphData } = this.state; - const nextGraphData = transformOriginData( - nextProps.data, - nextProps.layerOrder, - nextProps.segmLayer, - nextProps.ratioMethod, - ); - if (!isEqual(nextGraphData, graphData) || !isEqual(nextProps.layout, this.props.layout)) { - return true; - } - return false; - } - - componentWillUnmount() { - // 移除事件监听 - this.removeEventListener(); - } - - // 图相关的注册 - registerGraphRelative = () => { - // 注册节点 - resigterNodes(); - // 注册边 - resigterEdges(); - // 注册布局 - resigterLayout(); - }; - - // 浅比较图数据: 只比较图结构有没有变化 - getGraphShallowDiff = (data = { nodes: [], edges: [] }, prevData = { nodes: [], edges: [] }) => { - const { nodes, edges } = data; - const { nodes: prevNodes, edges: prevEdges } = prevData; - if (nodes.length !== prevNodes.length || edges.length !== prevEdges.length) { - return true; - } - const noNodeChange = nodes.every((node) => prevNodes.find((prevNode) => prevNode.id === node.id)); - const noEdgeChange = edges.every((edge) => prevEdges.find((prevEdge) => prevEdge.id === edge.id)); - return !(noNodeChange && noEdgeChange); - }; - - // 创建主图 - newGraph = () => { - if (this.graph) { - this.removeEventListener(); - this.graph.destroy(); - } - const width = this.container?.scrollWidth; - const height = this.container?.scrollHeight; - const graph = new G6.Graph({ - container: this.container, - width, - height, - modes: { - default: DEFAULT_MODE, - }, - defaultNode: DEFAULT_NODE, - defaultEdge: DEFAULT_EDGE, - layout: this.getLayoutParams(), - minZoom: 0.001, - }); - this.graph = graph; - const { onReady } = this.props; - if (onReady) { - onReady(graph); - } - // 注册自定义behavior - registerBehavior(this.graph); - this.addEventListener(); - }; - - // 绘制节点和边 - renderGraph = () => { - const { graphData } = this.state; - this.graph.data(graphData); - this.graph.render(); - }; - - // 添加事件监听 - addEventListener = () => { - // 布局完成 - this.graph.on('afterlayout', this.handleAfterLayout); - }; - - // 移除事件监听 - removeEventListener = () => { - if (this.graph && !this.graph?.destroyed) { - // 移除布局完成监听 - this.graph.off('afterlayout', this.handleAfterLayout); - // 移除container resize监听 - this.resizeObserver.disconnect(); - } - }; - - // 获取布局参数 - getLayoutParams = (forceLayout?: boolean) => { - const { layout, data } = this.props; - // 是否每个节点都有位置信息 - const hasPosition = data?.nodes?.every((node) => node.x !== undefined && node.y !== undefined); - // 如果每个节点都有位置信息,则走自定义preset布局 - if (!forceLayout && hasPosition) { - return { - type: 'conv-preset', - }; - } - return { - ...DEFAULT_LAYOUT_OPTIONS, - ranksep: layout.rankdir === 'TB' ? 75 : 150, - ...layout, - type: 'dagre', - }; - }; - - // 布局完成回调 - handleAfterLayout = () => { - const { - layerOrder, - layout: { rankdir }, - } = this.props; - if (!layerOrder?.length) { - // 画布内容自适应视口大小 - this.graph.fitView(20); - return; - } - // 更新边对应的类型、起点和终点的连接点 - updateEdgeAnchorAndType(this.graph, layerOrder, rankdir); - // 绘制层级名称 - drawLayerName(this.graph, layerOrder, rankdir); - if (this.shouldCacheZoomAndTranslate) { - // 设置画布缩放比、位移、选中元素 - this.setCacheGraph(); - } else { - // 画布内容自适应视口大小 - this.graph.fitView(20); - // 首次非空图数据,缓存当前视口状态 - if (this.state.graphData?.nodes?.length) { - this.shouldCacheZoomAndTranslate = true; - this.handleCacheGraph(); - } - } - }; - - // 缓存画布缩放比、画布位移、选中元素 - handleCacheGraph = () => { - if (!this.graph || this.graph.destroyed) { - return; - } - const width = this.graph.get('width'); - const height = this.graph.get('height'); - // 记录保存时的视口中心点对应的canvas坐标 - const centerPoint = this.graph.getCanvasByPoint(width / 2, height / 2); - // 选中的节点 - const selectedNodes = this.graph - .getNodes() - .filter((node) => node.hasState(ITEM_STATE.Selected)) - .map((node) => node.get('id')); - // 选中的边 - const selectedEdges = this.graph - .getEdges() - .filter((edge) => edge.hasState(ITEM_STATE.Selected)) - .map((edge) => edge.get('id')); - // 缓存视口数据 - this.cacheData = { - zoom: this.graph.getZoom(), // 缩放比 - centerPoint, // 视口中心对应的canvas坐标 - selectedNodes, // 选中的节点 - selectedEdges, // 选中的边 - }; - }; - - // 设置画布缩放比、位移、选中的节点 - setCacheGraph = () => { - if (!this.cacheData) { - return; - } - const { - selectedNodes, - selectedEdges, - zoom, - centerPoint: { x, y }, - } = this.cacheData; - const width = this.graph.get('width'); - const height = this.graph.get('height'); - this.graph.zoomTo(zoom); - // 获取视口中心点对应的canvas坐标 - const newCenterPoint = this.graph.getCanvasByPoint(width / 2, height / 2); - // 做视口中心点的平移 - this.graph.translate(x - newCenterPoint.x, y - newCenterPoint.y); - // 还原选中的节点状态 - selectedNodes.forEach((selectedNode) => { - this.graph.setItemState(selectedNode, ITEM_STATE.Selected, true); - }); - // 还原选中的边状态 - selectedEdges.forEach((selectedEdge) => { - this.graph.setItemState(selectedEdge, ITEM_STATE.Selected, true); - }); - }; - - handleMouseDown = (event) => { - //阻止外层拖动影响 - event.preventDefault(); - }; - - render(): React.ReactNode { - const { className, style: propsStyle = {} } = this.props; - const style = { - width: '100%', - height: '100%', - ...propsStyle, - }; - - return ( -
{ - this.container = container; - }} - /> - ); - } -} diff --git a/packages/graphs/src/components/conversion-dagre-graph/layout/conv-preset.ts b/packages/graphs/src/components/conversion-dagre-graph/layout/conv-preset.ts deleted file mode 100644 index df0af05d8..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/layout/conv-preset.ts +++ /dev/null @@ -1,11 +0,0 @@ -import G6 from '@antv/g6'; - -// 自定义preset布局,如果节点中都有位置信息时走这里 -export const registerConvPreset = () => { - G6.registerLayout('conv-preset', { - // 执行布局 - execute: function execute() { - // 执行一次空布局,目的是为了走布局流程触发afterlayout - }, - }); -} diff --git a/packages/graphs/src/components/conversion-dagre-graph/layout/index.ts b/packages/graphs/src/components/conversion-dagre-graph/layout/index.ts deleted file mode 100644 index 2f90178b7..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/layout/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { registerConvPreset } from './conv-preset'; - -export const resigterLayout = () => { - registerConvPreset(); -}; \ No newline at end of file diff --git a/packages/graphs/src/components/conversion-dagre-graph/nodes/convNode.ts b/packages/graphs/src/components/conversion-dagre-graph/nodes/convNode.ts deleted file mode 100644 index 1b7e35475..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/nodes/convNode.ts +++ /dev/null @@ -1,171 +0,0 @@ -import G6 from '@antv/g6'; -import type { NodeConfig } from '@antv/g6'; -import { setItemStateStyle } from '../utils'; - -export const registerConvNode = () => { - // 自定义转化节点 - G6.registerNode('conv-node', { - options: {}, - draw(cfg: NodeConfig, group) { - const { - custom = {} as any, - style: { stroke, textColor }, - size = 150, - } = cfg; - const label = cfg.label as string; - const { measure = {}, relatedMeasures = [] } = custom; - const showFormattedValue = - measure.formattedValue !== undefined && measure.formattedValue !== null; - // 最外层描边(光晕) - const keyShape = group.addShape('rect', { - attrs: { - x: 0, - y: 0, - width: size as number, - height: 122, - lineWidth: 0, // 默认不描边 - stroke, - opacity: 0.3, - radius: 4, - }, - name: 'node-key-shape', - draggable: true, - }); - - const keyShapeBbox = keyShape.getBBox(); - - group.addShape('rect', { - attrs: { - x: 0, - y: 0, - width: keyShapeBbox.width, - height: keyShapeBbox.height, - stroke: stroke, - fill: '#fff', - radius: 4, - }, - name: 'node-inner-border-shape', - draggable: true, - }); - - group.addShape('rect', { - attrs: { - x: 0, - y: 0, - width: 4, - height: keyShapeBbox.height, - fill: stroke, - radius: [4, 0, 0, 4], - }, - name: 'node-left-border-shape', - draggable: true, - }); - - const showNameMore = label.length > 10; - // 节点名称 - group?.addShape('text', { - attrs: { - text: showNameMore ? `${label.slice(0, 11)}...` : label, - x: 12, - y: 12, - fontFamily: 'PingFangSC', - fontSize: 12, - fontWeight: 600, - lineHeight: 17, - textBaseline: 'top', - fill: textColor, - opacity: 0.85, - }, - name: 'node-name', - }); - - // 主指标名称 - group?.addShape('text', { - attrs: { - text: measure.name || '', - x: 12, - y: 37, - fontFamily: 'PingFangSC', - fontSize: 12, - fontWeight: 600, - lineHeight: 17, - textBaseline: 'top', - fill: textColor, - opacity: 0.85, - }, - name: 'node-measure-name', - draggable: true, - }); - - // 主指标值 - const measureShape = group?.addShape('text', { - attrs: { - text: (showFormattedValue ? measure.formattedValue : measure.value) || '', - x: 12, - y: 58, - fontFamily: 'Roboto-Medium', - fontSize: 20, - fontWeight: 600, - lineHeight: 28, - textBaseline: 'top', - fill: textColor, - opacity: 0.85, - }, - name: 'node-measure-value', - draggable: true, - }); - - if (showFormattedValue) { - const measureShapeBbox = measureShape.getBBox(); - // 主指标单位 - group?.addShape('text', { - attrs: { - text: measure.formattedUnit || '', - x: 12 + measureShapeBbox.width + 4, - y: 56, // 这个字体要比主指标字体矮一点 - fontFamily: 'PingFangSC', - fontSize: 20, - fontWeight: 500, - lineHeight: 28, - textBaseline: 'top', - fill: textColor, - opacity: 0.85, - }, - name: 'node-measure-unit', - draggable: true, - }); - } - - // 相关指标信息 - relatedMeasures.forEach((relatedMeasure, index) => { - const showFormattedValue = relatedMeasure.formattedValue !== undefined; - const relatedMeasureText = `${relatedMeasure.name} ${ - showFormattedValue ? relatedMeasure.formattedValue : relatedMeasure.value - }${showFormattedValue && relatedMeasure.formattedUnit}`; - group?.addShape('text', { - attrs: { - text: relatedMeasureText, - x: 12, - y: 95, - fontFamily: 'PingFangSC', - fontSize: 12, - fontWeight: 400, - lineHeight: 17, - textBaseline: 'top', - fill: textColor, - opacity: 0.45, - }, - name: `node-releted-measure-${index}`, - draggable: true, - }); - }); - - return keyShape; - }, - - setState(name, value, node) { - // 设置状态样式 - setItemStateStyle(node, 'node'); - }, - }); -} \ No newline at end of file diff --git a/packages/graphs/src/components/conversion-dagre-graph/nodes/index.ts b/packages/graphs/src/components/conversion-dagre-graph/nodes/index.ts deleted file mode 100644 index b3d83a6b7..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/nodes/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { registerConvNode } from './convNode'; - -export const resigterNodes = () => { - registerConvNode(); -}; \ No newline at end of file diff --git a/packages/graphs/src/components/conversion-dagre-graph/types/graph.ts b/packages/graphs/src/components/conversion-dagre-graph/types/graph.ts deleted file mode 100644 index ea8e57944..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/types/graph.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { measureItem, PlainObject, OriginNode, OriginEdge } from './propsAndState'; - -// 边类型 -export enum EdgeType { - CONV_LINE = 'conv-line', - CONV_CUBIC_VERTICAL = 'conv-cubic-vertical', - CONV_CUBIC_HORIZONTAL = 'conv-cubic-horizontal', -} - -// 元素状态 -export enum ITEM_STATE { - Active = 'active', - Default = 'default', - Selected = 'selected', -} - -// 节点 -export interface GraphNode { - id: string; // 节点id - label: string; // 节点名称 - layer: number; // 节点所属层级 - custom: { - layerName: string; // 节点所属层级名称 - measure: measureItem; // 节点主指标 - relatedMeasures?: measureItem[]; // 节点相关指标 - compareMeasures?: measureItem[]; // 同环比指标 - [key: string]: any; - }; - style: PlainObject; // 样式 - data: OriginNode; // 节点原始数据 - x?: number; // 节点x坐标 - y?: number; // 节点y坐标 -} - -// 边 -export interface GraphEdge { - id: string; // 边id - source: string; // 边起点id - target: string; // 边终点id - label: string; // 边名称 - style: PlainObject; // 样式 - custom: { - ratio: number; // 边比率 - showRatio: string; // 边比率(展示) - [key: string]: any; - }; - - data: OriginEdge; // 边原始数据 -} - -// 转化流程图数据 -export interface ConvGraphData { - nodes: GraphNode[]; - edges: GraphEdge[]; -} diff --git a/packages/graphs/src/components/conversion-dagre-graph/types/index.ts b/packages/graphs/src/components/conversion-dagre-graph/types/index.ts deleted file mode 100644 index de831696d..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/types/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './graph'; -export * from './propsAndState'; diff --git a/packages/graphs/src/components/conversion-dagre-graph/types/propsAndState.ts b/packages/graphs/src/components/conversion-dagre-graph/types/propsAndState.ts deleted file mode 100644 index 00aa34b8e..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/types/propsAndState.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { IGraph } from '@antv/g6'; -export type PlainObject = Record; - -// 单个指标 -export interface measureItem { - name: string; // 指标名称 - value: number; // 指标数值 - formattedValue?: number; // 指标格式化后的值 - formattedUnit?: string; // 指标格式化后的单位 -} - -// 原始节点数据 -export interface OriginNode { - id: string; // 节点id - name: string; // 节点名称 - layerName: string; // 节点所属层级名称 - layer?: number; // 节点所属层级 - measure: measureItem; // 节点主指标 - relatedMeasures?: measureItem[]; // 节点相关指标 - compareMeasures?: measureItem[]; // 同环比指标 - x?: number; // 节点x坐标 - y?: number; // 节点y坐标 - style?: PlainObject; // 样式 -} - -// 原始边数据 -export interface OriginEdge { - id: string; // 边id - source: string; // 边起点id - target: string; // 边终点id - measure: measureItem; // 边主指标 - name?: string; // 边名称 - ratio?: number; // 边比率 - style?: PlainObject; // 样式 -} - -export type Rankdir = 'TB' | 'LR'; - -export interface LayoutParams { - rankdir: Rankdir; - [key: string]: any; -} - -// 层级顺序 -export type LayerOrder = string[]; - -// 边比率计算方式 -export type RatioMethod = 'proportion' | 'splitFlow' | 'both'; // 占比、分流、占比和分流 - -// 原始图数据 -export interface OriginData { - nodes: OriginNode[]; - edges: OriginEdge[]; -} - -// 组件props -export interface Props { - data: OriginData; // 图数据 - layerOrder?: LayerOrder; // 层级顺序 - segmLayer?: string; // 分段层级 - ratioMethod?: RatioMethod; // 比率计算方式 - layout?: LayoutParams; // 布局配置 - className?: string; // class类名 - style?: PlainObject; // 样式配置 - onReady?: (graph: IGraph) => void; -} diff --git a/packages/graphs/src/components/conversion-dagre-graph/utils/edge.ts b/packages/graphs/src/components/conversion-dagre-graph/utils/edge.ts deleted file mode 100644 index 388b59769..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/utils/edge.ts +++ /dev/null @@ -1,84 +0,0 @@ -import type { Graph, EdgeConfig } from '@antv/g6'; -import type { Rankdir } from '../types'; -import { EdgeType } from '../types'; -import type { LayerOrder } from '../types'; - -// 获取边的类型,起点和终点的anchorPoint索引值 -export const getEdgeAnchorAndType = ( - graph: Graph, - edge: EdgeConfig, - layerOrder: LayerOrder, - rankdir: Rankdir, -) => { - const nodes = graph.getNodes().map((node) => node.getModel()); - const sourceNode = nodes.find((node) => node.id === edge.source); - const targetNode = nodes.find((node) => node.id === edge.target); - const sourceLayer = layerOrder.findIndex( - (item) => item === (sourceNode?.custom as any)?.layerName, - ); - const targetLayer = layerOrder.findIndex( - (item) => item === (targetNode?.custom as any)?.layerName, - ); - - let sourceAnchor; - let targetAnchor; - let type; - // 同层级节点之间的边, - if (sourceLayer !== -1 && sourceLayer === targetLayer) { - type = EdgeType.CONV_LINE; - // 起始点的连接点根据起始点的位置顺序来 - if (rankdir === 'LR') { - sourceAnchor = sourceNode.y < targetNode.y ? 1 : 0; - targetAnchor = sourceNode.y < targetNode.y ? 0 : 1; - } else { - sourceAnchor = sourceNode.x < targetNode.x ? 3 : 2; - targetAnchor = sourceNode.x < targetNode.x ? 2 : 3; - } - } else { - if (rankdir === 'LR') { - type = EdgeType.CONV_CUBIC_HORIZONTAL; - sourceAnchor = sourceNode.x < targetNode.x ? 3 : 2; - targetAnchor = sourceNode.x < targetNode.x ? 2 : 3; - } else { - type = EdgeType.CONV_CUBIC_VERTICAL; - sourceAnchor = sourceNode.y < targetNode.y ? 1 : 0; - targetAnchor = sourceNode.y < targetNode.y ? 0 : 1; - } - } - - return { - type, - sourceAnchor, - targetAnchor, - }; -}; - -// 更新边对应的类型、起点和终点的连接点 -export const updateEdgeAnchorAndType = (graph: Graph, layerOrder: LayerOrder, rankdir: Rankdir) => { - graph.getEdges().forEach((edge) => { - const edgeModel = edge.getModel(); - const { type, sourceAnchor, targetAnchor } = getEdgeAnchorAndType( - graph, - edgeModel, - layerOrder, - rankdir, - ); - graph.updateItem(edgeModel.id, { - type, - sourceAnchor, - targetAnchor, - }); - }); -}; - -// 获取自定义箭头 -export const getArrowConfig = (color: string = '#B8C3D9') => { - return { - path: 'M 14,-4 C 14,-4,11,0,14,4 L 4,0 L 14,-4 Z', - d: 2, - fill: color, - stroke: color, - lineWidth: 1, - lineDash: [], - }; -}; diff --git a/packages/graphs/src/components/conversion-dagre-graph/utils/graph.ts b/packages/graphs/src/components/conversion-dagre-graph/utils/graph.ts deleted file mode 100644 index 08238ad97..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/utils/graph.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { OriginEdge } from '../types'; - -// 获取节点的所有出/入路径的边集合 -export const getInOutPathEdges = (id: string, edges: OriginEdge[]) => { - const relativeInEdges = []; - const relativeOutEdges = []; - const queriedNodeIds = new Set([id]); - - // 查询节点的一度入度边 + 出度边 - const queryOneDegreeEdges = (inNodeIds, outNodeIds) => { - const inNodeIdSet = new Set(); - const outNodeIdSet = new Set(); - - edges?.forEach((edge) => { - // 查找入边 - if (inNodeIds.has(edge.target)) { - relativeInEdges.push(edge); - if (!queriedNodeIds.has(edge.source)) { - inNodeIdSet.add(edge.source); - } - } else if (outNodeIds.has(edge.source)) { - // 查找出边 - relativeOutEdges.push(edge); - if (!queriedNodeIds.has(edge.target)) { - outNodeIdSet.add(edge.target); - } - } - }); - - if (inNodeIdSet.size > 0 || outNodeIdSet.size > 0) { - queryOneDegreeEdges(inNodeIdSet, outNodeIdSet); - } - }; - - queryOneDegreeEdges(new Set([id]), new Set([id])); - return { - relativeInEdges, - relativeOutEdges, - }; -}; diff --git a/packages/graphs/src/components/conversion-dagre-graph/utils/index.ts b/packages/graphs/src/components/conversion-dagre-graph/utils/index.ts deleted file mode 100644 index c22696d4d..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/utils/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './transform'; -export * from './layer'; -export * from './edge'; -export * from './state'; -export * from './graph'; -export * from './text'; diff --git a/packages/graphs/src/components/conversion-dagre-graph/utils/layer.ts b/packages/graphs/src/components/conversion-dagre-graph/utils/layer.ts deleted file mode 100644 index 72c04f4e5..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/utils/layer.ts +++ /dev/null @@ -1,152 +0,0 @@ -import type { Graph } from '@antv/g6'; -import type { Rankdir } from '../types'; -import type { LayerOrder } from '../types'; - -// 在画布上绘制层级名称 -export const drawLayerName = (graph: Graph, layerOrder: LayerOrder, rankdir: Rankdir) => { - const nodes = graph.getNodes().map((node) => node.getModel()); - if (!graph || !Array.isArray(layerOrder) || !layerOrder?.length) { - return; - } - - const group = graph.getGroup(); - // 删除已有的层级名称容器分组 - removeLayerNameGroup(graph); - // 添加层级名称容器的分组 - const layerNameContainerGroup = group.addGroup({ id: 'layer-name-container-group' }); - - // 过滤得到节点中实际存在的有效层级 - const effectiveLayer = layerOrder.filter((layerName) => - nodes.find((node) => (node.custom as any)?.layerName === layerName), - ); - // 存储所有层级名称的x: 需遍历所有节点找出最左侧的节点的x, 实现层级名称纵向对齐 - let minX = Infinity; - let minY = Infinity; - // 存储所有层级名称的x: 同层级节点x值的分布最多的值 - const xInfo = []; - // 存储所有层级名称的y: 同层级节点y值的分布最多的值 - const yInfo = []; - effectiveLayer.forEach((layerName) => { - const countYInfo = {}; - const countXInfo = {}; - nodes.forEach((node) => { - if ((node.custom as any).layerName === layerName) { - // 找到所有节点中最左侧的节点的x坐标 - if (node.x < minX) { - minX = node.x; - } - // 找到所有节点中最顶部的节点的y坐标 - if (node.y < minY) { - minY = node.y; - } - const xKey = String(node.x); - const yKey = String(node.y); - // 记录所属同层级节点的x、y值分布(考虑节点拖动保存情况) - if (Object.keys(countXInfo).indexOf(String(xKey)) === -1) { - countXInfo[xKey] = 1; - } else { - countXInfo[xKey] += 1; - } - if (Object.keys(countYInfo).indexOf(String(yKey)) === -1) { - countYInfo[yKey] = 1; - } else { - countYInfo[yKey] += 1; - } - } - }); - // 找出同层级节点中最多分布的x值(考虑节点拖动保存情况) - const xInfoKeys = Object.keys(countXInfo); - let mostX = xInfoKeys[0]; - xInfoKeys.forEach((key) => { - if (countXInfo[key] > countXInfo[mostX]) { - mostX = key; - } - }); - - xInfo.push(Number(mostX)); - - // 找出同层级节点中最多分布的y值(考虑节点拖动保存情况) - const yInfoKeys = Object.keys(countYInfo); - let mostY = yInfoKeys[0]; - yInfoKeys.forEach((key) => { - if (countYInfo[key] > countYInfo[mostY]) { - mostY = key; - } - }); - yInfo.push(Number(mostY)); - }); - - // 在画布中绘制有效层级 - effectiveLayer.forEach((layerName, index) => { - if (isNaN(xInfo[index]) || isNaN(yInfo[index])) { - return; - } - // 层级名称换行处理:先暂时处理每隔4个字符换行一次,待G6升级g-canvas 1.x以后使用wordWrap代替 - let text = ''; - const textArray = layerName.split(''); - textArray.forEach((item, index) => { - text += index > 0 && index < textArray.length - 1 && index % 4 === 3 ? `${item}\n` : item; - }); - // 添加层级名称的分组 - const layerNameGroup = layerNameContainerGroup.addGroup({ id: `layer-name-group-${index}` }); - if (rankdir === 'TB') { - layerNameGroup.setMatrix([1, 0, 0, 0, 1, 0, minX - 102, yInfo[index], 1]); - } else { - layerNameGroup.setMatrix([1, 0, 0, 0, 1, 0, xInfo[index] + 32, minY - 102, 1]); - } - - // 监听层级名称分组的拖动: 一期暂不支持,后续和节点拖动保存位置一起做 - // layerNameGroup.on('drag', e => { - // const { pointX, pointY } = e; - // layerNameGroup.setMatrix([1, 0, 0, 0, 1, 0, pointX, pointY, 1]); - // }); - - // 向层级名称的分组中添加 层级名称图形 - const layerNameShape = layerNameGroup.addShape('text', { - attrs: { - text, - x: 0, - y: 0, - fontFamily: 'PingFangSC', - fontSize: 16, - fontWeight: 400, - fill: 'rgb(3,34,98)', - opacity: 0.65, - lineHeight: 18, - textBaseline: 'top', - textAlign: 'center', - // wordWrap: true, // g-canvas 1.x以上版本才支持 - // wordWrapWidth: 48, - }, - name: `layer-name-${layerName}`, - // draggable: true, // 一期暂不支持,后续和节点拖动保存位置一起做 - }); - - const layerNameBbox = layerNameShape.getBBox(); - - // 向层级名称的分组中添加 层级名称背景图形 - layerNameGroup.addShape('rect', { - attrs: { - x: -34, // 留白2 - y: -2, - width: 68, - height: layerNameBbox?.height + 4, - fill: '#B8C7E6', - opacity: 0.12, - }, - name: `layer-name-${layerName}`, - // draggable: true, // 一期暂不支持,后续和节点拖动保存位置一起做 - }); - - layerNameShape.toFront(); - }); -}; - -// 删除已有的层级名称分组 -export const removeLayerNameGroup = (graph: Graph) => { - const group = graph.getGroup(); - const layerNameGroup = group.findById('layer-name-container-group'); - if (layerNameGroup) { - group.removeChild(layerNameGroup); - } -}; diff --git a/packages/graphs/src/components/conversion-dagre-graph/utils/state.ts b/packages/graphs/src/components/conversion-dagre-graph/utils/state.ts deleted file mode 100644 index 143487623..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/utils/state.ts +++ /dev/null @@ -1,236 +0,0 @@ -import { ITEM_STATE } from '../types'; -import { getArrowConfig } from './edge'; -import type { Item, INode, Graph, IEdge } from '@antv/g6'; -import { BASE_STATES, SIZE_IMPACT_STATES } from '../constants'; - -// 获取节点状态样式 -export const getNodeStateStyles = (state) => { - const stateStyles = { - [ITEM_STATE.Selected]: { - 'node-key-shape': { - lineWidth: 14, - }, - 'node-inner-border-shape': { - lineWidth: 2, - }, - }, - [ITEM_STATE.Active]: { - 'node-key-shape': { - lineWidth: 6, - }, - 'node-inner-border-shape': { - lineWidth: 1, - }, - }, - [ITEM_STATE.Default]: { - 'node-key-shape': { - lineWidth: 0, - }, - 'node-inner-border-shape': { - lineWidth: 1, - }, - }, - }; - return { - ...stateStyles[state], - }; -}; - -// 获取边line的状态样式 -export const getEdgeStateStyles = (state, edge) => { - const { highlightColor, stroke, labelFill } = edge.style; - const stateStyles = { - [ITEM_STATE.Selected]: { - 'path-shape': { - stroke: highlightColor, - endArrow: getArrowConfig(highlightColor), - }, - 'label-shape': { - fill: highlightColor, - }, - }, - [ITEM_STATE.Active]: { - 'path-shape': { - stroke: highlightColor, - endArrow: getArrowConfig(highlightColor), - }, - 'label-shape': { - fill: highlightColor, - }, - }, - [ITEM_STATE.Default]: { - 'path-shape': { - stroke, - endArrow: getArrowConfig(stroke), - }, - 'label-shape': { - fill: labelFill, - }, - }, - }; - return { - ...stateStyles[state], - }; -}; - -// 设置元素状态样式 -export const setItemStateStyle = (item, type) => { - // 获取元素的数据模型 - const model = item.getModel(); - const states = item.getStates(); - // 获取元素状态 - const state = states[states.length - 1] || ITEM_STATE.Default; - // 获取元素在该state下的各shape的style - const style = type === 'node' ? getNodeStateStyles(state) : getEdgeStateStyles(state, model); - // 获取元素的所有shape - const shapes = item.getContainer()?.get('children'); - // 更新各shape的style - shapes?.forEach((shape) => { - const shapeName = shape.get('name'); - if (style[shapeName]) { - shape.attr(style[shapeName]); - } - }); -}; - -// 一次绘制 -export const paintOnce = (graph: Graph, fn: Function) => { - const autoPaint = graph.get('autoPaint'); - graph.setAutoPaint(false); - fn(); - graph.paint(); - graph.setAutoPaint(autoPaint); -}; - -// 清空元素状态 -export const clearItemStates = ( - graph: Graph, - graphItem: Item, - states: ITEM_STATE[], - enablePaint: boolean = false, -) => { - function fn() { - states.forEach((state) => { - if (graphItem?.hasState(state)) { - graph.setItemState(graphItem, state, false); - // item.setState(state, false); - // 对尺寸 style 有影响的 state 才需要 refresh ,重新计算位置和边界 - // if (Size_IMPACT_STATES.includes(state)) { - graphItem.refresh(); - // } - } - }); - } - if (enablePaint) { - paintOnce(graph, () => { - fn(); - }); - } else { - fn(); - } -}; - -// 清空指定元素集合的状态 -export const clearItemsStates = ( - graph: Graph, - items: Item[], - clearStates: ITEM_STATE[], - enablePaint: boolean = false, -) => { - function fn() { - items.forEach((graphItem) => { - try { - clearItemStates(graph, graphItem, clearStates, false); - } catch (error) { - console.log('error :>> ', graphItem, error); - } - }); - } - if (enablePaint) { - paintOnce(graph, () => { - fn(); - }); - } else { - fn(); - } -}; - -// 设置元素状态 -export const setItemState = ( - graph: Graph, - graphItem: Item, - state: ITEM_STATE, - value: boolean | string, - enablePaint: boolean = false, -) => { - function fn() { - if (!graphItem || graphItem.destroyed) { - return; - } - graph.setItemState(graphItem, state, value); - // 对style有影响,重新计算位置和边界 - if (!graphItem.getKeyShape()?.get('destroyed') && SIZE_IMPACT_STATES.includes(state)) { - graphItem.refresh(); - } - } - if (enablePaint) { - paintOnce(graph, () => { - fn(); - }); - } else { - fn(); - } -}; - -// 重绘节点相关的边 -export const refreshRelatedEdges = (node: INode) => { - node.getEdges().forEach((edge) => { - if (!edge.getKeyShape()?.get('destroyed') && edge.get('keyShape')) { - edge.refresh(); - } - }); -}; - -// 重置所有节点的状态到默认认态 -export const resetNodeStates = (graph: Graph, enablePaint: boolean = false) => { - // 由于状态的变化,可能会造成 style 的变化,特别是大小的变化,因此在重置了 node 之后,还需要 refresh 关联的边,否则会造成边的终点连接不到节点边界 - const relatedEdges = new Set() as Set; - - const resetNodes = () => { - BASE_STATES.forEach((state) => { - const stateNodes = graph.findAllByState('node', state) as INode[]; - stateNodes.forEach((node) => { - clearItemStates(graph, node, [state], false); - if (SIZE_IMPACT_STATES.includes(state)) { - node.getEdges().forEach((edge) => relatedEdges.add(edge)); - } - }); - }); - Array.from(relatedEdges).forEach((edge) => { - edge.refresh(); - }); - }; - - if (enablePaint) { - paintOnce(graph, resetNodes); - } else { - resetNodes(); - } -}; - -// 重置所有边的状态到默认状态 -export const resetEdgeStates = (graph: Graph, enablePaint: boolean = false) => { - clearItemsStates(graph, graph.getEdges(), BASE_STATES, enablePaint); -}; - -// 重置为默认状态 -export const resetBaseStates = (graph: Graph, enablePaint: boolean = false) => { - resetNodeStates(graph, enablePaint); - resetEdgeStates(graph, enablePaint); -}; - -// 清空激活状态 -export const clearActiveStates = (graph: Graph, enablePaint: boolean = false) => { - clearItemsStates(graph, graph.getNodes(), [ITEM_STATE.Active], enablePaint); - clearItemsStates(graph, graph.getEdges(), [ITEM_STATE.Active], enablePaint); -}; diff --git a/packages/graphs/src/components/conversion-dagre-graph/utils/text.ts b/packages/graphs/src/components/conversion-dagre-graph/utils/text.ts deleted file mode 100644 index 60fbbcd26..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/utils/text.ts +++ /dev/null @@ -1,53 +0,0 @@ -import type { OriginNode } from '../types'; - -// 获取文本的字节长度 -export const getNodeStrSize = (node: OriginNode): number => { - const { measure: { formattedValue = '', value = '', formattedUnit = '' } = {} } = node || {}; - const nodeStr = - ((formattedValue !== undefined && formattedValue !== null - ? `${formattedValue}${formattedUnit}` - : value) as string) || ''; - return nodeStr.replace(/[^\x00-\xff]/g, '00').length; -}; -// 获取文本最长的节点 -export const getMaxSizeNode = (nodes: OriginNode[] = []): OriginNode => - nodes.reduce((prevNode, node) => { - const prevSize = getNodeStrSize(prevNode); - const nodeSize = getNodeStrSize(node); - return prevSize > nodeSize ? prevNode : node; - }); - -// 获取字符串实际渲染的宽度 -export const getWordsWidth = (text: string = '', font: string): number => { - if (text === '') { - return 0; - } - let canvas = document.createElement('canvas'); - const context = canvas.getContext('2d'); - context.font = font; - const { width } = context.measureText(text); - canvas = null; - return width; -}; - -// 获取最大节点宽度 -export const getNodeMaxSize = (nodes: OriginNode[] = []): number => { - if (!nodes?.length) { - return 150; - } - const maxSizeNode = getMaxSizeNode(nodes); - const { measure: { formattedValue = '', value = '', formattedUnit = '' } = {} } = maxSizeNode; - // 是否展示formatValue - const isShowFormatValue = formattedValue !== undefined && formattedValue !== null; - const displayValue = isShowFormatValue ? formattedValue : value; - const displayValueWidth = getWordsWidth(`${displayValue}`, '600 20px Roboto-Medium'); - // 单位不为空时才计算单位宽度 unit的paddingLeft 4 - const unitWidth = - isShowFormatValue && formattedUnit - ? getWordsWidth(`${formattedUnit}`, '600 20px PingFangSC') + 4 - : 0; - // 节点大小 value + unit + 左右padding - const nodeSize = displayValueWidth + unitWidth + 24; - // 节点最小宽度 150 - return Math.max(nodeSize, 150); -}; diff --git a/packages/graphs/src/components/conversion-dagre-graph/utils/transform.ts b/packages/graphs/src/components/conversion-dagre-graph/utils/transform.ts deleted file mode 100644 index 1682e63d6..000000000 --- a/packages/graphs/src/components/conversion-dagre-graph/utils/transform.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { cloneDeep, uniqBy } from 'lodash'; -import { getNodeMaxSize } from './text'; -import type { - OriginData, - LayerOrder, - OriginNode, - GraphNode, - GraphEdge, - ConvGraphData, - RatioMethod, -} from '../types'; - -// 数据转换:原始节点数据 -> G6渲染节点数据 -const transformOriginNodes = ( - originNodes: OriginNode[], - layerOrder: LayerOrder, - size: number, -): GraphNode[] => { - // 过滤得到节点中实际存在的有效层级 - const effectiveLayer = - (Array.isArray(layerOrder) && - layerOrder.filter((layerName) => originNodes.find((node) => node.layerName === layerName))) || - []; - return originNodes.map((originNode) => { - const layer = effectiveLayer?.findIndex((item) => item === originNode.layerName) + 1; // dagre布局指定层级有bug,layer暂时从1开始 - return { - id: originNode.id, // id - label: originNode.name || '', // 名称 - layer: layer !== -1 ? layer : undefined, - style: { - stroke: '#B8C3D9', - textColor: '#000', - ...(originNode.style || {}), - }, - size, - custom: { - layerName: originNode.layerName, // 所属层级名称 - measure: originNode.measure, // 主指标 - relatedMeasures: originNode.relatedMeasures, // 相关指标 - compareMeasures: originNode.compareMeasures, // 同环比指标 - }, - data: cloneDeep(originNode), - x: originNode.x, - y: originNode.y, - }; - }); -}; - -// 数据转换:原始边数据 -> G6渲染边数据 -const transformOriginEdges = ( - data: OriginData, - layerOrder: string[], - segmLayer: string, - ratioMethod: RatioMethod, -) : GraphEdge[] => { - const { nodes: originNodes = [], edges: originEdges = [] } = data; - - return originEdges - .map((originEdge) => { - const sourceNode = originNodes.find((node) => node.id === originEdge.source); - const targetNode = originNodes.find((node) => node.id === originEdge.target); - if (!sourceNode || !targetNode) { - return undefined; - } - - // 自动计算边的比率和名称 - let autoRatio = 0; - let name = ''; - switch (ratioMethod) { - case 'both': - // 包含占比和分流 - // 找出分段层级的层级值 - const segmLayerValue = layerOrder.findIndex((item) => item === segmLayer); - // 找出终点的层级值 - const targetLayerValue = layerOrder.findIndex((item) => item === targetNode?.layerName); - // 同层级的边、分段层级的入边都是占比边, 比率 = 边上指标 / 终点的主指标 - if (!segmLayer || targetLayerValue <= segmLayerValue) { - autoRatio = originEdge?.measure?.value / targetNode?.measure?.value; - name = '占比'; - } else { - // 分段层级的出边都是分流边, 比率 = 边上指标 / 起点的主指标 - autoRatio = originEdge?.measure?.value / sourceNode?.measure?.value; - name = '分流'; - } - break; - case 'splitFlow': - // 均是分流:比率 = 边上指标 / 起点的主指标 - autoRatio = originEdge?.measure?.value / sourceNode?.measure?.value; - name = '分流'; - break; - case 'proportion': - // 均是占比:比率 = 边上指标 / 终点的主指标 - autoRatio = originEdge?.measure?.value / targetNode?.measure?.value; - name = '占比'; - break; - default: - // 不展示转化比率 - autoRatio = undefined; - name = ''; - break; - } - - const ratio = originEdge.ratio || autoRatio; // 优先使用edge数据里的ratio - const formatRatio = - !isNaN(ratio) && ratio !== Infinity - ? Number((ratio * 100).toString().match(/^\d+(?:\.\d{0,2})?/)) - : '-'; // 比率最多保留2位小数 - const showRatio = `${formatRatio}%`; - const label = originEdge.name || name; // 优先使用edge数据里的name - - return { - id: originEdge.id, - source: originEdge.source, - target: originEdge.target, - label: autoRatio !== undefined ? `${label} ${showRatio}` : '', // 名称 比率%, 不开启转化指标的时候不展示 - style: { - stroke: '#B8C3D9', - labelFill: '#000', - highlightColor: '#3572F9', - ...(originEdge.style || {}), - }, - custom: { - ratio, - formatRatio, - showRatio, - sourceNode, - targetNode, - label, - }, - data: cloneDeep(originEdge), - }; - }) - .filter((edge) => !!edge); -}; - -// 数据转换:原始数据 -> G6渲染数据 -export const transformOriginData = ( - originData: OriginData, - layerOrder: LayerOrder = [], - segmLayer: string, - ratioMethod: RatioMethod, -): ConvGraphData => { - const { nodes: originNodes = [] } = originData; - // 节点去重 - const uniqNodes = uniqBy(originNodes, 'id'); - // 获取所有节点中最大的宽作为节点size - const size = getNodeMaxSize(uniqNodes); - const nodes = transformOriginNodes(uniqNodes, layerOrder, size); - const edges = transformOriginEdges(originData, layerOrder, segmLayer, ratioMethod); - return { - nodes, - edges, - }; -}; diff --git a/packages/graphs/src/components/decomposition-tree-graph/events.ts b/packages/graphs/src/components/decomposition-tree-graph/events.ts deleted file mode 100644 index 062e21711..000000000 --- a/packages/graphs/src/components/decomposition-tree-graph/events.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { TreeGraphData } from '@antv/g6'; -import { ITreeGraph, IG6GraphEvent, INode, NodeConfig, Datum, FetchLoading } from '../../interface'; -import { prefix, MARKER_CLICK } from '../../constants'; -import { DecompositionTreeGraphConfig } from '../decomposition-tree-graph'; -import { createFetchLoading, closeFetchLoading, getChildrenData, setLevelData } from '../../utils'; - -// 展开&折叠事件 -export const bindEvents = (params: { - graph: ITreeGraph; - level?: number; - getChildren?: DecompositionTreeGraphConfig['nodeCfg']['getChildren']; - fetchLoading?: FetchLoading; -}) => { - const { graph, level, getChildren, fetchLoading } = params; - const onClick = async (e: IG6GraphEvent) => { - const item = e.item as INode; - const model = item.getModel(); - if (e.target.get('name')?.startsWith('collapse-icon')) { - const { collapsed, g_currentPath, children = [], g_parentId, g_level, id } = item.getModel(); - let appendChildren = - level && - !(children as Array).length && - getChildrenData(graph.get('eventData').getData(), g_currentPath as string); - - if (getChildren && !(children as Array)?.length && !appendChildren?.length) { - createFetchLoading(model as NodeConfig, fetchLoading); - let appendChildrenData = await getChildren(item.getModel() as NodeConfig); - if (appendChildrenData) { - appendChildrenData = appendChildrenData.map((t, index) => { - return { - [`${prefix}_level`]: (g_level as number) + 1, - [`${prefix}_parentId`]: `${g_parentId}-${id}`, - [`${prefix}_currentPath`]: `${g_currentPath}-${index}`, - ...t, - }; - }); - setLevelData(graph, appendChildrenData, g_currentPath as string); - } - appendChildren = appendChildrenData; - closeFetchLoading(); - } - - if (appendChildren?.length > 0) { - model.children = appendChildren; - graph.updateChild(model as TreeGraphData, model.id); - graph.updateItem(item, { - collapsed: false, - }); - graph.refreshItem(item); - graph.emit(MARKER_CLICK, e, { - type: 'fetch', - collapsed: true, - }); - } else { - graph.updateItem(item, { - collapsed: !collapsed, - }); - graph.layout(); - graph.emit(MARKER_CLICK, e, { - type: 'collapse', - collapsed: !!collapsed, - }); - } - } - }; - graph.on('node:click', (e: IG6GraphEvent) => { - onClick(e); - }); - graph.on('node:touchstart', (e: IG6GraphEvent) => { - onClick(e); - }); -}; diff --git a/packages/graphs/src/components/decomposition-tree-graph/index.tsx b/packages/graphs/src/components/decomposition-tree-graph/index.tsx deleted file mode 100644 index d454f2994..000000000 --- a/packages/graphs/src/components/decomposition-tree-graph/index.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import React from 'react'; -import { defaultFlowGraphAnchorPoints, defaultNodeSize, defaultNodeStyle, defaultStateStyles } from '../../constants'; -import ErrorBoundary from '../../errorBoundary'; -import useGraph from '../../hooks/useGraphs'; -import useProps from '../../hooks/useProps'; -import { CompactBoxLayout } from '../../layout'; -import { - CommonConfig, - IGraph, - IGroup, - NodeCfg, - NodeConfig, - Shape, - ShapeCfg, - G6TreeGraphData, - FetchLoading, -} from '../../interface'; -import { ChartLoading } from '../../utils'; -import { registerIndicatorGeometries } from '../flow-analysis-graph/customItem'; -import { bindEvents } from './events'; - -export interface DecompositionTreeGraphConfig - extends Omit, 'data' | 'nodeCfg'>, - FetchLoading { - data: G6TreeGraphData; - /** 展开层级,默认 100 */ - level?: number; - nodeCfg?: NodeCfg & { - /** 点击展开时异步获取数据 */ - getChildren?: (nodeCfg: NodeConfig) => Promise; - }; -} - -registerIndicatorGeometries(); - -const defaultLayout = { - type: 'compactBox', - direction: 'LR', - getId: (d: any) => { - return d.id; - }, - getHeight: () => { - return 60; - }, - getWidth: () => { - return 16; - }, - getVGap: () => { - return 16; - }, - getHGap: () => { - return 100; - }, -}; - -const defaultProps = { - nodeCfg: { - type: 'indicator-card', - size: defaultNodeSize, - style: defaultNodeStyle, - anchorPoints: defaultFlowGraphAnchorPoints, - padding: 6, - layout: 'bundled', - nodeStateStyles: defaultStateStyles, - label: { - style: (cfg: Shape | ShapeCfg, group: IGroup | IGraph | undefined, type: string | undefined) => { - const styles = { - icon: { - width: 10, - height: 10, - }, - value: { - fill: '#000', - }, - text: { - fill: '#aaa', - }, - }; - return type ? styles[type] : {}; - }, - }, - }, - edgeCfg: { - type: 'cubic-horizontal', - endArrow: { - type: 'vee', - }, - edgeStateStyles: defaultStateStyles, - }, - behaviors: ['zoom-canvas', 'drag-canvas'], - layout: defaultLayout, - animate: true, - autoFit: true, - fitCenter: true, - style: { - position: 'relative' as React.CSSProperties['position'], - height: 'inherit', - backgroundColor: '#fff', - }, - level: 100, -}; - -const DecompositionTreeGraph: React.FC = (props) => { - const { uProps } = useProps(props, defaultProps); - const { className, style, loading, loadingTemplate, errorTemplate, ...rest } = uProps; - const { container } = useGraph('TreeGraph', rest, { - name: 'DecompositionTreeGraph', - bindEvents, - }); - - return ( - - {loading && } -
- - ); -}; - -export default DecompositionTreeGraph; diff --git a/packages/graphs/src/components/file-tree-graph/customItem.ts b/packages/graphs/src/components/file-tree-graph/customItem.ts deleted file mode 100644 index 3d4dd89ef..000000000 --- a/packages/graphs/src/components/file-tree-graph/customItem.ts +++ /dev/null @@ -1,794 +0,0 @@ -import G6, { IGroup, ModelConfig } from '@antv/g6'; -import { CardItems, CardNodeCfg, EdgeCfg, NodeCfg } from '../../interface'; -import { - getCssPadding, - getStyle, - createFetchLoading, - closeFetchLoading, - getMarkerPosition, - getGlobalInstance, - getChildrenData, - pushAsyncEvent, -} from '../../utils'; - -const { Util } = G6; - -// file tree -export const registerFileTreeGeometries = () => { - const defaultLineWidth = 2; - const defaultTextStyle = { - fill: 'rgba(0,0,0,.65)', - textAlign: 'middle', - fontSize: 14, - fontFamily: 'PingFangSC-Regular', - cursor: 'pointer', - textBaseline: 'middle', - }; - const defaultStroke = '#40a9ff'; - const markerSize = 12; - const defaultMarkerCfg = { - width: markerSize, - height: markerSize, - radius: markerSize / 2, - stroke: '#999', - fill: '#fff', - cursor: 'pointer', - r: markerSize / 2, - lineWidth: 1, - }; - G6.registerNode('file-tree-node', { - options: { - style: { - fill: '#e8f7ff', - }, - stateStyles: { - hover: { - fillOpacity: 0.6, - }, - selected: {}, - }, - }, - addLabel(group: IGroup, label: string, x: number, y: number) { - return group.addShape('text', { - attrs: { - text: label, - x: x * 2, - y, - textAlign: 'left', - textBaseline: 'top', - fontFamily: 'PingFangSC-Regular', - }, - cursor: 'pointer', - name: 'name-text-shape', - }); - }, - addCollapse(group, props) { - const { collapsed, markerCfg, model, size } = props; - const { style } = markerCfg; - const [x, y] = [0, size[1]]; - // 子类数量 icon,绘制圆点在节点正下方 - const markerStyle = getStyle(style, model, group, 'collapse'); - const config = { ...defaultMarkerCfg, ...markerStyle }; - const childCountGroup = group.addGroup({ - name: 'collapse-group', - }); - const rectX = x - config.width / 2; - const rectY = y - config.height / 2; - childCountGroup.addShape('rect', { - attrs: { - lineWidth: defaultLineWidth, - x: rectX, - y: rectY, - ...config, - }, - name: 'collapse-icon-circle', - }); - childCountGroup.addShape('path', { - attrs: { - path: collapsed - ? [ - ['M', rectX + config.width / 4, y - config.height / 4], - ['L', rectX + (config.width * 3) / 4, y], - ['L', rectX + config.width / 4, y + config.height / 4], - ] - : [ - ['M', rectX + config.width / 4, y - config.height / 4], - ['L', rectX + config.width / 2, y + config.height / 4], - ['L', rectX + (config.width * 3) / 4, y - config.height / 4], - ], - ...config, - }, - name: 'collapse-icon-arrow', - capture: false, - }); - - if (collapsed) { - childCountGroup.show(); - } else { - childCountGroup.hide(); - } - }, - addMarker(group, props) { - const { markerCfg, model, size, startX = 0, startY = 0 } = props; - const { style, position = 'right', show } = markerCfg; - if (!show) return; - // 子类数量 icon,绘制圆点在节点正下方 - const markerStyle = getStyle(style, model, group); - const config = { ...defaultMarkerCfg, ...markerStyle }; - const { x, y } = getMarkerPosition(position, size); - // 增加子节点 icon - const markerIcon = group.addShape('marker', { - attrs: { - x: x + startX, - y: y + startY, - symbol: G6.Marker.expand, - ...config, - }, - name: 'icon-add-child', - }); - markerIcon.hide(); - return markerIcon; - }, - addHoverBack(group, props) { - const { x, y, width, height, style } = props; - group.addShape('rect', { - attrs: { - x, - y, - width, - height, - radius: 4, - cursor: 'pointer', - ...style, - }, - // capture: false, - name: 'main-shape', - draggable: true, - }); - }, - addName(group, props) { - const { label, x = 0, y, style } = props; - return group.addShape('text', { - attrs: { - text: label, - x, - y, - ...defaultTextStyle, - ...style, - }, - name: 'text-shape', - draggable: true, - }); - }, - addBottomLine(group, props) { - const { x, y, width, stroke, lineWidth } = props; - return group.addShape('path', { - attrs: { - path: [ - ['M', x - 1, y], - ['L', width, y], - ], - stroke, - lineWidth, - }, - name: 'node-path-shape', - }); - }, - draw(model, group) { - const { collapsed, depth, value, markerCfg, children = [] } = model; - const nodeCfg = model.nodeCfg as CardNodeCfg; - const { style, label, padding = 0, customContent, lineStyle } = nodeCfg; - const bottomLineStyle = getStyle(lineStyle, model, group); - const fileName = (value as CardItems).text; - let size = nodeCfg?.size || []; - if (typeof size === 'number') size = [size, size]; - const cardPadding = getCssPadding(padding); - // 是否为根节点 - const rootNode = depth === 0; - // 子节点数量 - const childCount = (children as any[]).length || 0; - - const height = size[1] || 28; - const x = 0; - const y = 0; - - let text; // 名称文本 - if (customContent) { - text = customContent(value as any, group, { - startX: x + cardPadding[3], - startY: height / 2, - width: size[0], - }); - } else { - text = this.addName(group, { - label: fileName, - x: x + cardPadding[3], - y: height / 2, - style: getStyle(label.style, model, group), - }); - } - const textWidth = group.getBBox().width; - const width = Math.max(size[0], textWidth + cardPadding[1] + cardPadding[3]); - if (!size.length) size = [width, height]; - - const cardStyle = getStyle(style, model, group); - - const keyShapeAttrs = { - x, - y, - width, - height, - radius: 12, - ...cardStyle, - }; - const keyShape = group.addShape('rect', { - attrs: keyShapeAttrs, - name: 'root-rect-shape', - }); - - // 底部横线 - !rootNode && - this.addBottomLine(group, { - stroke: defaultStroke, - lineWidth: defaultLineWidth, - x, - width, - y: y + height, - ...bottomLineStyle, - }); - let callbackMarkerCfg = markerCfg; - const graph = getGlobalInstance(model._graphId as string); - if (typeof markerCfg === 'function') { - callbackMarkerCfg = markerCfg( - { - ...model, - children: getChildrenData(graph?.get('eventData').getData(), model.g_currentPath as string), - }, - group, - ); - } - - if (childCount && !rootNode) - this.addCollapse(group, { - collapsed, - markerCfg: callbackMarkerCfg, - model, - size: [width, height], - }); - const markerIcon = this.addMarker(group, { - collapsed, - markerCfg: callbackMarkerCfg, - model, - size: [width, height], - startX: text.getBBox().x - cardPadding[3], - startY: keyShape.getBBox().y, - }); - const bbox = group.getBBox(); - const { minX, minY, maxX, maxY } = bbox; - const backContainer = group.addShape('path', { - attrs: { - path: childCount - ? [ - ['M', minX, minY], - ['L', maxX, minY], - ['L', maxX, maxY], - ['L', minX + 20, maxY], - ['L', minX + 20, maxY + 20], - ['L', minX, maxY + 20], - ['Z'], - ] - : [['M', minX, minY], ['L', maxX, minY], ['L', maxX, maxY], ['L', minX, maxY], ['Z']], - fill: '#fff', - opacity: 0, - }, - draggable: true, - }); - text?.toFront(); - backContainer.toBack(); - if (rootNode) { - pushAsyncEvent(model._graphId as string, () => { - const { width: keyShapeWith, maxX } = keyShape.getBBox(); - markerIcon?.attr({ - x: x + keyShapeWith / 2, - }); - text?.attr({ - x: x + cardPadding[3] - keyShapeWith / 2, - }); - keyShape.attr({ - x: x - keyShapeWith / 2, - }); - }); - } - - return keyShape; - }, - setState(name, value, node) { - if (['closest', 'selected', 'hover'].includes(name)) { - const model = node.getModel(); - const { edgeCfg, nodeCfg, depth, markerCfg } = model; - if (depth === 0) return; - const { edgeStateStyles, style: edgeStyle } = edgeCfg as EdgeCfg; - const { - nodeStateStyles, - label: { style: lableStyle }, - style, - lineStyle, - } = nodeCfg as NodeCfg; - // closest 使用 hover 样式 - const _name = name === 'closest' ? 'hover' : name; - const group = node.getContainer(); - const rootShape = group.find((child) => child.get('name') === 'root-rect-shape'); - const markerShapes = []; - const getMarkers = (shapes) => { - shapes.forEach((shape) => { - const name = shape.get('name'); - if (name?.startsWith('collapse-icon') || name === 'icon-add-child') { - markerShapes.push(shape); - } - if (shape.getChildren?.().length) getMarkers(shape.getChildren()); - }); - }; - getMarkers(group.getChildren()); - const textShape = group.find((child) => child.get('name') === 'text-shape'); - const pathShape = group.find((child) => child.get('name') === 'node-path-shape'); - const selected = node.hasState('selected'); - if (value) { - const baseStyle = nodeStateStyles[_name]; - rootShape?.attr({ - ...(nodeStateStyles[_name]?.rect || baseStyle), - }); - markerShapes.forEach((markerShape) => { - markerShape?.attr({ - ...(nodeStateStyles[_name]?.marker || baseStyle), - }); - }); - textShape?.attr({ - ...(nodeStateStyles[_name]?.text || baseStyle), - }); - pathShape?.attr({ - ...edgeStateStyles[_name], - }); - } else { - if (selected) { - const baseStyle = nodeStateStyles['selected']; - rootShape?.attr({ - ...(nodeStateStyles['selected']?.rect || baseStyle), - }); - markerShapes.forEach((markerShape) => { - markerShape?.attr({ - ...(nodeStateStyles['selected']?.marker || baseStyle), - }); - }); - textShape?.attr({ - ...(nodeStateStyles['selected']?.text || baseStyle), - }); - pathShape?.attr({ - ...edgeStateStyles['selected'], - }); - } else { - const cardStyle = getStyle(style, model, node); - const textStyle = getStyle(lableStyle, model, node); - const pathStyle = getStyle(lineStyle, model, node); - const markStyle = getStyle(markerCfg, model, node); - rootShape?.attr(cardStyle); - textShape?.attr(textStyle); - pathShape?.attr(pathStyle); - markerShapes.forEach((markerShape) => { - markerShape?.attr(markStyle?.style); - }); - } - } - } - }, - }); - - G6.registerEdge( - 'file-tree-edge', - { - getControlPoints: (cfg) => { - const startPoint = cfg.startPoint; - const endPoint = cfg.endPoint; - return [ - startPoint, - { - x: startPoint.x, - y: endPoint.y, - }, - endPoint, - ]; - }, - update: undefined, - }, - 'polyline', - ); -}; - -export const registerFileTreeBehaviors = (): void => { - G6.registerBehavior('wheel-scroll', { - getDefaultCfg() { - return { - direction: 'y', - zoomKey: 'ctrl', - sensitivity: 3, - // wheel-scroll 可滚动的扩展范围,默认为 0,即最多可以滚动一屏的位置 - // 当设置的值大于 0 时,即滚动可以超过一屏 - // 当设置的值小于 0 时,相当于缩小了可滚动范围 - // 具体实例可参考:https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IFfoS67_HssAAAAAAAAAAAAAARQnAQ - scalableRange: -64, - }; - }, - - getEvents() { - if (!this.zoomKey || ['shift', 'ctrl', 'alt', 'control'].indexOf(this.zoomKey) === -1) this.zoomKey = 'ctrl'; - return { - wheel: 'onWheel', - }; - }, - - onWheel(ev) { - const graph = this.graph; - let keyDown = ev[`${this.zoomKey}Key`]; - if (this.zoomKey === 'control') keyDown = ev.ctrlKey; - if (keyDown) { - const sensitivity = this.get('sensitivity'); - const canvas = graph.get('canvas'); - const point = canvas.getPointByClient(ev.clientX, ev.clientY); - let ratio = graph.getZoom(); - if (ev.wheelDelta > 0) { - ratio *= 1 + 0.01 * sensitivity; - } else { - ratio *= 1 - 0.01 * sensitivity; - } - graph.zoomTo(ratio, { - x: point.x, - y: point.y, - }); - graph.emit('wheelzoom', ev); - } else { - let dx = ev.deltaX || ev.movementX; - let dy = ev.deltaY || ev.movementY; - if (!dy && navigator.userAgent.indexOf('Firefox') > -1) dy = (-ev.wheelDelta * 125) / 3; - - const width = this.graph.get('width'); - const height = this.graph.get('height'); - const graphCanvasBBox = this.graph.get('group').getCanvasBBox(); - - let expandWidth = this.scalableRange; - let expandHeight = this.scalableRange; - // 若 scalableRange 是 0~1 的小数,则作为比例考虑 - if (expandWidth < 1 && expandWidth > -1) { - expandWidth = width * expandWidth; - expandHeight = height * expandHeight; - } - - const { minX, maxX, minY, maxY } = graphCanvasBBox; - - if (dx > 0) { - if (maxX < -expandWidth) { - dx = 0; - } else if (maxX - dx < -expandWidth) { - dx = maxX + expandWidth; - } - } else if (dx < 0) { - if (minX > width + expandWidth) { - dx = 0; - } else if (minX - dx > width + expandWidth) { - dx = minX - (width + expandWidth); - } - } - - if (dy > 0) { - if (maxY < -expandHeight) { - dy = 0; - } else if (maxY - dy < -expandHeight) { - dy = maxY + expandHeight; - } - } else if (dy < 0) { - if (minY > height + expandHeight) { - dy = 0; - } else if (minY - dy > height + expandHeight) { - dy = minY - (height + expandHeight); - } - } - - if (this.get('direction') === 'x') { - dy = 0; - } else if (this.get('direction') === 'y') { - dx = 0; - } - - graph.translate(-dx, -dy); - } - ev.preventDefault(); - }, - }); - G6.registerBehavior('drag-branch', { - getEvents: function getEvents() { - return { - 'node:dragstart': 'dragstart', - 'node:drag': 'drag', - 'node:dragend': 'dragend', - 'node:dragenter': 'dragenter', - 'node:dragleave': 'dragleave', - }; - }, - dragstart: function dragstart(e) { - this.set('foundNode', undefined); - this.origin = { - x: e.x, - y: e.y, - }; - this.target = e.item; - const graph = this.get('graph'); - // 未配置 shouldBegin 时 默认为 true - if (this.shouldBegin && !this.shouldBegin(graph.findDataById(this.target?.getID()))) { - this.began = false; - return; - } - this.began = true; - }, - dragenter: function dragenter(e) { - if (!this.began) { - return; - } - const graph = this.get('graph'); - const foundNode = e.item; - if (foundNode) graph.setItemState(foundNode, 'closest', true); - this.set('foundNode', foundNode); - }, - dragleave: function dragleave(e) { - if (!this.began) { - return; - } - const graph = this.get('graph'); - const foundNode = this.get('foundNode'); - if (foundNode) graph.setItemState(foundNode, 'closest', false); - this.set('foundNode', foundNode); - }, - drag: function drag(e) { - if (!this.began) { - return; - } - // move the delegate - this.updateDelegate(e); - }, - dragend: function dragend(e) { - const graph = this.get('graph'); - const foundNode = this.get('foundNode'); - if (foundNode) { - graph.setItemState(foundNode, 'closest', false); - } - if (!this.began) { - return; - } - this.began = false; - const { item } = e; - const id = item.getID(); - const data = graph.findDataById(id); - - // remove delegate - if (this.delegateRect) { - this.delegateRect.remove(); - this.delegateRect = null; - } - - if (!foundNode) { - graph.emit('afterdragbranch', { - success: false, - message: 'Failed. No node close to the dragged node.', - branch: data, - }); - return; - } - - const foundNodeId = foundNode.getID(); - - let oriParentData; - Util.traverseTree(graph.get('data'), (d) => { - if (oriParentData) return false; - if (d.children?.filter((child) => child.id === id)?.length) { - oriParentData = d; - } - return true; - }); - - // 未配置 shouldEnd,则默认为 true - if (this.shouldEnd && !this.shouldEnd(data, graph.findDataById(foundNodeId), oriParentData)) { - return; - } - - // if the foundNode is a descent of the dragged node, return - let isDescent = false; - - Util.traverseTree(data, (d) => { - if (d.id === foundNodeId) isDescent = true; - }); - if (isDescent) { - const newParentData = graph.findDataById(foundNodeId); - graph.emit('afterdragbranch', { - success: false, - message: 'Failed. The target node is a descendant of the dragged node.', - newParentData, - branch: data, - }); - return; - } - - const newParentData = graph.findDataById(foundNodeId); - // 触发外部对数据的改变 - graph.emit('afterdragbranch', { success: true, message: 'Success.', newParentData, oriParentData, branch: data }); - graph.removeChild(data.id); - setTimeout(() => { - let newChildren = newParentData.children; - if (newChildren) newChildren.push(data); - else newChildren = [data]; - // 更新正在被操作的子树颜色 - Util.traverseTree(data, (d) => { - d.branchColor = newParentData.branchColor; - }); - graph.updateChildren(newChildren, newParentData.id); - }, 600); - }, - updateDelegate(e) { - const { graph } = this; - if (!this.delegateRect) { - // 拖动多个 - const parent = graph.get('group'); - const attrs = { - fill: '#F3F9FF', - fillOpacity: 0.5, - stroke: '#1890FF', - strokeOpacity: 0.9, - lineDash: [5, 5], - }; - - const { x: cx, y: cy, width, height, minX, minY } = this.calculationGroupPosition(e); - this.originPoint = { x: cx, y: cy, width, height, minX, minY }; - // model上的x, y是相对于图形中心的,delegateShape是g实例,x,y是绝对坐标 - this.delegateRect = parent.addShape('rect', { - attrs: { - width, - height, - x: cx, - y: cy, - ...attrs, - }, - name: 'rect-delegate-shape', - }); - this.delegateRect.set('capture', false); - } else { - const clientX = e.x - this.origin.x + this.originPoint.minX; - const clientY = e.y - this.origin.y + this.originPoint.minY; - this.delegateRect.attr({ - x: clientX, - y: clientY, - }); - } - }, - calculationGroupPosition(evt) { - let node = this.target; - if (!node) { - node = evt.item; - } - - const bbox = node.getBBox(); - const { minX, minY, maxX, maxY } = bbox; - - return { - x: Math.floor(minX), - y: Math.floor(minY), - width: Math.ceil(maxX) - Math.floor(minX), - height: Math.ceil(maxY) - Math.floor(minY), - minX, - minY, - }; - }, - }); - - G6.registerBehavior('click-node', { - getEvents() { - return { - 'node:click': 'onNodeClick', - 'canvas:click': 'onCanvasClick', - }; - }, - async onNodeClick(e) { - const { item } = e; - const shapeName = e.target.get('name'); - const model = item.getModel(); - const { graph } = this; - // 点击增加节点 - if (shapeName === 'icon-add-child') { - const data = graph.findDataById(item.getID()); - if (!data.children) data.children = []; - this.graph.emit('add:children', e); - const { id, value } = e.item.getModel(); - const { getChildren, fetchLoading } = graph.get('extraPlugin'); - if (getChildren) { - createFetchLoading(model, fetchLoading); - const appendChildren = await getChildren({ - id, - value, - }); - data.children.push(...appendChildren); - // @ts-ignore - graph.updateChildren(data.children, data.id); - closeFetchLoading(); - } - return; - } - - // 选中节点 - graph.getNodes().forEach((node) => { - graph.setItemState(node, 'selected', false); - }); - graph.setItemState(item, 'selected', true); - - return; - }, - onCanvasClick(e) { - this.graph.getNodes().forEach((node) => { - this.graph.setItemState(node, 'selected', false); - }); - }, - }); - - G6.registerBehavior('hover-node', { - getEvents() { - return { - 'node:mouseover': 'onNodeMouseOver', - 'node:mouseleave': 'onNodeMouseLeave', - 'node:mouseenter': 'onNodeMouseEnter', - }; - }, - onNodeMouseEnter(e) { - const { item } = e; - if (!item || item.get('destroyed')) return; - item.toFront(); - const model = item.getModel(); - const { collapsed, depth } = model; - const rootNode = depth === 0 || model.isRoot; - const group = item.getContainer(); - - if (rootNode) return; - - // 控制子节点个数标记 - if (!collapsed) { - group.find((e) => e.get('name') === 'collapse-group')?.show(); - } - this.graph.setItemState(item, 'hover', true); - }, - onNodeMouseOver(e) { - this.graph.emit('tooltip: show', e); - // expand 状态下,若 hover 到子节点个数标记,填充背景+显示收起 icon - const { item } = e; - const group = item.getContainer(); - const model = item.getModel(); - if (!model.collapsed) { - const childCountGroup = group.find((e) => e.get('name') === 'collapse-group'); - if (childCountGroup) { - childCountGroup.show(); - childCountGroup.find((e) => e.get('name') === 'collapse-icon-arrow')?.show(); - } - } - - group.find((e) => e.get('name') === 'icon-add-child')?.show(); - }, - onNodeMouseLeave(e) { - const { item } = e; - const model = item.getModel(); - const group = item.getContainer(); - const { collapsed } = model; - if (!collapsed) { - const childCountGroup = group.find((e) => e.get('name') === 'collapse-group'); - if (childCountGroup) { - childCountGroup.hide(); - childCountGroup.find((e) => e.get('name') === 'collapse-icon-arrow')?.hide(); - } - } - - group.find((e) => e.get('name') === 'icon-add-child')?.hide(); - this.graph.emit('tooltip: hide', e); - }, - }); -}; diff --git a/packages/graphs/src/components/file-tree-graph/events.ts b/packages/graphs/src/components/file-tree-graph/events.ts deleted file mode 100644 index 062e21711..000000000 --- a/packages/graphs/src/components/file-tree-graph/events.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { TreeGraphData } from '@antv/g6'; -import { ITreeGraph, IG6GraphEvent, INode, NodeConfig, Datum, FetchLoading } from '../../interface'; -import { prefix, MARKER_CLICK } from '../../constants'; -import { DecompositionTreeGraphConfig } from '../decomposition-tree-graph'; -import { createFetchLoading, closeFetchLoading, getChildrenData, setLevelData } from '../../utils'; - -// 展开&折叠事件 -export const bindEvents = (params: { - graph: ITreeGraph; - level?: number; - getChildren?: DecompositionTreeGraphConfig['nodeCfg']['getChildren']; - fetchLoading?: FetchLoading; -}) => { - const { graph, level, getChildren, fetchLoading } = params; - const onClick = async (e: IG6GraphEvent) => { - const item = e.item as INode; - const model = item.getModel(); - if (e.target.get('name')?.startsWith('collapse-icon')) { - const { collapsed, g_currentPath, children = [], g_parentId, g_level, id } = item.getModel(); - let appendChildren = - level && - !(children as Array).length && - getChildrenData(graph.get('eventData').getData(), g_currentPath as string); - - if (getChildren && !(children as Array)?.length && !appendChildren?.length) { - createFetchLoading(model as NodeConfig, fetchLoading); - let appendChildrenData = await getChildren(item.getModel() as NodeConfig); - if (appendChildrenData) { - appendChildrenData = appendChildrenData.map((t, index) => { - return { - [`${prefix}_level`]: (g_level as number) + 1, - [`${prefix}_parentId`]: `${g_parentId}-${id}`, - [`${prefix}_currentPath`]: `${g_currentPath}-${index}`, - ...t, - }; - }); - setLevelData(graph, appendChildrenData, g_currentPath as string); - } - appendChildren = appendChildrenData; - closeFetchLoading(); - } - - if (appendChildren?.length > 0) { - model.children = appendChildren; - graph.updateChild(model as TreeGraphData, model.id); - graph.updateItem(item, { - collapsed: false, - }); - graph.refreshItem(item); - graph.emit(MARKER_CLICK, e, { - type: 'fetch', - collapsed: true, - }); - } else { - graph.updateItem(item, { - collapsed: !collapsed, - }); - graph.layout(); - graph.emit(MARKER_CLICK, e, { - type: 'collapse', - collapsed: !!collapsed, - }); - } - } - }; - graph.on('node:click', (e: IG6GraphEvent) => { - onClick(e); - }); - graph.on('node:touchstart', (e: IG6GraphEvent) => { - onClick(e); - }); -}; diff --git a/packages/graphs/src/components/file-tree-graph/index.tsx b/packages/graphs/src/components/file-tree-graph/index.tsx deleted file mode 100644 index 798127435..000000000 --- a/packages/graphs/src/components/file-tree-graph/index.tsx +++ /dev/null @@ -1,157 +0,0 @@ -import React from 'react'; -import { stateColor } from '../../constants'; -import ErrorBoundary from '../../errorBoundary'; -import useGraph from '../../hooks/useGraphs'; -import useProps from '../../hooks/useProps'; -import { CompactBoxLayout } from '../../layout'; -import { - CommonConfig, - NodeCfg, - NodeConfig, - G6TreeGraphData, - FetchLoading, - MarkerCfg, - IGraph, - IGroup, - CardNodeCfg, - IShapeStyle, -} from '../../interface'; -import { ChartLoading } from '../../utils'; -import { bindEvents } from './events'; -import { registerFileTreeGeometries, registerFileTreeBehaviors } from './customItem'; - -export type FileTreeMarkerCfg = Pick; -export interface FileTreeGraphConfig - extends Omit, 'data' | 'nodeCfg' | 'markerCfg'>, - FetchLoading { - data: G6TreeGraphData; - /** 展开层级,默认 100 */ - level?: number; - markerCfg?: FileTreeMarkerCfg | ((cfg: CardNodeCfg, graph: IGraph | IGroup) => FileTreeMarkerCfg); - nodeCfg?: NodeCfg & { - /** 点击展开时异步获取数据 */ - getChildren?: (nodeCfg: NodeConfig) => Promise; - /** 装饰线 */ - lineStyle?: (nodeCfg: NodeConfig) => IShapeStyle; - }; -} - -registerFileTreeGeometries(); -registerFileTreeBehaviors(); -const PEM = 18; -const defaultLayout = { - type: 'indented', - direction: 'LR', - isHorizontal: true, - indent: 40, - getHeight: (d) => { - if (d.isRoot) { - return 30; - } - if (d.collapsed && d.children?.length) { - return 36; - } - return 22; - }, - getVGap: () => { - return 10; - }, - getWidth: (d) => { - const label = d.value?.text || ' '; - return d.width || label.split('').length * PEM; // FIXME DO NOT get width like this - }, -}; - -const defaultProps = { - nodeCfg: { - type: 'file-tree-node', - size: [120, 28], - anchorPoints: [ - [0, 1], - [1, 0.5], - ], - padding: [6, 12], - nodeStateStyles: { - hover: { - rect: { - fill: '#eee', - }, - text: { - fill: '#38404C', - }, - marker: { - stroke: stateColor, - }, - }, - selected: { - rect: { - fill: '#EFF2FF', - }, - text: { - fill: '#2F54EB', - }, - }, - }, - label: { - style: (cfg) => { - if (cfg.depth === 0) return { fill: '#fff' }; - return { - fill: 'rgba(0,0,0,.65)', - }; - }, - }, - style: (model) => ({ - fill: model.depth === 0 ? '#525964' : 'transparent', - }), - lineStyle: { - lineWidth: 2, - stroke: '#ccc', - }, - }, - edgeCfg: { - type: 'file-tree-edge', - style: { - lineWidth: 2, - radius: 16, - }, - edgeStateStyles: { - hover: { - stroke: stateColor, - }, - selected: { - stroke: stateColor, - }, - }, - }, - behaviors: ['drag-canvas', 'wheel-scroll', 'hover-node', 'click-node', 'drag-branch'], - layout: defaultLayout, - animate: true, - // autoFit: true, - fitCenter: true, - style: { - position: 'relative' as React.CSSProperties['position'], - height: 'inherit', - backgroundColor: '#fff', - }, - markerCfg: { - show: true, - }, -}; - -const FileTreeGraph: React.FC = (props) => { - const { uProps } = useProps(props, defaultProps); - const { className, style, loading, loadingTemplate, errorTemplate, ...rest } = uProps; - const { container } = useGraph('TreeGraph', rest, { - name: 'FileTreeGraph', - bindEvents, - }); - - return ( - - {loading && } -
- - ); -}; - -export default FileTreeGraph; diff --git a/packages/graphs/src/components/flow-analysis-graph/customItem.ts b/packages/graphs/src/components/flow-analysis-graph/customItem.ts deleted file mode 100644 index 8475a2b8e..000000000 --- a/packages/graphs/src/components/flow-analysis-graph/customItem.ts +++ /dev/null @@ -1,698 +0,0 @@ -import G6, { IGroup, Node } from '@antv/g6'; -import { clone, deepMix, each, isBoolean, isPlainObject, mix } from '@antv/util'; -import { defaultCardStyle, defaultLabelStyle, defaultLineLabelStyle, defaultMargin, prefix } from '../../constants'; -import { CardItems, CardNodeCfg, EdgeCfg, EdgeConfig, IPoint, IShape, CardItem } from '../../interface'; -import { - cloneBesidesImg, - createMarker, - getArrowCfg, - getCssPadding, - getStatusBBox, - getStatusCfg, - getStyle, - setEllipsis, - getChildrenData, -} from '../../utils'; -import { getGlobalInstance } from '../../utils/global'; - -const getPathInfo = ( - cfg: EdgeConfig< - | string - | { - text?: string; - subText?: string; - } - >, -) => { - const { edgeCfg } = cfg; - const startPoint = cfg.startPoint as IPoint; - const endPoint = cfg.endPoint as IPoint; - const { x: startX, y: startY } = startPoint; - const { x: endX, y: endY } = endPoint; - const yDiff = endY - startY; - const useControlPoint = Math.abs(yDiff) > 0; - let line1EndPoint: IPoint; - let line2StartPoint: IPoint; - let controlPoint: IPoint; - let path: Array>; - if (Math.abs(yDiff) <= 5) { - line2StartPoint = { - x: startX + 20, - y: endY, - }; - path = [ - ['M', startX, startY], - ['L', endX, endY], - ]; - } else { - const slope = useControlPoint ? Math.min(500 / Math.abs(yDiff), 20) : 0; - const cpOffset = slope > 15 ? 0 : 16; - const offset = yDiff < 0 ? cpOffset : -cpOffset; - - line1EndPoint = { - x: startX + slope, - y: endY + offset, - }; - line2StartPoint = { - x: line1EndPoint.x + cpOffset, - y: endY, - }; - // 控制点坐标 - controlPoint = { - x: ((line1EndPoint.x - startX) * (endY - startY)) / (line1EndPoint.y - startY) + startX, - y: endY, - }; - path = [ - ['M', startX, startY], - ['L', line1EndPoint.x, line1EndPoint.y], - ['Q', controlPoint.x, controlPoint.y, line2StartPoint.x, line2StartPoint.y], - ['L', endX, endY], - ]; - } - - const { startArrow: startArrowCfg, endArrow: endArrowCfg } = edgeCfg as EdgeCfg; - const startArrow = getArrowCfg(startArrowCfg, cfg); - const endArrow = getArrowCfg(endArrowCfg, cfg); - - return { - startArrow, - endArrow, - path, - line2StartPoint, - endY, - }; -}; - -const getPathText = (value: EdgeCfg['type']) => { - let text; - let subText; - if (value instanceof Object) { - text = value.text; - subText = value.subText; - } else { - text = value; - } - return { text, subText }; -}; - -// 通用指标卡 -export const registerIndicatorGeometries = () => { - const defaultTitleLabelStyle = { - fill: '#fff', - fontSize: 12, - }; - const defaultTitleRectStyle = { - fill: '#40a9ff', - radius: [2, 2, 0, 0], - }; - const defaultIconStyle = { - width: 12, - height: 12, - }; - const ARROWS = ['startArrow', 'endArrow']; - const SHAPE_DEFAULT_ATTRS = { - lineWidth: 1, - stroke: undefined, - fill: undefined, - lineAppendWidth: 1, - opacity: undefined, - strokeOpacity: undefined, - fillOpacity: undefined, - x: 0, - y: 0, - r: 10, - width: 20, - height: 20, - shadowColor: undefined, - shadowBlur: 0, - shadowOffsetX: 0, - shadowOffsetY: 0, - }; - const PATH_SHAPE_DEFAULT_ATTRS = { - lineWidth: 1, - stroke: '#000', - lineDash: undefined, - startArrow: false, - endArrow: false, - opacity: undefined, - strokeOpacity: undefined, - fillOpacity: undefined, - shadowColor: undefined, - shadowBlur: 0, - shadowOffsetX: 0, - shadowOffsetY: 0, - }; - const SHAPES_DEFAULT_ATTRS = { - edge: PATH_SHAPE_DEFAULT_ATTRS, - node: SHAPE_DEFAULT_ATTRS, - }; - // 注册节点 - G6.registerNode( - 'indicator-card', - { - // @ts-ignore - draw: (cfg: CardNodeCfg | undefined = {}, group: IGroup | undefined) => { - const { value = {}, nodeCfg, markerCfg, _draggable: draggable } = cfg; - const { - title: titleCfg, - items: itemsCfg, - label = {}, - style, - padding = 0, - badge, - percent, - autoWidth, - customContent, - } = nodeCfg as CardNodeCfg; - const appendPadding = getStatusBBox(badge); - const { style: labelStyle } = label; - const cardPadding = getCssPadding(padding); - const paddingArray = cardPadding.map((item: number, index: number) => item + appendPadding[index]); - const { style: titleStyle, containerStyle: titleContainerStyle, autoEllipsis = true } = titleCfg ?? {}; - const { - style: itemStyle, - containerStyle: itemContainerStyle, - layout, - itemSpacing = 4, - sort, - padding: itemPadding = [6, 0, 0], - } = itemsCfg ?? {}; - const itemPaddingArray = getCssPadding(itemPadding); - const { title, items, percent: percentValue } = value as CardItem; - let size = cfg?.size || [100, 30]; - if (typeof size === 'number') size = [size, size]; - let height = 0; // 统计容器总高度,动态设置 - const shapeWidth = size[0]; - const contentWidth = shapeWidth - paddingArray[1] - paddingArray[3]; - // card box - const cardStyle = getStyle(style, cfg, group); - const shape = group!.addShape('rect', { - attrs: { - x: 0, - y: 0, - width: size[0], - height: size[1], - ...defaultCardStyle, - ...cardStyle, - }, - name: 'main-box', - draggable, - }); - - // node title - let titleTextShape; - let itemShape; - let titleShape; - if (title) { - // title rect - titleShape = group!.addShape('rect', { - attrs: { - x: 0, - y: 0, - width: size[0], - height: 0, - ...defaultTitleRectStyle, - ...getStyle(titleContainerStyle, cfg, group), - }, - name: 'title-rect', - draggable, - }); - const textStyle = { - ...defaultTitleLabelStyle, - ...getStyle(titleStyle, cfg, group), - }; - titleTextShape = group!.addShape('text', { - attrs: { - x: paddingArray[3], - y: paddingArray[0], - textBaseline: 'top', - text: autoEllipsis && !autoWidth ? setEllipsis(title, textStyle, contentWidth) : title, - ...textStyle, - }, - name: 'title', - draggable, - }); - const { height: titleHeight } = titleTextShape ? titleTextShape.getBBox() : { height: size[1] / 2 }; - - titleShape?.attr('height', titleHeight + paddingArray[0] + paddingArray[2]); - height += titleShape.getBBox().height; - } - - if (items) { - if (!titleShape) { - height += paddingArray[0]; - } - itemShape = group!.addShape('rect', { - attrs: { - x: paddingArray[3], - y: height, - width: contentWidth, - height: 0, - ...getStyle(itemContainerStyle, cfg, group), - }, - name: 'item-box', - draggable, - }); - height += itemPaddingArray[0]; - const itemContentWidth = contentWidth - itemPaddingArray[1] - itemPaddingArray[3]; - const isArray = Array.isArray(items); - const createRowItems = ( - item: CardItems, - contentWidth: number, - startX: number, - index: number | string = 0, - ): number[] => { - const rowHeight: number[] = []; - let valueShapeWidth = 0; - const keys = sort ? Object.keys(item) : ['text', 'value', 'icon']; - keys.forEach((key: string, keyIndex: number) => { - let x; - const isIcon = key.startsWith('icon'); - // sort 直接均分,简单化 - if (sort || layout === 'flex') { - x = (keyIndex * contentWidth) / keys.length; - } else if (layout === 'follow') { - x = valueShapeWidth; - } else { - // layout === 'bundled' - // 直接均分,icon 紧随 value - x = key === 'text' ? 0 : contentWidth / 2; - x += isIcon ? valueShapeWidth : 0; - } - - const keyShape = group!.addShape(isIcon ? 'image' : 'text', { - attrs: { - textBaseline: 'top', - x: startX + x, - y: height, - text: item[key], - img: item[key], - ...(isIcon ? defaultIconStyle : defaultLabelStyle), - ...getStyle(itemStyle || labelStyle, cfg, group, key), - }, - name: `${key}-${index}-${keyIndex}`, - draggable, - }); - if (key === 'value' || layout === 'follow') { - valueShapeWidth += keyShape.getBBox().width; - valueShapeWidth += layout === 'follow' ? itemSpacing : 0; - } - rowHeight.push(keyShape.getBBox().height); - }); - return rowHeight; - }; - const createItems = (item: CardItems, index: number = 0) => { - const itemsHeight: number[] = []; - if (customContent) { - itemsHeight.push( - customContent(item, group, { - startX: paddingArray[3] + itemPaddingArray[3], - startY: height, - width: itemContentWidth, - }) ?? 0, - ); - } else { - itemsHeight.push(...createRowItems(item, itemContentWidth, paddingArray[3] + itemPaddingArray[3], index)); - } - height += Math.max(...itemsHeight); - if (isArray && index !== items.length - 1) { - height += defaultMargin; - } - }; - - if (Array.isArray(items)) { - items.forEach((item, index) => { - createItems(item, index); - }); - } else { - createItems(items); - } - } - - const titleHeight = titleShape?.getBBox().height || 0; - itemShape?.attr('height', Math.max(height - titleHeight + itemPaddingArray[2], size[1])); - const itemHeight = itemShape?.getBBox().height || 0; - const shapeHeight = items - ? (titleHeight || paddingArray[0]) + itemHeight + paddingArray[2] - : titleHeight + itemHeight; - shape?.attr('height', shapeHeight); - let outerMaxX = shapeWidth; - if (autoWidth) { - const shapeMaxX = Math.max.apply( - null, - group?.getChildren()?.map((childrenShape) => { - return childrenShape.getBBox().maxX || 0; - }) as number[], - ); - outerMaxX = Math.max(shapeWidth, shapeMaxX + paddingArray[1]); - titleShape?.attr('width', outerMaxX); - shape?.attr('width', outerMaxX); - itemShape?.attr('width', shapeMaxX - paddingArray[1]); - } - - if (badge) { - const statusConfig = getStatusCfg(badge, [size[0], shapeHeight]); - group!.addShape('rect', { - attrs: { - fill: '#40a9ff', - ...statusConfig, - ...getStyle(badge.style, cfg, group), - }, - name: 'status-rect', - draggable, - }); - } - if (percent && percentValue > 0) { - const { - size: percentSize = 4, - position = 'bottom', - style: percentStyle = { - fill: '#40a9ff', - }, - backgroundStyle = { - fill: 'rgba(0,0,0,.1)', - radius: [0, 0, 2, 2], - }, - } = percent; - const statusConfig = getStatusCfg( - { - position, - size: [outerMaxX, percentSize], - }, - [outerMaxX, shapeHeight], - ); - - group!.addShape('rect', { - attrs: { - ...statusConfig, - ...getStyle(backgroundStyle, cfg, group), - }, - name: 'percent-rect-background', - draggable, - }); - group!.addShape('rect', { - attrs: { - fill: '#40a9ff', - ...statusConfig, - width: Math.min(1, percentValue) * statusConfig.width, - ...getStyle(percentStyle, cfg, group), - }, - name: 'percent-rect', - draggable, - }); - } - // collapse marker - if (markerCfg) { - const graph = getGlobalInstance(cfg._graphId); - const { collapsed: stateCollapsed } = group?.get('item')?.getModel() ?? {}; - const { width: shapeWidth, height: shapeHeight } = shape.getBBox(); - let markerCfgArray = []; - if (typeof markerCfg === 'function') { - const callbackMarkerCfg = markerCfg( - { - ...cfg, - children: getChildrenData(graph?.get('eventData').getData(), cfg.g_currentPath as string), - }, - group, - ); - markerCfgArray = callbackMarkerCfg instanceof Array ? callbackMarkerCfg : [callbackMarkerCfg]; - } else { - markerCfgArray = markerCfg instanceof Array ? markerCfg : [markerCfg]; - } - const getCollapsed = () => { - if (isBoolean(stateCollapsed)) return stateCollapsed; - if (cfg._graphId.startsWith('FlowAnalysisGraph')) return !(cfg[`${prefix}_children`] as string[])?.length; - return !(cfg.children as string[])?.length; - }; - markerCfgArray.forEach((mc) => { - const { show, position = 'right', collapsed: inCollapsed, style: markerStyle } = mc; - const collapsed = inCollapsed ?? getCollapsed(); - createMarker( - { - show, - position, - collapsed, // 优先使用内部状态 - style: markerStyle, - }, - group, - [shapeWidth, shapeHeight], - markerCfgArray.length > 1, - ); - shape.attr('defaultCollapsed', collapsed); - }); - } - - return shape; - }, - /** - * 更新节点,包含文本 - * @override - * @param {Object} cfg 节点的配置项 - * @param {Node} node 节点 - */ - // @ts-ignore - update: undefined, - // @ts-ignore - setState(name: string, value: boolean, item: Node) { - const shape: IShape = item.get('keyShape'); - if (!shape || shape.destroyed) return; - - const type = item.getType(); - - const stateName = isBoolean(value) ? name : `${name}:${value}`; - const itemStateStyle = item.getStateStyle(stateName); - // const originStyle = item.getOriginStyle(); - - // 不允许设置一个不存在的状态 - if (!itemStateStyle) { - return; - } - - // 要设置或取消的状态的样式 - // 当没有 state 状态时,默认使用 model.stateStyles 中的样式 - const styles = Object.assign({}, itemStateStyle); - - const group = item.getContainer(); - - // 从图元素现有的样式中删除本次要取消的 states 中存在的属性值。使用对象检索更快 - const keptAttrs: any = { x: 1, y: 1, cx: 1, cy: 1 }; - - if (value) { - // style 为要设置的状态的样式 - for (const key in styles) { - const style = styles[key]; - if (isPlainObject(style) && !ARROWS.includes(key)) { - const subShape = group.find((element) => element.get('name') === key); - if (subShape) { - subShape.attr(style); - } - } else { - // 非纯对象,则认为是设置到 keyShape 上面的 - shape.attr({ - [key]: style, - }); - } - } - } else { - // 所有生效的 state 的样式 - const enableStatesStyle = cloneBesidesImg(item.getCurrentStatesStyle()); - - const model = item.getModel(); - // 原始样式 - const originStyle = mix({}, model.style, cloneBesidesImg(item.getOriginStyle())); - - const keyShapeName = shape.get('name'); - - // cloning shape.attr(), keys.forEach to avoid cloning the img attr, which leads to maximum clone heap #2383 - // const keyShapeStyles = clone(shape.attr()) - const shapeAttrs = shape.attr(); - const keyShapeStyles = {}; - Object.keys(shapeAttrs).forEach((key) => { - if (key === 'img') return; - const attr = shapeAttrs[key]; - if (attr && typeof attr === 'object') { - keyShapeStyles[key] = clone(attr); - } else { - keyShapeStyles[key] = attr; - } - }); - - // 已有样式 - 要取消的状态的样式 - const filtetDisableStatesStyle: any = {}; - - // styles 为要取消的状态的样式 - for (const p in styles) { - const style = styles[p]; - if (isPlainObject(style) && !ARROWS.includes(p)) { - const subShape = group.find((element) => element.get('name') === p); - if (subShape) { - const subShapeStyles = clone(subShape.attr()); - each(style, (v, key) => { - if (p === keyShapeName && keyShapeStyles[key] && !keptAttrs[key]) { - delete keyShapeStyles[key]; - const value = originStyle[p][key] || SHAPES_DEFAULT_ATTRS[type][key]; - shape.attr(key, value); - } else if (subShapeStyles[key] || subShapeStyles[key] === 0) { - delete subShapeStyles[key]; - const value = originStyle[p][key] || SHAPES_DEFAULT_ATTRS[type][key]; - subShape.attr(key, value); - } - }); - filtetDisableStatesStyle[p] = subShapeStyles; - } - } else { - if (keyShapeStyles[p] && !keptAttrs[p]) { - delete keyShapeStyles[p]; - const value = - originStyle[p] || - (originStyle[keyShapeName] ? originStyle[keyShapeName][p] : undefined) || - SHAPES_DEFAULT_ATTRS[type][p]; - shape.attr(p, value); - } - } - } - - // 从图元素现有的样式中删除本次要取消的 states 中存在的属性值后, - // 如果 keyShape 有 name 属性,则 filtetDisableStatesStyle 的格式为 { keyShapeName: {} } - // 否则为普通对象 - if (!keyShapeName) { - mix(filtetDisableStatesStyle, keyShapeStyles); - } else { - filtetDisableStatesStyle[keyShapeName] = keyShapeStyles; - } - for (const key in enableStatesStyle) { - if (keptAttrs[key]) continue; - const enableStyle = enableStatesStyle[key]; - if (!isPlainObject(enableStyle) || ARROWS.includes(key)) { - // 把样式属性merge到keyShape中 - if (!keyShapeName) { - mix(originStyle, { - [key]: enableStyle, - }); - } else { - mix(originStyle[keyShapeName], { - [key]: enableStyle, - }); - delete originStyle[key]; - } - delete enableStatesStyle[key]; - } - } - - const originstyles = {}; - deepMix(originstyles, originStyle, filtetDisableStatesStyle, enableStatesStyle); - let keyShapeSetted = false; - - for (const originKey in originstyles) { - const style = originstyles[originKey]; - if (isPlainObject(style) && !ARROWS.includes(originKey)) { - const subShape = group.find((element) => element.get('name') === originKey); - if (subShape) { - if (originKey === keyShapeName) { - keyShapeSetted = true; - } - if (originKey !== 'collapse-icon') subShape.attr(style); - } - } else if (!keyShapeSetted) { - const value = style || SHAPES_DEFAULT_ATTRS[type][originKey]; - shape.attr({ - [originKey]: value, - }); - } - } - } - }, - }, - 'single-node', - ); - // 注册边 - G6.registerEdge( - 'labels-line', - { - // @ts-ignore - draw: function draw(cfg: ItemModelConfig | undefined = {}, group: IGroup | undefined) { - const { edgeCfg, value } = cfg; - const { text, subText } = getPathText(value); - const { style: edgeStyle, label: labelCfg } = edgeCfg as EdgeCfg; - const { startArrow, endArrow, path, line2StartPoint, endY } = getPathInfo(cfg); - const { style: labelStyle, margin = 4 } = labelCfg ?? {}; - - const line = group!.addShape('path', { - attrs: { - path, - stroke: '#ccc', - startArrow, - endArrow, - ...(typeof edgeStyle === 'function' ? edgeStyle(cfg, group) : edgeStyle), - }, - name: 'path-shape', - }); - - const createItem = (itemText: string, key: string, attrs: object) => { - group!.addShape('text', { - attrs: { - text: itemText, - x: line2StartPoint.x, - ...attrs, - }, - name: `line-text-${key}`, - }); - }; - if (text) { - const textStyle = { ...defaultLineLabelStyle, ...getStyle(labelStyle, cfg, group, 'text') }; - const offsetY = subText ? Number((`${textStyle.fontSize}` || '12').replace(/px/g, '')) / 2 : 0; - createItem(text, 'text', { - y: endY - offsetY - margin / 2, - ...textStyle, - }); - } - if (subText) { - const textStyle = { ...defaultLineLabelStyle, ...getStyle(labelStyle, cfg, group, 'subText') }; - const offsetY = Number((`${textStyle.fontSize}` || '12').replace(/px/g, '')) / 2; - createItem(text, 'subText', { - y: endY + offsetY + margin / 2, - ...textStyle, - }); - } - return line; - }, - // @ts-ignore - update: (cfg: ItemModelConfig, edge) => { - const { edgeCfg, value } = cfg; - const { text, subText } = getPathText(value); - const group = edge.getContainer(); - const getShape = (shapeName: string) => { - return group.get('children').find((item: Node) => item.get('name') === shapeName); - }; - const { startArrow, endArrow, path, line2StartPoint, endY } = getPathInfo(cfg); - const { style: edgeStyle, label: labelCfg } = edgeCfg as EdgeCfg; - const { style: labelStyle, margin = 4 } = labelCfg ?? {}; - - // path - const pathShape = getShape('path-shape'); - pathShape?.attr({ - path, - stroke: '#ccc', - startArrow, - endArrow, - ...(typeof edgeStyle === 'function' ? edgeStyle(cfg, group) : edgeStyle), - }); - // path text - const texts = ['text', 'subText']; - const hasSubText = !!getShape(`line-text-subText`); - texts.forEach((key: string) => { - const textShape = getShape(`line-text-${key}`); - const textStyle = { ...defaultLineLabelStyle, ...getStyle(labelStyle, cfg, group, key) }; - const offsetY = hasSubText ? Number((`${textStyle.fontSize}` || '12').replace(/px/g, '')) / 2 : 0; - textShape?.attr({ - x: line2StartPoint.x, - y: key === 'text' ? endY - offsetY - margin / 2 : endY + offsetY + margin / 2, - text: key === 'text' ? text : subText, - ...textStyle, - }); - }); - }, - }, - 'single-edge', - ); -}; diff --git a/packages/graphs/src/components/flow-analysis-graph/events.ts b/packages/graphs/src/components/flow-analysis-graph/events.ts deleted file mode 100644 index c6adf0cc9..000000000 --- a/packages/graphs/src/components/flow-analysis-graph/events.ts +++ /dev/null @@ -1,158 +0,0 @@ -import { NodeData, IGraph, IG6GraphEvent, INode, NodeConfig, FetchLoading, FlowGraphDatum } from '../../interface'; -import { MARKER_CLICK, prefix } from '../../constants'; -import { FlowAnalysisGraphConfig } from '../../components/flow-analysis-graph'; -import { createFetchLoading, closeFetchLoading, isType, EventData } from '../../utils'; - -/** - * 流向图展开收起 - */ -type CollapsedNode = NodeData & { collapsedLevel: number; g_level: number }; - -export const bindEvents = (params: { - graph: IGraph; - level: number; - asyncData: FlowAnalysisGraphConfig['nodeCfg']['asyncData']; - fetchLoading?: FetchLoading; -}) => { - const { graph, level, asyncData, fetchLoading } = params; - const changeData = (data, eventData?: FlowGraphDatum) => { - if (eventData) graph.set('eventData', new EventData(eventData)); - graph.changeData(data); - if (graph.get('fitCenter')) { - graph.fitCenter(); - } - }; - const onClick = async (e: IG6GraphEvent) => { - const controlData: { edges: any[]; nodes: any[] } = graph.get('eventData').getData(); - if (e.target.get('name')?.startsWith('collapse-icon')) { - const item = e.item as INode; - const model = item.getModel() as any; - let { id: nodeId, collapsed } = model; - - if (!isType(collapsed, 'Boolean')) { - // @ts-ignore - collapsed = item._cfg.group - .getChildren() - .find((t) => t.get('name') === 'main-box') - ?.attr('defaultCollapsed'); - } - const { edges: fullEdges = [], nodes: fullNodes } = controlData ?? {}; - const updateItems: INode[] = []; - const updateIds: string[] = []; - let allTargets: string[] = []; - const getLinkedId = (currentId: string) => { - fullEdges.forEach((edge) => { - const { source, target } = edge; - if (source === currentId && !allTargets.includes(target)) { - allTargets.push(target); - getLinkedId(target); - } - }); - }; - getLinkedId(nodeId as string); - // 避免成环的情况 - allTargets = allTargets.filter((t) => t !== nodeId); - if (!collapsed) { - // collapse - graph.findAll('node', (node) => allTargets.includes(node.get('id'))).forEach((node) => graph.hideItem(node)); - fullNodes.forEach((node: CollapsedNode) => { - const { collapsedLevel = 0, id } = node; - if (allTargets.includes(id)) { - node.collapsedLevel = collapsedLevel + 1; - } - }); - } else { - const { nodes: currentNodes, edges: currentEdges } = graph.get('data'); - if (allTargets.length) { - // 已经展开过 - if (graph.findById(allTargets[0])) { - allTargets.forEach((id) => { - const n = graph.findById(id); - if (n) { - const { collapsedLevel } = n.getModel(); - if (!collapsedLevel || collapsedLevel < 2) graph.showItem(n); - } - }); - fullNodes.forEach((node: CollapsedNode) => { - const { collapsedLevel = 0, id } = node; - if (allTargets.includes(id)) { - node.collapsedLevel = collapsedLevel - 1; - } - }); - } else { - // 从全量 data 中取 - let concatNodes; - if (level) { - concatNodes = fullNodes.filter((n) => { - return allTargets.includes(n.id) && n[`${prefix}_level`] === model[`${prefix}_level`] + 1; - }); - allTargets = concatNodes.map((n) => n.id); - } - - const currentData = { - nodes: currentNodes - .map((n) => { - if (n.id === nodeId) n[`${prefix}_children`] = allTargets; - return n; - }) - .concat(concatNodes), - edges: currentEdges.concat(fullEdges.filter((e) => e.source === nodeId)), - }; - changeData(currentData); - } - } else if (asyncData) { - createFetchLoading(item.getModel() as NodeConfig, fetchLoading); - const { nodes: asnycNodes, edges: asyncEdges } = await asyncData(item.getModel() as NodeConfig); - // modify current node collapsed status - graph.updateItem(item, { - collapsed: false, - }); - graph.refreshItem(item); - closeFetchLoading(); - const getDataByEvent = (nodes, edges) => { - return { - nodes: nodes - .map((n) => { - if (n.id === nodeId) n[`${prefix}_children`] = asnycNodes.map((n) => n.id); - return n; - }) - .concat(asnycNodes), - edges: edges.concat( - asyncEdges?.length ? asyncEdges : asnycNodes.map((t) => ({ source: nodeId, target: t.id })), - ), - }; - }; - changeData(getDataByEvent(currentNodes, currentEdges), getDataByEvent(fullNodes, fullEdges)); - graph.emit(MARKER_CLICK, e, { - type: 'fetch', - collapsed: true, - }); - return; - } - } - const { target: updateNodeTarget } = fullEdges.find((edge) => edge.source === nodeId); - fullEdges.forEach((edge) => { - const { source, target } = edge; - if (target === updateNodeTarget) { - updateIds.push(source); - } - }); - Array.from(new Set(updateIds)).forEach((id: string) => { - updateItems.push(graph.find('node', (node) => node.get('id') === id) as INode); - }); - updateItems.forEach((nodeItem) => { - graph.updateItem(nodeItem, { - collapsed: !collapsed, - }); - graph.refreshItem(nodeItem); - }); - graph.emit(MARKER_CLICK, e, { - type: 'collapse', - collapsed: !!collapsed, - }); - } - }; - graph.on('node:click', (e: IG6GraphEvent) => { - onClick(e); - }); -}; diff --git a/packages/graphs/src/components/flow-analysis-graph/index.tsx b/packages/graphs/src/components/flow-analysis-graph/index.tsx deleted file mode 100644 index 5e2078d01..000000000 --- a/packages/graphs/src/components/flow-analysis-graph/index.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import React from 'react'; -import { DagreLayout } from '@antv/layout'; -import { defaultFlowGraphAnchorPoints, defaultNodeSize, defaultNodeStyle, defaultStateStyles } from '../../constants'; -import ErrorBoundary from '../../errorBoundary'; -import useGraph from '../../hooks/useGraphs'; -import useProps from '../../hooks/useProps'; -import { ChartLoading } from '../../utils'; -import { bindEvents } from './events'; -import { - CardItems, - CommonConfig, - FlowGraphEdgeData, - NodeCfg, - NodeData, - NodeConfig, - FetchLoading, -} from '../../interface'; -import { registerIndicatorGeometries } from './customItem'; - -export type FlowAnalysisNodeData = NodeData<{ - title?: string; - items?: CardItems[]; -}>; - -export interface FlowAnalysisGraphConfig extends Omit, 'data' | 'nodeCfg'>, FetchLoading { - data: { - nodes: FlowAnalysisNodeData[]; - edges: FlowGraphEdgeData[]; - }; - /** 展开层级,默认 100 */ - level?: number; - nodeCfg?: NodeCfg & { - /** 点击展开时异步获取数据 */ - asyncData?: (nodeCfg: NodeConfig) => Promise<{ - nodes: FlowAnalysisNodeData[]; - edges?: FlowGraphEdgeData[]; - }>; - }; -} - -registerIndicatorGeometries(); - -const defaultLayout = { - type: 'dagre', - rankdir: 'LR', - center: [0, 0], - nodesepFunc: () => 1, - ranksepFunc: () => 1, -}; - -const defaultProps = { - nodeCfg: { - type: 'indicator-card', - size: defaultNodeSize, - style: defaultNodeStyle, - anchorPoints: defaultFlowGraphAnchorPoints, - padding: 6, - layout: 'bundled', - nodeStateStyles: defaultStateStyles, - }, - edgeCfg: { - type: 'cubic-horizontal', - edgeStateStyles: defaultStateStyles, - }, - behaviors: ['zoom-canvas', 'drag-canvas'], - layout: defaultLayout, - animate: true, - markerPosition: 'right' as 'right', - autoFit: true, - fitCenter: true, - style: { - position: 'relative' as React.CSSProperties['position'], - height: 'inherit', - backgroundColor: '#fff', - }, - level: 100, -}; - -const FlowAnalysisGraph: React.FC = (props) => { - const { uProps } = useProps(props, defaultProps); - const { className, style, loading, loadingTemplate, errorTemplate, ...rest } = uProps; - const { container } = useGraph('Graph', rest, { name: 'FlowAnalysisGraph', bindEvents }); - - return ( - - {loading && } -
- - ); -}; - -export default FlowAnalysisGraph; diff --git a/packages/graphs/src/components/fund-flow-graph/customItem.ts b/packages/graphs/src/components/fund-flow-graph/customItem.ts deleted file mode 100644 index d1d47af9a..000000000 --- a/packages/graphs/src/components/fund-flow-graph/customItem.ts +++ /dev/null @@ -1,277 +0,0 @@ -import G6, { IGroup, Node } from '@antv/g6'; -import { defaultMargin, defaultLabelStyle } from '../../constants'; -import { getStyle, getCssPadding, getSize, getArrowCfg, createMarker } from '../../utils'; -import { CardNodeCfg, CardItems, ModelConfig, IPoint, EdgeCfg } from '../../interface'; -import { edgeType } from './index'; - -interface ItemModelConfig extends ModelConfig { - value: edgeType; -} - -const getPathInfo = (cfg: ItemModelConfig) => { - const { edgeCfg } = cfg; - const startPoint = cfg.startPoint as IPoint; - const endPoint = cfg.endPoint as IPoint; - const { x: startX, y: startY } = startPoint; - const { x: endX, y: endY } = endPoint; - const Ydiff = endY - startY; - const slope = Ydiff !== 0 ? Math.min(500 / Math.abs(Ydiff), 20) : 0; - const cpOffset = slope > 15 ? 0 : 16; - const offset = Ydiff < 0 ? cpOffset : -cpOffset; - - const line1EndPoint = { - x: startX + slope, - y: endY + offset, - }; - const line2StartPoint = { - x: line1EndPoint.x + cpOffset, - y: endY, - }; - - // 控制点坐标 - const controlPoint = { - x: ((line1EndPoint.x - startX) * (endY - startY)) / (line1EndPoint.y - startY) + startX, - y: endY, - }; - - let path = [ - ['M', startX, startY], - ['L', line1EndPoint.x, line1EndPoint.y], - ['Q', controlPoint.x, controlPoint.y, line2StartPoint.x, line2StartPoint.y], - ['L', endX, endY], - ]; - - if (Math.abs(Ydiff) <= 5) { - path = [ - ['M', startX, startY], - ['L', endX, endY], - ]; - } - const { startArrow: startArrowCfg, endArrow: endArrowCfg } = edgeCfg as EdgeCfg; - - const startArrow = getArrowCfg(startArrowCfg, cfg); - const endArrow = getArrowCfg(endArrowCfg, cfg); - - return { - startArrow, - endArrow, - path, - line2StartPoint, - endY, - }; -}; - -const getPathText = (value: edgeType) => { - let text; - let subText; - if (value instanceof Object) { - text = value.text; - subText = value.subText; - } else { - text = value; - } - return { text, subText }; -}; - -// 资金流向图 -export const registerFundFlowItems = () => { - // 注册节点 - G6.registerNode( - 'fund-card', - { - // @ts-ignore - draw: (cfg: CardNodeCfg | undefined = {}, group: IGroup | undefined) => { - const { value = {}, nodeCfg, markerCfg } = cfg; - const { label = {}, style, padding = 0, customContent } = nodeCfg as CardNodeCfg; - const { style: labelStyle } = label; - const paddingArray = getCssPadding(padding); - const size = getSize(cfg.size); - let height = 0; // 统计容器总高度,动态设置 - const shapeWidth = size[0]; - const contentWidth = shapeWidth - paddingArray[1] - paddingArray[3]; - const contentHeight = size[1] - paddingArray[0] - paddingArray[2]; - // card box - const cardStyle = getStyle(style, cfg, group); - const shape = group!.addShape('rect', { - attrs: { - x: 0, - y: 0, - width: size[0], - height: size[1], - radius: size[1] / 2, - fill: '#fff', - stroke: '#40a9ff', - ...cardStyle, - }, - name: 'main-box', - draggable: true, - }); - - if (value) { - height += paddingArray[0]; - const createRowItems = (item: CardItems, contentWidth: number, startX: number): number[] => { - const { text, icon } = item; - let textShape; - let iconShape; - if (icon) { - iconShape = group!.addShape('image', { - attrs: { - x: startX, - y: height, - img: icon, - width: contentHeight, - height: contentHeight, - ...getStyle(labelStyle, cfg, group, 'icon'), - }, - name: 'fund-icon', - }); - } - textShape = group?.addShape('text', { - attrs: { - textBaseline: 'middle', - textAlign: iconShape ? 'start' : 'center', - x: startX + (iconShape ? iconShape?.getBBox().width + defaultMargin : contentWidth / 2), - y: paddingArray[0] + contentHeight / 2, - text, - ...defaultLabelStyle, - ...getStyle(labelStyle, cfg, group, 'text'), - }, - name: `fund-text`, - }); - return [textShape?.getBBox().height ?? 0, iconShape?.getBBox().height ?? 0]; - }; - const createItems = (item: CardItems) => { - const itemsHeight: number[] = []; - if (customContent) { - itemsHeight.push( - customContent(item, group, { - startX: paddingArray[3], - startY: height, - width: contentWidth, - }) ?? 0, - ); - } else { - itemsHeight.push(...createRowItems(item, contentWidth, paddingArray[3])); - } - height += Math.max(...itemsHeight); - }; - - createItems(value as CardItems); - } - shape?.attr('height', Math.max(size[1], height + paddingArray[2])); - - // collapse marker - if (markerCfg) { - const { collapsed: stateCollapsed } = group?.get('item')?.getModel() ?? {}; - const { width: shapeWidth, height: shapeHeight } = shape.getBBox(); - const { - show, - position = 'right', - collapsed, - style: markerStyle, - } = typeof markerCfg === 'function' ? markerCfg(cfg, group) : markerCfg; - createMarker( - { - show, - position, - collapsed: stateCollapsed ?? collapsed, // 优先使用内部状态 - style: markerStyle, - }, - group, - [shapeWidth, shapeHeight], - ); - shape.attr('defaultCollapsed', collapsed); - } - - return shape; - }, - /** - * 更新节点,包含文本 - * @override - * @param {Object} cfg 节点的配置项 - * @param {Node} node 节点 - */ - update: undefined, - }, - 'single-node', - ); - - // 注册边 - G6.registerEdge( - 'fund-line', - { - // @ts-ignore - draw: function draw(cfg: ItemModelConfig | undefined = {}, group: IGroup | undefined) { - const { edgeCfg, value } = cfg; - const { text, subText } = getPathText(value); - const { style: edgeStyle, label: labelCfg } = edgeCfg as EdgeCfg; - - const { startArrow, endArrow, path, line2StartPoint, endY } = getPathInfo(cfg); - const { style: labelStyle } = labelCfg ?? {}; - const line = group!.addShape('path', { - attrs: { - path, - stroke: '#ccc', - startArrow, - endArrow, - ...(typeof edgeStyle === 'function' ? edgeStyle(cfg, group) : edgeStyle), - }, - name: 'path-shape', - }); - - const createItem = (itemText: string, key: string) => { - group!.addShape('text', { - attrs: { - text: itemText, - x: line2StartPoint.x, - y: key === 'text' ? endY - 4 : endY + 16, - ...defaultLabelStyle, - ...getStyle(labelStyle, cfg, group, key), - }, - name: `line-text-${key}`, - }); - }; - text && createItem(text, 'text'); - subText && createItem(subText, 'subText'); - - return line; - }, - // @ts-ignore - update: (cfg: ItemModelConfig, edge) => { - const { edgeCfg, value } = cfg; - const { text, subText } = getPathText(value); - const group = edge.getContainer(); - const getShape = (shapeName: string) => { - return group.get('children').find((item: Node) => item.get('name') === shapeName); - }; - // const { startArrow, endArrow } = getPathInfo(cfg); - const { startArrow, endArrow, path, line2StartPoint, endY } = getPathInfo(cfg); - const { style: edgeStyle, label: labelCfg } = edgeCfg as EdgeCfg; - const { style: labelStyle } = labelCfg ?? {}; - - // path - const pathShape = getShape('path-shape'); - pathShape?.attr({ - path, - stroke: '#ccc', - startArrow, - endArrow, - ...(typeof edgeStyle === 'function' ? edgeStyle(cfg, group) : edgeStyle), - }); - // path text - const texts = ['text', 'subText']; - texts.forEach((key: string) => { - const textShape = getShape(`line-text-${key}`); - textShape?.attr({ - x: line2StartPoint.x, - y: key === 'text' ? endY - 4 : endY + 16, - text: key === 'text' ? text : subText, - ...defaultLabelStyle, - ...getStyle(labelStyle, cfg, group, key), - }); - }); - }, - }, - 'single-edge', - ); -}; diff --git a/packages/graphs/src/components/fund-flow-graph/index.tsx b/packages/graphs/src/components/fund-flow-graph/index.tsx deleted file mode 100644 index 25262facb..000000000 --- a/packages/graphs/src/components/fund-flow-graph/index.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import React from 'react'; -import { DagreLayout } from '@antv/layout'; -import ErrorBoundary from '../../errorBoundary'; -import useGraph from '../../hooks/useGraphs'; -import useProps from '../../hooks/useProps'; -import { ChartLoading } from '../../utils'; -import { defaultFlowGraphAnchorPoints, defaultNodeSize, defaultStateStyles, defaultNodeStyle } from '../../constants'; -import { registerFundFlowItems } from './customItem'; -import { bindEvents } from '../flow-analysis-graph/events'; -import { CommonConfig, EdgeData, NodeData } from '../../interface'; - -export type edgeType = - | string - | { - text?: string; - subText?: string; - }; - -export type FundFlowEdgeData = EdgeData; - -export type FundFlowNodeData = NodeData<{ - text?: string; - icon?: string; -}>; -export interface FundFlowGraphConfig extends Omit, 'data'> { - data: { - nodes: FundFlowNodeData[]; - edges: FundFlowEdgeData[]; - }; -} - -registerFundFlowItems(); - -const defaultLayout = { - type: 'dagre', - rankdir: 'LR', - nodesep: 30, - ranksep: 50, -}; - -const defaultProps = { - nodeCfg: { - type: 'fund-card', - size: defaultNodeSize, - style: defaultNodeStyle, - anchorPoints: defaultFlowGraphAnchorPoints, - nodeStateStyles: defaultStateStyles, - padding: 6, - }, - edgeCfg: { - type: 'fund-line', - edgeStateStyles: defaultStateStyles, - style: { - stroke: '#40a9ff', - }, - endArrow: { - fill: '#40a9ff', - }, - }, - behaviors: ['zoom-canvas', 'drag-canvas'], - layout: defaultLayout, - animate: true, - autoFit: true, - fitCenter: true, - style: { - position: 'relative' as React.CSSProperties['position'], - height: 'inherit', - backgroundColor: '#fff', - }, -}; - -const FundFlowGraph: React.FC = (props) => { - const { uProps } = useProps(props, defaultProps); - const { className, style, loading, loadingTemplate, errorTemplate, ...rest } = uProps; - const { container } = useGraph('Graph', rest, { name: 'FundFlowGraph', bindEvents }); - - return ( - - {loading && } -
- - ); -}; - -export default FundFlowGraph; diff --git a/packages/graphs/src/components/mind-map-graph/index.tsx b/packages/graphs/src/components/mind-map-graph/index.tsx deleted file mode 100644 index 85e7a6751..000000000 --- a/packages/graphs/src/components/mind-map-graph/index.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import React from 'react'; -import { defaultFlowGraphAnchorPoints, defaultNodeSize, defaultNodeStyle, defaultStateStyles } from '../../constants'; -import ErrorBoundary from '../../errorBoundary'; -import useGraph from '../../hooks/useGraphs'; -import useProps from '../../hooks/useProps'; -import { CompactBoxLayout } from '../../layout'; -import { - CommonConfig, - IGraph, - IGroup, - NodeCfg, - NodeConfig, - Shape, - ShapeCfg, - G6TreeGraphData, - FetchLoading, -} from '../../interface'; -import { ChartLoading } from '../../utils'; -import { bindEvents } from '../file-tree-graph/events'; -import { registerIndicatorGeometries } from '../flow-analysis-graph/customItem'; - -export interface MindMapGraphConfig extends Omit, 'data' | 'nodeCfg'>, FetchLoading { - data: G6TreeGraphData; - /** 展开层级,默认 100 */ - level?: number; - nodeCfg?: NodeCfg & { - /** 点击展开时异步获取数据 */ - getChildren?: (nodeCfg: NodeConfig) => Promise; - }; -} - -registerIndicatorGeometries(); - -const defaultLayout = { - type: 'mindmap', - direction: 'H', - getId: (d: any) => { - return d.id; - }, - getHeight: () => { - return 60; - }, - getWidth: () => { - return 16; - }, - getVGap: () => { - return 16; - }, - getHGap: () => { - return 100; - }, -}; - -const defaultProps = { - nodeCfg: { - type: 'indicator-card', - size: defaultNodeSize, - style: defaultNodeStyle, - anchorPoints: defaultFlowGraphAnchorPoints, - padding: 6, - layout: 'bundled', - nodeStateStyles: defaultStateStyles, - label: { - style: (cfg: Shape | ShapeCfg, group: IGroup | IGraph | undefined, type: string | undefined) => { - const styles = { - icon: { - width: 10, - height: 10, - }, - value: { - fill: '#000', - }, - text: { - fill: '#aaa', - }, - }; - return type ? styles[type] : {}; - }, - }, - }, - edgeCfg: { - type: 'cubic-horizontal', - endArrow: { - type: 'vee', - }, - edgeStateStyles: defaultStateStyles, - }, - behaviors: ['zoom-canvas', 'drag-canvas'], - layout: defaultLayout, - animate: true, - autoFit: true, - fitCenter: true, - style: { - position: 'relative' as React.CSSProperties['position'], - height: 'inherit', - backgroundColor: '#fff', - }, - level: 100, -}; - -const MindMapGraph: React.FC = (props) => { - const { uProps } = useProps(props, defaultProps); - const { className, style, loading, loadingTemplate, errorTemplate, ...rest } = uProps; - const { container } = useGraph('TreeGraph', rest, { - name: 'MindMapGraph', - bindEvents, - }); - - return ( - - {loading && } -
- - ); -}; - -export default MindMapGraph; diff --git a/packages/graphs/src/components/organization-graph/customItem.ts b/packages/graphs/src/components/organization-graph/customItem.ts deleted file mode 100644 index a01788250..000000000 --- a/packages/graphs/src/components/organization-graph/customItem.ts +++ /dev/null @@ -1,180 +0,0 @@ -import G6, { IGroup, LabelStyle } from '@antv/g6'; -import { defaultMargin, defaultLabelStyle, defaultCardStyle } from '../../constants'; -import { getStyle, getCssPadding, createMarker } from '../../utils'; -import { CardNodeCfg, OrgItem } from '../../interface'; - -// 组织架构图 -export const registerOrganizationCardNode = () => { - const defaultIconStyle = { - width: 12, - height: 12, - }; - G6.registerNode( - 'organization-card', - { - draw(cfg: Omit | undefined = {}, group: IGroup | undefined) { - const { value: originValue = {}, nodeCfg, markerCfg, _draggable: draggable } = cfg; - const value = { ...(originValue as OrgItem & { text?: string; value?: string }) }; - let isOld = false; - /** 兼容历史数据 */ - if (value.text) { - isOld = true; - value.name = value.text as string; - } - if (value.value) { - isOld = true; - value.title = value.value as string; - } - const { style, padding = 0, label = {}, autoWidth, customContent } = nodeCfg as CardNodeCfg; - const { style: labelStyle } = label; - const paddingArray = getCssPadding(padding); - let size = (cfg?.size || [100, 30]) as number[]; - if (typeof size === 'number') size = [size, size]; - let height = 0; // 统计容器总高度,动态设置,宽度不做调整 - const contentWidth = size[0] - paddingArray[1] - paddingArray[3]; - // card box - const cardStyle = getStyle(style, cfg, group); - const shape = group!.addShape('rect', { - attrs: { - x: 0, - y: 0, - width: size[0], - height: size[1], - ...defaultCardStyle, - ...cardStyle, - }, - name: 'main-box', - draggable, - }); - - if (value) { - // 兼容历史数据 - const getKey = (key) => { - if (isOld) { - const keys = { - name: 'text', - title: 'value', - }; - return keys[key]; - } - return key; - }; - height += paddingArray[0]; - const createRowItems = ( - item: OrgItem, - contentWidth: number, - startX: number, - index: number | string = 0, - ): number[] => { - let iconWidth = 0; - const rowHeight: number[] = []; - const keys = ['icon', 'name', 'title']; - const getXY = (type: string, layoutCfg: LabelStyle) => { - const { fontSize = 12 } = layoutCfg; - let x = 0; - let y = 0; - const offsetX = autoWidth - ? iconWidth - ? iconWidth + paddingArray[3] - : iconWidth - : (contentWidth + iconWidth) / 2; - switch (type) { - case 'icon': - x = startX; - y = height; - break; - case 'name': - x = startX + offsetX; - y = item.title ? paddingArray[0] : (size[1] - fontSize) / 2; - break; - case 'title': - x = startX + offsetX; - y = item.name ? paddingArray[0] + rowHeight[1] + defaultMargin : (size[1] - fontSize) / 2; - break; - default: - break; - } - return { x, y }; - }; - keys.forEach((key: string, keyIndex: number) => { - const isIcon = key.startsWith('icon'); - const shapeStyle = getStyle(labelStyle, cfg, group, getKey(key)); - if (key === 'icon' && item[key]) { - iconWidth = shapeStyle.width || 32; - } - const keyShape = group!.addShape(isIcon ? 'image' : 'text', { - attrs: { - textBaseline: 'top', - textAlign: autoWidth ? 'start' : 'center', - ...getXY(key, shapeStyle), - text: item[key], - img: item[key], - ...(isIcon ? defaultIconStyle : defaultLabelStyle), - ...shapeStyle, - }, - name: `${key}-${index}-${keyIndex}`, - draggable, - }); - rowHeight.push(keyShape.getBBox().height); - }); - return rowHeight; - }; - const createItems = (item: OrgItem, index: number = 0) => { - const itemsHeight: number[] = []; - if (customContent) { - itemsHeight.push( - customContent(item, group, { - startX: paddingArray[3], - startY: height, - width: contentWidth, - }) ?? 0, - ); - } else { - itemsHeight.push(...createRowItems(item, contentWidth, paddingArray[3], index)); - } - height += Math.max(...itemsHeight); - }; - - createItems(value); - } - - shape?.attr('height', Math.max(height + paddingArray[2], size[1])); - if (autoWidth) { - const maxX = Math.max( - size[0], - ...(group?.getChildren()?.map((childrenShape) => { - return (childrenShape.getBBox().maxX || 0) + paddingArray[1]; - }) as number[]), - ); - shape?.attr('width', maxX); - } - // collapse marker - if (markerCfg) { - const { collapsed: stateCollapsed } = group?.get('item')?.getModel() ?? {}; - const { width: shapeWidth, height: shapeHeight } = shape.getBBox(); - const { - show, - position = 'right', - collapsed, - style: markerStyle, - } = typeof markerCfg === 'function' ? markerCfg(cfg, group) : markerCfg; - createMarker( - { - show, - position, - collapsed: stateCollapsed ?? collapsed, // 优先使用内部状态 - style: markerStyle, - }, - group, - [shapeWidth, shapeHeight], - ); - shape.attr('defaultCollapsed', collapsed); - } - - return shape; - }, - update: undefined, - }, - 'single-node', - ); -}; diff --git a/packages/graphs/src/components/organization-graph/index.tsx b/packages/graphs/src/components/organization-graph/index.tsx deleted file mode 100644 index 7e094007f..000000000 --- a/packages/graphs/src/components/organization-graph/index.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import React from 'react'; -import { ChartLoading } from '../../utils'; -import ErrorBoundary from '../../errorBoundary'; -import useGraph from '../../hooks/useGraphs'; -import useProps from '../../hooks/useProps'; -import { defaultStateStyles } from '../../constants'; -import { bindEvents } from '../file-tree-graph/events'; -import { registerOrganizationCardNode } from './customItem'; -import { IGroup, CommonConfig, ShapeCfg, Shape, NodeConfig, IGraph, NodeData, OrgItem } from '../../interface'; - -export type OrganizationGraphData = NodeData; -export interface OrganizationGraphConfig extends Omit { - data: OrganizationGraphData; -} - -registerOrganizationCardNode(); - -const defaultNodeStyle = { - fill: '#91d5ff', - stroke: '#40a9ff', - radius: 2, -}; - -const defaultLayout = { - type: 'compactBox', - direction: 'TB', - getId: function getId(d: NodeConfig) { - return d.id; - }, - getHeight: function getHeight() { - return 16; - }, - getWidth: function getWidth() { - return 16; - }, - getVGap: function getVGap() { - return 40; - }, - getHGap: function getHGap() { - return 70; - }, -}; -const defaultProps = { - nodeCfg: { - type: 'organization-card', - size: [100, 44], - style: defaultNodeStyle, - padding: 6, - anchorPoints: [ - [0.5, 0], - [0.5, 1], - ], - nodeStateStyles: defaultStateStyles, - label: { - style: (cfg: Shape | ShapeCfg, group: IGroup | IGraph | undefined, type: string | undefined) => { - const styles = { - icon: { - width: 32, - height: 32, - }, - title: { - fill: '#fff', - }, - name: { - fill: '#000', - }, - }; - return type ? styles[type] : {}; - }, - }, - }, - edgeCfg: { - type: 'polyline', - endArrow: { - type: 'triangle', - fill: '#91d5ff', - }, - edgeStateStyles: defaultStateStyles, - style: { - stroke: '#91d5ff', - }, - }, - behaviors: ['zoom-canvas', 'drag-canvas'], - layout: defaultLayout, - animate: true, - markerPosition: 'right' as 'right', - autoFit: true, - fitCenter: true, - style: { - position: 'relative' as React.CSSProperties['position'], - height: 'inherit', - backgroundColor: '#fff', - }, -}; - -const OrganizationGraph: React.FC = (props) => { - const { uProps } = useProps(props, defaultProps); - const { className, style, loading, loadingTemplate, errorTemplate, ...rest } = uProps; - const { container } = useGraph('TreeGraph', rest, { name: 'OrganizationGraph', bindEvents }); - - return ( - - {loading && } -
- - ); -}; - -export default OrganizationGraph; diff --git a/packages/graphs/src/components/radial-graph/events.ts b/packages/graphs/src/components/radial-graph/events.ts deleted file mode 100644 index 62f9e76b1..000000000 --- a/packages/graphs/src/components/radial-graph/events.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { GraphData } from '@antv/g6'; -import { findIndex } from '@antv/util'; -import { RadialLayout } from '@antv/layout'; -import { ITreeGraph, IG6GraphEvent, INode, NodeConfig, IEdge, FetchLoading } from '../../interface'; -import { radialSectorLayout } from '../../layout'; -import { createFetchLoading, closeFetchLoading } from '../../utils'; - -/** sector layout */ -export const bindRadialExplore = (params: { - graph: ITreeGraph; - asyncData: (nodeCfg: NodeConfig) => GraphData; - layout?: RadialLayout; - fetchLoading?: FetchLoading; -}) => { - const { graph, asyncData, layout: layoutCfg, fetchLoading } = params; - const onDblClick = async (e: IG6GraphEvent) => { - const item = e.item as INode; - const itemModel = item.getModel(); - createFetchLoading(itemModel as NodeConfig, fetchLoading); - const newData = await asyncData(item.getModel() as NodeConfig); - closeFetchLoading(); - const nodes = graph.getNodes(); - const edges = graph.getEdges(); - const { x, y } = itemModel; - const centerNodeId = graph.get('centerNode'); - const centerNode = centerNodeId ? graph.findById(centerNodeId) : nodes[0]; - const { x: centerX, y: centerY } = centerNode.getModel(); - // the max degree about foces(clicked) node in the original data - const pureNodes = newData.nodes.filter( - (item) => findIndex(nodes, (t: INode) => t.getModel().id === item.id) === -1, - ); - const pureEdges = newData.edges.filter( - (item) => - findIndex(edges, (t: IEdge) => { - const { source, target } = t.getModel(); - return source === item.source && target === item.target; - }) === -1, - ); - - // for graph.changeData() - const allNodeModels: GraphData['nodes'] = []; - const allEdgeModels: GraphData['edges'] = []; - pureNodes.forEach((nodeModel) => { - // set the initial positions of the new nodes to the focus(clicked) node - nodeModel.x = itemModel.x; - nodeModel.y = itemModel.y; - graph.addItem('node', nodeModel); - }); - - // add new edges to graph - pureEdges.forEach((em, i) => { - graph.addItem('edge', em); - }); - - edges.forEach((e: IEdge) => { - allEdgeModels.push(e.getModel()); - }); - nodes.forEach((n: INode) => { - allNodeModels.push(n.getModel() as NodeConfig); - }); - // 这里使用了引用类型 - radialSectorLayout({ - center: [centerX, centerY], - eventNodePosition: [x, y], - nodes: nodes.map((n) => n.getModel() as NodeConfig), - layoutNodes: pureNodes, - options: layoutCfg as any, - }); - graph.positionsAnimate(); - graph.data({ - nodes: allNodeModels, - edges: allEdgeModels, - }); - }; - graph.on('node:dblclick', (e: IG6GraphEvent) => { - onDblClick(e); - }); -}; diff --git a/packages/graphs/src/components/radial-graph/index.tsx b/packages/graphs/src/components/radial-graph/index.tsx deleted file mode 100644 index 071730945..000000000 --- a/packages/graphs/src/components/radial-graph/index.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from 'react'; -import { RadialLayout } from '@antv/layout'; -import ErrorBoundary from '../../errorBoundary'; -import useGraph from '../../hooks/useGraphs'; -import useProps from '../../hooks/useProps'; -import { ChartLoading } from '../../utils'; -import { CommonConfig, GraphData, NodeCfg, NodeConfig, FetchLoading } from '../../interface'; -import { defaultFlowGraphAnchorPoints, defaultStateStyles, defaultNodeStyle } from '../../constants'; -import { bindRadialExplore } from './events'; - -export interface RadialGraphConfig extends Omit>, 'data'>, FetchLoading { - data: GraphData; - nodeCfg?: NodeCfg & { - /** 点击展开时异步获取数据 */ - asyncData?: (nodeCfg: NodeConfig) => Promise; - }; -} - -const defaultLayout = { - type: 'radial', - unitRadius: 50, - preventOverlap: true, - maxPreventOverlapIteration: 100, -}; - -const defaultProps = { - nodeCfg: { - type: 'circle', - size: 10, - anchorPoints: defaultFlowGraphAnchorPoints, - linkCenter: true, - nodeStateStyles: defaultStateStyles, - style: defaultNodeStyle, - }, - edgeCfg: { - type: 'line', - edgeStateStyles: defaultStateStyles, - }, - behaviors: ['zoom-canvas', 'drag-canvas'], - layout: defaultLayout, - animate: true, - markerPosition: 'right' as 'right', - autoFit: true, - fitCenter: true, - style: { - position: 'relative' as React.CSSProperties['position'], - height: 'inherit', - backgroundColor: '#fff', - }, -}; - -const RadialGraph: React.FC = (props) => { - const { uProps } = useProps(props, defaultProps); - const { className, style, loading, loadingTemplate, errorTemplate, ...rest } = uProps; - const { container } = useGraph('Graph', rest, { name: 'RadialGraph', bindEvents: bindRadialExplore }); - - return ( - - {loading && } -
- - ); -}; - -export default RadialGraph; diff --git a/packages/graphs/src/components/radial-tree-graph/index.tsx b/packages/graphs/src/components/radial-tree-graph/index.tsx deleted file mode 100644 index 45347e3fa..000000000 --- a/packages/graphs/src/components/radial-tree-graph/index.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import React from 'react'; -import { DendrogramLayout } from '../../layout'; -import ErrorBoundary from '../../errorBoundary'; -import useGraph from '../../hooks/useGraphs'; -import useProps from '../../hooks/useProps'; -import { ChartLoading } from '../../utils'; - -import { CommonConfig, TreeGraphData } from '../../interface'; -import { defaultFlowGraphAnchorPoints, defaultStateStyles, defaultNodeStyle } from '../../constants'; - -export interface RadialTreeGraphConfig extends Omit, 'data'> { - data: TreeGraphData; -} - -const defaultLayout = { - type: 'dendrogram', - direction: 'LR', - nodeSep: 20, - rankSep: 100, - radial: true, -}; - -const defaultProps = { - nodeCfg: { - type: 'circle', - size: 30, - anchorPoints: defaultFlowGraphAnchorPoints, - linkCenter: true, - nodeStateStyles: defaultStateStyles, - style: defaultNodeStyle, - }, - edgeCfg: { - type: 'line', - edgeStateStyles: defaultStateStyles, - }, - behaviors: ['zoom-canvas', 'drag-canvas'], - layout: defaultLayout, - animate: true, - markerPosition: 'right' as 'right', - autoFit: true, - fitCenter: true, - style: { - position: 'relative' as React.CSSProperties['position'], - height: 'inherit', - backgroundColor: '#fff', - }, -}; - -const RadialTreeGraph: React.FC = (props) => { - const { uProps } = useProps(props, defaultProps); - const { className, style, loading, loadingTemplate, errorTemplate, ...rest } = uProps; - const { container } = useGraph('TreeGraph', rest, { name: 'RadialTreeGraph' }); - - return ( - - {loading && } -
- - ); -}; - -export default RadialTreeGraph; diff --git a/packages/graphs/src/constants/event.ts b/packages/graphs/src/constants/event.ts deleted file mode 100644 index 3d1948daf..000000000 --- a/packages/graphs/src/constants/event.ts +++ /dev/null @@ -1 +0,0 @@ -export const MARKER_CLICK = 'marker:click'; diff --git a/packages/graphs/src/constants/index.ts b/packages/graphs/src/constants/index.ts deleted file mode 100644 index a828cac3d..000000000 --- a/packages/graphs/src/constants/index.ts +++ /dev/null @@ -1,73 +0,0 @@ -export { MARKER_CLICK } from './event'; -export const stateColor = '#1890ff'; -// 默认交互状态 -export const defaultStateStyles = { - hover: { - stroke: stateColor, - lineWidth: 2, - }, -}; - -// card 默认节点大小 -export const defaultNodeSize = [120, 40]; - -// 默认节点样式 -export const defaultNodeStyle = { - stroke: '#40a9ff', -}; - -// 默认 anchor 连接点 -export const defaultFlowGraphAnchorPoints = [ - [0, 0.5], - [1, 0.5], -]; - -// card body|footer 默认样式 -export const defaultLabelStyle = { - fill: '#000', - fontSize: 12, -}; -export const defaultLineLabelStyle = { - fill: '#000', - fontSize: 12, - textAlign: 'start', - textBaseline: 'middle', -}; -// 缩略图默认配置 -export const defaultMinimapCfg = { - show: false, - size: [150, 100], - type: 'keyShape', -}; - -// card 默认样式 -export const defaultCardStyle = { - fill: '#fff', - stroke: '#40a9ff', - radius: 2, -}; - -// card 内部 padding | margin | 行间距 -export const defaultMargin = 6; - -// 打标前缀 -export const prefix = 'g'; - -// status bar 的默认宽度 -export const defaultStatusBarWidth = 4; - -export const defaultToolbarStyle = { - position: 'absolute', - right: '12px', - top: '12px', - display: 'flex', - flexDirection: 'column', - padding: '6px', - borderRadius: '2px', - fontSize: '24px', - textAlign: 'center', - lineHeight: '24px', - color: 'rgba(0,0,0,.65)', - backgroundColor: '#fff', - boxShadow: '0 0 3px #ccc', -} as React.CSSProperties; diff --git a/packages/graphs/src/errorBoundary/index.tsx b/packages/graphs/src/errorBoundary/index.tsx deleted file mode 100644 index 318fb852a..000000000 --- a/packages/graphs/src/errorBoundary/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React, { Fragment } from 'react'; - -class ErrorBoundary extends React.Component { - static getDerivedStateFromError(error: Error) { - return { hasError: true, error }; - } - - static getDerivedStateFromProps(nextProps: any, state: any) { - if (state.children !== nextProps.children) { - return { - children: nextProps.children, - hasError: false, - error: undefined, - }; - } - return null; - } - - state: { - hasError: boolean; - error?: Error; - } = { - hasError: false, - }; - - renderError = (e: Error) => { - const { errorTemplate } = this.props; - switch (e) { - default: - if (typeof errorTemplate === 'function') { - return errorTemplate(e); - } - return errorTemplate ? errorTemplate :
组件出错了,请核查后重试: {e.message}
; - } - }; - - render() { - if (this.state.hasError) { - return this.renderError(this.state.error!); - } - return {this.props.children}; - } -} - -export default ErrorBoundary; diff --git a/packages/graphs/src/hooks/useFullscreen.ts b/packages/graphs/src/hooks/useFullscreen.ts deleted file mode 100644 index f60a3d3c5..000000000 --- a/packages/graphs/src/hooks/useFullscreen.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { useEffect, useState } from 'react'; -import { Log } from '../utils'; - -interface FunUseFullscreen { - (el?: HTMLElement | null): [boolean, () => void]; -} - -const useFullscreen: FunUseFullscreen = (el) => { - const [fullscreen, setFullscreen] = useState(false); - const handleFullScreenChange = () => { - // if exit fullscreen - if (!document.fullscreenElement) { - setFullscreen(false); - } - }; - const enterFullscreen = () => { - if (el && el.requestFullscreen) { - el.requestFullscreen() - .then(() => { - setFullscreen(true); - }) - .catch((err) => { - Log.error('requestFullscreen error: ', err); - }); - } - }; - const exitFullscreen = () => { - if (document.exitFullscreen) { - document - .exitFullscreen() - .then(() => { - setFullscreen(false); - }) - .catch((err) => { - Log.error('exitFullscreen error: ', err); - }); - } - }; - - const toggleFullscreen = () => { - // 切换是否全屏 - if (!el) { - Log.error('need dom'); - return; - } - if (!fullscreen) { - enterFullscreen(); - } else { - exitFullscreen(); - } - }; - - useEffect(() => { - // 用户按Esc键退出全屏 或者 退出全屏都会触发这个事件 - document.addEventListener('fullscreenchange', handleFullScreenChange, false); - return () => { - document.removeEventListener('fullscreenchange', handleFullScreenChange); - }; - }, []); - - return [fullscreen, toggleFullscreen]; -}; - -export default useFullscreen; diff --git a/packages/graphs/src/hooks/useGraphs.ts b/packages/graphs/src/hooks/useGraphs.ts deleted file mode 100644 index bc9a2ba18..000000000 --- a/packages/graphs/src/hooks/useGraphs.ts +++ /dev/null @@ -1,438 +0,0 @@ -import G6, { IEdge, INode, ModeType } from '@antv/g6'; -import { isEqual, isObject, isString, omit } from '@antv/util'; -import { useEffect, useRef } from 'react'; -import { ArrowConfig, CardNodeCfg, CommonConfig, EdgeConfig, NodeConfig, StateStyles } from '../interface'; -import { - deepClone, - getAnchorPoints, - getArrowCfg, - getCommonCfg, - getGraphId, - getGraphSize, - getMarkerPosition, - renderGraph, - getCenterNode, - bindStateEvents, - runAsyncEvent, - getRenderData, -} from '../utils'; -import { processMinimap, processTooltip, processMenu, processToolbar } from '../plugins'; -import { setGlobalInstance } from '../utils/global'; - -export default function useGraph( - graphClass: string, - config: any, - extra: { name?: string; bindEvents?: Function } = {}, -) { - const container = useRef(null); - const graphRef = useRef(); - const graphOptions = useRef(); - // data 单独处理,会被 G6 修改 - const graphData = useRef(); - - const { - data, - width, - height, - layout, - minimapCfg, - behaviors, - fitCenter, - nodeCfg, - edgeCfg, - markerCfg, - level, - toolbarCfg, - tooltipCfg, - menuCfg, - customLayout, - } = config; - const graph = graphRef.current; - /** 隐藏孤立边 */ - const setEdgesState = (edges: IEdge[]) => { - edges.forEach((edge: IEdge) => { - const { source, target } = edge.getModel(); - const sourceVisible = graph?.findById(source as string)?.get('visible'); - const targetVisible = graph?.findById(target as string)?.get('visible'); - if (sourceVisible === false || targetVisible === false) { - edge.changeVisibility(false); - } - }); - }; - - const changeData = () => { - if (!graph) return; - let originData = data; - let tagData = originData; - if (level) [originData, tagData] = getRenderData(data, level); - graph.changeData(originData); - graph.get('eventData')?.setData(tagData); - setEdgesState(graph.getEdges()); - if (fitCenter) { - graph.fitCenter(); - } - runAsyncEvent(graph.get('id')); - }; - - const updateLayout = () => { - graph?.updateLayout(layout); - if (fitCenter) { - graph?.fitCenter(); - } - }; - - const updateNodes = () => { - if (!graph) { - return; - } - const { type: nodeType, anchorPoints: nodeAnchorPoints, style: nodeStyle, title: nodeLabelCfg } = nodeCfg ?? {}; - - graph.getNodes().forEach((node: INode) => { - const anchorPoints = getAnchorPoints(nodeAnchorPoints, node.getModel() as NodeConfig); - graph!.updateItem(node, { - nodeCfg, - markerCfg, - type: nodeType, - style: nodeStyle, - anchorPoints, - labelCfg: nodeLabelCfg, - }); - }); - runAsyncEvent(graph.get('id')); - }; - - const updateEdges = () => { - if (!graph) { - return; - } - const { - type: edgeType, - style: edgeStyle, - startArrow: startArrowCfg, - endArrow: endArrowCfg, - label: labelCfg, - } = edgeCfg ?? {}; - graph.getEdges().forEach((edge: IEdge) => { - // 资金流向图&来源去向图 - if (['fund-line', 'labels-line'].includes(edgeType)) { - graph!.updateItem(edge, { - edgeCfg, - }); - } else { - const edgeCfgModel = edge.getModel(); - const startArrow = getArrowCfg(startArrowCfg, edgeCfgModel); - const endArrow = getArrowCfg(endArrowCfg, edgeCfgModel); - const { style, content } = labelCfg ?? {}; - - graph!.updateItem(edge, { - type: edgeType, - label: getCommonCfg(content, edgeCfgModel, graph), - labelCfg: { - style: getCommonCfg(style, edgeCfgModel, graph), - }, - style: { - stroke: '#ccc', - startArrow, - endArrow, - ...(typeof edgeStyle === 'function' ? edgeStyle(edgeCfgModel, graph) : edgeStyle), - }, - }); - } - }); - }; - - // 目前仅支持更新位置 - const updateMarker = () => { - if (!graph) { - return; - } - graph.getNodes().forEach((node: INode) => { - const { position = 'right' } = - typeof markerCfg === 'function' ? markerCfg(node.getModel(), node.get('group')) : markerCfg; - const { width, height } = node.getBBox(); - const markerShape = node - .get('group') - .get('children') - .find((item: INode) => item.get('name') === 'collapse-icon'); - if (markerShape) { - markerShape?.attr({ - ...getMarkerPosition(position, [width, height]), - }); - } - }); - }; - - const getEdgeStateStyles = (edgeStateStyles: StateStyles | undefined) => { - const { name = '' } = extra; - if (name !== 'FundFlowGraph') { - return edgeStateStyles; - } - if (!edgeStateStyles) { - return; - } - const { hover = {} } = edgeStateStyles; - const { endArrow, startArrow } = hover; - if (!endArrow && !startArrow) { - return edgeStateStyles; - } - return { - hover: { - ...hover, - endArrow: endArrow ? getArrowCfg(endArrow as ArrowConfig) : false, - startArrow: startArrow ? getArrowCfg(startArrow as ArrowConfig) : false, - }, - }; - }; - - useEffect(() => { - if (graph && !graph.destroyed) { - if (isEqual(data, graphData.current)) { - return; - } - if (extra.name === 'RadialGraph' && !graphData.current.nodes?.length) { - const centerNode = getCenterNode(data); - graph.set('centerNode', centerNode); - graph.updateLayout({ - ...layout, - focusNode: centerNode, - }); - } else { - changeData(); - } - graphData.current = deepClone(data); - } - }, [data]); - - useEffect(() => { - if (graph && !graph.destroyed) { - if (isEqual(config, graphOptions.current)) { - return; - } - if (!customLayout && !isEqual(layout, graphOptions.current?.layout)) { - updateLayout(); - } - if (!isEqual(minimapCfg, graphOptions.current?.minimapCfg)) { - processMinimap(minimapCfg, graph); - } - if (!isEqual(nodeCfg, graphOptions.current?.nodeCfg)) { - updateNodes(); - } - if (!isEqual(edgeCfg, graphOptions.current?.edgeCfg)) { - updateEdges(); - } - if (!isEqual(markerCfg, graphOptions.current?.markerCfg)) { - updateMarker(); - } - graphOptions.current = config; - } - }, [config]); - - useEffect(() => { - if (graph && !graph.destroyed) { - const graphSize = getGraphSize(width, height, container); - graph.changeSize(graphSize[0], graphSize[1]); - } - }, [container, width, height]); - - useEffect(() => { - if (graph && !graph.destroyed) { - const { default: defaultMode } = graph.get('modes'); - const removingBehaviors: string[] = []; - defaultMode.forEach((be: string | ModeType) => { - if (isObject(be)) { - removingBehaviors.push(be.type); - } else if (isString(be)) { - removingBehaviors.push(be); - } - }); - graph.removeBehaviors(removingBehaviors, 'default'); - graph.addBehaviors(behaviors, 'default'); - } - }, [behaviors]); - - useEffect(() => { - if (container.current && graphClass && !graphRef.current) { - const { name = '', bindEvents } = extra; - const graphSize = getGraphSize(width, height, container); - const { - nodeCfg, - edgeCfg, - behaviors = [], - layout, - animate, - autoFit, - fitCenter, - onReady, - customLayout, - fetchLoading, - } = config; - - const { - type: nodeType, - anchorPoints: nodeAnchorPoints, - nodeStateStyles, - style: nodeStyle, - title: nodeLabelCfg, - linkCenter, - getChildren, - asyncData, - } = nodeCfg ?? {}; - - const { - type: edgeType, - style: edgeStyle, - startArrow: startArrowCfg, - endArrow: endArrowCfg, - label: labelCfg, - edgeStateStyles, - } = edgeCfg ?? {}; - - graphRef.current = new G6[graphClass]({ - container: container.current as any, - width: graphSize[0], - height: graphSize[1], - animate, - linkCenter, - modes: { - default: behaviors, - }, - defaultNode: { - ...nodeCfg, - nodeCfg, - }, - defaultEdge: { - ...omit(edgeCfg, ['label']), - edgeCfg, - labelCfg: labelCfg?.style, - }, - nodeStateStyles, - edgeStateStyles: getEdgeStateStyles(edgeStateStyles), - layout: customLayout ? undefined : layout, - fitView: autoFit, - fitCenter, - extraPlugin: { - getChildren, - fetchLoading, - }, - }); - const graphId = getGraphId(graphRef.current, name); - const graph = graphRef.current; - graph.set('id', graphId); - setGlobalInstance(graphId, graph); - - const customNode = ['fund-card', 'indicator-card', 'file-tree-node', 'organization-card']; - const getLabel = (value: { [key: string]: string } | string): string => { - // 辐射树图 - if (isString(value)) { - return value; - } - if (name === 'FundFlowGraph') { - return value?.text; - } - return value?.title; - }; - // defaultNode 默认只能绑定 plainObject,针对 Function 类型需要通过该模式绑定 - graph.node((node: NodeConfig) => { - if (customNode.includes(nodeType)) { - const anchorPoints = getAnchorPoints(nodeAnchorPoints, node); - node.markerCfg = markerCfg; - node.edgeCfg = edgeCfg; - return { - anchorPoints, - _draggable: behaviors.includes('drag-node'), - _graphId: graphId, - }; - } - const { style } = (nodeLabelCfg ?? {}) as CardNodeCfg; - return { - _graphId: graphId, - label: getLabel(node.value), - labelCfg: { - style: getCommonCfg(style, node, graph), - }, - style: { - stroke: '#ccc', - ...(typeof nodeStyle === 'function' ? nodeStyle(node, graph) : nodeStyle), - }, - }; - }); - - const getEdgeLabel = (edge: EdgeConfig) => { - const { content } = labelCfg ?? {}; - - if (['DecompositionTreeGraph', 'OrganizationGraph', 'RadialTreeGraph'].includes(name)) { - return getCommonCfg(content, edge, graph); - } - if (['FundFlowGraph', 'FlowAnalysisGraph'].includes(name)) { - const { value } = edge; - // @ts-ignore - return typeof value === 'object' ? value?.text : value; - } - return edge.value; - }; - if (!['fund-line', 'labels-line'].includes(edgeType)) { - graph.edge((edge: EdgeConfig) => { - const startArrow = getArrowCfg(startArrowCfg, edge); - const endArrow = getArrowCfg(endArrowCfg, edge); - const { style } = labelCfg ?? {}; - return { - label: getEdgeLabel(edge), - labelCfg: { - style: getCommonCfg(style, edge, graph), - }, - style: { - stroke: '#ccc', - startArrow, - endArrow, - ...(typeof edgeStyle === 'function' ? edgeStyle(edge, graph) : edgeStyle), - }, - }; - }); - } - - bindStateEvents(graph, config); - // 绑定节点辐射事件 - if (name === 'RadialGraph') { - const centerNode = getCenterNode(data); - graph.set('centerNode', centerNode); - } - // 绑定事件 - if (typeof bindEvents === 'function') { - bindEvents({ - graph, - level, - asyncData, - getChildren, - fetchLoading, - layout, - }); - } - renderGraph(graph, data, level); - fitCenter && graph.fitCenter(); - onReady && onReady(graph); - graphData.current = deepClone(data); - } - }, []); - - useEffect(() => { - if (graphRef.current) { - const _graph = graphRef.current; - processMinimap(minimapCfg, _graph); - processTooltip(tooltipCfg, _graph); - processMenu(menuCfg, _graph); - processToolbar(toolbarCfg, _graph, container.current); - } - }, [graphRef, toolbarCfg, tooltipCfg, menuCfg]); - - useEffect(() => { - return () => { - if (graph?.current && !graph.current.destroyed) { - graph.current.destroy(); - } - }; - }, []); - - return { - container, - }; -} diff --git a/packages/graphs/src/hooks/useProps.ts b/packages/graphs/src/hooks/useProps.ts deleted file mode 100644 index c7ead61c3..000000000 --- a/packages/graphs/src/hooks/useProps.ts +++ /dev/null @@ -1,42 +0,0 @@ -// 合并 defaultProps -import { useCallback } from 'react'; -import { getType, deepClone } from '../utils'; -import { CommonConfig } from '../interface'; - -type SpecialKey = 'level'; - -export default function useProps( - props: CommonConfig, - defaultProps: Partial, -): { - uProps: Partial & { [key in SpecialKey]?: number }; -} { - const cloneProps = deepClone(props); - - const mergeProps = useCallback( - (p: Partial, defaultProps: Partial) => { - const config = { - ...defaultProps, - }; - const propsKeys = Object.keys(p); - propsKeys.forEach((key: string) => { - if (getType(p[key]) === 'Object') { - config[key] = { - ...defaultProps[key], - ...p[key], - }; - } else { - config[key] = p[key]; - } - }); - return config; - }, - [props, defaultProps], - ); - - const uProps = mergeProps(cloneProps, defaultProps); - - return { - uProps, - }; -} diff --git a/packages/graphs/src/index.ts b/packages/graphs/src/index.ts deleted file mode 100644 index 0b10ce70e..000000000 --- a/packages/graphs/src/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import G6 from '@antv/g6'; -import OrganizationGraph from './components/organization-graph'; -import type { OrganizationGraphConfig } from './components/organization-graph'; -import RadialTreeGraph from './components/radial-tree-graph'; -import type { RadialTreeGraphConfig } from './components/radial-tree-graph'; -import FlowAnalysisGraph from './components/flow-analysis-graph'; -import type { FlowAnalysisGraphConfig } from './components/flow-analysis-graph'; -import DecompositionTreeGraph from './components/decomposition-tree-graph'; -import type { DecompositionTreeGraphConfig } from './components/decomposition-tree-graph'; -import FundFlowGraph from './components/fund-flow-graph'; -import type { FundFlowGraphConfig } from './components/fund-flow-graph'; -import RadialGraph from './components/radial-graph'; -import type { RadialGraphConfig } from './components/radial-graph'; -import MindMapGraph from './components/mind-map-graph'; -import type { MindMapGraphConfig } from './components/mind-map-graph'; -import FileTreeGraph from './components/file-tree-graph'; -import type { FileTreeGraphConfig } from './components/file-tree-graph'; -import ConversionDagreGraph from './components/conversion-dagre-graph'; - -export { - FlowAnalysisGraph, - RadialTreeGraph, - DecompositionTreeGraph, - OrganizationGraph, - FundFlowGraph, - RadialGraph, - MindMapGraph, - FileTreeGraph, - ConversionDagreGraph, - G6, -}; -export * from './interface'; -export * from './layout'; -export type { - OrganizationGraphConfig, - RadialTreeGraphConfig, - FlowAnalysisGraphConfig, - DecompositionTreeGraphConfig, - FundFlowGraphConfig, - RadialGraphConfig, - MindMapGraphConfig, - FileTreeGraphConfig, -}; diff --git a/packages/graphs/src/interface.ts b/packages/graphs/src/interface.ts deleted file mode 100644 index a84d71e26..000000000 --- a/packages/graphs/src/interface.ts +++ /dev/null @@ -1,379 +0,0 @@ -import { - ArrowConfig as G6ArrowConfig, - Edge, - EdgeConfig as G6EdgeConfig, - Graph, - IEdge, - IG6GraphEvent, - IGraph, - ITreeGraph, - IGroup, - INode, - IPoint, - IShape, - LabelStyle, - ModelConfig, - Node, - NodeConfig as G6NodeConfig, - ShapeStyle, - StateStyles, - TreeGraphData as G6TreeGraphData, - GraphData, - Item, - TreeGraph, -} from '@antv/g6'; - -import { MenuConfig } from './plugins'; - -export interface GraphContainerConfig { - style?: React.CSSProperties; - className?: string; - loading?: boolean; - loadingTemplate?: React.ReactElement; - errorTemplate?: React.ReactNode | ((e: Error) => React.ReactNode); -} -export interface NodeConfig extends G6NodeConfig { - value?: any; -} - -export interface EdgeConfig extends G6EdgeConfig { - value?: T; -} - -export interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -export type Shape = Edge | Node; -export type ShapeCfg = EdgeConfig | NodeConfig; -export type IShapeStyle = - | ShapeStyle - | ((edge: Shape | ShapeCfg, graph: IGraph | IGroup | undefined, name?: string) => ShapeStyle); -export type ILabelStyle = - | LabelStyle - | ((edge: Shape | ShapeCfg, graph: IGraph | IGroup | undefined, name?: string) => LabelStyle); - -export interface FetchLoading { - /** 异步请求时的加载动画,仅在配置了异步请求时生效 */ - fetchLoading?: React.ReactNode | ((item: NodeConfig) => React.ReactNode); -} - -export interface ArrowConfig extends G6ArrowConfig { - /** 是否展示 */ - show?: boolean; - /** 箭头类型 */ - type?: string; - /** 箭头大小 */ - size?: number; -} - -export type IArrowConfig = false | ArrowConfig | ((edge: Shape | ShapeCfg | undefined) => ArrowConfig); - -// 通用节点配置 -export interface NodeCfg extends Omit { - /** 节点类型 */ - type?: string; - /** 节点大小 */ - size?: number | number[]; - /** 节点锚点 */ - anchorPoints?: number[][] | ((node: NodeConfig) => number[][]); - /** 节点样式 */ - style?: IShapeStyle; - /** 节点 label 样式 */ - label?: { - style?: ILabelStyle; - }; - /** 节点状态 */ - nodeStateStyles?: StateStyles; - /** 箭头 是否指向节点中心 */ - linkCenter?: boolean; -} -// 通用边配置 -export interface EdgeCfg { - /** 边类型 */ - type?: string | { text: string; subText?: string }; - /** 边 label 配置 */ - label?: { - /** 仅在树图里面生效 */ - content?: string | ((edge: EdgeCfg) => string); - style?: ILabelStyle; - margin?: number; - }; - /** 起始箭头 */ - startArrow?: IArrowConfig; - /** 结束箭头 */ - endArrow?: IArrowConfig; - /** 边样式 */ - style?: IShapeStyle; - /** 边状态 */ - edgeStateStyles?: StateStyles; -} - -export interface CustomCfg { - /** 横向绘制起始位置 */ - startX?: number; - /** 纵向绘制起始位置 */ - startY?: number; - /** 容器宽度 */ - width?: number; -} - -export interface BadgeCfg { - /** 标记位置 */ - position?: 'left' | 'top' | 'right' | 'bottom'; - /** 标记大小 */ - size?: number | number[]; - /** 标记样式 */ - style?: IShapeStyle; -} - -export interface PercentCfg extends Omit { - /** 标记高度 */ - size?: number; - /** 标记位置 */ - position?: 'top' | 'bottom'; - /** 占比背景色 */ - backgroundStyle?: IShapeStyle; -} - -type PluginContainer = { - /** tooltip css 类名 */ - className?: string; - /** tooltip 容器样式 */ - style?: React.CSSProperties; - /** tooltip 容器,默认和 canvas 使用同一父容器 */ - container?: HTMLDivElement | string | null; - /** 自定义模板 */ - customContent?: (item: T) => React.ReactElement; -}; - -type ToolbarCfgCustomContent = { - zoomIn: () => void; - zoomOut: () => void; - toggleFullscreen: () => void; - fullscreen: boolean; - graph: IGraph; -}; - -export interface ToolbarCfg extends Omit, 'container'> { - /** 是否展示 */ - show?: boolean; - /** 缩放因子 */ - zoomFactor?: number; - /** - * @title renderIcon,自定义渲染 - * @deprecated - */ - renderIcon?: ({ - zoomIn, - zoomOut, - toggleFullscreen, - fullscreen, - graph, - }: ToolbarCfgCustomContent) => React.ReactElement; -} - -// 通用 card 配置 -export interface CardNodeCfg extends NodeCfg { - /** graph id */ - readonly _graphId?: string; - /** graph data */ - readonly graphData?: any; - title?: { - /** title 容器样式 */ - containerStyle?: IShapeStyle; - /** title 样式 */ - style?: ILabelStyle; - /** 是否自动隐藏 */ - autoEllipsis?: boolean; - }; - items?: { - /** items 容器样式 */ - containerStyle?: IShapeStyle; - /** item 样式 */ - style?: ILabelStyle; - /** - * item 布局方式 - * - flex: text、value、icon 均分容器宽度 - * - bundled: text、(value、icon) 均分容器宽度(sort: true 时无效) - * - follow: 从左到右依次排放 - * - */ - layout?: 'bundled' | 'flex' | 'follow'; - /** - * 内容横向间距 - * layout: 'follow' 时生效 - */ - itemSpacing?: number; - /** 是否根据 item 顺序绘制 */ - sort?: boolean; - /** item 容器填充 */ - padding?: number | number[]; - }; - /** card 容器填充 */ - padding?: number | number[]; - /** 节点标记 */ - badge?: BadgeCfg; - /** 占比标记 */ - percent?: PercentCfg; - /** 是否自动调节节点宽度 */ - autoWidth?: boolean; - /** 自定义节点 */ - customContent?: (item: CardItems | OrgItem, group: IGroup | undefined, cfg: CustomCfg) => number; -} - -// 卡片配置 -export interface CardItems { - text: string | number; - value?: string | number; - icon?: string; -} -/** 组织架构图 */ -export type OrgItem = { - name: string; - title?: string; - icon?: string; -}; -export interface NodeData { - id: string; - value: T; - children?: NodeData[]; -} - -export interface EdgeData { - source: string; - target: string; - value?: T; -} -export type MarkerPosition = 'left' | 'right' | 'top' | 'bottom'; -export interface MarkerCfg { - /** 是否展示 */ - show?: boolean; - /** 是否折叠态,推荐使用内置状态 */ - collapsed?: boolean; - position?: MarkerPosition; - style?: ShapeStyle; -} - -export interface TooltipCfg extends PluginContainer { - show?: boolean; - offsetX?: number; - offsetY?: number; - /** 是否展示 */ - shouldBegin?: (evt?: IG6GraphEvent) => boolean; - /** item 类型 ['node','edge'] */ - itemTypes?: string[]; - /** 触发方式 */ - trigger?: 'mouseenter' | 'click'; - /** 固定位置 */ - fixToNode?: [number, number] | undefined; -} - -export type IMarkerCfg = - | MarkerCfg - | MarkerCfg[] - | ((cfg: CardNodeCfg, graph: IGraph | IGroup | undefined) => MarkerCfg | MarkerCfg[]); - -export type Datum = Record; - -// Graph 通用配置 -export interface CommonConfig extends GraphContainerConfig { - data: Datum; - /** 是否缩放节点大小自适应容器 */ - autoFit?: boolean; - /** 是否将图平移到中心位置 */ - fitCenter?: boolean; - width?: number; - height?: number; - pixelRatio?: number; - /** 不同组件 layout 有差别,参考对应组件文档 */ - layout?: T; - /** 边配置 */ - edgeCfg?: EdgeCfg; - /** 节点配置 */ - nodeCfg?: NodeCfg; - /** marker 配置 */ - markerCfg?: IMarkerCfg; - /** 迷你地 */ - minimapCfg?: MiniMapConfig; - /** 交互组件 */ - toolbarCfg?: ToolbarCfg; - /** 提示 */ - tooltipCfg?: TooltipCfg; - /** 右键菜单 */ - menuCfg?: MenuConfig; - /** 交互行为 */ - behaviors?: Array; - /** 是否开启动画 */ - animate?: boolean; - /** - * @title 是否自定义布局 - * @description 开启后,layout 失效,使用 data 里面的 x/y 进行数据布局 - * @example - * ```ts - * { - * id: '-3', - * x: 100, - * y: 100, - * value: { - * title: '来源页面A', - * items: [ - * { - * text: '曝光PV', - * value: '10.30万', - * icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - * }, - * ], - * }, - * }, - * ``` - * @default false - */ - customLayout?: boolean; - /** 图表渲染完成回调 */ - onReady?: (graph: IGraph) => void; -} -export type CardItem = { - title?: string; - items?: CardItems[]; - /** 归一化百分比,仅在 `nodeCfg.percent` 配置时生效 */ - percent?: number; -}; - -export type TreeGraphData = NodeData; -// 流向图节点数据 -export type FlowGraphNodeData = NodeData; -export type FlowGraphEdgeData = EdgeData; - -// 流向图数据 -export interface FlowGraphDatum { - nodes: FlowGraphNodeData[]; - edges: FlowGraphEdgeData[]; -} - -export { - StateStyles, - ShapeStyle, - Node, - Edge, - IGraph, - ITreeGraph, - ModelConfig, - IG6GraphEvent, - IGroup, - LabelStyle, - INode, - IEdge, - Graph, - IPoint, - IShape, - G6TreeGraphData, - GraphData, - Item, - TreeGraph, -}; diff --git a/packages/graphs/src/layout/index.ts b/packages/graphs/src/layout/index.ts deleted file mode 100644 index 8927db7de..000000000 --- a/packages/graphs/src/layout/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -export { radialSectorLayout } from './radial-sector'; -export type { IRadialSectorLayout } from './radial-sector'; - -export type CompactBoxLayout = { - /** 布局方向 */ - direction?: 'LR' | 'RL' | 'TB' | 'BT' | 'H' | 'V'; - /** 节点高度 */ - getHeight?: number | (() => number); - /** 节点宽度 */ - getWidth?: number | (() => number); - /** 每个节点的垂直间隙 */ - getVGap?: number | (() => number); - /** 每个节点的水平间隙 */ - getHGap?: number | (() => number); - /** 是否按照辐射状布局。若 radial 为 true,建议 direction 设置为 'LR' 或 'RL' */ - radial?: boolean; - [key: string]: unknown; -}; -export type DendrogramLayout = { - /** 布局方向 */ - direction?: 'LR' | 'RL' | 'TB' | 'BT' | 'H' | 'V'; - /** 节点间距 */ - nodeSep?: number; - /** 层与层之间的间距 */ - rankSep?: number; - /** 是否按照辐射状布局。若 radial 为 true,建议 direction 设置为 'LR' 或 'RL' */ - radial?: boolean; - [key: string]: unknown; -}; diff --git a/packages/graphs/src/layout/radial-sector.ts b/packages/graphs/src/layout/radial-sector.ts deleted file mode 100644 index 0b25ac301..000000000 --- a/packages/graphs/src/layout/radial-sector.ts +++ /dev/null @@ -1,106 +0,0 @@ -type INode = { - id: string; - x?: number; - y?: number; - layer?: number; - [key: string]: unknown; -}; - -export type IRadialSectorLayout = { - /** 布局中心 [x,y] */ - center: [number, number]; - /** 事件节点坐标 */ - eventNodePosition: [number, number]; - /** 画布当前节点信息,可通过 graph.getNodes().map(n => n.getModel()) 获取 */ - nodes: INode[]; - /** 布局节点,拓展时的新节点,会和当前画布节点做去重处理 */ - layoutNodes: INode[]; - options?: { - /** 圈层半径 */ - unitRadius: number; - /** 节点直径 */ - nodeSize: number; - /** 节点间距 */ - nodeSpacing: number; - }; -}; - -export const radialSectorLayout = (params: IRadialSectorLayout): INode[] => { - const { center, eventNodePosition, nodes: allNodes, layoutNodes, options = {} } = params; - const { unitRadius = 80, nodeSize = 20, nodeSpacing = 10 } = options as IRadialSectorLayout['options']; - - if (!layoutNodes.length) layoutNodes; - - // 过滤已经在画布上的节点 - const pureLayoutNodes = layoutNodes.filter((node) => { - return ( - allNodes.findIndex((n) => { - const { id } = n; - return id === node.id; - }) !== -1 - ); - }); - if (!pureLayoutNodes.length) return layoutNodes; - - const getDistance = (point1: Partial, point2: Partial) => { - const dx = point1.x - point2.x; - const dy = point1.y - point2.y; - return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)); - }; - - // 节点裁剪 - const [centerX, centerY] = center; - const [ex, ey] = eventNodePosition; - const diffX = ex - centerX; - const diffY = ey - centerY; - const allNodePositions: INode[] = []; - allNodes.forEach((n) => { - const { id, x, y } = n; - allNodePositions.push({ - id, - x, - y, - layer: Math.round(getDistance({ x, y }, { x: centerX, y: centerY })) / unitRadius, - }); - }); - - const currentRadius = Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)); - const degree = Math.atan2(diffY, diffX); - let minRadius = currentRadius + unitRadius; - - let pureNodePositions: Partial[] = []; - const getNodesPosition = (nodes: INode[], r: number) => { - const degreeStep = 2 * Math.asin((nodeSize + nodeSpacing) / 2 / r); - pureNodePositions = []; - const l = nodes.length - 1; - nodes.forEach((n, i) => { - n.x = centerX + r * Math.cos(degree + (-l / 2 + i) * degreeStep); - n.y = centerY + r * Math.sin(degree + (-l / 2 + i) * degreeStep); - pureNodePositions.push({ x: n.x as number, y: n.y as number }); - }); - }; - - const checkOverlap = (nodesPosition: INode[], pureNodesPosition: Partial[]) => { - let hasOverlap = false; - const checkLayer = Math.round(minRadius / unitRadius); - const loopNodes = nodesPosition.filter((n) => n.layer === checkLayer); - for (let i = 0; i < loopNodes.length; i++) { - const n = loopNodes[i]; - // 因为是同心圆布局,最先相交的应该是收尾节点 - if ( - getDistance(pureNodesPosition[0], n) < nodeSize || - getDistance(pureNodesPosition[pureNodesPosition.length - 1], n) < nodeSize - ) { - hasOverlap = true; - break; - } - } - return hasOverlap; - }; - getNodesPosition(pureLayoutNodes, minRadius); - while (checkOverlap(allNodePositions, pureNodePositions)) { - minRadius += unitRadius; - getNodesPosition(pureLayoutNodes, minRadius); - } - return layoutNodes; -}; diff --git a/packages/graphs/src/plugins/components/base.ts b/packages/graphs/src/plugins/components/base.ts deleted file mode 100644 index 70d1b0ca3..000000000 --- a/packages/graphs/src/plugins/components/base.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { wrapBehavior, each, deepMix } from '@antv/util'; -import { IAbstractGraph as IGraph, IG6GraphEvent } from '@antv/g6'; - -export interface IPluginBaseConfig { - container?: HTMLDivElement | string | null; - className?: string; - graph?: IGraph; - [key: string]: any; -} - -interface EventMapType { - [key: string]: any; -} - -export default abstract class PluginBase { - private _events: EventMapType; - - public _cfgs: IPluginBaseConfig; - - public destroyed: boolean; - - /** - * 插件基类的构造函数 - * @param cfgs 插件的配置项 - */ - constructor(cfgs?: IPluginBaseConfig) { - this._cfgs = deepMix(this.getDefaultCfgs(), cfgs); - this._events = {}; - this.destroyed = false; - } - - /** - * 获取默认的插件配置 - */ - public getDefaultCfgs() { - return {}; - } - - /** - * 初始化插件 - * @param graph IGraph 实例 - */ - public initPlugin(graph: IGraph) { - const self = this; - self.set('graph', graph); - const events = self.getEvents(); - - const bindEvents: EventMapType = {}; - - each(events, (v, k) => { - const event = wrapBehavior(self, v) as (e: IG6GraphEvent) => void; - bindEvents[k] = event; - graph.on(k, event); - }); - this._events = bindEvents; - - this.init(); - } - - /** - * 初始化方法,供子类实现 - */ - public abstract init(); - - /** - * 获取插件中的事件和事件处理方法,供子类实现 - */ - public getEvents() { - return {}; - } - - /** - * 获取配置项中的某个值 - * @param key 键值 - */ - public get(key: string) { - return this._cfgs?.[key]; - } - - /** - * 将指定的值存储到 cfgs 中 - * @param key 键值 - * @param val 设置的值 - */ - public set(key: string, val: any) { - this._cfgs[key] = val; - } - - /** - * 销毁方法,供子类复写 - */ - public destroy() {} - - /** - * 销毁插件 - */ - public destroyPlugin() { - this.destroy(); - const graph = this.get('graph'); - const events = this._events; - each(events, (v, k) => { - graph.off(k, v); - }); - (this._events as EventMapType | null) = null; - (this._cfgs as IPluginBaseConfig | null) = null; - this.destroyed = true; - } -} diff --git a/packages/graphs/src/plugins/components/menu/index.ts b/packages/graphs/src/plugins/components/menu/index.ts deleted file mode 100644 index 8fa9054a9..000000000 --- a/packages/graphs/src/plugins/components/menu/index.ts +++ /dev/null @@ -1,221 +0,0 @@ -import { modifyCSS, createDom } from '@antv/dom-util'; -import React from 'react'; -import { isString } from '@antv/util'; -import insertCss from 'insert-css'; -import { IAbstractGraph as IGraph, IG6GraphEvent, Item } from '@antv/g6'; -import Base, { IPluginBaseConfig } from '../base'; -import { render } from '../../../utils'; - -typeof document !== 'undefined' && - insertCss(` - .g6-component-contextmenu { - border: 1px solid #e2e2e2; - border-radius: 4px; - font-size: 12px; - color: #545454; - background-color: rgba(255, 255, 255, 0.9); - padding: 10px 8px; - box-shadow: rgb(174, 174, 174) 0px 0px 10px; - } - .g6-contextmenu-ul { - padding: 0; - margin: 0; - list-style: none; - } - -`); - -export interface MenuConfig extends IPluginBaseConfig { - show?: boolean; - handleMenuClick?: (target: HTMLElement, item: Item) => void; - customContent?: (evt?: IG6GraphEvent) => React.ReactNode; - // offsetX 与 offsetY 需要加上父容器的 padding - offsetX?: number; - offsetY?: number; - shouldBegin?: (evt?: IG6GraphEvent) => boolean; - // 允许出现 tooltip 的 item 类型 - itemTypes?: string[]; - trigger?: 'click' | 'contextmenu'; -} - -export default class Menu extends Base { - constructor(config?: MenuConfig) { - super(config); - } - - public getDefaultCfgs(): MenuConfig { - return { - offsetX: 6, - offsetY: 6, - handleMenuClick: undefined, - // 指定菜单内容,function(e) {...} - customContent: (e) => { - return ` -
    -
  • 菜单项1
  • -
  • 菜单项2
  • -
- `; - }, - shouldBegin: (e) => { - return true; - }, - // 菜单隐藏事件 - onHide() { - return true; - }, - itemTypes: ['node', 'edge', 'combo'], - trigger: 'contextmenu', - }; - } - - // class-methods-use-this - public getEvents() { - if (this.get('trigger') === 'click') { - return { - click: 'onMenuShow', - touchend: 'onMenuShow', - }; - } - return { - contextmenu: 'onMenuShow', - }; - } - - public init() { - const className = this.get('className'); - const menu = createDom(`
`); - modifyCSS(menu, { top: '0px', position: 'absolute', visibility: 'hidden' }); - let container: HTMLDivElement | null = this.get('container'); - if (!container) { - container = this.get('graph').get('container'); - } - if (isString(container)) { - container = document.getElementById(container) as HTMLDivElement; - } - - container.appendChild(menu); - - this.set('menu', menu); - } - - protected onMenuShow(e: IG6GraphEvent) { - const self = this; - e.preventDefault(); - - const itemTypes = this.get('itemTypes'); - if (!e.item) { - if (itemTypes.indexOf('canvas') === -1) { - self.onMenuHide(); - return; - } - } else { - if (e.item && e.item.getType && itemTypes.indexOf(e.item.getType()) === -1) { - self.onMenuHide(); - return; - } - } - - const shouldBegin = this.get('shouldBegin'); - if (!shouldBegin(e)) return; - - const menuDom = this.get('menu'); - const customContent = this.get('customContent'); - const graph: IGraph = this.get('graph'); - const menu = customContent(e, graph); - render(menu, menuDom); - // 清除之前监听的事件 - this.removeMenuEventListener(); - - const handleMenuClick = this.get('handleMenuClick'); - if (handleMenuClick) { - const handleMenuClickWrapper = (evt) => { - handleMenuClick(evt.target, e.item, graph); - }; - this.set('handleMenuClickWrapper', handleMenuClickWrapper); - menuDom.addEventListener('click', handleMenuClickWrapper); - } - - const width: number = graph.get('width'); - const height: number = graph.get('height'); - - const bbox = menuDom.getBoundingClientRect(); - - const offsetX = this.get('offsetX') || 0; - const offsetY = this.get('offsetY') || 0; - - const graphTop = graph.getContainer().offsetTop; - const graphLeft = graph.getContainer().offsetLeft; - - let x = e.canvasX + graphLeft + offsetX; - let y = e.canvasY + graphTop + offsetY; - - // when the menu is (part of) out of the canvas - if (x + bbox.width > width) { - x = e.canvasX - bbox.width - offsetX + graphLeft; - } - if (y + bbox.height > height) { - y = e.canvasY - bbox.height - offsetY + graphTop; - } - - modifyCSS(menuDom, { - top: `${y}px`, - left: `${x}px`, - visibility: 'visible', - }); - - // 左键单击会触发 body 上监听的 click 事件,导致菜单展示出来后又立即被隐藏了,需要过滤掉 - let triggeredByFirstClick = this.get('trigger') === 'click'; - const handler = (evt) => { - if (triggeredByFirstClick) { - triggeredByFirstClick = false; - return; - } - self.onMenuHide(); - }; - - // 如果在页面中其他任意地方进行click, 隐去菜单 - document.body.addEventListener('click', handler); - this.set('handler', handler); - } - - private removeMenuEventListener() { - const handleMenuClickWrapper = this.get('handleMenuClickWrapper'); - const handler = this.get('handler'); - - if (handleMenuClickWrapper) { - const menuDom = this.get('menu'); - menuDom.removeEventListener('click', handleMenuClickWrapper); - this.set('handleMenuClickWrapper', null); - } - if (handler) { - document.body.removeEventListener('click', handler); - } - } - - private onMenuHide() { - const menuDom = this.get('menu'); - if (menuDom) { - modifyCSS(menuDom, { visibility: 'hidden' }); - } - - // 隐藏菜单后需要移除事件监听 - this.removeMenuEventListener(); - } - - public destroy() { - const menu = this.get('menu'); - this.removeMenuEventListener(); - - if (menu) { - let container: HTMLDivElement | null = this.get('container'); - if (!container) { - container = this.get('graph').get('container'); - } - if (isString(container)) { - container = document.getElementById(container) as HTMLDivElement; - } - container.removeChild(menu); - } - } -} diff --git a/packages/graphs/src/plugins/components/toolbar/index.tsx b/packages/graphs/src/plugins/components/toolbar/index.tsx deleted file mode 100644 index fb95999ac..000000000 --- a/packages/graphs/src/plugins/components/toolbar/index.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import React, { useEffect, useRef, Fragment } from 'react'; -import useFullscreen from '../../../hooks/useFullscreen'; -import { Graph, ToolbarCfg } from '../../../interface'; - -export interface IToolbar { - toolbarCfg: ToolbarCfg; - graph: Graph; - container: HTMLDivElement | null; -} - -export const Toolbar: React.FC = ({ toolbarCfg, container, graph }) => { - const useGraph = useRef(); - const width = useRef(); - const height = useRef(); - const zoom = useRef(1); - const { zoomFactor = 0.25, renderIcon, customContent } = toolbarCfg; - const [fullscreen, toggleFullscreen] = useFullscreen(container); - // 获取当全屏时的窗口大小 - const getWindow = () => { - return [window.outerWidth, window.outerHeight]; - }; - // 切换全屏时保存 graph 尺寸 - const toggleWidth = (f: boolean) => { - const size = f ? getWindow() : [width.current, height.current]; - useGraph.current?.changeSize(size[0] as number, size[1] as number); - }; - - // 获取缩放中心 - const getCenter = () => { - if (!container) { - return { - x: 0, - y: 0, - }; - } - return { - x: container.clientWidth / 2, - y: container.clientHeight / 2, - }; - }; - - // in 放大 - const zoomIn = () => { - useGraph.current?.zoom(Math.min(zoom.current + zoomFactor, 5), getCenter()); - }; - - // out 缩小 - const zoomOut = () => { - useGraph.current?.zoom(Math.max(zoom.current - zoomFactor, 0.25), getCenter()); - }; - - useEffect(() => { - if (graph) { - useGraph.current = graph; - width.current = container?.clientWidth; - height.current = container?.clientHeight; - } - }, [graph]); - - const setToggleFullscreen = () => { - toggleFullscreen(); - toggleWidth(!document.fullscreenElement); - }; - - const customRender = customContent || renderIcon; - - if (customRender) { - return customRender({ - zoomIn, - zoomOut, - toggleFullscreen: setToggleFullscreen, - fullscreen, - graph, - }); - } - - return ( - - {!fullscreen ? ( - - ☐ - - ) : ( - - ⚄ - - )} - - + - - - - - - - ); -}; diff --git a/packages/graphs/src/plugins/index.ts b/packages/graphs/src/plugins/index.ts deleted file mode 100644 index 3d1ed84b3..000000000 --- a/packages/graphs/src/plugins/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { processMinimap } from './minimap'; -export { processTooltip } from './tooltip'; -export { processMenu } from './menu'; -export { processToolbar } from './toolbar'; -export type { MenuConfig } from './components/menu'; diff --git a/packages/graphs/src/plugins/menu.ts b/packages/graphs/src/plugins/menu.ts deleted file mode 100644 index aa2073273..000000000 --- a/packages/graphs/src/plugins/menu.ts +++ /dev/null @@ -1,26 +0,0 @@ -import G6 from '@antv/g6'; -import Menu from './components/menu'; -import type { MenuConfig } from './components/menu'; -import { Graph } from '../interface'; - -export const processMenu = (cfg: MenuConfig = {}, graph: Graph): void => { - if (!graph || graph.destroyed) { - return; - } - // 兼容旧逻辑 - const [pluginMenu] = graph.get('plugins').filter((plugin) => plugin.get('name') === 'menu'); - if (pluginMenu) { - graph.removePlugin(pluginMenu); - } - if (cfg.show || cfg.show === undefined) { - const menu = new Menu({ - offsetX: 16 + 10, - offsetY: 0, - itemTypes: ['node'], - ...cfg, - name: 'menu', - }); - - graph.addPlugin(menu as any); - } -}; diff --git a/packages/graphs/src/plugins/minimap.ts b/packages/graphs/src/plugins/minimap.ts deleted file mode 100644 index 1eeeb36c7..000000000 --- a/packages/graphs/src/plugins/minimap.ts +++ /dev/null @@ -1,22 +0,0 @@ -import G6 from '@antv/g6'; -import { defaultMinimapCfg } from '../constants'; -import { MiniMapConfig, Graph, TreeGraph } from '../interface'; - -export const processMinimap = (cfg: MiniMapConfig | undefined = {}, graph: Graph | TreeGraph): void => { - if (!graph || graph.destroyed) { - return; - } - const [pluginMinimap] = graph.get('plugins').filter((plugin) => plugin.get('name') === 'minimap'); - if (pluginMinimap) { - graph.removePlugin(pluginMinimap); - } - if (cfg.show) { - const curMminimapCfg = Object.assign(defaultMinimapCfg, cfg); - const minimap = new G6.Minimap({ - ...curMminimapCfg, - name: 'minimap', - }); - - graph.addPlugin(minimap); - } -}; diff --git a/packages/graphs/src/plugins/toolbar.tsx b/packages/graphs/src/plugins/toolbar.tsx deleted file mode 100644 index 24e1e3ec7..000000000 --- a/packages/graphs/src/plugins/toolbar.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; -import { defaultToolbarStyle } from '../constants'; -import { ToolbarCfg, Graph } from '../interface'; -import { Toolbar } from './components/toolbar'; -import { createNode } from '../utils'; - -export const processToolbar = (cfg: ToolbarCfg = {}, graph: Graph, container: HTMLDivElement): void => { - const { show, className, style, ...rest } = cfg; - const graphId = graph?.get('id'); - if (!graph || graph.destroyed) { - return; - } - const toolbarId = `${graphId}-toolbar`; - const exist = document.querySelector(`#${toolbarId}`); - if (exist) { - exist.parentNode?.removeChild(exist); - } - if (show) { - const mountPoint = createNode( - , - { - className: className ?? 'charts-toolbar', - id: toolbarId, - }, - { - ...defaultToolbarStyle, - ...style, - }, - ); - // @ts-ignore - container.appendChild(mountPoint); - } -}; diff --git a/packages/graphs/src/plugins/tooltip.ts b/packages/graphs/src/plugins/tooltip.ts deleted file mode 100644 index 19df56fc3..000000000 --- a/packages/graphs/src/plugins/tooltip.ts +++ /dev/null @@ -1,34 +0,0 @@ -import G6, { Tooltip } from '@antv/g6'; -import { isFunction } from '@antv/util'; -import { TooltipCfg, Graph } from '../interface'; -import { createNode } from '../utils'; - -export const processTooltip = (cfg: TooltipCfg = {}, graph: Graph): void => { - if (!graph || graph.destroyed) { - return; - } - const [pluginTooltip] = graph.get('plugins').filter((plugin) => plugin.get('name') === 'tooltip'); - if (pluginTooltip) { - graph.removePlugin(pluginTooltip); - } - // 兼容旧数据 - if (cfg.show || (cfg.show === undefined && Object.keys(cfg).length > 0)) { - const { customContent, ...rest } = cfg; - const tooltip = new G6.Tooltip({ - offsetX: 10, - offsetY: 20, - itemTypes: ['node'], - ...rest, - getContent(e) { - return isFunction(customContent) - ? createNode(customContent(e.item.getModel()), { - className: 'g6-tooltip', - }) - : ''; - }, - name: 'tooltip', - }); - - graph.addPlugin(tooltip); - } -}; diff --git a/packages/graphs/src/utils/async-events.ts b/packages/graphs/src/utils/async-events.ts deleted file mode 100644 index 966f3672f..000000000 --- a/packages/graphs/src/utils/async-events.ts +++ /dev/null @@ -1,19 +0,0 @@ -const EventMap = new Map(); - -export const pushAsyncEvent = (eventId: string, event: Function) => { - let events = EventMap.get(eventId); - if (!events) { - events = [event]; - } else { - events.push(event); - } - EventMap.set(eventId, events); -}; - -export const runAsyncEvent = (eventId: string) => { - let events = EventMap.get(eventId) || []; - events.forEach(function (event) { - if (typeof event === 'function') event.apply(null, arguments); - }); - EventMap.set(eventId, []); -}; diff --git a/packages/graphs/src/utils/chart-loading.tsx b/packages/graphs/src/utils/chart-loading.tsx deleted file mode 100644 index 1c2030f49..000000000 --- a/packages/graphs/src/utils/chart-loading.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react'; -import ContentLoader from 'react-content-loader'; - -interface Props { - loadingTemplate?: React.ReactElement; -} - -export const ChartLoading = ({ loadingTemplate }: Props) => { - const renderLoading = () => { - if (loadingTemplate) { - return loadingTemplate; - } - return ( - - - - - - - - - - - - - ); - }; - - return ( -
- {renderLoading()} -
- ); -}; diff --git a/packages/graphs/src/utils/clone-besides-img.ts b/packages/graphs/src/utils/clone-besides-img.ts deleted file mode 100644 index fe3e7a7b3..000000000 --- a/packages/graphs/src/utils/clone-besides-img.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { isObject, isString, clone } from '@antv/util'; - -export const cloneBesidesImg = (obj: any) => { - const clonedObj = {}; - Object.keys(obj).forEach((key1) => { - const obj2 = obj[key1]; - if (isObject(obj2)) { - const clonedObj2 = {}; - Object.keys(obj2).forEach((key2) => { - const v = obj2[key2]; - if (key2 === 'img' && !isString(v)) return; - clonedObj2[key2] = clone(v); - }); - clonedObj[key1] = clonedObj2; - } else { - clonedObj[key1] = clone(obj2); - } - }); - return clonedObj; -}; diff --git a/packages/graphs/src/utils/close-fetch-loading.ts b/packages/graphs/src/utils/close-fetch-loading.ts deleted file mode 100644 index be66de681..000000000 --- a/packages/graphs/src/utils/close-fetch-loading.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { prefix } from '../constants'; -/** 关闭加载动画 */ -export const closeFetchLoading = () => { - const hideContainer = document.getElementsByClassName(`${prefix}-antd-loading`); - Array.from(hideContainer).forEach((el) => { - document.body.removeChild(el); - }); -}; diff --git a/packages/graphs/src/utils/count-by.ts b/packages/graphs/src/utils/count-by.ts deleted file mode 100644 index ccdd88a98..000000000 --- a/packages/graphs/src/utils/count-by.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { reduce } from '@antv/util'; -/** - * From lodash - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the number of times the key was returned by `iteratee`. The - * iteratee is invoked with one argument: (value). - * - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * const users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'betty', 'active': true }, - * { 'user': 'fred', 'active': false } - * ] - * - * countBy(users, value => value.active); - * // => { 'true': 2, 'false': 1 } - */ -export const countBy = (collection: Array, iteratee?: Function) => { - return reduce( - collection, - (result, value, key) => { - key = iteratee ? iteratee(value) : value; - if (result.hasOwnProperty(key)) { - ++result[key]; - } else { - result[key] = 1; - } - return result; - }, - {}, - ); -}; diff --git a/packages/graphs/src/utils/create-fetch-loading.ts b/packages/graphs/src/utils/create-fetch-loading.ts deleted file mode 100644 index c1a0d6072..000000000 --- a/packages/graphs/src/utils/create-fetch-loading.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { isFunction } from '@antv/util'; -import { NodeConfig, FetchLoading } from '../interface'; -import { prefix } from '../constants'; -import { createNode } from './create-node'; -import { setStyles } from './set-styles'; - -/** 开启加载动画, 不支持同时存在多个 */ -export const createFetchLoading = (node: NodeConfig, fetchLoading: FetchLoading) => { - const loadingClassName = `${prefix}-antd-loading`; - if (fetchLoading) { - const loadingTemplate = isFunction(fetchLoading) ? fetchLoading(node) : fetchLoading; - document.body.appendChild( - createNode(loadingTemplate, { - className: loadingClassName, - }), - ); - } else { - const container = document.createElement('div'); - container.className = loadingClassName; - const styles = { - position: 'fixed' as 'fixed', - left: '0', - top: '0', - width: '100vw', - height: '100vh', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - background: 'rgba(0,0,0, 0.25)', - color: '#fff', - fontSize: '16px', - zIndex: 999, - }; - setStyles(container, styles); - const span = document.createElement('span'); - span.innerText = 'loading...'; - container.appendChild(span); - document.body.appendChild(container); - } -}; diff --git a/packages/graphs/src/utils/create-marker.ts b/packages/graphs/src/utils/create-marker.ts deleted file mode 100644 index 4535eb00e..000000000 --- a/packages/graphs/src/utils/create-marker.ts +++ /dev/null @@ -1,25 +0,0 @@ -import G6 from '@antv/g6'; -import { IGroup, MarkerCfg } from '../interface'; -import { defaultCardStyle } from '../constants'; -import { getMarkerPosition } from './get-marker-position'; - -export const createMarker = (cfg: MarkerCfg, group: IGroup | undefined, size: number[], suffix?: boolean) => { - const { show, position, collapsed, style } = cfg; - if (show) { - group!.addShape('marker', { - attrs: { - ...getMarkerPosition(position, size), - r: 6, - cursor: 'pointer', - symbol: collapsed ? G6.Marker.expand : G6.Marker.collapse, - stroke: defaultCardStyle.stroke, - lineWidth: 1, - fill: '#fff', - ...style, - }, - defaultCollapsed: false, - name: suffix ? `collapse-icon-${position}` : 'collapse-icon', - position: position, - }); - } -}; diff --git a/packages/graphs/src/utils/create-node.ts b/packages/graphs/src/utils/create-node.ts deleted file mode 100644 index cae2ff867..000000000 --- a/packages/graphs/src/utils/create-node.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { render } from './render'; -import { setStyles } from './set-styles'; - -export const createNode = (children: React.ReactNode, attrs: object = {}, styles?: React.CSSProperties) => { - const mountPoint = document.createElement('div'); - Object.keys(attrs).forEach((key) => { - mountPoint[key] = attrs[key]; - }); - if (styles) { - setStyles(mountPoint, styles); - } - render(children as React.ReactElement, mountPoint); - return mountPoint; -}; diff --git a/packages/graphs/src/utils/deep-clone.ts b/packages/graphs/src/utils/deep-clone.ts deleted file mode 100644 index 3124affcb..000000000 --- a/packages/graphs/src/utils/deep-clone.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * 深克隆 - * @param source 要深克隆的目标对象 - */ -export const deepClone = (source: Object | undefined) => { - if (!source || typeof source !== 'object') { - return source; - } - - let target; - if (Array.isArray(source)) { - target = source.map((item) => deepClone(item)); - } else if (source instanceof HTMLElement) { - target = source; - } else { - target = {}; - Object.keys(source).forEach((key) => { - return (target[key] = deepClone(source[key])); - }); - } - - return target; -}; diff --git a/packages/graphs/src/utils/event-data.ts b/packages/graphs/src/utils/event-data.ts deleted file mode 100644 index e4a9ff880..000000000 --- a/packages/graphs/src/utils/event-data.ts +++ /dev/null @@ -1,13 +0,0 @@ -type Datum = any; -export default class EventData { - data: Datum; - constructor(data?: Datum) { - data && this.setData(data); - } - getData(): Datum { - return this.data; - } - setData(data: Datum) { - this.data = data; - } -} diff --git a/packages/graphs/src/utils/get-anchor-points.ts b/packages/graphs/src/utils/get-anchor-points.ts deleted file mode 100644 index df1d26604..000000000 --- a/packages/graphs/src/utils/get-anchor-points.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defaultFlowGraphAnchorPoints } from '../constants'; -import { NodeConfig } from '../interface'; -/** 支持自定义 anchor */ -export const getAnchorPoints = (anchorPoints: ((node: NodeConfig) => number[][]) | number[][], node?: NodeConfig) => { - if (typeof anchorPoints === 'function' && node) { - return anchorPoints(node) || {}; - } - if (Array.isArray(anchorPoints)) { - return anchorPoints; - } - return defaultFlowGraphAnchorPoints; -}; diff --git a/packages/graphs/src/utils/get-arrow-cfg.ts b/packages/graphs/src/utils/get-arrow-cfg.ts deleted file mode 100644 index 5719fe721..000000000 --- a/packages/graphs/src/utils/get-arrow-cfg.ts +++ /dev/null @@ -1,29 +0,0 @@ -import G6 from '@antv/g6'; -import { IArrowConfig, EdgeConfig } from '../interface'; - -// 默认箭头样式 -export const getArrowCfg = ( - arrowCfg: IArrowConfig | undefined, - edge?: EdgeConfig< - | string - | { - text?: string; - subText?: string; - } - >, -) => { - if (!arrowCfg) { - return; - } - if (typeof arrowCfg === 'object' && arrowCfg?.show === false) { - return; - } - const cfg = typeof arrowCfg === 'function' ? arrowCfg(edge) : arrowCfg; - const { type = 'vee', d = 0, size = 10 } = cfg; - return { - path: G6.Arrow[type](size, size, d), - fill: '#ccc', - d, - ...cfg, - }; -}; diff --git a/packages/graphs/src/utils/get-center-node.ts b/packages/graphs/src/utils/get-center-node.ts deleted file mode 100644 index c9d2cc385..000000000 --- a/packages/graphs/src/utils/get-center-node.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { countBy } from './count-by'; -import { GraphData } from '../interface'; - -export const getCenterNode = (data: GraphData) => { - const { nodes, edges } = data; - if (nodes.length === 1) { - return nodes[0].id; - } - const linkCount: string[] = []; - edges.forEach((item) => { - linkCount.push(item.source); - }); - const timesObj = countBy(linkCount); - let maxTimes = 0; - let maxTimeKey = ''; - for (let k in timesObj) { - if (timesObj.hasOwnProperty(k) && timesObj[k] > maxTimes) { - maxTimes = timesObj[k]; - maxTimeKey = k; - } - } - return maxTimeKey; -}; diff --git a/packages/graphs/src/utils/get-children-data.ts b/packages/graphs/src/utils/get-children-data.ts deleted file mode 100644 index 7fa4155d7..000000000 --- a/packages/graphs/src/utils/get-children-data.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Datum } from '../interface'; - -/** - * get children - * 获取相关路径下的一级节点 - */ -export const getChildrenData = (data: Datum, currentPath: string = ''): Datum => { - // 打标时已经做了编码,这直接取值即可 - const path = currentPath.split('-'); - path.shift(); // 根节点没有 path - let current = data; - path.forEach((childrenIndex: string) => { - if (!current) return; - current = current.children[Number(childrenIndex)]; - }); - if (!current?.children) { - return []; - } - return current.children.map((item: Datum) => ({ - ...item, - children: [], - })); -}; diff --git a/packages/graphs/src/utils/get-common-cfg.ts b/packages/graphs/src/utils/get-common-cfg.ts deleted file mode 100644 index 97252e282..000000000 --- a/packages/graphs/src/utils/get-common-cfg.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { IGraph, IGroup, EdgeConfig, NodeConfig, TreeGraph } from '../interface'; - -// 统一处理 config,支持回调 -export const getCommonCfg = ( - cfg: unknown, - item: - | EdgeConfig< - | string - | { - text?: string; - subText?: string; - } - > - | NodeConfig - | undefined, - graph?: IGraph | IGroup | TreeGraph | undefined, -) => { - if (typeof cfg === 'function') { - return cfg(item, graph); - } - return cfg; -}; diff --git a/packages/graphs/src/utils/get-css-padding.ts b/packages/graphs/src/utils/get-css-padding.ts deleted file mode 100644 index 1d869aaf3..000000000 --- a/packages/graphs/src/utils/get-css-padding.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * padding | margin 按 CSS 规则转换 - */ -export const getCssPadding = (padding: number | number[]) => { - if (typeof padding === 'number') { - return [padding, padding, padding, padding]; - } - let result: number[] = []; - switch (padding.length) { - case 1: - result = [padding[0], padding[0], padding[0], padding[0]]; - break; - case 2: - result = [padding[0], padding[1], padding[0], padding[1]]; - break; - case 3: - result = [padding[0], padding[1], padding[2], padding[1]]; - break; - case 4: - result = padding; - break; - default: - break; - } - return result; -}; diff --git a/packages/graphs/src/utils/get-flow-level-data.ts b/packages/graphs/src/utils/get-flow-level-data.ts deleted file mode 100644 index c4aa6c71f..000000000 --- a/packages/graphs/src/utils/get-flow-level-data.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { prefix } from '../constants'; -import { FlowGraphDatum } from '../interface'; - -/** - * 根据 level 获取相关数据 - */ -export const getFlowLevelData = (data: FlowGraphDatum, level: number): FlowGraphDatum => { - const { nodes, edges } = data; - if (level <= 0) { - return data; - } - - const levelNodes = nodes.filter((item) => !item.hasOwnProperty(`${prefix}_level`) || item[`${prefix}_level`] < level); - - return { - nodes: levelNodes, - edges: edges.filter((item) => { - const { source, target } = item; - return levelNodes.filter((n) => [source, target].includes(n.id)).length >= 2; - }), - }; -}; diff --git a/packages/graphs/src/utils/get-graph-id.ts b/packages/graphs/src/utils/get-graph-id.ts deleted file mode 100644 index 770a6b030..000000000 --- a/packages/graphs/src/utils/get-graph-id.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { uuid } from './uuid'; -// 同一页面存在多 graph 时需要指定 graphId -export const getGraphId = (graph: { current?: string }, name: string) => { - if (graph.current) { - return graph.current; - } - graph.current = `${name}-graph-${uuid()}`; - return graph.current; -}; diff --git a/packages/graphs/src/utils/get-graph-size.ts b/packages/graphs/src/utils/get-graph-size.ts deleted file mode 100644 index bdf18ea05..000000000 --- a/packages/graphs/src/utils/get-graph-size.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Log } from './log'; - -export const getGraphSize = ( - width: number | undefined, - height: number | undefined, - container: React.RefObject, -): number[] => { - let CANVAS_WIDTH; - let CANVAS_HEIGHT; - if (container && container.current) { - CANVAS_WIDTH = container.current.offsetWidth; - CANVAS_HEIGHT = container.current.offsetHeight || 500; - } - if ((!width && !CANVAS_WIDTH) || (!height && !CANVAS_HEIGHT)) { - Log.warn('请为 Graph 指定 width 与 height!否则将使用默认值 500 * 500'); - return [500, 500]; - } - - return [width || CANVAS_WIDTH || 500, height || CANVAS_HEIGHT || 500]; -}; diff --git a/packages/graphs/src/utils/get-marker-position.ts b/packages/graphs/src/utils/get-marker-position.ts deleted file mode 100644 index f7b4f821f..000000000 --- a/packages/graphs/src/utils/get-marker-position.ts +++ /dev/null @@ -1,25 +0,0 @@ -export const getMarkerPosition = (direction: string = 'right', size: number[]) => { - const [width, height] = size; - let x = 0; - let y = 0; - switch (direction) { - case 'top': - x = width / 2; - y = 0; - break; - case 'right': - x = width; - y = height / 2; - break; - case 'bottom': - x = width / 2; - y = height; - break; - case 'left': - x = 0; - y = height / 2; - break; - } - - return { x, y }; -}; diff --git a/packages/graphs/src/utils/get-parent-children.ts b/packages/graphs/src/utils/get-parent-children.ts deleted file mode 100644 index 74cda0c95..000000000 --- a/packages/graphs/src/utils/get-parent-children.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Datum } from '../interface'; -/** - * 将查询到的节点挂载到当前图数据上 - */ -export const setParentChildren = (parendData: Datum, currentPath: string, children: Datum[]): Datum => { - const path = currentPath.split('-'); - path.shift(); - let current = parendData; - path.forEach((childrenIndex: string) => { - current = current.children[Number(childrenIndex)]; - }); - current.children = children; - return parendData; -}; diff --git a/packages/graphs/src/utils/get-size.ts b/packages/graphs/src/utils/get-size.ts deleted file mode 100644 index 32fcc3776..000000000 --- a/packages/graphs/src/utils/get-size.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defaultNodeSize } from '../constants'; - -export const getSize = (size: number | number[] | undefined) => { - if (Array.isArray(size)) { - return size; - } - return size ? [size, size] : defaultNodeSize; -}; diff --git a/packages/graphs/src/utils/get-status-bbox.ts b/packages/graphs/src/utils/get-status-bbox.ts deleted file mode 100644 index febc6dc5e..000000000 --- a/packages/graphs/src/utils/get-status-bbox.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { CardNodeCfg } from '../interface'; -import { getSize } from './get-size'; -import { defaultStatusBarWidth } from '../constants'; - -/** - * card status 对布局的影响,直接加到 padding 中 - */ -export const getStatusBBox = (cfg: CardNodeCfg['badge'] | undefined) => { - if (!cfg) { - return [0, 0, 0, 0]; - } - const { size = [], position = 'left' } = cfg; - const [width, height] = getSize(size); - const appendPadding: number[] = []; - switch (position) { - case 'top': - appendPadding.push(height ?? defaultStatusBarWidth, 0, 0, 0); - break; - case 'right': - appendPadding.push(0, width ?? defaultStatusBarWidth, 0, 0); - break; - case 'bottom': - appendPadding.push(0, 0, height ?? defaultStatusBarWidth, 0); - break; - case 'left': - appendPadding.push(0, 0, 0, width ?? defaultStatusBarWidth); - break; - } - return appendPadding; -}; diff --git a/packages/graphs/src/utils/get-status-cfg.ts b/packages/graphs/src/utils/get-status-cfg.ts deleted file mode 100644 index b8fd383f5..000000000 --- a/packages/graphs/src/utils/get-status-cfg.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { CardNodeCfg } from '../interface'; -import { getSize } from './get-size'; -import { defaultStatusBarWidth } from '../constants'; -import { isNumber } from '@antv/util'; - -export const getStatusCfg = (cfg: CardNodeCfg['badge'], cardSize: [number, number]) => { - const { size = [], position = 'left' } = cfg ?? {}; - const [width, height] = getSize(size); - const [cardWidth, cardHeight] = cardSize; - let x = 0; - let y = 0; - let w = 0; - let h = 0; - switch (position) { - case 'top': - x = 0; - y = 0; - w = width ?? cardWidth; - h = height ?? defaultStatusBarWidth; - break; - case 'left': - x = 0; - y = 0; - w = width ?? defaultStatusBarWidth; - h = height ?? cardHeight; - break; - case 'right': - x = cardWidth - (isNumber(width) ? width : defaultStatusBarWidth); - y = 0; - w = width ?? defaultStatusBarWidth; - h = height ?? cardHeight; - break; - case 'bottom': - x = 0; - y = cardHeight - (isNumber(height) ? height : defaultStatusBarWidth); - w = width ?? cardWidth; - h = height ?? defaultStatusBarWidth; - break; - } - - return { - x, - y, - width: w, - height: h, - }; -}; diff --git a/packages/graphs/src/utils/get-style.ts b/packages/graphs/src/utils/get-style.ts deleted file mode 100644 index 82f6f4e3c..000000000 --- a/packages/graphs/src/utils/get-style.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CardNodeCfg, ModelConfig, IGroup, Item } from '../interface'; - -// 统一处理 config,支持回调 -export const getStyle = ( - source: unknown, - cfg: CardNodeCfg | ModelConfig, - item?: IGroup | Item, - current?: string | number, -) => { - if (typeof source === 'function') { - return source(cfg, item, current) || {}; - } - return source || {}; -}; diff --git a/packages/graphs/src/utils/get-tree-level-data.ts b/packages/graphs/src/utils/get-tree-level-data.ts deleted file mode 100644 index 1e47535f4..000000000 --- a/packages/graphs/src/utils/get-tree-level-data.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Datum } from '../interface'; - -/** - * 根据 level 获取相关数据 - */ -export const getTreeLevelData = (data: Datum, level: number): Datum => { - const { children = [], g_level = 0 } = data; - if (level <= 0) { - return data; - } - return { - ...data, - children: - g_level + 1 < level - ? children?.map((item: Datum) => { - return getTreeLevelData(item, level); - }) - : [], - }; -}; diff --git a/packages/graphs/src/utils/get-type.ts b/packages/graphs/src/utils/get-type.ts deleted file mode 100644 index 65543bdb5..000000000 --- a/packages/graphs/src/utils/get-type.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const getType = (n: Object) => { - return Object.prototype.toString.call(n).slice(8, -1); -}; diff --git a/packages/graphs/src/utils/global.ts b/packages/graphs/src/utils/global.ts deleted file mode 100644 index ff64efe82..000000000 --- a/packages/graphs/src/utils/global.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Graph } from '@antv/g6'; - -export const globalInstance = {}; - -export const setGlobalInstance = (instanceId: string, graph: Graph) => { - globalInstance[instanceId] = graph; -}; -export const getGlobalInstance = (instanceId: string) => { - return globalInstance[instanceId]; -}; diff --git a/packages/graphs/src/utils/index.ts b/packages/graphs/src/utils/index.ts deleted file mode 100644 index 2e666b5aa..000000000 --- a/packages/graphs/src/utils/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -export { cloneBesidesImg } from './clone-besides-img'; -export { createMarker } from './create-marker'; -export { getArrowCfg } from './get-arrow-cfg'; -export { getCssPadding } from './get-css-padding'; -export { getStatusBBox } from './get-status-bbox'; -export { getStatusCfg } from './get-status-cfg'; -export { setEllipsis } from './set-ellipsis'; -export { getChildrenData } from './get-children-data'; -export { getStyle } from './get-style'; -export { bindStateEvents } from './state-events'; -export { deepClone } from './deep-clone'; -export { getAnchorPoints } from './get-anchor-points'; -export { getCommonCfg } from './get-common-cfg'; -export { getGraphId } from './get-graph-id'; -export { getGraphSize } from './get-graph-size'; -export { getTreeLevelData } from './get-tree-level-data'; -export { getFlowLevelData } from './get-flow-level-data'; -export { getMarkerPosition } from './get-marker-position'; -export { renderGraph, getRenderData } from './render-graph'; -export { setTreeTag } from './set-tree-tag'; -export { setFlowTag } from './set-flow-tag'; -export { getCenterNode } from './get-center-node'; -export { getSize } from './get-size'; -export { setStyles } from './set-styles'; -export { Log } from './log'; -export { getType } from './get-type'; -export { countBy } from './count-by'; -export { isType } from './is-type'; -export { render, unmount } from './render'; -export { createFetchLoading } from './create-fetch-loading'; -export { closeFetchLoading } from './close-fetch-loading'; -export { getGlobalInstance, setGlobalInstance } from './global'; -export { pushAsyncEvent, runAsyncEvent } from './async-events'; -export { createNode } from './create-node'; -export { ChartLoading } from './chart-loading'; -import EventData from './event-data'; -export { setLevelData } from './set-level-data'; -export { EventData }; diff --git a/packages/graphs/src/utils/is-type.ts b/packages/graphs/src/utils/is-type.ts deleted file mode 100644 index 3c1bce65a..000000000 --- a/packages/graphs/src/utils/is-type.ts +++ /dev/null @@ -1,5 +0,0 @@ -// 类型检测 -export const isType = (value: any, type: string): boolean => { - const { toString } = {}; - return toString.call(value) === `[object ${type}]`; -}; diff --git a/packages/graphs/src/utils/log.ts b/packages/graphs/src/utils/log.ts deleted file mode 100644 index 5681f6914..000000000 --- a/packages/graphs/src/utils/log.ts +++ /dev/null @@ -1 +0,0 @@ -export const Log = window.console; diff --git a/packages/graphs/src/utils/render-graph.ts b/packages/graphs/src/utils/render-graph.ts deleted file mode 100644 index 114b9a27d..000000000 --- a/packages/graphs/src/utils/render-graph.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { IGraph, FlowGraphDatum, TreeGraphData } from '../interface'; -import EventData from './event-data'; -import { deepClone } from './deep-clone'; -import { setTreeTag, setFlowTag, getFlowLevelData, getTreeLevelData } from './'; -import { runAsyncEvent } from './async-events'; - -const isFlowData = (data) => data?.nodes instanceof Array && data?.edges instanceof Array; - -export const getRenderData = (data: FlowGraphDatum | TreeGraphData, level?: number) => { - let originData = deepClone(data); - let tagData = originData; - if (level) { - if (isFlowData(data)) { - tagData = setFlowTag(data as FlowGraphDatum, level); - originData = getFlowLevelData(tagData, level); - } else { - // is tree data - tagData = setTreeTag(data as TreeGraphData); - originData = getTreeLevelData(tagData, level); - } - } - return [originData, tagData]; -}; - -export const renderGraph = (graph: IGraph, data: any, level?: number) => { - const [originData, tagData] = getRenderData(data, level); - graph.data(originData); - graph.set('eventData', new EventData(tagData)); - graph.render(); - // 关闭局部刷新,各种 bug - graph.get('canvas').set('localRefresh', false); - runAsyncEvent(graph.get('id')); -}; diff --git a/packages/graphs/src/utils/render.ts b/packages/graphs/src/utils/render.ts deleted file mode 100644 index db0eecbf6..000000000 --- a/packages/graphs/src/utils/render.ts +++ /dev/null @@ -1,105 +0,0 @@ -import type * as React from 'react'; -import * as ReactDOM from 'react-dom'; -import type { Root } from 'react-dom/client'; - -// Let compiler not to search module usage -const fullClone = { - ...ReactDOM, -} as typeof ReactDOM & { - __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?: { - usingClientEntryPoint?: boolean; - }; - createRoot?: CreateRoot; -}; - -type CreateRoot = (container: ContainerType) => Root; - -const { version, render: reactRender, unmountComponentAtNode } = fullClone; - -let createRoot: CreateRoot; -try { - const mainVersion = Number((version || '').split('.')[0]); - if (mainVersion >= 18) { - ({ createRoot } = fullClone); - } -} catch (e) { - // Do nothing; -} - -function toggleWarning(skip: boolean) { - const { __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED } = fullClone; - - if ( - __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED && - typeof __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED === 'object' - ) { - __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint = skip; - } -} - -const MARK = '__rc_react_root__'; - -// ========================== Render ========================== -type ContainerType = (Element | DocumentFragment) & { - [MARK]?: Root; -}; - -function modernRender(node: React.ReactNode, container: ContainerType) { - toggleWarning(true); - const root = container[MARK] || createRoot(container); - toggleWarning(false); - - root.render(node); - - container[MARK] = root; -} - -function legacyRender(node: React.ReactElement, container: ContainerType) { - reactRender(node, container); -} - -/** @private Test usage. Not work in prod */ -export function _r(node: React.ReactElement, container: ContainerType) { - if (process.env.NODE_ENV !== 'production') { - return legacyRender(node, container); - } -} - -export function render(node: React.ReactElement, container: ContainerType) { - if (createRoot) { - modernRender(node, container); - return; - } - - legacyRender(node, container); -} - -// ========================= Unmount ========================== -async function modernUnmount(container: ContainerType) { - // Delay to unmount to avoid React 18 sync warning - return Promise.resolve().then(() => { - container[MARK]?.unmount(); - - delete container[MARK]; - }); -} - -function legacyUnmount(container: ContainerType) { - unmountComponentAtNode(container); -} - -/** @private Test usage. Not work in prod */ -export function _u(container: ContainerType) { - if (process.env.NODE_ENV !== 'production') { - return legacyUnmount(container); - } -} - -export async function unmount(container: ContainerType) { - if (createRoot !== undefined) { - // Delay to unmount to avoid React 18 sync warning - return modernUnmount(container); - } - - legacyUnmount(container); -} diff --git a/packages/graphs/src/utils/set-ellipsis.ts b/packages/graphs/src/utils/set-ellipsis.ts deleted file mode 100644 index 8e67e08bb..000000000 --- a/packages/graphs/src/utils/set-ellipsis.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** 超出省略,不够精准 */ -export const setEllipsis = (text: string, fontStyle: { [key: string]: unknown }, contentWidth: number = 120) => { - const { fontSize = 12, fontWeight = 'normal', fontFamily = 'Arial, sans-serif' } = fontStyle; - const canvas = document.querySelector('canvas'); - const ctx = canvas.getContext('2d'); - ctx.font = `${fontSize}px ${fontWeight} ${fontFamily}`; - let currentText = text; - let flag = false; - ctx.fillText(currentText, 0, 0); - for (let i = text.length - 1; i > 0; i--) { - const { width } = ctx.measureText(currentText); - if (width <= contentWidth) { - if (!flag) return currentText; - // 中文结尾删除最后一位、非中文结尾删除最后2位 - const reg = /[\u4e00-\u9fa5]/; - const lastStr = currentText.substring(currentText.length - 1, currentText.length); - return currentText.substring(0, currentText.length - (reg.test(lastStr) ? 1 : 2)) + '...'; - } else { - flag = true; - currentText = currentText.substring(0, currentText.length - 1); - } - } -}; diff --git a/packages/graphs/src/utils/set-flow-tag.ts b/packages/graphs/src/utils/set-flow-tag.ts deleted file mode 100644 index 9aa16e312..000000000 --- a/packages/graphs/src/utils/set-flow-tag.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { prefix } from '../constants'; -import { Log } from './log'; -import { FlowGraphDatum, FlowGraphNodeData } from '../interface'; - -/** - * 对数据进行打标,加上 level - */ -export const setFlowTag = (data: FlowGraphDatum, limitLevel: number = 100) => { - let resNodes = []; - const { nodes = [], edges = [] } = data; - let levelNodes = []; - const getTarget = (source: string) => { - return edges.filter((item) => { - const used = resNodes.findIndex((t) => t.id === item.target); - if (used !== -1 && item.source === source) { - const loop = getSource(item.source); - Log.warn( - `The data [${item.source},${item.target},${loop[0]?.source}] is in a loop, please check the rationality.`, - ); - } - return used === -1 && item.source === source; - }); - }; - const getSource = (target: string) => { - return edges.filter((item) => item.target === target); - }; - edges.forEach((item) => { - const { source } = item; - if (!edges.find((item) => item.target === source)) levelNodes.push(source); - }); - let level = 0; - - const appendInfo = (item: FlowGraphNodeData) => ({ - [`${prefix}_level`]: level, - [`${prefix}_parent`]: getSource(item.id).map((n) => n.source), - [`${prefix}_children`]: level < limitLevel - 1 ? getTarget(item.id).map((n) => n.target) : [], - }); - - if (!levelNodes.length) { - return { - edges, - nodes: nodes.map((item) => ({ - ...item, - ...appendInfo(item), - })), - }; - } - while (levelNodes.length) { - const currentLevelNodes = nodes.filter((item) => levelNodes.includes(item.id)); - resNodes = resNodes.concat( - currentLevelNodes.map((item) => ({ - ...item, - ...appendInfo(item), - })), - ); - const nextLevelNodes = []; - levelNodes.forEach((source) => { - nextLevelNodes.push(...getTarget(source).map((item) => item.target)); - }); - levelNodes = nextLevelNodes; - level += 1; - } - - return { nodes: resNodes, edges }; -}; diff --git a/packages/graphs/src/utils/set-level-data.ts b/packages/graphs/src/utils/set-level-data.ts deleted file mode 100644 index 474c3e67d..000000000 --- a/packages/graphs/src/utils/set-level-data.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { IGraph, Datum } from '../interface'; - -/** - * 挂载异步数据到全局 data - */ -export const setLevelData = (graph: IGraph, data: Datum, currentPath: string) => { - const currentData = graph.get('eventData').getData(); - // 打标时已经做了编码,这直接取值即可 - const path = currentPath.split('-'); - path.shift(); // 根节点没有 path - let current = currentData; - path.forEach((childrenIndex: string) => { - current = current.children[Number(childrenIndex)]; - }); - current.children = data; -}; diff --git a/packages/graphs/src/utils/set-styles.ts b/packages/graphs/src/utils/set-styles.ts deleted file mode 100644 index cf12b9fb8..000000000 --- a/packages/graphs/src/utils/set-styles.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const setStyles = (container: HTMLDivElement, style: React.CSSProperties = {}) => { - const keys = Object.keys(style); - keys.forEach((key: string) => { - container.style[key] = style[key]; - }); -}; diff --git a/packages/graphs/src/utils/set-tree-tag.ts b/packages/graphs/src/utils/set-tree-tag.ts deleted file mode 100644 index 512e68295..000000000 --- a/packages/graphs/src/utils/set-tree-tag.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { prefix } from '../constants'; -import { TreeGraphData } from '../interface'; - -/** - * 对数据进行打标,加上 level 和 parentId - */ -export const setTreeTag = (data: TreeGraphData, level = 0, parentId = '', path: string = '') => { - const { id, children = [] } = data; - return { - [`${prefix}_level`]: level, - [`${prefix}_parentId`]: parentId, - [`${prefix}_currentPath`]: path, - ...data, - children: children?.map((item: TreeGraphData, index: number) => { - return setTreeTag(item, level + 1, parentId ? `${parentId}-${id}` : id, `${path}-${index}`); - }), - }; -}; diff --git a/packages/graphs/src/utils/state-events.ts b/packages/graphs/src/utils/state-events.ts deleted file mode 100644 index 0ef90db97..000000000 --- a/packages/graphs/src/utils/state-events.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { CommonConfig, IGraph, INode, IEdge } from '../interface'; - -// 交互 -export const bindStateEvents = (graph: IGraph, cfg?: Partial | undefined) => { - const { nodeCfg = {}, edgeCfg = {} } = cfg ?? {}; - const { nodeStateStyles } = nodeCfg; - const { edgeStateStyles } = edgeCfg; - /** - * 存储交互状态 - * id: [[endActive, endDefalut], [startActive, startDefalut]] - */ - const statusCache = {}; - - const updateArrowFill = (item: IEdge, endArrowFill: string, stratArrowFill: string) => { - graph.updateItem(item, { - style: { - endArrow: !!endArrowFill && { - fill: endArrowFill, - }, - startArrow: !!stratArrowFill && { - fill: stratArrowFill, - }, - }, - }); - }; - - const setState = (item: INode | IEdge, name: string, status: boolean) => { - status ? item.toFront() : item.toBack(); - const { endArrow, startArrow } = item.getModel().style ?? {}; - - if (endArrow || startArrow) { - if (!statusCache[item.getID()]) { - // @ts-ignore - const { fill: endArrowFill } = endArrow ?? {}; - // @ts-ignore - const { fill: startArrowFill } = startArrow ?? {}; - const hoverStatus = item.getModel().style?.[name]?.stroke; - statusCache[item.getID()] = [ - [hoverStatus ?? endArrowFill, endArrowFill], - [hoverStatus ?? startArrowFill, startArrowFill], - ]; - } - const fill = statusCache[item.getID()]; - updateArrowFill(item as IEdge, endArrow && fill[0][status ? 0 : 1], startArrow && fill[1][status ? 0 : 1]); - } - graph.setItemState(item, name, status); - }; - const getRelationItems = (currentItem: INode | IEdge, name: string, status: boolean, type: string) => { - const relationItems = - type === 'node' - ? graph.findAll('edge', (edge: IEdge) => edge.getSource() === currentItem || edge.getTarget() === currentItem) - : graph.findAll( - 'node', - (node: INode) => - (currentItem as IEdge).getSource().get('id') === node.get('id') || - (currentItem as IEdge).getTarget().get('id') === node.get('id'), - ); - const highlightItems = [currentItem].concat(relationItems); - - highlightItems.forEach((item) => { - setState(item, name, status); - }); - }; - if (nodeStateStyles) { - graph.on('node:mouseenter', (evt) => { - const item = evt.item as INode; - getRelationItems(item, 'hover', true, 'node'); - }); - graph.on('node:mouseleave', (evt) => { - const item = evt.item as INode; - getRelationItems(item, 'hover', false, 'node'); - }); - } - if (edgeStateStyles) { - graph.on('edge:mouseenter', (evt) => { - const item = evt.item as INode; - getRelationItems(item, 'hover', true, 'edge'); - }); - graph.on('edge:mouseleave', (evt) => { - const item = evt.item as INode; - getRelationItems(item, 'hover', false, 'edge'); - }); - } -}; diff --git a/packages/graphs/src/utils/uuid.ts b/packages/graphs/src/utils/uuid.ts deleted file mode 100644 index 2710eaca7..000000000 --- a/packages/graphs/src/utils/uuid.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const uuid = () => { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { - const r = (Math.random() * 16) | 0; - const v = c == 'x' ? r : (r & 0x3) | 0x8; - return v.toString(16); - }); -}; diff --git a/packages/graphs/tests/data/conv-dagre.ts b/packages/graphs/tests/data/conv-dagre.ts deleted file mode 100644 index 781710e85..000000000 --- a/packages/graphs/tests/data/conv-dagre.ts +++ /dev/null @@ -1,451 +0,0 @@ -export const ConvDagreData = { - nodes: [ - { - id: 'node-0', - name: '页面-0', - layerName: '层级0', - measure: { - name: 'DAU', - value: 17500000000, - formattedValue: 175, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 1000000, - formattedValue: 100, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#F5A623', - }, - }, - { - id: 'node-1', - name: '页面1', - layerName: '层级0', - measure: { - name: 'DAU', - value: 5500000000, - formattedValue: 55, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 500000, - formattedValue: 50, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#F5A623', - }, - }, - { - id: 'node-2', - name: '页面2', - layerName: '层级0', - measure: { - name: 'DAU', - value: 5000000000, - formattedValue: 50, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 100000, - formattedValue: 10, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#F5A623', - }, - }, - { - id: 'node-3', - name: '页面3', - layerName: '层级0', - measure: { - name: 'DAU', - value: 900000000, - formattedValue: 9, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 50000, - formattedValue: 5, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#F5A623', - }, - }, - { - id: 'node-4', - name: '页面4', - layerName: '层级0', - measure: { - name: 'DAU', - value: 5700000000, - formattedValue: 57, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 60000, - formattedValue: 6, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#F5A623', - }, - }, - { - id: 'node-5', - name: '页面5', - layerName: '层级1', - measure: { - name: 'DAU', - value: 24000000000, - formattedValue: 240, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 1600000, - formattedValue: 160, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#4A90E2', - }, - }, - { - id: 'node-6', - name: '页面6', - layerName: '层级1', - measure: { - name: 'DAU', - value: 6600000000, - formattedValue: 66, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 110000, - formattedValue: 11, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#4A90E2', - }, - }, - { - id: 'node-7', - name: '页面7', - layerName: '层级2', - measure: { - name: 'DAU', - value: 5000000000, - formattedValue: 50, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 500000, - formattedValue: 50, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#7ED321', - }, - }, - { - id: 'node-8', - name: '页面8', - layerName: '层级2', - measure: { - name: 'DAU', - value: 5000000000, - formattedValue: 50, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 500000, - formattedValue: 50, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#7ED321', - }, - }, - { - id: 'node-9', - name: '页面9', - layerName: '层级2', - measure: { - name: 'DAU', - value: 900000, - formattedValue: 90, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 500000, - formattedValue: 50, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#7ED321', - }, - }, - { - id: 'node-10', - name: '页面10', - layerName: '层级2', - measure: { - name: 'DAU', - value: 10000000000, - formattedValue: 100, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 100000, - formattedValue: 10, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#7ED321', - }, - }, - { - id: 'node-11', - name: '页面11', - layerName: '层级2', - measure: { - name: 'DAU', - value: 1000000000, - formattedValue: 10, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 90000, - formattedValue: 9, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#7ED321', - }, - }, - { - id: 'node-12', - name: '页面12', - layerName: '层级2', - measure: { - name: 'DAU', - value: 600000000, - formattedValue: 6, - formattedUnit: '万', - }, - relatedMeasures: [ - { - name: 'MAU', - value: 10000, - formattedValue: 1, - formattedUnit: '万', - }, - ], - compareMeasures: [], - style: { - stroke: '#7ED321', - }, - }, - ], - edges: [ - { - id: 'edge-0', - source: 'node-0', - target: 'node-5', - measure: { - name: 'DAU', - value: 17500000000, - formattedValue: 175, - formattedUnit: '万', - }, - }, - { - id: 'edge-1', - source: 'node-1', - target: 'node-5', - measure: { - name: 'DAU', - value: 5500000000, - formattedValue: 55, - formattedUnit: '万', - }, - }, - { - id: 'edge-2', - source: 'node-2', - target: 'node-5', - measure: { - name: 'DAU', - value: 1000000000, - formattedValue: 10, - formattedUnit: '万', - }, - }, - { - id: 'edge-3', - source: 'node-3', - target: 'node-6', - measure: { - name: 'DAU', - value: 900000000, - formattedValue: 9, - formattedUnit: '万', - }, - }, - { - id: 'edge-4', - source: 'node-5', - target: 'node-7', - measure: { - name: 'DAU', - value: 5000000000, - formattedValue: 50, - formattedUnit: '万', - }, - }, - { - id: 'edge-5', - source: 'node-5', - target: 'node-8', - measure: { - name: 'DAU', - value: 5000000000, - formattedValue: 50, - formattedUnit: '万', - }, - }, - { - id: 'edge-6', - source: 'node-5', - target: 'node-9', - measure: { - name: 'DAU', - value: 9000000000, - formattedValue: 90, - formattedUnit: '万', - }, - }, - { - id: 'edge-7', - source: 'node-5', - target: 'node-10', - measure: { - name: 'DAU', - value: 5000000000, - formattedValue: 50, - formattedUnit: '万', - }, - }, - { - id: 'edge-8', - source: 'node-6', - target: 'node-11', - measure: { - name: 'DAU', - value: 1000000000, - formattedValue: 10, - formattedUnit: '万', - }, - }, - { - id: 'edge-9', - source: 'node-4', - target: 'node-6', - measure: { - name: 'DAU', - value: 5700000000, - formattedValue: 57, - formattedUnit: '万', - }, - }, - { - id: 'edge-10', - source: 'node-5', - target: 'node-6', - measure: { - name: 'DAU', - value: 2000000000, - formattedValue: 20, - formattedUnit: '万', - }, - style: { - dashed: true, - }, - }, - { - id: 'edge-11', - source: 'node-6', - target: 'node-12', - measure: { - name: 'DAU', - value: 600000000, - formattedValue: 6, - formattedUnit: '万', - }, - }, - { - id: 'edge-12', - source: 'node-6', - target: 'node-10', - measure: { - name: 'DAU', - value: 5000000000, - formattedValue: 50, - formattedUnit: '万', - }, - }, - ], -}; diff --git a/packages/graphs/tests/data/file-tree.ts b/packages/graphs/tests/data/file-tree.ts deleted file mode 100644 index ad4314047..000000000 --- a/packages/graphs/tests/data/file-tree.ts +++ /dev/null @@ -1,139 +0,0 @@ -export const FileData = { - value: { text: 'Modeling Methods' }, - id: '0', - isRoot: true, - children: [ - { - value: { text: 'Classification' }, - id: '0-1', - children: [ - { - value: { text: 'Logistic regression' }, - id: '0-1-1', - }, - { - value: { text: 'Linear discriminant analysis' }, - id: '0-1-2', - }, - { - value: { text: 'Rules' }, - id: '0-1-3', - }, - { - value: { text: 'Decision trees' }, - id: '0-1-4', - }, - { - value: { text: 'Naive Bayes' }, - id: '0-1-5', - }, - { - value: { text: 'K nearest neighbor' }, - id: '0-1-6', - }, - { - value: { text: 'Probabilistic neural network' }, - id: '0-1-7', - }, - { - value: { text: 'Support vector machine' }, - id: '0-1-8', - }, - ], - }, - { - value: { text: 'Consensus' }, - id: '0-2', - children: [ - { - value: { text: 'Models diversity' }, - id: '0-2-1', - children: [ - { - value: { text: 'Different initializations' }, - id: '0-2-1-1', - }, - { - value: { text: 'Different parameter choices' }, - id: '0-2-1-2', - }, - { - value: { text: 'Different architectures' }, - id: '0-2-1-3', - }, - { - value: { text: 'Different modeling methods' }, - id: '0-2-1-4', - }, - { - value: { text: 'Different training sets' }, - id: '0-2-1-5', - }, - { - value: { text: 'Different feature sets' }, - id: '0-2-1-6', - }, - ], - }, - { - value: { text: 'Methods' }, - id: '0-2-2', - children: [ - { - value: { text: 'Classifier selection' }, - id: '0-2-2-1', - }, - { - value: { text: 'Classifier fusion' }, - id: '0-2-2-2', - }, - ], - }, - { - value: { text: 'Common' }, - id: '0-2-3', - children: [ - { - value: { text: 'Bagging' }, - id: '0-2-3-1', - }, - { - value: { text: 'Boosting' }, - id: '0-2-3-2', - }, - { - value: { text: 'AdaBoost' }, - id: '0-2-3-3', - }, - ], - }, - ], - }, - { - value: { text: 'Regression' }, - id: '0-3', - children: [ - { - value: { text: 'Multiple linear regression' }, - id: '0-3-1', - }, - { - value: { text: 'Partial least squares' }, - id: '0-3-2', - }, - { - value: { text: 'Multi-layer feedforward neural network' }, - id: '0-3-3', - }, - { - value: { text: 'General regression neural network' }, - id: '0-3-4', - }, - { - value: { text: 'Support vector regression' }, - id: '0-3-5', - }, - ], - }, - ], -}; diff --git a/packages/graphs/tests/data/flow-loop.ts b/packages/graphs/tests/data/flow-loop.ts deleted file mode 100644 index edb56bbcf..000000000 --- a/packages/graphs/tests/data/flow-loop.ts +++ /dev/null @@ -1,290 +0,0 @@ -export const FlowLoopData = { - nodes: [ - { - id: '-3', - value: { - title: '来源页面A', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-2', - value: { - title: '来源页面B', - items: [ - { - text: '点击UV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-1', - value: { - title: '来源页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '0', - value: { - title: '活动页面', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '1', - value: { - title: '去向页面A', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '2', - value: { - title: '去向页面B', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '3', - value: { - title: '去向页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '4', - value: { - title: '去向页面D', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '5', - value: { - title: '去向页面E', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '7', - value: { - title: '去向页面G', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '8', - value: { - title: '去向页面H', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - ], - edges: [ - { - source: '-3', - target: '0', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - value: '来源A', - }, - { - source: '-2', - target: '0', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - value: '来源B', - }, - { - source: '-1', - target: '0', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - value: '来源C', - }, - { - source: '0', - target: '-1', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - value: '来源C', - }, - { - source: '0', - target: '1', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - }, - { - source: '1', - target: '-3', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - }, - { - source: '0', - target: '2', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - }, - { - source: '0', - target: '3', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - }, - { - source: '0', - target: '4', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - }, - { - source: '0', - target: '5', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - }, - { - source: '2', - target: '6', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - }, - { - source: '3', - target: '7', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - }, - { - source: '4', - target: '8', - sourceAnchor: 1, - // 该边连入 target 点的第 0 个 anchorPoint, - targetAnchor: 0, - }, - ], -}; - -export const FlowLoopDoubleData = { - nodes: [ - { - id: '4', - value: { - title: '去向页面A', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '5', - value: { - title: '去向页面B', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - - { - id: '6', - value: { - title: '去向页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - ], - edges: [ - { - source: '4', - target: '5', - }, - { - source: '5', - target: '6', - }, - { - source: '6', - target: '4', - }, - ], -}; diff --git a/packages/graphs/tests/data/flow.ts b/packages/graphs/tests/data/flow.ts deleted file mode 100644 index b67925415..000000000 --- a/packages/graphs/tests/data/flow.ts +++ /dev/null @@ -1,189 +0,0 @@ -export const FlowData = { - nodes: [ - { - id: '-3', - value: { - title: '来源页面A', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-2', - value: { - title: '来源页面B', - items: [ - { - text: '点击UV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-1', - value: { - title: '来源页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '0', - value: { - title: '活动页面', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '1', - value: { - title: '去向页面A', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '2', - value: { - title: '去向页面B', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '3', - value: { - title: '去向页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '4', - value: { - title: '去向页面D', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '5', - value: { - title: '去向页面E', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '7', - value: { - title: '去向页面G', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '8', - value: { - title: '去向页面H', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - ], - edges: [ - { - source: '-3', - target: '0', - value: '来源A', - }, - { - source: '-2', - target: '0', - value: '来源B', - }, - { - source: '-1', - target: '0', - value: '来源C', - }, - { - source: '0', - target: '1', - }, - { - source: '0', - target: '2', - }, - { - source: '0', - target: '3', - }, - { - source: '0', - target: '4', - }, - { - source: '0', - target: '5', - }, - { - source: '2', - target: '6', - }, - { - source: '3', - target: '7', - }, - { - source: '4', - target: '8', - }, - ], -}; diff --git a/packages/graphs/tests/data/index.ts b/packages/graphs/tests/data/index.ts deleted file mode 100644 index 407165de3..000000000 --- a/packages/graphs/tests/data/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export { RadialData } from './radial'; -export { TreeData, NoTitleTreeData } from './tree'; -export { FlowData } from './flow'; -export { FileData } from './file-tree'; -export { RadialTreeData } from './radial-tree'; -export { ConvDagreData } from './conv-dagre'; -export { ORG_DATA } from './org'; -export { FlowLoopData, FlowLoopDoubleData } from './flow-loop'; diff --git a/packages/graphs/tests/data/org.ts b/packages/graphs/tests/data/org.ts deleted file mode 100644 index 725a4a3ef..000000000 --- a/packages/graphs/tests/data/org.ts +++ /dev/null @@ -1,105 +0,0 @@ -export const ORG_DATA = { - id: 'root', - value: { - name: 'Joel Alan', - title: 'CEO', - // 建议使用 bae64 数据 - icon: 'https://avatars.githubusercontent.com/u/31396322?v=4', - }, - children: [ - { - id: 'joel', - value: { - name: 'Joel Alan', - }, - children: [ - { - id: 'c1', - value: { - name: 'c1', - }, - children: [ - { - id: 'c1-1', - value: { - name: 'c1-1', - }, - }, - { - id: 'c1-2', - value: { - name: 'c1-2', - }, - children: [ - { - id: 'c1-2-1', - value: { - name: 'c1-2-1', - }, - }, - { - id: 'c1-2-2', - value: { - name: 'c1-2-2', - }, - }, - ], - }, - ], - }, - { - id: 'c2', - value: { - name: 'c2', - }, - }, - { - id: 'c3', - value: { - name: 'c3', - }, - children: [ - { - id: 'c3-1', - value: { - name: 'c3-1', - }, - }, - { - id: 'c3-2', - value: { - name: 'c3-2', - }, - children: [ - { - id: 'c3-2-1', - value: { - name: 'c3-2-1', - }, - }, - { - id: 'c3-2-2', - value: { - name: 'c3-2-2', - }, - }, - { - id: 'c3-2-3', - value: { - name: 'c3-2-3', - }, - }, - ], - }, - { - id: 'c3-3', - value: { - name: 'c3-3', - }, - }, - ], - }, - ], - }, - ], -}; diff --git a/packages/graphs/tests/data/radial-tree.ts b/packages/graphs/tests/data/radial-tree.ts deleted file mode 100644 index 8e80525dd..000000000 --- a/packages/graphs/tests/data/radial-tree.ts +++ /dev/null @@ -1,20 +0,0 @@ -export const RadialTreeData = { - id: 'Modeling Methods', - children: [ - { - id: 'Classification', - children: [ - { id: 'Logistic regression', value: 'Logistic regression' }, - { id: 'Linear discriminant analysis', value: 'Linear discriminant analysis' }, - { id: 'Rules', value: 'Rules' }, - { id: 'Decision trees', value: 'Decision trees' }, - { id: 'Naive Bayes', value: 'Naive Bayes' }, - { id: 'K nearest neighbor', value: 'K nearest neighbor' }, - { id: 'Probabilistic neural network', value: 'Probabilistic neural network' }, - { id: 'Support vector machine', value: 'Support vector machine' }, - ], - value: 'Classification', - }, - ], - value: 'Modeling Methods', -}; diff --git a/packages/graphs/tests/data/radial.ts b/packages/graphs/tests/data/radial.ts deleted file mode 100644 index c955711c8..000000000 --- a/packages/graphs/tests/data/radial.ts +++ /dev/null @@ -1,82 +0,0 @@ -export const RadialData = { - nodes: [ - { - id: '0', - label: '0', - }, - { - id: '1', - label: '1', - }, - { - id: '2', - label: '2', - }, - { - id: '3', - label: '3', - }, - { - id: '4', - label: '4', - }, - { - id: '5', - label: '5', - }, - { - id: '6', - label: '6', - }, - { - id: '7', - label: '7', - }, - { - id: '8', - label: '8', - }, - { - id: '9', - label: '9', - }, - ], - edges: [ - { - source: '0', - target: '1', - }, - { - source: '0', - target: '2', - }, - { - source: '0', - target: '3', - }, - { - source: '0', - target: '4', - }, - { - source: '0', - target: '5', - }, - { - source: '0', - target: '6', - }, - { - source: '0', - target: '7', - }, - { - source: '0', - target: '8', - }, - { - source: '0', - target: '9', - }, - ], -}; diff --git a/packages/graphs/tests/data/tree.ts b/packages/graphs/tests/data/tree.ts deleted file mode 100644 index 59e70125f..000000000 --- a/packages/graphs/tests/data/tree.ts +++ /dev/null @@ -1,219 +0,0 @@ -export const TreeData = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南华北verylong1234567', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '广东', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '广西', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - markerCfg: { - collapsed: false, - }, - }, - { - id: 'A13', - value: { - title: '海南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '华北华南真的很大很多很差', - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - children: [ - { - id: 'A21', - value: { - title: '陕西', - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: 'A22', - value: { - title: '青海', - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }, - ], -}; - -export const NoTitleTreeData = { - id: 'A0', - value: { - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - items: [ - { - text: '1152万', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - items: [ - { - text: '1152万', - }, - ], - }, - }, - { - id: 'A12', - value: { - items: [ - { - text: '1152万', - }, - ], - }, - }, - { - id: 'A13', - value: { - items: [ - { - text: '1152万', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - items: [ - { - text: '595万', - }, - ], - }, - children: [ - { - id: 'A21', - value: { - items: [ - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: 'A22', - value: { - items: [ - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }, - ], -}; diff --git a/packages/graphs/tests/graphs/anchor-callback-spec.tsx b/packages/graphs/tests/graphs/anchor-callback-spec.tsx deleted file mode 100644 index 80a2d678e..000000000 --- a/packages/graphs/tests/graphs/anchor-callback-spec.tsx +++ /dev/null @@ -1,319 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FlowAnalysisGraph } from '../../src'; - -describe('Type NodeData', () => { - let container; - const data = { - nodes: [ - { - id: '-3', - value: { - title: '来源页面A', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-2', - value: { - title: '来源页面B', - items: [ - { - text: '点击UV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-1', - value: { - title: '来源页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '0', - value: { - title: '活动页面', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '1', - value: { - title: '去向页面A', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '2', - value: { - title: '去向页面B', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '3', - value: { - title: '去向页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '4', - value: { - title: '去向页面D', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '5', - value: { - title: '去向页面E', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '7', - value: { - title: '去向页面G', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '8', - value: { - title: '去向页面H', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - ], - edges: [ - { - source: '-3', - target: '0', - value: '来源A', - }, - { - source: '-2', - target: '0', - value: '来源B', - }, - { - source: '-1', - target: '0', - value: '来源C', - }, - { - source: '0', - target: '1', - }, - { - source: '0', - target: '2', - }, - { - source: '0', - target: '3', - }, - { - source: '0', - target: '4', - }, - { - source: '0', - target: '5', - }, - { - source: '2', - target: '6', - }, - { - source: '3', - target: '7', - }, - { - source: '4', - target: '8', - }, - ], - }; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('Render data', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const chartProps = { - data, - nodeCfg: { - size: [140, 25] as number[], - anchorPoints: (node) => { - return [ - [0, 0.5], - [1, 1], - ]; - }, - items: { - containerStyle: { - fill: '#fff', - }, - padding: 6, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: 2 as number, - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }, - }, - style: (edge) => { - const stroke = edge.target === '0' ? '#c86bdd' : '#5ae859'; - return { - stroke, - lineWidth: Math.random() * 10 + 1, - strokeOpacity: 0.5, - }; - }, - edgeStateStyles: { - hover: { - strokeOpacity: 1, - }, - }, - }, - markerCfg: (cfg) => { - const { edges } = data; - return { - position: 'right' as 'right', - show: !!edges.find((item) => item.source === cfg.id), - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'] as string[], - } as const; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - const { anchorPoints } = chartRef.findById('-3')?.getModel(); - expect(anchorPoints).toEqual([ - [0, 0.5], - [1, 1], - ]); - }); -}); diff --git a/packages/graphs/tests/graphs/chore-plugin-spec.tsx b/packages/graphs/tests/graphs/chore-plugin-spec.tsx deleted file mode 100644 index df51009df..000000000 --- a/packages/graphs/tests/graphs/chore-plugin-spec.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { RadialTreeGraph } from '../../src'; -import { RadialTreeData } from '../data'; - -describe('Chore plugin', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - container.className = 'container'; - container.style.height = '600px'; - document.body.appendChild(container); - }); - afterAll(() => { - const containers = document.getElementsByClassName('container'); - Array.from(containers).forEach((el) => { - document.body.removeChild(el); - }); - container = null; - }); - - it('plugin', () => { - const config = { - data: RadialTreeData, - nodeConfig: { - type: 'image', - img: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*w5uESbSe430AAAAAAAAAAABkARQnAQ', - }, - menuCfg: { - customContent: (e) => { - return ( -
- -
- ); - }, - }, - tooltipCfg: { - show: true, - customContent: (e) => { - return 'custom content'; - }, - }, - minimapCfg: { - show: true, - }, - toolbarCfg: { - show: true, - }, - } as any; - act(() => { - render(, container); - }); - expect(document.querySelector('.g6-component-meu')).not.toBeUndefined(); - expect(document.querySelector('.charts-toolbar')).not.toBeUndefined(); - expect(document.querySelector('.g6-minimap-viewport')).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/graphs/conversion-dagre-graph-spec.tsx b/packages/graphs/tests/graphs/conversion-dagre-graph-spec.tsx deleted file mode 100644 index 8469200db..000000000 --- a/packages/graphs/tests/graphs/conversion-dagre-graph-spec.tsx +++ /dev/null @@ -1,46 +0,0 @@ -// @ts-nocheck -import React, { useRef } from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { ConversionDagreGraph } from '../../src'; -import { ConvDagreData } from '../data'; - -describe('Type NodeData', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - container.style.height = '520px'; - document.body.appendChild(container); - }); - afterEach(() => { - // document.body.removeChild(container); - // container = null; - }); - it('Render data', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - - const onChangeData = (params) => { - // 业务回调 - }; - - const chartProps = { - data: ConvDagreData, - layerOrder: ['层级0', '层级1', '层级2'], - segmLayer: '层级1', - ratioMethod: 'both', - onChangeData, - }; - - act(() => { - render(, container); - }); - - expect(chartRef).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/graphs/edge-cfg-label-spec.tsx b/packages/graphs/tests/graphs/edge-cfg-label-spec.tsx deleted file mode 100644 index a5bdd51c9..000000000 --- a/packages/graphs/tests/graphs/edge-cfg-label-spec.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FlowAnalysisGraph } from '../../src'; -import { FlowData } from '../data'; - -describe('Edge config', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('label', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - - const chartProps = { - data: FlowData, - nodeCfg: { - size: [140, 25], - items: { - containerStyle: { - fill: '#fff', - }, - padding: 6, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: 2, - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }, - }, - style: (edge) => { - const stroke = edge.target === '0' ? '#c86bdd' : '#5ae859'; - return { - stroke, - lineWidth: Math.random() * 10 + 1, - strokeOpacity: 0.5, - }; - }, - edgeStateStyles: { - hover: { - strokeOpacity: 1, - }, - }, - }, - markerCfg: (cfg) => { - const { edges } = FlowData; - return { - position: 'right' as const, - show: true, - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect(chartRef.cfg.defaultEdge.labelCfg).toEqual({ - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }); - }); -}); diff --git a/packages/graphs/tests/graphs/error-boundary-spec.tsx b/packages/graphs/tests/graphs/error-boundary-spec.tsx deleted file mode 100644 index 2deded346..000000000 --- a/packages/graphs/tests/graphs/error-boundary-spec.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { RadialTreeGraph } from '../../src'; - -describe('Area render', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it.skip('error template with ReactNode', () => { - const props = { - loading: true, - // An object of type loadingTemplate is only used to trigger a boundary error - loadingTemplate: { - triggleError: true, - }, - errorTemplate: custom error, - }; - const chartProps = { - data: { - id: 'Modeling Methods', - value: 'Methods', - children: [], - }, - autoFit: false, - nodeCfg: { - type: 'image', - img: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mpPvTKdP7cIAAAAAAAAAAABkARQnAQ', - }, - width: 200, - height: 160, - } as any; - act(() => { - render(, container); - }); - expect(document.querySelector('#error').innerHTML).toBe('custom error'); - }); - - it.skip('error template with callback', () => { - const props = { - loading: true, - // An object of type loadingTemplate is only used to trigger a boundary error - loadingTemplate: { - triggleError: true, - }, - errorTemplate: () => custom error with callback, - }; - const chartProps = { - data: { - id: 'Modeling Methods', - value: 'Methods', - children: [], - }, - autoFit: false, - nodeCfg: { - type: 'image', - img: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mpPvTKdP7cIAAAAAAAAAAABkARQnAQ', - }, - width: 200, - height: 160, - } as any; - act(() => { - render(, container); - }); - expect(document.querySelector('#error-callback').innerHTML).toBe('custom error with callback'); - }); -}); diff --git a/packages/graphs/tests/graphs/fetch-loading-spec.tsx b/packages/graphs/tests/graphs/fetch-loading-spec.tsx deleted file mode 100644 index 9c4e589c4..000000000 --- a/packages/graphs/tests/graphs/fetch-loading-spec.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import React, { useRef } from 'react'; -import { renderHook } from '@testing-library/react-hooks/server'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { RadialGraph } from '../../src'; -import { RadialData } from '../data'; -const refs = renderHook(() => useRef()) as any; - -describe('RadialGraph contentmenu', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - container.className = 'container'; - container.style.height = '600px'; - document.body.appendChild(container); - }); - afterAll(() => { - const containers = document.getElementsByClassName('container'); - Array.from(containers).forEach((el) => { - document.body.removeChild(el); - }); - container = null; - }); - - it('explore', () => { - const fetchData = (node): Promise => { - return new Promise((resolve, reject) => { - const data = new Array(Math.ceil(Math.random() * 10) + 2).fill('').map((_, i) => i + 1); - setTimeout(() => { - resolve({ - nodes: [ - { - ...node, - }, - ].concat( - data.map((i) => { - return { - id: `${node.id}-${i}`, - label: `e${i}`, - }; - }), - ), - edges: data.map((i) => { - return { - source: node.id, - target: `${node.id}-${i}`, - }; - }), - }); - }, 1000); - }); - }; - - const asyncData = async (node) => { - return await fetchData(node); - }; - - const config = { - data: RadialData, - autoFit: false, - layout: { - unitRadius: 80, - /** 节点直径 */ - nodeSize: 20, - /** 节点间距 */ - nodeSpacing: 10, - }, - nodeCfg: { - asyncData, - size: 20, - style: { - fill: '#fff', - stroke: 'yellow', - }, - labelCfg: { - style: { - fontSize: 5, - fill: 'red', - }, - }, - }, - menuCfg: { - customContent: (e) => { - return ( -
- -
- ); - }, - }, - edgeCfg: { - style: { - lineWidth: 1, - }, - endArrow: { - d: 10, - size: 2, - }, - }, - fetchLoading:
custom loading
, - onReady: (graph) => { - refs.current = graph; - }, - }; - act(() => { - render(, container); - }); - const menuContainer = document.querySelector('.g6-component-meu'); - expect(menuContainer).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/graphs/file-tree-spec.tsx b/packages/graphs/tests/graphs/file-tree-spec.tsx deleted file mode 100644 index fff4d3859..000000000 --- a/packages/graphs/tests/graphs/file-tree-spec.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import React, { useRef } from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FileTreeGraph } from '../../src'; -import { FileData } from '../data'; - -describe('File Tree', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('render', () => { - let chartRef = undefined; - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve( - [1, 2].map(() => ({ - id: 'A2' + Math.random().toString(), - value: { - text: '异步节点' + Math.random().toString(), - }, - })), - ); - }, 1000); - }); - }; - - const getChildren = async (): Promise => { - return await fetchData(); - }; - const chartProps = { - data: FileData, - nodeCfg: { - // customContent: (item, group, cfg) => { - // const { startX, startY, width } = cfg; - // const { text } = item; - // const customGroup = group.addGroup({ - // name: 'custom-group', - // }); - // customGroup.addShape('text', { - // attrs: { - // textBaseline: 'middle', - // textAlign: 'start', - // x: text === 'Modeling Methods' ? startX - width / 2 : startX, - // y: startY, - // text, - // fill: 'red', - // }, - // // group 内唯一字段 - // name: `text-shape`, - // }); - // return customGroup; - // }, - }, - edgeCfg: { - style: (cfg) => { - if (cfg.id === '0') { - return { - stroke: 'transparent', - }; - } - return { - stroke: '#ccc', - radius: 6, - }; - }, - }, - markerCfg: (cfg) => { - return { - position: 'right' as 'right', - // show: false, - style: { - fill: '#fff', - stroke: '#999', - }, - }; - }, - - onReady: (graph) => { - chartRef = graph; - graph.on('add:children', async (e) => { - // const data = graph.findDataById(e.item.getID()); - // if (!data.children) data.children = []; - // const { id, value } = e.item.getModel(); - // const appendChildren = await getChildren(); - // data.children.push(...appendChildren); - // graph.updateChildren(data.children, data.id); - }); - }, - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect( - chartRef - .findById('0-1') - .get('group') - .getChildren() - .filter((item) => item.cfg.name === 'text-shape').length, - ).toBe(1); - }); -}); diff --git a/packages/graphs/tests/graphs/flow-analysis-sync-spec.tsx b/packages/graphs/tests/graphs/flow-analysis-sync-spec.tsx deleted file mode 100644 index c9ac31202..000000000 --- a/packages/graphs/tests/graphs/flow-analysis-sync-spec.tsx +++ /dev/null @@ -1,155 +0,0 @@ -// @ts-nocheck -import React, { useRef } from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FlowAnalysisGraph } from '../../src'; -import { FlowData } from '../data'; - -describe('Type NodeData', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('Render data', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ - nodes: [ - { - id: Math.random().toString(), - value: { - title: '来源页面99', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: Math.random().toString(), - value: { - title: '来源页面999', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - edges: [], - }); - }, 1000); - }); - }; - const asyncData = async () => { - return await fetchData(); - }; - - const chartProps = { - data: FlowData, - fitCenter: false, - nodeCfg: { - asyncData, - size: [140, 25], - items: { - containerStyle: { - fill: '#fff', - }, - padding: 6, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: [2, 2, 2, 2], - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }, - }, - style: (edge) => { - const stroke = edge.target === '0' ? '#c86bdd' : '#5ae859'; - return { - stroke, - lineWidth: Math.random() * 10 + 1, - strokeOpacity: 0.5, - }; - }, - edgeStateStyles: { - hover: { - strokeOpacity: 1, - }, - }, - }, - markerCfg: (cfg) => { - const { edges } = FlowData; - return { - position: 'right', - show: true, - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - const { _graphId } = chartRef.findById('-3')?.getModel(); - expect(_graphId).toBeDefined(); - }); -}); diff --git a/packages/graphs/tests/graphs/flow-level-spec.tsx b/packages/graphs/tests/graphs/flow-level-spec.tsx deleted file mode 100644 index e96b1e95d..000000000 --- a/packages/graphs/tests/graphs/flow-level-spec.tsx +++ /dev/null @@ -1,156 +0,0 @@ -// @ts-nocheck -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FlowAnalysisGraph } from '../../src'; -import { FlowData } from '../data'; - -describe('Flow level props', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('Render level', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ - nodes: [ - { - id: Math.random().toString(), - value: { - title: '来源页面99', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: Math.random().toString(), - value: { - title: '来源页面999', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - edges: [], - }); - }, 1000); - }); - }; - const asyncData = async () => { - return await fetchData(); - }; - - const level = 2; - - const chartProps = { - data: FlowData, - autoFit: false, - fitCenter: false, - level, - nodeCfg: { - asyncData, - size: [140, 25], - items: { - containerStyle: { - fill: '#fff', - }, - padding: 6, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: [2, 2, 2, 2], - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }, - }, - style: (edge) => { - const stroke = edge.target === '0' ? '#c86bdd' : '#5ae859'; - return { - stroke, - lineWidth: Math.random() * 10 + 1, - strokeOpacity: 0.5, - }; - }, - edgeStateStyles: { - hover: { - strokeOpacity: 1, - }, - }, - }, - markerCfg: { - position: 'right', - show: true, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - const { _graphId } = chartRef.findById('-3')?.getModel(); - expect(_graphId).toBeDefined(); - expect(chartRef.get('data').nodes.length).toBe(4); - }); -}); diff --git a/packages/graphs/tests/graphs/flow-loop-edges-spec.tsx b/packages/graphs/tests/graphs/flow-loop-edges-spec.tsx deleted file mode 100644 index 0d1adf353..000000000 --- a/packages/graphs/tests/graphs/flow-loop-edges-spec.tsx +++ /dev/null @@ -1,76 +0,0 @@ -// @ts-nocheck -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FlowAnalysisGraph } from '../../src'; -import { FlowLoopData, FlowLoopDoubleData } from '../data'; - -describe('Flow loop edges', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('Render loop', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const chartProps = { - data: FlowLoopData, - nodeCfg: { - size: [140, 25], - }, - markerCfg: { - position: 'right', - show: true, - }, - edgeCfg: { - endArrow: {}, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect(chartRef.get('data').nodes.length).toBe(FlowLoopData.nodes.length); - expect(chartRef.get('data').edges.length).toBe(FlowLoopData.edges.length); - }); - it('Render Double loop', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const chartProps = { - data: FlowLoopDoubleData, - nodeCfg: { - size: [140, 25], - }, - markerCfg: { - position: 'right', - show: true, - }, - edgeCfg: { - endArrow: {}, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect(chartRef.get('data').nodes.length).toBe(FlowLoopDoubleData.nodes.length); - expect(chartRef.get('data').edges.length).toBe(FlowLoopDoubleData.edges.length); - }); -}); diff --git a/packages/graphs/tests/graphs/fund-line-spec.tsx b/packages/graphs/tests/graphs/fund-line-spec.tsx deleted file mode 100644 index 812f9d7af..000000000 --- a/packages/graphs/tests/graphs/fund-line-spec.tsx +++ /dev/null @@ -1,351 +0,0 @@ -// @ts-nocheck -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FlowAnalysisGraph } from '../../src'; - -describe('Labels Line', () => { - let container; - const data = { - nodes: [ - { - id: '-3', - value: { - title: '来源页面A', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-2', - value: { - title: '来源页面B', - items: [ - { - text: '点击UV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-1', - value: { - title: '来源页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '0', - value: { - title: '活动页面', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '1', - value: { - title: '去向页面A', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '2', - value: { - title: '去向页面B', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '3', - value: { - title: '去向页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '4', - value: { - title: '去向页面D', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '5', - value: { - title: '去向页面E', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '7', - value: { - title: '去向页面G', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '8', - value: { - title: '去向页面H', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - ], - edges: [ - { - source: '-3', - target: '0', - // value: '来源A', - value: { - text: '来源A', - subText: 'subText', - }, - }, - { - source: '-2', - target: '0', - value: { - text: '来源B', - subText: 'subText', - }, - }, - { - source: '-1', - target: '0', - value: '来源C', - }, - { - source: '0', - target: '1', - value: { - text: '来源A', - subText: 'subText', - }, - }, - { - source: '0', - target: '2', - value: { - text: '来源A', - subText: 'subText', - }, - }, - { - source: '0', - target: '3', - value: '哈哈', - }, - { - source: '0', - target: '4', - }, - { - source: '0', - target: '5', - }, - { - source: '2', - target: '6', - }, - { - source: '3', - target: '7', - value: '哈哈哈', - }, - { - source: '4', - target: '8', - value: { - text: '来源A', - subText: 'subText', - }, - }, - ], - }; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('Render label', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const chartProps = { - data, - nodeCfg: { - size: [140, 25], - anchorPoints: (node) => { - return [ - [0, 0.5], - [1, 0.5], - ]; - }, - items: { - containerStyle: { - fill: '#fff', - }, - padding: 6, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: [2, 2, 2, 2], - }, - }, - autoFit: false, - edgeCfg: { - type: 'labels-line', - endArrow: true, - // startArrow: true, - label: { - style: { - fill: '#aaa', - fontSize: 24, - fillOpacity: 1, - }, - }, - style: (edge) => { - const stroke = edge.target === '0' ? '#c86bdd' : '#5ae859'; - return { - stroke, - // lineWidth: Math.random() * 10 + 1, - strokeOpacity: 0.5, - }; - }, - edgeStateStyles: { - hover: { - strokeOpacity: 1, - }, - }, - }, - layout: { - // rankdir: 'TB', - ranksepFunc: () => 40, - nodesepFunc: () => 20, - }, - markerCfg: (cfg) => { - const { edges } = data; - return { - position: 'right', - // position: 'bottom', - show: edges.find((item) => item.source === cfg.id), - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - const { anchorPoints } = chartRef.findById('-3')?.getModel(); - expect(anchorPoints).toEqual([ - [0, 0.5], - [1, 0.5], - ]); - }); -}); diff --git a/packages/graphs/tests/graphs/get-children-types-spec.tsx b/packages/graphs/tests/graphs/get-children-types-spec.tsx deleted file mode 100644 index e446f25b7..000000000 --- a/packages/graphs/tests/graphs/get-children-types-spec.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React, { useRef } from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { DecompositionTreeGraph } from '../../src'; -import { TreeData } from '../data'; - -describe('Get children types', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('types', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve( - [1, 2].map(() => ({ - id: 'A2' + Math.random().toString(), - value: { - title: '异步节点' + Math.random().toString(), - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '50%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - })), - ); - }, 1000); - }); - }; - - const getChildren = async (): Promise => { - return await fetchData(); - }; - const level = 2; - const chartProps = { - data: TreeData, - level, - nodeCfg: { - getChildren, - }, - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/graphs/level-fn-spec.tsx b/packages/graphs/tests/graphs/level-fn-spec.tsx deleted file mode 100644 index 07cd01c28..000000000 --- a/packages/graphs/tests/graphs/level-fn-spec.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import React, { useRef } from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { DecompositionTreeGraph } from '../../src'; -import { TreeData } from '../data'; - -describe('Level', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('show', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve( - [1, 2].map(() => ({ - id: 'A2' + Math.random().toString(), - value: { - title: '异步节点' + Math.random().toString(), - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '50%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - })), - ); - }, 1000); - }); - }; - - const getChildren = async (): Promise => { - const asyncData = await fetchData(); - return asyncData; - }; - const level = 2; - const chartProps = { - data: TreeData, - level, - nodeCfg: { - getChildren, - }, - markerCfg: (cfg) => { - return { - position: 'right' as 'right', - show: cfg.children?.length, - collapsed: cfg.depth >= level - 1, - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect( - chartRef - .findById('A1') - .get('group') - .getChildren() - .filter((item) => item.cfg.name === 'collapse-icon').length, - ).toBe(1); - expect( - chartRef - .findById('A2') - .get('group') - .getChildren() - .filter((item) => item.cfg.name === 'collapse-icon').length, - ).toBe(1); - }); -}); diff --git a/packages/graphs/tests/graphs/marker-cfg-array-spec.tsx b/packages/graphs/tests/graphs/marker-cfg-array-spec.tsx deleted file mode 100644 index ae7a7f35d..000000000 --- a/packages/graphs/tests/graphs/marker-cfg-array-spec.tsx +++ /dev/null @@ -1,114 +0,0 @@ -// @ts-nocheck -import React, { useRef } from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FlowAnalysisGraph } from '../../src'; -import { FlowData } from '../data'; - -describe('Type NodeData', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('Render data', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ - nodes: [ - { - id: Math.random().toString(), - value: { - title: '来源页面99', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: Math.random().toString(), - value: { - title: '来源页面999', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - edges: [], - }); - }, 1000); - }); - }; - const asyncData = async () => { - return await fetchData(); - }; - - const chartProps = { - data: FlowData, - fitCenter: false, - nodeCfg: { - asyncData, - size: [140, 25], - }, - markerCfg: (cfg) => { - const { id } = cfg; - const { edges } = FlowData; - if (id === '0') { - return [ - { - position: 'left', - show: true, - collapsed: !edges.find((item) => item.source === cfg.id), - }, - { - position: 'right', - show: true, - collapsed: !edges.find((item) => item.source === cfg.id), - }, - ]; - } - return { - position: 'right', - show: true, - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - const { _graphId } = chartRef.findById('-3')?.getModel(); - expect(_graphId).toBeDefined(); - expect( - chartRef - .findById('0') - .get('group') - .getChildren() - .filter((item) => item.cfg.name.startsWith('collapse-icon')).length, - ).toBe(2); - }); -}); diff --git a/packages/graphs/tests/graphs/menu-spec.tsx b/packages/graphs/tests/graphs/menu-spec.tsx deleted file mode 100644 index 1db4cf28b..000000000 --- a/packages/graphs/tests/graphs/menu-spec.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { RadialTreeGraph } from '../../src'; - -describe('RadialTreeGraph contentmenu', () => { - let container; - const data = { - id: 'Modeling Methods', - children: [ - { - id: 'Classification', - children: [ - { id: 'Logistic regression', value: 'Logistic regression' }, - { id: 'Linear discriminant analysis', value: 'Linear discriminant analysis' }, - { id: 'Rules', value: 'Rules' }, - { id: 'Decision trees', value: 'Decision trees' }, - { id: 'Naive Bayes', value: 'Naive Bayes' }, - { id: 'K nearest neighbor', value: 'K nearest neighbor' }, - { id: 'Probabilistic neural network', value: 'Probabilistic neural network' }, - { id: 'Support vector machine', value: 'Support vector machine' }, - ], - value: 'Classification', - }, - ], - value: 'Modeling Methods', - }; - - beforeEach(() => { - container = document.createElement('div'); - container.className = 'container'; - container.style.height = '600px'; - document.body.appendChild(container); - }); - afterAll(() => { - const containers = document.getElementsByClassName('container'); - Array.from(containers).forEach((el) => { - document.body.removeChild(el); - }); - container = null; - }); - - it('menu', () => { - const config = { - data, - nodeConfig: { - type: 'image', - img: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*w5uESbSe430AAAAAAAAAAABkARQnAQ', - }, - menuCfg: { - customContent: (e) => { - return ( -
- -
- ); - }, - }, - } as any; - act(() => { - render(, container); - }); - const menuContainer = document.querySelector('.g6-component-meu'); - expect(menuContainer).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/graphs/mind-map-spec.tsx b/packages/graphs/tests/graphs/mind-map-spec.tsx deleted file mode 100644 index bd773b4f0..000000000 --- a/packages/graphs/tests/graphs/mind-map-spec.tsx +++ /dev/null @@ -1,243 +0,0 @@ -import React, { useRef } from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { MindMapGraph } from '../../src'; -import { NoTitleTreeData } from '../data'; - -describe('Mind Map', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('render', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve( - [1, 2].map(() => ({ - id: 'A2' + Math.random().toString(), - value: { - items: [ - { - text: '占比', - value: '50%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - })), - ); - }, 1000); - }); - }; - - const getChildren = async (): Promise => { - const asyncData = await fetchData(); - return asyncData; - }; - const level = [-2, -1, 0, 1, 2]; - const levelTexts = level.map((l) => { - if (l < 0) return `${Math.abs(l)}层上游`; - if (l > 0) return `${Math.abs(l)}层下游`; - return `主节点`; - }); - const containerWidth = 800; - const width = 120; - const LevelFC = () => ( - - {levelTexts.map((l) => ( -
- - {l} - -
- ))} -
- ); - - const nodeSize = [width, 40]; - const chartProps = { - data: NoTitleTreeData, - autoFit: false, - width: containerWidth, - // level: 5, - layout: { - getHeight: () => { - return 40; - }, - getWidth: () => { - return nodeSize[0]; - }, - getVGap: () => { - return 16; - }, - getHGap: () => { - return (containerWidth / level.length - width) / 2; - }, - }, - // level, - nodeCfg: { - getChildren, - size: nodeSize, - padding: 4, - style: { - stroke: '#5AD8A6', - }, - items: { - padding: 0, - }, - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text, value, icon, trend } = item; - const tagWidth = 28; - const tagHeight = 16; - group?.addShape('rect', { - attrs: { - x: 0, - y: 0, - width: nodeSize[0], - height: nodeSize[1] + 8, - fill: '#5AD8A6', - fillOpacity: 0.1, - }, - // group 内唯一字段 - name: `container-${Math.random()}`, - }); - group?.addShape('rect', { - attrs: { - x: startX, - y: startY, - width: tagWidth, - height: tagHeight, - fill: '#47c796', - }, - // group 内唯一字段 - name: `tag-${Math.random()}`, - }); - group?.addShape('text', { - attrs: { - textBaseline: 'middle', - textAlign: 'center', - x: startX + tagWidth / 2, - y: startY + tagHeight / 2, - text: '人群', - fill: '#fff', - fontSize: 10, - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - group?.addShape('text', { - attrs: { - textBaseline: 'middle', - textAlign: 'start', - x: startX + tagWidth + 4, - y: startY + tagHeight / 2, - text: '人群服务名称', - fill: 'rgba(0,0,0,.65)', - fontSize: 10, - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - const textMargin = 10; - const sense = group?.addShape('text', { - attrs: { - textBaseline: 'top', - textAlign: 'start', - x: startX, - y: startY + tagHeight + textMargin, - text: '所属场景:', - fill: 'rgba(0,0,0,.45)', - fontSize: 10, - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - group?.addShape('text', { - attrs: { - textBaseline: 'top', - textAlign: 'start', - x: sense.getBBox().maxX, - y: startY + tagHeight + textMargin, - text: '这是场景名称', - fill: 'rgba(0,0,0,.45)', - fontSize: 10, - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - // 行高 - return 14; - }, - }, - markerCfg: (cfg) => { - const { children = [], id } = cfg; - if (id === 'A0') { - return [ - { - position: 'left' as const, - show: !!children?.length, - }, - { - position: 'right' as const, - show: !!children?.length, - }, - ]; - } - return { - position: cfg.x > 0 ? 'right' : 'left', - show: true, - } as const; - }, - }; - - act(() => { - render( -
-
{LevelFC()}
- -
, - container, - ); - }); - expect(chartRef).not.toBeUndefined(); - expect( - chartRef - .findById('A0') - .get('group') - .getChildren() - .filter((item) => item.cfg.name.startsWith('collapse-icon')).length, - ).toBe(2); - }); -}); diff --git a/packages/graphs/tests/graphs/node-explore-spec.tsx b/packages/graphs/tests/graphs/node-explore-spec.tsx deleted file mode 100644 index 4ddb991ba..000000000 --- a/packages/graphs/tests/graphs/node-explore-spec.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import React, { useRef } from 'react'; -import { renderHook } from '@testing-library/react-hooks/server'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { RadialGraph } from '../../src'; -import { RadialData } from '../data'; -const refs = renderHook(() => useRef()) as any; - -describe('RadialGraph contentmenu', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - container.className = 'container'; - container.style.height = '1400px'; - container.style.height = '600px'; - document.body.appendChild(container); - }); - afterAll(() => { - const containers = document.getElementsByClassName('container'); - Array.from(containers).forEach((el) => { - document.body.removeChild(el); - }); - container = null; - }); - - it('explore', () => { - const fetchData = (node) => { - return new Promise((resolve, reject) => { - const data = new Array(Math.ceil(Math.random() * 10) + 2).fill('').map((_, i) => i + 1); - setTimeout(() => { - resolve({ - nodes: [ - { - ...node, - }, - ].concat( - data.map((i) => { - return { - id: `${node.id}-${i}`, - label: `${node.label}-${i}`, - }; - }), - ), - edges: data.map((i) => { - return { - source: node.id, - target: `${node.id}-${i}`, - }; - }), - }); - }, 1000); - }); - }; - - const asyncData = async (node) => { - return await fetchData(node); - }; - - const config = { - data: RadialData, - autoFit: false, - layout: { - unitRadius: 80, - /** 节点直径 */ - nodeSize: 20, - /** 节点间距 */ - nodeSpacing: 10, - }, - nodeCfg: { - asyncData, - size: 20, - style: { - fill: '#6CE8DC', - stroke: '#6CE8DC', - }, - labelCfg: { - style: { - fontSize: 5, - fill: '#000', - }, - }, - }, - menuCfg: { - customContent: (e) => { - return ( -
- -
- ); - }, - }, - edgeCfg: { - style: { - lineWidth: 1, - }, - endArrow: { - d: 10, - size: 2, - }, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - onReady: (graph) => { - refs.current = graph; - // @ts-ignore - window.g = graph; - }, - } as any; - act(() => { - render(, container); - }); - const menuContainer = document.querySelector('.g6-component-meu'); - expect(menuContainer).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/graphs/percent-badge-auto-width-spec.tsx b/packages/graphs/tests/graphs/percent-badge-auto-width-spec.tsx deleted file mode 100644 index 003b69c89..000000000 --- a/packages/graphs/tests/graphs/percent-badge-auto-width-spec.tsx +++ /dev/null @@ -1,157 +0,0 @@ -// @ts-nocheck -import React, { useRef } from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { DecompositionTreeGraph } from '../../src'; - -describe('Percent badge with auto width', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('percent', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const stroke = '#EA2F97'; - const config = { - data: { - id: 'total', - value: { title: '首屏体感均值', items: [{ text: '总耗时:2059ms' }] }, - children: [ - { id: 'beforeappstart', value: { title: '资源加载耗时', items: [{ text: '耗时:806ms' }], percent: '0.39' } }, - { - id: 'beforerequest', - value: { - title: '接口请求前串行逻辑耗时(可能是获取定位等)', - items: [{ text: '耗时:54ms' }], - percent: '0.03', - }, - }, - { - id: 'c2crequestcost', - value: { - title: '端到端耗时', - items: [{ text: '耗时:2121ms' }, { text: '预加载节省耗时:1180ms' }], - percent: '0.46', - }, - children: [ - { - id: 'queryTradeBuy)', - value: { - title: '服务总耗时', - items: [{ text: 'queryTradeBuy' }, { text: '耗时:1613ms' }], - percent: '0.76', - }, - children: [ - { - id: 'FzHotelTradeService#queryHotelInitBizInfo4Render', - value: { - title: '获取行业信息(商品、卖家、买家等)', - items: [{ text: 'FzHotelTradeService#queryHotelInitBizInfo4Render' }, { text: '耗时:593ms' }], - percent: '0.37', - }, - }, - { - id: 'PayingMemberService#getMemberCardItem', - value: { - title: '查询菲住联盟会员卡信息', - items: [{ text: 'PayingMemberService#getMemberCardItem' }, { text: '耗时:4ms' }], - percent: '0.00', - }, - }, - { - id: 'ConfirmOrderPageService#render', - value: { - title: '调用业务中台fliggy-buy2获取优惠/资金等信息', - items: [{ text: 'ConfirmOrderPageService#render' }, { text: '耗时:450ms' }], - percent: '0.28', - }, - }, - { - id: 'FzHotelTradeBuyService#enrichHotelRender4Buy', - value: { - title: '获取行业组件信息', - items: [{ text: 'FzHotelTradeBuyService#enrichHotelRender4Buy' }, { text: '耗时:19ms' }], - percent: '0.01', - }, - }, - { - id: 'TempStoreService#store', - value: { - title: '保存奥创组件信息', - items: [{ text: 'TempStoreService#store' }, { text: '耗时:12ms' }], - percent: '0.01', - }, - }, - { - id: 'FfaInterflowRegisterService#getRegisterInfo4Trade', - value: { - title: '获取会员注册信息', - items: [{ text: 'FfaInterflowRegisterService#getRegisterInfo4Trade' }, { text: '耗时:48ms' }], - percent: '0.03', - }, - }, - { - id: 'GeneralRightService#getRightInfo', - value: { - title: '获取会员权益信息', - items: [{ text: 'GeneralRightService#getRightInfo' }, { text: '耗时:40ms' }], - percent: '0.03', - }, - }, - { - id: 'InsSceneService#recommend', - value: { - title: '保险推荐', - items: [{ text: 'InsSceneService#recommend' }, { text: '耗时:241ms' }], - percent: '0.15', - }, - }, - ], - }, - { - id: 'netWork', - value: { title: '网络开销(http传输+mtop层)', items: [{ text: '耗时:508ms' }], percent: '0.24' }, - }, - ], - }, - { id: 'rendercost', value: { title: '渲染耗时', items: [{ text: '耗时:330ms' }], percent: '0.16' } }, - ], - }, - autoFit: true, - behaviors: [], - nodeCfg: { - style: { stroke: '#40a9ff' }, - percent: { size: 5, position: 'bottom' }, - autoWidth: true, - title: { autoEllipsis: true }, - items: {}, - nodeStateStyles: { hover: { stroke: '#1890ff', lineWidth: 2 } }, - }, - edgeCfg: { endArrow: { fill: '#40a9ff' } }, - }; - - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect( - chartRef - .getNodes()[0] - .get('group') - .getChildren() - .filter((item) => item.cfg.name === 'percent-rect-background'), - ).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/graphs/percent-badge-spec.tsx b/packages/graphs/tests/graphs/percent-badge-spec.tsx deleted file mode 100644 index 3629c5c98..000000000 --- a/packages/graphs/tests/graphs/percent-badge-spec.tsx +++ /dev/null @@ -1,231 +0,0 @@ -// @ts-nocheck -import React, { useRef } from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { DecompositionTreeGraph } from '../../src'; - -describe('Percent badge', () => { - let container; - const data = { - id: 'A0', - value: { - title: '全年降本增收', - items: [ - { - text: '3031万', - value: '80%', - }, - ], - percent: 0.8, - }, - children: [ - { - id: 'A1', - value: { - title: '降本增收项目1', - percent: 0.7, - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '70%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '降本增收项目1-1', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '降本增收项目1-2', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A13', - value: { - title: '降本增收项目1-3', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '降本增收项目2', - percent: 0.3, - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('percent', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const stroke = '#EA2F97'; - const chartProps = { - data, - fitCenter: false, - nodeCfg: { - size: [140, 25], - percent: { - position: 'bottom', - size: 4, - style: (arg) => { - return { - radius: [0, 0, 0, 2], - fill: arg.value.percent > 0.3 ? stroke : '#1f8fff', - }; - }, - // backgroundStyle: { - // // fill: 'red', - // }, - }, - items: { - containerStyle: { - fill: '#fff', - }, - padding: 6, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: (arg) => { - return { - fill: '#fff', - radius: 2, - stroke: arg.value.percent > 0.3 ? stroke : '#1f8fff', - }; - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }, - }, - style: (edge) => { - return { - stroke: '#518AD3', - strokeOpacity: 0.5, - }; - }, - endArrow: { - fill: '#518AD3', - }, - edgeStateStyles: { - hover: { - strokeOpacity: 1, - }, - }, - }, - markerCfg: (cfg) => { - return { - position: 'right', - show: cfg.children?.length, - style: (arg) => { - return { - stroke: arg.value.percent > 0.3 ? stroke : '#1f8fff', - }; - }, - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect( - chartRef - .getNodes()[0] - .get('group') - .getChildren() - .filter((item) => item.cfg.name === 'percent-rect-background'), - ).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/graphs/tooltip-spec.tsx b/packages/graphs/tests/graphs/tooltip-spec.tsx deleted file mode 100644 index 45d44d9df..000000000 --- a/packages/graphs/tests/graphs/tooltip-spec.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { DecompositionTreeGraph } from '../../src'; - -describe('DecompositionTreeGraph tooltip', () => { - let container; - const data = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }; - beforeEach(() => { - container = document.createElement('div'); - container.className = 'container'; - container.style.height = '600px'; - document.body.appendChild(container); - }); - beforeAll(() => { - jest.useFakeTimers(); - }); - afterAll(() => { - const containers = document.getElementsByClassName('container'); - Array.from(containers).forEach((el) => { - document.body.removeChild(el); - }); - container = null; - }); - - it.skip('tooltip', () => { - let refs; - const after1000ms = (callback: Function) => { - setTimeout(() => { - callback(); - }, 1000); - }; - jest.spyOn(global, 'setTimeout'); - const config = { - data, - nodeConfig: { - type: 'rect', - }, - markerCfg: (cfg) => { - const { children } = cfg; - return { - show: children?.length, - }; - }, - tooltipCfg: { - container: document.getElementsByTagName('body')[0], - shouldBegin: (e) => { - return true; - }, - customContent: (e) => { - return 'custom content'; - }, - }, - onReady: (graph) => { - refs = graph; - }, - } as any; - act(() => { - render(, container); - }); - const tooltipContainer = document.querySelector('.g6-component-tooltip'); - expect(tooltipContainer).not.toBeUndefined(); - const node = refs.getNodes()[0]; - refs.emit('node:mouseenter', { item: node }); - after1000ms(() => { - const tooltipContent = document.querySelector('.g6-tooltip'); - expect(tooltipContent.innerHTML).toBe('custom content'); - }); - }); -}); diff --git a/packages/graphs/tests/graphs/tree-level-spec.tsx b/packages/graphs/tests/graphs/tree-level-spec.tsx deleted file mode 100644 index ae34fd7ad..000000000 --- a/packages/graphs/tests/graphs/tree-level-spec.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import React, { useRef } from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { DecompositionTreeGraph } from '../../src'; -import { TreeData } from '../data'; - -describe('Tree level', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - it('render level', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve( - [1, 2].map(() => ({ - id: 'A2' + Math.random().toString(), - value: { - title: '异步节点' + Math.random().toString(), - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '50%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - })), - ); - }, 1000); - }); - }; - - const getChildren = async (): Promise => { - return await fetchData(); - }; - const level = 2; - const chartProps = { - data: TreeData, - autoFit: false, - level, - nodeCfg: { - getChildren, - }, - markerCfg: { - show: true, - position: 'right' as const, - }, - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect(chartRef.findById('A1').getModel().children.length).toBe(0); - }); -}); diff --git a/packages/graphs/tests/issues/1077-spec.tsx b/packages/graphs/tests/issues/1077-spec.tsx deleted file mode 100644 index 5ba3688a2..000000000 --- a/packages/graphs/tests/issues/1077-spec.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FlowAnalysisGraph } from '../../src'; - -describe('Custom layout', () => { - let container; - const data = { - nodes: [ - { - id: '1', - x: 20, - y: 100, - value: { - title: 'A', - items: [ - { - text: 'text', - }, - ], - }, - }, - { - id: '2', - x: 20, - y: 200, - value: { - title: 'B', - items: [ - { - text: 'text ', - }, - ], - }, - }, - ], - edges: [ - { - source: '1', - target: '2', - }, - ], - }; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('Layout with custom position', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const chartProps = { - data, - customLayout: true, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - const node = chartRef.findById('2'); - const { x, y } = node.getModel(); - expect(x).toBe(20); - expect(y).toBe(200); - }); -}); diff --git a/packages/graphs/tests/issues/1286-spec.tsx b/packages/graphs/tests/issues/1286-spec.tsx deleted file mode 100644 index d0a6db2ac..000000000 --- a/packages/graphs/tests/issues/1286-spec.tsx +++ /dev/null @@ -1,142 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { OrganizationGraph } from '../../src'; - -describe('Type NodeData', () => { - let container; - const data = { - id: 'root', - value: { - name: 'Joel Alan', - title: 'CEO', - // 建议使用 bae64 数据 - icon: 'https://avatars.githubusercontent.com/u/31396322?v=4', - }, - children: [ - { - id: 'joel', - value: { - name: 'Joel Alan', - }, - children: [ - { - id: 'c1', - value: { - name: 'c1', - }, - children: [ - { - id: 'c1-1', - value: { - name: 'c1-1', - }, - }, - { - id: 'c1-2', - value: { - name: 'c1-2', - }, - children: [ - { - id: 'c1-2-1', - value: { - name: 'c1-2-1', - }, - }, - { - id: 'c1-2-2', - value: { - name: 'c1-2-2', - }, - }, - ], - }, - ], - }, - { - id: 'c2', - value: { - name: 'c2', - }, - }, - { - id: 'c3', - value: { - name: 'c3', - }, - children: [ - { - id: 'c3-1', - value: { - name: 'c3-1', - }, - }, - { - id: 'c3-2', - value: { - name: 'c3-2', - }, - children: [ - { - id: 'c3-2-1', - value: { - name: 'c3-2-1', - }, - }, - { - id: 'c3-2-2', - value: { - name: 'c3-2-2', - }, - }, - { - id: 'c3-2-3', - value: { - name: 'c3-2-3', - }, - }, - ], - }, - { - id: 'c3-3', - value: { - name: 'c3-3', - }, - }, - ], - }, - ], - }, - ], - }; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - // document.body.removeChild(container); - // container = null; - }); - - it('Render data', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const chartProps = { - data, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - // const node = chartRef.findById('2'); - // const { x, y } = node.getModel(); - expect(1).toBe(1); - }); -}); diff --git a/packages/graphs/tests/issues/1291-spec.tsx b/packages/graphs/tests/issues/1291-spec.tsx deleted file mode 100644 index 287c32c65..000000000 --- a/packages/graphs/tests/issues/1291-spec.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { OrganizationGraph } from '../../src'; -import { ORG_DATA } from '../data'; - -describe('Content can be drag', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('render', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (graph) => { - chartRef = graph; - }, - }; - const config = { - height: 600, - data: ORG_DATA, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - } as any; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect(chartRef.findById('root').getModel()._draggable).toBeTruthy(); - }); -}); diff --git a/packages/graphs/tests/issues/1338-spec.tsx b/packages/graphs/tests/issues/1338-spec.tsx deleted file mode 100644 index bff797790..000000000 --- a/packages/graphs/tests/issues/1338-spec.tsx +++ /dev/null @@ -1,262 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FlowAnalysisGraph } from '../../src'; - -describe('Auto width', () => { - let container; - const data = { - nodes: [ - { - id: '-3', - value: { - title: '来源页面A', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-2', - value: { - title: '来源页面B', - items: [ - { - text: '点击UV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-1', - value: { - title: '来源页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '0', - value: { - title: '活动页面', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '1', - value: { - title: '去向页面A', - items: [ - { - text: '访问页面UV(很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长)', - }, - ], - }, - }, - { - id: '2', - value: { - title: '去向页面B', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '3', - value: { - title: '去向页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '4', - value: { - title: '去向页面D', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '5', - value: { - title: '去向页面E', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '7', - value: { - title: '去向页面G', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '8', - value: { - title: '去向页面H', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - ], - edges: [ - { - source: '-3', - target: '0', - value: '来源A', - }, - { - source: '-2', - target: '0', - value: '来源B', - }, - { - source: '-1', - target: '0', - value: '来源C', - }, - { - source: '0', - target: '1', - }, - { - source: '0', - target: '2', - }, - { - source: '0', - target: '3', - }, - { - source: '0', - target: '4', - }, - { - source: '0', - target: '5', - }, - { - source: '2', - target: '6', - }, - { - source: '3', - target: '7', - }, - { - source: '4', - target: '8', - }, - ], - }; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('Render', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const chartProps = { - data, - nodeCfg: { - size: [140, 25], - autoWidth: true, - items: { - containerStyle: { - fill: '#fff', - }, - padding: 6, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: 2, - }, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - const node = chartRef.findById('1'); - const { maxX, minX } = node.getBBox(); - const { size } = node.getModel(); - expect(maxX - minX).toBeGreaterThan(size[0]); - }); -}); diff --git a/packages/graphs/tests/issues/1441-spec.tsx b/packages/graphs/tests/issues/1441-spec.tsx deleted file mode 100644 index a39df9cda..000000000 --- a/packages/graphs/tests/issues/1441-spec.tsx +++ /dev/null @@ -1,167 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { DecompositionTreeGraph } from '../../src'; - -describe('Fit center', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('Render', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const data = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '广东', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '广西', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A132', - value: { - title: '海南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '华北', - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }; - - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve( - [1, 2].map(() => ({ - id: 'A2' + Math.random().toString().substr(2, 10), - value: { - title: '异步节点' + Math.random().toString(), - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '50%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - })), - ); - }, 1000); - }); - }; - - const getChildren = async () => { - const asyncData = await fetchData(); - return asyncData; - }; - - const config = { - data, - autoFit: false, - nodeCfg: { - getChildren, - }, - markerCfg: (cfg) => { - const { children } = cfg; - return { - show: true, - collapsed: !children?.length, - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - } as any; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/issues/1489-spec.tsx b/packages/graphs/tests/issues/1489-spec.tsx deleted file mode 100644 index 1310931f6..000000000 --- a/packages/graphs/tests/issues/1489-spec.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { RadialTreeGraph } from '../../src'; - -describe('Image node', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('Render', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const data = { - id: 'Modeling Methods', - children: [ - { - id: 'Classification', - type: 'image', - img: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*w5uESbSe430AAAAAAAAAAABkARQnAQ', - children: [ - { id: 'Logistic regression', value: 'Logistic regression' }, - { id: 'Linear discriminant analysis', value: 'Linear discriminant analysis' }, - { id: 'Rules', value: 'Rules' }, - { id: 'Decision trees', value: 'Decision trees' }, - { id: 'Naive Bayes', value: 'Naive Bayes' }, - { id: 'K nearest neighbor', value: 'K nearest neighbor' }, - { id: 'Probabilistic neural network', value: 'Probabilistic neural network' }, - { id: 'Support vector machine', value: 'Support vector machine' }, - ], - value: 'Classification', - }, - { - id: 'Consensus', - children: [ - { - id: 'Models diversity', - children: [ - { id: 'Different initializations', value: 'Different initializations' }, - { id: 'Different parameter choices', value: 'Different parameter choices' }, - { id: 'Different architectures', value: 'Different architectures' }, - { id: 'Different modeling methods', value: 'Different modeling methods' }, - { id: 'Different training sets', value: 'Different training sets' }, - { id: 'Different feature sets', value: 'Different feature sets' }, - ], - value: 'Models diversity', - }, - { - id: 'Methods', - children: [ - { id: 'Classifier selection', value: 'Classifier selection' }, - { id: 'Classifier fusion', value: 'Classifier fusion' }, - ], - value: 'Methods', - }, - { - id: 'Common', - children: [ - { id: 'Bagging', value: 'Bagging' }, - { id: 'Boosting', value: 'Boosting' }, - { id: 'AdaBoost', value: 'AdaBoost' }, - ], - value: 'Common', - }, - ], - value: 'Consensus', - }, - { - id: 'Regression', - children: [ - { id: 'Multiple linear regression', value: 'Multiple linear regression' }, - { id: 'Partial least squares', value: 'Partial least squares' }, - { - id: 'Multi-layer feedforward neural network', - value: 'Multi-layer feedforward neural network', - }, - { id: 'General regression neural network', value: 'General regression neural network' }, - { id: 'Support vector regression', value: 'Support vector regression' }, - ], - value: 'Regression', - }, - ], - value: 'Modeling Methods', - }; - - const config = { - data, - autoFit: false, - nodeCfg: { - type: 'image', - img: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*mpPvTKdP7cIAAAAAAAAAAABkARQnAQ', - }, - layout: { - type: 'compactBox', - direction: 'RL', - getId: function getId(d) { - return d.id; - }, - getHeight: () => { - return 26; - }, - getWidth: () => { - return 26; - }, - getVGap: () => { - return 20; - }, - getHGap: () => { - return 30; - }, - radial: true, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - } as any; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/issues/1577-spec.tsx b/packages/graphs/tests/issues/1577-spec.tsx deleted file mode 100644 index 718299049..000000000 --- a/packages/graphs/tests/issues/1577-spec.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FlowAnalysisGraph } from '../../src'; -import { FlowData } from '../data'; - -describe('Image node', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('Render', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - - const config = { - data: FlowData, - level: 2, - nodeCfg: { - size: [140, 25], - items: { - containerStyle: { - fill: '#fff', - }, - padding: 6, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: [2, 2, 2, 2], - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }, - }, - style: (edge) => { - const stroke = edge.target === '0' ? '#c86bdd' : '#5ae859'; - return { - stroke, - lineWidth: Math.random() * 10 + 1, - strokeOpacity: 0.5, - }; - }, - edgeStateStyles: { - hover: { - strokeOpacity: 1, - }, - }, - }, - markerCfg: (cfg) => { - const { edges } = FlowData; - return { - position: 'right', - show: edges.find((item) => item.source === cfg.id), - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - } as any; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/issues/1614-spec.tsx b/packages/graphs/tests/issues/1614-spec.tsx deleted file mode 100644 index 1bdff966e..000000000 --- a/packages/graphs/tests/issues/1614-spec.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { DecompositionTreeGraph } from '../../src'; -import { TreeData } from '../data'; - -describe('React 18', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('render', () => { - let chartRef = undefined; - - const props = { - className: 'container', - onReady: (ref) => { - chartRef = ref; - }, - }; - const spyWarn = jest.spyOn(console, 'warn'); - - const config = { - data: TreeData, - autoFit: false, - width: 300, - height: 300, - tooltipCfg: { - customContent: () => { - return
tooltip
; - }, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - } as any; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect(spyWarn).toBeCalledTimes(0); - }); -}); diff --git a/packages/graphs/tests/issues/1752-spec.tsx b/packages/graphs/tests/issues/1752-spec.tsx deleted file mode 100644 index 9b3c8d8fa..000000000 --- a/packages/graphs/tests/issues/1752-spec.tsx +++ /dev/null @@ -1,174 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { DecompositionTreeGraph, FlowAnalysisGraph } from '../../src'; -import { TreeData, FlowData } from '../data'; - -describe('Marker Events', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('render DecompositionTreeGraph', () => { - let chartRef = undefined; - let ext; - const props = { - className: 'container', - onReady: (graph) => { - chartRef = graph; - graph.on('marker:click', (evt, extra) => { - ext = extra; - }); - graph.emit('marker:click', '', { - type: 'collapse', - collapsed: true, - }); - }, - }; - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve( - [1, 2].map(() => ({ - id: 'A2' + Math.random().toString(), - value: { - title: '异步节点' + Math.random().toString(), - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '50%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - })), - ); - }, 1000); - }); - }; - - const getChildren = async (): Promise => { - return await fetchData(); - }; - const config = { - data: TreeData, - height: 600, - nodeCfg: { - getChildren, - }, - tooltipCfg: { - customContent: () => { - return
tooltip
; - }, - }, - markerCfg: (cfg) => { - const { children } = cfg; - return { - show: true, - collapsed: !children?.length, - }; - }, - - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - } as any; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect(ext).toEqual({ - type: 'collapse', - collapsed: true, - }); - }); - - it('render FlowAnalysisGraph', () => { - let chartRef = undefined; - - const props = { - className: 'container', - onReady: (graph) => { - chartRef = graph; - graph.on('marker:click', (evt, ext) => { - console.log(ext); - }); - }, - }; - const spyWarn = jest.spyOn(console, 'warn'); - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ - nodes: [ - { - id: Math.random().toString(), - value: { - title: '来源页面99', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: Math.random().toString(), - value: { - title: '来源页面999', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - edges: [], - }); - }, 1000); - }); - }; - const asyncData = async () => { - return await fetchData(); - }; - const config = { - data: FlowData, - height: 600, - tooltipCfg: { - customContent: () => { - return
tooltip
; - }, - }, - nodeCfg: { - asyncData, - }, - markerCfg: (cfg) => { - const { edges } = FlowData; - return { - position: 'right', - // show: edges.find((item) => item.source === cfg.id), - show: true, - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - } as any; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - }); -}); diff --git a/packages/graphs/tests/issues/1764-spec.tsx b/packages/graphs/tests/issues/1764-spec.tsx deleted file mode 100644 index c7b199168..000000000 --- a/packages/graphs/tests/issues/1764-spec.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { DecompositionTreeGraph, FlowAnalysisGraph } from '../../src'; -import { TreeData } from '../data'; - -describe('Set Ellipsis', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it.skip('render title', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (graph) => { - chartRef = graph; - }, - }; - const config = { - data: TreeData, - height: 600, - nodeCfg: { - title: { - style: { - fontSize: 12, - }, - }, - }, - tooltipCfg: { - customContent: () => { - return
tooltip
; - }, - }, - markerCfg: (cfg) => { - const { children } = cfg; - return { - show: true, - collapsed: !children?.length, - }; - }, - - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - } as any; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect( - chartRef - .findById('A1') - .get('group') - .getChildren() - .filter((group) => group.get('name') === 'title')[0] - .attr('text'), - ).toBe('华南华北verylong...'); - expect( - chartRef - .findById('A2') - .get('group') - .getChildren() - .filter((group) => group.get('name') === 'title')[0] - .attr('text'), - ).toBe('华北华南真的很大...'); - }); -}); diff --git a/packages/graphs/tests/issues/1801-spec.tsx b/packages/graphs/tests/issues/1801-spec.tsx deleted file mode 100644 index 5cdf05560..000000000 --- a/packages/graphs/tests/issues/1801-spec.tsx +++ /dev/null @@ -1,387 +0,0 @@ -import React from 'react'; -import { render } from '../../src/utils'; -import { act } from 'react-dom/test-utils'; -import { FlowAnalysisGraph } from '../../src'; - -describe('Get Flow Data', () => { - let container; - - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it('render', () => { - let chartRef = undefined; - const props = { - className: 'container', - onReady: (graph) => { - chartRef = graph; - }, - }; - const config = { - height: 600, - data: { - nodes: [ - { - id: 'a', - value: { - id: 'a', - index: 0, - app_name: 'a', - biz_name: '交通', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'aaaaa', - percent: 0, - }, - }, - { - id: 'b', - value: { - id: 'b', - index: 1, - app_name: 'b', - biz_name: '基础服务', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'bbbbb', - percent: 0, - }, - }, - { - id: 'c', - value: { - id: 'c', - index: 2, - app_name: 'c', - biz_name: '自驾出行', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'ccccc', - percent: 0, - }, - }, - { - id: 'd', - value: { - id: 'd', - index: 3, - app_name: 'd', - biz_name: '导航', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'ddddd', - percent: 0, - }, - }, - { - id: 'e', - value: { - id: 'e', - index: 4, - app_name: 'e', - biz_name: '', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'eeeee', - percent: 0, - }, - }, - { - id: 'f', - value: { - id: 'f', - index: 5, - app_name: 'f', - biz_name: '应用服务', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'fffff', - percent: 0, - }, - }, - { - id: 'g', - value: { - id: 'g', - index: 6, - app_name: 'g', - biz_name: '导航', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'ggggg', - percent: 0, - }, - }, - { - id: 'h', - value: { - id: 'h', - index: 7, - app_name: 'h', - biz_name: '应用服务', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'hhhhh', - percent: 0, - }, - }, - { - id: 'i', - value: { - id: 'i', - index: 8, - app_name: 'i', - biz_name: '应用服务', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'iiiii', - percent: 0, - }, - }, - { - id: 'j', - value: { - id: 'j', - index: 9, - app_name: 'j', - biz_name: '应用服务', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'jjjjj', - percent: 0, - }, - }, - { - id: 'k', - value: { - id: 'k', - index: 10, - app_name: 'k', - biz_name: '导航', - score: 0, - items: [], - changes: [], - is_alarm_app: true, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'kkkkk', - percent: 0, - }, - }, - { - id: 'l', - value: { - id: 'l', - index: 11, - app_name: 'l', - biz_name: '', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'lllll', - percent: 0, - }, - }, - { - id: 'm', - value: { - id: 'm', - index: 12, - app_name: 'm', - biz_name: '接入层', - score: 0, - items: [], - changes: [], - is_alarm_app: false, - is_root_app: false, - threshold: 0, - metrics: [], - title: 'mmmmm', - percent: 0, - }, - }, - ], - edges: [ - { - source: 'a', - target: 'k', - }, - { - source: 'c', - target: 'k', - }, - { - source: 'd', - target: 'k', - }, - { - source: 'e', - target: 'k', - }, - { - source: 'f', - target: 'k', - }, - { - source: 'g', - target: 'k', - }, - { - source: 'i', - target: 'k', - }, - { - source: 'j', - target: 'k', - }, - { - source: 'h', - target: 'f', - }, - { - source: 'b', - target: 'i', - }, - { - source: 'm', - target: 'b', - }, - { - source: 'l', - target: 'm', - }, - ], - // app_name: 'k', - }, - autoFit: false, - fitCenter: true, - minimapCfg: { - show: true, - refresh: true, - size: [100, 50], - className: 'graph-minimap', - type: 'delegate', - delegateStyle: { - fill: '#91caff', - }, - }, - toolbarCfg: { - show: true, - }, - nodeCfg: { - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 14, - }, - autoEllipsis: true, - }, - size: [220, 40], - percent: { - position: 'bottom', - size: 4, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - anchorPoints: [ - [0.5, 0], - [0.5, 1], - ], - }, - edgeCfg: { - type: 'polyline', - endArrow: true, - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 0.5, - }, - }, - edgeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - }, - layout: { - rankdir: 'TB', - }, - behaviors: ['drag-canvas', 'zoom-canvas'], - } as any; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect(chartRef.get('data').edges.length).toBe(12); - }); -}); diff --git a/packages/graphs/tests/utils/count-by-spec.ts b/packages/graphs/tests/utils/count-by-spec.ts deleted file mode 100644 index 405b11635..000000000 --- a/packages/graphs/tests/utils/count-by-spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { countBy } from '../../src/utils'; - -describe('utils countBy', () => { - it('countBy', () => { - const data = [ - { user: 'barney', active: true }, - { user: 'betty', active: true }, - { user: 'fred', active: false }, - ]; - const countObj1 = countBy(data, (item) => item.active); - expect(countObj1['true']).toBe(2); - expect(countObj1['false']).toBe(1); - const countObj2 = countBy( - data.map((item) => item.user), - (item) => item, - ); - expect(countObj2['barney']).toBe(1); - expect(countObj2['betty']).toBe(1); - expect(countObj2['fred']).toBe(1); - const countObj3 = countBy(data.map((item) => item.user)); - expect(countObj3['barney']).toBe(1); - expect(countObj3['betty']).toBe(1); - expect(countObj3['fred']).toBe(1); - }); -}); diff --git a/packages/graphs/tests/utils/deep-clone.spec.ts b/packages/graphs/tests/utils/deep-clone.spec.ts deleted file mode 100644 index d737313af..000000000 --- a/packages/graphs/tests/utils/deep-clone.spec.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { deepClone } from '../../src/utils'; - -describe('utils deepClone', () => { - it('deepClone', () => { - const data = { - nodes: [ - { - id: 'node1', - }, - { - id: 'node2', - }, - ], - edges: [ - { - source: 'node1', - target: 'node2', - }, - ], - }; - - const cloneObj = deepClone(data); - expect(deepClone(undefined)).toBeUndefined(); - expect(JSON.stringify(data)).toEqual(JSON.stringify(cloneObj)); - // 修改 clone 后的数据 - cloneObj.nodes.push({ - id: 'node3', - }); - - expect(data).not.toEqual(cloneObj); - expect(JSON.stringify(data)).not.toEqual(JSON.stringify(cloneObj)); - }); -}); diff --git a/packages/graphs/tests/utils/is-type-spec.ts b/packages/graphs/tests/utils/is-type-spec.ts deleted file mode 100644 index 57bd4a984..000000000 --- a/packages/graphs/tests/utils/is-type-spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { isType } from '../../src/utils'; - -describe('utils', () => { - it('is type', () => { - expect(isType('s', 'String')).toBeTruthy(); - expect(isType(0, 'Number')).toBeTruthy(); - expect(isType({}, 'Object')).toBeTruthy(); - expect(isType(undefined, 'Undefined')).toBeTruthy(); - expect(isType(null, 'Null')).toBeTruthy(); - expect(isType(NaN, 'Number')).toBeTruthy(); - expect(isType([1, 2], 'Array')).toBeTruthy(); - }); -}); diff --git a/packages/graphs/tsconfig.json b/packages/graphs/tsconfig.json deleted file mode 100644 index 74ecfab18..000000000 --- a/packages/graphs/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["src", "tests"] -} diff --git a/packages/graphs/tsconfig.prod.json b/packages/graphs/tsconfig.prod.json deleted file mode 100644 index 596e2cf72..000000000 --- a/packages/graphs/tsconfig.prod.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["src"] -} diff --git a/packages/graphs/webpack.config.js b/packages/graphs/webpack.config.js deleted file mode 100644 index 691af96c1..000000000 --- a/packages/graphs/webpack.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const { getWebpackConfig } = require('../../config/webpack'); - -module.exports = getWebpackConfig('graphs', 'Graphs'); diff --git a/packages/maps/.babelrc b/packages/maps/.babelrc deleted file mode 100644 index 633f93f42..000000000 --- a/packages/maps/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../.babelrc" -} diff --git a/packages/maps/.eslintignore b/packages/maps/.eslintignore deleted file mode 100644 index cc6f6d2b0..000000000 --- a/packages/maps/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -dist -es -lib -node_modules -tests \ No newline at end of file diff --git a/packages/maps/.eslintrc.js b/packages/maps/.eslintrc.js deleted file mode 100644 index 6a8e85093..000000000 --- a/packages/maps/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '../../.eslintrc.js', -}; diff --git a/packages/maps/CHANGELOG.md b/packages/maps/CHANGELOG.md deleted file mode 100644 index 2734bb194..000000000 --- a/packages/maps/CHANGELOG.md +++ /dev/null @@ -1,24 +0,0 @@ -## 1.0.6 - -`2022-11-08` - -- 🐞 修复 L7 依赖丢失 - -## 1.0.5(dist-tag) - -`2022-11-08` - -- 🔥 底层依赖升级 -- 🐞 修复自定义 errorTemplate 非 callback 时无效 - -## 1.0.4 - -`2022-08-22` - -- 🔥 优化地图更新逻辑 - -## 1.0.3 - -`2022-07-19` - -- 🐞 [Critical security vulnerabilities minimist](https://github.com/ant-design/ant-design-charts/issues/1289) diff --git a/packages/maps/README.md b/packages/maps/README.md deleted file mode 100644 index 2cedc4f6f..000000000 --- a/packages/maps/README.md +++ /dev/null @@ -1,150 +0,0 @@ -# @ant-design/maps - -
- -A React geographic visualization component library, based on [L7Plot](https://github.com/antvis/L7Plot). - -![npm](https://img.shields.io/npm/v/@ant-design/maps) ![npm](https://img.shields.io/npm/dm/@ant-design/maps) [![GitHub stars](https://img.shields.io/github/stars/ant-design/ant-design-charts)](https://github.com/ant-design/ant-design-charts/stargazers) [![npm License](https://img.shields.io/npm/l/@ant-design/charts.svg)](https://www.npmjs.com/package/@ant-design/charts) - -

- Website • - Quick Start • - Gallery • - FAQ • - Blog -

- -
- -## Case - -
- - - -
-
- - - -
- -## ✨ Features - -- Easy to use -- TypeScript - -## 📦 Installation - -```bash | pure -$ npm install @ant-design/maps -``` - -## 🔨 Usage - -```tsx | pure -import React, { useState, useEffect } from 'react'; -import { AreaMap } from '@ant-design/maps'; - -const DemoAreaMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/bmw-prod/d6da7ac1-8b4f-4a55-93ea-e81aa08f0cf3.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - map: { - type: 'mapbox', - style: 'blank', - center: [120.19382669582967, 30.258134], - zoom: 3, - pitch: 0, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - }, - autoFit: true, - color: { - field: 'adcode', - value: ['rgb(239,243,255)', 'rgb(189,215,231)', 'rgb(107,174,214)', 'rgb(49,130,189)', 'rgb(8,81,156)'], - scale: { - type: 'quantile', - }, - }, - style: { - opacity: 1, - stroke: 'rgb(93,112,146)', - lineWidth: 0.6, - lineOpacity: 1, - }, - state: { - active: true, - }, - label: { - visible: true, - field: 'name', - style: { - fill: '#000', - opacity: 0.8, - fontSize: 10, - stroke: '#fff', - strokeWidth: 1.5, - textAllowOverlap: false, - padding: [5, 5], - }, - }, - tooltip: { - items: ['name', 'adcode'], - }, - zoom: { - position: 'bottomright', - }, - legend: { - position: 'bottomleft', - }, - }; - - return ; -}; - -export default DemoAreaMap; -``` - -## 📜 Document & API - -See chart API for [details](https://charts.ant.design/zh/docs/map-api/plot-api). Common props: - -| Property | Description | Type | defaultValue | -| :-------------- | :-------------------- | :---------------------------- | :----------- | -| onReady | chart loaded callback | (chart)=> void | - | -| loading | loading status | boolean | - | -| loadingTemplate | loading template | React.ReactElement | - | -| errorTemplate | custom error template | (e: Error) => React.ReactNode | - | -| className | container class | string | - | -| containerStyle | container style | React.CSSProperties | - | - -## 🤝 How to Contribute - -Your contributions are always welcome! Please Do have a look at the [issues](https://github.com/ant-design/ant-design-charts/issues) first. - -## 📧 Contact us - -DingTalk group number: `44788198 `. - - - -## License - -MIT diff --git a/packages/maps/jest.config.js b/packages/maps/jest.config.js deleted file mode 100644 index 4bcbe3ebf..000000000 --- a/packages/maps/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const { BaseJestConfig, OnlineConfig } = require('../../config/jest'); -module.exports = { - ...BaseJestConfig, - ...(process.env.DEBUG_MODE === '1' ? OnlineConfig : {}), -}; diff --git a/packages/maps/jest.setup.js b/packages/maps/jest.setup.js deleted file mode 100644 index 52173dcfa..000000000 --- a/packages/maps/jest.setup.js +++ /dev/null @@ -1 +0,0 @@ -require('../../config/setup'); diff --git a/packages/maps/package.json b/packages/maps/package.json deleted file mode 100644 index fd67a4001..000000000 --- a/packages/maps/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@ant-design/maps", - "version": "1.0.6", - "description": "maps", - "bugs": { - "url": "https://github.com/ant-design/ant-design-charts/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ant-design/ant-design-charts.git" - }, - "main": "lib/index.js", - "unpkg": "dist/maps.min.js", - "module": "es/index.js", - "types": "es/index.d.ts", - "files": [ - "/lib", - "/es", - "/dist" - ], - "scripts": { - "start": "pnpm lib:es --w", - "build": "run-s clean lib dist", - "build:lib": "run-s clean lib", - "ci": "pnpm run build && pnpm run test:coverage", - "clean": "rimraf lib es dist", - "dist": "webpack --config webpack.config.js --mode production", - "profile": "webpack --config webpack.config.js --mode production --profile --json > stats.json", - "lib": "run-p lib:*", - "lib:cjs": "tsc -p tsconfig.prod.json --target ES5 --module commonjs --outDir lib", - "lib:es": "tsc -p tsconfig.prod.json --target ES5 --module ESNext --outDir es", - "lint": "eslint --cache --ext .js,.jsx,.ts,.tsx --fix --format=pretty ./src && pnpm run lint:prettier", - "lint:prettier": "pnpm run prettier && git diff && prettier --version && prettier --check \"src/**/**.{js,jsx,tsx,ts,less,md,json}\" --end-of-line auto", - "prettier": "prettier --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", - "test": "jest", - "test:live": "cross-env DEBUG_MODE=1 jest --watch ./tests/utils/error-boundary.test.tsx --no-cache" - }, - "dependencies": { - "@antv/l7": "^2.9.37", - "@antv/l7plot": "0.x", - "@antv/util": "^2.0.9", - "react-content-loader": "^5.0.4" - }, - "peerDependencies": { - "react": ">=16.8.4", - "react-dom": ">=16.8.4" - }, - "sideEffects": false, - "license": "MIT", - "devDependencies": { - "@types/react": "^18.0.0", - "@types/react-dom": "^18.0.6", - "npm-run-all": "^4.1.5", - "rimraf": "^3.0.2", - "@types/jest": "^26.0.0" - } -} diff --git a/packages/maps/src/components/area-map/index.tsx b/packages/maps/src/components/area-map/index.tsx deleted file mode 100644 index 7aa9862a9..000000000 --- a/packages/maps/src/components/area-map/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useEffect, useImperativeHandle, forwardRef } from 'react'; -import { Area, AreaOptions } from '@antv/l7plot'; -import { PlotRef, ContainerConfig } from '../../types'; -import useL7Plot, { L7PlotConfig } from '../../hooks/useL7Plot'; -import { getChart } from '../../util'; -import ErrorBoundary from '../../errorBoundary'; -import ChartLoading from '../../util/createLoading'; - -export interface AreaMapConfig extends L7PlotConfig, ContainerConfig { - chartRef?: PlotRef; -} - -const AreaMap = forwardRef((props: AreaMapConfig, ref) => { - const { - chartRef, - containerStyle = { - height: 'inherit', - }, - className, - loading, - loadingTemplate, - errorTemplate, - ...config - } = props; - const { plotRef, containerRef } = useL7Plot(Area, config); - - useEffect(() => { - getChart(chartRef, plotRef.current); - }, [plotRef.current]); - - useImperativeHandle(ref, () => ({ - getChart: () => plotRef.current, - })); - - return ( - - {loading && } -
- - ); -}); - -export default AreaMap; diff --git a/packages/maps/src/components/choropleth-map/index.tsx b/packages/maps/src/components/choropleth-map/index.tsx deleted file mode 100644 index 70acd71d4..000000000 --- a/packages/maps/src/components/choropleth-map/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useEffect, useImperativeHandle, forwardRef } from 'react'; -import { Choropleth, ChoroplethOptions } from '@antv/l7plot'; -import { PlotRef, ContainerConfig } from '../../types'; -import useL7Plot, { L7PlotConfig } from '../../hooks/useL7Plot'; -import { getChart } from '../../util'; -import ErrorBoundary from '../../errorBoundary'; -import ChartLoading from '../../util/createLoading'; - -export interface ChoroplethMapConfig extends L7PlotConfig, ContainerConfig { - chartRef?: PlotRef; -} - -const ChoroplethMap = forwardRef((props: ChoroplethMapConfig, ref) => { - const { - chartRef, - containerStyle = { - height: 'inherit', - }, - className, - loading, - loadingTemplate, - errorTemplate, - ...config - } = props; - const { plotRef, containerRef } = useL7Plot(Choropleth, config); - - useEffect(() => { - getChart(chartRef, plotRef.current); - }, [plotRef.current]); - - useImperativeHandle(ref, () => ({ - getChart: () => plotRef.current, - })); - - return ( - - {loading && } -
- - ); -}); - -export default ChoroplethMap; diff --git a/packages/maps/src/components/dot-map/index.tsx b/packages/maps/src/components/dot-map/index.tsx deleted file mode 100644 index 0163e5770..000000000 --- a/packages/maps/src/components/dot-map/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useEffect, useImperativeHandle, forwardRef } from 'react'; -import { Dot, DotOptions } from '@antv/l7plot'; -import { PlotRef, ContainerConfig } from '../../types'; -import useL7Plot, { L7PlotConfig } from '../../hooks/useL7Plot'; -import { getChart } from '../../util'; -import ErrorBoundary from '../../errorBoundary'; -import ChartLoading from '../../util/createLoading'; - -export interface DotMapConfig extends L7PlotConfig, ContainerConfig { - chartRef?: PlotRef; -} - -const DotMap = forwardRef((props: DotMapConfig, ref) => { - const { - chartRef, - containerStyle = { - height: 'inherit', - }, - className, - loading, - loadingTemplate, - errorTemplate, - ...config - } = props; - const { plotRef, containerRef } = useL7Plot(Dot, config); - - useEffect(() => { - getChart(chartRef, plotRef.current); - }, [plotRef.current]); - - useImperativeHandle(ref, () => ({ - getChart: () => plotRef.current, - })); - - return ( - - {loading && } -
- - ); -}); - -export default DotMap; diff --git a/packages/maps/src/components/flow-map/index.tsx b/packages/maps/src/components/flow-map/index.tsx deleted file mode 100644 index 6b10790b9..000000000 --- a/packages/maps/src/components/flow-map/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useEffect, useImperativeHandle, forwardRef } from 'react'; -import { Flow, FlowOptions } from '@antv/l7plot'; -import { PlotRef, ContainerConfig } from '../../types'; -import useL7Plot, { L7PlotConfig } from '../../hooks/useL7Plot'; -import { getChart } from '../../util'; -import ErrorBoundary from '../../errorBoundary'; -import ChartLoading from '../../util/createLoading'; - -export interface FlowMapConfig extends L7PlotConfig, ContainerConfig { - chartRef?: PlotRef; -} - -const FlowMap = forwardRef((props: FlowMapConfig, ref) => { - const { - chartRef, - containerStyle = { - height: 'inherit', - }, - className, - loading, - loadingTemplate, - errorTemplate, - ...config - } = props; - const { plotRef, containerRef } = useL7Plot(Flow, config); - - useEffect(() => { - getChart(chartRef, plotRef.current); - }, [plotRef.current]); - - useImperativeHandle(ref, () => ({ - getChart: () => plotRef.current, - })); - - return ( - - {loading && } -
- - ); -}); - -export default FlowMap; diff --git a/packages/maps/src/components/geographic-heatmap/index.tsx b/packages/maps/src/components/geographic-heatmap/index.tsx deleted file mode 100644 index a5e96a4c5..000000000 --- a/packages/maps/src/components/geographic-heatmap/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useEffect, useImperativeHandle, forwardRef } from 'react'; -import { Heatmap, HeatmapOptions } from '@antv/l7plot'; -import { PlotRef, ContainerConfig } from '../../types'; -import useL7Plot, { L7PlotConfig } from '../../hooks/useL7Plot'; -import { getChart } from '../../util'; -import ErrorBoundary from '../../errorBoundary'; -import ChartLoading from '../../util/createLoading'; - -export interface GeographicHeatmapConfig extends L7PlotConfig, ContainerConfig { - chartRef?: PlotRef; -} - -const GeographicHeatmap = forwardRef((props: GeographicHeatmapConfig, ref) => { - const { - chartRef, - containerStyle = { - height: 'inherit', - }, - className, - loading, - loadingTemplate, - errorTemplate, - ...config - } = props; - const { plotRef, containerRef } = useL7Plot(Heatmap, config); - - useEffect(() => { - getChart(chartRef, plotRef.current); - }, [plotRef.current]); - - useImperativeHandle(ref, () => ({ - getChart: () => plotRef.current, - })); - - return ( - - {loading && } -
- - ); -}); - -export default GeographicHeatmap; diff --git a/packages/maps/src/components/grid-map/index.tsx b/packages/maps/src/components/grid-map/index.tsx deleted file mode 100644 index 54ba07b63..000000000 --- a/packages/maps/src/components/grid-map/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useEffect, useImperativeHandle, forwardRef } from 'react'; -import { Grid, GridOptions } from '@antv/l7plot'; -import { PlotRef, ContainerConfig } from '../../types'; -import useL7Plot, { L7PlotConfig } from '../../hooks/useL7Plot'; -import { getChart } from '../../util'; -import ErrorBoundary from '../../errorBoundary'; -import ChartLoading from '../../util/createLoading'; - -export interface GridMapConfig extends L7PlotConfig, ContainerConfig { - chartRef?: PlotRef; -} - -const GridMap = forwardRef((props: GridMapConfig, ref) => { - const { - chartRef, - containerStyle = { - height: 'inherit', - }, - className, - loading, - loadingTemplate, - errorTemplate, - ...config - } = props; - const { plotRef, containerRef } = useL7Plot(Grid, config); - - useEffect(() => { - getChart(chartRef, plotRef.current); - }, [plotRef.current]); - - useImperativeHandle(ref, () => ({ - getChart: () => plotRef.current, - })); - - return ( - - {loading && } -
- - ); -}); - -export default GridMap; diff --git a/packages/maps/src/components/hexbin-map/index.tsx b/packages/maps/src/components/hexbin-map/index.tsx deleted file mode 100644 index 028934c74..000000000 --- a/packages/maps/src/components/hexbin-map/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useEffect, useImperativeHandle, forwardRef } from 'react'; -import { Hexbin, HexbinOptions } from '@antv/l7plot'; -import { PlotRef, ContainerConfig } from '../../types'; -import useL7Plot, { L7PlotConfig } from '../../hooks/useL7Plot'; -import { getChart } from '../../util'; -import ErrorBoundary from '../../errorBoundary'; -import ChartLoading from '../../util/createLoading'; - -export interface HexbinMapConfig extends L7PlotConfig, ContainerConfig { - chartRef?: PlotRef; -} - -const HexbinMap = forwardRef((props: HexbinMapConfig, ref) => { - const { - chartRef, - containerStyle = { - height: 'inherit', - }, - className, - loading, - loadingTemplate, - errorTemplate, - ...config - } = props; - const { plotRef, containerRef } = useL7Plot(Hexbin, config); - - useEffect(() => { - getChart(chartRef, plotRef.current); - }, [plotRef.current]); - - useImperativeHandle(ref, () => ({ - getChart: () => plotRef.current, - })); - - return ( - - {loading && } -
- - ); -}); - -export default HexbinMap; diff --git a/packages/maps/src/components/path-map/index.tsx b/packages/maps/src/components/path-map/index.tsx deleted file mode 100644 index ce8bceeee..000000000 --- a/packages/maps/src/components/path-map/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useEffect, useImperativeHandle, forwardRef } from 'react'; -import { Path, PathOptions } from '@antv/l7plot'; -import { PlotRef, ContainerConfig } from '../../types'; -import useL7Plot, { L7PlotConfig } from '../../hooks/useL7Plot'; -import { getChart } from '../../util'; -import ErrorBoundary from '../../errorBoundary'; -import ChartLoading from '../../util/createLoading'; - -export interface PathMapConfig extends L7PlotConfig, ContainerConfig { - chartRef?: PlotRef; -} - -const PathMap = forwardRef((props: PathMapConfig, ref) => { - const { - chartRef, - containerStyle = { - height: 'inherit', - }, - className, - loading, - loadingTemplate, - errorTemplate, - ...config - } = props; - const { plotRef, containerRef } = useL7Plot(Path, config); - - useEffect(() => { - getChart(chartRef, plotRef.current); - }, [plotRef.current]); - - useImperativeHandle(ref, () => ({ - getChart: () => plotRef.current, - })); - - return ( - - {loading && } -
- - ); -}); - -export default PathMap; diff --git a/packages/maps/src/errorBoundary/index.tsx b/packages/maps/src/errorBoundary/index.tsx deleted file mode 100644 index 318fb852a..000000000 --- a/packages/maps/src/errorBoundary/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React, { Fragment } from 'react'; - -class ErrorBoundary extends React.Component { - static getDerivedStateFromError(error: Error) { - return { hasError: true, error }; - } - - static getDerivedStateFromProps(nextProps: any, state: any) { - if (state.children !== nextProps.children) { - return { - children: nextProps.children, - hasError: false, - error: undefined, - }; - } - return null; - } - - state: { - hasError: boolean; - error?: Error; - } = { - hasError: false, - }; - - renderError = (e: Error) => { - const { errorTemplate } = this.props; - switch (e) { - default: - if (typeof errorTemplate === 'function') { - return errorTemplate(e); - } - return errorTemplate ? errorTemplate :
组件出错了,请核查后重试: {e.message}
; - } - }; - - render() { - if (this.state.hasError) { - return this.renderError(this.state.error!); - } - return {this.props.children}; - } -} - -export default ErrorBoundary; diff --git a/packages/maps/src/hooks/useL7Plot.ts b/packages/maps/src/hooks/useL7Plot.ts deleted file mode 100644 index 5613fc4de..000000000 --- a/packages/maps/src/hooks/useL7Plot.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { useRef, useEffect } from 'react'; -import { Plot, PlotOptions } from '@antv/l7plot'; -import { isEqual, pick } from '@antv/util'; -import { deepCloneMapConfig } from '../util'; - -// L7PlotCtor 图表 class 构造函数 -type L7PlotCtor> = new (container: string | HTMLElement, options: O) => P; - -// L7PlotConfig 配置属性 -export type L7PlotConfig> = O & { - /** 图表渲染完成回调 */ - onReady?: (chart: P) => void; -}; - -export default function useL7Plot< - O extends PlotOptions, - P extends Plot, - C extends L7PlotConfig = L7PlotConfig, ->(Ctor: L7PlotCtor, config: C) { - const plotRef = useRef

(); - const plotConfig = useRef(); - const containerRef = useRef(null); - const { onReady } = config; - - // updateOption/changeData/updateMap - useEffect(() => { - if (!plotRef.current || !plotConfig.current || isEqual(plotConfig.current, config)) return; - let changeData = false; - let updateMap = false; - let updateOption = false; - - const { - onReady: currentOnReady, - map: currentMap, - source: { data: currentSourceData, ...currentSourceConfig }, - ...currentConfig - } = plotConfig.current; - const { - onReady, - map: inputMap, - source: { data: inputSourceData, ...inputSourceDataConfig }, - ...inputConfig - } = config; - updateMap = !isEqual(currentMap, inputMap); - changeData = !isEqual(currentSourceConfig, inputSourceDataConfig) || currentSourceData !== inputSourceData; - updateOption = !isEqual(currentConfig, inputConfig); - plotConfig.current = deepCloneMapConfig(config); - if (updateMap) { - const updateMapConfig = pick(inputMap, ['center', 'pitch', 'rotation', 'zoom', 'style']); - plotRef.current.updateMap(updateMapConfig); - } - - if (changeData) { - if (plotRef.current.loaded) { - plotRef.current.changeData(inputSourceData, inputSourceDataConfig); - } else { - plotRef.current.once('loaded', () => { - plotRef.current?.changeData(inputSourceData, inputSourceDataConfig); - }); - } - } - - if (updateOption) { - if (plotRef.current.loaded) { - // @ts-ignore - plotRef.current.update(inputConfig); - } else { - plotRef.current.once('loaded', () => { - // @ts-ignore - plotRef.current?.update(inputConfig); - }); - } - } - }, [config]); - - useEffect(() => { - if (!containerRef.current) { - return () => null; - } - if (!plotConfig.current) { - plotConfig.current = deepCloneMapConfig(config); - } - - plotRef.current = new Ctor(containerRef.current, { ...config }); - - if (onReady) { - plotRef.current.once('loaded', () => { - onReady(plotRef.current); - }); - } - - // 组件销毁时销毁图表 - return () => { - if (plotRef.current) { - plotRef.current.destroy(); - plotRef.current = undefined; - } - }; - }, []); - - return { - plotRef, - containerRef, - }; -} diff --git a/packages/maps/src/index.ts b/packages/maps/src/index.ts deleted file mode 100644 index 43ef8ffb3..000000000 --- a/packages/maps/src/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -export { - registerImage, - registerImages, - unregisterImage, - registerFontFace, - unregisterFontFace, - registerIconFont, - registerIconFonts, - unregisterIconFont, -} from '@antv/l7plot'; - -export type { ContainerConfig as MapContainerConfig, PlotRef } from './types'; - -export { default as DotMap } from './components/dot-map'; -export type { DotMapConfig } from './components/dot-map'; -export { default as GeographicHeatmap } from './components/geographic-heatmap'; -export type { GeographicHeatmapConfig } from './components/geographic-heatmap'; -export { default as GridMap } from './components/grid-map'; -export type { GridMapConfig } from './components/grid-map'; -export { default as HexbinMap } from './components/hexbin-map'; -export type { HexbinMapConfig } from './components/hexbin-map'; -export { default as PathMap } from './components/path-map'; -export type { PathMapConfig } from './components/path-map'; -export { default as FlowMap } from './components/flow-map'; -export type { FlowMapConfig } from './components/flow-map'; -export { default as AreaMap } from './components/area-map'; -export type { AreaMapConfig } from './components/area-map'; -export { default as ChoroplethMap } from './components/choropleth-map'; -export type { ChoroplethMapConfig } from './components/choropleth-map'; diff --git a/packages/maps/src/types.ts b/packages/maps/src/types.ts deleted file mode 100644 index ae2437599..000000000 --- a/packages/maps/src/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type PlotRef

= ((plot: P) => void) | React.MutableRefObject

; - -export interface ContainerConfig { - containerStyle?: React.CSSProperties; - className?: string; - loading?: boolean; - loadingTemplate?: React.ReactElement; - errorTemplate?: (e: Error) => React.ReactNode; -} diff --git a/packages/maps/src/util/config.ts b/packages/maps/src/util/config.ts deleted file mode 100644 index d716a3afd..000000000 --- a/packages/maps/src/util/config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { PlotOptions } from '@antv/l7plot'; -import { deepClone } from '../util'; - -/** - * 深克隆配置项 - * @param config 要深克隆的配置 - */ -export const deepCloneMapConfig = (config: T): T => { - const { source, ...restConfig } = config; - const target = { ...deepClone(restConfig), source: { ...source } }; - - return target; -}; diff --git a/packages/maps/src/util/createLoading.tsx b/packages/maps/src/util/createLoading.tsx deleted file mode 100644 index 5b2e8fbfd..000000000 --- a/packages/maps/src/util/createLoading.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import ContentLoader from 'react-content-loader'; - -interface Props { - loadingTemplate?: React.ReactElement; -} - -const ChartLoading = ({ loadingTemplate }: Props) => { - const renderLoading = () => { - if (loadingTemplate) { - return loadingTemplate; - } - return ( - - - - - - - - - - - - - ); - }; - - return ( -

- {renderLoading()} -
- ); -}; - -export default ChartLoading; diff --git a/packages/maps/src/util/getChart.ts b/packages/maps/src/util/getChart.ts deleted file mode 100644 index d023a9f21..000000000 --- a/packages/maps/src/util/getChart.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { isFunction } from '@antv/util'; -import { PlotRef } from '../types'; - -/** - * 获取或者绑定图表实例 - */ -export const getChart =

(chartRef: PlotRef

| undefined, chart: P) => { - if (!chartRef) { - return; - } - if (isFunction(chartRef)) { - chartRef(chart); - } else { - chartRef.current = chart; - } -}; diff --git a/packages/maps/src/util/index.ts b/packages/maps/src/util/index.ts deleted file mode 100644 index c055fa9e2..000000000 --- a/packages/maps/src/util/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './getChart'; -export * from './config'; -export * from './utils'; -export { render, unmount } from './render'; diff --git a/packages/maps/src/util/render.ts b/packages/maps/src/util/render.ts deleted file mode 100644 index db0eecbf6..000000000 --- a/packages/maps/src/util/render.ts +++ /dev/null @@ -1,105 +0,0 @@ -import type * as React from 'react'; -import * as ReactDOM from 'react-dom'; -import type { Root } from 'react-dom/client'; - -// Let compiler not to search module usage -const fullClone = { - ...ReactDOM, -} as typeof ReactDOM & { - __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?: { - usingClientEntryPoint?: boolean; - }; - createRoot?: CreateRoot; -}; - -type CreateRoot = (container: ContainerType) => Root; - -const { version, render: reactRender, unmountComponentAtNode } = fullClone; - -let createRoot: CreateRoot; -try { - const mainVersion = Number((version || '').split('.')[0]); - if (mainVersion >= 18) { - ({ createRoot } = fullClone); - } -} catch (e) { - // Do nothing; -} - -function toggleWarning(skip: boolean) { - const { __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED } = fullClone; - - if ( - __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED && - typeof __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED === 'object' - ) { - __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint = skip; - } -} - -const MARK = '__rc_react_root__'; - -// ========================== Render ========================== -type ContainerType = (Element | DocumentFragment) & { - [MARK]?: Root; -}; - -function modernRender(node: React.ReactNode, container: ContainerType) { - toggleWarning(true); - const root = container[MARK] || createRoot(container); - toggleWarning(false); - - root.render(node); - - container[MARK] = root; -} - -function legacyRender(node: React.ReactElement, container: ContainerType) { - reactRender(node, container); -} - -/** @private Test usage. Not work in prod */ -export function _r(node: React.ReactElement, container: ContainerType) { - if (process.env.NODE_ENV !== 'production') { - return legacyRender(node, container); - } -} - -export function render(node: React.ReactElement, container: ContainerType) { - if (createRoot) { - modernRender(node, container); - return; - } - - legacyRender(node, container); -} - -// ========================= Unmount ========================== -async function modernUnmount(container: ContainerType) { - // Delay to unmount to avoid React 18 sync warning - return Promise.resolve().then(() => { - container[MARK]?.unmount(); - - delete container[MARK]; - }); -} - -function legacyUnmount(container: ContainerType) { - unmountComponentAtNode(container); -} - -/** @private Test usage. Not work in prod */ -export function _u(container: ContainerType) { - if (process.env.NODE_ENV !== 'production') { - return legacyUnmount(container); - } -} - -export async function unmount(container: ContainerType) { - if (createRoot !== undefined) { - // Delay to unmount to avoid React 18 sync warning - return modernUnmount(container); - } - - legacyUnmount(container); -} diff --git a/packages/maps/src/util/utils.ts b/packages/maps/src/util/utils.ts deleted file mode 100644 index 8b4d8cf6b..000000000 --- a/packages/maps/src/util/utils.ts +++ /dev/null @@ -1,43 +0,0 @@ -// 类型检测 -export const isType = (value: any, type: string): boolean => { - const { toString } = {}; - return toString.call(value) === `[object ${type}]`; -}; - -export const getType = (n: Object) => { - return Object.prototype.toString.call(n).slice(8, -1); -}; - -/** - * 深克隆 - * @param source 要深克隆的目标对象 - */ -export const deepClone = (source: Object | undefined) => { - if (!source || typeof source !== 'object') { - return source; - } - - let target; - if (Array.isArray(source)) { - target = source.map((item) => deepClone(item)); - } else { - target = {}; - Object.keys(source).forEach((key) => { - return (target[key] = deepClone(source[key])); - }); - } - - return target; -}; - -export const clone = (source: Object) => { - if (!source) { - return source; - } - const target = {}; - // eslint-disable-next-line guard-for-in - for (const k in source) { - target[k] = source[k]; - } - return target; -}; diff --git a/packages/maps/tests/maps/heat-map.test.tsx b/packages/maps/tests/maps/heat-map.test.tsx deleted file mode 100644 index 155eed9cb..000000000 --- a/packages/maps/tests/maps/heat-map.test.tsx +++ /dev/null @@ -1,65 +0,0 @@ -// @ts-nocheck -import React from 'react'; -import { act } from 'react-dom/test-utils'; -import GeographicHeatmap from '../../src/components/geographic-heatmap'; -import { render } from '../../src/util'; - -describe('Heat Map', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - const data = [ - { - w: 21.5458, - t: 22.2, - s: '广东', - l: 11, - m: '电白', - j: 110.9886, - h: '59664', - }, - { - w: 22.9661, - t: 21.9, - s: '广东', - l: 12, - m: '东莞', - j: 113.7389, - h: '59289', - }, - ]; - it('初始化以及销毁', () => { - let chartRef = undefined; - const props = { - className: 'container', - chartRef: (ref) => { - chartRef = ref; - }, - }; - const config = { - map: { type: 'amap' }, - source: { - data, - parser: { - type: 'json', - x: 'j', - y: 'w', - }, - }, - size: { - field: 't', - value: [0, 1], - }, - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - }); -}); diff --git a/packages/maps/tests/utils/error-boundary.test.tsx b/packages/maps/tests/utils/error-boundary.test.tsx deleted file mode 100644 index 024ed05bf..000000000 --- a/packages/maps/tests/utils/error-boundary.test.tsx +++ /dev/null @@ -1,43 +0,0 @@ -// @ts-nocheck -import React from 'react'; -import { act } from 'react-dom/test-utils'; -import AreaMap from '../../src/components/area-map'; -import { render } from '../../src/util'; - -describe('Map render', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - document.body.removeChild(container); - container = null; - }); - - it.skip('error template with ReactNode', () => { - const props = { - loading: true, - // An object of type loadingTemplate is only used to trigger a boundary error - loadingTemplate: { - triggleError: true, - }, - errorTemplate: custom error, - }; - const chartProps = { - map: { type: 'amap1' }, - source: { - data: [{ w: 21.5458, t: 22.2, s: '广东', l: 11, m: '电白', j: 110.9886, h: '59664' }], - parser: { - type: 'json', - x: 'j', - y: 'w', - }, - }, - }; - act(() => { - render(, container); - }); - expect(container.querySelector('#error').innerText).toBe('custom error'); - }); -}); diff --git a/packages/maps/tests/utils/util.test.ts b/packages/maps/tests/utils/util.test.ts deleted file mode 100644 index dfb43bcd5..000000000 --- a/packages/maps/tests/utils/util.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { clone, isType } from '../../src/util'; - -describe('utils', () => { - it('is type', () => { - expect(isType('s', 'String')).toBeTruthy(); - expect(isType(0, 'Number')).toBeTruthy(); - expect(isType({}, 'Object')).toBeTruthy(); - expect(isType(undefined, 'Undefined')).toBeTruthy(); - expect(isType(null, 'Null')).toBeTruthy(); - expect(isType(NaN, 'Number')).toBeTruthy(); - expect(isType([1, 2], 'Array')).toBeTruthy(); - }); - - it('clone', () => { - const config = { - statistic: { - content: { - customHtml: 'html', - }, - title: {}, - }, - }; - expect(clone(undefined)).toBeUndefined(); - expect(clone(config)).toEqual(config); - // @ts-ignore - config.__proto__.name = 'fj'; - expect(clone(config)).toEqual({ - statistic: { - content: { - customHtml: 'html', - }, - title: {}, - }, - name: 'fj', - }); - }); -}); diff --git a/packages/maps/tsconfig.json b/packages/maps/tsconfig.json deleted file mode 100644 index 74ecfab18..000000000 --- a/packages/maps/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["src", "tests"] -} diff --git a/packages/maps/tsconfig.prod.json b/packages/maps/tsconfig.prod.json deleted file mode 100644 index 596e2cf72..000000000 --- a/packages/maps/tsconfig.prod.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["src"] -} diff --git a/packages/maps/webpack.config.js b/packages/maps/webpack.config.js deleted file mode 100644 index 7065af0de..000000000 --- a/packages/maps/webpack.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const { getWebpackConfig } = require('../../config/webpack'); - -module.exports = getWebpackConfig('maps', 'Maps'); diff --git a/packages/plots/package.json b/packages/plots/package.json index bb4154287..a1d8c0a30 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -36,14 +36,16 @@ "test:live": "DEBUG_MODE=1 jest --watch ./tests/plots/column-proxy-spec.tsx --no-cache" }, "dependencies": { - "@antv/g2plot": "^3.0.0-alpha.1", - "@antv/util": "^2.0.9", + "@antv/event-emitter": "^0.1.3", + "@antv/g2": "^5.0.6", + "size-sensor": "^1.0.1", "react-content-loader": "^5.0.4", "rc-utils": "workspace:*" }, "peerDependencies": { "react": ">=16.8.4", - "react-dom": ">=16.8.4" + "react-dom": ">=16.8.4", + "lodash-es": "^4.17.21" }, "sideEffects": false, "license": "MIT", diff --git a/packages/plots/src/components/base/index.tsx b/packages/plots/src/components/base/index.tsx index 17c032b12..23cff9c03 100644 --- a/packages/plots/src/components/base/index.tsx +++ b/packages/plots/src/components/base/index.tsx @@ -1,7 +1,7 @@ -import React, { useEffect, useImperativeHandle, forwardRef } from 'react'; +import React, { useImperativeHandle, forwardRef } from 'react'; import { ErrorBoundary, ChartLoading } from 'rc-utils'; import useChart from '../../hooks/useChart'; -import { Plots } from './plots'; +import { Plots } from '../../g2-core'; import { CommonConfig, Chart } from '../../interface'; export const BaseChart: React.FC = forwardRef(({ chartType, ...config }: CommonConfig, ref) => { diff --git a/packages/plots/src/components/base/plots.ts b/packages/plots/src/components/base/plots.ts deleted file mode 100644 index 4e51ee6a9..000000000 --- a/packages/plots/src/components/base/plots.ts +++ /dev/null @@ -1 +0,0 @@ -export * as Plots from '@antv/g2plot'; diff --git a/packages/plots/src/components/column/index.tsx b/packages/plots/src/components/column/index.tsx index 1913cb0cc..065768a9e 100644 --- a/packages/plots/src/components/column/index.tsx +++ b/packages/plots/src/components/column/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { ColumnOptions } from '@antv/g2plot'; +import { ColumnOptions } from '../../g2-core'; import { CommonConfig } from '../../interface'; import { BaseChart } from '../base'; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts new file mode 100644 index 000000000..47b963d2a --- /dev/null +++ b/packages/plots/src/components/index.ts @@ -0,0 +1,4 @@ +import Column from './column'; +import Line from './line'; + +export { Column, Line }; diff --git a/packages/plots/src/components/interface.ts b/packages/plots/src/components/interface.ts index 147cca843..7fc0412ef 100644 --- a/packages/plots/src/components/interface.ts +++ b/packages/plots/src/components/interface.ts @@ -1 +1,2 @@ export type { ColumnConfig } from './column'; +export type { LineConfig } from './line'; diff --git a/packages/plots/src/components/line/index.tsx b/packages/plots/src/components/line/index.tsx new file mode 100644 index 000000000..dc7b54338 --- /dev/null +++ b/packages/plots/src/components/line/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { LineOptions } from '../../g2-core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type LineConfig = CommonConfig; + +const LineChart = (props: LineConfig) => ; + +export default LineChart; diff --git a/packages/plots/src/g2-core/components/index.ts b/packages/plots/src/g2-core/components/index.ts new file mode 100644 index 000000000..18f02928a --- /dev/null +++ b/packages/plots/src/g2-core/components/index.ts @@ -0,0 +1 @@ +export { mark } from './mark'; diff --git a/packages/plots/src/g2-core/components/mark.ts b/packages/plots/src/g2-core/components/mark.ts new file mode 100644 index 000000000..89dc9457a --- /dev/null +++ b/packages/plots/src/g2-core/components/mark.ts @@ -0,0 +1,8 @@ +import type { Adaptor } from '../types'; + +/** + * 根据图表类型新增一些高阶 Mark + */ +export function mark

(params: P) { + return params; +} diff --git a/packages/plots/src/g2-core/core/plot.ts b/packages/plots/src/g2-core/core/plot.ts new file mode 100644 index 000000000..1d16ec4d0 --- /dev/null +++ b/packages/plots/src/g2-core/core/plot.ts @@ -0,0 +1,208 @@ +import EE from '@antv/event-emitter'; +import { Chart } from '@antv/g2'; +import { bind } from 'size-sensor'; +import { merge, omit, pick } from '../utils'; +import type { Options, Adaptor } from '../types'; + +const SOURCE_ATTRIBUTE_NAME = 'data-chart-source-type'; + +/** new Chart options */ +export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas', 'theme']; + +export abstract class Plot extends EE { + /** plot 类型名称 */ + public abstract readonly type: string; + /** plot 绘制的 dom */ + public readonly container: HTMLElement; + /** G2 Spec */ + public options: O; + /** G2 chart 实例 */ + public chart: Chart; + /** resizer unbind */ + private unbind: () => void; + + constructor(container: string | HTMLElement, options: O) { + super(); + this.container = typeof container === 'string' ? document.getElementById(container) : container; + this.options = merge({}, this.getBaseOptions(), this.getDefaultOptions(), options); + this.createG2(); + this.render(); + this.bindEvents(); + } + + /** + * new Chart 所需配置 + */ + private getChartOptions() { + const { clientWidth, clientHeight } = this.container; + // 逻辑简化:如果存在 width 或 height,则直接使用,否则使用容器大小 + const { width = clientWidth || 640, height = clientHeight || 480, autoFit = true } = this.options; + return { + ...pick(this.options, CHART_OPTIONS), + container: this.container, + width, + height, + autoFit, + }; + } + + /** + * G2 options(Spec) 配置 + */ + private getSpecOptions() { + return omit(this.options, CHART_OPTIONS); + } + + /** + * 创建 G2 实例 + */ + private createG2() { + if (!this.container) { + throw Error('The container is not initialized!'); + } + this.chart = new Chart(this.getChartOptions()); + // 给容器增加标识,知道图表的来源区别于 G2 + this.container.setAttribute(SOURCE_ATTRIBUTE_NAME, 'G2Plot'); + } + + /** + * 绑定代理所有 G2 的事件 + */ + private bindEvents() { + if (this.chart) { + this.chart.on('*', (e) => { + if (e?.type) { + this.emit(e.type, e); + } + }); + } + } + + private getBaseOptions(): Partial { + return { theme: 'classic' }; + } + + /** + * 获取默认的 options 配置项,每个组件都可以复写 + */ + protected getDefaultOptions(): Partial | void {} + + /** + * 绘制 + */ + public render(): void { + // 执行 adaptor + this.execAdaptor(); + + // options 转换 + this.chart.options(this.getSpecOptions()); + // 渲染 + this.chart.render(); + // 绑定 + this.bindSizeSensor(); + } + + /** + * 更新 + * @param options + */ + public update(options: Partial) { + this.updateOption(options); + } + + /** + * 更新配置 + * @param options + */ + protected updateOption(options: Partial) { + this.options = merge({}, this.options, options); + } + + /** + * 更新数据 + * @override + * @param options + */ + public changeData(data: any) { + this.chart.data(data); + } + + /** + * 修改画布大小 + * @param width + * @param height + */ + public changeSize(width: number, height: number) { + this.chart.changeSize(width, height); + } + + /** + * 销毁 + */ + public destroy() { + // 取消 size-sensor 的绑定 + this.unbindSizeSensor(); + // G2 的销毁 + this.chart.destroy(); + // 清空已经绑定的事件 + this.off(); + + this.container.removeAttribute(SOURCE_ATTRIBUTE_NAME); + } + + /** + * 每个组件有自己的 schema adaptor + */ + protected abstract getSchemaAdaptor(): (params: Adaptor) => void; + + /** + * 执行 adaptor 操作 + */ + protected execAdaptor() { + const adaptor = this.getSchemaAdaptor(); + + // 转化成 G2 Spec + adaptor({ + chart: this.chart, + options: this.options, + }); + } + + /** + * 当图表容器大小变化的时候,执行的函数 + */ + protected triggerResize() { + this.chart.forceFit(); + } + + /** + * 绑定 dom 容器大小变化的事件 + */ + private bindSizeSensor() { + if (this.unbind) { + return; + } + const { autoFit = true } = this.options; + if (autoFit) { + this.unbind = bind(this.container, () => { + // 获取最新的宽高信息 + const { clientHeight, clientWidth } = this.container; + const { width, height } = this.chart.options(); + // 主要是防止绑定的时候触发 resize 回调 + if (clientHeight !== width || clientWidth !== height) { + this.triggerResize(); + } + }); + } + } + + /** + * 取消绑定 + */ + private unbindSizeSensor() { + if (this.unbind) { + this.unbind(); + this.unbind = undefined; + } + } +} diff --git a/packages/plots/src/g2-core/index.ts b/packages/plots/src/g2-core/index.ts new file mode 100644 index 000000000..cbc2c82ff --- /dev/null +++ b/packages/plots/src/g2-core/index.ts @@ -0,0 +1,11 @@ +export * as G2 from '@antv/g2'; + +export * from './types'; + +import { Line } from './plots/line'; +import { Column } from './plots/column'; + +export type { LineOptions } from './plots/line'; +export type { ColumnOptions } from './plots/column'; + +export const Plots = { Line, Column }; diff --git a/packages/plots/src/g2-core/module.d.ts b/packages/plots/src/g2-core/module.d.ts new file mode 100644 index 000000000..29ba14892 --- /dev/null +++ b/packages/plots/src/g2-core/module.d.ts @@ -0,0 +1 @@ +declare module 'size-sensor'; diff --git a/packages/plots/src/g2-core/plots/column/adaptor.ts b/packages/plots/src/g2-core/plots/column/adaptor.ts new file mode 100644 index 000000000..28a3427bb --- /dev/null +++ b/packages/plots/src/g2-core/plots/column/adaptor.ts @@ -0,0 +1,21 @@ +import { flow } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { ColumnOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, mark)(params); +} diff --git a/packages/plots/src/g2-core/plots/column/index.ts b/packages/plots/src/g2-core/plots/column/index.ts new file mode 100644 index 000000000..a86ac6496 --- /dev/null +++ b/packages/plots/src/g2-core/plots/column/index.ts @@ -0,0 +1,33 @@ +import { Plot } from '../../core/plot'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { ColumnOptions } from './type'; + +export type { ColumnOptions }; + +export class Column extends Plot { + /** 图表类型 */ + public type = 'column'; + + /** + * 获取 折线图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { type: 'interval' }; + } + + /** + * 获取 折线图 默认配置 + */ + protected getDefaultOptions() { + return Column.getDefaultOptions(); + } + + /** + * 折线图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/g2-core/plots/column/type.ts b/packages/plots/src/g2-core/plots/column/type.ts new file mode 100644 index 000000000..b24fc0627 --- /dev/null +++ b/packages/plots/src/g2-core/plots/column/type.ts @@ -0,0 +1,3 @@ +import type { Options } from '../../types/common'; + +export type ColumnOptions = Options; diff --git a/packages/plots/src/g2-core/plots/line/adaptor.ts b/packages/plots/src/g2-core/plots/line/adaptor.ts new file mode 100644 index 000000000..1dfed8bc8 --- /dev/null +++ b/packages/plots/src/g2-core/plots/line/adaptor.ts @@ -0,0 +1,21 @@ +import { flow } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { LineOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, mark)(params); +} diff --git a/packages/plots/src/g2-core/plots/line/index.ts b/packages/plots/src/g2-core/plots/line/index.ts new file mode 100644 index 000000000..8a65b1fd8 --- /dev/null +++ b/packages/plots/src/g2-core/plots/line/index.ts @@ -0,0 +1,33 @@ +import { Plot } from '../../core/plot'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { LineOptions } from './type'; + +export type { LineOptions }; + +export class Line extends Plot { + /** 图表类型 */ + public type = 'line'; + + /** + * 获取 折线图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { type: 'line' }; + } + + /** + * 获取 折线图 默认配置 + */ + protected getDefaultOptions() { + return Line.getDefaultOptions(); + } + + /** + * 折线图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/g2-core/plots/line/type.ts b/packages/plots/src/g2-core/plots/line/type.ts new file mode 100644 index 000000000..b73f2121a --- /dev/null +++ b/packages/plots/src/g2-core/plots/line/type.ts @@ -0,0 +1,3 @@ +import type { Options } from '../../types/common'; + +export type LineOptions = Options; diff --git a/packages/plots/src/g2-core/types/common.ts b/packages/plots/src/g2-core/types/common.ts new file mode 100644 index 000000000..02aed368c --- /dev/null +++ b/packages/plots/src/g2-core/types/common.ts @@ -0,0 +1,10 @@ +import type { Chart, G2Spec } from '@antv/g2'; + +export type Options = G2Spec & { + [key: string]: any; +}; + +export type Adaptor

= { + chart: Chart; + options: P; +}; diff --git a/packages/plots/src/g2-core/types/index.ts b/packages/plots/src/g2-core/types/index.ts new file mode 100644 index 000000000..e251acdfe --- /dev/null +++ b/packages/plots/src/g2-core/types/index.ts @@ -0,0 +1,3 @@ +export type { G2Spec } from '@antv/g2'; + +export * from './common'; diff --git a/packages/plots/src/g2-core/utils/index.ts b/packages/plots/src/g2-core/utils/index.ts new file mode 100644 index 000000000..d431bd922 --- /dev/null +++ b/packages/plots/src/g2-core/utils/index.ts @@ -0,0 +1,2 @@ +export { omit, pick, isArray, flatten, flow, merge } from 'lodash-es'; +export { isCompositePlot } from './is-composite-plot'; diff --git a/packages/plots/src/g2-core/utils/is-composite-plot.ts b/packages/plots/src/g2-core/utils/is-composite-plot.ts new file mode 100644 index 000000000..2b3af88d8 --- /dev/null +++ b/packages/plots/src/g2-core/utils/is-composite-plot.ts @@ -0,0 +1,6 @@ +import { Options } from '../types'; + +/** + * 是否是复合图表 + */ +export const isCompositePlot = (options: Options) => options.children?.length > 0; diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 94a8536d3..172c9dbd4 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -1,6 +1,5 @@ import React, { useRef, useEffect } from 'react'; -import { isEqual, get } from '@antv/util'; -import { G2 } from '@antv/g2plot'; +import { isEqual, get } from 'lodash-es'; import createNode from '../utils/createNode'; import { hasPath, isType, deepClone, clone, setPath, uuid } from '../utils'; import { CommonConfig, Chart } from '../interface'; diff --git a/packages/plots/src/index.ts b/packages/plots/src/index.ts index ebf4bc09f..70d1725c9 100644 --- a/packages/plots/src/index.ts +++ b/packages/plots/src/index.ts @@ -1,9 +1,5 @@ -import Column from './components/column'; -import { G2 } from '@antv/g2plot'; +export * as G2 from '@antv/g2'; -export { - Column, - G2, -}; +export * from './components'; export * from './interface'; diff --git a/packages/plots/src/interface.ts b/packages/plots/src/interface.ts index 8f028403f..f855b695c 100644 --- a/packages/plots/src/interface.ts +++ b/packages/plots/src/interface.ts @@ -1,4 +1,4 @@ -import { Options, G2, G2Spec } from '@antv/g2plot'; +import { Options, G2Spec } from './g2-core'; /** * @title 图表浮窗配置 @@ -110,4 +110,4 @@ export type CommonConfig = Common & TransformType; export * from './components/interface'; -export { Options, G2 }; +export { Options }; diff --git a/scripts/ast/md-parse-l7plot.mjs b/scripts/ast/md-parse-l7plot.mjs deleted file mode 100644 index 5c4cb035c..000000000 --- a/scripts/ast/md-parse-l7plot.mjs +++ /dev/null @@ -1,73 +0,0 @@ -import { resolve, dirname } from 'path'; -import { readSync } from 'to-vfile'; -import { fileURLToPath } from 'url'; -import { unified } from 'unified'; -import remarkParse from 'remark-parse'; -import remarkFrontmatter from 'remark-frontmatter'; -import remarkStringify from 'remark-stringify'; -import parseFile from './parse.js'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); - -const setCode = (fileInfo) => { - const { chartName, plotName, utilName, dataSet, code } = fileInfo; - return `import React, { useState, useEffect }from 'react'; - import ReactDOM from 'react-dom'; - import {${plotName}} from '@ant-design/maps'; - ${utilName ? `import { ${utilName} } from '@antv/util';` : ''} - ${dataSet ? `import { ${dataSet} } from '@antv/data-set';` : ''} - - const Demo${chartName} = () => { - ${code.toString()} - return <<%= chartName %> {...config} />; - }; - - ReactDOM.render(, document.getElementById('container'));`; -}; - -const mdParse = () => { - return function transformer(tree) { - recursionTree(tree); - }; - function recursionTree(tree) { - // 删除顶部导航 - if (tree.type === 'html') { - tree.value = tree.value.replace(//g, (_) => { - return _.replace(/\.ts/, '.js'); - }); - } - - // 示例代码转为 React 语法 - if (tree.type === 'code' && tree.value.indexOf('new ') !== -1) { - const fileInfo = parseFile(tree.value, 'code'); - const { chartName, hasError } = fileInfo; - if (chartName && !hasError) { - tree.value = setCode(fileInfo); - } else { - tree.value = ''; - } - } - - // 解析套娃路径 - if (tree.type === 'inlineCode' && tree.value.indexOf('markdown:') !== -1) { - const filePath = tree.value.split(':')[1]; - const docsPath = resolve(__dirname, '../../../L7Plot/website', filePath); - const res = unified() - .use(remarkParse) - .use(remarkStringify) - .use(mdParse, { extname: '.md' }) - .use(remarkFrontmatter, ['yaml', 'toml']) - .processSync(readSync(docsPath)); - tree.type = 'html'; - tree.value = res.toString(); - } - - if (tree.children && tree.children.length) { - tree.children.forEach((children) => { - recursionTree(children); - }); - } - } -}; - -export default mdParse; diff --git a/scripts/ast/md-parse.mjs b/scripts/ast/md-parse.mjs deleted file mode 100644 index d35b8fc7e..000000000 --- a/scripts/ast/md-parse.mjs +++ /dev/null @@ -1,73 +0,0 @@ -import { resolve, dirname } from 'path'; -import { readSync } from 'to-vfile'; -import { fileURLToPath } from 'url'; -import { unified } from 'unified'; -import remarkParse from 'remark-parse'; -import remarkFrontmatter from 'remark-frontmatter'; -import remarkStringify from 'remark-stringify'; -import parseFile from './parse.js'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); - -const setCode = (fileInfo) => { - const { chartName, plotName, utilName, dataSet, code } = fileInfo; - return `import React, { useState, useEffect }from 'react'; - import ReactDOM from 'react-dom'; - import {${plotName}} from '@ant-design/charts'; - ${utilName ? `import { ${utilName} } from '@antv/util';` : ''} - ${dataSet ? `import { ${dataSet} } from '@antv/data-set';` : ''} - - const Demo${chartName} = () => { - ${code.toString()} - return <<%= chartName %> {...config} />; - }; - - ReactDOM.render(, document.getElementById('container'));`; -}; - -const mdParse = () => { - return function transformer(tree) { - recursionTree(tree); - }; - function recursionTree(tree) { - // 删除顶部导航 - if (tree.type === 'html') { - tree.value = tree.value.replace(//g, (_) => { - return _.replace(/\.ts/, '.js'); - }); - } - - // 示例代码转为 React 语法 - if (tree.type === 'code' && tree.value.indexOf('new ') !== -1) { - const fileInfo = parseFile(tree.value, 'code'); - const { chartName, hasError } = fileInfo; - if (chartName && !hasError) { - tree.value = setCode(fileInfo); - } else { - tree.value = ''; - } - } - - // 解析套娃路径 - if (tree.type === 'inlineCode' && tree.value.indexOf('markdown:') !== -1) { - const filePath = tree.value.split(':')[1]; - const docsPath = resolve(__dirname, '../../../G2Plot', filePath); - const res = unified() - .use(remarkParse) - .use(remarkStringify) - .use(mdParse, { extname: '.md' }) - .use(remarkFrontmatter, ['yaml', 'toml']) - .processSync(readSync(docsPath)); - tree.type = 'html'; - tree.value = res.toString(); - } - - if (tree.children && tree.children.length) { - tree.children.forEach((children) => { - recursionTree(children); - }); - } - } -}; - -export default mdParse; diff --git a/scripts/ast/parse.js b/scripts/ast/parse.js deleted file mode 100644 index 90bdef642..000000000 --- a/scripts/ast/parse.js +++ /dev/null @@ -1,252 +0,0 @@ -const fs = require('fs'); -const babel = require('@babel/core'); -const chalk = require('chalk'); -const types = require('babel-types'); -const { get, find } = require('lodash'); -const log = console.log; - -let fetchUrl = ''; -let chartName = ''; // 组件名称 -let plotName = ''; // 插件名称 -let utilName = ''; // util 名称 -let dataKey = ''; // 存放 data 的变量 -let dataSet = ''; // dataset -let isGeojson = false; // 是否 geojson - -/** - * render - * @param {*} node - */ -const isRender = (node) => { - return node.type === 'CallExpression' && get(node, 'callee.property.name') === 'render'; -}; - -/** - * nullExpression - * @param {*} node - */ -const isNullExpression = (node) => { - return node.type === 'ExpressionStatement' && !node.expression; -}; - -/** - * isFetch - * @param {*} node - */ -const isFetch = (node) => { - return node.type === 'MemberExpression' && get(node, 'object.callee.name') === 'fetch'; -}; - -/** - * isFetchExpression - * @param {*} node - */ -const isFetchExpression = (node) => { - return node.type === 'CallExpression' && get(node, 'callee.object.callee.object.callee.name') === 'fetch'; -}; - -/** - * new表达式 - * @param {*} node - */ -const isNewExpression = (node) => { - return ( - (node.type === 'VariableDeclarator' && get(node, 'init.type') === 'NewExpression') || node.type === 'NewExpression' - ); -}; - -// 状态重置 -const reset = () => { - fetchUrl = ''; - chartName = ''; - plotName = ''; - dataKey = ''; - utilName = ''; - dataSet = ''; - isGeojson = false; -}; - -const excludeFunctionNames = ['formatter']; - -const initCode = (code) => { - let key = dataKey; - let isPattern = false; - if (dataKey.endsWith('-Pattern')) { - key = key.replace('-Pattern', ''); - isPattern = true; - } - const reg = new RegExp(/\.csv|\.txt/); - const useText = fetchUrl.match(reg); - return ` - const [${key}, setData] = useState(${isGeojson ? `{ type: 'FeatureCollection', features: [] }` : `[]`}); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch("${fetchUrl}") - .then((response) => ${!useText ? 'response.json()' : 'response.text()'}) - .then((${isPattern ? `{${key}}` : 'json'}) => setData(${isPattern ? key : 'json'})) - .catch((error) => { - console.log("fetch data failed", error); - }); - }; - ${ - useText && - `if (!data.length) { - return null; - }` - } - ${code} - `; -}; - -const setImport = (path) => { - const { node } = path; - if (['@antv/g2plot', '@antv/l7plot'].includes(node.source.value)) { - node.specifiers?.forEach((item) => { - plotName += plotName ? ', ' : ''; - plotName += item.imported.name; - }); - } - if (node.source.value === '@antv/util') { - node.specifiers?.forEach((item) => { - utilName += utilName ? ', ' : ''; - utilName += item.imported.name; - }); - } - if (node.source.value === '@antv/data-set') { - node.specifiers?.forEach((item) => { - dataSet += dataSet ? ', ' : ''; - dataSet += item.imported.name; - }); - } -}; - -const parseFile = (params, type) => { - try { - reset(); - let jsCode = ''; - if (type === 'code') { - jsCode = params; - } else { - jsCode = fs.readFileSync(params, 'utf-8'); - - if (params.indexOf('.ts') !== -1) { - // 提取关键信息,正常情况应该全部使用 babel ,由于时间原因,暂不考虑全量修改 - const visitorExpressions = { - // import 信息 - ImportDeclaration(path) { - setImport(path); - path.remove(); - }, - ExportNamedDeclaration(path) { - const { node } = path; - path.replaceWith(node.declaration); - }, - // 获取 fetch 地址 - MemberExpression(path) { - const { node } = path; - if (isFetch(node)) { - fetchUrl = node.object.arguments[0].value || get(node, 'object.arguments.0.quasis.0.value.raw'); - } - }, - /** 提取 type 类型, 设置默认值 */ - Literal(path) { - const { node } = path; - if (get(node, 'value') === 'geojson') { - isGeojson = true; - } - }, - // 抽取 config - VariableDeclarator(path) { - const { node } = path; - if (isNewExpression(node)) { - if (get(node, 'init.callee.type') === 'Identifier' && get(node, 'init.callee.name') !== 'DataView') { - chartName = get(node, 'init.callee.name'); - node.id.name = 'config'; - node.init = node.init.arguments[1]; - path.replaceWith(node); - } - } - }, - // 提取 data 变量 - 'FunctionExpression|ArrowFunctionExpression'(path) { - const { node } = path; - if ( - ['data', 'fetchData', 'csv', 'response', 'list'].includes(get(node, ['params', 0, 'name'])) && - get(node, ['body', 'type']) === 'BlockStatement' && - !excludeFunctionNames.includes(get(node, ['id', 'name'])) - ) { - dataKey = get(node, ['params', 0, 'name']); - } else if ( - get(node, ['params', 0, 'type']) === 'ObjectPattern' && - ['list', 'data'].includes(get(node, ['params', 0, 'properties', 0, 'key', 'name'])) - ) { - // list 解构 - dataKey = `${get(node, ['params', 0, 'properties', 0, 'key', 'name'])}-Pattern`; - } - }, - // 删除空值 - ExpressionStatement(path) { - const { node } = path; - if (isNullExpression(node)) { - path.remove(); - } - /** l7plot new 表达式 */ - if ( - get(node, 'expression.type') === 'NewExpression' && - get(node, 'expression.arguments.0.value') === 'container' - ) { - const name = get(node, 'expression.callee.name'); - chartName = name === 'Heatmap' ? 'HeatMap' : `${name}Map`; - const func = types.variableDeclaration('const', [ - types.variableDeclarator(types.identifier('config'), get(node, 'expression.arguments.1')), - ]); - path.replaceWith(func); - } - }, - CallExpression(path) { - const { node } = path; - // remove render - if (isRender(node)) { - path.remove(); - } - // recursive - path.traverse(visitorExpressions); - if (isFetchExpression(node)) { - path.replaceWithMultiple(node.arguments[0].body.body); - } - }, - }; - const vistorPlugins = { - visitor: visitorExpressions, - }; - const { code } = babel.transform(fs.readFileSync(params, 'utf-8'), { - plugins: [vistorPlugins], - }); - // fs.writeFileSync('./temp.js', initCode(code)); - jsCode = fetchUrl ? initCode(code) : code; - } - } - return { - code: chartName && jsCode, - chartName, - plotName, - utilName, - dataSet, - hasError: false, - errPath: '', - }; - } catch (err) { - log(chalk.red(`解析出错:params: ${params}; type: ${type}`)); - log(chalk.red(`出错信息:${err}`)); - return { - hasError: true, - errPath: params, - }; - } -}; - -module.exports = parseFile; diff --git a/scripts/docs/l7plot.mjs b/scripts/docs/l7plot.mjs deleted file mode 100644 index 781615c62..000000000 --- a/scripts/docs/l7plot.mjs +++ /dev/null @@ -1,102 +0,0 @@ -/** - * 一键同步 L7Plot API 文档 - * eg: - * -全量同步:`node scripts/docs/l7plot.mjs` - * - * 该文件下引用的包和主包会有冲突,使用时在强制安装 - * ```zx - * npm install unified to-vfile remark-parse remark-frontmatter remark-stringify --force - * ``` - */ -import { dirname, resolve, join } from 'path'; -import { fileURLToPath } from 'url'; -import fs from 'node:fs/promises'; -import { readSync } from 'to-vfile'; -import { unified } from 'unified'; -import remarkParse from 'remark-parse'; -import remarkFrontmatter from 'remark-frontmatter'; -import remarkStringify from 'remark-stringify'; -import mdParse from '../ast/md-parse-l7plot.mjs'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); -const apiWriteBasePath = '../../packages/site/docs'; -const arg = process.argv.splice(2); -const docsPath = arg[1] || 'website/docs'; -const plot = arg[0] || 'L7Plot'; -const fp = resolve('../', `${plot}/${docsPath}`); - -const excludePath = ['manual']; - -// 文件路径是否存在,不存在时直接创建 -const checkDirExist = async (folderpath) => { - const pathArr = folderpath.split('/'); - if (!pathArr.includes('site')) { - return; - } - let _path = ''; - for (let i = 0; i < pathArr.length; i++) { - if (pathArr[i]) { - _path += `/${pathArr[i]}`; - if (_path.indexOf('site/docs/map-') === -1) { - continue; - } - try { - // fsPromise 不再支持 exists,没想到好方法 - await fs.mkdir(_path); - } catch (err) { - // await fs.mkdir(_path); - } - } - } -}; - -const hasSameEl = (source, target) => { - return new Set(source.concat(target)).size !== source.length + target.length; -}; - -const apiGenerator = async (apiPath, filename) => { - // 文件路径,上层自动扫描 - const res = unified() - .use(remarkParse) - .use(remarkStringify) - .use(mdParse, { extname: '.md' }) - .use(remarkFrontmatter, ['yaml', 'toml']) - .processSync(readSync(apiPath)); - let writePath = join(__dirname, apiWriteBasePath, apiPath.split(docsPath)[1]); - // 统一加上 map 前缀 - writePath = writePath.replace(/docs\//, 'docs/map-'); - await checkDirExist(writePath.split(filename)[0]); - await fs.writeFile( - writePath, - res - .toString() - .replace(/docs\//g, 'docs/map-') - .replace(/@antv\/l7plot/g, '@ant-design/charts'), - ); -}; - -/** - * 文件扫描,获取所有 *.md 文件路径 - * @param {foldPath} string 扫描路径 - */ -const scanL7PlotFiles = async (foldPath, dir) => { - console.log('文档生成中....'); - try { - const files = await fs.readdir(foldPath); - files.forEach(async (filename) => { - const director = join(foldPath + '/', filename); - const stats = await fs.stat(director); - if (stats.isDirectory()) { - scanL7PlotFiles(director, dir ? `${dir}.${filename}` : filename); - } - if (stats.isFile() && filename.endsWith('.md') && !hasSameEl(excludePath, dir.split('.').concat(filename))) { - const apiPath = resolve(__dirname, `../../../${plot}/${docsPath}`, dir.split('.').join('/'), filename); - apiGenerator(apiPath, filename); - } - }); - } catch (err) { - console.log(err); - } -}; - -scanL7PlotFiles(fp); diff --git a/scripts/examples/l7plot.js b/scripts/examples/l7plot.js deleted file mode 100644 index 3f11b4b96..000000000 --- a/scripts/examples/l7plot.js +++ /dev/null @@ -1,160 +0,0 @@ -/** - * 扫描 L7Plot 所有 demo 文件,生成 demo - * eg: - * - `node scripts/examples/l7plot.js` - */ -const fs = require('fs'); -const path = require('path'); -const ejs = require('ejs'); -const chalk = require('chalk'); -const { checkDirExist, removeDir } = require('../util'); -const parseFile = require('../ast/parse'); -const demoWriteBasePath = '../../packages/site/examples'; -const templateDemoPath = path.join(__dirname, '../../template/doc/demo.ejs'); -const arg = process.argv.splice(2); -const demoPath = 'website/examples'; -const plot = arg[0] || 'L7Plot'; -const fp = path.resolve('../', `${plot}/${demoPath}`); - -const examples = []; -// 特殊路径不处理 -const excludePath = ['administrative-switch.tsx', 'component', 'gallery', 'line']; - -const hasSameEl = (source, target) => { - return new Set(source.concat(target)).size !== source.length + target.length; -}; - -const checkDir = (filePath, filename) => { - let writePath = path.join(__dirname, demoWriteBasePath, filePath.split(demoPath)[1]); - // 统一加上 map 前缀, 避免和 G2Plot 组件名冲突 - writePath = writePath - .replace(/examples\//, 'examples/map-') - .replace(/scatter\//, 'map-scatter/') - .replace(/bubble\//, 'map-bubble/'); - checkDirExist(writePath.split(filename)[0]); - return writePath; -}; - -// md -const apiGenerator = (filePath, filename) => { - const writePath = checkDir(filePath, filename); - // example 目录下不会有示例代码,不需要解析 - let content = fs.readFileSync(filePath, { - encoding: 'utf-8', - }); - - if (content) { - content = content - .replace(/markdown:docs\//g, 'markdown:docs/map-') - .replace(/散点图/g, '地图散点图') - .replace(/气泡图/g, '地图气泡图') - .replace(/Scatter/g, 'Scatter Map') - .replace(/Bubble/g, 'Bubble Map'); - } - fs.writeFileSync(writePath, content); -}; - -// 非 ts | js 直接 copy -const copyGenerator = (filePath, filename) => { - const writePath = checkDir(filePath, filename); - let content = fs.readFileSync(filePath, { - encoding: 'utf-8', - }); - if (filename === 'meta.json') { - content = content.replace(/\.ts/g, '.js'); - } - fs.writeFileSync(writePath, content); -}; - -// ts | js -const demoGenerator = (filePath, filename) => { - const chartContent = parseFile(filePath); - const { chartName, plotName, utilName, dataSet, code, errPath } = chartContent; - if (!errPath) { - // 生成文件 - ejs.renderFile( - templateDemoPath, - { - plotName: chartName, // 没有多余依赖,先使用 chartName - utilName, - chartName, - dataSet, - chartContent: code, - lib: 'maps', - }, // 渲染的数据key: 对应到了ejs中的index - (err, data) => { - if (err) { - console.log(chalk.red(`模版文件读取失败: ${err}`)); - return; - } - const writePath = checkDir(filePath, filename); - // 生成文件内容 - fs.writeFileSync(writePath.replace(/\.ts/, '.js'), data.replace(/\s+null\s+/g, '\n')); - }, - ); - } -}; - -/** - * 文件扫描,获取所有 *.md 文件路径 - * @param {foldPath} string 扫描路径 - */ -const scanDir = (foldPath, dir) => { - try { - const files = fs.readdirSync(foldPath); - files.forEach((filename) => { - const director = path.join(foldPath + '/', filename); - const stats = fs.statSync(director); - if (stats.isDirectory()) { - scanDir(director, dir ? `${dir}.${filename}` : filename); - } - if (stats.isFile()) { - const filePath = path.resolve(__dirname, `../../../${plot}/${demoPath}`, dir.split('.').join('/'), filename); - if (!hasSameEl(excludePath, dir.split('.').concat(filename))) { - examples.push({ - filePath, - filename, - }); - } - } - }); - } catch (err) { - console.info(chalk.red(err)); - } -}; - -const writeFiles = () => { - console.info(chalk.green('示例生成中....')); - examples.forEach((item) => { - const { filePath, filename } = item; - if (filename.endsWith('.md')) { - apiGenerator(filePath, filename); - } else if (filename.endsWith('.ts') || filename.endsWith('.js')) { - demoGenerator(filePath, filename); - } else { - copyGenerator(filePath, filename); - } - }); -}; - -const cleanPath = () => { - const paths = []; - const getMapsPath = (foldPath) => { - try { - const files = fs.readdirSync(foldPath); - files.forEach((dir) => { - if (dir.startsWith('map-')) paths.push(path.join(__dirname, demoWriteBasePath, dir)); - }); - } catch (err) { - console.info(chalk.red(err)); - } - }; - getMapsPath(path.join(__dirname, demoWriteBasePath)); - paths.forEach((dir) => { - removeDir(dir); - }); -}; - -scanDir(fp); -cleanPath(); -writeFiles(); diff --git a/scripts/website/build-website.sh b/scripts/website/build-website.sh index 9f47beefb..a7feb3938 100644 --- a/scripts/website/build-website.sh +++ b/scripts/website/build-website.sh @@ -26,13 +26,11 @@ echo "\033[49;32m \n******* removing node_modules *******\n \033[0m" echo "auto-install-peers=false \nstrict-peer-dependencies=false\nshamefully-hoist=true" >> .npmrc -rm -rf ./package.json rm -rf ./pnpm-lock.yaml rm -rf ./node_modules -cp ./scripts/website/package.json ./ echo "\033[49;32m \n******* installing website dependencies *******\n \033[0m" diff --git a/scripts/website/package.json b/scripts/website/package.json deleted file mode 100644 index 3c9becde5..000000000 --- a/scripts/website/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "charts", - "private": true, - "scripts": { - "start:site": "pnpm -r --stream --filter=./packages/site run start", - "build:site": "pnpm -r --stream --filter=./packages/site run build" - }, - "devDependencies": { - "@antv/data-set": "^0.11.8", - "@babel/core": "^7.11.6", - "@babel/polyfill": "^7.12.1", - "@babel/preset-env": "^7.13.9", - "@babel/preset-typescript": "^7.10.4", - "@testing-library/jest-dom": "^5.5.0", - "@types/enzyme": "^3.10.5", - "@types/node": "^14.0.10", - "@umijs/fabric": "^2.0.7", - "babel-plugin-named-asset-import": "^0.3.7", - "babel-preset-react-app": "^10.0.0", - "babel-types": "^6.26.0", - "chalk": "^4.1.0", - "ejs": "^3.0.2", - "enzyme": "^3.11.0", - "enzyme-to-json": "^3.4.4", - "eslint": "^7.32.0", - "jest-canvas-mock": "^2.2.0", - "less": "^4.1.2", - "lodash": "^4.17.20", - "np": "*", - "npm-run-all": "^4.1.5", - "prettier": "^2.0.2", - "pretty-quick": "^3.0.1", - "react-test-renderer": "^17.0.1", - "rimraf": "^3.0.2", - "typescript": "^4.0.3", - "vfile-reporter": "^7.0.2", - "whatwg-fetch": "^3.0.0", - "yorkie": "^2.0.0", - "react": "^16.14.0", - "react-dom": "^16.14.0" - }, - "pnpm": { - "overrides": { - "@typescript-eslint/eslint-plugin": "^4.1.1", - "@typescript-eslint/parser": "^4.1.1", - "monaco-editor": "0.21.3", - "react-i18next": "~11.7.0" - } - }, - "gitHooks": { - "pre-commit": "pretty-quick --staged" - }, - "sideEffects": false, - "license": "MIT", - "dependencies": { - "less-plugin-npm-import": "^2.1.0" - } -} diff --git a/site/.dumi/global.ts b/site/.dumi/global.ts index dfadb3e2e..add89791d 100644 --- a/site/.dumi/global.ts +++ b/site/.dumi/global.ts @@ -1,13 +1,8 @@ if (window) { (window as any).insertCss = require('insert-css'); - (window as any).dataSet = require('@antv/data-set'); (window as any).antd = require('antd'); - (window as any).util = require('@antv/util'); (window as any).react = require('react'); (window as any).reactDom = require('react-dom'); /** 不要使用 link, react-dom 冲突 */ (window as any).plots = require('@ant-design/plots'); - (window as any).flowchart = require('@ant-design/flowchart'); - (window as any).maps = require('@ant-design/maps'); - (window as any).graphs = require('@ant-design/graphs'); } diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 95845f059..13b8fdebe 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -57,14 +57,6 @@ export default defineConfig({ }, order: 1, }, - { - slug: 'docs/map-api', - title: { - zh: 'API-地图', - en: 'API-Map', - }, - order: 0, - }, ], docs: [ { @@ -75,56 +67,8 @@ export default defineConfig({ }, order: 1, }, - { - slug: 'api/common-graph', - title: { - zh: '通用配置-关系图', - en: 'Common Configuration Relation Graph', - }, - order: 2, - }, - { - slug: 'map-api/plots', - title: { - zh: '基础图表 - Plots', - en: 'Plots', - }, - order: 2, - }, - { - slug: 'map-api/components', - title: { - zh: '组件 - Components', - en: 'Components', - }, - order: 3, - }, - { - slug: 'map-api/layers', - title: { - zh: '图层 - Layers', - en: 'Layers', - }, - order: 5, - }, ], examples: [ - { - slug: 'flowchart', - icon: 'sankey', - title: { - zh: '流程图', - en: 'Flowchart', - }, - }, - { - slug: 'relation-graph', - icon: 'sankey', - title: { - zh: '关系图', - en: 'Relation Graph', - }, - }, { slug: 'column', icon: 'column', @@ -134,43 +78,11 @@ export default defineConfig({ }, }, { - slug: 'map-area', - icon: 'polygon', - title: { - zh: '区域地图', - en: 'Area Map', - }, - }, - { - slug: 'map-choropleth', - icon: 'polygon', - title: { - zh: '行政区域地图', - en: 'Choropleth Map', - }, - }, - { - slug: 'map-dot', - icon: 'point', - title: { - zh: '散点地图', - en: 'Dot Map', - }, - }, - { - slug: 'map-heat', - icon: 'heatmap', - title: { - zh: '热力地图', - en: 'Heat Map', - }, - }, - { - slug: 'map-advanced-plot', - icon: 'other', + slug: 'line', + icon: 'line', title: { - zh: '多图层', - en: 'Advanced Map', + zh: '折线图', + en: 'Line', }, }, ], diff --git a/site/docs/api/common-graph/common-graph.en.md b/site/docs/api/common-graph/common-graph.en.md deleted file mode 100644 index eb12325ec..000000000 --- a/site/docs/api/common-graph/common-graph.en.md +++ /dev/null @@ -1,637 +0,0 @@ ---- -title: Configuration -order: 3 ---- - -## Basic configuration - -#### width - -**optional** _number_ _default:_ `500` - -Set the width of the graph. - -#### height - -**optional** _number_ _default:_ `500` - -Set the height of the graph. - -#### nodeCfg - -Node configuration. - -##### type - -**optional** _`string`_ - -Node type. Built-in nodes include `icon-node ,card,circle,rect,ellipse,diamond,triangle,star,image,modelRect,donut`,
img img - -##### size - -**optional** _Number[]_ - -The (minimum) size of the node, some graphs may adapt the size according to the node content, default value [120, 40]. - -##### style - -**optional** _object | Function_ - -Node style with support for callbacks. - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### label - -**optional** _object_ - -Node text styles, style supports callbacks. - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### anchorPoints - -**optional** _Number[]_ - -The anchorPoint of a node is the link point where the related edges link to. In other words, it is the intersection of a node and its related edges. anchorPoints is a 2d array, each element represents the position of one anchor point. The positions of the anchor points in a Shape are shown below, the range of each x and y is [0, 1]:
img - -##### padding - -**optional** _number | number[]_ - -Item content padding . - -```ts -{ - padding: 8, -} -``` - -##### customContent - -**optional** _Function_ - -Custom items, returns the maximum height of a custom items. - -```ts -{ - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text, value, icon } = item; - let textShape, valueShape, iconShape; - textShape = - text && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX, - y: startY, - text, - fill: '#aaa', - }, - // Unique field within group - name: `text-${Math.random()}`, - }); - valueShape = - value && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX + width / 2, - y: startY, - text: value, - fill: '#f00', - }, - name: `value-${Math.random()}`, - }); - iconShape = - icon && - group!.addShape('image', { - attrs: { - x: startX, - y: startY, - width: 72, - height: 72, - img: icon, - }, - name: `image-${Math.random()}`, - }); - return Math.max( - textShape?.getBBox().height ?? 0, - valueShape?.getBBox().height ?? 0, - iconShape?.getBBox().height ?? 0, - ); - }, -} -``` - -##### nodeStateStyles - -**optional** _object_ - -Node style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -Edge configuration. - -##### type - -Edge type - -- line: straight line without control points; -- polyline: polyline with one or more control points; -- arc; -- quadratic: quadratic bezier curve; -- cubic: cubic bezier curve; -- cubic-vertical:vertical cubic bezier curve. The user can not assign the control point for this type of edge; -- cubic-horizontal: horizontal cubic bezier curve. The user can not assign the control point for this type of edge; -- loop: self-loop edge. - -
-img - -##### label - -**optional** _object_ - -Edge text styles, style supports callbacks. - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -Edge start arrow. - -```ts -interface ArrowConfig { - /** Arrow type */ - type?: 'vee' | 'triangle'; - /** Arrow offset */ - d?: number; - /** Arrow path */ - path?: string; - /** Arrow stroke */ - stroke?: string; - /** Arrow fill */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -Edge end arrow. - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -Side style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### behaviors - -**optional** _Number[]_ - -Interaction mode, default `['drag-canvas', 'zoom-canvas']`. - -- drag-canvas: Drag canvas -- scroll-canvas: Scroll canvas -- zoom-canvas: Zoom canvas -- drag-node: Drag node - -#### markerCfg - -**optional** _Boolean | MarkerCfg_ - -Marker configuration, support callback. - -```ts -interface MarkerCfg { - show?: boolean; - collapsed?: boolean; - position?: 'left' | 'right' | 'top' | 'bottom'; - style?: ShapeStyle; -} -``` - -#### animate - -**optional** _Boolean_ - -Whether to turn on animation, default to 'true'. - -### customLayout - -**optional** _Boolean_ - -Whether to turn on custom layout, layout is invalid and x、y in data is used for data layout when enabled. - -#### autoFit - -**optional** _Boolean_ - -Whether to scale node size adaptive container. Default value is 'true '. - -#### fitCenter - -**optional** _Boolean_ - -Whether to translate the graph to align its center with the canvas. Its priority is lower than fitView, Default value is 'true '. - -#### minimapCfg - -**optional** _object_ - -Min map configruation. - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| container | Object | false | The DOM container of Minimap. The plugin will generate a new one if `container` is not defined | -| className | String | false | The className of the DOM element of the Minimap | -| viewportClassName | String | false | The className of the DOM element of the view port on the Minimap | -| type | String | false | Render type. Options: `'default'`: Render all the graphics shapes on the graph; `'keyShape'`: Only render the keyShape of the items on the graph to reach better performance; `'delegate'`: Only render the delegate of the items on the graph to reach better performance. Performance: `'default'` < `'keyShape'` < `'delegate'`. `'default'` by default | -| size | Array | false | The size of the Minimap | -| delegateStyle | Object | false | Takes effect when `type` is `'delegate'`. The style of the delegate of the items on the graph | - -The `delegateStyle` has the properties: - -| Name | Type | Required | Description | -| ----------- | ------ | -------- | ----------------------- | -| fill | String | false | Filling color | -| stroke | String | false | Stroke color | -| lineWidth | Number | false | The width of the stroke | -| opacity | Number | false | Opacity | -| fillOpacity | Number | false | Filling opacity | - -#### toolbarCfg - -**optional** _object_ - -Toolbar configruation. - -```ts -interface ToolbarCfg { - /** toolbar classname */ - className?: string; - /** container style */ - style?: React.CSSProperties; - /** Whether to show */ - show?: boolean; - /** zoom factor */ - zoomFactor?: number; - /** custom icon */ - customContent?: ({ - zoomIn, - zoomOut, - toggleFullscreen, - fullscreen, - }: { - zoomIn: () => void; - zoomOut: () => void; - toggleFullscreen: () => void; - fullscreen: boolean; - }) => React.ReactElement; -} -``` - -#### tooltipCfg - -**optional** _object_ - -Tooltip configuration. - -```ts -interface ToolbarCfg { - /** toolbar classname */ - className?: string; - /** container style */ - style?: React.CSSProperties; - /** whether to show */ - show?: boolean; - /** custom content */ - customContent: (item?: NodeConfig) => React.ReactElement; -} -``` -#### menuCgf - -**optional** _object_ - -MenuCfg configuration. - -```ts -interface MenuCfg { - container?: HTMLDivElement | string | null; - className?: string; - handleMenuClick?: (target: HTMLElement, item: Item) => void; - customContent?: (evt?: IG6GraphEvent) => React.ReactNode; - // offsetX 与 offsetY 需要加上父容器的 padding - offsetX?: number; - offsetY?: number; - shouldBegin?: (evt?: IG6GraphEvent) => boolean; - // 允许出现 tooltip 的 item 类型 - itemTypes?: string[]; - trigger?: 'click' | 'contextmenu'; -} -``` -## Functions - -#### graph.downloadFullImage(name, type, imageConfig) - -Export the whole graph as an image, whatever (a part of) the graph is out of the screen. - -**Parameters** - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| name | String | false | The name of the image. 'graph' by default. | -| type | `'image/png'` / `'image/jpeg'` / `'image/webp'` / `'image/bmp'` | false | The type of the image. When the `renderer` of the graph is `'canvas'`(default), `type` takes effect. When the `renderer` is `'svg'`, `toFullDataURL` will export a svg file | -| imageConfig | Object | false | The configuration for the exported image, detials are shown below | - -where the `imageConfig` is the configuration for exported image: - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| backgroundColor | String | false | The background color of the image. If it is not assigned, the background will be transparent. | -| padding | Number / Number[] | false | The top, right, bottom, right paddings of the exported image. When its type is number, the paddings around the graph are the same | - -**Usage** - -```javascript -{ - onReady: (graph) => { - graph.downloadFullImage('tree-graph', { - backgroundColor: '#ddd', - padding: [30, 15, 15, 15], - }); - }; -} -``` - -#### graph.toFullDataURL(callback, type, backgroundColor) - -Generate url of the image of the whole graph including the part out of the view port. - -**Parameters** - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| callback | Function | true | The callback function after finish generating the dataUrl of the full graph | -| Asynchronously | -| type | `'image/png'` / `'image/jpeg'` / `'image/webp'` / `'image/bmp'` | false | The type of the image. When the `renderer` of the graph is `'canvas'`(default), `type` takes effect. When the `renderer` is `'svg'`, `toFullDataURL` will export a svg file | -| imageConfig | Object | false | The configuration for the exported image, detials are shown below | - -where the `imageConfig` is the configuration for exported image: - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| backgroundColor | String | false | The background color of the image. If it is not assigned, the background will be transparent. | -| padding | Number / Number[] | false | The top, right, bottom, right paddings of the exported image. When its type is number, the paddings around the graph are the same | - -No return value, you can process the result in the callback function as shown below: - -**Usage** - -```ts - onReady: (graph) => { - graph.toFullDataUrl( - // The first parameter: callback, required - (res) => { - // ... something - console.log(res); // e.g. print the result - }, - // The second and third parameter is not required - 'image/jpeg', - (imageConfig: { - backgroundColor: '#fff', - padding: 10, - }), - ); - } -``` - -#### graph.zoom(ratio, center) - -Zoom Graph. - -**Usage** - -```ts -{ - onReady: (graph) => { - // Zoom 0.5x - graph.zoom(0.5); - // Zoom 0.5x and set the center to [100,100] - graph.zoom(0.5, { x: 100, y: 100 }); - }; -} -``` - -## Events - -Events are bound to the Graph by 'on' and removed by 'off'. OnReady returns the Graph instance. - -```ts -graph.on(eventName, (evt) => {}); -graph.off(eventName, (evt) => {}); -``` - -```ts -{ - onReady: (graph) => { - graph.on('node:mouseenter', (evt) => { - const item = evt.item; - graph.setItemState(item, 'hover', true); - }); - graph.on('node:mouseleave', (evt) => { - const item = evt.item; - graph.setItemState(item, 'hover', false); - }); - }; -} -``` - -Where, the event object `evt` has the properties: - -- `type`: The type of the event -- `name`: The name of the event -- `x`: The x coordinate on the canvas -- `y`: The y coordinate on the canvas -- `clientX`: The x coordinate about the client -- `clientY`: The y coordinate about the client -- `canvasX`: The x coordinate about parent DOM of the canvas -- `canvasY`: The y coordinate about parent DOM of the canvas -- `item`: The item being manipulated, which can be a node, an edge, or a Combo) -- `target`: The target Shape on the `item` being manupulated, or the canvas instance -- `bubbles`: Whether bubbles -- `defaultPrevented`: Whether prevent the original event -- `originalEvent`: The original client event object. where the `button` can be used to distinguish the left/middle/right button of the mouse on some events like `click` or `dblclick` -- `timeStamp`: The time stamp the event triggered -- `propagationStopped`: Wheher stop the propogation -- `propagationPath`: The triggering path - -`eventName` can be refered to the following parts. - -### Common Interaction Event - -| Event Name | Description | -| --- | --- | -| click | Activated by clicking the **left button** of mouse or Enter button. | -| dblclick | Activated by double clicking the **left button** of mouse. | -| mouseenter | Activated when mouse enters an item. **This is not a bubbled event**, which means this event will not be activated when the mouse moves to the descendant items. | -| mousemove | Activated while the mouse is moving inside an item. It cannot be activated by keyboard. | -| mouseout | Activated while the mouse moves out of an item. | -| mouseover | Activated when the mouse moves over an item. | -| mouseleave | Activated when the mouse leaves an item. **This is not a bubbled event**, which means this event will not be activated when the mouse leaves the descendant items. | -| mousedown | Activated when the left or right button is clicked down. It cannot be activated by keyboard. | -| mouseup | Activated when the left or right button is released. It cannot be activated by keyboard. | -| contextmenu | Open the context menu when user clicks the right button of mouse | -| dragstart | Activated when user begins to drag. This event is applied on a dragged item. | -| drag | Activated during the dragging process. This event is applied on a dragged item. | -| dragend | Activated when user stops dragging. This event is applied on a dragged item. | -| dragenter | Activated when user drags an item into a target item. This event is applied on a dragged item. | -| dragleave | Activated when user drags an item out of a target item. This event is applied on the target item. | -| drop | Activated when user drops an item on a target item. This event is applied on the target item. | -| keydown | Activated when user presses down a button on keyboard. | -| keyup | Activated when user releases a button on keyboard. | -| wheel | Activated when user scroll the wheel. | -| touchstart | Activated when a finger touches the screen. If there are fingers on the screen already, it will be activated too. | -| touchmove | Activated during the processes of finger moving on the screen. Call `preventDefault()` to prevent scrolling. | -| touchend | Activated when a finger leaves the screen. | - -### Node Interaction Event - -| Event Name | Description | -| --- | --- | -| node:click | Activated when user clicks the **left button** of the mouse on the node. | -| node:dblclick | Activated when user double clicks the **left button** of the mouse on the node. | -| node:mouseenter | Activated when the mouse enters the node. | -| node:mousemove | Activated while the mouse is moving inside the node. It cannot be activated by keyboard. | -| node:mouseout | Activated while the mouse moves out of the node. | -| node:mouseover | Activated when the mouse moves over the node. | -| node:mouseleave | Activated when the mouse leaves the node. | -| node:mousedown | Activated when the left or right button is clicked down on the node. It cannot be activated by keyboard. | -| node:mouseup | Activated when the left or right button is released on the node. It cannot be activated by keyboard. | -| node:dragstart | Activated when user begins to drag the node. This event is applied on the dragged node. | -| node:drag | Activated during the dragging process on the node. This event is applied on the dragged node. | -| node:dragend | Activated when user stops dragging on the node. This event is applied on the dragged node. | -| node:dragenter | Activated when user drags an item into a target node item. This event is applied on the target node item. | -| node:dragleave | Activated when user drags an item out of a target node item. This event is applied on the target node item. | -| node:dragover | Activated when user drags an item over a target node item. This event is applied on the target node item | -| node:drop | Activated when user drops an item on a target item. This event is applied on the target item. | -| node:touchstart | On touch screen, this event is activated when user begin to touch the node | -| node:touchmove | On touch screen, this event is activated when user is touching the node | -| node:touchend | On touch screen, this event is activated when user finish touching the node | -| node:contextmenu | Open the context menu when user clicks the right button of mouse on the node. | - -### Edge Interaction Event - -| Event Name | Description | -| --- | --- | -| edge:click | Activated when user clicks the **left button** of the mouse on the edge. | -| edge:dblclick | Activated when user double clicks the **left button** of the mouse on the edge. | -| edge:mouseenter | Activated when the mouse enters the edge. | -| edge:mousemove | Activated while the mouse is moving inside the edge. It cannot be activated by keyboard. | -| edge:mouseout | Activated while the mouse moves out of the edge. | -| edge:mouseover | Activated when the mouse moves over the edge. | -| edge:mouseleave | Activated when the mouse leaves the edge. | -| edge:mousedown | Activated when the left or right button is clicked down on the edge. It cannot be activated by keyboard. | -| edge:mouseup | Activated when the left or right button is released on the edge. It cannot be activated by keyboard. | -| edge:dragenter | Activated when user drags an item into a target edge item. This event is applied on the target edge item. | -| edge:dragleave | Activated when user drags an item out of a target edge item. This event is applied on the target edge item. | -| edge:dragover | Activated when user drags an item over a target edge item. This event is applied on the target edge item | -| edge:drop | Activated when user drops an item on a target edge item. This event is applied on the target edge item. | -| edge:contextmenu | Open the context menu when user clicks the right button of mouse on the edge | - -## Canvas Interaction Event - -| Event Name | Description | -| --- | --- | -| canvas:click | Activated when user clicks the **left button** of the mouse on the canvas. | -| canvas:dblclick | Activated when user double clicks the **left button** of the mouse on the canvas. | -| canvas:mouseenter | Activated when the mouse enters the canvas. | -| canvas:mousemove | Activated while the mouse is moving inside the canvas. It cannot be activated by keyboard. | -| canvas:mouseout | Activated while the mouse moves out of the canvas. | -| canvas:mouseover | Activated when the mouse moves over the canvas. | -| canvas:mouseleave | Activated when the mouse leaves the canvas. | -| canvas:mousedown | Activated when the left or right button is clicked down on the canvas. It cannot be activated by keyboard. | -| canvas:mouseup | Activated when the left or right button is released on the canvas. It cannot be activated by keyboard. | -| canvas:contextmenu | Open the context menu when user clicks the right button of mouse on the canvas. | -| canvas:dragstart | Activated when user begins to drag the canvas. This event is applied on the dragged canvas. | -| canvas:drag | Activated during the dragging process on the canvas. This event is applied on the dragged canvas. | -| canvas:dragend | Activated when user stops dragging on the canvas. This event is applied on the dragged canvas. | -| canvas:dragenter | Activated when user drags the canvas into a target item. This event is applied on the target item. | -| canvas:dragleave | Activated when user drags the canvas out of a target item. This event is applied on the target item. | -| canvas:drop | Activated when user drags and drops an item on the canvas. | -| canvas:touchstart | On touch screen, this event is activated when user begin to touch the canvas | -| canvas:touchmove | On touch screen, this event is activated when user is touching the canvas | -| canvas:touchend | On touch screen, this event is activated when user finish touching the canvas | diff --git a/site/docs/api/common-graph/common-graph.zh.md b/site/docs/api/common-graph/common-graph.zh.md deleted file mode 100644 index 9fd187dbb..000000000 --- a/site/docs/api/common-graph/common-graph.zh.md +++ /dev/null @@ -1,638 +0,0 @@ ---- -title: 通用配置 -order: 3 ---- - -## 基础配置 - -#### width - -**optional** _number_ _default:_ `500` - -设置图表宽度。 - -#### height - -**optional** _number_ _default:_ `500` - -设置图表高度。 - -#### nodeCfg - -节点配置 - -##### type - -**optional** _`string`_ - -节点类型, 内置节点包括 icon-node ,card,circle,rect,ellipse,diamond,triangle,star,image,modelRect,donut,这些内置节点的默认样式分别如下图所示。
img img - -##### size - -**optional** _Number[]_ - -节点的(最小)大小,部分图表可能会根据节点内容自适应大小, 默认值 [120, 40]。 - -##### style - -**optional** _object | Function_ - -节点样式, 支持回调。 - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### label - -**optional** _object_ - -节点文本样式, style 支持回调。 - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### anchorPoints - -**optional** _Number[]_ - -节点的连接点 anchorPoint 指的是边连入节点的相对位置,即节点与其相关边的交点位置,默认值 `[[0.5, 0], [0.5, 1]]`。anchorPoints 是一个二维数组,每一项表示一个连接点的位置,在一个图形 Shape 中,连接点的位置如下图所示,x 和 y 方向上范围都是 [0, 1]:
img - -##### padding - -**optional** _number | number[]_ - -文本 padding。 - -```ts -{ - padding: 8, -} -``` - -##### customContent - -**optional** _Function_ - -自定义 items,需要返回自定义元素的最大高度。 - -```ts -{ - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text, value, icon } = item; - let textShape, valueShape, iconShape; - textShape = - text && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX, - y: startY, - text, - fill: '#aaa', - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - valueShape = - value && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX + width / 2, - y: startY, - text: value, - fill: '#f00', - }, - name: `value-${Math.random()}`, - }); - iconShape = - icon && - group!.addShape('image', { - attrs: { - x: startX, - y: startY, - width: 72, - height: 72, - img: icon, - }, - name: `image-${Math.random()}`, - }); - return Math.max( - textShape?.getBBox().height ?? 0, - valueShape?.getBBox().height ?? 0, - iconShape?.getBBox().height ?? 0, - ); - }, -} -``` - -##### nodeStateStyles - -**optional** _object_ - -节点在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -边配置 - -##### type - -边类型。 - -- line:直线,不支持控制点; -- polyline:折线,支持多个控制点; -- arc:圆弧线; -- quadratic:二阶贝塞尔曲线; -- cubic:三阶贝塞尔曲线; -- cubic-vertical:垂直方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- cubic-horizontal:水平方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- loop:自环。 - -这些内置边的默认样式分别如下图所示。
img - -##### label - -**optional** _object_ - -边文本样式, style 支持回调。 - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -边开始箭头。 - -```ts -interface ArrowConfig { - /** 箭头类型 */ - type?: 'vee' | 'triangle'; - /** 偏移量 */ - d?: number; - /** 绘制路径 */ - path?: string; - /** 描边 */ - stroke?: string; - /** 填充 */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -边结束箭头。 - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -边在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### behaviors - -**optional** _Number[]_ - -交互模式, 默认值 `['drag-canvas', 'zoom-canvas']`。 - -- drag-canvas: 拖拽画布 -- scroll-canvas: 滚轮滚动画布 -- zoom-canvas: 缩放画布 -- drag-node: 拖拽节点 - -#### markerCfg - -**optional** _Boolean | MarkerCfg_ - -Marker 配置, 支持回调。 - -```ts -interface MarkerCfg { - /** 是否展示 */ - show?: boolean; - /** 是否折叠态 */ - collapsed?: boolean; - /** 位置 */ - position?: 'left' | 'right' | 'top' | 'bottom'; - /** 样式 */ - style?: ShapeStyle; -} -``` - -#### animate - -**optional** _Boolean_ - -是否开启动画,默认值 `true`。 - -### customLayout - -**optional** _Boolean_ - -开启后,layout 失效,使用 data 里面的 x、y 进行数据布局。 - -#### autoFit - -**optional** _Boolean_ - -是否缩放节点大小自适应容器,默认为 true。 - -#### fitCenter - -**optional** _Boolean_ - -开启后,图将会被平移,图的中心将对齐到画布中心,但不缩放。优先级低于 fitView,默认为 true。 - -#### minimapCfg - -**optional** _object_ - -迷你 map 配置。 - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -| 名称 | 类型 | 描述 | -| --- | --- | --- | -| container | Object | 放置 Minimap 的 DOM 容器。若不指定则自动生成 | -| className | String | 生成的 DOM 元素的 className | -| viewportClassName | String | Minimap 上视窗 DOM 元素的 className | -| type | String | 选项:`'default'`:渲染图上所有图形;`'keyShape'`:只渲染图上元素的 keyShape,以减少渲染成本;`'delegate'`:只渲染图上元素的大致图形,以降低渲染成本。渲染成本 `'default'` > `'keyShape'` > `'delegate'`。默认为 `'default'` | -| size | Array | Minimap 的大小 | -| delegateStyle | Object | 在 `type` 为 `'delegate'` 时生效,代表元素大致图形的样式 | - -其中,delegateStyle 可以设置如下属性: - -| 名称 | 类型 | 描述 | -| ----------- | ------ | ---------- | -| fill | String | 填充颜色 | -| stroke | String | 描边颜色 | -| lineWidth | Number | 描边宽度 | -| opacity | Number | 透明度 | -| fillOpacity | Number | 填充透明度 | - -#### toolbarCfg - -**optional** _object_ - -Toolbar 配置。 - -```ts -interface ToolbarCfg { - /** toolbar css 类名 */ - className?: string; - /** toolbar 容器样式 */ - style?: React.CSSProperties; - /** 是否展示 */ - show?: boolean; - /** 缩放因子 */ - zoomFactor?: number; - /** 自定义 icon */ - customContent?: ({ - zoomIn, - zoomOut, - toggleFullscreen, - fullscreen, - }: { - zoomIn: () => void; - zoomOut: () => void; - toggleFullscreen: () => void; - fullscreen: boolean; - }) => React.ReactElement; -} -``` - -#### tooltipCfg - -**optional** _object_ - -Tooltip 配置。 - -```ts -interface ToolbarCfg { - /** toolbar css 类名 */ - className?: string; - /** toolbar 容器样式 */ - style?: React.CSSProperties; - /** 是否展示 */ - show?: boolean; - /** 自定义模板 */ - customContent: (item?: NodeConfig) => React.ReactElement; -} -``` - -#### menuCgf - -**optional** _object_ - -MenuCfg 配置。 - -```ts -interface MenuCfg { - container?: HTMLDivElement | string | null; - className?: string; - handleMenuClick?: (target: HTMLElement, item: Item) => void; - customContent?: (evt?: IG6GraphEvent) => React.ReactNode; - // offsetX 与 offsetY 需要加上父容器的 padding - offsetX?: number; - offsetY?: number; - shouldBegin?: (evt?: IG6GraphEvent) => boolean; - // 允许出现 tooltip 的 item 类型 - itemTypes?: string[]; - trigger?: 'click' | 'contextmenu'; -} -``` - -## 方法 - -#### graph.downloadFullImage(name, type, imageConfig) - -将画布上的元素导出为图片。 - -**参数** - -| 名称 | 类型 | 是否必选 | 描述 | -| --- | --- | --- | --- | -| name | String | false | 图片的名称,不指定则为 'graph' | -| type | `'image/png'` / `'image/jpeg'` / `'image/webp'` / `'image/bmp'` | false | 图片的类型。图的 `renderer` 为默认的 `'canvas'` 时生效,图的 `renderer` 为 `'svg'` 时将导出 svg 文件 | -| imageConfig | Object | false | 图片的配置项,可选,具体字段见下方 | - -其中,imageConfig 为导出图片的配置参数: - -| 名称 | 类型 | 是否必选 | 描述 | -| --- | --- | --- | --- | -| backgroundColor | String | false | 图片的背景色,可选,不传值时将导出透明背景的图片 | -| padding | Number / Number[] | false | 导出图片的上左下右 padding 值。当 `padding` 为 number 类型时,四周 `padding` 相等 | - -**用法** - -```ts -{ - onReady: (graph) => { - graph.downloadFullImage('tree-graph', { - backgroundColor: '#ddd', - padding: [30, 15, 15, 15], - }); - }; -} -``` - -#### graph.toFullDataURL(callback, type, imageConfig) - -将画布上元素生成为图片的 URL。 - -**参数** - -| 名称 | 类型 | 是否必选 | 描述 | -| --- | --- | --- | --- | -| callback | Function | true | 异步生成 dataUrl 完成后的回调函数,在这里处理生成的 dataUrl 字符串 | -| type | `'image/png'` / `'image/jpeg'` / `'image/webp'` / `'image/bmp'` | false | 图片的类型。图的 `renderer` 为默认的 `'canvas'` 时生效,图的 `renderer` 为 `'svg'` 时将导出 svg 文件 | -| imageConfig | Object | false | 图片的配置项,可选,具体字段见下方 | - -其中,imageConfig 为导出图片的配置参数: - -| 名称 | 类型 | 是否必选 | 描述 | -| --- | --- | --- | --- | -| backgroundColor | String | false | 图片的背景色,可选,不传值时将导出透明背景的图片 | -| padding | Number / Number[] | false | 导出图片的上左下右 padding 值。当 `padding` 为 number 类型时,四周 `padding` 相等 | - -无返回值,生成的结果请在 callback 中处理。如下示例: - -**用法** - -```ts -{ - onReady: (graph) => { - graph.toFullDataUrl( - // 第一个参数为 callback,必须 - (res) => { - // ... something - console.log(res); // 打印出结果 - }, - // 后两个参数不是必须 - 'image/jpeg', - (imageConfig: { - backgroundColor: '#fff', - padding: 10, - }), - ); - }; -} -``` - -#### graph.zoom(ratio, center) - -图表缩放。 - -**用法** - -```ts -{ - onReady: (graph) => { - // 缩小 0.5 - graph.zoom(0.5); - // 以[100, 100]为中心缩小 0.5 - graph.zoom(0.5, { x: 100, y: 100 }); - }; -} -``` - -## 事件 - -事件通过 `on` 统一绑定到 graph 上,通过 `off` 移除,onReady 会返回 graph 实例。 - -```ts -graph.on(eventName, (evt) => {}); -graph.off(eventName, (evt) => {}); -``` - -```ts -{ - onReady: (graph) => { - graph.on('node:click', (evt) => { - console.log(evt); - }); - }; -} -``` - -其中,事件对象 `evt` 的属性值有: - -- `type`: 事件类型 -- `name`: 事件名称 -- `x`: 画布上的 x 坐标 -- `y`: 画布上的 y 坐标 -- `clientX`: 浏览器窗口上的 x 坐标 -- `clientY`: 浏览器窗口上的 y 坐标 -- `canvasX`: 画布父容器视口上的 x 坐标 -- `canvasY`: 画布父容器视口上的 y 坐标 -- `item`: 事件的触发元素(节点/边/ Combo) -- `target`: 事件的触发图形 Shape 或画布对象 -- `bubbles`: 是否允许冒泡 -- `defaultPrevented`: 是否阻止了原生事件 -- `originalEvent`: 原始浏览器事件对象,其中的 `button` 可以用于区分 `click` 事件的左/中/右键 -- `timeStamp`: 触发事件的时间 -- `propagationStopped`: 是否阻止传播(向上冒泡) -- `propagationPath`: 触发事件的路径 - -`eventName` 见下方内容。 - -#### 通用交互事件 - -| 事件名称 | 描述 | -| --- | --- | -| click | 单击鼠标**左键**或者按下回车键时触发 | -| dblclick | 双击鼠标**左键**时触发,同时会触发两次 click | -| mouseenter | 鼠标移入元素范围内触发,**该事件不冒泡**,即鼠标移到其后代元素上时不会触发 | -| mousemove | 鼠标在元素内部移到时不断触发,不能通过键盘触发 | -| mouseout | 鼠标移出目标元素后触发 | -| mouseover | 鼠标移入目标元素上方,鼠标移到其后代元素上时会触发 | -| mouseleave | 鼠标移出元素范围时触发,**该事件不冒泡**,即鼠标移到其后代元素时不会触发 | -| mousedown | 鼠标按钮被按下(左键或者右键)时触发,不能通过键盘触发 | -| mouseup | 鼠标按钮被释放弹起时触发,不能通过键盘触发 | -| contextmenu | 用户右击鼠标时触发并打开上下文菜单 | -| dragstart | 当拖拽元素开始被拖拽的时候触发的事件,此事件作用在被拖曳元素上 | -| drag | 当拖拽元素在拖动过程中时触发的事件,此事件作用于被拖拽元素上 | -| dragend | 当拖拽完成后触发的事件,此事件作用在被拖曳元素上 | -| dragenter | 当拖曳元素进入目标元素的时候触发的事件,此事件作用在目标元素上 | -| dragleave | 当拖曳元素离开目标元素的时候触发的事件,此事件作用在目标元素上 | -| drop | 被拖拽的元素在目标元素上同时鼠标放开触发的事件,此事件作用在目标元素上 | -| keydown | 按下键盘键触发该事件 | -| keyup | 释放键盘键触发该事件 | -| wheel | 鼠标滚轮滚动时触发该事件 | -| touchstart | 当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发 | -| touchmove | 当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,调用 `preventDefault()` 事件可以阻止滚动。 | -| touchend | 当手指从屏幕上离开的时候触发 | - -#### Node 交互事件 - -| 事件名称 | 描述 | -| ---------------- | ---------------------------------------------------------------------- | -| node:click | 鼠标**左键**单击节点时触发 | -| node:dblclick | 鼠标双击**左键**节点时触发,同时会触发两次 node:click | -| node:mouseenter | 鼠标移入节点时触发 | -| node:mousemove | 鼠标在节点内部移到时不断触发,不能通过键盘触发 | -| node:mouseout | 鼠标移出节点后触发 | -| node:mouseover | 鼠标移入节点上方时触发 | -| node:mouseleave | 鼠标移出节点时触发 | -| node:mousedown | 鼠标按钮在节点上按下(左键或者右键)时触发,不能通过键盘触发 | -| node:mouseup | 节点上按下的鼠标按钮被释放弹起时触发,不能通过键盘触发 | -| node:dragstart | 当节点开始被拖拽的时候触发的事件,此事件作用在被拖曳节点上 | -| node:drag | 当节点在拖动过程中时触发的事件,此事件作用于被拖拽节点上 | -| node:dragend | 当拖拽完成后触发的事件,此事件作用在被拖曳节点上 | -| node:dragenter | 当拖曳节点进入目标元素的时候触发的事件,此事件作用在目标元素上 | -| node:dragleave | 当拖曳节点离开目标元素的时候触发的事件,此事件作用在目标元素上 | -| node:dragover | 当拖曳节点在另一目标元素上移动时触发此事件,此事件作用在目标元素上 | -| node:drop | 被拖拽的节点在目标元素上同时鼠标放开触发的事件,此事件作用在目标元素上 | -| node:touchstart | 在触控屏上,当节点开始被触碰的时候触发的事件 | -| node:touchmove | 在触控屏上,当节点开始被触碰过程中触发的事件 | -| node:touchend | 在触控屏上,当节点开始被触碰结束的时候触发的事件 | -| node:contextmenu | 用户在节点上右击鼠标时触发并打开右键菜单 | - -#### Edge 交互事件 - -| 事件名称 | 描述 | -| ---------------- | -------------------------------------------------------------------------- | -| edge:click | 鼠标**左键**单击边时触发 | -| edge:dblclick | 鼠标双击**左键**边时触发,同时会触发两次 edge:click | -| edge:mouseenter | 鼠标移入边时触发 | -| edge:mousemove | 鼠标在边上移到时不断触发,不能通过键盘触发 | -| edge:mouseout | 鼠标移出边后触发 | -| edge:mouseover | 鼠标移入边上方时触发 | -| edge:mouseleave | 鼠标移出边时触发 | -| edge:mousedown | 鼠标按钮在边上按下(左键或者右键)时触发,不能通过键盘触发 | -| edge:mouseup | 边上按下的鼠标按钮被释放弹起时触发,不能通过键盘触发 | -| edge:dragenter | 当拖曳元素进入目标边元素的时候触发的事件,此事件作用在目标边元素上 | -| edge:dragleave | 当拖曳元素离开目标边元素的时候触发的事件,此事件作用在目标边元素上 | -| edge:dragover | 当拖曳元素在另一目标边上移动时触发此事件,此事件作用在目标边元素上 | -| edge:drop | 被拖拽的元素在目标边元素上同时鼠标放开触发的事件,此事件作用在目标边元素上 | -| edge:contextmenu | 用户在边上右击鼠标时触发并打开右键菜单 | - -#### Canvas 交互事件 - -| 事件名称 | 描述 | -| ------------------ | ---------------------------------------------------------------------- | -| canvas:click | 鼠标**左键**单击画布时触发 | -| canvas:dblclick | 鼠标双击**左键**画布时触发 | -| canvas:mouseenter | 鼠标移入画布时触发 | -| canvas:mousemove | 鼠标在画布内部移到时不断触发,不能通过键盘触发 | -| canvas:mouseout | 鼠标移出画布后触发 | -| canvas:mouseover | 鼠标移入画布上方时触发 | -| canvas:mouseleave | 鼠标移出画布时触发 | -| canvas:mousedown | 鼠标按钮在画布上按下(左键或者右键)时触发,不能通过键盘触发 | -| canvas:mouseup | 画布上按下的鼠标按钮被释放弹起时触发,不能通过键盘触发 | -| canvas:contextmenu | 用户在画布上右击鼠标时触发并打开右键菜单 | -| canvas:dragstart | 当画布开始被拖拽的时候触发的事件,此事件作用在被拖曳画布上 | -| canvas:drag | 当画布在拖动过程中时触发的事件,此事件作用于被拖拽画布上 | -| canvas:dragend | 当拖拽完成后触发的事件,此事件作用在被拖曳画布上 | -| canvas:dragenter | 当拖曳画布进入目标元素的时候触发的事件,此事件作用在目标画布上 | -| canvas:dragleave | 当拖曳画布离开目标元素的时候触发的事件,此事件作用在目标画布上 | -| canvas:drop | 被拖拽的元素在空白画布上同时鼠标放开触发的事件,此事件作用在目标画布上 | -| canvas:touchstart | 在触控屏上,当画布开始被触碰的时候触发的事件 | -| canvas:touchmove | 在触控屏上,当画布开始被触碰过程中触发的事件 | -| canvas:touchend | 在触控屏上,当画布开始被触碰结束的时候触发的事件 | diff --git a/site/docs/api/flowchart/flowchart-api.zh.md b/site/docs/api/flowchart/flowchart-api.zh.md deleted file mode 100644 index 0479d6f1e..000000000 --- a/site/docs/api/flowchart/flowchart-api.zh.md +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: Flowchart -order: 1 ---- - -### 基本配置 - -#### data - -**optional** *Datum* - -默认数据 - -```ts -type Datum = { - nodes?: unknown[]; - egdes?: unknown[]; -}; -``` - -#### isAutoCenter - -**optional** *boolean* *default:* `false` - -画布是否自动居中 - - -#### nodePanelProps - -**optional** *NodePanelProps* - -节点面板配置 - -| 属性名 | 类型 | 描述 | 默认值 | 是否必填 | -|-------|-------|------|------|---------| -| showHeader | boolean | 是否展示 header | true | false | -| defaultActiveKey | string[] | 默认展开的面板,custom: 自定义节点;official: 内置节点 | ['custom', 'official'] | ['custom'] | -| registerNode | RegisterNode | 自定义节点 | - | false | - -*RegisterNode* - -| 属性名 | 类型 | 描述 | 默认值 | 是否必填 | -|-------|-------|------|------|---------| -| title | string | 自定义节点标题 | 自定级节点 | false | -| nodes | CustomNode[] | 节点数组 | - | false | - -```ts -interface CustomNode { - /** 节点名称,唯一 */ - name: string; - /** 节点 React 组件 */ - component: NsGraph.INodeRender; - /** popover 组件 */ - popover?: React.Component; - /** 默认标签 */ - label?: string; - /** 默认宽度 */ - width?: number; - /** 默认高度 */ - height?: number; - /** 连接锚点配置,默认上下左右四个 */ - ports?: NsGraph.INodeConfig['ports']; -} -``` - -#### canvasProps - -**optional** *CanvasProps* - -主画布配置 - - -| 属性名 | 类型 | 描述 | 默认值 | 是否必填 | -|-------|-------|------|------|---------| -| position | IPosition | 位置配置 | `{ top: 40, left: 240, right: 240, bottom: 0 }` | false | -| config | X6Config | 网格线等配置 | - | false | - -```ts -interface IPosition { - width?: number; - height?: number; - lineHeight?: number; - top?: number; - left?: number; - right?: number; - bottom?: number; -} -``` - -#### toolbarPanelProps - -**optional** *ToolbarPanelProps* - -Toolbar 配置 - - -| 属性名 | 类型 | 描述 | 默认值 | 是否必填 | -|-------|-------|------|------|---------| -| position | IPosition | 位置配置 | `{ top: 0, left: 240, right: 240, bottom: 0 }` | false | -| commands | CommandItem[] | 自定义命令 | - | false | - -```ts -type Command = - | 'undo-cmd' - | 'redo-cmd' - | 'front-node' - | 'back-node' - | 'save-graph-data' - | 'multi-select' - | 'add-group' - | 'del-group' - | 'graph-toggle-multi-select' - | 'graph-copy-selection' - | 'graph-paste-selection'; - -type CommandItem = { - /** 命令 */ - command: Command; - /** 名称 */ - text?: string; - /** tooltip */ - tooltip?: string; - /** - * iconName - * 对应 antd/icons,不存在时需要先注册 - * eg: 'RedoOutlined' - */ - iconName?: string; -} -``` - -```tsx -import { IconStore } from '@ant-design/charts' -import { SaveOutlined } from '@ant-design/icons'; - -IconStore.set('SaveOutlined', SaveOutlined); -``` - -#### scaleToolbarPanelProps - -**optional** *ScaleToolbarPanelProps* - -缩放控件 - - -| 属性名 | 类型 | 描述 | 默认值 | 是否必填 | -|-------|-------|------|------|---------| -| position | IPosition | 位置配置 | `{ top: 12, right: 12 }` | false | -| layout | 'horizontal'、'vertical' | 布局 | vertical | false | - - -#### detailPanelProps - -**optional** *DetailPanelProps* - -form 表单 - -| 属性名 | 类型 | 描述 | 默认值 | 是否必填 | -|-------|-------|------|------|---------| -| position | IPosition | 位置配置 | `{ width: 240, top: 0, bottom: 0, right: 0 }` | false | -| controlMapService | ControlMapService | 注册自定义`Form`组件,参考示例 | - | false | -| formSchemaService | FormSchemaService | 控制面板切换逻辑,参考示例 | - | false | - - - -#### contextMenuPanelProps - -**optional** *ContextMenuPanelProps* - -右键菜单 - -#### mode - -**optional** *'edit'|'scan'* - -默认 `edit` 模式, `scan` 模式下部分交互事件会被禁用。 - -### 事件 - -#### onReady - -**optional** *Function* - -组件装载完成回调,返回图表实例。 - -#### onSave - -**optional** *Function* - -点击回调,仅支持 save-graph-data ,返回画布数据,可用于 data 配置。 - - -#### onAddNode - -**optional** *Function* - -新增画布节点时的回调,返回节点配置。 - - -#### onAddEdge - -**optional** *Function* - -新增边时的回调,返回边配置。 - - -#### onConfigChange - -**optional** *Function* - -节点或边更新数据时的回调, - -```ts - /** 节点或边更新数据时调用 */ - onConfigChange?: (params: { data: Datum; type: string; config?: NsGraph.INodeConfig | NsGraph.IEdgeConfig }) => void; -``` - -#### onDestroy - -**optional** *Function* - -app 销毁前的回调 - diff --git a/site/docs/api/graphs/decomposition-tree-graph.en.md b/site/docs/api/graphs/decomposition-tree-graph.en.md deleted file mode 100644 index e6f8fb23d..000000000 --- a/site/docs/api/graphs/decomposition-tree-graph.en.md +++ /dev/null @@ -1,461 +0,0 @@ ---- -title: Decomposition Tree Graph ---- - -### Base configuration - -#### width - -**optional** _number_ _default:_ `500` - -Set the width of the graph. - -#### height - -**optional** _number_ _default:_ `500` - -Set the height of the graph. - -#### data - -Data, see the sample code. - -```ts -// Refer to the sample code for details. -interface Data { - id: string; - value: { - title: string; - items: Array<{ - text: string; - value: string; - icon: string; - }>; - }; -} -``` - -#### nodeCfg - -Node configuration. - -##### type - -**optional** _`string`_ - -Node type, default 'indicator-card', the configuration may not be effective after modification. - -##### size - -**optional** _Number[] | false | [120, 40]_ - -The (minimum) size of the node. Some graphs may be adapted to the size of the node content. - -##### style - -**optional** _object | Function_ - -Node style with support for callbacks. - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### label - -**optional** _object_ - -Node text styles, style supports callbacks. - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### anchorPoints - -**optional** _Number[]_ - -The anchorPoint of a node is the link point where the related edges link to. In other words, it is the intersection of a node and its related edges. anchorPoints is a 2d array, each element represents the position of one anchor point. The positions of the anchor points in a Shape are shown below, the range of each x and y is [0, 1]:
img - -##### title - -**optional** _object_ - -Node title configuration. - -```ts -{ - title: { - /** title container style */ - containerStyle?: IShapeStyle; - /** title style */ - style?: ILabelStyle; - /** auto ellipsis */ - autoEllipsis?: boolean; - }, -} -``` - -##### items - -**optional** _object_ - -Node items configuration. - -```ts -{ - items?: { - /** items conatiner style */ - containerStyle?: IShapeStyle; - /** item style */ - style?: ILabelStyle; - /** - * item layout methods - * - flex: text、value、icon divide the container width equally - * - bundled: text、(value、icon) divide the container width equally - * sort: true is invalid - */ - layout?: 'bundled' | 'flex'; - /** sort by item keys */ - sort?: boolean; - /** item padding */ - padding?: number | number[]; - }; -} -``` - -##### padding - -**optional** _number | number[]_ - -Item content padding . - -```ts -{ - padding: 8, -} -``` - -##### badge - -**optional** _Object_ - -Item status configuration, style supports callback. - -```ts - /** 节点标记配置 */ - badge?: { - /** 标记位置 */ - position?: 'left' | 'top' | 'right' | 'bottom'; - /** 标记大小 */ - size?: number | number[]; - /** 标记样式 */ - style?: IShapeStyle; - }; -``` - -##### percent - -**optional** _Object_ - -Item percent configuration, style supports callback. - -```ts - /** 节点占比配置 */ - badge?: { - /** 占比位置 */ - position?: 'top' | 'bottom'; - /** 背景高度 */ - size?: number; - /** 占比样式 */ - style?: IShapeStyle; - /** 占比背景样式 */ - backgroundStyle?: IShapeStyle; - }; -``` - -##### autoWidth - -**optional** _Boolean_ - -Whether to dynamically adjust the node width. If set to true, the title autoEllipsis configuration is invalid. - -##### getChildren - -**optional** _Function_ - -Asynchronously load data when Marker is clicked. - -##### customContent - -**optional** _Function_ - -Custom items, returns the maximum height of a custom items. - -```ts -{ - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text, value, icon } = item; - let textShape, valueShape, iconShape; - textShape = - text && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX, - y: startY, - text, - fill: '#aaa', - }, - // Unique field within group - name: `text-${Math.random()}`, - }); - valueShape = - value && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX + width / 2, - y: startY, - text: value, - fill: '#f00', - }, - name: `value-${Math.random()}`, - }); - iconShape = - icon && - group!.addShape('image', { - attrs: { - x: startX, - y: startY, - width: 72, - height: 72, - img: icon, - }, - name: `image-${Math.random()}`, - }); - return Math.max( - textShape?.getBBox().height ?? 0, - valueShape?.getBBox().height ?? 0, - iconShape?.getBBox().height ?? 0, - ); - }, -} -``` - -##### nodeStateStyles - -**optional** _object_ - -Node style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -Edge configuration. - -##### type - -Edge type, default `cubic-horizontal` - -- line: straight line without control points; -- polyline: polyline with one or more control points; -- arc; -- quadratic: quadratic bezier curve; -- cubic: cubic bezier curve; -- cubic-vertical:vertical cubic bezier curve. The user can not assign the control point for this type of edge; -- cubic-horizontal: horizontal cubic bezier curve. The user can not assign the control point for this type of edge; -- loop: self-loop edge. - -
-img - -##### label - -**optional** _object_ - -Edge text styles, style supports callbacks. - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -Edge start arrow. - -```ts -interface ArrowConfig { - /** Arrow type */ - type?: 'vee' | 'triangle'; - /** Arrow offset */ - d?: number; - /** Arrow path */ - path?: string; - /** Arrow stroke */ - stroke?: string; - /** Arrow fill */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -Edge end arrow. - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -Side style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### level - -**optional** _number_ - -Set the default expansion level, default 100. - -#### behaviors - -**optional** _Number[]_ - -Interaction mode, default `['drag-canvas', 'zoom-canvas']`. - -- drag-canvas: Drag canvas -- scroll-canvas: Scroll canvas -- zoom-canvas: Zoom canvas -- drag-node: Drag node - -#### markerCfg - -**optional** _Boolean | MarkerCfg_ - -Marker configuration, support callback. - -```ts -interface MarkerCfg { - show?: boolean; - collapsed?: boolean; - position?: 'left' | 'right' | 'top' | 'bottom'; - style?: ShapeStyle; -} -``` - -#### animate - -**optional** _Boolean_ - -Whether to turn on animation, default to 'true'. - -#### autoFit - -**optional** _Boolean_ - -Whether to scale node size adaptive container. Default value is 'true '. - -#### minimapCfg - -**optional** _objecr_ - -Min map configruation. - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -Layout. - -```ts -{ - /** Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, B = bottom, L = left, and R = right. */ - direction: 'LR', - getWidth: () => { - // The width of the node used to calculate the layout is recommended as size[0] - return 16; - }, - getHeight: () => { - // The width of the node used to calculate the layout is recommended as size[1] - return 60; - }, - getVGap: () => { - // The vertical clearance of each node is used in conjunction with the getHeight return value - return 16; - }, - getHGap: () => { - // The vertical clearance of each node is used in conjunction with the getWidth return value - return 100; - }, -} -``` - -### Functions - -[Reference](/en/docs/api/common-graph/common-graph#functions) - -### Events - -[Reference](/en/docs/api/common-graph/common-graph#events) diff --git a/site/docs/api/graphs/decomposition-tree-graph.zh.md b/site/docs/api/graphs/decomposition-tree-graph.zh.md deleted file mode 100644 index 95ce894b7..000000000 --- a/site/docs/api/graphs/decomposition-tree-graph.zh.md +++ /dev/null @@ -1,464 +0,0 @@ ---- -title: 拆解树 ---- - -### 基础配置 - -#### width - -**optional** _number_ _default:_ `500` - -设置图表宽度。 - -#### height - -**optional** _number_ _default:_ `500` - -设置图表高度。 - -#### data - -数据,详见示例代码。 - -```ts -// 具体参考示例代码 -interface Data { - id: string; - value: { - title: string; - items: Array<{ - text: string; - value: string; - icon: string; - }>; - }; -} -``` - -#### nodeCfg - -节点配置 - -##### type - -**optional** _`string`_ - -节点类型,默认 `indicator-card`, 修改后配置可能不生效。 - -##### size - -**optional** _Number[] | false | [120, 40]_ - -节点的(最小)大小,部分图表可能会根据节点内容自适应大小。 - -##### style - -**optional** _object | Function_ - -节点样式, 支持回调。 - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### label - -**optional** _object_ - -节点文本样式, style 支持回调。 - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### anchorPoints - -**optional** _Number[]_ - -节点的连接点 anchorPoint 指的是边连入节点的相对位置,即节点与其相关边的交点位置,默认值 `[[0.5, 0], [0.5, 1]]`。anchorPoints 是一个二维数组,每一项表示一个连接点的位置,在一个图形 Shape 中,连接点的位置如下图所示,x 和 y 方向上范围都是 [0, 1]:
img - -##### title - -**optional** _object_ - -节点 title 配置。 - -```ts -{ - title: { - /** title 容器样式 */ - containerStyle?: IShapeStyle; - /** title 样式 */ - style?: ILabelStyle; - /** 超出自动隐藏 */ - autoEllipsis?: boolean; - }, -} -``` - -##### items - -**optional** _object_ - -节点内容配置。 - -```ts -{ - items?: { - /** items 容器样式 */ - containerStyle?: IShapeStyle; - /** item 样式 */ - style?: ILabelStyle; - /** - * item 布局方式 - * - flex: text、value、icon 均分容器宽度 - * - bundled: text、(value、icon) 均分容器宽度 - * sort: true 时无效 - */ - layout?: 'bundled' | 'flex'; - /** 是否根据 item 顺序绘制 */ - sort?: boolean; - /** item 容器填充 */ - padding?: number | number[]; - }; -} -``` - -##### padding - -**optional** _number | number[]_ - -文本 padding 。 - -```ts -{ - padding: 8, -} -``` - -##### badge - -**optional** _Object_ - -节点状态配置,style 支持回调。 - -```ts - /** 节点标记配置 */ - badge?: { - /** 标记位置 */ - position?: 'left' | 'top' | 'right' | 'bottom'; - /** 标记大小 */ - size?: number | number[]; - /** 标记样式 */ - style?: IShapeStyle; - }; -``` - -##### percent - -**optional** _Object_ - -节点占比配置,style 支持回调。 - -```ts - /** 节点占比配置 */ - badge?: { - /** 占比位置 */ - position?: 'top' | 'bottom'; - /** 背景高度 */ - size?: number; - /** 占比样式 */ - style?: IShapeStyle; - /** 占比背景样式 */ - backgroundStyle?: IShapeStyle; - }; -``` - -##### autoWidth - -**optional** _Boolean_ - -是否动态调整节点宽度,设置为 true 时,title autoEllipsis 配置无效。 - -##### getChildren - -**optional** _Function_ - -点击 Marker 时异步加载数据。 - -##### customContent - -**optional** _Function_ - -自定义 items,需要返回自定义元素的最大高度。 - -```ts -{ - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text, value, icon } = item; - let textShape, valueShape, iconShape; - textShape = - text && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX, - y: startY, - text, - fill: '#aaa', - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - valueShape = - value && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX + width / 2, - y: startY, - text: value, - fill: '#f00', - }, - name: `value-${Math.random()}`, - }); - iconShape = - icon && - group!.addShape('image', { - attrs: { - x: startX, - y: startY, - width: 72, - height: 72, - img: icon, - }, - name: `image-${Math.random()}`, - }); - return Math.max( - textShape?.getBBox().height ?? 0, - valueShape?.getBBox().height ?? 0, - iconShape?.getBBox().height ?? 0, - ); - }, -} -``` - -##### nodeStateStyles - -**optional** _object_ - -节点在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -边配置 - -##### type - -边类型,默认 'cubic-horizontal' - -- line:直线,不支持控制点; -- polyline:折线,支持多个控制点; -- arc:圆弧线; -- quadratic:二阶贝塞尔曲线; -- cubic:三阶贝塞尔曲线; -- cubic-vertical:垂直方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- cubic-horizontal:水平方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- loop:自环。 - -这些内置边的默认样式分别如下图所示。
img - -##### label - -**optional** _object_ - -边文本样式, style 支持回调。 - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -边开始箭头。 - -```ts -interface ArrowConfig { - /** 箭头类型 */ - type?: 'vee' | 'triangle'; - /** 偏移量 */ - d?: number; - /** 绘制路径 */ - path?: string; - /** 描边 */ - stroke?: string; - /** 填充 */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -边结束箭头。 - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -边在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### level - -**optional** _number_ - -设置默认展开层级,默认 100。 - -#### behaviors - -**optional** _Number[]_ - -交互模式, 默认值 `['drag-canvas', 'zoom-canvas']`。 - -- drag-canvas: 拖拽画布 -- scroll-canvas: 滚轮滚动画布 -- zoom-canvas: 缩放画布 -- drag-node: 拖拽节点 - -#### markerCfg - -**optional** _Boolean | MarkerCfg_ - -Marker 配置, 支持回调。 - -```ts -interface MarkerCfg { - /** 是否展示 */ - show?: boolean; - /** 是否折叠态 */ - collapsed?: boolean; - /** 位置 */ - position?: 'left' | 'right' | 'top' | 'bottom'; - /** 样式 */ - style?: ShapeStyle; -} -``` - -#### animate - -**optional** _Boolean_ - -是否开启动画,默认值 `true`。 - -#### autoFit - -**optional** _Boolean_ - -是否缩放节点大小自适应容器,默认为 true。 - -#### minimapCfg - -**optional** _objecr_ - -迷你 map 配置。 - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -布局。 - -```ts -{ - /** Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, B = bottom, L = left, and R = right. */ - direction: 'TB', - getWidth: () => { - // 用于计算布局的节点宽度,建议设置为 size[0] - return 16; - }, - getHeight: () => { - // 用于计算布局的节点高度,建议设置为 size[1] - return 60; - }, - getVGap: () => { - // 每个节点的垂直间隙,会结合 getHeight 返回值使用 - return 16; - }, - getHGap: () => { - // 每个节点的水平间隙,会结合 getWidth 返回值使用 - return 100; - }, -} -``` - -### 方法 - -[详见](/zh/docs/api/common-graph/common-graph#方法) - -### 事件 - -[详见](/zh/docs/api/common-graph/common-graph#事件) diff --git a/site/docs/api/graphs/flow-analysis-graph.en.md b/site/docs/api/graphs/flow-analysis-graph.en.md deleted file mode 100644 index a2539902d..000000000 --- a/site/docs/api/graphs/flow-analysis-graph.en.md +++ /dev/null @@ -1,512 +0,0 @@ ---- -title: Flow Analysis Graph ---- - -### Base configuration - -#### width - -**optional** _number_ _default:_ `500` - -Set the width of the graph. - -#### height - -**optional** _number_ _default:_ `500` - -Set the height of the graph. - -#### data - -Data, see the sample code. - -```ts -// Refer to the sample code for details. -interface Data { - nodes: Array<{ - id: string; - value: { - title: string; - items: Array<{ - text: string; - value: string; - icon: string; - }>; - }; - }>; - edges: Array<{ - source: string; - target: string; - value: string; - }>; -} -``` - -#### nodeCfg - -Node configuration. - -##### type - -**optional** _`string`_ - -Node type, default 'indicator-card', the configuration may not be effective after modification. - -##### size - -**optional** _Number[] | false | [120, 40]_ - -The (minimum) size of the node. Some graphs may be adapted to the size of the node content. - -##### style - -**optional** _object | Function_ - -Node style with support for callbacks. - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### label - -**optional** _object_ - -Node text styles, style supports callbacks. - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### anchorPoints - -**optional** _Number[]_ - -The anchorPoint of a node is the link point where the related edges link to. In other words, it is the intersection of a node and its related edges. anchorPoints is a 2d array, each element represents the position of one anchor point. The positions of the anchor points in a Shape are shown below, the range of each x and y is [0, 1]:
img - -##### title - -**optional** _object_ - -Node title configuration. - -```ts -{ - title: { - /** title container style */ - containerStyle?: IShapeStyle; - /** title style */ - style?: ILabelStyle; - /** auto ellipsis */ - autoEllipsis?: boolean; - }, -} -``` - -##### items - -**optional** _object_ - -Node items configuration. - -```ts -{ - items?: { - /** items conatiner style */ - containerStyle?: IShapeStyle; - /** item style */ - style?: ILabelStyle; - /** - * item layout methods - * - flex: text、value、icon divide the container width equally - * - bundled: text、(value、icon) divide the container width equally(true is invalid) - * - follow: Arrange from left to right - */ - layout?: 'bundled' | 'flex' | 'follow'; - /** - * Horizontal spacing of content - * layout: 'follow' takes effct - */ - itemSpacing?: number; - /** sort by item keys */ - sort?: boolean; - /** item padding */ - padding?: number | number[]; - }; -} -``` - -##### padding - -**optional** _number | number[]_ - -Item content padding . - -```ts -{ - padding: 8, -} -``` - -##### badge - -**optional** _Object_ - -Item status configuration, style supports callback. - -```ts - /** 节点标记配置 */ - badge?: { - /** 标记位置 */ - position?: 'left' | 'top' | 'right' | 'bottom'; - /** 标记大小 */ - size?: number | number[]; - /** 标记样式 */ - style?: IShapeStyle; - }; -``` - -##### percent - -**optional** _Object_ - -Item percent configuration, style supports callback. - -```ts - /** 节点占比配置 */ - badge?: { - /** 占比位置 */ - position?: 'top' | 'bottom'; - /** 背景高度 */ - size?: number; - /** 占比样式 */ - style?: IShapeStyle; - /** 占比背景样式 */ - backgroundStyle?: IShapeStyle; - }; -``` - -##### autoWidth - -**optional** _Boolean_ - -Whether to dynamically adjust the node width. If set to true, the title autoEllipsis configuration is invalid. - -##### customContent - -**optional** _Function_ - -Custom items, returns the maximum height of a custom items. - -```ts -{ - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text, value, icon } = item; - let textShape, valueShape, iconShape; - textShape = - text && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX, - y: startY, - text, - fill: '#aaa', - }, - // Unique field within group - name: `text-${Math.random()}`, - }); - valueShape = - value && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX + width / 2, - y: startY, - text: value, - fill: '#f00', - }, - name: `value-${Math.random()}`, - }); - iconShape = - icon && - group!.addShape('image', { - attrs: { - x: startX, - y: startY, - width: 72, - height: 72, - img: icon, - }, - name: `image-${Math.random()}`, - }); - return Math.max( - textShape?.getBBox().height ?? 0, - valueShape?.getBBox().height ?? 0, - iconShape?.getBBox().height ?? 0, - ); - }, -} -``` - -##### nodeStateStyles - -**optional** _object_ - -Node style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -##### asyncData - -**optional** _Function_ - -Async Data - -```ts -const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ - nodes: [ - { - id: Math.random().toString(), - value: { - title: 'Target page', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: Math.random().toString(), - value: { - title: 'Target page', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - edges: [], - }); - }, 1000); - }); -}; -const asyncData = async () => { - return await fetchData(); -}; - -const config = { - nodeCfg: { asyncData }, - markerCfg: (cfg) => { - const { children = [] } = cfg; - return { - position: 'right', - show: true, - collapsed: !children?.length, - }; - }, -} -``` - -#### edgeCfg - -Edge configuration. - -##### type - -Edge type, default `cubic-horizontal` - -- line: straight line without control points; -- polyline: polyline with one or more control points; -- arc; -- quadratic: quadratic bezier curve; -- cubic: cubic bezier curve; -- cubic-vertical:vertical cubic bezier curve. The user can not assign the control point for this type of edge; -- cubic-horizontal: horizontal cubic bezier curve. The user can not assign the control point for this type of edge; -- loop: self-loop edge. - -
-img - -##### label - -**optional** _object_ - -Edge text styles, style supports callbacks. - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -Edge start arrow. - -```ts -interface ArrowConfig { - /** Arrow type */ - type?: 'vee' | 'triangle'; - /** Arrow offset */ - d?: number; - /** Arrow path */ - path?: string; - /** Arrow stroke */ - stroke?: string; - /** Arrow fill */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -Edge end arrow. - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -Side style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### behaviors - -**optional** _Number[]_ - -Interaction mode, default `['drag-canvas', 'zoom-canvas']`. - -- drag-canvas: Drag canvas -- scroll-canvas: Scroll canvas -- zoom-canvas: Zoom canvas -- drag-node: Drag node - -#### markerCfg - -**optional** _Boolean | MarkerCfg_ - -Marker configuration, support callback. - -```ts -interface MarkerCfg { - show?: boolean; - collapsed?: boolean; - position?: 'left' | 'right' | 'top' | 'bottom'; - style?: ShapeStyle; -} -``` - -#### animate - -**optional** _Boolean_ - -Whether to turn on animation, default to 'true'. - -#### autoFit - -**optional** _Boolean_ - -Whether to scale node size adaptive container. Default value is 'true '. - -#### minimapCfg - -**optional** _objecr_ - -Min map configruation. - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -Layout. - -```ts -{ - /** Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, B = bottom, L = left, and R = right. */ - rankdir: 'LR', - /** Layout center. */ - center: [0, 0], - /** Number of pixels that separate nodes vertically in the layout. */ - nodesepFunc: () => 1, - /** Number of pixels that separate nodes horizontally in the layout. */ - ranksepFunc: () => 1, -} -``` - -### Functions - -[Reference](/en/docs/api/common-graph/common-graph#functions) - -### Events - -[Reference](/en/docs/api/common-graph/common-graph#events) diff --git a/site/docs/api/graphs/flow-analysis-graph.zh.md b/site/docs/api/graphs/flow-analysis-graph.zh.md deleted file mode 100644 index 46e5a3fc6..000000000 --- a/site/docs/api/graphs/flow-analysis-graph.zh.md +++ /dev/null @@ -1,515 +0,0 @@ ---- -title: 来源去向图 ---- - -### 基础配置 - -#### width - -**optional** _number_ _default:_ `500` - -设置图表宽度。 - -#### height - -**optional** _number_ _default:_ `500` - -设置图表高度。 - -#### data - -数据,详见示例代码。 - -```ts -// 具体参考示例代码 -interface Data { - nodes: Array<{ - id: string; - value: { - title: string; - items: Array<{ - text: string; - value: string; - icon: string; - }>; - }; - }>; - edges: Array<{ - source: string; - target: string; - value: string; - }>; -} -``` - -#### nodeCfg - -节点配置 - -##### type - -**optional** _`string`_ - -节点类型,默认 `indicator-card`, 修改后配置可能不生效。 - -##### size - -**optional** _Number[] | false | [120, 40]_ - -节点的(最小)大小,部分图表可能会根据节点内容自适应大小。 - -##### style - -**optional** _object | Function_ - -节点样式, 支持回调。 - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### label - -**optional** _object_ - -节点文本样式, style 支持回调。 - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### anchorPoints - -**optional** _Number[]_ - -节点的连接点 anchorPoint 指的是边连入节点的相对位置,即节点与其相关边的交点位置,默认值 `[[0.5, 0], [0.5, 1]]`。anchorPoints 是一个二维数组,每一项表示一个连接点的位置,在一个图形 Shape 中,连接点的位置如下图所示,x 和 y 方向上范围都是 [0, 1]:
img - -##### title - -**optional** _object_ - -节点 title 配置。 - -```ts -{ - title: { - /** title 容器样式 */ - containerStyle?: IShapeStyle; - /** title 样式 */ - style?: ILabelStyle; - /** 超出自动隐藏 */ - autoEllipsis?: boolean; - }, -} -``` - -##### items - -**optional** _object_ - -节点内容配置。 - -```ts -{ - items?: { - /** items 容器样式 */ - containerStyle?: IShapeStyle; - /** item 样式 */ - style?: ILabelStyle; - /** - * item 布局方式 - * - flex: text、value、icon 均分容器宽度 - * - bundled: text、(value、icon) 均分容器宽度(sort: true 时无效) - * - follow: 从左到右依次排列 - */ - layout?: 'bundled' | 'flex' | 'follow'; - /** - * 内容横向间距 - * layout: 'follow' 时生效 - */ - itemSpacing?: number; - /** 是否根据 item 顺序绘制 */ - sort?: boolean; - /** item 容器填充 */ - padding?: number | number[]; - }; -} -``` - -##### padding - -**optional** _number | number[]_ - -文本 padding 。 - -```ts -{ - padding: 8, -} -``` - -##### badge - -**optional** _Object_ - -节点状态配置,style 支持回调。 - -```ts - /** 节点标记配置 */ - badge?: { - /** 标记位置 */ - position?: 'left' | 'top' | 'right' | 'bottom'; - /** 标记大小 */ - size?: number | number[]; - /** 标记样式 */ - style?: IShapeStyle; - }; -``` - -##### percent - -**optional** _Object_ - -节点占比配置,style 支持回调。 - -```ts - /** 节点占比配置 */ - badge?: { - /** 占比位置 */ - position?: 'top' | 'bottom'; - /** 背景高度 */ - size?: number; - /** 占比样式 */ - style?: IShapeStyle; - /** 占比背景样式 */ - backgroundStyle?: IShapeStyle; - }; -``` - -##### autoWidth - -**optional** _Boolean_ - -是否动态调整节点宽度,设置为 true 时,title autoEllipsis 配置无效。 - -##### customContent - -**optional** _Function_ - -自定义 items,需要返回自定义元素的最大高度。 - -```ts -{ - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text, value, icon } = item; - let textShape, valueShape, iconShape; - textShape = - text && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX, - y: startY, - text, - fill: '#aaa', - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - valueShape = - value && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX + width / 2, - y: startY, - text: value, - fill: '#f00', - }, - name: `value-${Math.random()}`, - }); - iconShape = - icon && - group!.addShape('image', { - attrs: { - x: startX, - y: startY, - width: 72, - height: 72, - img: icon, - }, - name: `image-${Math.random()}`, - }); - return Math.max( - textShape?.getBBox().height ?? 0, - valueShape?.getBBox().height ?? 0, - iconShape?.getBBox().height ?? 0, - ); - }, -} -``` - -##### nodeStateStyles - -**optional** _object_ - -节点在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -##### asyncData - -**optional** _Function_ - -异步获取数据 - -```ts -const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ - nodes: [ - { - id: Math.random().toString(), - value: { - title: '去向页面xx', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: Math.random().toString(), - value: { - title: '去向页面xxx', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - edges: [], - }); - }, 1000); - }); -}; -const asyncData = async () => { - return await fetchData(); -}; - -const config = { - nodeCfg: { asyncData }, - markerCfg: (cfg) => { - const { children = [] } = cfg; - return { - position: 'right', - show: true, - collapsed: !children?.length, - }; - }, -} -``` - -#### edgeCfg - -边配置 - -##### type - -边类型,默认 'cubic-horizontal' - -- line:直线,不支持控制点; -- polyline:折线,支持多个控制点; -- arc:圆弧线; -- quadratic:二阶贝塞尔曲线; -- cubic:三阶贝塞尔曲线; -- cubic-vertical:垂直方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- cubic-horizontal:水平方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- loop:自环。 - -这些内置边的默认样式分别如下图所示。
img - -##### label - -**optional** _object_ - -边文本样式, style 支持回调。 - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -边开始箭头。 - -```ts -interface ArrowConfig { - /** 箭头类型 */ - type?: 'vee' | 'triangle'; - /** 偏移量 */ - d?: number; - /** 绘制路径 */ - path?: string; - /** 描边 */ - stroke?: string; - /** 填充 */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -边结束箭头。 - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -边在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### behaviors - -**optional** _Number[]_ - -交互模式, 默认值 `['drag-canvas', 'zoom-canvas']`。 - -- drag-canvas: 拖拽画布 -- scroll-canvas: 滚轮滚动画布 -- zoom-canvas: 缩放画布 -- drag-node: 拖拽节点 - -#### markerCfg - -**optional** _Boolean | MarkerCfg_ - -Marker 配置, 支持回调。 - -```ts -interface MarkerCfg { - /** 是否展示 */ - show?: boolean; - /** 是否折叠态 */ - collapsed?: boolean; - /** 位置 */ - position?: 'left' | 'right' | 'top' | 'bottom'; - /** 样式 */ - style?: ShapeStyle; -} -``` - -#### animate - -**optional** _Boolean_ - -是否开启动画,默认值 `true`。 - -#### autoFit - -**optional** _Boolean_ - -是否缩放节点大小自适应容器,默认为 true。 - -#### minimapCfg - -**optional** _objecr_ - -迷你 map 配置。 - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -布局。 - -```ts -{ - /** Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, B = bottom, L = left, and R = right. */ - rankdir: 'LR', - /** Layout center. */ - center: [0, 0], - /** Number of pixels that separate nodes vertically in the layout. */ - nodesepFunc: () => 1, - /** Number of pixels that separate nodes horizontally in the layout. */ - ranksepFunc: () => 1, -} -``` - -### 方法 - -[详见](/zh/docs/api/common-graph/common-graph#方法) - -### 事件 - -[详见](/zh/docs/api/common-graph/common-graph#事件) diff --git a/site/docs/api/graphs/fund-flow-graph.en.md b/site/docs/api/graphs/fund-flow-graph.en.md deleted file mode 100644 index ad1337c33..000000000 --- a/site/docs/api/graphs/fund-flow-graph.en.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Fund Flow Graph ---- - -### Base configuration - -> Please combine with [General Configuration](/en/docs/api/common-graph/common-graph#basic-configuration) - -#### data - -Data, see the sample code. - -```ts -// Refer to the sample code for details. -interface Data { - nodes: Array<{ - id: string; - value: { - text: string; - icon?: string; - }; - }>; - edges: Array<{ - source: string; - target: string; - value: { - text?: string; - subText?: string; - }>; -} -``` - -#### nodeCfg - -Node configration. - -##### type - -**optional** _`string`_ - -The default edge type is `fund-card`, Some configurations may not take effect after the modification. - -#### edgeCfg - -Edge configuration. - -##### type - -The default edge type is 'fund-line'. Some configurations may not take effect after modification. - -#### layout - -**optional** _object_ - -Layout. - -```ts -{ - /** Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, B = bottom, L = left, and R = right. */ - rankdir: 'LR', - /** Number of pixels that separate nodes vertically in the layout. */ - nodesep: 30, - /** Number of pixels that separate nodes horizontally in the layout. */ - ranksep: 50, -} -``` diff --git a/site/docs/api/graphs/fund-flow-graph.zh.md b/site/docs/api/graphs/fund-flow-graph.zh.md deleted file mode 100644 index 5b5481201..000000000 --- a/site/docs/api/graphs/fund-flow-graph.zh.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: 资金流向图 ---- - -### 基础配置 - -> 请结合[通用配置](/zh/docs/api/common-graph/common-graph#基础配置) - -#### data - -数据,详见示例代码。 - -```ts -// 具体参考示例代码 -interface Data { - nodes: Array<{ - id: string; - value: { - text: string; - icon?: string; - }; - }>; - edges: Array<{ - source: string; - target: string; - value: { - text?: string; - subText?: string; - }>; -} -``` - -#### nodeCfg - -节点配置 - -##### type - -**optional** _`string`_ - -节点类型,默认 `fund-card`, 修改后部分配置可能不生效。 - -#### edgeCfg - -边配置 - -##### type - -边类型,默认 'fund-line',修改后部分配置可能不生效。 - -#### layout - -**optional** _object_ - -布局。 - -```ts -{ - /** Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, B = bottom, L = left, and R = right. */ - rankdir: 'LR', - /** Number of pixels that separate nodes vertically in the layout. */ - nodesep: 30, - /** Number of pixels that separate nodes horizontally in the layout. */ - ranksep: 50, -} -``` diff --git a/site/docs/api/graphs/mind-map-graph.en.md b/site/docs/api/graphs/mind-map-graph.en.md deleted file mode 100644 index 9871c3c1d..000000000 --- a/site/docs/api/graphs/mind-map-graph.en.md +++ /dev/null @@ -1,461 +0,0 @@ ---- -title: Mind Map Graph ---- - -### Base configuration - -#### width - -**optional** _number_ _default:_ `500` - -Set the width of the graph. - -#### height - -**optional** _number_ _default:_ `500` - -Set the height of the graph. - -#### data - -Data, see the sample code. - -```ts -// Refer to the sample code for details. -interface Data { - id: string; - value: { - title: string; - items: Array<{ - text: string; - value: string; - icon: string; - }>; - }; -} -``` - -#### nodeCfg - -Node configuration. - -##### type - -**optional** _`string`_ - -Node type, default 'indicator-card', the configuration may not be effective after modification. - -##### size - -**optional** _Number[] | false | [120, 40]_ - -The (minimum) size of the node. Some graphs may be adapted to the size of the node content. - -##### style - -**optional** _object | Function_ - -Node style with support for callbacks. - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### label - -**optional** _object_ - -Node text styles, style supports callbacks. - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### anchorPoints - -**optional** _Number[]_ - -The anchorPoint of a node is the link point where the related edges link to. In other words, it is the intersection of a node and its related edges. anchorPoints is a 2d array, each element represents the position of one anchor point. The positions of the anchor points in a Shape are shown below, the range of each x and y is [0, 1]:
img - -##### title - -**optional** _object_ - -Node title configuration. - -```ts -{ - title: { - /** title container style */ - containerStyle?: IShapeStyle; - /** title style */ - style?: ILabelStyle; - /** auto ellipsis */ - autoEllipsis?: boolean; - }, -} -``` - -##### items - -**optional** _object_ - -Node items configuration. - -```ts -{ - items?: { - /** items conatiner style */ - containerStyle?: IShapeStyle; - /** item style */ - style?: ILabelStyle; - /** - * item layout methods - * - flex: text、value、icon divide the container width equally - * - bundled: text、(value、icon) divide the container width equally - * sort: true is invalid - */ - layout?: 'bundled' | 'flex'; - /** sort by item keys */ - sort?: boolean; - /** item padding */ - padding?: number | number[]; - }; -} -``` - -##### padding - -**optional** _number | number[]_ - -Item content padding . - -```ts -{ - padding: 8, -} -``` - -##### badge - -**optional** _Object_ - -Item status configuration, style supports callback. - -```ts - /** 节点标记配置 */ - badge?: { - /** 标记位置 */ - position?: 'left' | 'top' | 'right' | 'bottom'; - /** 标记大小 */ - size?: number | number[]; - /** 标记样式 */ - style?: IShapeStyle; - }; -``` - -##### percent - -**optional** _Object_ - -Item percent configuration, style supports callback. - -```ts - /** 节点占比配置 */ - badge?: { - /** 占比位置 */ - position?: 'top' | 'bottom'; - /** 背景高度 */ - size?: number; - /** 占比样式 */ - style?: IShapeStyle; - /** 占比背景样式 */ - backgroundStyle?: IShapeStyle; - }; -``` - -##### autoWidth - -**optional** _Boolean_ - -Whether to dynamically adjust the node width. If set to true, the title autoEllipsis configuration is invalid. - -##### getChildren - -**optional** _Function_ - -Asynchronously load data when Marker is clicked. - -##### customContent - -**optional** _Function_ - -Custom items, returns the maximum height of a custom items. - -```ts -{ - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text, value, icon } = item; - let textShape, valueShape, iconShape; - textShape = - text && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX, - y: startY, - text, - fill: '#aaa', - }, - // Unique field within group - name: `text-${Math.random()}`, - }); - valueShape = - value && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX + width / 2, - y: startY, - text: value, - fill: '#f00', - }, - name: `value-${Math.random()}`, - }); - iconShape = - icon && - group!.addShape('image', { - attrs: { - x: startX, - y: startY, - width: 72, - height: 72, - img: icon, - }, - name: `image-${Math.random()}`, - }); - return Math.max( - textShape?.getBBox().height ?? 0, - valueShape?.getBBox().height ?? 0, - iconShape?.getBBox().height ?? 0, - ); - }, -} -``` - -##### nodeStateStyles - -**optional** _object_ - -Node style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -Edge configuration. - -##### type - -Edge type, default `cubic-horizontal` - -- line: straight line without control points; -- polyline: polyline with one or more control points; -- arc; -- quadratic: quadratic bezier curve; -- cubic: cubic bezier curve; -- cubic-vertical:vertical cubic bezier curve. The user can not assign the control point for this type of edge; -- cubic-horizontal: horizontal cubic bezier curve. The user can not assign the control point for this type of edge; -- loop: self-loop edge. - -
-img - -##### label - -**optional** _object_ - -Edge text styles, style supports callbacks. - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -Edge start arrow. - -```ts -interface ArrowConfig { - /** Arrow type */ - type?: 'vee' | 'triangle'; - /** Arrow offset */ - d?: number; - /** Arrow path */ - path?: string; - /** Arrow stroke */ - stroke?: string; - /** Arrow fill */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -Edge end arrow. - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -Side style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### level - -**optional** _number_ - -Set the default expansion level, default 100. - -#### behaviors - -**optional** _Number[]_ - -Interaction mode, default `['drag-canvas', 'zoom-canvas']`. - -- drag-canvas: Drag canvas -- scroll-canvas: Scroll canvas -- zoom-canvas: Zoom canvas -- drag-node: Drag node - -#### markerCfg - -**optional** _Boolean | MarkerCfg_ - -Marker configuration, support callback. - -```ts -interface MarkerCfg { - show?: boolean; - collapsed?: boolean; - position?: 'left' | 'right' | 'top' | 'bottom'; - style?: ShapeStyle; -} -``` - -#### animate - -**optional** _Boolean_ - -Whether to turn on animation, default to 'true'. - -#### autoFit - -**optional** _Boolean_ - -Whether to scale node size adaptive container. Default value is 'true '. - -#### minimapCfg - -**optional** _objecr_ - -Min map configruation. - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -Layout. - -```ts -{ - /** Direction for rank nodes. Can be 'LR' | 'RL' | 'H'. */ - direction: 'H', - getWidth: () => { - // The width of the node used to calculate the layout is recommended as size[0] - return 16; - }, - getHeight: () => { - // The width of the node used to calculate the layout is recommended as size[1] - return 60; - }, - getVGap: () => { - // The vertical clearance of each node is used in conjunction with the getHeight return value - return 16; - }, - getHGap: () => { - // The vertical clearance of each node is used in conjunction with the getWidth return value - return 100; - }, -} -``` - -### Functions - -[Reference](/en/docs/api/common-graph/common-graph#functions) - -### Events - -[Reference](/en/docs/api/common-graph/common-graph#events) diff --git a/site/docs/api/graphs/mind-map-graph.zh.md b/site/docs/api/graphs/mind-map-graph.zh.md deleted file mode 100644 index 3b63a05a9..000000000 --- a/site/docs/api/graphs/mind-map-graph.zh.md +++ /dev/null @@ -1,464 +0,0 @@ ---- -title: 脑图 ---- - -### 基础配置 - -#### width - -**optional** _number_ _default:_ `500` - -设置图表宽度。 - -#### height - -**optional** _number_ _default:_ `500` - -设置图表高度。 - -#### data - -数据,详见示例代码。 - -```ts -// 具体参考示例代码 -interface Data { - id: string; - value: { - title: string; - items: Array<{ - text: string; - value: string; - icon: string; - }>; - }; -} -``` - -#### nodeCfg - -节点配置 - -##### type - -**optional** _`string`_ - -节点类型,默认 `indicator-card`, 修改后配置可能不生效。 - -##### size - -**optional** _Number[] | false | [120, 40]_ - -节点的(最小)大小,部分图表可能会根据节点内容自适应大小。 - -##### style - -**optional** _object | Function_ - -节点样式, 支持回调。 - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### label - -**optional** _object_ - -节点文本样式, style 支持回调。 - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### anchorPoints - -**optional** _Number[]_ - -节点的连接点 anchorPoint 指的是边连入节点的相对位置,即节点与其相关边的交点位置,默认值 `[[0.5, 0], [0.5, 1]]`。anchorPoints 是一个二维数组,每一项表示一个连接点的位置,在一个图形 Shape 中,连接点的位置如下图所示,x 和 y 方向上范围都是 [0, 1]:
img - -##### title - -**optional** _object_ - -节点 title 配置。 - -```ts -{ - title: { - /** title 容器样式 */ - containerStyle?: IShapeStyle; - /** title 样式 */ - style?: ILabelStyle; - /** 超出自动隐藏 */ - autoEllipsis?: boolean; - }, -} -``` - -##### items - -**optional** _object_ - -节点内容配置。 - -```ts -{ - items?: { - /** items 容器样式 */ - containerStyle?: IShapeStyle; - /** item 样式 */ - style?: ILabelStyle; - /** - * item 布局方式 - * - flex: text、value、icon 均分容器宽度 - * - bundled: text、(value、icon) 均分容器宽度 - * sort: true 时无效 - */ - layout?: 'bundled' | 'flex'; - /** 是否根据 item 顺序绘制 */ - sort?: boolean; - /** item 容器填充 */ - padding?: number | number[]; - }; -} -``` - -##### padding - -**optional** _number | number[]_ - -文本 padding 。 - -```ts -{ - padding: 8, -} -``` - -##### badge - -**optional** _Object_ - -节点状态配置,style 支持回调。 - -```ts - /** 节点标记配置 */ - badge?: { - /** 标记位置 */ - position?: 'left' | 'top' | 'right' | 'bottom'; - /** 标记大小 */ - size?: number | number[]; - /** 标记样式 */ - style?: IShapeStyle; - }; -``` - -##### percent - -**optional** _Object_ - -节点占比配置,style 支持回调。 - -```ts - /** 节点占比配置 */ - badge?: { - /** 占比位置 */ - position?: 'top' | 'bottom'; - /** 背景高度 */ - size?: number; - /** 占比样式 */ - style?: IShapeStyle; - /** 占比背景样式 */ - backgroundStyle?: IShapeStyle; - }; -``` - -##### autoWidth - -**optional** _Boolean_ - -是否动态调整节点宽度,设置为 true 时,title autoEllipsis 配置无效。 - -##### getChildren - -**optional** _Function_ - -点击 Marker 时异步加载数据。 - -##### customContent - -**optional** _Function_ - -自定义 items,需要返回自定义元素的最大高度。 - -```ts -{ - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text, value, icon } = item; - let textShape, valueShape, iconShape; - textShape = - text && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX, - y: startY, - text, - fill: '#aaa', - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - valueShape = - value && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX + width / 2, - y: startY, - text: value, - fill: '#f00', - }, - name: `value-${Math.random()}`, - }); - iconShape = - icon && - group!.addShape('image', { - attrs: { - x: startX, - y: startY, - width: 72, - height: 72, - img: icon, - }, - name: `image-${Math.random()}`, - }); - return Math.max( - textShape?.getBBox().height ?? 0, - valueShape?.getBBox().height ?? 0, - iconShape?.getBBox().height ?? 0, - ); - }, -} -``` - -##### nodeStateStyles - -**optional** _object_ - -节点在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -边配置 - -##### type - -边类型,默认 'cubic-horizontal' - -- line:直线,不支持控制点; -- polyline:折线,支持多个控制点; -- arc:圆弧线; -- quadratic:二阶贝塞尔曲线; -- cubic:三阶贝塞尔曲线; -- cubic-vertical:垂直方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- cubic-horizontal:水平方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- loop:自环。 - -这些内置边的默认样式分别如下图所示。
img - -##### label - -**optional** _object_ - -边文本样式, style 支持回调。 - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -边开始箭头。 - -```ts -interface ArrowConfig { - /** 箭头类型 */ - type?: 'vee' | 'triangle'; - /** 偏移量 */ - d?: number; - /** 绘制路径 */ - path?: string; - /** 描边 */ - stroke?: string; - /** 填充 */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -边结束箭头。 - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -边在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### level - -**optional** _number_ - -设置默认展开层级,默认 100。 - -#### behaviors - -**optional** _Number[]_ - -交互模式, 默认值 `['drag-canvas', 'zoom-canvas']`。 - -- drag-canvas: 拖拽画布 -- scroll-canvas: 滚轮滚动画布 -- zoom-canvas: 缩放画布 -- drag-node: 拖拽节点 - -#### markerCfg - -**optional** _Boolean | MarkerCfg_ - -Marker 配置, 支持回调。 - -```ts -interface MarkerCfg { - /** 是否展示 */ - show?: boolean; - /** 是否折叠态 */ - collapsed?: boolean; - /** 位置 */ - position?: 'left' | 'right' | 'top' | 'bottom'; - /** 样式 */ - style?: ShapeStyle; -} -``` - -#### animate - -**optional** _Boolean_ - -是否开启动画,默认值 `true`。 - -#### autoFit - -**optional** _Boolean_ - -是否缩放节点大小自适应容器,默认为 true。 - -#### minimapCfg - -**optional** _objecr_ - -迷你 map 配置。 - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -布局。 - -```ts -{ - /** Direction for rank nodes. Can be 'LR' | 'RL' | 'H'. */ - direction: 'H', - getWidth: () => { - // 用于计算布局的节点宽度,建议设置为 size[0] - return 16; - }, - getHeight: () => { - // 用于计算布局的节点高度,建议设置为 size[1] - return 60; - }, - getVGap: () => { - // 每个节点的垂直间隙,会结合 getHeight 返回值使用 - return 16; - }, - getHGap: () => { - // 每个节点的水平间隙,会结合 getWidth 返回值使用 - return 100; - }, -} -``` - -### 方法 - -[详见](/zh/docs/api/common-graph/common-graph#方法) - -### 事件 - -[详见](/zh/docs/api/common-graph/common-graph#事件) diff --git a/site/docs/api/graphs/organization-graph.en.md b/site/docs/api/graphs/organization-graph.en.md deleted file mode 100644 index 3afe95c3d..000000000 --- a/site/docs/api/graphs/organization-graph.en.md +++ /dev/null @@ -1,337 +0,0 @@ ---- -title: Organization Graph ---- - -### Base configuration - -#### width - -**optional** _number_ _default:_ `500` - -Set the width of the graph. - -#### height - -**optional** _number_ _default:_ `500` - -Set the height of the graph. - -#### data - -Data, see the sample code. - -```ts -// Refer to the sample code for details. -interface Data { - id: string; - value: { - title: string; - items: Array<{ - text: string; - value: string; - icon: string; - }>; - }; - children: Data[]; -} -``` - -#### nodeCfg - -Node configuration. - -##### type - -**optional** _`string`_ - -Node type, default 'indicator-card', the configuration may not be effective after modification. - -##### size - -**optional** _Number[] | false | [120, 40]_ - -The (minimum) size of the node. Some graphs may be adapted to the size of the node content. - -##### style - -**optional** _object | Function_ - -Node style with support for callbacks. - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### label - -**optional** _object_ - -Node text styles, style supports callbacks. - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### anchorPoints - -**optional** _Number[]_ - -The anchorPoint of a node is the link point where the related edges link to. In other words, it is the intersection of a node and its related edges. anchorPoints is a 2d array, each element represents the position of one anchor point. The positions of the anchor points in a Shape are shown below, the range of each x and y is [0, 1]:
img - -##### padding - -**optional** _number | number[]_ - -Item content padding . - -```ts -{ - padding: 8, -} -``` - -##### autoWidth - -**optional** _Boolean_ - -Whether to dynamically adjust the node width. - -##### customContent - -**optional** _Function_ - -Custom items, returns the maximum height of a custom items. - -```ts -{ - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text } = item; - const textShape = - text && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX, - y: startY, - text, - fill: '#aaa', - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - return textShape?.getBBox().height ?? 0; - }, -} -``` - -##### nodeStateStyles - -**optional** _object_ - -Node style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -Edge configuration. - -##### type - -Edge type, default `polyline` - -- line: straight line without control points; -- polyline: polyline with one or more control points; -- arc; -- quadratic: quadratic bezier curve; -- cubic: cubic bezier curve; -- cubic-vertical:vertical cubic bezier curve. The user can not assign the control point for this type of edge; -- cubic-horizontal: horizontal cubic bezier curve. The user can not assign the control point for this type of edge; -- loop: self-loop edge. - -
-img - -##### label - -**optional** _object_ - -Edge text styles, style supports callbacks. - -```ts -{ - label: { - content: string | ((edge: EdgeCfg) => string); - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -Edge start arrow. - -```ts -interface ArrowConfig { - /** Arrow type */ - type?: 'vee' | 'triangle'; - /** Arrow offset */ - d?: number; - /** Arrow path */ - path?: string; - /** Arrow stroke */ - stroke?: string; - /** Arrow fill */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -Edge end arrow. - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -Side style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### behaviors - -**optional** _Number[]_ - -Interaction mode, default `['drag-canvas', 'zoom-canvas']`. - -- drag-canvas: Drag canvas -- scroll-canvas: Scroll canvas -- zoom-canvas: Zoom canvas -- drag-node: Drag node - -#### markerCfg - -**optional** _Boolean | MarkerCfg_ - -Marker configuration, support callback. - -```ts -interface MarkerCfg { - show?: boolean; - collapsed?: boolean; - position?: 'left' | 'right' | 'top' | 'bottom'; - style?: ShapeStyle; -} -``` - -#### animate - -**optional** _Boolean_ - -Whether to turn on animation, default to 'true'. - -#### autoFit - -**optional** _Boolean_ - -Whether to scale node size adaptive container. Default value is 'true '. - -#### minimapCfg - -**optional** _objecr_ - -Min map configruation. - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -Layout. - -```ts -{ - /** Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, B = bottom, L = left, and R = right. */ - direction: 'TB', - getWidth: () => { - // The width of the node used to calculate the layout is recommended as size[0] - return 16; - }, - getHeight: () => { - // The height of the node used to calculate the layout is recommended as size[1] - return 16; - }, - getVGap: () => { - // The vertical clearance of each node is used in conjunction with the getHeight return value - return 16; - }, - getHGap: () => { - // The vertical clearance of each node is used in conjunction with the getWidth return value - return 100; - }, -} -``` - -### Functions - -[Reference](/en/docs/api/common-graph/common-graph#functions) - -### Events - -[Reference](/en/docs/api/common-graph/common-graph#events) diff --git a/site/docs/api/graphs/organization-graph.zh.md b/site/docs/api/graphs/organization-graph.zh.md deleted file mode 100644 index 3b2d3b8ba..000000000 --- a/site/docs/api/graphs/organization-graph.zh.md +++ /dev/null @@ -1,340 +0,0 @@ ---- -title: 组织架构图 ---- - -### 基础配置 - -#### width - -**optional** _number_ _default:_ `500` - -设置图表宽度。 - -#### height - -**optional** _number_ _default:_ `500` - -设置图表高度。 - -#### data - -数据,详见示例代码。 - -```ts -// 具体参考示例代码 -interface Data { - id: string; - value: { - title: string; - items: Array<{ - text: string; - value: string; - icon: string; - }>; - }; - children: Data[]; -} -``` - -#### nodeCfg - -节点配置 - -##### type - -**optional** _`string`_ - -节点类型,默认 `organization-card`, 修改后配置可能不生效。 - -##### size - -**optional** _Number[] | false | [100, 44]_ - -节点的(最小)大小,部分图表可能会根据节点内容自适应大小。 - -##### style - -**optional** _object | Function_ - -节点样式, 支持回调。 - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### label - -**optional** _object_ - -节点文本样式, style 支持回调。 - -```ts -{ - label: { - style: { - fill: 'red'; - } - } -} -``` - -##### anchorPoints - -**optional** _Number[]_ - -节点的连接点 anchorPoint 指的是边连入节点的相对位置,即节点与其相关边的交点位置,默认值 `[[0.5, 0], [0.5, 1]]`。anchorPoints 是一个二维数组,每一项表示一个连接点的位置,在一个图形 Shape 中,连接点的位置如下图所示,x 和 y 方向上范围都是 [0, 1]:
img - -##### padding - -**optional** _number | number[]_ - -文本 padding 。 - -```ts -{ - padding: 8, -} -``` - -##### autoWidth - -**optional** _Boolean_ - -是否动态调整节点宽度,设置为 true 时。 - -##### customContent - -**optional** _Function_ - -自定义 items,需要返回自定义元素的最大高度。 - -```ts -{ - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text } = item; - const textShape = - text && - group!.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX, - y: startY, - text, - fill: '#aaa', - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - return textShape?.getBBox().height ?? 0; - }, -} -``` - -##### nodeStateStyles - -**optional** _object_ - -节点在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -边配置 - -##### type - -边类型,默认 'polyline' - -- line:直线,不支持控制点; -- polyline:折线,支持多个控制点; -- arc:圆弧线; -- quadratic:二阶贝塞尔曲线; -- cubic:三阶贝塞尔曲线; -- cubic-vertical:垂直方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- cubic-horizontal:水平方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- loop:自环。 - -这些内置边的默认样式分别如下图所示。
img - -##### label - -**optional** _object_ - -边文本样式, style 支持回调。 - -```ts -{ - label: { - content: string | ((edge: EdgeCfg) => string); - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -边开始箭头。 - -```ts -interface ArrowConfig { - /** 箭头类型 */ - type?: 'vee' | 'triangle'; - /** 偏移量 */ - d?: number; - /** 绘制路径 */ - path?: string; - /** 描边 */ - stroke?: string; - /** 填充 */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -边结束箭头。 - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -边在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### behaviors - -**optional** _Number[]_ - -交互模式, 默认值 `['drag-canvas', 'zoom-canvas']`。 - -- drag-canvas: 拖拽画布 -- scroll-canvas: 滚轮滚动画布 -- zoom-canvas: 缩放画布 -- drag-node: 拖拽节点 - -#### markerCfg - -**optional** _Boolean | MarkerCfg_ - -Marker 配置, 支持回调。 - -```ts -interface MarkerCfg { - /** 是否展示 */ - show?: boolean; - /** 是否折叠态 */ - collapsed?: boolean; - /** 位置 */ - position?: 'left' | 'right' | 'top' | 'bottom'; - /** 样式 */ - style?: ShapeStyle; -} -``` - -#### animate - -**optional** _Boolean_ - -是否开启动画,默认值 `true`。 - -#### autoFit - -**optional** _Boolean_ - -是否缩放节点大小自适应容器,默认为 true。 - -#### minimapCfg - -**optional** _objecr_ - -迷你 map 配置。 - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -布局。 - -```ts -{ - // 方向 - direction: 'TB', - getWidth: () => { - // 用于计算布局的节点高度,建议设置为 size[0] - return 16; - }, - getHeight: () => { - // 用于计算布局的节点高度,建议设置为 size[1] - return 16; - }, - getVGap: () => { - // 每个节点的垂直间隙,会结合 getHeight 返回值使用 - return 40; - }, - getHGap: () => { - // 每个节点的水平间隙,会结合 getWidth 返回值使用 - return 70; - }, -} -``` - -### 方法 - -[详见](/zh/docs/api/common-graph/common-graph#方法) - -### 事件 - -[详见](/zh/docs/api/common-graph/common-graph#事件) diff --git a/site/docs/api/graphs/radial-graph.en.md b/site/docs/api/graphs/radial-graph.en.md deleted file mode 100644 index 1ec149fea..000000000 --- a/site/docs/api/graphs/radial-graph.en.md +++ /dev/null @@ -1,289 +0,0 @@ ---- -title: Radial Graph ---- - -### Base configuration - -#### width - -**optional** _number_ _default:_ `500` - -Set the width of the graph. - -#### height - -**optional** _number_ _default:_ `500` - -Set the height of the graph. - -#### data - -Data, see the sample code. - -```ts -// Refer to the sample code for details. -interface Data { - nodes: Array<{ - id: string; - value: { - title: string; - items: Array<{ - text: string; - value: string; - icon: string; - }>; - }; - }>; - edges: Array<{ - source: string; - target: string; - value: string; - }>; -} -``` - -#### nodeCfg - -Node configuration. - -##### type - -**optional** _`string`_ - -Node type, default `rect`, support `icon-node`, Built-in nodes include `circle,rect,ellipse,diamond,triangle,star,image,modelRect,donut`.
img img - -##### size - -**optional** _Number[] | false | [120, 40]_ - -The (minimum) size of the node. Some graphs may be adapted to the size of the node content. - -##### style - -**optional** _object | Function_ - -Node style with support for callbacks. - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### labelCfg - -**optional** _object_ - -Node text styles, style supports callbacks. - -```ts -{ - labelCfg: { - style: { - fill: 'red'; - } - } -} -``` - -##### asyncData - -**optional** _Function_ - -Asynchronously data when a node is double-clicked, and the acquisition time can also be set automatically through Menu. See the example for details - - -##### nodeStateStyles - -**optional** _object_ - -Node style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -Edge configuration. - -##### type - -Edge type, default `polyline` - -- line: straight line without control points; -- polyline: polyline with one or more control points; -- arc; -- quadratic: quadratic bezier curve; -- cubic: cubic bezier curve; -- cubic-vertical:vertical cubic bezier curve. The user can not assign the control point for this type of edge; -- cubic-horizontal: horizontal cubic bezier curve. The user can not assign the control point for this type of edge; -- loop: self-loop edge. - -
-img - -##### label - -**optional** _object_ - -Edge text styles, style supports callbacks. - -```ts -{ - label: { - content: string | ((edge: EdgeCfg) => string); - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -Edge start arrow. - -```ts -interface ArrowConfig { - /** Arrow type */ - type?: 'vee' | 'triangle'; - /** Arrow offset */ - d?: number; - /** Arrow path */ - path?: string; - /** Arrow stroke */ - stroke?: string; - /** Arrow fill */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -Edge end arrow. - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -Side style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### behaviors - -**optional** _Number[]_ - -Interaction mode, default `['drag-canvas', 'zoom-canvas']`. - -- drag-canvas: Drag canvas -- scroll-canvas: Scroll canvas -- zoom-canvas: Zoom canvas -- drag-node: Drag node - - -#### animate - -**optional** _Boolean_ - -Whether to turn on animation, default to 'true'. - -#### autoFit - -**optional** _Boolean_ - -Whether to scale node size adaptive container. Default value is 'true '. - -#### minimapCfg - -**optional** _objecr_ - -Min map configruation. - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -Layout. - -```ts -interface Layout{ - /** 布局中心 */ - center?: PointTuple; - /** 停止迭代的最大迭代数 */ - maxIteration?: number; - /** 中心点,默认为数据中第一个点 */ - focusNode?: string | Node | null; - /** 每一圈半径 */ - unitRadius?: number | null; - /** 默认边长度 */ - linkDistance?: number; - /** 是否防止重叠 */ - preventOverlap?: boolean; - /** 节点直径 */ - nodeSize?: number | number[] | undefined; - /** 节点间距,防止节点重叠时节点之间的最小距离(两节点边缘最短距离) */ - nodeSpacing?: number | Function | undefined; - /** 是否必须是严格的 radial 布局,即每一层的节点严格布局在一个环上。preventOverlap 为 true 时生效 */ - strictRadial?: boolean; - /** 防止重叠步骤的最大迭代次数 */ - maxPreventOverlapIteration?: number; - sortBy?: string | undefined; - sortStrength?: number; - width?: number | undefined; - height?: number | undefined; -} -``` - -### Functions - -[Reference](/en/docs/api/common-graph/common-graph#functions) - -### Events - -[Reference](/en/docs/api/common-graph/common-graph#events) diff --git a/site/docs/api/graphs/radial-graph.zh.md b/site/docs/api/graphs/radial-graph.zh.md deleted file mode 100644 index a2cb433cd..000000000 --- a/site/docs/api/graphs/radial-graph.zh.md +++ /dev/null @@ -1,288 +0,0 @@ ---- -title: 辐射图 ---- - -### 基础配置 - -#### width - -**optional** _number_ _default:_ `500` - -设置图表宽度。 - -#### height - -**optional** _number_ _default:_ `500` - -设置图表高度。 - -#### data - -数据,详见示例代码。 - -```ts -// 具体参考示例代码 -interface Data { - nodes: Array<{ - id: string; - value: { - title: string; - items: Array<{ - text: string; - value: string; - icon: string; - }>; - }; - }>; - edges: Array<{ - source: string; - target: string; - value: string; - }>; -} -``` - -#### nodeCfg - -节点配置 - -##### type - -**optional** _`string`_ - -节点类型,默认 `circle`, 支持 icon-node,内置节点包括 icon-node ,card,circle,rect,ellipse,diamond,triangle,star,image,modelRect,donut,这些内置节点的默认样式分别如下图所示。
img img - -##### size - -**optional** _Number[] | false | [100, 44]_ - -节点的(最小)大小,部分图表可能会根据节点内容自适应大小。 - -##### style - -**optional** _object | Function_ - -节点样式, 支持回调。 - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### labelCfg - -**optional** _object_ - -节点文本样式, style 支持回调。 - -```ts -{ - labelCfg: { - style: { - fill: 'red'; - } - } -} -``` - -##### asyncData - -**optional** _Function_ - -双击节点时异步获取数据,也可通过 menu 自动设置获取时机,详见示例。 - - -##### nodeStateStyles - -**optional** _object_ - -节点在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -边配置 - -##### type - -边类型,默认 'polyline' - -- line:直线,不支持控制点; -- polyline:折线,支持多个控制点; -- arc:圆弧线; -- quadratic:二阶贝塞尔曲线; -- cubic:三阶贝塞尔曲线; -- cubic-vertical:垂直方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- cubic-horizontal:水平方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- loop:自环。 - -这些内置边的默认样式分别如下图所示。
img - -##### label - -**optional** _object_ - -边文本样式, style 支持回调。 - -```ts -{ - label: { - content: string | ((edge: EdgeCfg) => string); - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -边开始箭头。 - -```ts -interface ArrowConfig { - /** 箭头类型 */ - type?: 'vee' | 'triangle'; - /** 偏移量 */ - d?: number; - /** 绘制路径 */ - path?: string; - /** 描边 */ - stroke?: string; - /** 填充 */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -边结束箭头。 - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -边在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### behaviors - -**optional** _Number[]_ - -交互模式, 默认值 `['drag-canvas', 'zoom-canvas']`。 - -- drag-canvas: 拖拽画布 -- scroll-canvas: 滚轮滚动画布 -- zoom-canvas: 缩放画布 -- drag-node: 拖拽节点 - - -#### animate - -**optional** _Boolean_ - -是否开启动画,默认值 `true`。 - -#### autoFit - -**optional** _Boolean_ - -是否缩放节点大小自适应容器,默认为 true。 - -#### minimapCfg - -**optional** _objecr_ - -迷你 map 配置。 - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -布局。 - -```ts -interface Layout{ - /** 布局中心 */ - center?: PointTuple; - /** 停止迭代的最大迭代数 */ - maxIteration?: number; - /** 中心点,默认为数据中第一个点 */ - focusNode?: string | Node | null; - /** 每一圈半径 */ - unitRadius?: number | null; - /** 默认边长度 */ - linkDistance?: number; - /** 是否防止重叠 */ - preventOverlap?: boolean; - /** 节点直径 */ - nodeSize?: number | number[] | undefined; - /** 节点间距,防止节点重叠时节点之间的最小距离(两节点边缘最短距离) */ - nodeSpacing?: number | Function | undefined; - /** 是否必须是严格的 radial 布局,即每一层的节点严格布局在一个环上。preventOverlap 为 true 时生效 */ - strictRadial?: boolean; - /** 防止重叠步骤的最大迭代次数 */ - maxPreventOverlapIteration?: number; - sortBy?: string | undefined; - sortStrength?: number; - width?: number | undefined; - height?: number | undefined; -} -``` - -### 方法 - -[详见](/zh/docs/api/common-graph/common-graph#方法) - -### 事件 - -[详见](/zh/docs/api/common-graph/common-graph#事件) diff --git a/site/docs/api/graphs/radial-tree-graph.en.md b/site/docs/api/graphs/radial-tree-graph.en.md deleted file mode 100644 index b83cfcd3e..000000000 --- a/site/docs/api/graphs/radial-tree-graph.en.md +++ /dev/null @@ -1,252 +0,0 @@ ---- -title: Radial Tree Graph ---- - -### Base configuration - -#### width - -**optional** _number_ _default:_ `500` - -Set the width of the graph. - -#### height - -**optional** _number_ _default:_ `500` - -Set the height of the graph. - -#### data - -Data, see the sample code. - -```ts -// Refer to the sample code for details. -interface Data { - id: string; - value: { - id: string; - value: string; - }; - children: Data[]; -} -``` - -#### nodeCfg - -Node configuration. - -##### type - -**optional** _`string`_ - -Node type, default `rect`, support `icon-node`, Built-in nodes include `circle,rect,ellipse,diamond,triangle,star,image,modelRect,donut`.
img img - -##### size - -**optional** _Number[] | false | [120, 40]_ - -The (minimum) size of the node. Some graphs may be adapted to the size of the node content. - -##### style - -**optional** _object | Function_ - -Node style with support for callbacks. - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### labelCfg - -**optional** _object_ - -Node text styles, style supports callbacks. - -```ts -{ - labelCfg: { - style: { - fill: 'red'; - } - } -} -``` - -##### nodeStateStyles - -**optional** _object_ - -Node style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -Edge configuration. - -##### type - -Edge type, default `polyline` - -- line: straight line without control points; -- polyline: polyline with one or more control points; -- arc; -- quadratic: quadratic bezier curve; -- cubic: cubic bezier curve; -- cubic-vertical:vertical cubic bezier curve. The user can not assign the control point for this type of edge; -- cubic-horizontal: horizontal cubic bezier curve. The user can not assign the control point for this type of edge; -- loop: self-loop edge. - -
-img - -##### label - -**optional** _object_ - -Edge text styles, style supports callbacks. - -```ts -{ - label: { - content: string | ((edge: EdgeCfg) => string); - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -Edge start arrow. - -```ts -interface ArrowConfig { - /** Arrow type */ - type?: 'vee' | 'triangle'; - /** Arrow offset */ - d?: number; - /** Arrow path */ - path?: string; - /** Arrow stroke */ - stroke?: string; - /** Arrow fill */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -Edge end arrow. - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -Side style configuration items in different states. - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### behaviors - -**optional** _Number[]_ - -Interaction mode, default `['drag-canvas', 'zoom-canvas']`. - -- drag-canvas: Drag canvas -- scroll-canvas: Scroll canvas -- zoom-canvas: Zoom canvas -- drag-node: Drag node - - -#### animate - -**optional** _Boolean_ - -Whether to turn on animation, default to 'true'. - -#### autoFit - -**optional** _Boolean_ - -Whether to scale node size adaptive container. Default value is 'true '. - -#### minimapCfg - -**optional** _objecr_ - -Min map configruation. - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -Layout. - -```ts -{ - /** Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, B = bottom, L = left, and R = right. */ - direction: 'TB', - nodeSep: 20, - rankSep: 100, -} -``` - -### Functions - -[Reference](/en/docs/api/common-graph/common-graph#functions) - -### Events - -[Reference](/en/docs/api/common-graph/common-graph#events) diff --git a/site/docs/api/graphs/radial-tree-graph.zh.md b/site/docs/api/graphs/radial-tree-graph.zh.md deleted file mode 100644 index eb8b62df1..000000000 --- a/site/docs/api/graphs/radial-tree-graph.zh.md +++ /dev/null @@ -1,251 +0,0 @@ ---- -title: 辐射树图 ---- - -### 基础配置 - -#### width - -**optional** _number_ _default:_ `500` - -设置图表宽度。 - -#### height - -**optional** _number_ _default:_ `500` - -设置图表高度。 - -#### data - -数据,详见示例代码。 - -```ts -// 具体参考示例代码 -interface Data { - id: string; - value: { - id: string; - value: string; - }; - children: Data[]; -} -``` - -#### nodeCfg - -节点配置 - -##### type - -**optional** _`string`_ - -节点类型,默认 `circle`, 支持 icon-node,内置节点包括 icon-node ,card,circle,rect,ellipse,diamond,triangle,star,image,modelRect,donut,这些内置节点的默认样式分别如下图所示。
img img - -##### size - -**optional** _Number[] | false | [100, 44]_ - -节点的(最小)大小,部分图表可能会根据节点内容自适应大小。 - -##### style - -**optional** _object | Function_ - -节点样式, 支持回调。 - -```ts -{ - style: { - stroke: 'red'; - } -} -``` - -##### labelCfg - -**optional** _object_ - -节点文本样式, style 支持回调。 - -```ts -{ - labelCfg: { - style: { - fill: 'red'; - } - } -} -``` - -##### nodeStateStyles - -**optional** _object_ - -节点在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### edgeCfg - -边配置 - -##### type - -边类型,默认 'polyline' - -- line:直线,不支持控制点; -- polyline:折线,支持多个控制点; -- arc:圆弧线; -- quadratic:二阶贝塞尔曲线; -- cubic:三阶贝塞尔曲线; -- cubic-vertical:垂直方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- cubic-horizontal:水平方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点; -- loop:自环。 - -这些内置边的默认样式分别如下图所示。
img - -##### label - -**optional** _object_ - -边文本样式, style 支持回调。 - -```ts -{ - label: { - content: string | ((edge: EdgeCfg) => string); - style: { - fill: 'red'; - } - } -} -``` - -##### startArrow - -**optional** _object_ - -边开始箭头。 - -```ts -interface ArrowConfig { - /** 箭头类型 */ - type?: 'vee' | 'triangle'; - /** 偏移量 */ - d?: number; - /** 绘制路径 */ - path?: string; - /** 描边 */ - stroke?: string; - /** 填充 */ - fill?: string; -} -// eg -{ - startArrow: { - fill: 'red'; - }, -} -``` - -##### endArrow - -**optional** _object_ - -边结束箭头。 - -```ts -{ - endArrow: { - fill: 'red'; - }, -} -``` - -##### edgeStateStyles - -**optional** _object_ - -边在不同状态下的样式配置项。 - -```ts -{ - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, -} -``` - -#### behaviors - -**optional** _Number[]_ - -交互模式, 默认值 `['drag-canvas', 'zoom-canvas']`。 - -- drag-canvas: 拖拽画布 -- scroll-canvas: 滚轮滚动画布 -- zoom-canvas: 缩放画布 -- drag-node: 拖拽节点 - - -#### animate - -**optional** _Boolean_ - -是否开启动画,默认值 `true`。 - -#### autoFit - -**optional** _Boolean_ - -是否缩放节点大小自适应容器,默认为 true。 - -#### minimapCfg - -**optional** _objecr_ - -迷你 map 配置。 - -```ts -interface MiniMapConfig { - show?: boolean; - viewportClassName?: string; - type?: 'default' | 'keyShape' | 'delegate'; - size?: number[]; - delegateStyle?: ShapeStyle; - refresh?: boolean; - padding?: number; -} -``` - -#### layout - -**optional** _object_ - -布局。 - -```ts -{ - // 方向 - direction: 'LR', - nodeSep: 20, - rankSep: 100, -} -``` - -### 方法 - -[详见](/zh/docs/api/common-graph/common-graph#方法) - -### 事件 - -[详见](/zh/docs/api/common-graph/common-graph#事件) diff --git a/site/docs/map-api/advanced-plot/index.en.md b/site/docs/map-api/advanced-plot/index.en.md deleted file mode 100644 index 7f5f7794b..000000000 --- a/site/docs/map-api/advanced-plot/index.en.md +++ /dev/null @@ -1,602 +0,0 @@ ---- -title: Advanced Plot -order: 9 ---- - ---- -title: 高级图表 - Advanced Plot -order: 9 ---- - -Unstable API - -`L7Plot` 是高级图表类,可以组合多个图层以及图表。 - -```js -constructor(container: string | HTMLDivElement, options: L7PlotOptions) -``` - -## 一、配置 - -### container - -`string|HTMLDivElement` required - -图表渲染的 DOM 容器。 - -### options - -`L7PlotOptions` required - -配置项。 - -### `options.`width - -`number` optional default: `null` - -设置容器宽度。 - -### `options.`height - -`number` optional default: `null` - -设置容器高度。 - -### `options.`map - -`MapConfig` required - -地图容器配置项。 - -#### `map.`type - -`string` optional default: `'amap'` - -地图底图类型,支持以下两种类型: - -* amap: 高德地图 -* mapbox: Mapbox 地图 - -地图底图类型不同时,`map` 下面的有的配置项不相同,比如 `maxZoom`,AMap 最大缩放等级 18,Mapbox 最大缩放等级 20。除此之外还有,底图的交互状态配置,`zoomEnable`、`dragEnable`等。各配置项可详见各官网:高德地图 [配置项](https://lbs.amap.com/api/javascript-api/reference/map);Mapbox 地图 [配置项](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)。 - -#### `map.`token - -`string` required - -地图服务 token,需服务平台申请。 - -#### `map.`center - -`number[]` optional default: `[0, 0]` - -初始中心经纬度。 - -#### `map.`pitch - -`number` optional default: `0` - -初始倾角。 - -#### `map.`rotation - -`number` optional default: `0` - -初始旋转角度。 - -#### `map.`zoom - -`number` optional default: `0` - -初始缩放层级,底图可缩放层级分布为: - -* Mapbox (0-24) -* 高德 (2-19) - -#### `map.`minZoom - -`number` optional default: `0` - -地图最小缩放等级。 - -#### `map.`maxZoom - -`number` optional default: `20` - -地图最大缩放等级,AMap 最大缩放等级 18,Mapbox 最大缩放等级 20。 - -#### `map.`style - -`string` optional default: `dark` - -内置样式: - -* dark: 黑暗 -* light: 明亮 -* normal: 普通 -* blank: 无底图 - -自定义样式: - -```js -{ - style: 'amap://styles/2a09079c3daac9420ee53b67307a8006?isPublic=true'; -} -``` - - -### `options.`antialias - -`boolean` optional default: `true` - -是否开启抗锯齿。 - -### `options.`preserveDrawingBuffer - -`boolean` optional default: `false` - -是否保留缓冲区数据。 - -### `options.`logo - -`bool` optional default: `true` - -是否显示 logo。 - -### `options.`layers - -`LayerConfigType[]` optional default: `[]` - -图层组配置,图层类型支持 L7Plot 内置的图层。 - -```js -{ - layers: [ - { - name: 'myDotLayer', - type: 'dotLayer', - zIndex: 1, - source: { - data: data, - parser: { type: 'json', x: 'lng', y: 'lat' }, - }, - color: '#ffed11', - size: 40, - }, - { - name: 'myLabelLayer', - type: 'textLayer', - zIndex: 2, - source: { - data: data, - parser: { type: 'json', x: 'lng', y: 'lat' }, - }, - field: 'name', - }, - ], -} -``` - -### `options.`plots - -`PlotConfigType[]` optional default: `[]` - -图表组配置,图表类型支持 L7Plot 内置的图表。 - -```js -{ - plots: [ - { - type: 'choropleth', - zIndex: 1, - source: { - data: [], - joinBy: { - sourceField: 'code', - geoField: 'adcode', - }, - }, - viewLevel: { - level: 'world', - adcode: 'all', - }, - autoFit: true, - }, - { - type: 'dot', - zIndex: 2, - source: { - data: data, - parser: { type: 'json', x: 'lng', y: 'lat' }, - }, - color: '#1AA9FF', - tooltip: { - items: ['name', 'value'], - }, - }, - ], -} -``` - -### `options.`theme - -`string|object` optional default: `'light'` - -图表主题,详见 [Theme](/zh/docs/map-api/theme)。 - - - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - - - -## 二、属性 - -### DefaultOptions - -`object` **static** - -### container - -`HTMLDivElement` - -渲染的 DOM 容器。 - -### options - -`PlotOptions` - -配置项。 - -### scene - -`Scene` - -地图场景实例。 - -### layerGroup - -`LayerGroup` - -图层组。 - -### sceneLoaded - -`boolean` - -地图场景是否加载完成。 - -### layersLoaded - -`boolean` - -图层是否加载完成。 - -### zoomControl - -`undefined|Zoom` - -放缩器控件实例。 - -### scaleControl - -`undefined|Scale` - -比例尺控件实例。 - - - - - - - -## 三、方法 - - - -### changeSize - -修改容器大小。 - -```js -plot.changeSize(width: number, height: number); -``` - -### getScene - -获取地图 scene 实例。 - -```js -plot.getScene() : Scene; -``` - -### getMap - -获取 map 实例。 - -```js -plot.getMap() : MapboxInstance | AMapInstance; -``` - -### addLayer - -添加图层。 - -```js -plot.addLayer(layer: LayerConfigType | IPlotLayer); -``` - -### getLayers - -获取所有图层。 - -```js -plot.getLayers(): PlotLayer[]; -``` - -### getLayerByName - -根据图层名称获取图层。 - -```js -plot.getLayerByName(name: string): PlotLayer | undefined; -``` - -### removeLayer - -移除图层。 - -```js -plot.removeLayer(layer: PlotLayer); -``` - -### removeLayerByName - -根据图层名称移除图层。 - -```js -plot.removeLayerByName(name: string); -``` - -### removeAllLayer - -移除容器内所有的图层。 - -```js -plot.removeAllLayer(); -``` - -### addPlot - -添加图表。 - -```js -plot.addPlot(plotConfig: PlotConfigType); -``` - -### getPlots - -获取所有图表。 - -```js -plot.getPlots(): Plot[]; -``` - -### getPlotByName - -根据图表名称获取图表。 - -```js -plot.getPlotByName(name: string): Plot | undefined; -``` - -### removePlotByName - -移除图表。 - -```js -plot.removePlotByName(name: string); -``` - -### removeAllPlot - -移除容器内所有的图表。 - -```js -plot.removeAllPlot(); -``` - -### zoomIn - -地图放大一级。 - -```js -plot.zoomIn(); -``` - -### zoomOut - -地图缩小一级。 - -```js -plot.zoomOut(); -``` - -### setPitch - -设置地图倾角。 - -```js -plot.setPitch(pitch: number); -``` - -### fitBounds - -设置地图缩放范围。 - -```js -plot.fitBounds(bound: Bounds); -``` - -### addZoomControl - -添加地图缩放器控件。 - -```js -plot.addZoomControl(options: ZoomControlOptions); -``` - -### removeZoomControl - -移除地图缩放器控件。 - -```js -plot.removeZoomControl(); -``` - -### addScaleControl - -添加地图比例尺控件。 - -```js -plot.addScaleControl(options: ScaleControlOptions); -``` - -### removeScaleControl - -移除地图比例尺控件。 - -```js -plot.removeScaleControl(); -``` - - - - - -### exportPng - -```js -plot.exportPng(type?: 'png' | 'jpg'); -``` - -### on - -绑定事件。 - -```js -plot.on(event: string, callback: Function); -``` - -### once - -绑定一次事件。 - -```js -plot.once(event: string, callback: Function); -``` - -### off - -解绑事件。 - -```js -plot.off(event: string, callback: Function); -``` - -### destroy - -```js -plot.destroy(); -``` - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -plot.on(event: string, callback: Function); -``` - -#### 绑定一次事件 - -```js -plot.once(event: string, callback: Function); -``` - -#### 解绑事件 - -```js -plot.off(event: string, callback: Function); -``` diff --git a/site/docs/map-api/advanced-plot/index.zh.md b/site/docs/map-api/advanced-plot/index.zh.md deleted file mode 100644 index 35d02734a..000000000 --- a/site/docs/map-api/advanced-plot/index.zh.md +++ /dev/null @@ -1,597 +0,0 @@ ---- -title: 高级图表 - Advanced Plot -order: 9 ---- - -Unstable API - -`L7Plot` 是高级图表类,可以组合多个图层以及图表。 - -```js -constructor(container: string | HTMLDivElement, options: L7PlotOptions) -``` - -## 一、配置 - -### container - -`string|HTMLDivElement` required - -图表渲染的 DOM 容器。 - -### options - -`L7PlotOptions` required - -配置项。 - -### `options.`width - -`number` optional default: `null` - -设置容器宽度。 - -### `options.`height - -`number` optional default: `null` - -设置容器高度。 - -### `options.`map - -`MapConfig` required - -地图容器配置项。 - -#### `map.`type - -`string` optional default: `'amap'` - -地图底图类型,支持以下两种类型: - -* amap: 高德地图 -* mapbox: Mapbox 地图 - -地图底图类型不同时,`map` 下面的有的配置项不相同,比如 `maxZoom`,AMap 最大缩放等级 18,Mapbox 最大缩放等级 20。除此之外还有,底图的交互状态配置,`zoomEnable`、`dragEnable`等。各配置项可详见各官网:高德地图 [配置项](https://lbs.amap.com/api/javascript-api/reference/map);Mapbox 地图 [配置项](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)。 - -#### `map.`token - -`string` required - -地图服务 token,需服务平台申请。 - -#### `map.`center - -`number[]` optional default: `[0, 0]` - -初始中心经纬度。 - -#### `map.`pitch - -`number` optional default: `0` - -初始倾角。 - -#### `map.`rotation - -`number` optional default: `0` - -初始旋转角度。 - -#### `map.`zoom - -`number` optional default: `0` - -初始缩放层级,底图可缩放层级分布为: - -* Mapbox (0-24) -* 高德 (2-19) - -#### `map.`minZoom - -`number` optional default: `0` - -地图最小缩放等级。 - -#### `map.`maxZoom - -`number` optional default: `20` - -地图最大缩放等级,AMap 最大缩放等级 18,Mapbox 最大缩放等级 20。 - -#### `map.`style - -`string` optional default: `dark` - -内置样式: - -* dark: 黑暗 -* light: 明亮 -* normal: 普通 -* blank: 无底图 - -自定义样式: - -```js -{ - style: 'amap://styles/2a09079c3daac9420ee53b67307a8006?isPublic=true'; -} -``` - - -### `options.`antialias - -`boolean` optional default: `true` - -是否开启抗锯齿。 - -### `options.`preserveDrawingBuffer - -`boolean` optional default: `false` - -是否保留缓冲区数据。 - -### `options.`logo - -`bool` optional default: `true` - -是否显示 logo。 - -### `options.`layers - -`LayerConfigType[]` optional default: `[]` - -图层组配置,图层类型支持 L7Plot 内置的图层。 - -```js -{ - layers: [ - { - name: 'myDotLayer', - type: 'dotLayer', - zIndex: 1, - source: { - data: data, - parser: { type: 'json', x: 'lng', y: 'lat' }, - }, - color: '#ffed11', - size: 40, - }, - { - name: 'myLabelLayer', - type: 'textLayer', - zIndex: 2, - source: { - data: data, - parser: { type: 'json', x: 'lng', y: 'lat' }, - }, - field: 'name', - }, - ], -} -``` - -### `options.`plots - -`PlotConfigType[]` optional default: `[]` - -图表组配置,图表类型支持 L7Plot 内置的图表。 - -```js -{ - plots: [ - { - type: 'choropleth', - zIndex: 1, - source: { - data: [], - joinBy: { - sourceField: 'code', - geoField: 'adcode', - }, - }, - viewLevel: { - level: 'world', - adcode: 'all', - }, - autoFit: true, - }, - { - type: 'dot', - zIndex: 2, - source: { - data: data, - parser: { type: 'json', x: 'lng', y: 'lat' }, - }, - color: '#1AA9FF', - tooltip: { - items: ['name', 'value'], - }, - }, - ], -} -``` - -### `options.`theme - -`string|object` optional default: `'light'` - -图表主题,详见 [Theme](/zh/docs/map-api/theme)。 - - - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - - - -## 二、属性 - -### DefaultOptions - -`object` **static** - -### container - -`HTMLDivElement` - -渲染的 DOM 容器。 - -### options - -`PlotOptions` - -配置项。 - -### scene - -`Scene` - -地图场景实例。 - -### layerGroup - -`LayerGroup` - -图层组。 - -### sceneLoaded - -`boolean` - -地图场景是否加载完成。 - -### layersLoaded - -`boolean` - -图层是否加载完成。 - -### zoomControl - -`undefined|Zoom` - -放缩器控件实例。 - -### scaleControl - -`undefined|Scale` - -比例尺控件实例。 - - - - - - - -## 三、方法 - - - -### changeSize - -修改容器大小。 - -```js -plot.changeSize(width: number, height: number); -``` - -### getScene - -获取地图 scene 实例。 - -```js -plot.getScene() : Scene; -``` - -### getMap - -获取 map 实例。 - -```js -plot.getMap() : MapboxInstance | AMapInstance; -``` - -### addLayer - -添加图层。 - -```js -plot.addLayer(layer: LayerConfigType | IPlotLayer); -``` - -### getLayers - -获取所有图层。 - -```js -plot.getLayers(): PlotLayer[]; -``` - -### getLayerByName - -根据图层名称获取图层。 - -```js -plot.getLayerByName(name: string): PlotLayer | undefined; -``` - -### removeLayer - -移除图层。 - -```js -plot.removeLayer(layer: PlotLayer); -``` - -### removeLayerByName - -根据图层名称移除图层。 - -```js -plot.removeLayerByName(name: string); -``` - -### removeAllLayer - -移除容器内所有的图层。 - -```js -plot.removeAllLayer(); -``` - -### addPlot - -添加图表。 - -```js -plot.addPlot(plotConfig: PlotConfigType); -``` - -### getPlots - -获取所有图表。 - -```js -plot.getPlots(): Plot[]; -``` - -### getPlotByName - -根据图表名称获取图表。 - -```js -plot.getPlotByName(name: string): Plot | undefined; -``` - -### removePlotByName - -移除图表。 - -```js -plot.removePlotByName(name: string); -``` - -### removeAllPlot - -移除容器内所有的图表。 - -```js -plot.removeAllPlot(); -``` - -### zoomIn - -地图放大一级。 - -```js -plot.zoomIn(); -``` - -### zoomOut - -地图缩小一级。 - -```js -plot.zoomOut(); -``` - -### setPitch - -设置地图倾角。 - -```js -plot.setPitch(pitch: number); -``` - -### fitBounds - -设置地图缩放范围。 - -```js -plot.fitBounds(bound: Bounds); -``` - -### addZoomControl - -添加地图缩放器控件。 - -```js -plot.addZoomControl(options: ZoomControlOptions); -``` - -### removeZoomControl - -移除地图缩放器控件。 - -```js -plot.removeZoomControl(); -``` - -### addScaleControl - -添加地图比例尺控件。 - -```js -plot.addScaleControl(options: ScaleControlOptions); -``` - -### removeScaleControl - -移除地图比例尺控件。 - -```js -plot.removeScaleControl(); -``` - - - - - -### exportPng - -```js -plot.exportPng(type?: 'png' | 'jpg'); -``` - -### on - -绑定事件。 - -```js -plot.on(event: string, callback: Function); -``` - -### once - -绑定一次事件。 - -```js -plot.once(event: string, callback: Function); -``` - -### off - -解绑事件。 - -```js -plot.off(event: string, callback: Function); -``` - -### destroy - -```js -plot.destroy(); -``` - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -plot.on(event: string, callback: Function); -``` - -#### 绑定一次事件 - -```js -plot.once(event: string, callback: Function); -``` - -#### 解绑事件 - -```js -plot.off(event: string, callback: Function); -``` diff --git a/site/docs/map-api/components/label.en.md b/site/docs/map-api/components/label.en.md deleted file mode 100644 index e0475e41e..000000000 --- a/site/docs/map-api/components/label.en.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Label -order: 3 ---- - ---- -title: 数据标签 - Label -order: 3 ---- - -## `label.`field - -`string` required - -映射的标签数据字段。 - - - -## `label.`style - -`PointTextLayerStyleOptions` optional - -字体样式,PointTextLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------------- | ------------------------------------------------------------------------- | ----------- | ---------- | -------- | -| fill | 字体颜色 | `ColorAttr` | `'#fff'` | optional | -| fontSize | 字体大小 | `SizeAttr` | `12` | optional | -| opacity | 文字透明度 | `number` | `1` | optional | -| stroke | 文字描边颜色 | `string` | `'#fff'` | optional | -| strokeWidth | 文字描边宽度 | `number` | `0` | optional | -| strokeOpacity | 文字描边透明度 | `number` | `1` | optional | -| fontFamily | 文字字体 | `string` | | optional | -| fontWeight | 字体粗细程度 | `string` | | optional | -| textAllowOverlap | 是否允许文本覆盖 | `boolean` | `false` | optional | -| textAnchor | 文本相对锚点的位置 | `string` | `'center'` | optional | -| textOffset | 文本相对锚点的偏移量 | `number[]` | `[0, 0]` | optional | -| spacing | 字符间距 | `number` | `0` | optional | -| padding | 文本包围盒 padding (水平,垂直),影响碰撞检测结果,避免相邻文本靠的太近 | `number[]` | `[0, 0]` | optional | - -textAnchor 文本相对锚点的位置,支持以下相对锚点的位置: - -* 'right' -* 'top-right' -* 'left' -* 'bottom-right' -* 'left' -* 'top-left' -* 'bottom-left' -* 'bottom' -* 'bottom-right' -* 'bottom-left' -* 'top' -* 'top-right' -* 'top-left' -* 'center' - - -## `label.`state - -`IStateAttribute` optional - -标签交互反馈效果。 - -### `state.`active - -`boolean|IActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 标签高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 标签高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -### `state.`select - -`boolean|IActiveOption` optional default: `false` - -标签 mouseclick 选中高亮效果,开启 mouseclick 标签高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 标签高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` diff --git a/site/docs/map-api/components/label.zh.md b/site/docs/map-api/components/label.zh.md deleted file mode 100644 index 4076bda80..000000000 --- a/site/docs/map-api/components/label.zh.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: 数据标签 - Label -order: 3 ---- - -## `label.`field - -`string` required - -映射的标签数据字段。 - - - -## `label.`style - -`PointTextLayerStyleOptions` optional - -字体样式,PointTextLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------------- | ------------------------------------------------------------------------- | ----------- | ---------- | -------- | -| fill | 字体颜色 | `ColorAttr` | `'#fff'` | optional | -| fontSize | 字体大小 | `SizeAttr` | `12` | optional | -| opacity | 文字透明度 | `number` | `1` | optional | -| stroke | 文字描边颜色 | `string` | `'#fff'` | optional | -| strokeWidth | 文字描边宽度 | `number` | `0` | optional | -| strokeOpacity | 文字描边透明度 | `number` | `1` | optional | -| fontFamily | 文字字体 | `string` | | optional | -| fontWeight | 字体粗细程度 | `string` | | optional | -| textAllowOverlap | 是否允许文本覆盖 | `boolean` | `false` | optional | -| textAnchor | 文本相对锚点的位置 | `string` | `'center'` | optional | -| textOffset | 文本相对锚点的偏移量 | `number[]` | `[0, 0]` | optional | -| spacing | 字符间距 | `number` | `0` | optional | -| padding | 文本包围盒 padding (水平,垂直),影响碰撞检测结果,避免相邻文本靠的太近 | `number[]` | `[0, 0]` | optional | - -textAnchor 文本相对锚点的位置,支持以下相对锚点的位置: - -* 'right' -* 'top-right' -* 'left' -* 'bottom-right' -* 'left' -* 'top-left' -* 'bottom-left' -* 'bottom' -* 'bottom-right' -* 'bottom-left' -* 'top' -* 'top-right' -* 'top-left' -* 'center' - - -## `label.`state - -`IStateAttribute` optional - -标签交互反馈效果。 - -### `state.`active - -`boolean|IActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 标签高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 标签高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -### `state.`select - -`boolean|IActiveOption` optional default: `false` - -标签 mouseclick 选中高亮效果,开启 mouseclick 标签高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 标签高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` diff --git a/site/docs/map-api/components/layer-menu.en.md b/site/docs/map-api/components/layer-menu.en.md deleted file mode 100644 index 759bc0456..000000000 --- a/site/docs/map-api/components/layer-menu.en.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: LayerMenu -order: 5 ---- - ---- -title: 图层列表 - LayerMenu -order: 5 ---- - -## `layerMenu.`position - -`string` optional default: `'topright'` - -控件的位置,支持以下定位位置: - -* 'topright' -* 'topleft' -* 'bottomright' -* 'bottomleft' - -## `layerMenu.`collapsed - -`boolean` optional default: `true` - -默认状态下是否将控件折叠。 - -## `layerMenu.`autoZIndex - -`boolean` optional default: `true` - -显示隐藏时是否保持原图层顺序。 - -## `layerMenu.`hideSingleBase - -`boolean` optional default: `false` - -当只有一个图层时,控件是否隐藏。 - -## `layerMenu.`sortLayers - -`boolean` optional default: `false` - -是否对图层列表进行排序。 - -## `layerMenu.`sortFunction - -`Function: (a.layer, b.layer, a.name, b.name) => number` optional - -自定义图层列表[排序](https://developer.mozilla.org/docs/map-Web/JavaScript/Reference/Global_Objects/Array/sort)函数。 diff --git a/site/docs/map-api/components/layer-menu.zh.md b/site/docs/map-api/components/layer-menu.zh.md deleted file mode 100644 index 2c6a0c19f..000000000 --- a/site/docs/map-api/components/layer-menu.zh.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: 图层列表 - LayerMenu -order: 5 ---- - -## `layerMenu.`position - -`string` optional default: `'topright'` - -控件的位置,支持以下定位位置: - -* 'topright' -* 'topleft' -* 'bottomright' -* 'bottomleft' - -## `layerMenu.`collapsed - -`boolean` optional default: `true` - -默认状态下是否将控件折叠。 - -## `layerMenu.`autoZIndex - -`boolean` optional default: `true` - -显示隐藏时是否保持原图层顺序。 - -## `layerMenu.`hideSingleBase - -`boolean` optional default: `false` - -当只有一个图层时,控件是否隐藏。 - -## `layerMenu.`sortLayers - -`boolean` optional default: `false` - -是否对图层列表进行排序。 - -## `layerMenu.`sortFunction - -`Function: (a.layer, b.layer, a.name, b.name) => number` optional - -自定义图层列表[排序](https://developer.mozilla.org/docs/map-Web/JavaScript/Reference/Global_Objects/Array/sort)函数。 diff --git a/site/docs/map-api/components/legend.en.md b/site/docs/map-api/components/legend.en.md deleted file mode 100644 index 436b43f68..000000000 --- a/site/docs/map-api/components/legend.en.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: Legend -order: 0 ---- - ---- -title: 图例 - Legend -order: 0 ---- - -## `legend.`type - -`'category'|'continue'` optional - -图例类型,支持以下类型图例: - -* 'category':分类性图例 -* 'continue':连续性图例 - -## `legend.`position - -`string` optional default: `'bottomleft'` - -图例控件的位置,支持以下定位位置: - -* 'topright' -* 'topleft' -* 'bottomright' -* 'bottomleft' - -## `legend.`title - -`string` optional default: `''` - -图例标题内容。 - -## `legend.`className - -`string` optional default: `''` - -DOM 容器自定义 className 。 - -## `legend.`domStyles - -`object` optional default: `{}` - -自定义 legend 样式。 - -分类图例 CSS 样式自定义: - -```ts -{ - domStyles: { - 'l7plot-legend__category'?: CSSProperties; - 'l7plot-legend__title'?: CSSProperties; - 'l7plot-legend__category-list'?: CSSProperties; - 'l7plot-legend__list-item'?: CSSProperties; - 'l7plot-legend__category-marker'?: CSSProperties; - 'l7plot-legend__category-value'?: CSSProperties; - } -} -``` - -连续图例 CSS 样式自定义: - -```ts -{ - domStyles: { - 'l7plot-legend__continue'?: CSSProperties; - 'l7plot-legend__title'?: CSSProperties; - 'l7plot-legend__ribbon'?: CSSProperties; - 'l7plot-legend__gradient-bar'?: CSSProperties; - 'l7plot-legend__value-range'?: CSSProperties; - } -} -``` - -## `legend.`items - -`CategoryLegendListItem[]` optional - -适用于 分类图例,自定义配置图例项的内容。*CategoryLegendListItem* 配置如下: - -| 参数名 | 类型 | 是否必选 | 默认值 | 描述 | -| ------ | ------ | -------- | ------ | ---------------- | -| id | string | optional | - | 唯一值,用于查找 | -| color | string | required | - | 颜色 | -| value | any | required | - | 值 | - -## `legend.`min - -`number` optional - -适用于 连续图例,范围的最小值。 - -## `legend.`max - -`number` optional - -适用于 连续图例,范围的最大值。 - -## `legend.`colors - -`string[]` optional - -适用于 连续图例,自定义色带。 - -## `legend.`customContent - -`CategoryLegendCustomContent|ContinueLegendCustomContent` optional - -* 分类图例 *CategoryLegendCustomContent*: `(title: string, items: ILegendListItem[]) => stringHTML | HTMLElement` -* 连续图例 *ContinueLegendCustomContent*: `(title: string, min: number, max: number, colors: string[]) => stringHTML | HTMLElement` - -自定义 legend 内容,注意 是 [HTMLElement](https://developer.mozilla.org/zh-CN/docs/map-Web/API/HTMLElement) 或拼接好的 HTML 字符串,不是纯文本类型。 - -```js -customContent (title: string, items: ILegendListItem[]) { - const container = document.createElement('div'); - container.innerHTML = '内容' - return container; -} -``` diff --git a/site/docs/map-api/components/legend.zh.md b/site/docs/map-api/components/legend.zh.md deleted file mode 100644 index 14552380e..000000000 --- a/site/docs/map-api/components/legend.zh.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: 图例 - Legend -order: 0 ---- - -## `legend.`type - -`'category'|'continue'` optional - -图例类型,支持以下类型图例: - -* 'category':分类性图例 -* 'continue':连续性图例 - -## `legend.`position - -`string` optional default: `'bottomleft'` - -图例控件的位置,支持以下定位位置: - -* 'topright' -* 'topleft' -* 'bottomright' -* 'bottomleft' - -## `legend.`title - -`string` optional default: `''` - -图例标题内容。 - -## `legend.`className - -`string` optional default: `''` - -DOM 容器自定义 className 。 - -## `legend.`domStyles - -`object` optional default: `{}` - -自定义 legend 样式。 - -分类图例 CSS 样式自定义: - -```ts -{ - domStyles: { - 'l7plot-legend__category'?: CSSProperties; - 'l7plot-legend__title'?: CSSProperties; - 'l7plot-legend__category-list'?: CSSProperties; - 'l7plot-legend__list-item'?: CSSProperties; - 'l7plot-legend__category-marker'?: CSSProperties; - 'l7plot-legend__category-value'?: CSSProperties; - } -} -``` - -连续图例 CSS 样式自定义: - -```ts -{ - domStyles: { - 'l7plot-legend__continue'?: CSSProperties; - 'l7plot-legend__title'?: CSSProperties; - 'l7plot-legend__ribbon'?: CSSProperties; - 'l7plot-legend__gradient-bar'?: CSSProperties; - 'l7plot-legend__value-range'?: CSSProperties; - } -} -``` - -## `legend.`items - -`CategoryLegendListItem[]` optional - -适用于 分类图例,自定义配置图例项的内容。*CategoryLegendListItem* 配置如下: - -| 参数名 | 类型 | 是否必选 | 默认值 | 描述 | -| ------ | ------ | -------- | ------ | ---------------- | -| id | string | optional | - | 唯一值,用于查找 | -| color | string | required | - | 颜色 | -| value | any | required | - | 值 | - -## `legend.`min - -`number` optional - -适用于 连续图例,范围的最小值。 - -## `legend.`max - -`number` optional - -适用于 连续图例,范围的最大值。 - -## `legend.`colors - -`string[]` optional - -适用于 连续图例,自定义色带。 - -## `legend.`customContent - -`CategoryLegendCustomContent|ContinueLegendCustomContent` optional - -* 分类图例 *CategoryLegendCustomContent*: `(title: string, items: ILegendListItem[]) => stringHTML | HTMLElement` -* 连续图例 *ContinueLegendCustomContent*: `(title: string, min: number, max: number, colors: string[]) => stringHTML | HTMLElement` - -自定义 legend 内容,注意 是 [HTMLElement](https://developer.mozilla.org/zh-CN/docs/map-Web/API/HTMLElement) 或拼接好的 HTML 字符串,不是纯文本类型。 - -```js -customContent (title: string, items: ILegendListItem[]) { - const container = document.createElement('div'); - container.innerHTML = '内容' - return container; -} -``` diff --git a/site/docs/map-api/components/scale.en.md b/site/docs/map-api/components/scale.en.md deleted file mode 100644 index 1eebf300f..000000000 --- a/site/docs/map-api/components/scale.en.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Scale -order: 2 ---- - ---- -title: 比例尺 - Scale -order: 2 ---- - -## `scale.`position - -`string` optional default: `'bottomleft'` - -控件的位置,支持以下定位位置: - -* 'topright' -* 'topleft' -* 'bottomright' -* 'bottomleft' - -## `scale.`maxWidth - -`number` optional default: `100` - -控件的最大宽度,单位 `px`。 - -## `scale.`updateWhenIdle - -`boolean` optional default: `false` - -是否地图 move 过程中更新比例尺,否则 moveend 更新。 - -## `scale.`metric - -`boolean` optional default: `true` - -是否显示公制刻度线(m/km)。 - -## `scale.`metric - -`boolean` optional default: `false` - -是否显示英制刻度线(mi/ft)。 diff --git a/site/docs/map-api/components/scale.zh.md b/site/docs/map-api/components/scale.zh.md deleted file mode 100644 index fc93c3a80..000000000 --- a/site/docs/map-api/components/scale.zh.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: 比例尺 - Scale -order: 2 ---- - -## `scale.`position - -`string` optional default: `'bottomleft'` - -控件的位置,支持以下定位位置: - -* 'topright' -* 'topleft' -* 'bottomright' -* 'bottomleft' - -## `scale.`maxWidth - -`number` optional default: `100` - -控件的最大宽度,单位 `px`。 - -## `scale.`updateWhenIdle - -`boolean` optional default: `false` - -是否地图 move 过程中更新比例尺,否则 moveend 更新。 - -## `scale.`metric - -`boolean` optional default: `true` - -是否显示公制刻度线(m/km)。 - -## `scale.`metric - -`boolean` optional default: `false` - -是否显示英制刻度线(mi/ft)。 diff --git a/site/docs/map-api/components/tooltip.en.md b/site/docs/map-api/components/tooltip.en.md deleted file mode 100644 index 447a597e3..000000000 --- a/site/docs/map-api/components/tooltip.en.md +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: Tooltip -order: 4 ---- - ---- -title: 悬浮提示 - Tooltip -order: 4 ---- - -## 配置属性 - -### `tooltip.`title - -`string` optional default: `''` - -tooltip 标题内容。 - -### `tooltip.`customTitle - -`Function: (data: any) => string` optional - -自定义 tooltip 标题内容。 - -### `tooltip.`showTitle - -`boolean` optional default: `true` - -是否显示标题。 - -### `tooltip.`trigger - -`string` optional default: `'mousemove'` - -触发图层事件显示 tooltip ,有以下触发事件方式: - -* mousemove -* click - -### `tooltip.`items - -`string[]|TooltipItem` optional default: `[]` - -tooltip 显示内容关联字段。 - -### `items.`field - -`string` required - -关联字段。 - -### `items.`alias - -`string` optional default: `''` - -关联字段别名。 - -### `items.`customValue - -`Function: (value: any, data: any) => any` optional - -自定义关联字取值。 - -### `tooltip.`className - -`string` optional default: `''` - -tooltip 自定义 className 。 - -### `tooltip.`anchor - -`string` optional default: `'top-left'` - -tooltip 相对锚点的位置,支持以下相对锚点的位置: - -* 'center' -* 'top' -* 'top-left' -* 'top-right' -* 'bottom' -* 'bottom-left' -* 'left' -* 'right' - -### `tooltip.`offsets - -`number[]` optional default: `[15, 0]` - -tooltip 相对锚点的偏移量。 - -### `tooltip.`customContent - -`Function: (title: string, items: TooltipListItem[]) => stringHTML | HTMLElement` optional - -自定义 tooltip 内容,注意 是 [HTMLElement](https://developer.mozilla.org/zh-CN/docs/map-Web/API/HTMLElement) 或拼接好的 HTML 字符串,不是纯文本类型。 - -```js -customContent (title: string, items: TooltipListItem[]) { - const container = document.createElement('div'); - container.innerHTML = '内容' - return container; -} -``` - -### `tooltip.`domStyles - -`object` optional default: `{}` - -自定义 tooltip 样式,CSS 样式自定义如下: - -```ts -{ - domStyles: { - 'l7plot-tooltip'?: CSSProperties; - 'l7plot-tooltip__title'?: CSSProperties; - 'l7plot-tooltip__list'?: CSSProperties; - 'l7plot-tooltip__list-item'?: CSSProperties; - 'l7plot-tooltip__name'?: CSSProperties; - 'l7plot-tooltip__value'?: CSSProperties; - } -} -``` - -### `tooltip.`showComponent - -`boolean` optional default: `true` - -是否显示 tooltip 组件,一般用于通过监听 tooltip 事件自实现 tooltip 组件。 - -## 组件事件 - -### 显示 - -tooltip 显示时触发 - -```js -plot.on('tooltip:show', (event: TooltipEvent) => void); -``` - -### 隐藏 - -tooltip 隐藏时触发 - -```js -plot.on('tooltip:hide', () => void); -``` - -### 改变 - -tooltip 位置及内容发生改变时触发 - -```js -plot.on('tooltip:change', (event: TooltipEvent) => void); -``` diff --git a/site/docs/map-api/components/tooltip.zh.md b/site/docs/map-api/components/tooltip.zh.md deleted file mode 100644 index 6d35c7b5a..000000000 --- a/site/docs/map-api/components/tooltip.zh.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: 悬浮提示 - Tooltip -order: 4 ---- - -## 配置属性 - -### `tooltip.`title - -`string` optional default: `''` - -tooltip 标题内容。 - -### `tooltip.`customTitle - -`Function: (data: any) => string` optional - -自定义 tooltip 标题内容。 - -### `tooltip.`showTitle - -`boolean` optional default: `true` - -是否显示标题。 - -### `tooltip.`trigger - -`string` optional default: `'mousemove'` - -触发图层事件显示 tooltip ,有以下触发事件方式: - -* mousemove -* click - -### `tooltip.`items - -`string[]|TooltipItem` optional default: `[]` - -tooltip 显示内容关联字段。 - -### `items.`field - -`string` required - -关联字段。 - -### `items.`alias - -`string` optional default: `''` - -关联字段别名。 - -### `items.`customValue - -`Function: (value: any, data: any) => any` optional - -自定义关联字取值。 - -### `tooltip.`className - -`string` optional default: `''` - -tooltip 自定义 className 。 - -### `tooltip.`anchor - -`string` optional default: `'top-left'` - -tooltip 相对锚点的位置,支持以下相对锚点的位置: - -* 'center' -* 'top' -* 'top-left' -* 'top-right' -* 'bottom' -* 'bottom-left' -* 'left' -* 'right' - -### `tooltip.`offsets - -`number[]` optional default: `[15, 0]` - -tooltip 相对锚点的偏移量。 - -### `tooltip.`customContent - -`Function: (title: string, items: TooltipListItem[]) => stringHTML | HTMLElement` optional - -自定义 tooltip 内容,注意 是 [HTMLElement](https://developer.mozilla.org/zh-CN/docs/map-Web/API/HTMLElement) 或拼接好的 HTML 字符串,不是纯文本类型。 - -```js -customContent (title: string, items: TooltipListItem[]) { - const container = document.createElement('div'); - container.innerHTML = '内容' - return container; -} -``` - -### `tooltip.`domStyles - -`object` optional default: `{}` - -自定义 tooltip 样式,CSS 样式自定义如下: - -```ts -{ - domStyles: { - 'l7plot-tooltip'?: CSSProperties; - 'l7plot-tooltip__title'?: CSSProperties; - 'l7plot-tooltip__list'?: CSSProperties; - 'l7plot-tooltip__list-item'?: CSSProperties; - 'l7plot-tooltip__name'?: CSSProperties; - 'l7plot-tooltip__value'?: CSSProperties; - } -} -``` - -### `tooltip.`showComponent - -`boolean` optional default: `true` - -是否显示 tooltip 组件,一般用于通过监听 tooltip 事件自实现 tooltip 组件。 - -## 组件事件 - -### 显示 - -tooltip 显示时触发 - -```js -plot.on('tooltip:show', (event: TooltipEvent) => void); -``` - -### 隐藏 - -tooltip 隐藏时触发 - -```js -plot.on('tooltip:hide', () => void); -``` - -### 改变 - -tooltip 位置及内容发生改变时触发 - -```js -plot.on('tooltip:change', (event: TooltipEvent) => void); -``` diff --git a/site/docs/map-api/components/zoom.en.md b/site/docs/map-api/components/zoom.en.md deleted file mode 100644 index 46f4d2407..000000000 --- a/site/docs/map-api/components/zoom.en.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Zoom -order: 1 ---- - ---- -title: 缩放器 - Zoom -order: 1 ---- - -## `zoom.`position - -`string` optional default: `'topleft'` - -控件的位置,支持以下定位位置: - -* 'topright' -* 'topleft' -* 'bottomright' -* 'bottomleft' - -## `zoom.`zoomInText - -`string` optional default: `'+'` - -放大按钮文本。 - -## `zoom.`zoomInTitle - -`string` optional default: `Zoom in` - -放大按钮名称。 - -## `zoom.`zoomOutText - -`string` optional default: `'−'` - -缩小按钮文本。 - -## `zoom.`zoomOutTitle - -`string` optional default: `Zoom out` - -缩小按钮名称。 diff --git a/site/docs/map-api/components/zoom.zh.md b/site/docs/map-api/components/zoom.zh.md deleted file mode 100644 index abcf526ff..000000000 --- a/site/docs/map-api/components/zoom.zh.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: 缩放器 - Zoom -order: 1 ---- - -## `zoom.`position - -`string` optional default: `'topleft'` - -控件的位置,支持以下定位位置: - -* 'topright' -* 'topleft' -* 'bottomright' -* 'bottomleft' - -## `zoom.`zoomInText - -`string` optional default: `'+'` - -放大按钮文本。 - -## `zoom.`zoomInTitle - -`string` optional default: `Zoom in` - -放大按钮名称。 - -## `zoom.`zoomOutText - -`string` optional default: `'−'` - -缩小按钮文本。 - -## `zoom.`zoomOutTitle - -`string` optional default: `Zoom out` - -缩小按钮名称。 diff --git a/site/docs/map-api/composite-layers/bubble-layer.en.md b/site/docs/map-api/composite-layers/bubble-layer.en.md deleted file mode 100644 index 1ef57c805..000000000 --- a/site/docs/map-api/composite-layers/bubble-layer.en.md +++ /dev/null @@ -1,586 +0,0 @@ ---- -title: BubbleLayer -order: 5 ---- - ---- -title: 气泡图层 - BubbleLayer -order: 5 ---- - -Composite Layer - -`BubbleLayer` 用于点数据图层展示,支持描边、文本标注、多选等功能。 - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`radius - -`number|SizeStyleAttribute|Function` optional - -气泡半径大小 - -```js -{ radius: 12, } -``` - -#### `radius.`field - -`string` optional - -半径大小值映射关联字段。 - -```js -{ - source: { - data: [{ s: 12, t: 20, n: 'chengdu' }], - // ... - }, - radius: { field: 's' }, -} -``` - -#### `radius.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - radius: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `radius.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - radius: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - -### `options.`fillColor - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -填充颜色。 - -```js -{ fillColor: 'red', } -``` - -#### `fillColor.`field - -`string` optional - -填充颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - fillColor: { field: 'c', } -} -``` - -#### `fillColor.`value - -`string|string[]|Function` optional - -填充颜色值映射值。 - -```js -{ - fillColor: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `fillColor.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - fillColor: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - -### `options.`opacity - -`number` optional default: `1` - -填充透明度。 - -### `options.`lineWidth - -`number` optional default: `1` - -描边线宽。 - -### `options.`strokeColor - -`string` optional default: `#fff` - -描边颜色。 - -### `options.`lineOpacity - -`number` optional default: `1` - -描边透明度。 - -### `options.`label - -`TextLayerOptions` optional - -标签标注。 - -#### `label.`field - -`string` optional - -标签值映射关联字段。 - -#### `label.`visible - -`boolean` optional default: `true` - -标签是否可见。 - -#### `label.`style - -标签样式详细配置见 [TextLayerStyleOptions](/zh/docs/map-api/composite-layers/text-layer#code-classlanguage-textoptionscodestyle)。 - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|BubbleLayerActiveOptions` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fillColor: false, - strokeColor: '#2f54eb', - lineWidth: 1.5, - lineOpacity: 1, - }, - } -} -``` - -BubbleLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fillColor | 填充颜色 | `false|string` | `false` | optional | -| strokeColor | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `1` | optional | - -#### `state.`select - -`boolean|BubbleLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fillColor: false, - strokeColor: '#2f54eb', - lineWidth: 1.5, - lineOpacity: 1, - } - } -} -``` - - - - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -### setActive - -设置图层高亮状态。 - -```js -layer.setActive(field: string, value: number | string); -``` - -### setSelect - -设置图层选中状态。 - -```js -layer.setSelect(field: string, value: number | string); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | - - -#### 选择事件 - -| 事件名 | 类型 | 描述 | -| -------- | ------------ | ---------------------------- | -| select | 选择事件 | 鼠标点击选中图层要素事件 | -| unselect | 取消选择事件 | 鼠标点击取消选中图层要素事件 | diff --git a/site/docs/map-api/composite-layers/bubble-layer.zh.md b/site/docs/map-api/composite-layers/bubble-layer.zh.md deleted file mode 100644 index ecb26737c..000000000 --- a/site/docs/map-api/composite-layers/bubble-layer.zh.md +++ /dev/null @@ -1,581 +0,0 @@ ---- -title: 气泡图层 - BubbleLayer -order: 5 ---- - -Composite Layer - -`BubbleLayer` 用于点数据图层展示,支持描边、文本标注、多选等功能。 - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`radius - -`number|SizeStyleAttribute|Function` optional - -气泡半径大小 - -```js -{ radius: 12, } -``` - -#### `radius.`field - -`string` optional - -半径大小值映射关联字段。 - -```js -{ - source: { - data: [{ s: 12, t: 20, n: 'chengdu' }], - // ... - }, - radius: { field: 's' }, -} -``` - -#### `radius.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - radius: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `radius.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - radius: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - -### `options.`fillColor - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -填充颜色。 - -```js -{ fillColor: 'red', } -``` - -#### `fillColor.`field - -`string` optional - -填充颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - fillColor: { field: 'c', } -} -``` - -#### `fillColor.`value - -`string|string[]|Function` optional - -填充颜色值映射值。 - -```js -{ - fillColor: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `fillColor.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - fillColor: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - -### `options.`opacity - -`number` optional default: `1` - -填充透明度。 - -### `options.`lineWidth - -`number` optional default: `1` - -描边线宽。 - -### `options.`strokeColor - -`string` optional default: `#fff` - -描边颜色。 - -### `options.`lineOpacity - -`number` optional default: `1` - -描边透明度。 - -### `options.`label - -`TextLayerOptions` optional - -标签标注。 - -#### `label.`field - -`string` optional - -标签值映射关联字段。 - -#### `label.`visible - -`boolean` optional default: `true` - -标签是否可见。 - -#### `label.`style - -标签样式详细配置见 [TextLayerStyleOptions](/zh/docs/map-api/composite-layers/text-layer#code-classlanguage-textoptionscodestyle)。 - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|BubbleLayerActiveOptions` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fillColor: false, - strokeColor: '#2f54eb', - lineWidth: 1.5, - lineOpacity: 1, - }, - } -} -``` - -BubbleLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fillColor | 填充颜色 | `false|string` | `false` | optional | -| strokeColor | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `1` | optional | - -#### `state.`select - -`boolean|BubbleLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fillColor: false, - strokeColor: '#2f54eb', - lineWidth: 1.5, - lineOpacity: 1, - } - } -} -``` - - - - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -### setActive - -设置图层高亮状态。 - -```js -layer.setActive(field: string, value: number | string); -``` - -### setSelect - -设置图层选中状态。 - -```js -layer.setSelect(field: string, value: number | string); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | - - -#### 选择事件 - -| 事件名 | 类型 | 描述 | -| -------- | ------------ | ---------------------------- | -| select | 选择事件 | 鼠标点击选中图层要素事件 | -| unselect | 取消选择事件 | 鼠标点击取消选中图层要素事件 | diff --git a/site/docs/map-api/composite-layers/choropleth-layer.en.md b/site/docs/map-api/composite-layers/choropleth-layer.en.md deleted file mode 100644 index f1a6cd628..000000000 --- a/site/docs/map-api/composite-layers/choropleth-layer.en.md +++ /dev/null @@ -1,567 +0,0 @@ ---- -title: ChoroplethLayer -order: 6 ---- - ---- -title: 区域图层 - ChoroplethLayer -order: 6 ---- - -Composite Layer - -`ChoroplethLayer` 用于面数据图层展示,支持描边、文本标注、多选等功能。 - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` - - -### `options.`fillColor - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -填充颜色。 - -```js -{ fillColor: 'red', } -``` - -#### `fillColor.`field - -`string` optional - -填充颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - fillColor: { field: 'c', } -} -``` - -#### `fillColor.`value - -`string|string[]|Function` optional - -填充颜色值映射值。 - -```js -{ - fillColor: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `fillColor.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - fillColor: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - -### `options.`opacity - -`number` optional default: `1` - -填充透明度。 - -### `options.`lineWidth - -`number` optional default: `1` - -描边线宽。 - -### `options.`strokeColor - -`string` optional default: `#fff` - -描边颜色。 - -### `options.`lineOpacity - -`number` optional default: `1` - -描边透明度。 - -### `options.`lineType - -`‘solid’|'dash'` optional default: `‘solid’` - -描边线类型,支持实线与虚线。 - -### `options.`lineDash - -`[number, number]` optional - -描边的虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为 `[0,0]` 的效果为没有虚线。 - -### `options.`label - -`TextLayerOptions` optional - -标签标注。 - -#### `label.`field - -`string` optional - -标签值映射关联字段。 - -#### `label.`visible - -`boolean` optional default: `true` - -标签是否可见。 - -#### `label.`style - -标签样式详细配置见 [TextLayerStyleOptions](/zh/docs/map-api/composite-layers/text-layer#code-classlanguage-textoptionscodestyle)。 - -### `options.`state - -`object` optional - -区域面交互反馈效果。 - -```js -{ - state: { - active: { - fillColor: false, - strokeColor: '#2f54eb', - lineWidth: 1, - }, - select: false, - } -} -``` - -#### `state.`active - -`boolean|ChoroplethLayerActiveOptions` optional default: `false` - -ChoroplethLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fillColor | 填充颜色 | `false|string` | `false` | optional | -| strokeColor | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1` | optional | -| lineOpacity | 描边透明度 | `number` | `1` | optional | - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fillColor: false, - strokeColor: '#2f54eb', - } - } -} -``` - -#### `state.`select - -`boolean|AreaLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fillColor: false, - strokeColor: '#2f54eb', - } - } -} -``` - - - - - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -### setActive - -设置图层高亮状态。 - -```js -layer.setActive(field: string, value: number | string); -``` - -### setSelect - -设置图层选中状态。 - -```js -layer.setSelect(field: string, value: number | string); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | - - -#### 选择事件 - -| 事件名 | 类型 | 描述 | -| -------- | ------------ | ---------------------------- | -| select | 选择事件 | 鼠标点击选中图层要素事件 | -| unselect | 取消选择事件 | 鼠标点击取消选中图层要素事件 | diff --git a/site/docs/map-api/composite-layers/choropleth-layer.zh.md b/site/docs/map-api/composite-layers/choropleth-layer.zh.md deleted file mode 100644 index 17576fcae..000000000 --- a/site/docs/map-api/composite-layers/choropleth-layer.zh.md +++ /dev/null @@ -1,562 +0,0 @@ ---- -title: 区域图层 - ChoroplethLayer -order: 6 ---- - -Composite Layer - -`ChoroplethLayer` 用于面数据图层展示,支持描边、文本标注、多选等功能。 - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` - - -### `options.`fillColor - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -填充颜色。 - -```js -{ fillColor: 'red', } -``` - -#### `fillColor.`field - -`string` optional - -填充颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - fillColor: { field: 'c', } -} -``` - -#### `fillColor.`value - -`string|string[]|Function` optional - -填充颜色值映射值。 - -```js -{ - fillColor: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `fillColor.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - fillColor: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - -### `options.`opacity - -`number` optional default: `1` - -填充透明度。 - -### `options.`lineWidth - -`number` optional default: `1` - -描边线宽。 - -### `options.`strokeColor - -`string` optional default: `#fff` - -描边颜色。 - -### `options.`lineOpacity - -`number` optional default: `1` - -描边透明度。 - -### `options.`lineType - -`‘solid’|'dash'` optional default: `‘solid’` - -描边线类型,支持实线与虚线。 - -### `options.`lineDash - -`[number, number]` optional - -描边的虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为 `[0,0]` 的效果为没有虚线。 - -### `options.`label - -`TextLayerOptions` optional - -标签标注。 - -#### `label.`field - -`string` optional - -标签值映射关联字段。 - -#### `label.`visible - -`boolean` optional default: `true` - -标签是否可见。 - -#### `label.`style - -标签样式详细配置见 [TextLayerStyleOptions](/zh/docs/map-api/composite-layers/text-layer#code-classlanguage-textoptionscodestyle)。 - -### `options.`state - -`object` optional - -区域面交互反馈效果。 - -```js -{ - state: { - active: { - fillColor: false, - strokeColor: '#2f54eb', - lineWidth: 1, - }, - select: false, - } -} -``` - -#### `state.`active - -`boolean|ChoroplethLayerActiveOptions` optional default: `false` - -ChoroplethLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fillColor | 填充颜色 | `false|string` | `false` | optional | -| strokeColor | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1` | optional | -| lineOpacity | 描边透明度 | `number` | `1` | optional | - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fillColor: false, - strokeColor: '#2f54eb', - } - } -} -``` - -#### `state.`select - -`boolean|AreaLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fillColor: false, - strokeColor: '#2f54eb', - } - } -} -``` - - - - - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -### setActive - -设置图层高亮状态。 - -```js -layer.setActive(field: string, value: number | string); -``` - -### setSelect - -设置图层选中状态。 - -```js -layer.setSelect(field: string, value: number | string); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | - - -#### 选择事件 - -| 事件名 | 类型 | 描述 | -| -------- | ------------ | ---------------------------- | -| select | 选择事件 | 鼠标点击选中图层要素事件 | -| unselect | 取消选择事件 | 鼠标点击取消选中图层要素事件 | diff --git a/site/docs/map-api/composite-layers/heatmap-layer.en.md b/site/docs/map-api/composite-layers/heatmap-layer.en.md deleted file mode 100644 index c26d367fc..000000000 --- a/site/docs/map-api/composite-layers/heatmap-layer.en.md +++ /dev/null @@ -1,529 +0,0 @@ ---- -title: HeatmapLayer -order: 4 ---- - ---- -title: 热力图层 - HeatmapLayer -order: 4 ---- - -Core Layer - -`HeatmapLayer` 是基于 [L7-HeatmapLayer](https://l7.antv.vision/zh/docs/map-api/heatmap_layer/heatmap) 封装的配置式 API。 - -```ts -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string` optional default: `'heatmap'` - -支持三种热力类型,普通热力模式支持 2D 与 3D 热力: - -* heatmap -* heatmap3D - -蜂窝热力支持: - -* hexagon: 蜂窝 -* hexagonColumn: 蜂窝柱 - -网格热力支持: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'heatmap', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|SizeStyleAttribute|Function` optional - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ s: 12, t: 20, n: 'chengdu' }], - // ... - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`HeatmapLayerStyleOptions|GridHeatmapLayerStyleOptions` optional - -普通热力样式,HeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------- | ------------------ | ------------ | ------ | -------- | -| intensity | 全局热力权重 | `number` | `3` | optional | -| radius | 热力半径,单位像素 | `number` | `20` | optional | -| opacity | 透明度 | `number` | `1` | optional | -| rampColors | 热力色带 | `RampColors` | | optional | - -热力色带,RampColors 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------- | ---------- | ---------- | ------ | -------- | -| colors | 颜色 | `string[]` | | required | -| positions | 热力映射值 | `number[]` | | required | - -```js -{ - style: { - intensity: 3, - radius: 20, - opacity: 1, - rampColors: { - colors: ['#FF4818', '#F7B74A', '#FFF598', '#F27DEB', '#8C1EB2', '#421EB2'], - positions: [0, 0.2, 0.4, 0.6, 0.8, 1.0], - }, - } -} -``` - -网格/蜂窝热力样式,GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/composite-layers/heatmap-layer.zh.md b/site/docs/map-api/composite-layers/heatmap-layer.zh.md deleted file mode 100644 index 6a5f1073b..000000000 --- a/site/docs/map-api/composite-layers/heatmap-layer.zh.md +++ /dev/null @@ -1,524 +0,0 @@ ---- -title: 热力图层 - HeatmapLayer -order: 4 ---- - -Core Layer - -`HeatmapLayer` 是基于 [L7-HeatmapLayer](https://l7.antv.vision/zh/docs/map-api/heatmap_layer/heatmap) 封装的配置式 API。 - -```ts -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string` optional default: `'heatmap'` - -支持三种热力类型,普通热力模式支持 2D 与 3D 热力: - -* heatmap -* heatmap3D - -蜂窝热力支持: - -* hexagon: 蜂窝 -* hexagonColumn: 蜂窝柱 - -网格热力支持: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'heatmap', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|SizeStyleAttribute|Function` optional - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ s: 12, t: 20, n: 'chengdu' }], - // ... - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`HeatmapLayerStyleOptions|GridHeatmapLayerStyleOptions` optional - -普通热力样式,HeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------- | ------------------ | ------------ | ------ | -------- | -| intensity | 全局热力权重 | `number` | `3` | optional | -| radius | 热力半径,单位像素 | `number` | `20` | optional | -| opacity | 透明度 | `number` | `1` | optional | -| rampColors | 热力色带 | `RampColors` | | optional | - -热力色带,RampColors 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------- | ---------- | ---------- | ------ | -------- | -| colors | 颜色 | `string[]` | | required | -| positions | 热力映射值 | `number[]` | | required | - -```js -{ - style: { - intensity: 3, - radius: 20, - opacity: 1, - rampColors: { - colors: ['#FF4818', '#F7B74A', '#FFF598', '#F27DEB', '#8C1EB2', '#421EB2'], - positions: [0, 0.2, 0.4, 0.6, 0.8, 1.0], - }, - } -} -``` - -网格/蜂窝热力样式,GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/composite-layers/line-layer.en.md b/site/docs/map-api/composite-layers/line-layer.en.md deleted file mode 100644 index c2fdb9a39..000000000 --- a/site/docs/map-api/composite-layers/line-layer.en.md +++ /dev/null @@ -1,566 +0,0 @@ ---- -title: LineLayer -order: 1 ---- - ---- -title: 线图层 - LineLayer -order: 1 ---- - -Core Layer - -`LineLayer` 是基于 [L7-LineLayer](https://l7.antv.vision/zh/docs/map-api/line_layer/linelayer) 封装的配置式 API。 - -```ts -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ - path: [[58.00, 32.84],[85.7, 25.161],[101.95, 41.77],[114.96, 39.63],[117.421, 28.61]], - c: 'red', - t: 20, - n: 'chengdu' - }], - parser: { type: 'json', coordinates: 'path', } - } -} -``` - - -### `options.`shape - -`string` optional default: `'line'` - -除直线外还支持 2D 与 3D 弧线及大圆航线: - -* arc -* arc3d -* greatcircle - -```js -{ shape: 'line', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|SizeStyleAttribute|Function` optional - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ s: 12, t: 20, n: 'chengdu' }], - // ... - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`LineLayerStyleOptions` optional - -线样式,LineLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | -| sourceColor | 渐变起点颜色 | `string` | | optional | -| targetColor | 渐变终点颜色 | `string` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| interval | 轨迹间隔, 取值区间 0 - 1 | `number` | | optional | -| duration | 动画时间,单位秒 | `number` | | optional | -| trailLength | 轨迹长度 取值区间 0 - 1 | `number` | | optional | - -```js -{ - animate: { - duration: 4, - interval: 0.2, - trailLength: 0.1, - } -} -``` - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/composite-layers/line-layer.zh.md b/site/docs/map-api/composite-layers/line-layer.zh.md deleted file mode 100644 index 977ddc191..000000000 --- a/site/docs/map-api/composite-layers/line-layer.zh.md +++ /dev/null @@ -1,561 +0,0 @@ ---- -title: 线图层 - LineLayer -order: 1 ---- - -Core Layer - -`LineLayer` 是基于 [L7-LineLayer](https://l7.antv.vision/zh/docs/map-api/line_layer/linelayer) 封装的配置式 API。 - -```ts -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ - path: [[58.00, 32.84],[85.7, 25.161],[101.95, 41.77],[114.96, 39.63],[117.421, 28.61]], - c: 'red', - t: 20, - n: 'chengdu' - }], - parser: { type: 'json', coordinates: 'path', } - } -} -``` - - -### `options.`shape - -`string` optional default: `'line'` - -除直线外还支持 2D 与 3D 弧线及大圆航线: - -* arc -* arc3d -* greatcircle - -```js -{ shape: 'line', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|SizeStyleAttribute|Function` optional - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ s: 12, t: 20, n: 'chengdu' }], - // ... - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`LineLayerStyleOptions` optional - -线样式,LineLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | -| sourceColor | 渐变起点颜色 | `string` | | optional | -| targetColor | 渐变终点颜色 | `string` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| interval | 轨迹间隔, 取值区间 0 - 1 | `number` | | optional | -| duration | 动画时间,单位秒 | `number` | | optional | -| trailLength | 轨迹长度 取值区间 0 - 1 | `number` | | optional | - -```js -{ - animate: { - duration: 4, - interval: 0.2, - trailLength: 0.1, - } -} -``` - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/composite-layers/point-layer.en.md b/site/docs/map-api/composite-layers/point-layer.en.md deleted file mode 100644 index d7bc483d0..000000000 --- a/site/docs/map-api/composite-layers/point-layer.en.md +++ /dev/null @@ -1,641 +0,0 @@ ---- -title: PointLayer -order: 0 ---- - ---- -title: 点图层 - PointLayer -order: 0 ---- - -Core Layer - -`PointLayer` 是基于 [L7-PointLayer](https://l7.antv.vision/zh/docs/map-api/point_layer/pointlayer) 封装的配置式 API。 - -```ts -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string|ShapeStyleAttribute|Function` optional default: `'circle'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 - * pentagon: 五角星 - * octogon: 八边形 - * hexagram: 六边形 - * rhombus: 菱形 - * vesica: 椭圆形 - * dot: 圆点 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'circle', } -``` - -除内置图标外,还可**自定义图标**: - -1. 注册图标 - -```js -const images = [ - { id: '01', image: 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg' }, - { id: '02', image: 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg' }, - { id: '03', image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg' }, -]; -registerImages(images); -``` - -2. 使用注册图标 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: '01', n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: '01', -} -``` - -#### `shape.`field - -`string` optional - -元素形状值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 'circle', t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: { field: 's', } -} -``` - -#### `shape.`value - -`string|string[]|Function` optional - -元素形状值映射值。 - -```js -{ - shape: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'triangle': 'circle' - } - } -} -``` - -#### `shape.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - shape: { - field: 't', - value: ['circle', 'triangle'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|SizeStyleAttribute|Function` optional - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ s: 12, t: 20, n: 'chengdu' }], - // ... - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | ------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| speed | 水波速度 | `number` | | optional | -| rings | 水波环数 | `number` | | optional | - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/composite-layers/point-layer.zh.md b/site/docs/map-api/composite-layers/point-layer.zh.md deleted file mode 100644 index 4123e233e..000000000 --- a/site/docs/map-api/composite-layers/point-layer.zh.md +++ /dev/null @@ -1,636 +0,0 @@ ---- -title: 点图层 - PointLayer -order: 0 ---- - -Core Layer - -`PointLayer` 是基于 [L7-PointLayer](https://l7.antv.vision/zh/docs/map-api/point_layer/pointlayer) 封装的配置式 API。 - -```ts -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string|ShapeStyleAttribute|Function` optional default: `'circle'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 - * pentagon: 五角星 - * octogon: 八边形 - * hexagram: 六边形 - * rhombus: 菱形 - * vesica: 椭圆形 - * dot: 圆点 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'circle', } -``` - -除内置图标外,还可**自定义图标**: - -1. 注册图标 - -```js -const images = [ - { id: '01', image: 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg' }, - { id: '02', image: 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg' }, - { id: '03', image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg' }, -]; -registerImages(images); -``` - -2. 使用注册图标 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: '01', n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: '01', -} -``` - -#### `shape.`field - -`string` optional - -元素形状值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 'circle', t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: { field: 's', } -} -``` - -#### `shape.`value - -`string|string[]|Function` optional - -元素形状值映射值。 - -```js -{ - shape: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'triangle': 'circle' - } - } -} -``` - -#### `shape.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - shape: { - field: 't', - value: ['circle', 'triangle'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|SizeStyleAttribute|Function` optional - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ s: 12, t: 20, n: 'chengdu' }], - // ... - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | ------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| speed | 水波速度 | `number` | | optional | -| rings | 水波环数 | `number` | | optional | - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/composite-layers/polygon-layer.en.md b/site/docs/map-api/composite-layers/polygon-layer.en.md deleted file mode 100644 index e8ec5bbd7..000000000 --- a/site/docs/map-api/composite-layers/polygon-layer.en.md +++ /dev/null @@ -1,550 +0,0 @@ ---- -title: PolygonLayer -order: 2 ---- - ---- -title: 面图层 - PolygonLayer -order: 1 ---- - -Core Layer - -`PolygonLayer` 是基于 [L7-PolygonLayer](https://l7.antv.vision/zh/docs/map-api/polygon_layer/polygonlayer) 封装的配置式 API。 - -```ts -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` - - -### `options.`shape - -`string` optional default: `'fill'` - -内置两种 shape: - -* 2D 填充面:`'fill'` -* 3D 立方体:`'extrude'` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|SizeStyleAttribute|Function` optional - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ s: 12, t: 20, n: 'chengdu' }], - // ... - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`PolygonLayerStyleOptions` optional - -区域样式,PolygonLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------- | ------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | - -```js -{ - style: { - opacity: 0.8, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/composite-layers/polygon-layer.zh.md b/site/docs/map-api/composite-layers/polygon-layer.zh.md deleted file mode 100644 index 08e4cef8e..000000000 --- a/site/docs/map-api/composite-layers/polygon-layer.zh.md +++ /dev/null @@ -1,545 +0,0 @@ ---- -title: 面图层 - PolygonLayer -order: 1 ---- - -Core Layer - -`PolygonLayer` 是基于 [L7-PolygonLayer](https://l7.antv.vision/zh/docs/map-api/polygon_layer/polygonlayer) 封装的配置式 API。 - -```ts -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` - - -### `options.`shape - -`string` optional default: `'fill'` - -内置两种 shape: - -* 2D 填充面:`'fill'` -* 3D 立方体:`'extrude'` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|SizeStyleAttribute|Function` optional - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ s: 12, t: 20, n: 'chengdu' }], - // ... - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`PolygonLayerStyleOptions` optional - -区域样式,PolygonLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------- | ------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | - -```js -{ - style: { - opacity: 0.8, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/composite-layers/text-layer.en.md b/site/docs/map-api/composite-layers/text-layer.en.md deleted file mode 100644 index c4210e6ea..000000000 --- a/site/docs/map-api/composite-layers/text-layer.en.md +++ /dev/null @@ -1,405 +0,0 @@ ---- -title: 文本图层 - TextLayer -order: 3 ---- - ---- -title: 文本图层 - TextLayer -order: 3 ---- - -Core Layer - -`TextLayer` 是基于 [L7-PointLayer](https://l7.antv.vision/zh/docs/map-api/point_layer/pointlayer) 封装的配置式文本图层 API。 - -```ts -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`field - -`string` required - -映射的标签数据字段。 - -### `options.`style - -`TextLayerStyleOptions` optional - -字体样式,TextLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------------- | ------------------------------------------------------------------------- | ----------- | ---------- | -------- | -| fill | 字体颜色 | `ColorAttr` | `'#fff'` | optional | -| fontSize | 字体大小 | `SizeAttr` | `12` | optional | -| opacity | 文字透明度 | `number` | `1` | optional | -| stroke | 文字描边颜色 | `string` | `'#fff'` | optional | -| strokeWidth | 文字描边宽度 | `number` | `0` | optional | -| strokeOpacity | 文字描边透明度 | `number` | `1` | optional | -| fontFamily | 文字字体 | `string` | | optional | -| fontWeight | 字体粗细程度 | `string` | | optional | -| textAllowOverlap | 是否允许文本覆盖 | `boolean` | `false` | optional | -| textAnchor | 文本相对锚点的位置 | `string` | `'center'` | optional | -| textOffset | 文本相对锚点的偏移量 | `number[]` | `[0, 0]` | optional | -| spacing | 字符间距 | `number` | `0` | optional | -| padding | 文本包围盒 padding (水平,垂直),影响碰撞检测结果,避免相邻文本靠的太近 | `number[]` | `[0, 0]` | optional | - -textAnchor 文本相对锚点的位置,支持以下相对锚点的位置: - -* 'right' -* 'top-right' -* 'left' -* 'bottom-right' -* 'left' -* 'top-left' -* 'bottom-left' -* 'bottom' -* 'bottom-right' -* 'bottom-left' -* 'top' -* 'top-right' -* 'top-left' -* 'center' - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/composite-layers/text-layer.zh.md b/site/docs/map-api/composite-layers/text-layer.zh.md deleted file mode 100644 index fd3e2f2b5..000000000 --- a/site/docs/map-api/composite-layers/text-layer.zh.md +++ /dev/null @@ -1,400 +0,0 @@ ---- -title: 文本图层 - TextLayer -order: 3 ---- - -Core Layer - -`TextLayer` 是基于 [L7-PointLayer](https://l7.antv.vision/zh/docs/map-api/point_layer/pointlayer) 封装的配置式文本图层 API。 - -```ts -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`field - -`string` required - -映射的标签数据字段。 - -### `options.`style - -`TextLayerStyleOptions` optional - -字体样式,TextLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------------- | ------------------------------------------------------------------------- | ----------- | ---------- | -------- | -| fill | 字体颜色 | `ColorAttr` | `'#fff'` | optional | -| fontSize | 字体大小 | `SizeAttr` | `12` | optional | -| opacity | 文字透明度 | `number` | `1` | optional | -| stroke | 文字描边颜色 | `string` | `'#fff'` | optional | -| strokeWidth | 文字描边宽度 | `number` | `0` | optional | -| strokeOpacity | 文字描边透明度 | `number` | `1` | optional | -| fontFamily | 文字字体 | `string` | | optional | -| fontWeight | 字体粗细程度 | `string` | | optional | -| textAllowOverlap | 是否允许文本覆盖 | `boolean` | `false` | optional | -| textAnchor | 文本相对锚点的位置 | `string` | `'center'` | optional | -| textOffset | 文本相对锚点的偏移量 | `number[]` | `[0, 0]` | optional | -| spacing | 字符间距 | `number` | `0` | optional | -| padding | 文本包围盒 padding (水平,垂直),影响碰撞检测结果,避免相邻文本靠的太近 | `number[]` | `[0, 0]` | optional | - -textAnchor 文本相对锚点的位置,支持以下相对锚点的位置: - -* 'right' -* 'top-right' -* 'left' -* 'bottom-right' -* 'left' -* 'top-left' -* 'bottom-left' -* 'bottom' -* 'bottom-right' -* 'bottom-left' -* 'top' -* 'top-right' -* 'top-left' -* 'center' - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 - - -## 三、方法 - -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` - - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/layers/arc-layer.en.md b/site/docs/map-api/layers/arc-layer.en.md deleted file mode 100644 index 5fd5a9579..000000000 --- a/site/docs/map-api/layers/arc-layer.en.md +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: ArcLayer -order: 7 ---- - ---- -title: 弧线图层 - ArcLayer -order: 7 ---- - -`ArcLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ startX: 58.00, startY: 32.84, endX: 85.7, endY: 25.161, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'startX', y: 'startY', x: 'endX', y: 'endY', } - } -} -``` - -### `options.`shape - -`string` optional default: `'arc'` - -支持 2D 与 3D 弧线及大圆航线: - -* arc -* arc3d -* greatcircle - -```js -{ shape: 'arc', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ startX: 58.00, startY: 32.84, endX: 85.7, endY: 25.161, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'startX', y: 'startY', x: 'endX', y: 'endY', } - }, - size: { field: 't', } -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`LinesLayerStyleOptions` optional - -元素样式,LinesLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | -| sourceColor | 渐变起点颜色 | `string` | | optional | -| targetColor | 渐变终点颜色 | `string` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| interval | 轨迹间隔, 取值区间 0 - 1 | `number` | | optional | -| duration | 动画时间,单位秒 | `number` | | optional | -| trailLength | 轨迹长度 取值区间 0 - 1 | `number` | | optional | - -```js -{ - animate: { - duration: 4, - interval: 0.2, - trailLength: 0.1, - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/arc-layer.zh.md b/site/docs/map-api/layers/arc-layer.zh.md deleted file mode 100644 index 94f5d385a..000000000 --- a/site/docs/map-api/layers/arc-layer.zh.md +++ /dev/null @@ -1,237 +0,0 @@ ---- -title: 弧线图层 - ArcLayer -order: 7 ---- - -`ArcLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ startX: 58.00, startY: 32.84, endX: 85.7, endY: 25.161, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'startX', y: 'startY', x: 'endX', y: 'endY', } - } -} -``` - -### `options.`shape - -`string` optional default: `'arc'` - -支持 2D 与 3D 弧线及大圆航线: - -* arc -* arc3d -* greatcircle - -```js -{ shape: 'arc', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ startX: 58.00, startY: 32.84, endX: 85.7, endY: 25.161, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'startX', y: 'startY', x: 'endX', y: 'endY', } - }, - size: { field: 't', } -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`LinesLayerStyleOptions` optional - -元素样式,LinesLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | -| sourceColor | 渐变起点颜色 | `string` | | optional | -| targetColor | 渐变终点颜色 | `string` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| interval | 轨迹间隔, 取值区间 0 - 1 | `number` | | optional | -| duration | 动画时间,单位秒 | `number` | | optional | -| trailLength | 轨迹长度 取值区间 0 - 1 | `number` | | optional | - -```js -{ - animate: { - duration: 4, - interval: 0.2, - trailLength: 0.1, - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/area-layer.en.md b/site/docs/map-api/layers/area-layer.en.md deleted file mode 100644 index baf2e5b77..000000000 --- a/site/docs/map-api/layers/area-layer.en.md +++ /dev/null @@ -1,253 +0,0 @@ ---- -title: AreaLayer -order: 8 ---- - ---- -title: 区域图层 - AreaLayer -order: 8 ---- - -`AreaLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`AreaLayerStyle` optional - -区域样式,AreaLayerStyle 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------------- | ------------------------------------ | ------------------ | ----------- | -------- | -| opacity | 填充透明度 | `number` | `1` | optional | -| fillBottomColor | 填充兜底颜色,用于颜色值映值不存在时 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | -| lineType | 描边线类型,支持实线与虚线 | `‘solid’|'dash'` | `‘solid’` | optional | -| lineDash | 描边的虚线间隔 | `[number, number]` | | optional | - -> lineDash: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - lineWidth: 2, - } -} -``` - - -### `options.`enabledMultiSelect - -`boolean` optional default: `false` - -是否启用多选。 - -### `options.`state - -`object` optional - -区域交互反馈效果。 - -```js -{ - state: { - active: { - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - }, - select: false, - } -} -``` - -#### `state.`active - -`boolean|AreaLayerActiveOptions` optional default: `false` - -AreaLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fill | 填充颜色 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fill: false, - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - -#### `state.`select - -`boolean|AreaLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fill: 'red', - stroke: false, - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/area-layer.zh.md b/site/docs/map-api/layers/area-layer.zh.md deleted file mode 100644 index 71c4bd472..000000000 --- a/site/docs/map-api/layers/area-layer.zh.md +++ /dev/null @@ -1,248 +0,0 @@ ---- -title: 区域图层 - AreaLayer -order: 8 ---- - -`AreaLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`AreaLayerStyle` optional - -区域样式,AreaLayerStyle 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------------- | ------------------------------------ | ------------------ | ----------- | -------- | -| opacity | 填充透明度 | `number` | `1` | optional | -| fillBottomColor | 填充兜底颜色,用于颜色值映值不存在时 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | -| lineType | 描边线类型,支持实线与虚线 | `‘solid’|'dash'` | `‘solid’` | optional | -| lineDash | 描边的虚线间隔 | `[number, number]` | | optional | - -> lineDash: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - lineWidth: 2, - } -} -``` - - -### `options.`enabledMultiSelect - -`boolean` optional default: `false` - -是否启用多选。 - -### `options.`state - -`object` optional - -区域交互反馈效果。 - -```js -{ - state: { - active: { - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - }, - select: false, - } -} -``` - -#### `state.`active - -`boolean|AreaLayerActiveOptions` optional default: `false` - -AreaLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fill | 填充颜色 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fill: false, - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - -#### `state.`select - -`boolean|AreaLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fill: 'red', - stroke: false, - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/dot-density-layer.en.md b/site/docs/map-api/layers/dot-density-layer.en.md deleted file mode 100644 index 3de10e59b..000000000 --- a/site/docs/map-api/layers/dot-density-layer.en.md +++ /dev/null @@ -1,189 +0,0 @@ ---- -title: DotDensityLayer -order: 2 ---- - ---- -title: 点密度图层 - DotDensityLayer -order: 2 ---- - -`DotDensityLayer` 继承 [DotLayer](/zh/docs/map-api/layers/dot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`size - -`number` optional default: `1` - -圆点大小。 - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -继承 [DotLayer 属性](/zh/docs/map-api/layers/dot-layer#二、属性)。 - -## 三、方法 - -继承 [DotLayer 方法](/zh/docs/map-api/layers/dot-layer#三、方法)。 - -## 四、事件 - -继承 [DotLayer 方法](/zh/docs/map-api/layers/dot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/dot-density-layer.zh.md b/site/docs/map-api/layers/dot-density-layer.zh.md deleted file mode 100644 index 652da3e55..000000000 --- a/site/docs/map-api/layers/dot-density-layer.zh.md +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: 点密度图层 - DotDensityLayer -order: 2 ---- - -`DotDensityLayer` 继承 [DotLayer](/zh/docs/map-api/layers/dot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`size - -`number` optional default: `1` - -圆点大小。 - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -继承 [DotLayer 属性](/zh/docs/map-api/layers/dot-layer#二、属性)。 - -## 三、方法 - -继承 [DotLayer 方法](/zh/docs/map-api/layers/dot-layer#三、方法)。 - -## 四、事件 - -继承 [DotLayer 方法](/zh/docs/map-api/layers/dot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/dot-layer.en.md b/site/docs/map-api/layers/dot-layer.en.md deleted file mode 100644 index e727644b4..000000000 --- a/site/docs/map-api/layers/dot-layer.en.md +++ /dev/null @@ -1,380 +0,0 @@ ---- -title: DotLayer -order: 1 ---- - ---- -title: 散点图层 - DotLayer -order: 1 ---- - -`DotLayer` 继承基类 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string|Function|object` optional default: `'circle'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 - * pentagon: 五角星 - * octogon: 八边形 - * hexagram: 六边形 - * rhombus: 菱形 - * vesica: 椭圆形 - * dot: 圆点 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'circle', } -``` - -除内置图标外,还可**自定义图标**: - -1. 注册图标 - -```js -const images = [ - { id: '01', image: 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg' }, - { id: '02', image: 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg' }, - { id: '03', image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg' }, -]; -registerImages(images); -``` - -2. 使用注册图标 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: '01', n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: '01', -} -``` - -#### `shape.`field - -`string` optional - -元素形状值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 'circle', t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: { field: 's', } -} -``` - -#### `shape.`value - -`string|string[]|Function` optional - -元素形状值映射值。 - -```js -{ - shape: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'triangle': 'circle' - } - } -} -``` - -#### `shape.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - shape: { - field: 't', - value: ['circle', 'triangle'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 12, t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | ------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| speed | 水波速度 | `number` | | optional | -| rings | 水波环数 | `number` | | optional | - -```js -{ - animate: true, -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/dot-layer.zh.md b/site/docs/map-api/layers/dot-layer.zh.md deleted file mode 100644 index a6cf4db68..000000000 --- a/site/docs/map-api/layers/dot-layer.zh.md +++ /dev/null @@ -1,375 +0,0 @@ ---- -title: 散点图层 - DotLayer -order: 1 ---- - -`DotLayer` 继承基类 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string|Function|object` optional default: `'circle'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 - * pentagon: 五角星 - * octogon: 八边形 - * hexagram: 六边形 - * rhombus: 菱形 - * vesica: 椭圆形 - * dot: 圆点 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'circle', } -``` - -除内置图标外,还可**自定义图标**: - -1. 注册图标 - -```js -const images = [ - { id: '01', image: 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg' }, - { id: '02', image: 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg' }, - { id: '03', image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg' }, -]; -registerImages(images); -``` - -2. 使用注册图标 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: '01', n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: '01', -} -``` - -#### `shape.`field - -`string` optional - -元素形状值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 'circle', t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: { field: 's', } -} -``` - -#### `shape.`value - -`string|string[]|Function` optional - -元素形状值映射值。 - -```js -{ - shape: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'triangle': 'circle' - } - } -} -``` - -#### `shape.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - shape: { - field: 't', - value: ['circle', 'triangle'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 12, t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | ------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| speed | 水波速度 | `number` | | optional | -| rings | 水波环数 | `number` | | optional | - -```js -{ - animate: true, -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/grid-layer.en.md b/site/docs/map-api/layers/grid-layer.en.md deleted file mode 100644 index 3fbfb998e..000000000 --- a/site/docs/map-api/layers/grid-layer.en.md +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: GridLayer -order: 4 ---- - ---- -title: 网格聚合图层 - GridLayer -order: 4 ---- - -`GridLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置。 - -#### `source.`aggregation - -`GridAggregation` required - -数据网格聚合配置,GridAggregation 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | -------- | -------------------------------------- | ------- | -------- | -| field | 聚合字段 | `string` | | required | -| radius | 网格半径 | `number` | `15000` | optional | -| method | 聚合类型 | `'count'|'max'|'min'|'sum'|'mean'` | `'sum'` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - aggregation: { field: 't', radius: 15000, type: 'sum' } - } -} -``` - -其它配置详见 [Source](/zh/docs/map-api/source)。 - - -### `options.`shape - -`string` optional default: `'square'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'square', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional - -元素大小。 - -**shape 为 2D 时,size 无需设置;shape 为 3D 时,size 表示高度。** - -```js -{ - size: { - field: 'value', - value: ({ value }) => value * 2 - } -} -``` - -#### `size.`field - -`string` required - -网格大小映射字段。 - -#### `size.`value - -`number|number[]|Function` optional - -网格大小值映射值。 - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -### `options.`style - -`GridHeatmapLayerStyleOptions` optional - -元素样式, GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/grid-layer.zh.md b/site/docs/map-api/layers/grid-layer.zh.md deleted file mode 100644 index 0e65267ce..000000000 --- a/site/docs/map-api/layers/grid-layer.zh.md +++ /dev/null @@ -1,207 +0,0 @@ ---- -title: 网格聚合图层 - GridLayer -order: 4 ---- - -`GridLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置。 - -#### `source.`aggregation - -`GridAggregation` required - -数据网格聚合配置,GridAggregation 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | -------- | -------------------------------------- | ------- | -------- | -| field | 聚合字段 | `string` | | required | -| radius | 网格半径 | `number` | `15000` | optional | -| method | 聚合类型 | `'count'|'max'|'min'|'sum'|'mean'` | `'sum'` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - aggregation: { field: 't', radius: 15000, type: 'sum' } - } -} -``` - -其它配置详见 [Source](/zh/docs/map-api/source)。 - - -### `options.`shape - -`string` optional default: `'square'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'square', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional - -元素大小。 - -**shape 为 2D 时,size 无需设置;shape 为 3D 时,size 表示高度。** - -```js -{ - size: { - field: 'value', - value: ({ value }) => value * 2 - } -} -``` - -#### `size.`field - -`string` required - -网格大小映射字段。 - -#### `size.`value - -`number|number[]|Function` optional - -网格大小值映射值。 - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -### `options.`style - -`GridHeatmapLayerStyleOptions` optional - -元素样式, GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/heatmap-layer.en.md b/site/docs/map-api/layers/heatmap-layer.en.md deleted file mode 100644 index 5a4ab1d41..000000000 --- a/site/docs/map-api/layers/heatmap-layer.en.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: HeatmapLayer -order: 3 ---- - ---- -title: 点热力图层 - HeatmapLayer -order: 3 ---- - -`HeatmapLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string` optional default: `'heatmap'` - -热力模式支持 2D 与 3D 热力: - -* heatmap -* heatmap3D - -```js -{ shape: 'heatmap', } -``` - - -### `options.`size - -`SizeAttr` required - -热力大小配置,SizeAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----- | -------------------- | -------------------- | -------- | -------- | -| field | 热力大小映射字段 | `string` | | required | -| value | 热力大小数据映射区间 | `number[]|Function` | `[0, 1]` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { - field: 't', - value: [0, 1], - }, -} -``` - - -### `options.`style - -`HeatmapLayerStyleOptions` optional - -热力样式,HeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------- | ------------------ | ----------- | ------ | -------- | -| intensity | 全局热力权重 | `number` | `3` | optional | -| radius | 热力半径,单位像素 | `number` | `20` | optional | -| opacity | 透明度 | `number` | `1` | optional | -| colorsRamp | 热力色带 | `ColorRamp` | | optional | - -热力色带,ColorRamp 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ---------- | -------- | ------ | -------- | -| color | 颜色 | `string` | | required | -| position | 热力映射值 | `number` | | required | - -```js -{ - style: { - intensity: 3, - radius: 20, - opacity: 1, - colorsRamp: [ - { color: 'rgba(33,102,172,0.0)', position: 0 }, - { color: 'rgb(103,169,207)', position: 0.2 }, - { color: 'rgb(209,229,240)', position: 0.4 }, - { color: 'rgb(253,219,199)', position: 0.6 }, - { color: 'rgb(239,138,98)', position: 0.8 }, - { color: 'rgb(178,24,43,1.0)', position: 1 }, - ], - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/heatmap-layer.zh.md b/site/docs/map-api/layers/heatmap-layer.zh.md deleted file mode 100644 index 47a99714a..000000000 --- a/site/docs/map-api/layers/heatmap-layer.zh.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: 点热力图层 - HeatmapLayer -order: 3 ---- - -`HeatmapLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string` optional default: `'heatmap'` - -热力模式支持 2D 与 3D 热力: - -* heatmap -* heatmap3D - -```js -{ shape: 'heatmap', } -``` - - -### `options.`size - -`SizeAttr` required - -热力大小配置,SizeAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----- | -------------------- | -------------------- | -------- | -------- | -| field | 热力大小映射字段 | `string` | | required | -| value | 热力大小数据映射区间 | `number[]|Function` | `[0, 1]` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { - field: 't', - value: [0, 1], - }, -} -``` - - -### `options.`style - -`HeatmapLayerStyleOptions` optional - -热力样式,HeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------- | ------------------ | ----------- | ------ | -------- | -| intensity | 全局热力权重 | `number` | `3` | optional | -| radius | 热力半径,单位像素 | `number` | `20` | optional | -| opacity | 透明度 | `number` | `1` | optional | -| colorsRamp | 热力色带 | `ColorRamp` | | optional | - -热力色带,ColorRamp 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ---------- | -------- | ------ | -------- | -| color | 颜色 | `string` | | required | -| position | 热力映射值 | `number` | | required | - -```js -{ - style: { - intensity: 3, - radius: 20, - opacity: 1, - colorsRamp: [ - { color: 'rgba(33,102,172,0.0)', position: 0 }, - { color: 'rgb(103,169,207)', position: 0.2 }, - { color: 'rgb(209,229,240)', position: 0.4 }, - { color: 'rgb(253,219,199)', position: 0.6 }, - { color: 'rgb(239,138,98)', position: 0.8 }, - { color: 'rgb(178,24,43,1.0)', position: 1 }, - ], - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/hexbin-layer.en.md b/site/docs/map-api/layers/hexbin-layer.en.md deleted file mode 100644 index 37f960d4c..000000000 --- a/site/docs/map-api/layers/hexbin-layer.en.md +++ /dev/null @@ -1,204 +0,0 @@ ---- -title: HexbinLayer -order: 5 ---- - ---- -title: 蜂窝聚合图层 - HexbinLayer -order: 5 ---- - -`HexbinLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置。 - -#### `source.`aggregation - -`GridAggregation` required - -数据网格聚合配置,GridAggregation 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | -------- | -------------------------------------- | ------- | -------- | -| field | 聚合字段 | `string` | | required | -| radius | 网格半径 | `number` | `15000` | optional | -| method | 聚合类型 | `'count'|'max'|'min'|'sum'|'mean'` | `'sum'` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - aggregation: { field: 't', radius: 15000, type: 'sum' } - } -} -``` - -其它配置详见 [Source](/zh/docs/map-api/source)。 - - -### `options.`shape - -`string` optional default: `'hexagon'` - -元素形状,分别支持 2D 与 3D 蜂窝: - -* hexagon: 蜂窝 -* hexagonColumn: 蜂窝柱 - -```js -{ shape: 'hexagon', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional - -元素大小。 - -**shape 为 2D 时,size 无需设置;shape 为 3D 时,size 表示高度。** - -```js -{ - size: { - field: 'value', - value: ({ value }) => value * 2 - } -} -``` - -#### `size.`field - -`string` required - -网格大小映射字段。 - -#### `size.`value - -`number|number[]|Function` optional - -网格大小值映射值。 - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -### `options.`style - -`GridHeatmapLayerStyleOptions` optional - -元素样式, GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/hexbin-layer.zh.md b/site/docs/map-api/layers/hexbin-layer.zh.md deleted file mode 100644 index 4c8644e88..000000000 --- a/site/docs/map-api/layers/hexbin-layer.zh.md +++ /dev/null @@ -1,199 +0,0 @@ ---- -title: 蜂窝聚合图层 - HexbinLayer -order: 5 ---- - -`HexbinLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置。 - -#### `source.`aggregation - -`GridAggregation` required - -数据网格聚合配置,GridAggregation 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | -------- | -------------------------------------- | ------- | -------- | -| field | 聚合字段 | `string` | | required | -| radius | 网格半径 | `number` | `15000` | optional | -| method | 聚合类型 | `'count'|'max'|'min'|'sum'|'mean'` | `'sum'` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - aggregation: { field: 't', radius: 15000, type: 'sum' } - } -} -``` - -其它配置详见 [Source](/zh/docs/map-api/source)。 - - -### `options.`shape - -`string` optional default: `'hexagon'` - -元素形状,分别支持 2D 与 3D 蜂窝: - -* hexagon: 蜂窝 -* hexagonColumn: 蜂窝柱 - -```js -{ shape: 'hexagon', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional - -元素大小。 - -**shape 为 2D 时,size 无需设置;shape 为 3D 时,size 表示高度。** - -```js -{ - size: { - field: 'value', - value: ({ value }) => value * 2 - } -} -``` - -#### `size.`field - -`string` required - -网格大小映射字段。 - -#### `size.`value - -`number|number[]|Function` optional - -网格大小值映射值。 - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -### `options.`style - -`GridHeatmapLayerStyleOptions` optional - -元素样式, GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/icon-layer.en.md b/site/docs/map-api/layers/icon-layer.en.md deleted file mode 100644 index 57d9ce0d1..000000000 --- a/site/docs/map-api/layers/icon-layer.en.md +++ /dev/null @@ -1,293 +0,0 @@ ---- -title: IconLayer -order: 2 ---- - ---- -title: 图标图层 - IconLayer -order: 2 ---- - -`IconLayer` 继承基类 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string` required - -图标形状,使用方法如下: - -1. 注册图标 - -```js -const images = [ - { id: '01', image: 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg' }, - { id: '02', image: 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg' }, - { id: '03', image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg' }, -]; -registerImages(images); -``` - -2. 使用注册图标 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: '01', t: 21, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: '01', -} -``` - -自定义映射图标 - -```js -{ - shape: { - field: 't', - value: ({ t }) => { - return t > 20 ? '01': '02' - } - } -} -``` - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 12, t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/icon-layer.zh.md b/site/docs/map-api/layers/icon-layer.zh.md deleted file mode 100644 index e17c5298b..000000000 --- a/site/docs/map-api/layers/icon-layer.zh.md +++ /dev/null @@ -1,288 +0,0 @@ ---- -title: 图标图层 - IconLayer -order: 2 ---- - -`IconLayer` 继承基类 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string` required - -图标形状,使用方法如下: - -1. 注册图标 - -```js -const images = [ - { id: '01', image: 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg' }, - { id: '02', image: 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg' }, - { id: '03', image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg' }, -]; -registerImages(images); -``` - -2. 使用注册图标 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: '01', t: 21, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: '01', -} -``` - -自定义映射图标 - -```js -{ - shape: { - field: 't', - value: ({ t }) => { - return t > 20 ? '01': '02' - } - } -} -``` - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 12, t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/path-layer.en.md b/site/docs/map-api/layers/path-layer.en.md deleted file mode 100644 index fcf7a02c7..000000000 --- a/site/docs/map-api/layers/path-layer.en.md +++ /dev/null @@ -1,203 +0,0 @@ ---- -title: PathLayer -order: 6 ---- - ---- -title: 路径图层 - PathLayer -order: 6 ---- - -`PathLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ - path: [[58.00, 32.84],[85.7, 25.161],[101.95, 41.77],[114.96, 39.63],[117.421, 28.61]], - c: 'red', - t: 20, - n: 'chengdu' - }], - parser: { type: 'json', coordinates: 'path', } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - size: { field: 't', } -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`LinesLayerStyleOptions` optional - -元素样,LinesLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/path-layer.zh.md b/site/docs/map-api/layers/path-layer.zh.md deleted file mode 100644 index d2df1d160..000000000 --- a/site/docs/map-api/layers/path-layer.zh.md +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: 路径图层 - PathLayer -order: 6 ---- - -`PathLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ - path: [[58.00, 32.84],[85.7, 25.161],[101.95, 41.77],[114.96, 39.63],[117.421, 28.61]], - c: 'red', - t: 20, - n: 'chengdu' - }], - parser: { type: 'json', coordinates: 'path', } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - size: { field: 't', } -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`LinesLayerStyleOptions` optional - -元素样,LinesLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/plot-layer.en.md b/site/docs/map-api/layers/plot-layer.en.md deleted file mode 100644 index 9183d6bbb..000000000 --- a/site/docs/map-api/layers/plot-layer.en.md +++ /dev/null @@ -1,214 +0,0 @@ ---- -title: PlotLayer -order: 0 ---- - ---- -title: 图层 - PlotLayer -order: 0 ---- - -`PlotLayer` 是所有图表图层的基类,定义了图层的通用属性和方法。 - -```js -constructor(options: PlotLayerOptions) -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层可见范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`PlotLayerOptions` - -当前图层的所有配置项。 - -## 三、方法 - -### update - -更新配置且重新渲染。 - -```js -plot.update(options: Partial); -``` - -### changeData - -更新数据源。 - -```js -plot.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -plot.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -plot.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -plot.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -plot.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -plot.show(); -``` - -### hide - -隐藏图层。 - -```js -plot.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -plot.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -plot.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -plot.fitBounds(fitBoundsOptions?: Bounds) : boolean; -``` - -## 四、事件 - -**生命周期事件** - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -**点击事件** - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -**鼠标事件** - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/layers/plot-layer.zh.md b/site/docs/map-api/layers/plot-layer.zh.md deleted file mode 100644 index 2c294d1c8..000000000 --- a/site/docs/map-api/layers/plot-layer.zh.md +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: 图层 - PlotLayer -order: 0 ---- - -`PlotLayer` 是所有图表图层的基类,定义了图层的通用属性和方法。 - -```js -constructor(options: PlotLayerOptions) -``` - -## 一、配置 - -### `options.`name - -`string` optional - -图层名。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层可见范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 - -## 二、属性 - -### name - -`string` - -当前图层名。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`PlotLayerOptions` - -当前图层的所有配置项。 - -## 三、方法 - -### update - -更新配置且重新渲染。 - -```js -plot.update(options: Partial); -``` - -### changeData - -更新数据源。 - -```js -plot.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -plot.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -plot.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -plot.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -plot.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -plot.show(); -``` - -### hide - -隐藏图层。 - -```js -plot.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -plot.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -plot.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -plot.fitBounds(fitBoundsOptions?: Bounds) : boolean; -``` - -## 四、事件 - -**生命周期事件** - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -**点击事件** - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -**鼠标事件** - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-api/layers/prism-layer.en.md b/site/docs/map-api/layers/prism-layer.en.md deleted file mode 100644 index cea88c79c..000000000 --- a/site/docs/map-api/layers/prism-layer.en.md +++ /dev/null @@ -1,267 +0,0 @@ ---- -title: PrismLayer -order: 9 ---- - ---- -title: 水晶体图层 - PrismLayer -order: 9 ---- - -`PrismLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional - -水晶体高度。 - -```js -{ size: 120, } -``` - -#### `size.`field - -`string` optional - -水晶体高度值映射关联字段。 - -```js -{ - size: { field: 't' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -水晶体高度值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [120, 250], - scale: { type: 'quantile' }, - } -} -``` - -### `options.`style - -`PolygonLayerStyleOptions` optional - -区域样式,PolygonLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------- | ------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | - -```js -{ - style: { - opacity: 0.8, - } -} -``` - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/prism-layer.zh.md b/site/docs/map-api/layers/prism-layer.zh.md deleted file mode 100644 index 3692cf039..000000000 --- a/site/docs/map-api/layers/prism-layer.zh.md +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: 水晶体图层 - PrismLayer -order: 9 ---- - -`PrismLayer` 继承 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional - -水晶体高度。 - -```js -{ size: 120, } -``` - -#### `size.`field - -`string` optional - -水晶体高度值映射关联字段。 - -```js -{ - size: { field: 't' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -水晶体高度值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [120, 250], - scale: { type: 'quantile' }, - } -} -``` - -### `options.`style - -`PolygonLayerStyleOptions` optional - -区域样式,PolygonLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------- | ------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | - -```js -{ - style: { - opacity: 0.8, - } -} -``` - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/text-layer.en.md b/site/docs/map-api/layers/text-layer.en.md deleted file mode 100644 index 2e4bc8c06..000000000 --- a/site/docs/map-api/layers/text-layer.en.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: TextLayer -order: 1 ---- - ---- -title: 文本图层 - TextLayer -order: 1 ---- - -`TextLayer` 继承基类 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - -### `options.`field - -`string` required - -映射的标签数据字段。 - -### `options.`style - -`PointTextLayerStyleOptions` optional - -字体样式,PointTextLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------------- | ------------------------------------------------------------------------- | ----------- | ---------- | -------- | -| fill | 字体颜色 | `ColorAttr` | `'#fff'` | optional | -| fontSize | 字体大小 | `SizeAttr` | `12` | optional | -| opacity | 文字透明度 | `number` | `1` | optional | -| stroke | 文字描边颜色 | `string` | `'#fff'` | optional | -| strokeWidth | 文字描边宽度 | `number` | `0` | optional | -| strokeOpacity | 文字描边透明度 | `number` | `1` | optional | -| fontFamily | 文字字体 | `string` | | optional | -| fontWeight | 字体粗细程度 | `string` | | optional | -| textAllowOverlap | 是否允许文本覆盖 | `boolean` | `false` | optional | -| textAnchor | 文本相对锚点的位置 | `string` | `'center'` | optional | -| textOffset | 文本相对锚点的偏移量 | `number[]` | `[0, 0]` | optional | -| spacing | 字符间距 | `number` | `0` | optional | -| padding | 文本包围盒 padding (水平,垂直),影响碰撞检测结果,避免相邻文本靠的太近 | `number[]` | `[0, 0]` | optional | - -textAnchor 文本相对锚点的位置,支持以下相对锚点的位置: - -* 'right' -* 'top-right' -* 'left' -* 'bottom-right' -* 'left' -* 'top-left' -* 'bottom-left' -* 'bottom' -* 'bottom-right' -* 'bottom-left' -* 'top' -* 'top-right' -* 'top-left' -* 'center' - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/layers/text-layer.zh.md b/site/docs/map-api/layers/text-layer.zh.md deleted file mode 100644 index fee505765..000000000 --- a/site/docs/map-api/layers/text-layer.zh.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: 文本图层 - TextLayer -order: 1 ---- - -`TextLayer` 继承基类 [PlotLayer](/zh/docs/map-api/layers/plot-layer)。 - -## 一、配置 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - -### `options.`field - -`string` required - -映射的标签数据字段。 - -### `options.`style - -`PointTextLayerStyleOptions` optional - -字体样式,PointTextLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------------- | ------------------------------------------------------------------------- | ----------- | ---------- | -------- | -| fill | 字体颜色 | `ColorAttr` | `'#fff'` | optional | -| fontSize | 字体大小 | `SizeAttr` | `12` | optional | -| opacity | 文字透明度 | `number` | `1` | optional | -| stroke | 文字描边颜色 | `string` | `'#fff'` | optional | -| strokeWidth | 文字描边宽度 | `number` | `0` | optional | -| strokeOpacity | 文字描边透明度 | `number` | `1` | optional | -| fontFamily | 文字字体 | `string` | | optional | -| fontWeight | 字体粗细程度 | `string` | | optional | -| textAllowOverlap | 是否允许文本覆盖 | `boolean` | `false` | optional | -| textAnchor | 文本相对锚点的位置 | `string` | `'center'` | optional | -| textOffset | 文本相对锚点的偏移量 | `number[]` | `[0, 0]` | optional | -| spacing | 字符间距 | `number` | `0` | optional | -| padding | 文本包围盒 padding (水平,垂直),影响碰撞检测结果,避免相邻文本靠的太近 | `number[]` | `[0, 0]` | optional | - -textAnchor 文本相对锚点的位置,支持以下相对锚点的位置: - -* 'right' -* 'top-right' -* 'left' -* 'bottom-right' -* 'left' -* 'top-left' -* 'bottom-left' -* 'bottom' -* 'bottom-right' -* 'bottom-left' -* 'top' -* 'top-right' -* 'top-left' -* 'center' - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -## 二、属性 - -继承 [PlotLayer 属性](/zh/docs/map-api/layers/plot-layer#二、属性)。 - -## 三、方法 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#三、方法)。 - -## 四、事件 - -继承 [PlotLayer 方法](/zh/docs/map-api/layers/plot-layer#四、事件)。 diff --git a/site/docs/map-api/plot-api/index.en.md b/site/docs/map-api/plot-api/index.en.md deleted file mode 100644 index c7a5dca62..000000000 --- a/site/docs/map-api/plot-api/index.en.md +++ /dev/null @@ -1,682 +0,0 @@ ---- -title: Plot -order: 0 -redirect_from: - - /en/docs/map-api ---- - ---- -title: 图表 - Plot -order: 0 -redirect_from: - - /zh/docs/map-api ---- - -`Plot` 是所有图表的基类,定义了地图图表的通用属性和方法。 - -```js -constructor(container: string | HTMLDivElement, options: PlotOptions) -``` - -## 一、配置 - -### container - -`string|HTMLDivElement` required - -图表渲染的 DOM 容器。 - -### options - -`PlotOptions` required - -图表的所有配置项。 - -### `options.`width - -`number` optional default: `null` - -设置图表容器宽度。 - -### `options.`height - -`number` optional default: `null` - -设置图表容器高度。 - -### `options.`map - -`MapConfig` required - -地图容器配置项。 - -#### `map.`type - -`string` optional default: `'amap'` - -地图底图类型,支持以下两种类型: - -* amap: 高德地图 -* mapbox: Mapbox 地图 - -地图底图类型不同时,`map` 下面的有的配置项不相同,比如 `maxZoom`,AMap 最大缩放等级 18,Mapbox 最大缩放等级 20。除此之外还有,底图的交互状态配置,`zoomEnable`、`dragEnable`等。各配置项可详见各官网:高德地图 [配置项](https://lbs.amap.com/api/javascript-api/reference/map);Mapbox 地图 [配置项](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)。 - -#### `map.`token - -`string` required - -地图服务 token,需服务平台申请。 - -#### `map.`center - -`number[]` optional default: `[0, 0]` - -初始中心经纬度。 - -#### `map.`pitch - -`number` optional default: `0` - -初始倾角。 - -#### `map.`rotation - -`number` optional default: `0` - -初始旋转角度。 - -#### `map.`zoom - -`number` optional default: `0` - -初始缩放层级,底图可缩放层级分布为: - -* Mapbox (0-24) -* 高德 (2-19) - -#### `map.`minZoom - -`number` optional default: `0` - -地图最小缩放等级。 - -#### `map.`maxZoom - -`number` optional default: `20` - -地图最大缩放等级,AMap 最大缩放等级 18,Mapbox 最大缩放等级 20。 - -#### `map.`style - -`string` optional default: `dark` - -内置样式: - -* dark: 黑暗 -* light: 明亮 -* normal: 普通 -* blank: 无底图 - -自定义样式: - -```js -{ - style: 'amap://styles/2a09079c3daac9420ee53b67307a8006?isPublic=true'; -} -``` - - -### `options.`antialias - -`boolean` optional default: `true` - -是否开启抗锯齿。 - -### `options.`preserveDrawingBuffer - -`boolean` optional default: `false` - -是否保留缓冲区数据。 - -### `options.`logo - -`bool` optional default: `true` - -是否显示 logo。 - -### `options.`source - -`ISource` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -### `options.`autoFit - -`bool` optional default: `false` - -图层完成初始化之后,地图是否自动缩放到图层的数据边界范围,注意 后图表数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`theme - -`string|object` optional default: `'light'` - -图表主题,详见 [Theme](/zh/docs/map-api/theme)。 - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -### DefaultOptions - -`object` **static** - -### container - -`HTMLDivElement` - -图表渲染的 DOM 容器。 - -### options - -`PlotOptions` - -图表的所有配置项。 - -### scene - -`Scene` - -图表的地图场景实例。 - -### type - -`string` - -图表所属类型。 - -### layerGroup - -`LayerGroup` - -图表的图层组。 - -### sceneLoaded - -`boolean` - -图表的地图场景是否加载完成。 - -### layersLoaded - -`boolean` - -图表的图层是否加载完成。 - -### zoomControl - -`undefined|Zoom` - -放缩器控件实例。 - -### scaleControl - -`undefined|Scale` - -比例尺控件实例。 - -### layerMenuControl - -`undefined|Layers` - -图层列表控件实例。 - -### legendControl - -`undefined|Legend` - -图例控件实例。 - -### tooltip - -`undefined|Tooltip` - -悬浮提示组件实例。 - -## 三、方法 - -### update - -更新配置且重新渲染。 - -```js -plot.update(options: Partial); -``` - -### changeData - -更新数据源。 - -```js -plot.changeData(data: any, cfg?: SourceOptions); -``` - -### changeSize - -修改容器大小。 - -```js -plot.changeSize(width: number, height: number); -``` - -### getScene - -获取图表的地图 scene 实例。 - -```js -plot.getScene() : Scene; -``` - -### getMap - -获取图表的 map 实例。 - -```js -plot.getMap() : MapboxInstance | AMapInstance; -``` - -### addLayer - -添加图层。 - -```js -plot.addLayer(layer: PlotLayer); -``` - -### getLayers - -获取所有图层。 - -```js -plot.getLayers(): PlotLayer[]; -``` - -### getLayerByName - -根据图层名称获取图层。 - -```js -plot.getLayerByName(name: string): PlotLayer | undefined; -``` - -### removeLayer - -移除图层。 - -```js -plot.removeLayer(layer: PlotLayer); -``` - -### removeAllLayer - -移除容器内所有的图层。 - -```js -plot.removeAllLayer(); -``` - -### zoomIn - -地图放大一级。 - -```js -plot.zoomIn(); -``` - -### zoomOut - -地图缩小一级。 - -```js -plot.zoomOut(); -``` - -### setPitch - -设置地图倾角。 - -```js -plot.setPitch(pitch: number); -``` - -### fitBounds - -设置地图缩放范围。 - -```js -plot.fitBounds(bound: Bounds); -``` - -### setMapStatus - -设置地图交互操作状态,可用来关闭地图的一些交互操作,缩放、平移、旋转等。 - -```js -plot.setMapStatus(status: MapStatusOptions); -``` - -### setBgColor - -设置容器的背景色。 - -```js -plot.setBgColor(color: string); -``` - -### addZoomControl - -添加地图缩放器控件。 - -```js -plot.addZoomControl(options: ZoomControlOptions); -``` - -### removeZoomControl - -移除地图缩放器控件。 - -```js -plot.removeZoomControl(); -``` - -### addScaleControl - -添加地图比例尺控件。 - -```js -plot.addScaleControl(options: ScaleControlOptions); -``` - -### removeScaleControl - -移除地图比例尺控件。 - -```js -plot.removeScaleControl(); -``` - -### addLayerMenuControl - -添加地图图层列表控件。 - -```js -plot.addLayerMenuControl(options: LayerMenuControlOptions); -``` - -### removeLayerMenuControl - -移除地图图层列表控件。 - -```js -plot.removeLayerMenuControl(); -``` - -### addLegendControl - -添加图例控件。 - -```js -plot.addLegendControl(options: LegendOptions); -``` - -### removeLegendControl - -移除图例控件。 - -```js -plot.removeLegendControl(); -``` - -### exportPng - -导出地图,目前仅支持导出可视化层,不支持底图导出。 - -```js -plot.exportPng(type?: 'png' | 'jpg'): string; -``` - -### addToScene - -添加到容器,用于 L7 Scene 与图表混合使用场景。 - -```js -plot.addToScene(scene: Scene); -``` - -### removeFromScene - -从容器上移除,用于 L7 Scene 与图表混合使用场景。 - -```js -plot.removeFromScene(); -``` - -### on - -绑定事件。 - -```js -plot.on(event: string, callback: (...args) => void); -``` - -### once - -绑定一次事件。 - -```js -plot.once(event: string, callback: (...args) => void); -``` - -### off - -解绑事件。 - -```js -plot.off(event: string, callback: (...args) => void); -``` - -### destroy - -```js -plot.destroy(); -``` - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -plot.on(event: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -plot.once(event: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -plot.off(event: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 地图事件 - -* 生命周期事件 - * loaded:加载完成事件。 - * scene-loaded:scene 加载完成事件。 - * destroy:销毁事件。 -* resize:地图容器大小改变事件。 -* 地图容器事件 - * mapmove:地图平移时触发事件。 - * movestart:地图平移开始时触发。 - * moveend:地图移动结束后触发,包括平移,以及中心点变化的缩放。如地图有拖拽缓动效果,则在缓动结束后触发。 - * zoomchange:地图缩放级别更改后触发。 - * zoomstart:缩放开始时触发。 - * zoomend:缩放停止时触发。 -* click:单击事件。 -* dblclick:双击事件。 -* contextmenu:右键事件。 -* 滑动事件 - * mousemove:鼠标在地图上移动时触发。 - * mousewheel:鼠标滚轮开始缩放地图时触发。 - * mouseover:鼠标移入地图容器内时触发。 - * mouseout:鼠标移出地图容器时触发。 - * mouseup:鼠标在地图上单击抬起时触发。 - * mousedown:鼠标在地图上单击按下时触发。 -* 拖动事件 - * dragstart:开始拖拽地图时触发。 - * dragging:拖拽地图过程中触发。 - * dragend:停止拖拽地图时触发。如地图有拖拽缓动效果,则在拽停止,缓动开始前触发。 - -#### 图层事件 - -详见[图层事件](/zh/docs/map-api/layers/plot-layer#四事件),使用方式如下: - -```js -plot.on('layerName:click', (...args) => void); -``` - -#### 组件事件 - -详见各组件事件,使用方式如下: - -```js -plot.on('tooltip:change', (...args) => void); -``` - -## 五、资源注册 - -### 注册图片资源 - -#### registerImage(id: string, image: IImage) - -注册单个图片。 - -params: - -* id: `string` -* image: `HTMLImageElement|File|string` - -```js -import { registerImage } from '@ant-design/charts'; - -registerImage('01', 'https://l7plot.antv.vision/xxx.svg'); -``` - -#### registerImages(images) - -注册多个图片。 - -params: - -* images: `Array` - * id: `string` - * image: `HTMLImageElement|File|string` - -```js -import { registerImages } from '@ant-design/charts'; - -const images = [{ id: '01', image: 'https://l7plot.antv.vision/xxx.svg' }]; -registerImages(images); -``` - -### 注册字体资源 - -#### registerFontFace(fontFamily: string, fontPath: string) - -注册字体。 - -params: - -* fontFamily: `string` -* fontPath: `string` - -```js -import { registerFontFace } from '@ant-design/charts'; - -registerFontFace('iconfont', 'https://l7plot.antv.vision/xxx.woff2'); -``` - -### 注册 iconfont 映射 - -#### registerIconFont(name: string, fontUnicode: string) - -注册单个 iconfont 映射。 - -params: - -* name: `string` -* fontUnicode: `string` - -```js -import { registerIconFont } from '@ant-design/charts'; - -registerIconFont('icon1', ''); -``` - -#### registerIconFonts(iconFonts) - -注册多个 iconfont 映射。 - -params: - -* iconFonts - * name: `string` - * fontUnicode: `string` - -```js -import { registerIconFonts } from '@ant-design/charts'; - -const iconFonts = [{ name: 'icon1', fontUnicode: '' }]; -registerIconFonts(iconFonts); -``` diff --git a/site/docs/map-api/plot-api/index.zh.md b/site/docs/map-api/plot-api/index.zh.md deleted file mode 100644 index 3af3a9a7e..000000000 --- a/site/docs/map-api/plot-api/index.zh.md +++ /dev/null @@ -1,675 +0,0 @@ ---- -title: 图表 - Plot -order: 0 -redirect_from: - - /zh/docs/map-api ---- - -`Plot` 是所有图表的基类,定义了地图图表的通用属性和方法。 - -```js -constructor(container: string | HTMLDivElement, options: PlotOptions) -``` - -## 一、配置 - -### container - -`string|HTMLDivElement` required - -图表渲染的 DOM 容器。 - -### options - -`PlotOptions` required - -图表的所有配置项。 - -### `options.`width - -`number` optional default: `null` - -设置图表容器宽度。 - -### `options.`height - -`number` optional default: `null` - -设置图表容器高度。 - -### `options.`map - -`MapConfig` required - -地图容器配置项。 - -#### `map.`type - -`string` optional default: `'amap'` - -地图底图类型,支持以下两种类型: - -* amap: 高德地图 -* mapbox: Mapbox 地图 - -地图底图类型不同时,`map` 下面的有的配置项不相同,比如 `maxZoom`,AMap 最大缩放等级 18,Mapbox 最大缩放等级 20。除此之外还有,底图的交互状态配置,`zoomEnable`、`dragEnable`等。各配置项可详见各官网:高德地图 [配置项](https://lbs.amap.com/api/javascript-api/reference/map);Mapbox 地图 [配置项](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)。 - -#### `map.`token - -`string` required - -地图服务 token,需服务平台申请。 - -#### `map.`center - -`number[]` optional default: `[0, 0]` - -初始中心经纬度。 - -#### `map.`pitch - -`number` optional default: `0` - -初始倾角。 - -#### `map.`rotation - -`number` optional default: `0` - -初始旋转角度。 - -#### `map.`zoom - -`number` optional default: `0` - -初始缩放层级,底图可缩放层级分布为: - -* Mapbox (0-24) -* 高德 (2-19) - -#### `map.`minZoom - -`number` optional default: `0` - -地图最小缩放等级。 - -#### `map.`maxZoom - -`number` optional default: `20` - -地图最大缩放等级,AMap 最大缩放等级 18,Mapbox 最大缩放等级 20。 - -#### `map.`style - -`string` optional default: `dark` - -内置样式: - -* dark: 黑暗 -* light: 明亮 -* normal: 普通 -* blank: 无底图 - -自定义样式: - -```js -{ - style: 'amap://styles/2a09079c3daac9420ee53b67307a8006?isPublic=true'; -} -``` - - -### `options.`antialias - -`boolean` optional default: `true` - -是否开启抗锯齿。 - -### `options.`preserveDrawingBuffer - -`boolean` optional default: `false` - -是否保留缓冲区数据。 - -### `options.`logo - -`bool` optional default: `true` - -是否显示 logo。 - -### `options.`source - -`ISource` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -### `options.`autoFit - -`bool` optional default: `false` - -图层完成初始化之后,地图是否自动缩放到图层的数据边界范围,注意 后图表数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`theme - -`string|object` optional default: `'light'` - -图表主题,详见 [Theme](/zh/docs/map-api/theme)。 - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -### DefaultOptions - -`object` **static** - -### container - -`HTMLDivElement` - -图表渲染的 DOM 容器。 - -### options - -`PlotOptions` - -图表的所有配置项。 - -### scene - -`Scene` - -图表的地图场景实例。 - -### type - -`string` - -图表所属类型。 - -### layerGroup - -`LayerGroup` - -图表的图层组。 - -### sceneLoaded - -`boolean` - -图表的地图场景是否加载完成。 - -### layersLoaded - -`boolean` - -图表的图层是否加载完成。 - -### zoomControl - -`undefined|Zoom` - -放缩器控件实例。 - -### scaleControl - -`undefined|Scale` - -比例尺控件实例。 - -### layerMenuControl - -`undefined|Layers` - -图层列表控件实例。 - -### legendControl - -`undefined|Legend` - -图例控件实例。 - -### tooltip - -`undefined|Tooltip` - -悬浮提示组件实例。 - -## 三、方法 - -### update - -更新配置且重新渲染。 - -```js -plot.update(options: Partial); -``` - -### changeData - -更新数据源。 - -```js -plot.changeData(data: any, cfg?: SourceOptions); -``` - -### changeSize - -修改容器大小。 - -```js -plot.changeSize(width: number, height: number); -``` - -### getScene - -获取图表的地图 scene 实例。 - -```js -plot.getScene() : Scene; -``` - -### getMap - -获取图表的 map 实例。 - -```js -plot.getMap() : MapboxInstance | AMapInstance; -``` - -### addLayer - -添加图层。 - -```js -plot.addLayer(layer: PlotLayer); -``` - -### getLayers - -获取所有图层。 - -```js -plot.getLayers(): PlotLayer[]; -``` - -### getLayerByName - -根据图层名称获取图层。 - -```js -plot.getLayerByName(name: string): PlotLayer | undefined; -``` - -### removeLayer - -移除图层。 - -```js -plot.removeLayer(layer: PlotLayer); -``` - -### removeAllLayer - -移除容器内所有的图层。 - -```js -plot.removeAllLayer(); -``` - -### zoomIn - -地图放大一级。 - -```js -plot.zoomIn(); -``` - -### zoomOut - -地图缩小一级。 - -```js -plot.zoomOut(); -``` - -### setPitch - -设置地图倾角。 - -```js -plot.setPitch(pitch: number); -``` - -### fitBounds - -设置地图缩放范围。 - -```js -plot.fitBounds(bound: Bounds); -``` - -### setMapStatus - -设置地图交互操作状态,可用来关闭地图的一些交互操作,缩放、平移、旋转等。 - -```js -plot.setMapStatus(status: MapStatusOptions); -``` - -### setBgColor - -设置容器的背景色。 - -```js -plot.setBgColor(color: string); -``` - -### addZoomControl - -添加地图缩放器控件。 - -```js -plot.addZoomControl(options: ZoomControlOptions); -``` - -### removeZoomControl - -移除地图缩放器控件。 - -```js -plot.removeZoomControl(); -``` - -### addScaleControl - -添加地图比例尺控件。 - -```js -plot.addScaleControl(options: ScaleControlOptions); -``` - -### removeScaleControl - -移除地图比例尺控件。 - -```js -plot.removeScaleControl(); -``` - -### addLayerMenuControl - -添加地图图层列表控件。 - -```js -plot.addLayerMenuControl(options: LayerMenuControlOptions); -``` - -### removeLayerMenuControl - -移除地图图层列表控件。 - -```js -plot.removeLayerMenuControl(); -``` - -### addLegendControl - -添加图例控件。 - -```js -plot.addLegendControl(options: LegendOptions); -``` - -### removeLegendControl - -移除图例控件。 - -```js -plot.removeLegendControl(); -``` - -### exportPng - -导出地图,目前仅支持导出可视化层,不支持底图导出。 - -```js -plot.exportPng(type?: 'png' | 'jpg'): string; -``` - -### addToScene - -添加到容器,用于 L7 Scene 与图表混合使用场景。 - -```js -plot.addToScene(scene: Scene); -``` - -### removeFromScene - -从容器上移除,用于 L7 Scene 与图表混合使用场景。 - -```js -plot.removeFromScene(); -``` - -### on - -绑定事件。 - -```js -plot.on(event: string, callback: (...args) => void); -``` - -### once - -绑定一次事件。 - -```js -plot.once(event: string, callback: (...args) => void); -``` - -### off - -解绑事件。 - -```js -plot.off(event: string, callback: (...args) => void); -``` - -### destroy - -```js -plot.destroy(); -``` - -## 四、事件 - -### 事件监听 - -#### 绑定事件 - -```js -plot.on(event: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -plot.once(event: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -plot.off(event: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 地图事件 - -* 生命周期事件 - * loaded:加载完成事件。 - * scene-loaded:scene 加载完成事件。 - * destroy:销毁事件。 -* resize:地图容器大小改变事件。 -* 地图容器事件 - * mapmove:地图平移时触发事件。 - * movestart:地图平移开始时触发。 - * moveend:地图移动结束后触发,包括平移,以及中心点变化的缩放。如地图有拖拽缓动效果,则在缓动结束后触发。 - * zoomchange:地图缩放级别更改后触发。 - * zoomstart:缩放开始时触发。 - * zoomend:缩放停止时触发。 -* click:单击事件。 -* dblclick:双击事件。 -* contextmenu:右键事件。 -* 滑动事件 - * mousemove:鼠标在地图上移动时触发。 - * mousewheel:鼠标滚轮开始缩放地图时触发。 - * mouseover:鼠标移入地图容器内时触发。 - * mouseout:鼠标移出地图容器时触发。 - * mouseup:鼠标在地图上单击抬起时触发。 - * mousedown:鼠标在地图上单击按下时触发。 -* 拖动事件 - * dragstart:开始拖拽地图时触发。 - * dragging:拖拽地图过程中触发。 - * dragend:停止拖拽地图时触发。如地图有拖拽缓动效果,则在拽停止,缓动开始前触发。 - -#### 图层事件 - -详见[图层事件](/zh/docs/map-api/layers/plot-layer#四事件),使用方式如下: - -```js -plot.on('layerName:click', (...args) => void); -``` - -#### 组件事件 - -详见各组件事件,使用方式如下: - -```js -plot.on('tooltip:change', (...args) => void); -``` - -## 五、资源注册 - -### 注册图片资源 - -#### registerImage(id: string, image: IImage) - -注册单个图片。 - -params: - -* id: `string` -* image: `HTMLImageElement|File|string` - -```js -import { registerImage } from '@ant-design/charts'; - -registerImage('01', 'https://l7plot.antv.vision/xxx.svg'); -``` - -#### registerImages(images) - -注册多个图片。 - -params: - -* images: `Array` - * id: `string` - * image: `HTMLImageElement|File|string` - -```js -import { registerImages } from '@ant-design/charts'; - -const images = [{ id: '01', image: 'https://l7plot.antv.vision/xxx.svg' }]; -registerImages(images); -``` - -### 注册字体资源 - -#### registerFontFace(fontFamily: string, fontPath: string) - -注册字体。 - -params: - -* fontFamily: `string` -* fontPath: `string` - -```js -import { registerFontFace } from '@ant-design/charts'; - -registerFontFace('iconfont', 'https://l7plot.antv.vision/xxx.woff2'); -``` - -### 注册 iconfont 映射 - -#### registerIconFont(name: string, fontUnicode: string) - -注册单个 iconfont 映射。 - -params: - -* name: `string` -* fontUnicode: `string` - -```js -import { registerIconFont } from '@ant-design/charts'; - -registerIconFont('icon1', ''); -``` - -#### registerIconFonts(iconFonts) - -注册多个 iconfont 映射。 - -params: - -* iconFonts - * name: `string` - * fontUnicode: `string` - -```js -import { registerIconFonts } from '@ant-design/charts'; - -const iconFonts = [{ name: 'icon1', fontUnicode: '' }]; -registerIconFonts(iconFonts); -``` diff --git a/site/docs/map-api/plots/area.en.md b/site/docs/map-api/plots/area.en.md deleted file mode 100644 index 192a925cd..000000000 --- a/site/docs/map-api/plots/area.en.md +++ /dev/null @@ -1,328 +0,0 @@ ---- -title: Area -order: 8 ---- - ---- -title: 区域图 - Area -order: 8 ---- - -`Area` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`AreaOptions` required - -区域图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`AreaLayerStyle` optional - -区域样式,AreaLayerStyle 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------------- | ------------------------------------ | ------------------ | ----------- | -------- | -| opacity | 填充透明度 | `number` | `1` | optional | -| fillBottomColor | 填充兜底颜色,用于颜色值映值不存在时 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | -| lineType | 描边线类型,支持实线与虚线 | `‘solid’|'dash'` | `‘solid’` | optional | -| lineDash | 描边的虚线间隔 | `[number, number]` | | optional | - -> lineDash: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - lineWidth: 2, - } -} -``` - - -### `options.`enabledMultiSelect - -`boolean` optional default: `false` - -是否启用多选。 - -### `options.`state - -`object` optional - -区域交互反馈效果。 - -```js -{ - state: { - active: { - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - }, - select: false, - } -} -``` - -#### `state.`active - -`boolean|AreaLayerActiveOptions` optional default: `false` - -AreaLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fill | 填充颜色 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fill: false, - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - -#### `state.`select - -`boolean|AreaLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fill: 'red', - stroke: false, - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### areaLayer - -`AreaLayer` - -填充面图层实例。 - -### labelLayer - -`undefined|TextLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* areaLayer -* labelLayer - -```js -areaMap.on('areaLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/area.zh.md b/site/docs/map-api/plots/area.zh.md deleted file mode 100644 index d83e33491..000000000 --- a/site/docs/map-api/plots/area.zh.md +++ /dev/null @@ -1,323 +0,0 @@ ---- -title: 区域图 - Area -order: 8 ---- - -`Area` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`AreaOptions` required - -区域图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`AreaLayerStyle` optional - -区域样式,AreaLayerStyle 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------------- | ------------------------------------ | ------------------ | ----------- | -------- | -| opacity | 填充透明度 | `number` | `1` | optional | -| fillBottomColor | 填充兜底颜色,用于颜色值映值不存在时 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | -| lineType | 描边线类型,支持实线与虚线 | `‘solid’|'dash'` | `‘solid’` | optional | -| lineDash | 描边的虚线间隔 | `[number, number]` | | optional | - -> lineDash: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - lineWidth: 2, - } -} -``` - - -### `options.`enabledMultiSelect - -`boolean` optional default: `false` - -是否启用多选。 - -### `options.`state - -`object` optional - -区域交互反馈效果。 - -```js -{ - state: { - active: { - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - }, - select: false, - } -} -``` - -#### `state.`active - -`boolean|AreaLayerActiveOptions` optional default: `false` - -AreaLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fill | 填充颜色 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fill: false, - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - -#### `state.`select - -`boolean|AreaLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fill: 'red', - stroke: false, - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### areaLayer - -`AreaLayer` - -填充面图层实例。 - -### labelLayer - -`undefined|TextLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* areaLayer -* labelLayer - -```js -areaMap.on('areaLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/choropleth.en.md b/site/docs/map-api/plots/choropleth.en.md deleted file mode 100644 index b188f47e0..000000000 --- a/site/docs/map-api/plots/choropleth.en.md +++ /dev/null @@ -1,522 +0,0 @@ ---- -title: Choropleth -order: 9 ---- - ---- -title: 行政区域图 - Choropleth -order: 9 ---- - -`Choropleth` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`ChoroplethOptions` required - -行政区域分布图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`geoArea - -`string|GeoArea` required - -行政地理数据地址,geoArea 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---- | -------- | ----------------------- | ------------ | -------- | -| url | 数据地址 | `string` | | required | -| type | 数据类型 | `'geojson'|'topojson'` | `'topojson'` | required | - -行政地理数据地址默认值为 `Choropleth.GeoAreaUrl`, 不定时以更新其中版本号方式更新数据,如需内网部署或自定义数据可下载 [choropleth data](https://www.jsdelivr.com/package/npm/static-geo-atlas?path=geo-data%2Fchoropleth-data)。 - -```js -{ - geoArea: { - url: 'https://gw.alipayobjects.com/os/alisis/geo-data-v0.1.2/choropleth-data', - type: 'topojson', - }, -} -``` - -### `options.`source - -`ChoroplethSourceOptions` required - -行政地理数据地址,source 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | -------------- | -------- | ------ | -------- | -| data | 业务数据 | `Array` | | required | -| joinBy | 地理元数据关联 | `JoinBy` | | required | - -地理元数据关联,joinBy 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------------------------------ | ------------------- | ---------- | -------- | -| sourceField | 业务元数据地理字段 | `string` | | required | -| geoField | 地理数据字段 | `'adcode'|'name'` | `'adcode'` | optional | -| geoData | 地理数据,设置则覆盖当前层级的行政地址数据 | `FeatureCollection` | | optional | - -业务数据与地理数据关联主要有以下两种方式。行政名称与编码映射关系详见[行政名称表格](https://www.yuque.com/antv/l7/wrxc8h#yyIb)与[行政名称数据](https://cdn.jsdelivr.net/npm/static-geo-atlas@0.0.2/geo-data/administrative-data/area-list.json)。 - -1. 根据行政编码匹配渲染 - -```js -{ - source: { - data: [{ cityName: '上海市', code: 310000, value: 200 }], - joinBy: { - sourceField: 'code', - geoField: 'adcode', - }, - }, -} -``` - -2. 根据行政名称匹配渲染 - -```js -{ - source: { - data: [{ cityName: '上海市', code: 310000, value: 200 }], - joinBy: { - sourceField: 'cityName', - geoField: 'name', - }, - }, -} -``` - -### `options.`viewLevel - -`ViewLevel` required - -行政级别及范围配置,ViewLevel 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------ | ---------------------------------------------------- | ------------------------- | -------- | -| level | 行政级别 | `'world'|'country'|'province'|'city'|'district'` | | required | -| adcode | 行政代码/行政名称 | `number|string` | | required | -| granularity | 化行政级别下的粒度 | `'country'|'province'|'city'|'district'` | 默认取值 level 下一个级别 | optional | - -```js -{ - viewLevel: { - level: 'country', - adcode: '100000', - granularity: 'province', - } -} -``` - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`AreaLayerStyle` optional - -区域样式,AreaLayerStyle 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------------- | ------------------------------------ | ------------------ | ----------- | -------- | -| opacity | 填充透明度 | `number` | `1` | optional | -| fillBottomColor | 填充兜底颜色,用于颜色值映值不存在时 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | -| lineType | 描边线类型,支持实线与虚线 | `‘solid’|'dash'` | `‘solid’` | optional | -| lineDash | 描边的虚线间隔 | `[number, number]` | | optional | - -> lineDash: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - lineWidth: 2, - } -} -``` - - -### `options.`state - -`object` optional - -区域交互反馈效果。 - -```js -{ - state: { - active: { - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - }, - select: false, - } -} -``` - -#### `state.`active - -`boolean|AreaLayerActiveOptions` optional default: `false` - -AreaLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fill | 填充颜色 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fill: false, - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - -#### `state.`select - -`boolean|AreaLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fill: 'red', - stroke: false, - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - - -### `options.`chinaBorder - -`boolean|ChinaBoundaryStyle` optional default: `ture` - -是否显示中国国界线,国界线样式 ChinaBoundaryStyle 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ---- | ------------------------ | ---------------------------------------------------------------- | -------- | -| national | 国界 | `LinesLayerStyleOptions` | `{ color: 'red', width: 1, opacity: 1 }` | optional | -| dispute | 争议 | `LinesLayerStyleOptions` | `{ color: 'red', width: 1, opacity: 1, dashArray: [2, 4] }` | optional | -| coast | 海洋 | `LinesLayerStyleOptions` | `{ color: 'blue', width: 0.7, opacity: 0.8 }` | optional | -| hkm | 港澳 | `LinesLayerStyleOptions` | `{ color: 'gray', width: 0.7, opacity: 0.8, dashArray: [2, 4] }` | optional | - -### `options.`drill - -`Drill` optional - -开启数据钻取功能,Drill 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------ | --------- | -------- | -| enabled | 是否启用钻取功能 | `boolean` | `ture` | optional | -| steps | 钻取维度顺序 | `DrillStep[]|DrillStep['level'][]` | | required | -| triggerUp | 上卷钻取的触发事件 | `'unclick'|'undblclick'|'uncontextmenu'` | `unclick` | optional | -| triggerDown | 下钻钻取的触发事件 | `'click'|'dblclick'|'contextmenu'` | `click` | optional | -| onUp | 上卷事件回调 | `(from: ViewLevel, to: ViewLevel, callback: (config?: DrillStepConfig) => void) => void` | | optional | -| onDown | 上卷事件回调 | `(from: ViewLevel, to: ViewLevel & { properties: Record }, callback: (config?: DrillStepConfig) => void) => void` | | optional | - -钻取维度 DrillStep 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | -------------------------------- | ------------------------------------------- | ------------------------- | -------- | -| level | 初始化行政级别 | `'country'|'province'|'city'|'district'` | | required | -| granularity | 化行政级别下的粒度 | `'province'|'city'|'district'` | 默认取值 level 下一个级别 | optional | -| source | 当前行政级别下的数据 | `ChoroplethSourceOptions` | 默认取上一个级别的配置 | optional | -| color | 当前行政级别下的颜色映射 | `string|object|Function` | 默认取上一个级别的配置 | optional | -| style | 当前行政级别下的区域样式 | `object` | 默认取上一个级别的配置 | optional | -| state | 当前行政级别下的区域交互反馈效果 | `object` | 默认取上一个级别的配置 | optional | -| label | 当前行政级别下的数据标签 | `'province'|'city'|'district'` | 默认取上一个级别的配置 | optional | -| tooltip | 当前行政级别下的悬浮提示 | `'province'|'city'|'district'` | 默认取上一个级别的配置 | optional | - -DrillStepConfig 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------- | -------------------------------- | -------------------------------- | ------ | -------- | -| source | 当前行政级别下的数据 | `ChoroplethSourceOptions` | | optional | -| color | 当前行政级别下的颜色映射 | `string|object|Function` | | optional | -| style | 当前行政级别下的区域样式 | `object` | | optional | -| state | 当前行政级别下的区域交互反馈效果 | `object` | | optional | -| label | 当前行政级别下的数据标签 | `'province'|'city'|'district'` | | optional | -| tooltip | 当前行政级别下的悬浮提示 | `'province'|'city'|'district'` | | optional | - -下钻事件回调: - -> 适用于异步请求下钻数据 - -```js -{ - drill: { - steps: ['province', 'city', 'district'], - onDown: (from, to, callback) => { - const { level, adcode, granularity } = to - callback({ source: { data: [], joinBy: { sourceField: 'code' } } }) - }, - onUp: (from, to, callback) => { - callback() - }, - }, -} -``` - -下钻事件回调拦截: - -> 适用于下钻数据权限判断 - -```js -{ - drill: { - steps: ['province', 'city', 'district'], - onDown: (from, to, callback) => { - if (to.adcode !== 330000) { - callback(); - } - }, - onUp: (from, to, callback) => { - callback(); - }, - }, -} -``` - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -### `options.`customFetchGeoData - -`(params: CustomFetchGeoDataParams) => Promise` optional - -自定义获取 geo 数据方法。 - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### fillAreaLayer - -`AreaLayer` - -填充面图层实例。 - -### labelLayer - -`undefined|TextLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -### changeView - -更新显示区域,未开启[钻取功能](/zh/docs/map-api/plots/choropleth#`options.`drill)时,方法控制地图显示区域。 - -```js -plot.changeView(view: ViewLevel, config?: DrillStepConfig); -``` - -### drillDown - -向下钻取方法,配合开启[钻取功能](/zh/docs/map-api/plots/choropleth#`options.`drill)时,方法控制地图下钻。 - -```js -plot.drillDown(view: ViewLevel, config?: DrillStepConfig); -``` - -### drillUp - -向上钻取方法,配合开启[钻取功能](/zh/docs/map-api/plots/choropleth#`options.`drill)时,方法控制地图上钻。上钻行政级别 `level` 可选,默认上钻到当前行政级别的上一层,也可以回到某一行政级别或最高层级别。 - -```js -plot.drillUp(config?: DrillStepConfig, level?: `'world'|'country'|'province'|'city'`); -``` - -### getCurrentDrillSteps - -获取当前已钻取层级数据,配合开启[钻取功能](/zh/docs/map-api/plots/choropleth#`options.`drill)时使用。 - -```js -plot.getCurrentDrillSteps(): ViewLevel[]; -``` - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -### 图层事件 - -内置图层名称分别为: - -* fillAreaLayer -* labelLayer - -```js -choropleth.on('fillAreaLayer:click', (e: MouseEvent) => void); -``` - -### 钻取事件 - -#### 下钻 - -下钻完成后触发。 - -```js -choropleth.on('drilldown', (downParams: { from: ViewLevel, to: ViewLevel & { properties: Record }) => void); -``` - -#### 上卷 - -上卷完成后触发。 - -```js -choropleth.on('drillup', (upParams: { from: ViewLevel, to: ViewLevel }) => void); -``` diff --git a/site/docs/map-api/plots/choropleth.zh.md b/site/docs/map-api/plots/choropleth.zh.md deleted file mode 100644 index 58770fe06..000000000 --- a/site/docs/map-api/plots/choropleth.zh.md +++ /dev/null @@ -1,517 +0,0 @@ ---- -title: 行政区域图 - Choropleth -order: 9 ---- - -`Choropleth` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`ChoroplethOptions` required - -行政区域分布图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`geoArea - -`string|GeoArea` required - -行政地理数据地址,geoArea 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---- | -------- | ----------------------- | ------------ | -------- | -| url | 数据地址 | `string` | | required | -| type | 数据类型 | `'geojson'|'topojson'` | `'topojson'` | required | - -行政地理数据地址默认值为 `Choropleth.GeoAreaUrl`, 不定时以更新其中版本号方式更新数据,如需内网部署或自定义数据可下载 [choropleth data](https://www.jsdelivr.com/package/npm/static-geo-atlas?path=geo-data%2Fchoropleth-data)。 - -```js -{ - geoArea: { - url: 'https://gw.alipayobjects.com/os/alisis/geo-data-v0.1.2/choropleth-data', - type: 'topojson', - }, -} -``` - -### `options.`source - -`ChoroplethSourceOptions` required - -行政地理数据地址,source 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | -------------- | -------- | ------ | -------- | -| data | 业务数据 | `Array` | | required | -| joinBy | 地理元数据关联 | `JoinBy` | | required | - -地理元数据关联,joinBy 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------------------------------ | ------------------- | ---------- | -------- | -| sourceField | 业务元数据地理字段 | `string` | | required | -| geoField | 地理数据字段 | `'adcode'|'name'` | `'adcode'` | optional | -| geoData | 地理数据,设置则覆盖当前层级的行政地址数据 | `FeatureCollection` | | optional | - -业务数据与地理数据关联主要有以下两种方式。行政名称与编码映射关系详见[行政名称表格](https://www.yuque.com/antv/l7/wrxc8h#yyIb)与[行政名称数据](https://cdn.jsdelivr.net/npm/static-geo-atlas@0.0.2/geo-data/administrative-data/area-list.json)。 - -1. 根据行政编码匹配渲染 - -```js -{ - source: { - data: [{ cityName: '上海市', code: 310000, value: 200 }], - joinBy: { - sourceField: 'code', - geoField: 'adcode', - }, - }, -} -``` - -2. 根据行政名称匹配渲染 - -```js -{ - source: { - data: [{ cityName: '上海市', code: 310000, value: 200 }], - joinBy: { - sourceField: 'cityName', - geoField: 'name', - }, - }, -} -``` - -### `options.`viewLevel - -`ViewLevel` required - -行政级别及范围配置,ViewLevel 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------ | ---------------------------------------------------- | ------------------------- | -------- | -| level | 行政级别 | `'world'|'country'|'province'|'city'|'district'` | | required | -| adcode | 行政代码/行政名称 | `number|string` | | required | -| granularity | 化行政级别下的粒度 | `'country'|'province'|'city'|'district'` | 默认取值 level 下一个级别 | optional | - -```js -{ - viewLevel: { - level: 'country', - adcode: '100000', - granularity: 'province', - } -} -``` - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`AreaLayerStyle` optional - -区域样式,AreaLayerStyle 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------------- | ------------------------------------ | ------------------ | ----------- | -------- | -| opacity | 填充透明度 | `number` | `1` | optional | -| fillBottomColor | 填充兜底颜色,用于颜色值映值不存在时 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | -| lineType | 描边线类型,支持实线与虚线 | `‘solid’|'dash'` | `‘solid’` | optional | -| lineDash | 描边的虚线间隔 | `[number, number]` | | optional | - -> lineDash: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - lineWidth: 2, - } -} -``` - - -### `options.`state - -`object` optional - -区域交互反馈效果。 - -```js -{ - state: { - active: { - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - }, - select: false, - } -} -``` - -#### `state.`active - -`boolean|AreaLayerActiveOptions` optional default: `false` - -AreaLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fill | 填充颜色 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fill: false, - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - -#### `state.`select - -`boolean|AreaLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fill: 'red', - stroke: false, - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - - -### `options.`chinaBorder - -`boolean|ChinaBoundaryStyle` optional default: `ture` - -是否显示中国国界线,国界线样式 ChinaBoundaryStyle 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ---- | ------------------------ | ---------------------------------------------------------------- | -------- | -| national | 国界 | `LinesLayerStyleOptions` | `{ color: 'red', width: 1, opacity: 1 }` | optional | -| dispute | 争议 | `LinesLayerStyleOptions` | `{ color: 'red', width: 1, opacity: 1, dashArray: [2, 4] }` | optional | -| coast | 海洋 | `LinesLayerStyleOptions` | `{ color: 'blue', width: 0.7, opacity: 0.8 }` | optional | -| hkm | 港澳 | `LinesLayerStyleOptions` | `{ color: 'gray', width: 0.7, opacity: 0.8, dashArray: [2, 4] }` | optional | - -### `options.`drill - -`Drill` optional - -开启数据钻取功能,Drill 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------ | --------- | -------- | -| enabled | 是否启用钻取功能 | `boolean` | `ture` | optional | -| steps | 钻取维度顺序 | `DrillStep[]|DrillStep['level'][]` | | required | -| triggerUp | 上卷钻取的触发事件 | `'unclick'|'undblclick'|'uncontextmenu'` | `unclick` | optional | -| triggerDown | 下钻钻取的触发事件 | `'click'|'dblclick'|'contextmenu'` | `click` | optional | -| onUp | 上卷事件回调 | `(from: ViewLevel, to: ViewLevel, callback: (config?: DrillStepConfig) => void) => void` | | optional | -| onDown | 上卷事件回调 | `(from: ViewLevel, to: ViewLevel & { properties: Record }, callback: (config?: DrillStepConfig) => void) => void` | | optional | - -钻取维度 DrillStep 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | -------------------------------- | ------------------------------------------- | ------------------------- | -------- | -| level | 初始化行政级别 | `'country'|'province'|'city'|'district'` | | required | -| granularity | 化行政级别下的粒度 | `'province'|'city'|'district'` | 默认取值 level 下一个级别 | optional | -| source | 当前行政级别下的数据 | `ChoroplethSourceOptions` | 默认取上一个级别的配置 | optional | -| color | 当前行政级别下的颜色映射 | `string|object|Function` | 默认取上一个级别的配置 | optional | -| style | 当前行政级别下的区域样式 | `object` | 默认取上一个级别的配置 | optional | -| state | 当前行政级别下的区域交互反馈效果 | `object` | 默认取上一个级别的配置 | optional | -| label | 当前行政级别下的数据标签 | `'province'|'city'|'district'` | 默认取上一个级别的配置 | optional | -| tooltip | 当前行政级别下的悬浮提示 | `'province'|'city'|'district'` | 默认取上一个级别的配置 | optional | - -DrillStepConfig 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------- | -------------------------------- | -------------------------------- | ------ | -------- | -| source | 当前行政级别下的数据 | `ChoroplethSourceOptions` | | optional | -| color | 当前行政级别下的颜色映射 | `string|object|Function` | | optional | -| style | 当前行政级别下的区域样式 | `object` | | optional | -| state | 当前行政级别下的区域交互反馈效果 | `object` | | optional | -| label | 当前行政级别下的数据标签 | `'province'|'city'|'district'` | | optional | -| tooltip | 当前行政级别下的悬浮提示 | `'province'|'city'|'district'` | | optional | - -下钻事件回调: - -> 适用于异步请求下钻数据 - -```js -{ - drill: { - steps: ['province', 'city', 'district'], - onDown: (from, to, callback) => { - const { level, adcode, granularity } = to - callback({ source: { data: [], joinBy: { sourceField: 'code' } } }) - }, - onUp: (from, to, callback) => { - callback() - }, - }, -} -``` - -下钻事件回调拦截: - -> 适用于下钻数据权限判断 - -```js -{ - drill: { - steps: ['province', 'city', 'district'], - onDown: (from, to, callback) => { - if (to.adcode !== 330000) { - callback(); - } - }, - onUp: (from, to, callback) => { - callback(); - }, - }, -} -``` - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -### `options.`customFetchGeoData - -`(params: CustomFetchGeoDataParams) => Promise` optional - -自定义获取 geo 数据方法。 - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### fillAreaLayer - -`AreaLayer` - -填充面图层实例。 - -### labelLayer - -`undefined|TextLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -### changeView - -更新显示区域,未开启[钻取功能](/zh/docs/map-api/plots/choropleth#`options.`drill)时,方法控制地图显示区域。 - -```js -plot.changeView(view: ViewLevel, config?: DrillStepConfig); -``` - -### drillDown - -向下钻取方法,配合开启[钻取功能](/zh/docs/map-api/plots/choropleth#`options.`drill)时,方法控制地图下钻。 - -```js -plot.drillDown(view: ViewLevel, config?: DrillStepConfig); -``` - -### drillUp - -向上钻取方法,配合开启[钻取功能](/zh/docs/map-api/plots/choropleth#`options.`drill)时,方法控制地图上钻。上钻行政级别 `level` 可选,默认上钻到当前行政级别的上一层,也可以回到某一行政级别或最高层级别。 - -```js -plot.drillUp(config?: DrillStepConfig, level?: `'world'|'country'|'province'|'city'`); -``` - -### getCurrentDrillSteps - -获取当前已钻取层级数据,配合开启[钻取功能](/zh/docs/map-api/plots/choropleth#`options.`drill)时使用。 - -```js -plot.getCurrentDrillSteps(): ViewLevel[]; -``` - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -### 图层事件 - -内置图层名称分别为: - -* fillAreaLayer -* labelLayer - -```js -choropleth.on('fillAreaLayer:click', (e: MouseEvent) => void); -``` - -### 钻取事件 - -#### 下钻 - -下钻完成后触发。 - -```js -choropleth.on('drilldown', (downParams: { from: ViewLevel, to: ViewLevel & { properties: Record }) => void); -``` - -#### 上卷 - -上卷完成后触发。 - -```js -choropleth.on('drillup', (upParams: { from: ViewLevel, to: ViewLevel }) => void); -``` diff --git a/site/docs/map-api/plots/dot.en.md b/site/docs/map-api/plots/dot.en.md deleted file mode 100644 index 0e123d75d..000000000 --- a/site/docs/map-api/plots/dot.en.md +++ /dev/null @@ -1,455 +0,0 @@ ---- -title: Dot -order: 0 ---- - ---- -title: 散点图 - Dot -order: 0 ---- - -`Dot` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`DotOptions` required - -点地图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string|Function|object` optional default: `'circle'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 - * pentagon: 五角星 - * octogon: 八边形 - * hexagram: 六边形 - * rhombus: 菱形 - * vesica: 椭圆形 - * dot: 圆点 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'circle', } -``` - -除内置图标外,还可**自定义图标**: - -1. 注册图标 - -```js -const images = [ - { id: '01', image: 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg' }, - { id: '02', image: 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg' }, - { id: '03', image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg' }, -]; -registerImages(images); -``` - -2. 使用注册图标 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: '01', n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: '01', -} -``` - -#### `shape.`field - -`string` optional - -元素形状值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 'circle', t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: { field: 's', } -} -``` - -#### `shape.`value - -`string|string[]|Function` optional - -元素形状值映射值。 - -```js -{ - shape: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'triangle': 'circle' - } - } -} -``` - -#### `shape.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - shape: { - field: 't', - value: ['circle', 'triangle'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 12, t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | ------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| speed | 水波速度 | `number` | | optional | -| rings | 水波环数 | `number` | | optional | - -```js -{ - animate: true, -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### dotLayer - -`DotLayer` - -点图层实例。 - -### labelLayer - -`undefined|TextLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* dotLayer -* labelLayer - -```js -dotMap.on('dotLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/dot.zh.md b/site/docs/map-api/plots/dot.zh.md deleted file mode 100644 index 093aa3ad6..000000000 --- a/site/docs/map-api/plots/dot.zh.md +++ /dev/null @@ -1,450 +0,0 @@ ---- -title: 散点图 - Dot -order: 0 ---- - -`Dot` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`DotOptions` required - -点地图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string|Function|object` optional default: `'circle'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 - * pentagon: 五角星 - * octogon: 八边形 - * hexagram: 六边形 - * rhombus: 菱形 - * vesica: 椭圆形 - * dot: 圆点 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'circle', } -``` - -除内置图标外,还可**自定义图标**: - -1. 注册图标 - -```js -const images = [ - { id: '01', image: 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg' }, - { id: '02', image: 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg' }, - { id: '03', image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg' }, -]; -registerImages(images); -``` - -2. 使用注册图标 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: '01', n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: '01', -} -``` - -#### `shape.`field - -`string` optional - -元素形状值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 'circle', t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: { field: 's', } -} -``` - -#### `shape.`value - -`string|string[]|Function` optional - -元素形状值映射值。 - -```js -{ - shape: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'triangle': 'circle' - } - } -} -``` - -#### `shape.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - shape: { - field: 't', - value: ['circle', 'triangle'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 12, t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` - - -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | ------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| speed | 水波速度 | `number` | | optional | -| rings | 水波环数 | `number` | | optional | - -```js -{ - animate: true, -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### dotLayer - -`DotLayer` - -点图层实例。 - -### labelLayer - -`undefined|TextLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* dotLayer -* labelLayer - -```js -dotMap.on('dotLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/flow.en.md b/site/docs/map-api/plots/flow.en.md deleted file mode 100644 index 508207612..000000000 --- a/site/docs/map-api/plots/flow.en.md +++ /dev/null @@ -1,357 +0,0 @@ ---- -title: Flow -order: 7 ---- - ---- -title: 流向图 - Flow -order: 7 ---- - -`Flow` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`FlowOptions` required - -连接图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ startX: 58.00, startY: 32.84, endX: 85.7, endY: 25.161, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'startX', y: 'startY', x: 'endX', y: 'endY', } - } -} -``` - -### `options.`shape - -`string` optional default: `'arc'` - -支持 2D 与 3D 弧线及大圆航线: - -* arc -* arc3d -* greatcircle - -```js -{ shape: 'arc', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ startX: 58.00, startY: 32.84, endX: 85.7, endY: 25.161, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'startX', y: 'startY', x: 'endX', y: 'endY', } - }, - size: { field: 't', } -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`LinesLayerStyleOptions` optional - -元素样式,LinesLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | -| sourceColor | 渐变起点颜色 | `string` | | optional | -| targetColor | 渐变终点颜色 | `string` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` - - -### `options.`radiation - -`object` optional - -落地点辐射圈。 - -```js -{ - radiation: { - color: 'yellow', - size: 20, - } -} -``` - -#### `radiation.`enabled - -`boolean` optional `true` - -是否开启辐射圈。 - -#### `radiation.`color - -`string` optional - -辐射圈颜色。 - -#### `radiation.`size - -`number|object|Function` optional default: `20` - -辐射圈大小。 - -#### `radiation.`animate - -`boolean` optional `true` - -是否启用辐射圈动画。 - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| interval | 轨迹间隔, 取值区间 0 - 1 | `number` | | optional | -| duration | 动画时间,单位秒 | `number` | | optional | -| trailLength | 轨迹长度 取值区间 0 - 1 | `number` | | optional | - -```js -{ - animate: { - duration: 4, - interval: 0.2, - trailLength: 0.1, - } -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### flowLayer - -`ArcLayer` - -弧线图层实例。 - -### labelLayer - -`undefined|TextLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* flowLayer -* labelLayer - -```js -pathMap.on('flowLayer:mousemove', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/flow.zh.md b/site/docs/map-api/plots/flow.zh.md deleted file mode 100644 index e8aa3126d..000000000 --- a/site/docs/map-api/plots/flow.zh.md +++ /dev/null @@ -1,352 +0,0 @@ ---- -title: 流向图 - Flow -order: 7 ---- - -`Flow` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`FlowOptions` required - -连接图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ startX: 58.00, startY: 32.84, endX: 85.7, endY: 25.161, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'startX', y: 'startY', x: 'endX', y: 'endY', } - } -} -``` - -### `options.`shape - -`string` optional default: `'arc'` - -支持 2D 与 3D 弧线及大圆航线: - -* arc -* arc3d -* greatcircle - -```js -{ shape: 'arc', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ startX: 58.00, startY: 32.84, endX: 85.7, endY: 25.161, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'startX', y: 'startY', x: 'endX', y: 'endY', } - }, - size: { field: 't', } -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`style - -`LinesLayerStyleOptions` optional - -元素样式,LinesLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | -| sourceColor | 渐变起点颜色 | `string` | | optional | -| targetColor | 渐变终点颜色 | `string` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` - - -### `options.`radiation - -`object` optional - -落地点辐射圈。 - -```js -{ - radiation: { - color: 'yellow', - size: 20, - } -} -``` - -#### `radiation.`enabled - -`boolean` optional `true` - -是否开启辐射圈。 - -#### `radiation.`color - -`string` optional - -辐射圈颜色。 - -#### `radiation.`size - -`number|object|Function` optional default: `20` - -辐射圈大小。 - -#### `radiation.`animate - -`boolean` optional `true` - -是否启用辐射圈动画。 - - -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| interval | 轨迹间隔, 取值区间 0 - 1 | `number` | | optional | -| duration | 动画时间,单位秒 | `number` | | optional | -| trailLength | 轨迹长度 取值区间 0 - 1 | `number` | | optional | - -```js -{ - animate: { - duration: 4, - interval: 0.2, - trailLength: 0.1, - } -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### flowLayer - -`ArcLayer` - -弧线图层实例。 - -### labelLayer - -`undefined|TextLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* flowLayer -* labelLayer - -```js -pathMap.on('flowLayer:mousemove', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/grid.en.md b/site/docs/map-api/plots/grid.en.md deleted file mode 100644 index 26b8786fa..000000000 --- a/site/docs/map-api/plots/grid.en.md +++ /dev/null @@ -1,287 +0,0 @@ ---- -title: Grid -order: 4 ---- - ---- -title: 网格聚合图 - Grid -order: 4 ---- - -`GridMap` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`GridMapOptions` required - -蜂窝地图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置。 - -#### `source.`aggregation - -`GridAggregation` required - -数据网格聚合配置,GridAggregation 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | -------- | -------------------------------------- | ------- | -------- | -| field | 聚合字段 | `string` | | required | -| radius | 网格半径 | `number` | `15000` | optional | -| method | 聚合类型 | `'count'|'max'|'min'|'sum'|'mean'` | `'sum'` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - aggregation: { field: 't', radius: 15000, type: 'sum' } - } -} -``` - -其它配置详见 [Source](/zh/docs/map-api/source)。 - - -### `options.`shape - -`string` optional default: `'square'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'square', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional - -元素大小。 - -**shape 为 2D 时,size 无需设置;shape 为 3D 时,size 表示高度。** - -```js -{ - size: { - field: 'value', - value: ({ value }) => value * 2 - } -} -``` - -#### `size.`field - -`string` required - -网格大小映射字段。 - -#### `size.`value - -`number|number[]|Function` optional - -网格大小值映射值。 - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -### `options.`style - -`GridHeatmapLayerStyleOptions` optional - -元素样式, GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### gridLayer - -`GridLayer` - -网格图层实例。 - -### labelLayer - -`undefined|GridLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* gridLayer -* labelLayer - -```js -gridMap.on('gridLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/grid.zh.md b/site/docs/map-api/plots/grid.zh.md deleted file mode 100644 index bcce0aae2..000000000 --- a/site/docs/map-api/plots/grid.zh.md +++ /dev/null @@ -1,282 +0,0 @@ ---- -title: 网格聚合图 - Grid -order: 4 ---- - -`GridMap` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`GridMapOptions` required - -蜂窝地图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置。 - -#### `source.`aggregation - -`GridAggregation` required - -数据网格聚合配置,GridAggregation 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | -------- | -------------------------------------- | ------- | -------- | -| field | 聚合字段 | `string` | | required | -| radius | 网格半径 | `number` | `15000` | optional | -| method | 聚合类型 | `'count'|'max'|'min'|'sum'|'mean'` | `'sum'` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - aggregation: { field: 't', radius: 15000, type: 'sum' } - } -} -``` - -其它配置详见 [Source](/zh/docs/map-api/source)。 - - -### `options.`shape - -`string` optional default: `'square'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'square', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional - -元素大小。 - -**shape 为 2D 时,size 无需设置;shape 为 3D 时,size 表示高度。** - -```js -{ - size: { - field: 'value', - value: ({ value }) => value * 2 - } -} -``` - -#### `size.`field - -`string` required - -网格大小映射字段。 - -#### `size.`value - -`number|number[]|Function` optional - -网格大小值映射值。 - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -### `options.`style - -`GridHeatmapLayerStyleOptions` optional - -元素样式, GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### gridLayer - -`GridLayer` - -网格图层实例。 - -### labelLayer - -`undefined|GridLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* gridLayer -* labelLayer - -```js -gridMap.on('gridLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/heatmap.en.md b/site/docs/map-api/plots/heatmap.en.md deleted file mode 100644 index 8ad2453d7..000000000 --- a/site/docs/map-api/plots/heatmap.en.md +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Heatmap -order: 3 ---- - ---- -title: 热力图 - Heatmap -order: 3 ---- - -`Heatmap` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`HeatmapOptions` required - -热力地图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string` optional default: `'heatmap'` - -热力模式支持 2D 与 3D 热力: - -* heatmap -* heatmap3D - -```js -{ shape: 'heatmap', } -``` - - -### `options.`size - -`SizeAttr` required - -热力大小配置,SizeAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----- | -------------------- | -------------------- | -------- | -------- | -| field | 热力大小映射字段 | `string` | | required | -| value | 热力大小数据映射区间 | `number[]|Function` | `[0, 1]` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { - field: 't', - value: [0, 1], - }, -} -``` - - -### `options.`style - -`HeatmapLayerStyleOptions` optional - -热力样式,HeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------- | ------------------ | ----------- | ------ | -------- | -| intensity | 全局热力权重 | `number` | `3` | optional | -| radius | 热力半径,单位像素 | `number` | `20` | optional | -| opacity | 透明度 | `number` | `1` | optional | -| colorsRamp | 热力色带 | `ColorRamp` | | optional | - -热力色带,ColorRamp 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ---------- | -------- | ------ | -------- | -| color | 颜色 | `string` | | required | -| position | 热力映射值 | `number` | | required | - -```js -{ - style: { - intensity: 3, - radius: 20, - opacity: 1, - colorsRamp: [ - { color: 'rgba(33,102,172,0.0)', position: 0 }, - { color: 'rgb(103,169,207)', position: 0.2 }, - { color: 'rgb(209,229,240)', position: 0.4 }, - { color: 'rgb(253,219,199)', position: 0.6 }, - { color: 'rgb(239,138,98)', position: 0.8 }, - { color: 'rgb(178,24,43,1.0)', position: 1 }, - ], - } -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### heatmapLayer - -`HeatmapLayer` - -热力图层实例。 - -### labelLayer - -`undefined|TextLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* heatmapLayer -* labelLayer - -```js -heatmap.on('heatmapLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/heatmap.zh.md b/site/docs/map-api/plots/heatmap.zh.md deleted file mode 100644 index 1c10b54d9..000000000 --- a/site/docs/map-api/plots/heatmap.zh.md +++ /dev/null @@ -1,189 +0,0 @@ ---- -title: 热力图 - Heatmap -order: 3 ---- - -`Heatmap` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`HeatmapOptions` required - -热力地图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` - - -### `options.`shape - -`string` optional default: `'heatmap'` - -热力模式支持 2D 与 3D 热力: - -* heatmap -* heatmap3D - -```js -{ shape: 'heatmap', } -``` - - -### `options.`size - -`SizeAttr` required - -热力大小配置,SizeAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----- | -------------------- | -------------------- | -------- | -------- | -| field | 热力大小映射字段 | `string` | | required | -| value | 热力大小数据映射区间 | `number[]|Function` | `[0, 1]` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { - field: 't', - value: [0, 1], - }, -} -``` - - -### `options.`style - -`HeatmapLayerStyleOptions` optional - -热力样式,HeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------- | ------------------ | ----------- | ------ | -------- | -| intensity | 全局热力权重 | `number` | `3` | optional | -| radius | 热力半径,单位像素 | `number` | `20` | optional | -| opacity | 透明度 | `number` | `1` | optional | -| colorsRamp | 热力色带 | `ColorRamp` | | optional | - -热力色带,ColorRamp 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ---------- | -------- | ------ | -------- | -| color | 颜色 | `string` | | required | -| position | 热力映射值 | `number` | | required | - -```js -{ - style: { - intensity: 3, - radius: 20, - opacity: 1, - colorsRamp: [ - { color: 'rgba(33,102,172,0.0)', position: 0 }, - { color: 'rgb(103,169,207)', position: 0.2 }, - { color: 'rgb(209,229,240)', position: 0.4 }, - { color: 'rgb(253,219,199)', position: 0.6 }, - { color: 'rgb(239,138,98)', position: 0.8 }, - { color: 'rgb(178,24,43,1.0)', position: 1 }, - ], - } -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### heatmapLayer - -`HeatmapLayer` - -热力图层实例。 - -### labelLayer - -`undefined|TextLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* heatmapLayer -* labelLayer - -```js -heatmap.on('heatmapLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/hexbin.en.md b/site/docs/map-api/plots/hexbin.en.md deleted file mode 100644 index 1eaec75b1..000000000 --- a/site/docs/map-api/plots/hexbin.en.md +++ /dev/null @@ -1,279 +0,0 @@ ---- -title: Hexbin -order: 5 ---- - ---- -title: 蜂窝聚合图 - Hexbin -order: 5 ---- - -`Hexbin` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`HexbinOptions` required - -蜂窝地图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置。 - -#### `source.`aggregation - -`GridAggregation` required - -数据网格聚合配置,GridAggregation 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | -------- | -------------------------------------- | ------- | -------- | -| field | 聚合字段 | `string` | | required | -| radius | 网格半径 | `number` | `15000` | optional | -| method | 聚合类型 | `'count'|'max'|'min'|'sum'|'mean'` | `'sum'` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - aggregation: { field: 't', radius: 15000, type: 'sum' } - } -} -``` - -其它配置详见 [Source](/zh/docs/map-api/source)。 - - -### `options.`shape - -`string` optional default: `'hexagon'` - -元素形状,分别支持 2D 与 3D 蜂窝: - -* hexagon: 蜂窝 -* hexagonColumn: 蜂窝柱 - -```js -{ shape: 'hexagon', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional - -元素大小。 - -**shape 为 2D 时,size 无需设置;shape 为 3D 时,size 表示高度。** - -```js -{ - size: { - field: 'value', - value: ({ value }) => value * 2 - } -} -``` - -#### `size.`field - -`string` required - -网格大小映射字段。 - -#### `size.`value - -`number|number[]|Function` optional - -网格大小值映射值。 - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -### `options.`style - -`GridHeatmapLayerStyleOptions` optional - -元素样式, GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### hexbinLayer - -`HexbinLayer` - -蜂窝图层实例。 - -### labelLayer - -`undefined|HexbinLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* hexbinLayer -* labelLayer - -```js -hexbin.on('hexbinLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/hexbin.zh.md b/site/docs/map-api/plots/hexbin.zh.md deleted file mode 100644 index 696050222..000000000 --- a/site/docs/map-api/plots/hexbin.zh.md +++ /dev/null @@ -1,274 +0,0 @@ ---- -title: 蜂窝聚合图 - Hexbin -order: 5 ---- - -`Hexbin` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`HexbinOptions` required - -蜂窝地图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置。 - -#### `source.`aggregation - -`GridAggregation` required - -数据网格聚合配置,GridAggregation 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | -------- | -------------------------------------- | ------- | -------- | -| field | 聚合字段 | `string` | | required | -| radius | 网格半径 | `number` | `15000` | optional | -| method | 聚合类型 | `'count'|'max'|'min'|'sum'|'mean'` | `'sum'` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - aggregation: { field: 't', radius: 15000, type: 'sum' } - } -} -``` - -其它配置详见 [Source](/zh/docs/map-api/source)。 - - -### `options.`shape - -`string` optional default: `'hexagon'` - -元素形状,分别支持 2D 与 3D 蜂窝: - -* hexagon: 蜂窝 -* hexagonColumn: 蜂窝柱 - -```js -{ shape: 'hexagon', } -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional - -元素大小。 - -**shape 为 2D 时,size 无需设置;shape 为 3D 时,size 表示高度。** - -```js -{ - size: { - field: 'value', - value: ({ value }) => value * 2 - } -} -``` - -#### `size.`field - -`string` required - -网格大小映射字段。 - -#### `size.`value - -`number|number[]|Function` optional - -网格大小值映射值。 - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -### `options.`style - -`GridHeatmapLayerStyleOptions` optional - -元素样式, GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` - - -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### hexbinLayer - -`HexbinLayer` - -蜂窝图层实例。 - -### labelLayer - -`undefined|HexbinLayer` - -数据标签图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* hexbinLayer -* labelLayer - -```js -hexbin.on('hexbinLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/path.en.md b/site/docs/map-api/plots/path.en.md deleted file mode 100644 index cc468c300..000000000 --- a/site/docs/map-api/plots/path.en.md +++ /dev/null @@ -1,264 +0,0 @@ ---- -title: Path -order: 6 ---- - ---- -title: 路径图 - Path -order: 6 ---- - -`Path` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`PathOptions` required - -路径图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ - path: [[58.00, 32.84],[85.7, 25.161],[101.95, 41.77],[114.96, 39.63],[117.421, 28.61]], - c: 'red', - t: 20, - n: 'chengdu' - }], - parser: { type: 'json', coordinates: 'path', } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - size: { field: 't', } -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`LinesLayerStyleOptions` optional - -元素样,LinesLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` - - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### pathLayer - -`PathLayer` - -路径图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* pathLayer - -```js -pathMap.on('pathLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/plots/path.zh.md b/site/docs/map-api/plots/path.zh.md deleted file mode 100644 index 5aaf71a8d..000000000 --- a/site/docs/map-api/plots/path.zh.md +++ /dev/null @@ -1,259 +0,0 @@ ---- -title: 路径图 - Path -order: 6 ---- - -`Path` 继承基类 [Plot](/zh/docs/map-api/plot-api)。 - -## 一、配置 - -创建地图实例: - -```ts -``` - -### container - -`string|HTMLDivElement` required - -地图渲染的 DOM 容器。 - -### options - -`PathOptions` required - -路径图的所有配置项,继承自 [Plot options](/zh/docs/map-api/plot-api#options)。 - -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ - path: [[58.00, 32.84],[85.7, 25.161],[101.95, 41.77],[114.96, 39.63],[117.421, 28.61]], - c: 'red', - t: 20, - n: 'chengdu' - }], - parser: { type: 'json', coordinates: 'path', } - } -} -``` - - -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` - - -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - size: { field: 't', } -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` - - -### `options.`style - -`LinesLayerStyleOptions` optional - -元素样,LinesLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` - - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 - -## 二、属性 - -继承 [Plot 属性](/zh/docs/map-api/plot-api#二、属性)。 - -### pathLayer - -`PathLayer` - -路径图层实例。 - -## 三、方法 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#三、方法)。 - -## 四、事件 - -继承 [Plot 方法](/zh/docs/map-api/plot-api#四、事件)。 - -内置图层名称分别为: - -* pathLayer - -```js -pathMap.on('pathLayer:click', (e: MouseEvent) => void); -``` diff --git a/site/docs/map-api/source/index.en.md b/site/docs/map-api/source/index.en.md deleted file mode 100644 index 3c839a822..000000000 --- a/site/docs/map-api/source/index.en.md +++ /dev/null @@ -1,287 +0,0 @@ ---- -title: Data Source -order: 1 ---- - ---- -title: 数据 - Source -order: 1 ---- - -## 属性配置 - -### `source.`data - -`array|object|string` required - -数据源配置。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - } -} -``` - -### `source.`parser - -`object` required - -数据格式解析配置 - -#### `parser.`type - -`string` required - -支持以下数据类型: - -* CSV - -```js -{ - source: { - data: `Latitude,Longitude,Name - 104.101,30.649,chengdu`, - parser: { type: "csv", x: 'Longitude', y: 'Latitude' }, - }, -} -``` - -* JSON - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - } -} -``` - -* GEOJSON - -```js -{ - source: { - data: { - type: "FeatureCollection", - features: [ - { - type: "Feature", - geometry: { type: "Point", coordinates: [104.101, 30.649] }, - properties: { name: "chengdu" }, - }, - ], - }, - parser: { type: 'geojson' } - } -} -``` - -#### `parser.`x - -`string` optional - -点数据的经度映射。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - } -} -``` - -#### `parser.`y - -`string` optional - -点数据的维度映射。 - -#### `parser.`x1 - -`string` optional - -线数据的第二个点经度映射。 - -```js -{ - source: { - data: [{ lng1: 112.345, lat1: 30.455, lng2: 112.345, lat2: 30.455, value: 10 }], - parser: { - type: 'json', - x: 'lng1', - y: 'lat1', - x1: 'lng1', - y1: 'lat2' - } - } -} -``` - -#### `parser.`y1 - -`string` optional - -线数据的第二个点维度映射。 - -#### `parser.`coordinates - -`array` optional - -映射 [GeoJSON](https://datatracker.ietf.org/doc/html/draft-butler-geojson-06) 中的 Geometry 的 coordinates 数据类型。 - -```js -{ - source: { - data: [ - { - name: "chengdu", - coordinates: [104.101, 30.649] - }, - ], - parser: { type: 'json', coordinates: 'coordinates' }, - }, -} -``` - -### `source.`transform - -`array` optional - -数据处理配置。 - -#### `transform.`grid - -将数据处理为方格网布局,以下为配置参数: - -* type: `'grid'` -* size: `number` 网格半径 -* field: `string` 数据统计字段 -* method: `'count'|'max'|'min'|'sum'|'mean'` 聚合方法 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - transforms: [ - { - type: 'grid', - size: 15000, - field: 't', - method: 'sum', - } - ] - } -} -``` - -#### `transform.`hexagon - -将数据处理为六边形网格布局,以下为配置参数: - -* type: `'hexagon'` -* size: `number` 网格半径 -* field: `string` 数据统计字段 -* method: `'count'|'max'|'min'|'sum'|'mean'` 聚合方法 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - transforms: [ - { - type: 'hexagon', - size: 15000, - field: 't', - method: 'sum', - } - ] - } -} -``` - -#### `transform.`join - -将地理数据和元数据进行关联,以下为配置参数: - -* type: `'join'` -* targetField: `string` 地理数据字段名称 -* sourceField: `number` 元数据字段名称 -* data: `array` 需要关联的数据源 - -```js -{ - source: { - data: { - type: 'FeatureCollection', - features: [ - { - type: "Feature", - geometry: { type: "Point", coordinates: [104.101, 30.649] }, - properties: { name: "chengdu" }, - }, - ], - }, - parser: { type: 'geojson' }, - transforms: [ - { - type: 'join', - targetField: 'name', - sourceField: 'city', - data: [{ city: 'chengdu', value: 13 }] - } - ] - } -} -``` - -### `source.`cluster - -`boolean` optional default: `false` - -是否开启数据聚合处理。 - -### `source.`clusterOption - -`object` optional - -数据聚合处理配置。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - cluster: true, - clusterOption: { - radius: 30, - minZoom: 3, - maxZoom: 22 - } - } -} -``` - -#### `clusterOption.`radius - -`number` optional default: `40` - -聚合半径。 - -#### `clusterOption.`minZoom - -`number` optional default: `0` - -最小聚合缩放等级。 - -#### `clusterOption.`maxZoom - -`number` optional default: `16` - -最大聚合缩放等级。 diff --git a/site/docs/map-api/source/index.zh.md b/site/docs/map-api/source/index.zh.md deleted file mode 100644 index be952bcf2..000000000 --- a/site/docs/map-api/source/index.zh.md +++ /dev/null @@ -1,282 +0,0 @@ ---- -title: 数据 - Source -order: 1 ---- - -## 属性配置 - -### `source.`data - -`array|object|string` required - -数据源配置。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - } -} -``` - -### `source.`parser - -`object` required - -数据格式解析配置 - -#### `parser.`type - -`string` required - -支持以下数据类型: - -* CSV - -```js -{ - source: { - data: `Latitude,Longitude,Name - 104.101,30.649,chengdu`, - parser: { type: "csv", x: 'Longitude', y: 'Latitude' }, - }, -} -``` - -* JSON - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - } -} -``` - -* GEOJSON - -```js -{ - source: { - data: { - type: "FeatureCollection", - features: [ - { - type: "Feature", - geometry: { type: "Point", coordinates: [104.101, 30.649] }, - properties: { name: "chengdu" }, - }, - ], - }, - parser: { type: 'geojson' } - } -} -``` - -#### `parser.`x - -`string` optional - -点数据的经度映射。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - } -} -``` - -#### `parser.`y - -`string` optional - -点数据的维度映射。 - -#### `parser.`x1 - -`string` optional - -线数据的第二个点经度映射。 - -```js -{ - source: { - data: [{ lng1: 112.345, lat1: 30.455, lng2: 112.345, lat2: 30.455, value: 10 }], - parser: { - type: 'json', - x: 'lng1', - y: 'lat1', - x1: 'lng1', - y1: 'lat2' - } - } -} -``` - -#### `parser.`y1 - -`string` optional - -线数据的第二个点维度映射。 - -#### `parser.`coordinates - -`array` optional - -映射 [GeoJSON](https://datatracker.ietf.org/doc/html/draft-butler-geojson-06) 中的 Geometry 的 coordinates 数据类型。 - -```js -{ - source: { - data: [ - { - name: "chengdu", - coordinates: [104.101, 30.649] - }, - ], - parser: { type: 'json', coordinates: 'coordinates' }, - }, -} -``` - -### `source.`transform - -`array` optional - -数据处理配置。 - -#### `transform.`grid - -将数据处理为方格网布局,以下为配置参数: - -* type: `'grid'` -* size: `number` 网格半径 -* field: `string` 数据统计字段 -* method: `'count'|'max'|'min'|'sum'|'mean'` 聚合方法 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - transforms: [ - { - type: 'grid', - size: 15000, - field: 't', - method: 'sum', - } - ] - } -} -``` - -#### `transform.`hexagon - -将数据处理为六边形网格布局,以下为配置参数: - -* type: `'hexagon'` -* size: `number` 网格半径 -* field: `string` 数据统计字段 -* method: `'count'|'max'|'min'|'sum'|'mean'` 聚合方法 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - transforms: [ - { - type: 'hexagon', - size: 15000, - field: 't', - method: 'sum', - } - ] - } -} -``` - -#### `transform.`join - -将地理数据和元数据进行关联,以下为配置参数: - -* type: `'join'` -* targetField: `string` 地理数据字段名称 -* sourceField: `number` 元数据字段名称 -* data: `array` 需要关联的数据源 - -```js -{ - source: { - data: { - type: 'FeatureCollection', - features: [ - { - type: "Feature", - geometry: { type: "Point", coordinates: [104.101, 30.649] }, - properties: { name: "chengdu" }, - }, - ], - }, - parser: { type: 'geojson' }, - transforms: [ - { - type: 'join', - targetField: 'name', - sourceField: 'city', - data: [{ city: 'chengdu', value: 13 }] - } - ] - } -} -``` - -### `source.`cluster - -`boolean` optional default: `false` - -是否开启数据聚合处理。 - -### `source.`clusterOption - -`object` optional - -数据聚合处理配置。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - cluster: true, - clusterOption: { - radius: 30, - minZoom: 3, - maxZoom: 22 - } - } -} -``` - -#### `clusterOption.`radius - -`number` optional default: `40` - -聚合半径。 - -#### `clusterOption.`minZoom - -`number` optional default: `0` - -最小聚合缩放等级。 - -#### `clusterOption.`maxZoom - -`number` optional default: `16` - -最大聚合缩放等级。 diff --git a/site/docs/map-api/theme/index.en.md b/site/docs/map-api/theme/index.en.md deleted file mode 100644 index 57999aee0..000000000 --- a/site/docs/map-api/theme/index.en.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Theme -order: 5 ---- - ---- -title: 主题 - Theme -order: 5 ---- - -## 内置主题 - -内置两套主题 `light` 和 `dark`,默认主题为亮色主题。 - -```js -{ - theme: 'light'; -} -``` - -## 主题属性 - -> 静待开放 diff --git a/site/docs/map-api/theme/index.zh.md b/site/docs/map-api/theme/index.zh.md deleted file mode 100644 index fc6f84513..000000000 --- a/site/docs/map-api/theme/index.zh.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: 主题 - Theme -order: 5 ---- - -## 内置主题 - -内置两套主题 `light` 和 `dark`,默认主题为亮色主题。 - -```js -{ - theme: 'light'; -} -``` - -## 主题属性 - -> 静待开放 diff --git a/site/docs/map-common/attribute/area-state.en.md b/site/docs/map-common/attribute/area-state.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/area-state.zh.md b/site/docs/map-common/attribute/area-state.zh.md deleted file mode 100644 index 1e073ff2d..000000000 --- a/site/docs/map-common/attribute/area-state.zh.md +++ /dev/null @@ -1,85 +0,0 @@ -### `options.`state - -`object` optional - -区域交互反馈效果。 - -```js -{ - state: { - active: { - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - }, - select: false, - } -} -``` - -#### `state.`active - -`boolean|AreaLayerActiveOptions` optional default: `false` - -AreaLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fill | 填充颜色 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { - active: true; - } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fill: false, - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - -#### `state.`select - -`boolean|AreaLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { - select: true; - } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fill: 'red', - stroke: false, - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` diff --git a/site/docs/map-common/attribute/area-style.en.md b/site/docs/map-common/attribute/area-style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/area-style.zh.md b/site/docs/map-common/attribute/area-style.zh.md deleted file mode 100644 index 0d3868414..000000000 --- a/site/docs/map-common/attribute/area-style.zh.md +++ /dev/null @@ -1,51 +0,0 @@ -### `options.`style - -`object` optional - -区域样式。 - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2 - } -} -``` - -#### `style.`opacity - -`number` optional - -填充透明度。 - -#### `style.`stroke - -`string` optional - -边线描边颜色。 - -#### `style.`strokeWidth - -`number` optional - -描边的宽度。 - -#### `style.`lineType - -`‘solid’|'dash'` optional ‘solid’ - -描边线类型,支持实线与虚线。 - -#### `style.`dashArray - -`[number, number]` optional - -虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为 `[0,0]` 的效果为没有描边。 - -#### `style.`lineOpacity - -`number` optional - -描边透明度。 diff --git a/site/docs/map-common/attribute/color.en.md b/site/docs/map-common/attribute/color.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/color.zh.md b/site/docs/map-common/attribute/color.zh.md deleted file mode 100644 index b06b77490..000000000 --- a/site/docs/map-common/attribute/color.zh.md +++ /dev/null @@ -1,66 +0,0 @@ -### `options.`color - -`string|ColorStyleAttribute|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ color: 'red', } -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ c: 'red', t: 20, n: 'chengdu' }], - // ... - }, - color: { field: 'c', } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - field: 't', - value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'], - scale: { type: 'quantile' } - } -} -``` diff --git a/site/docs/map-common/attribute/components.en.md b/site/docs/map-common/attribute/components.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/components.zh.md b/site/docs/map-common/attribute/components.zh.md deleted file mode 100644 index deb9ad237..000000000 --- a/site/docs/map-common/attribute/components.zh.md +++ /dev/null @@ -1,35 +0,0 @@ -### `options.`label - -`false|LabelOptions` optional default: `false` - -地图数据标签配置,详见 [Label](/zh/docs/map-api/components/label)。 - -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 diff --git a/site/docs/map-common/attribute/grid-style.en.md b/site/docs/map-common/attribute/grid-style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/grid-style.zh.md b/site/docs/map-common/attribute/grid-style.zh.md deleted file mode 100644 index 92b10e92e..000000000 --- a/site/docs/map-common/attribute/grid-style.zh.md +++ /dev/null @@ -1,33 +0,0 @@ -### `options.`style - -`object` optional - -全局样式。 - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` - -#### `style.`opacity - -`number` optional default: `1` - -透明度。 - -#### `style.`coverage - -`number` optional default: `0.9` - -覆盖度,范围 0 到 1。 - -#### `style.`angle - -`number` optional default: `0` - -旋转角度,范围 0 到 360。 diff --git a/site/docs/map-common/attribute/map.en.md b/site/docs/map-common/attribute/map.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/map.zh.md b/site/docs/map-common/attribute/map.zh.md deleted file mode 100644 index 083313908..000000000 --- a/site/docs/map-common/attribute/map.zh.md +++ /dev/null @@ -1,80 +0,0 @@ -### `options.`map - -`MapConfig` required - -地图容器配置项。 - -#### `map.`type - -`string` optional default: `'amap'` - -地图底图类型,支持以下两种类型: - -* amap: 高德地图 -* mapbox: Mapbox 地图 - -地图底图类型不同时,`map` 下面的有的配置项不相同,比如 `maxZoom`,AMap 最大缩放等级 18,Mapbox 最大缩放等级 20。除此之外还有,底图的交互状态配置,`zoomEnable`、`dragEnable`等。各配置项可详见各官网:高德地图 [配置项](https://lbs.amap.com/api/javascript-api/reference/map);Mapbox 地图 [配置项](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters)。 - -#### `map.`token - -`string` required - -地图服务 token,需服务平台申请。 - -#### `map.`center - -`number[]` optional default: `[0, 0]` - -初始中心经纬度。 - -#### `map.`pitch - -`number` optional default: `0` - -初始倾角。 - -#### `map.`rotation - -`number` optional default: `0` - -初始旋转角度。 - -#### `map.`zoom - -`number` optional default: `0` - -初始缩放层级,底图可缩放层级分布为: - -* Mapbox (0-24) -* 高德 (2-19) - -#### `map.`minZoom - -`number` optional default: `0` - -地图最小缩放等级。 - -#### `map.`maxZoom - -`number` optional default: `20` - -地图最大缩放等级,AMap 最大缩放等级 18,Mapbox 最大缩放等级 20。 - -#### `map.`style - -`string` optional default: `dark` - -内置样式: - -* dark: 黑暗 -* light: 明亮 -* normal: 普通 -* blank: 无底图 - -自定义样式: - -```js -{ - style: 'amap://styles/2a09079c3daac9420ee53b67307a8006?isPublic=true'; -} -``` diff --git a/site/docs/map-common/attribute/path-color.en.md b/site/docs/map-common/attribute/path-color.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/path-color.zh.md b/site/docs/map-common/attribute/path-color.zh.md deleted file mode 100644 index 981e98bf2..000000000 --- a/site/docs/map-common/attribute/path-color.zh.md +++ /dev/null @@ -1,75 +0,0 @@ -### `options.`color - -`string|object|Function` optional default: `'#5FD3A6'` - -元素颜色。 - -```js -{ - color: 'red', -} -``` - -#### `color.`field - -`string` optional - -元素颜色值映射关联字段。 - -```js -{ - source: { - data: [{ - path: [[58.00, 32.84],[85.7, 25.161],[101.95, 41.77],[114.96, 39.63],[117.421, 28.61]], - c: 'red', - t: 20, - n: 'chengdu' - }], - parser: { type: 'json', coordinates: 'path', } - }, - color: { - fied: 'c' - } -} -``` - -#### `color.`value - -`string|string[]|Function` optional - -元素颜色值映射值。 - -```js -{ - color: { - fied: 't', - value: ({ t }) => { - return t > 20 ? 'red': 'blue' - } - } -} -``` - -#### `color.`scale - -`ScaleConfig` optional default: `{type: 'linear'}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - color: { - fied: 't', - value: ['blue', 'red'], - scale: {type: 'quantile'} - } -} -``` diff --git a/site/docs/map-common/attribute/path-components.en.md b/site/docs/map-common/attribute/path-components.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/path-components.zh.md b/site/docs/map-common/attribute/path-components.zh.md deleted file mode 100644 index ea179c5ac..000000000 --- a/site/docs/map-common/attribute/path-components.zh.md +++ /dev/null @@ -1,29 +0,0 @@ -### `options.`tooltip - -`false|TooltipOptions` optional default: `false` - -数据悬浮提示组件配置,详见 [Tooltip](/zh/docs/map-api/components/tooltip)。 - -### `options.`legend - -`false|LegendOptions` optional default: `false` - -地图图例组件配置,详见 [Legend](/zh/docs/map-api/components/legend)。 - -### `options.`zoom - -`false|ZoomControlOptions` optional default: `false` - -地图放大缩小控件,详见 [Zoom](/zh/docs/map-api/components/zoom)。 - -### `options.`scale - -`false|ScaleControlOptions` optional default: `false` - -地图比例尺控件,详见 [Scale](/zh/docs/map-api/components/scale)。 - -### `options.`layerMenu - -`false|LayerMenuControlOptions` optional default: `false` - -地图图层列表控件,详见 [LayerMenu](/zh/docs/map-api/components/layerMenu)。 diff --git a/site/docs/map-common/attribute/path-size.en.md b/site/docs/map-common/attribute/path-size.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/path-size.zh.md b/site/docs/map-common/attribute/path-size.zh.md deleted file mode 100644 index cfadf8e8e..000000000 --- a/site/docs/map-common/attribute/path-size.zh.md +++ /dev/null @@ -1,75 +0,0 @@ -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ - size: 12, -} -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ - path: [[58.00, 32.84],[85.7, 25.161],[101.95, 41.77],[114.96, 39.63],[117.421, 28.61]], - s: 2, - t: 3, - n: 'chengdu' - }], - parser: { type: 'json', coordinates: 'path', } - }, - size: { - fied: 's'; - } -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - fied: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{type: 'linear'}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - fied: 't', - value: [12, 15], - scale: {type: 'quantile'} - } -} -``` diff --git a/site/docs/map-common/attribute/path-style.en.md b/site/docs/map-common/attribute/path-style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/path-style.zh.md b/site/docs/map-common/attribute/path-style.zh.md deleted file mode 100644 index f76318c7f..000000000 --- a/site/docs/map-common/attribute/path-style.zh.md +++ /dev/null @@ -1,33 +0,0 @@ -### `options.`style - -`object` optional - -全局样式。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` - -#### `style.`opacity - -`number` optional - -线透明度。 - -#### `style.`lineType - -`‘solid’|'dash'` optional ‘solid’ - -线类型,支持实线与虚线。 - -#### `style.`dashArray - -`[number, number]` optional - -虚线间隔,虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为 `[0,0]` 的效果为没有虚线。 diff --git a/site/docs/map-common/attribute/radiation.en.md b/site/docs/map-common/attribute/radiation.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/radiation.zh.md b/site/docs/map-common/attribute/radiation.zh.md deleted file mode 100644 index a4a6d74b7..000000000 --- a/site/docs/map-common/attribute/radiation.zh.md +++ /dev/null @@ -1,38 +0,0 @@ -### `options.`radiation - -`object` optional - -落地点辐射圈。 - -```js -{ - radiation: { - color: 'yellow', - size: 20, - } -} -``` - -#### `radiation.`enabled - -`boolean` optional `true` - -是否开启辐射圈。 - -#### `radiation.`color - -`string` optional - -辐射圈颜色。 - -#### `radiation.`size - -`number|object|Function` optional default: `20` - -辐射圈大小。 - -#### `radiation.`animate - -`boolean` optional `true` - -是否启用辐射圈动画。 diff --git a/site/docs/map-common/attribute/scale.en.md b/site/docs/map-common/attribute/scale.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/scale.zh.md b/site/docs/map-common/attribute/scale.zh.md deleted file mode 100644 index 9493bd77e..000000000 --- a/site/docs/map-common/attribute/scale.zh.md +++ /dev/null @@ -1,10 +0,0 @@ -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 diff --git a/site/docs/map-common/attribute/size.en.md b/site/docs/map-common/attribute/size.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/size.zh.md b/site/docs/map-common/attribute/size.zh.md deleted file mode 100644 index 5e7a2cc63..000000000 --- a/site/docs/map-common/attribute/size.zh.md +++ /dev/null @@ -1,66 +0,0 @@ -### `options.`size - -`number|SizeStyleAttribute|Function` optional - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ s: 12, t: 20, n: 'chengdu' }], - // ... - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` diff --git a/site/docs/map-common/attribute/state.en.md b/site/docs/map-common/attribute/state.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/state.zh.md b/site/docs/map-common/attribute/state.zh.md deleted file mode 100644 index b23e5c2dc..000000000 --- a/site/docs/map-common/attribute/state.zh.md +++ /dev/null @@ -1,49 +0,0 @@ -### `options.`state - -`StateAttribute` optional - -元素交互反馈效果。 - -#### `state.`active - -`boolean|ActiveOption` optional default: `false` - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { color: 'red', } - } -} -``` - -#### `state.`select - -`boolean|ActiveOption` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { color: 'red', } - } -} -``` diff --git a/site/docs/map-common/attribute/style.en.md b/site/docs/map-common/attribute/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/attribute/style.zh.md b/site/docs/map-common/attribute/style.zh.md deleted file mode 100644 index 9efb52bc6..000000000 --- a/site/docs/map-common/attribute/style.zh.md +++ /dev/null @@ -1,33 +0,0 @@ -### `options.`style - -`object` optional - -全局样式。 - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2 - } -} -``` - -#### `style.`opacity - -`number` optional - -元素透明度。 - -#### `style.`stroke - -`string` optional - -元素边线填充颜色。 - -#### `style.`strokeWidth - -`number` optional - -元素线的宽度。 diff --git a/site/docs/map-common/composite-layers/choropleth-layer/state.en.md b/site/docs/map-common/composite-layers/choropleth-layer/state.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/choropleth-layer/state.zh.md b/site/docs/map-common/composite-layers/choropleth-layer/state.zh.md deleted file mode 100644 index 33ecd6217..000000000 --- a/site/docs/map-common/composite-layers/choropleth-layer/state.zh.md +++ /dev/null @@ -1,77 +0,0 @@ -### `options.`state - -`object` optional - -区域面交互反馈效果。 - -```js -{ - state: { - active: { - fillColor: false, - strokeColor: '#2f54eb', - lineWidth: 1, - }, - select: false, - } -} -``` - -#### `state.`active - -`boolean|ChoroplethLayerActiveOptions` optional default: `false` - -ChoroplethLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fillColor | 填充颜色 | `false|string` | `false` | optional | -| strokeColor | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1` | optional | -| lineOpacity | 描边透明度 | `number` | `1` | optional | - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fillColor: false, - strokeColor: '#2f54eb', - } - } -} -``` - -#### `state.`select - -`boolean|AreaLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fillColor: false, - strokeColor: '#2f54eb', - } - } -} -``` diff --git a/site/docs/map-common/composite-layers/composite-common/attribute.en.md b/site/docs/map-common/composite-layers/composite-common/attribute.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/composite-common/attribute.zh.md b/site/docs/map-common/composite-layers/composite-common/attribute.zh.md deleted file mode 100644 index 06526f165..000000000 --- a/site/docs/map-common/composite-layers/composite-common/attribute.zh.md +++ /dev/null @@ -1,23 +0,0 @@ -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 diff --git a/site/docs/map-common/composite-layers/composite-common/event.en.md b/site/docs/map-common/composite-layers/composite-common/event.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/composite-common/event.zh.md b/site/docs/map-common/composite-layers/composite-common/event.zh.md deleted file mode 100644 index c6b2ba64e..000000000 --- a/site/docs/map-common/composite-layers/composite-common/event.zh.md +++ /dev/null @@ -1,53 +0,0 @@ -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-common/composite-layers/composite-common/method.en.md b/site/docs/map-common/composite-layers/composite-common/method.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/composite-common/method.zh.md b/site/docs/map-common/composite-layers/composite-common/method.zh.md deleted file mode 100644 index 5815eb5f0..000000000 --- a/site/docs/map-common/composite-layers/composite-common/method.zh.md +++ /dev/null @@ -1,119 +0,0 @@ -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` diff --git a/site/docs/map-common/composite-layers/composite-common/options.en.md b/site/docs/map-common/composite-layers/composite-common/options.en.md deleted file mode 100644 index 7043b34a1..000000000 --- a/site/docs/map-common/composite-layers/composite-common/options.en.md +++ /dev/null @@ -1,58 +0,0 @@ -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层可见范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 diff --git a/site/docs/map-common/composite-layers/composite-common/options.zh.md b/site/docs/map-common/composite-layers/composite-common/options.zh.md deleted file mode 100644 index 178b8c1f0..000000000 --- a/site/docs/map-common/composite-layers/composite-common/options.zh.md +++ /dev/null @@ -1,58 +0,0 @@ -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 diff --git a/site/docs/map-common/composite-layers/core-common/attribute.en.md b/site/docs/map-common/composite-layers/core-common/attribute.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/core-common/attribute.zh.md b/site/docs/map-common/composite-layers/core-common/attribute.zh.md deleted file mode 100644 index 06526f165..000000000 --- a/site/docs/map-common/composite-layers/core-common/attribute.zh.md +++ /dev/null @@ -1,23 +0,0 @@ -### name - -`string` - -当前图层名。 - -### id - -`string` - -当前图层 ID。 - -### type - -`string` - -当前图层所属类型。 - -### options - -`LayerOptions` - -当前图层的所有配置项。 diff --git a/site/docs/map-common/composite-layers/core-common/event.en.md b/site/docs/map-common/composite-layers/core-common/event.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/core-common/event.zh.md b/site/docs/map-common/composite-layers/core-common/event.zh.md deleted file mode 100644 index c6b2ba64e..000000000 --- a/site/docs/map-common/composite-layers/core-common/event.zh.md +++ /dev/null @@ -1,53 +0,0 @@ -### 事件监听 - -#### 绑定事件 - -```js -layer.on(eventName: string, callback: (...args) => void); -``` - -#### 绑定一次事件 - -```js -layer.once(eventName: string, callback: (...args) => void); -``` - -#### 解绑事件 - -```js -layer.off(eventName: string, callback: (...args) => void); -``` - -### 事件类别 - -#### 生命周期事件 - -| 事件名 | 类型 | 描述 | -| ---------- | ------------ | ------------------------- | -| inited | 生命周期事件 | 图层初始化完成事件 | -| add | 生命周期事件 | 图层添加到场景 scene 事件 | -| remove | 生命周期事件 | 图层移除时事件 | -| dataUpdate | 生命周期事件 | 图层数据源更新事件 | - -#### 点击事件 - -| 事件名 | 类型 | 描述 | -| ------------- | -------- | ------------------------ | -| click | 左键事件 | 左键点击图层事件 | -| unclick | 左键事件 | 图层外左键点击事件 | -| contextmenu | 右键事件 | 图层要素点击右键菜单事件 | -| uncontextmenu | 右键事件 | 图层外点击右键事件 | - -#### 鼠标事件 - -| 事件名 | 类型 | 描述 | -| ----------- | -------- | -------------------------- | -| mouseenter | 滑动事件 | 鼠标进入图层要素事件 | -| mousemove | 滑动事件 | 鼠标在图层上移动时触发事件 | -| unmousemove | 滑动事件 | 图层外鼠标移动事件 | -| mouseout | 滑动事件 | 鼠标移出图层要素事件 | -| mouseup | 滑动事件 | 鼠标在图层上单击抬起事件 | -| unmouseup | 滑动事件 | 图层外鼠标抬起 | -| mousedown | 滑动事件 | 鼠标在图层上单击按下事件 | -| unmousedown | 滑动事件 | 图层外单击按下事件 | -| unpick | 鼠标事件 | 图层外的操作的所有事件 | diff --git a/site/docs/map-common/composite-layers/core-common/method.en.md b/site/docs/map-common/composite-layers/core-common/method.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/core-common/method.zh.md b/site/docs/map-common/composite-layers/core-common/method.zh.md deleted file mode 100644 index ec3898ec5..000000000 --- a/site/docs/map-common/composite-layers/core-common/method.zh.md +++ /dev/null @@ -1,127 +0,0 @@ -### addTo - -添加到场景。 - -```js -layer.addTo(scene: Scene); -``` - -### remove - -从场景移除。 - -```js -layer.remove(); -``` - -### update - -更新配置且重新渲染。 - -```js -layer.update(options: Partial); -``` - -### changeData - -更新数据。 - -```js -layer.changeData(source: SourceOptions); -``` - -### setIndex - -设置图层层叠值。 - -```js -layer.setIndex(); -``` - -### setBlend - -设置图层的元素混合配置。 - -```js -layer.setBlend(); -``` - -### setMinZoom - -设置图层可见最小缩放层级。 - -```js -layer.setMinZoom(); -``` - -### setMaxZoom - -设置图层可见最大缩放层级。 - -```js -layer.setMaxZoom(); -``` - -### show - -显示图层。 - -```js -layer.show(); -``` - -### hide - -隐藏图层。 - -```js -layer.hide(); -``` - -### toggleVisible - -切换图层显隐状态。 - -```js -layer.toggleVisible(); -``` - -### isVisible - -图层是否可见。 - -```js -layer.isVisible() : boolean; -``` - -### fitBounds - -图层缩放到范围。 - -```js -layer.fitBounds(fitBoundsOptions?: Bounds); -``` - -### boxSelect - -图层框选数据。 - -```js -layer.boxSelect(bounds: [number, number, number, number], callback: (...args: any[]) => void); -``` - -### getLegendItems - -获取图例数据。 - -```js -layer.getLegendItems(type: string): Record[]; -``` - -### destroy - -摧毁。 - -```js -layer.destroy(); -``` diff --git a/site/docs/map-common/composite-layers/core-common/options.en.md b/site/docs/map-common/composite-layers/core-common/options.en.md deleted file mode 100644 index 7043b34a1..000000000 --- a/site/docs/map-common/composite-layers/core-common/options.en.md +++ /dev/null @@ -1,58 +0,0 @@ -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层可见范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 diff --git a/site/docs/map-common/composite-layers/core-common/options.zh.md b/site/docs/map-common/composite-layers/core-common/options.zh.md deleted file mode 100644 index 178b8c1f0..000000000 --- a/site/docs/map-common/composite-layers/core-common/options.zh.md +++ /dev/null @@ -1,58 +0,0 @@ -### `options.`name - -`string` optional - -图层名。 - -### `options.`id - -`string` optional - -图层 ID。 - -### `options.`zIndex - -`number` optional default: `0` - -图层层叠顺序,数值越大,图层层叠最高。 - -### `options.`visible - -`boolean` optional default: `true` - -图层是否可见。 - -### `options.`minZoom - -`number` optional - -图层可见最小缩放层级。 - -### `options.`maxZoom - -`number` optional - -图层可见最大缩放层级。 - -### `options.`autoFit - -`boolean` optional default: `false` - -图层加载成功后是否自动定位到图层数据可见范围,注意 后图层数据发生更新时,地图也会自动缩放到图层的数据边界范围。 - -### `options.`pickingBuffer - -`number` optional default: `0` - -图层可拾取范围。 - -### `options.`blend - -`string` optional default: `normal` - -图层的元素混合效果,支持以下效果: - -* normal:正常效果,默认效果 -* additive:叠加模式 -* subtractive:相减模式 -* max:最大值 diff --git a/site/docs/map-common/composite-layers/heatmap-layer/shape.en.md b/site/docs/map-common/composite-layers/heatmap-layer/shape.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/heatmap-layer/shape.zh.md b/site/docs/map-common/composite-layers/heatmap-layer/shape.zh.md deleted file mode 100644 index 43ae268ac..000000000 --- a/site/docs/map-common/composite-layers/heatmap-layer/shape.zh.md +++ /dev/null @@ -1,30 +0,0 @@ -### `options.`shape - -`string` optional default: `'heatmap'` - -支持三种热力类型,普通热力模式支持 2D 与 3D 热力: - -* heatmap -* heatmap3D - -蜂窝热力支持: - -* hexagon: 蜂窝 -* hexagonColumn: 蜂窝柱 - -网格热力支持: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'heatmap', } -``` diff --git a/site/docs/map-common/composite-layers/heatmap-layer/size.en.md b/site/docs/map-common/composite-layers/heatmap-layer/size.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/heatmap-layer/size.zh.md b/site/docs/map-common/composite-layers/heatmap-layer/size.zh.md deleted file mode 100644 index c4cf9cceb..000000000 --- a/site/docs/map-common/composite-layers/heatmap-layer/size.zh.md +++ /dev/null @@ -1,59 +0,0 @@ -### `options.`size - -`number|SizeStyleAttribute|Function` optional - -当 shape 为普通热力(heatmap、heatmap3D)时,size 代表热力大小,配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----- | -------------------- | -------------------- | -------- | -------- | -| field | 热力大小映射字段 | `string` | | required | -| value | 热力大小数据映射区间 | `number[]|Function` | `[0, 1]` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { - field: 't', - value: [0, 1], - }, -} -``` - -当 shape 为 3D 网格/蜂窝热力时,size 表示高度,shape 为 2D 时,size 无需设置 - -```js -{ - size: { - field: 'value', - value: ({ value }) => value * 2 - } -} -``` - -#### `size.`field - -`string` required - -网格大小映射字段。 - -#### `size.`value - -`number|number[]|Function` optional - -网格大小值映射值。 - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 diff --git a/site/docs/map-common/composite-layers/heatmap-layer/style.en.md b/site/docs/map-common/composite-layers/heatmap-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/heatmap-layer/style.zh.md b/site/docs/map-common/composite-layers/heatmap-layer/style.zh.md deleted file mode 100644 index 340685422..000000000 --- a/site/docs/map-common/composite-layers/heatmap-layer/style.zh.md +++ /dev/null @@ -1,51 +0,0 @@ -### `options.`style - -`HeatmapLayerStyleOptions|GridHeatmapLayerStyleOptions` optional - -普通热力样式,HeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------- | ------------------ | ------------ | ------ | -------- | -| intensity | 全局热力权重 | `number` | `3` | optional | -| radius | 热力半径,单位像素 | `number` | `20` | optional | -| opacity | 透明度 | `number` | `1` | optional | -| rampColors | 热力色带 | `RampColors` | | optional | - -热力色带,RampColors 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------- | ---------- | ---------- | ------ | -------- | -| colors | 颜色 | `string[]` | | required | -| positions | 热力映射值 | `number[]` | | required | - -```js -{ - style: { - intensity: 3, - radius: 20, - opacity: 1, - rampColors: { - colors: ['#FF4818', '#F7B74A', '#FFF598', '#F27DEB', '#8C1EB2', '#421EB2'], - positions: [0, 0.2, 0.4, 0.6, 0.8, 1.0], - }, - } -} -``` - -网格/蜂窝热力样式,GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` diff --git a/site/docs/map-common/composite-layers/line-layer/animate.en.md b/site/docs/map-common/composite-layers/line-layer/animate.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/line-layer/animate.zh.md b/site/docs/map-common/composite-layers/line-layer/animate.zh.md deleted file mode 100644 index 7b986c342..000000000 --- a/site/docs/map-common/composite-layers/line-layer/animate.zh.md +++ /dev/null @@ -1,22 +0,0 @@ -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| interval | 轨迹间隔, 取值区间 0 - 1 | `number` | | optional | -| duration | 动画时间,单位秒 | `number` | | optional | -| trailLength | 轨迹长度 取值区间 0 - 1 | `number` | | optional | - -```js -{ - animate: { - duration: 4, - interval: 0.2, - trailLength: 0.1, - } -} -``` diff --git a/site/docs/map-common/composite-layers/line-layer/shape.en.md b/site/docs/map-common/composite-layers/line-layer/shape.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/line-layer/shape.zh.md b/site/docs/map-common/composite-layers/line-layer/shape.zh.md deleted file mode 100644 index 7a7f03cef..000000000 --- a/site/docs/map-common/composite-layers/line-layer/shape.zh.md +++ /dev/null @@ -1,13 +0,0 @@ -### `options.`shape - -`string` optional default: `'line'` - -除直线外还支持 2D 与 3D 弧线及大圆航线: - -* arc -* arc3d -* greatcircle - -```js -{ shape: 'line', } -``` diff --git a/site/docs/map-common/composite-layers/line-layer/source.en.md b/site/docs/map-common/composite-layers/line-layer/source.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/line-layer/source.zh.md b/site/docs/map-common/composite-layers/line-layer/source.zh.md deleted file mode 100644 index d3dd68a5c..000000000 --- a/site/docs/map-common/composite-layers/line-layer/source.zh.md +++ /dev/null @@ -1,19 +0,0 @@ -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ - path: [[58.00, 32.84],[85.7, 25.161],[101.95, 41.77],[114.96, 39.63],[117.421, 28.61]], - c: 'red', - t: 20, - n: 'chengdu' - }], - parser: { type: 'json', coordinates: 'path', } - } -} -``` diff --git a/site/docs/map-common/composite-layers/line-layer/style.en.md b/site/docs/map-common/composite-layers/line-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/line-layer/style.zh.md b/site/docs/map-common/composite-layers/line-layer/style.zh.md deleted file mode 100644 index f1cc06940..000000000 --- a/site/docs/map-common/composite-layers/line-layer/style.zh.md +++ /dev/null @@ -1,25 +0,0 @@ -### `options.`style - -`LineLayerStyleOptions` optional - -线样式,LineLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | -| sourceColor | 渐变起点颜色 | `string` | | optional | -| targetColor | 渐变终点颜色 | `string` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` diff --git a/site/docs/map-common/composite-layers/point-layer/animate.en.md b/site/docs/map-common/composite-layers/point-layer/animate.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/point-layer/animate.zh.md b/site/docs/map-common/composite-layers/point-layer/animate.zh.md deleted file mode 100644 index 10cc0db02..000000000 --- a/site/docs/map-common/composite-layers/point-layer/animate.zh.md +++ /dev/null @@ -1,11 +0,0 @@ -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | ------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| speed | 水波速度 | `number` | | optional | -| rings | 水波环数 | `number` | | optional | diff --git a/site/docs/map-common/composite-layers/point-layer/shape.en.md b/site/docs/map-common/composite-layers/point-layer/shape.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/point-layer/shape.zh.md b/site/docs/map-common/composite-layers/point-layer/shape.zh.md deleted file mode 100644 index 548d70e37..000000000 --- a/site/docs/map-common/composite-layers/point-layer/shape.zh.md +++ /dev/null @@ -1,108 +0,0 @@ -### `options.`shape - -`string|ShapeStyleAttribute|Function` optional default: `'circle'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 - * pentagon: 五角星 - * octogon: 八边形 - * hexagram: 六边形 - * rhombus: 菱形 - * vesica: 椭圆形 - * dot: 圆点 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'circle', } -``` - -除内置图标外,还可**自定义图标**: - -1. 注册图标 - -```js -const images = [ - { id: '01', image: 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg' }, - { id: '02', image: 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg' }, - { id: '03', image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg' }, -]; -registerImages(images); -``` - -2. 使用注册图标 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: '01', n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: '01', -} -``` - -#### `shape.`field - -`string` optional - -元素形状值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 'circle', t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: { field: 's', } -} -``` - -#### `shape.`value - -`string|string[]|Function` optional - -元素形状值映射值。 - -```js -{ - shape: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'triangle': 'circle' - } - } -} -``` - -#### `shape.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - shape: { - field: 't', - value: ['circle', 'triangle'], - scale: { type: 'quantile' } - } -} -``` diff --git a/site/docs/map-common/composite-layers/point-layer/source.en.md b/site/docs/map-common/composite-layers/point-layer/source.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/point-layer/source.zh.md b/site/docs/map-common/composite-layers/point-layer/source.zh.md deleted file mode 100644 index cc1a8dd63..000000000 --- a/site/docs/map-common/composite-layers/point-layer/source.zh.md +++ /dev/null @@ -1,14 +0,0 @@ -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` diff --git a/site/docs/map-common/composite-layers/point-layer/style.en.md b/site/docs/map-common/composite-layers/point-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/point-layer/style.zh.md b/site/docs/map-common/composite-layers/point-layer/style.zh.md deleted file mode 100644 index 2a4165324..000000000 --- a/site/docs/map-common/composite-layers/point-layer/style.zh.md +++ /dev/null @@ -1,21 +0,0 @@ -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` diff --git a/site/docs/map-common/composite-layers/polygon-layer/shape.en.md b/site/docs/map-common/composite-layers/polygon-layer/shape.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/polygon-layer/shape.zh.md b/site/docs/map-common/composite-layers/polygon-layer/shape.zh.md deleted file mode 100644 index c6ff3ce30..000000000 --- a/site/docs/map-common/composite-layers/polygon-layer/shape.zh.md +++ /dev/null @@ -1,8 +0,0 @@ -### `options.`shape - -`string` optional default: `'fill'` - -内置两种 shape: - -* 2D 填充面:`'fill'` -* 3D 立方体:`'extrude'` diff --git a/site/docs/map-common/composite-layers/polygon-layer/source.en.md b/site/docs/map-common/composite-layers/polygon-layer/source.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/polygon-layer/source.zh.md b/site/docs/map-common/composite-layers/polygon-layer/source.zh.md deleted file mode 100644 index 9b371504b..000000000 --- a/site/docs/map-common/composite-layers/polygon-layer/source.zh.md +++ /dev/null @@ -1,40 +0,0 @@ -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` diff --git a/site/docs/map-common/composite-layers/polygon-layer/style.en.md b/site/docs/map-common/composite-layers/polygon-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/polygon-layer/style.zh.md b/site/docs/map-common/composite-layers/polygon-layer/style.zh.md deleted file mode 100644 index 4aa05ef63..000000000 --- a/site/docs/map-common/composite-layers/polygon-layer/style.zh.md +++ /dev/null @@ -1,17 +0,0 @@ -### `options.`style - -`PolygonLayerStyleOptions` optional - -区域样式,PolygonLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------- | ------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | - -```js -{ - style: { - opacity: 0.8, - } -} -``` diff --git a/site/docs/map-common/composite-layers/text-layer/style.en.md b/site/docs/map-common/composite-layers/text-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/composite-layers/text-layer/style.zh.md b/site/docs/map-common/composite-layers/text-layer/style.zh.md deleted file mode 100644 index d72daf3b5..000000000 --- a/site/docs/map-common/composite-layers/text-layer/style.zh.md +++ /dev/null @@ -1,36 +0,0 @@ -`TextLayerStyleOptions` optional - -字体样式,TextLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------------- | ------------------------------------------------------------------------- | ----------- | ---------- | -------- | -| fill | 字体颜色 | `ColorAttr` | `'#fff'` | optional | -| fontSize | 字体大小 | `SizeAttr` | `12` | optional | -| opacity | 文字透明度 | `number` | `1` | optional | -| stroke | 文字描边颜色 | `string` | `'#fff'` | optional | -| strokeWidth | 文字描边宽度 | `number` | `0` | optional | -| strokeOpacity | 文字描边透明度 | `number` | `1` | optional | -| fontFamily | 文字字体 | `string` | | optional | -| fontWeight | 字体粗细程度 | `string` | | optional | -| textAllowOverlap | 是否允许文本覆盖 | `boolean` | `false` | optional | -| textAnchor | 文本相对锚点的位置 | `string` | `'center'` | optional | -| textOffset | 文本相对锚点的偏移量 | `number[]` | `[0, 0]` | optional | -| spacing | 字符间距 | `number` | `0` | optional | -| padding | 文本包围盒 padding (水平,垂直),影响碰撞检测结果,避免相邻文本靠的太近 | `number[]` | `[0, 0]` | optional | - -textAnchor 文本相对锚点的位置,支持以下相对锚点的位置: - -* 'right' -* 'top-right' -* 'left' -* 'bottom-right' -* 'left' -* 'top-left' -* 'bottom-left' -* 'bottom' -* 'bottom-right' -* 'bottom-left' -* 'top' -* 'top-right' -* 'top-left' -* 'center' diff --git a/site/docs/map-common/layers/arc-layer/shape.en.md b/site/docs/map-common/layers/arc-layer/shape.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/arc-layer/shape.zh.md b/site/docs/map-common/layers/arc-layer/shape.zh.md deleted file mode 100644 index eea5b64b6..000000000 --- a/site/docs/map-common/layers/arc-layer/shape.zh.md +++ /dev/null @@ -1,13 +0,0 @@ -### `options.`shape - -`string` optional default: `'arc'` - -支持 2D 与 3D 弧线及大圆航线: - -* arc -* arc3d -* greatcircle - -```js -{ shape: 'arc', } -``` diff --git a/site/docs/map-common/layers/arc-layer/size.en.md b/site/docs/map-common/layers/arc-layer/size.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/arc-layer/size.zh.md b/site/docs/map-common/layers/arc-layer/size.zh.md deleted file mode 100644 index 57f5ef2c3..000000000 --- a/site/docs/map-common/layers/arc-layer/size.zh.md +++ /dev/null @@ -1,66 +0,0 @@ -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ startX: 58.00, startY: 32.84, endX: 85.7, endY: 25.161, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'startX', y: 'startY', x: 'endX', y: 'endY', } - }, - size: { field: 't', } -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' } - } -} -``` diff --git a/site/docs/map-common/layers/arc-layer/style.en.md b/site/docs/map-common/layers/arc-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/arc-layer/style.zh.md b/site/docs/map-common/layers/arc-layer/style.zh.md deleted file mode 100644 index 9887c738f..000000000 --- a/site/docs/map-common/layers/arc-layer/style.zh.md +++ /dev/null @@ -1,25 +0,0 @@ -### `options.`style - -`LinesLayerStyleOptions` optional - -元素样式,LinesLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | -| sourceColor | 渐变起点颜色 | `string` | | optional | -| targetColor | 渐变终点颜色 | `string` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` diff --git a/site/docs/map-common/layers/area-layer/source.en.md b/site/docs/map-common/layers/area-layer/source.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/area-layer/source.zh.md b/site/docs/map-common/layers/area-layer/source.zh.md deleted file mode 100644 index 9b371504b..000000000 --- a/site/docs/map-common/layers/area-layer/source.zh.md +++ /dev/null @@ -1,40 +0,0 @@ -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -const data = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { name: '上海市', code: 310000, c: 'red', t: 20 }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [115.1806640625, 30.637912028341123], - [114.9609375, 29.152161283318915], - [117.79541015625001, 27.430289738862594], - [118.740234375, 29.420460341013133], - [117.46582031249999, 31.50362930577303], - [115.1806640625, 30.637912028341123], - // ...... - ], - ], - }, - }, - ], -}; -``` - -```js -{ - source: { - data, - parser: { type: 'geojson' } - } -} -``` diff --git a/site/docs/map-common/layers/area-layer/state.en.md b/site/docs/map-common/layers/area-layer/state.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/area-layer/state.zh.md b/site/docs/map-common/layers/area-layer/state.zh.md deleted file mode 100644 index 9462e15d5..000000000 --- a/site/docs/map-common/layers/area-layer/state.zh.md +++ /dev/null @@ -1,81 +0,0 @@ -### `options.`state - -`object` optional - -区域交互反馈效果。 - -```js -{ - state: { - active: { - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - }, - select: false, - } -} -``` - -#### `state.`active - -`boolean|AreaLayerActiveOptions` optional default: `false` - -AreaLayerActiveOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ---------- | --------------- | ----------- | -------- | -| fill | 填充颜色 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `false|string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | - -标签 mousehover 高亮效果,开启 mousehover 元素高亮效果: - -```js -{ - state: { active: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - active: { - fill: false, - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` - -#### `state.`select - -`boolean|AreaLayerActiveOptions` optional default: `false` - -元素 mouseclick 选中高亮效果,开启 mouseclick 元素高亮效果: - -```js -{ - state: { select: true, } -} -``` - -开启 mousehover 元素高亮效果并自定义设置高亮颜色: - -```js -{ - state: { - select: { - fill: 'red', - stroke: false, - lineWidth: 1.5, - lineOpacity: 0.8, - } - } -} -``` diff --git a/site/docs/map-common/layers/area-layer/style.en.md b/site/docs/map-common/layers/area-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/area-layer/style.zh.md b/site/docs/map-common/layers/area-layer/style.zh.md deleted file mode 100644 index 251fb092e..000000000 --- a/site/docs/map-common/layers/area-layer/style.zh.md +++ /dev/null @@ -1,27 +0,0 @@ -### `options.`style - -`AreaLayerStyle` optional - -区域样式,AreaLayerStyle 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------------- | ------------------------------------ | ------------------ | ----------- | -------- | -| opacity | 填充透明度 | `number` | `1` | optional | -| fillBottomColor | 填充兜底颜色,用于颜色值映值不存在时 | `false|string` | `false` | optional | -| stroke | 描边颜色 | `string` | `'#2f54eb'` | optional | -| lineWidth | 描边的宽度 | `number` | `1.5` | optional | -| lineOpacity | 描边透明度 | `number` | `0.8` | optional | -| lineType | 描边线类型,支持实线与虚线 | `‘solid’|'dash'` | `‘solid’` | optional | -| lineDash | 描边的虚线间隔 | `[number, number]` | | optional | - -> lineDash: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - lineWidth: 2, - } -} -``` diff --git a/site/docs/map-common/layers/dot-layer/animate.en.md b/site/docs/map-common/layers/dot-layer/animate.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/dot-layer/animate.zh.md b/site/docs/map-common/layers/dot-layer/animate.zh.md deleted file mode 100644 index 86631ea91..000000000 --- a/site/docs/map-common/layers/dot-layer/animate.zh.md +++ /dev/null @@ -1,17 +0,0 @@ -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | ------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| speed | 水波速度 | `number` | | optional | -| rings | 水波环数 | `number` | | optional | - -```js -{ - animate: true, -} -``` diff --git a/site/docs/map-common/layers/dot-layer/shape.en.md b/site/docs/map-common/layers/dot-layer/shape.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/dot-layer/shape.zh.md b/site/docs/map-common/layers/dot-layer/shape.zh.md deleted file mode 100644 index a43742ace..000000000 --- a/site/docs/map-common/layers/dot-layer/shape.zh.md +++ /dev/null @@ -1,108 +0,0 @@ -### `options.`shape - -`string|Function|object` optional default: `'circle'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 - * pentagon: 五角星 - * octogon: 八边形 - * hexagram: 六边形 - * rhombus: 菱形 - * vesica: 椭圆形 - * dot: 圆点 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'circle', } -``` - -除内置图标外,还可**自定义图标**: - -1. 注册图标 - -```js -const images = [ - { id: '01', image: 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg' }, - { id: '02', image: 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg' }, - { id: '03', image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg' }, -]; -registerImages(images); -``` - -2. 使用注册图标 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: '01', n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: '01', -} -``` - -#### `shape.`field - -`string` optional - -元素形状值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 'circle', t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - shape: { field: 's', } -} -``` - -#### `shape.`value - -`string|string[]|Function` optional - -元素形状值映射值。 - -```js -{ - shape: { - field: 't', - value: ({ t }) => { - return t > 20 ? 'triangle': 'circle' - } - } -} -``` - -#### `shape.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - shape: { - field: 't', - value: ['circle', 'triangle'], - scale: { type: 'quantile' } - } -} -``` diff --git a/site/docs/map-common/layers/dot-layer/size.en.md b/site/docs/map-common/layers/dot-layer/size.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/dot-layer/size.zh.md b/site/docs/map-common/layers/dot-layer/size.zh.md deleted file mode 100644 index 91329e23d..000000000 --- a/site/docs/map-common/layers/dot-layer/size.zh.md +++ /dev/null @@ -1,66 +0,0 @@ -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, s: 12, t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { field: 's' }, -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` diff --git a/site/docs/map-common/layers/dot-layer/source.en.md b/site/docs/map-common/layers/dot-layer/source.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/dot-layer/source.zh.md b/site/docs/map-common/layers/dot-layer/source.zh.md deleted file mode 100644 index cc1a8dd63..000000000 --- a/site/docs/map-common/layers/dot-layer/source.zh.md +++ /dev/null @@ -1,14 +0,0 @@ -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, c: 'red', t: 20, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, -} -``` diff --git a/site/docs/map-common/layers/dot-layer/style.en.md b/site/docs/map-common/layers/dot-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/dot-layer/style.zh.md b/site/docs/map-common/layers/dot-layer/style.zh.md deleted file mode 100644 index 2a4165324..000000000 --- a/site/docs/map-common/layers/dot-layer/style.zh.md +++ /dev/null @@ -1,21 +0,0 @@ -### `options.`style - -`PointLayerStyleOptions` optional - -元素样式, PointLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------ | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| stroke | 边线填充颜色 | `string` | | optional | -| strokeWidth | 描边的宽度 | `number` | | optional | - -```js -{ - style: { - opacity: 0.8, - stroke: 'white', - strokeWidth: 2, - } -} -``` diff --git a/site/docs/map-common/layers/grid-layer/shape.en.md b/site/docs/map-common/layers/grid-layer/shape.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/grid-layer/shape.zh.md b/site/docs/map-common/layers/grid-layer/shape.zh.md deleted file mode 100644 index 07941fd86..000000000 --- a/site/docs/map-common/layers/grid-layer/shape.zh.md +++ /dev/null @@ -1,20 +0,0 @@ -### `options.`shape - -`string` optional default: `'square'` - -元素形状,内置以下形状: - -* 2D - * circle: 圆形 - * square: 正方形 - * hexagon: 六边形 - * triangle: 三角形 -* 3D - * cylinder: 圆柱 - * triangleColumn: 三角形柱 - * hexagonColumn: 六角形柱 - * squareColumn: 方柱 - -```js -{ shape: 'square', } -``` diff --git a/site/docs/map-common/layers/grid-layer/size.en.md b/site/docs/map-common/layers/grid-layer/size.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/grid-layer/size.zh.md b/site/docs/map-common/layers/grid-layer/size.zh.md deleted file mode 100644 index 4e5225dc6..000000000 --- a/site/docs/map-common/layers/grid-layer/size.zh.md +++ /dev/null @@ -1,41 +0,0 @@ -### `options.`size - -`number|object|Function` optional - -元素大小。 - -**shape 为 2D 时,size 无需设置;shape 为 3D 时,size 表示高度。** - -```js -{ - size: { - field: 'value', - value: ({ value }) => value * 2 - } -} -``` - -#### `size.`field - -`string` required - -网格大小映射字段。 - -#### `size.`value - -`number|number[]|Function` optional - -网格大小值映射值。 - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 diff --git a/site/docs/map-common/layers/grid-layer/source.en.md b/site/docs/map-common/layers/grid-layer/source.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/grid-layer/source.zh.md b/site/docs/map-common/layers/grid-layer/source.zh.md deleted file mode 100644 index bead692a9..000000000 --- a/site/docs/map-common/layers/grid-layer/source.zh.md +++ /dev/null @@ -1,29 +0,0 @@ -### `options.`source - -`SourceOptions` required - -数据配置。 - -#### `source.`aggregation - -`GridAggregation` required - -数据网格聚合配置,GridAggregation 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ------ | -------- | -------------------------------------- | ------- | -------- | -| field | 聚合字段 | `string` | | required | -| radius | 网格半径 | `number` | `15000` | optional | -| method | 聚合类型 | `'count'|'max'|'min'|'sum'|'mean'` | `'sum'` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' }, - aggregation: { field: 't', radius: 15000, type: 'sum' } - } -} -``` - -其它配置详见 [Source](/zh/docs/map-api/source)。 diff --git a/site/docs/map-common/layers/grid-layer/style.en.md b/site/docs/map-common/layers/grid-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/grid-layer/style.zh.md b/site/docs/map-common/layers/grid-layer/style.zh.md deleted file mode 100644 index 12a42e62b..000000000 --- a/site/docs/map-common/layers/grid-layer/style.zh.md +++ /dev/null @@ -1,21 +0,0 @@ -### `options.`style - -`GridHeatmapLayerStyleOptions` optional - -元素样式, GridHeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ----------------------- | -------- | ------ | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| coverage | 覆盖度,范围 0 到 1 | `string` | `0.9` | optional | -| angle | 旋转角度,范围 0 到 360 | `number` | `0` | optional | - -```js -{ - style: { - coverage: 0.9, - angle: 0, - opacity: 1.0, - } -} -``` diff --git a/site/docs/map-common/layers/heatmap-layer/shape.en.md b/site/docs/map-common/layers/heatmap-layer/shape.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/heatmap-layer/shape.zh.md b/site/docs/map-common/layers/heatmap-layer/shape.zh.md deleted file mode 100644 index 723fca7a7..000000000 --- a/site/docs/map-common/layers/heatmap-layer/shape.zh.md +++ /dev/null @@ -1,12 +0,0 @@ -### `options.`shape - -`string` optional default: `'heatmap'` - -热力模式支持 2D 与 3D 热力: - -* heatmap -* heatmap3D - -```js -{ shape: 'heatmap', } -``` diff --git a/site/docs/map-common/layers/heatmap-layer/size.en.md b/site/docs/map-common/layers/heatmap-layer/size.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/heatmap-layer/size.zh.md b/site/docs/map-common/layers/heatmap-layer/size.zh.md deleted file mode 100644 index ee15c843e..000000000 --- a/site/docs/map-common/layers/heatmap-layer/size.zh.md +++ /dev/null @@ -1,23 +0,0 @@ -### `options.`size - -`SizeAttr` required - -热力大小配置,SizeAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----- | -------------------- | -------------------- | -------- | -------- | -| field | 热力大小映射字段 | `string` | | required | -| value | 热力大小数据映射区间 | `number[]|Function` | `[0, 1]` | optional | - -```js -{ - source: { - data: [{ lng: 104.101, lat: 30.649, t: 24.6, n: 'chengdu' }], - parser: { type: 'json', x: 'lng', y: 'lat' } - }, - size: { - field: 't', - value: [0, 1], - }, -} -``` diff --git a/site/docs/map-common/layers/heatmap-layer/style.en.md b/site/docs/map-common/layers/heatmap-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/heatmap-layer/style.zh.md b/site/docs/map-common/layers/heatmap-layer/style.zh.md deleted file mode 100644 index e7a91ff5d..000000000 --- a/site/docs/map-common/layers/heatmap-layer/style.zh.md +++ /dev/null @@ -1,37 +0,0 @@ -### `options.`style - -`HeatmapLayerStyleOptions` optional - -热力样式,HeatmapLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------- | ------------------ | ----------- | ------ | -------- | -| intensity | 全局热力权重 | `number` | `3` | optional | -| radius | 热力半径,单位像素 | `number` | `20` | optional | -| opacity | 透明度 | `number` | `1` | optional | -| colorsRamp | 热力色带 | `ColorRamp` | | optional | - -热力色带,ColorRamp 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| -------- | ---------- | -------- | ------ | -------- | -| color | 颜色 | `string` | | required | -| position | 热力映射值 | `number` | | required | - -```js -{ - style: { - intensity: 3, - radius: 20, - opacity: 1, - colorsRamp: [ - { color: 'rgba(33,102,172,0.0)', position: 0 }, - { color: 'rgb(103,169,207)', position: 0.2 }, - { color: 'rgb(209,229,240)', position: 0.4 }, - { color: 'rgb(253,219,199)', position: 0.6 }, - { color: 'rgb(239,138,98)', position: 0.8 }, - { color: 'rgb(178,24,43,1.0)', position: 1 }, - ], - } -} -``` diff --git a/site/docs/map-common/layers/hexbin-layer/shape.en.md b/site/docs/map-common/layers/hexbin-layer/shape.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/hexbin-layer/shape.zh.md b/site/docs/map-common/layers/hexbin-layer/shape.zh.md deleted file mode 100644 index b4d664165..000000000 --- a/site/docs/map-common/layers/hexbin-layer/shape.zh.md +++ /dev/null @@ -1,12 +0,0 @@ -### `options.`shape - -`string` optional default: `'hexagon'` - -元素形状,分别支持 2D 与 3D 蜂窝: - -* hexagon: 蜂窝 -* hexagonColumn: 蜂窝柱 - -```js -{ shape: 'hexagon', } -``` diff --git a/site/docs/map-common/layers/lines-layer/animate.en.md b/site/docs/map-common/layers/lines-layer/animate.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/lines-layer/animate.zh.md b/site/docs/map-common/layers/lines-layer/animate.zh.md deleted file mode 100644 index 7b986c342..000000000 --- a/site/docs/map-common/layers/lines-layer/animate.zh.md +++ /dev/null @@ -1,22 +0,0 @@ -### `options.`animate - -`boolean|AnimateAttr` optional - -水波动画,AnimateAttr 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ----------- | ------------------------ | --------- | ------- | -------- | -| enable | 是否开启动画 | `boolean` | `false` | optional | -| interval | 轨迹间隔, 取值区间 0 - 1 | `number` | | optional | -| duration | 动画时间,单位秒 | `number` | | optional | -| trailLength | 轨迹长度 取值区间 0 - 1 | `number` | | optional | - -```js -{ - animate: { - duration: 4, - interval: 0.2, - trailLength: 0.1, - } -} -``` diff --git a/site/docs/map-common/layers/path-layer/size.en.md b/site/docs/map-common/layers/path-layer/size.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/path-layer/size.zh.md b/site/docs/map-common/layers/path-layer/size.zh.md deleted file mode 100644 index afe5adece..000000000 --- a/site/docs/map-common/layers/path-layer/size.zh.md +++ /dev/null @@ -1,62 +0,0 @@ -### `options.`size - -`number|object|Function` optional default: `12` - -元素大小。 - -```js -{ size: 12, } -``` - -#### `size.`field - -`string` optional - -元素大小值映射关联字段。 - -```js -{ - size: { field: 't', } -} -``` - -#### `size.`value - -`number|number[]|Function` optional - -元素大小值映射值。 - -```js -{ - size: { - field: 't', - value: ({ t }) => { - return t > 20 ? 15 : 12 - } - } -} -``` - -#### `size.`scale - -`ScaleConfig` optional default: `{}` - -关联字段的映射 scale 类型,有以下 scale 类型: - -* linear:线性 -* power:指数 -* log:对数 -* quantile:等分位 -* quantize:等间距 -* cat:枚举 - - -```js -{ - size: { - field: 't', - value: [12, 15], - scale: { type: 'quantile' }, - } -} -``` diff --git a/site/docs/map-common/layers/path-layer/source.en.md b/site/docs/map-common/layers/path-layer/source.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/path-layer/source.zh.md b/site/docs/map-common/layers/path-layer/source.zh.md deleted file mode 100644 index d3dd68a5c..000000000 --- a/site/docs/map-common/layers/path-layer/source.zh.md +++ /dev/null @@ -1,19 +0,0 @@ -### `options.`source - -`SourceOptions` required - -数据配置,详见 [Source](/zh/docs/map-api/source)。 - -```js -{ - source: { - data: [{ - path: [[58.00, 32.84],[85.7, 25.161],[101.95, 41.77],[114.96, 39.63],[117.421, 28.61]], - c: 'red', - t: 20, - n: 'chengdu' - }], - parser: { type: 'json', coordinates: 'path', } - } -} -``` diff --git a/site/docs/map-common/layers/path-layer/style.en.md b/site/docs/map-common/layers/path-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/path-layer/style.zh.md b/site/docs/map-common/layers/path-layer/style.zh.md deleted file mode 100644 index 48df1ddd5..000000000 --- a/site/docs/map-common/layers/path-layer/style.zh.md +++ /dev/null @@ -1,23 +0,0 @@ -### `options.`style - -`LinesLayerStyleOptions` optional - -元素样,LinesLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| --------- | ---------------------- | ------------------ | ------- | -------- | -| opacity | 透明度 | `number` | `1` | optional | -| lineType | 线类型,支持实线与虚线 | `‘solid’|'dash'` | ‘solid’ | optional | -| dashArray | 虚线间隔 | `[number, number]` | | optional | - -> dashArray: 虚线间隔,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。dashArray 设为 `[0,0]` 的效果为没有虚线。 - -```js -{ - style: { - opacity: 0.8, - lineType: 'dash', - dashArray: [2, 2], - } -} -``` diff --git a/site/docs/map-common/layers/text-layer/style.en.md b/site/docs/map-common/layers/text-layer/style.en.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs/map-common/layers/text-layer/style.zh.md b/site/docs/map-common/layers/text-layer/style.zh.md deleted file mode 100644 index eb130a499..000000000 --- a/site/docs/map-common/layers/text-layer/style.zh.md +++ /dev/null @@ -1,36 +0,0 @@ -`PointTextLayerStyleOptions` optional - -字体样式,PointTextLayerStyleOptions 配置如下: - -| 属性 | 描述 | 类型 | 默认值 | 是否必填 | -| ---------------- | ------------------------------------------------------------------------- | ----------- | ---------- | -------- | -| fill | 字体颜色 | `ColorAttr` | `'#fff'` | optional | -| fontSize | 字体大小 | `SizeAttr` | `12` | optional | -| opacity | 文字透明度 | `number` | `1` | optional | -| stroke | 文字描边颜色 | `string` | `'#fff'` | optional | -| strokeWidth | 文字描边宽度 | `number` | `0` | optional | -| strokeOpacity | 文字描边透明度 | `number` | `1` | optional | -| fontFamily | 文字字体 | `string` | | optional | -| fontWeight | 字体粗细程度 | `string` | | optional | -| textAllowOverlap | 是否允许文本覆盖 | `boolean` | `false` | optional | -| textAnchor | 文本相对锚点的位置 | `string` | `'center'` | optional | -| textOffset | 文本相对锚点的偏移量 | `number[]` | `[0, 0]` | optional | -| spacing | 字符间距 | `number` | `0` | optional | -| padding | 文本包围盒 padding (水平,垂直),影响碰撞检测结果,避免相邻文本靠的太近 | `number[]` | `[0, 0]` | optional | - -textAnchor 文本相对锚点的位置,支持以下相对锚点的位置: - -* 'right' -* 'top-right' -* 'left' -* 'bottom-right' -* 'left' -* 'top-left' -* 'bottom-left' -* 'bottom' -* 'bottom-right' -* 'bottom-left' -* 'top' -* 'top-right' -* 'top-left' -* 'center' diff --git a/site/examples/flowchart/basic/API.en.md b/site/examples/flowchart/basic/API.en.md deleted file mode 100644 index 94a9ff1b9..000000000 --- a/site/examples/flowchart/basic/API.en.md +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/examples/flowchart/basic/API.zh.md b/site/examples/flowchart/basic/API.zh.md deleted file mode 100644 index 94a9ff1b9..000000000 --- a/site/examples/flowchart/basic/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/examples/flowchart/basic/demo/basic.js b/site/examples/flowchart/basic/demo/basic.js deleted file mode 100644 index d27f31a3c..000000000 --- a/site/examples/flowchart/basic/demo/basic.js +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Flowchart } from '@ant-design/flowchart'; - -/** - * 样式文件引入,实际项目中不要这么用,可以考虑在对应的less\sass文件中引入 - * eg: - * style.less - * @import (inline) '../../node_modules/antd/dist/antd.css'; - * @import (inline) '../../node_modules/@ant-design/flowchart/dist/index.css'; - * demo.tsx - * import './style.less' - */ -const createLink = (src) => { - const link = document.createElement('link'); - link.rel = 'stylesheet'; - link.className = 'dynamic-link'; - link.href = src; - document.getElementsByTagName('head')[0].appendChild(link); -}; -createLink('https://unpkg.com/antd@4.24.3/dist/antd.css'); -createLink('https://unpkg.com/@ant-design/flowchart@1.2.1/dist/index.css'); - -const DemoFlowchart = () => { - return ( -

- { - console.log(d, JSON.stringify(d)); - }} - toolbarPanelProps={{ - position: { - top: 0, - left: 0, - right: 0, - }, - }} - scaleToolbarPanelProps={{ - layout: 'horizontal', - position: { - right: 0, - top: -40, - }, - style: { - width: 150, - height: 39, - left: 'auto', - background: 'transparent', - }, - }} - canvasProps={{ - position: { - top: 40, - left: 0, - right: 0, - bottom: 0, - }, - }} - nodePanelProps={{ - position: { width: 160, top: 40, bottom: 0, left: 0 }, - }} - detailPanelProps={{ - position: { width: 200, top: 40, bottom: 0, right: 0 }, - }} - /> -
- ); -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/flowchart/basic/demo/complex-form.js b/site/examples/flowchart/basic/demo/complex-form.js deleted file mode 100644 index 854e2bc7b..000000000 --- a/site/examples/flowchart/basic/demo/complex-form.js +++ /dev/null @@ -1,267 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { Flowchart, FormWrapper, EdgeService, GroupService, CanvasService, EditorPanels } from '@ant-design/flowchart'; - -/** - * 样式文件引入,实际项目中不要这么用,可以考虑在对应的less\sass文件中引入 - * eg: - * style.less - * @import (inline) '../../node_modules/antd/dist/antd.css'; - * @import (inline) '../../node_modules/@ant-design/flowchart/dist/index.css'; - * demo.tsx - * import './style.less' - */ -const createLink = (src) => { - const link = document.createElement('link'); - link.rel = 'stylesheet'; - link.className = 'dynamic-link'; - link.href = src; - document.getElementsByTagName('head')[0].appendChild(link); -}; -createLink('https://unpkg.com/antd@4.24.3/dist/antd.css'); -createLink('https://unpkg.com/@ant-design/flowchart@1.2.1/dist/index.css'); - -const PREFIX = 'flowchart-editor'; -const { InputFiled, ColorPicker, Position, InputNumberFiled, Size } = EditorPanels; - -const NodeComponent = (props) => { - const { config, plugin = {} } = props; - const { updateNode } = plugin; - const [nodeConfig, setNodeConfig] = useState({ - ...config, - }); - const onNodeConfigChange = (key, value) => { - setNodeConfig({ - ...nodeConfig, - [key]: value, - }); - updateNode({ - [key]: value, - }); - }; - useEffect(() => { - setNodeConfig({ - ...config, - }); - }, [config]); - return ( -
-
-
内容
- { - onNodeConfigChange('label', value); - }} - /> -
-
-
样式
- { - onNodeConfigChange(key, value); - }} - /> - { - onNodeConfigChange(key, value); - }} - /> - { - onNodeConfigChange('fill', value); - }} - /> - { - onNodeConfigChange('stroke', value); - }} - /> -
- { - onNodeConfigChange('fontSize', value); - }} - /> - { - onNodeConfigChange('fontFill', value); - }} - /> -
-
-
- ); -}; - -const NodeService = (props) => { - return ( - - {(config, plugin) => } - - ); -}; - -export const controlMapService = (controlMap) => { - controlMap.set('custom-node-service', NodeService); - controlMap.set('custom-edge-service', EdgeService); - controlMap.set('custom-group-service', GroupService); - controlMap.set('custom-canvas-service', CanvasService); - return controlMap; -}; - -const formSchemaService = async (args) => { - const { targetType } = args; - const isGroup = args.targetData?.isGroup; - const groupSchema = { - tabs: [ - { - name: '设置', - groups: [ - { - name: 'groupName', - controls: [ - { - label: '分组名', - name: 'custom-group-service', - shape: 'custom-group-service', - placeholder: '分组名称', - }, - ], - }, - ], - }, - ], - }; - const nodeSchema = { - tabs: [ - { - name: '设置', - groups: [ - { - name: 'groupName', - controls: [ - { - label: '节点名', - name: 'custom-node-service', - shape: 'custom-node-service', - placeholder: '节点名称', - }, - ], - }, - ], - }, - ], - }; - const edgeSchema = { - tabs: [ - { - name: '设置', - groups: [ - { - name: 'groupName', - controls: [ - { - label: '边', - name: 'custom-edge-service', - shape: 'custom-edge-service', - placeholder: '边名称', - }, - ], - }, - ], - }, - ], - }; - if (isGroup) { - return groupSchema; - } - if (targetType === 'node') { - return nodeSchema; - } - if (targetType === 'edge') { - return edgeSchema; - } - return { - tabs: [ - { - name: '设置', - groups: [ - { - name: 'groupName', - controls: [ - { - label: '', - name: 'custom-canvas-service', - shape: 'custom-canvas-service', - }, - ], - }, - ], - }, - ], - }; -}; - -const DemoFlowchart = () => { - return ( -
- { - console.log(d); - }} - toolbarPanelProps={{ - position: { - top: 0, - left: 0, - right: 0, - }, - }} - scaleToolbarPanelProps={{ - layout: 'horizontal', - position: { - right: 0, - top: -40, - }, - style: { - width: 150, - height: 39, - left: 'auto', - background: 'transparent', - }, - }} - canvasProps={{ - position: { - top: 40, - left: 0, - right: 0, - bottom: 0, - }, - }} - nodePanelProps={{ - position: { width: 160, top: 40, bottom: 0, left: 0 }, - }} - detailPanelProps={{ - position: { width: 200, top: 40, bottom: 0, right: 0 }, - controlMapService, - formSchemaService, - }} - /> -
- ); -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/flowchart/basic/demo/custom-form.js b/site/examples/flowchart/basic/demo/custom-form.js deleted file mode 100644 index c4f7049d4..000000000 --- a/site/examples/flowchart/basic/demo/custom-form.js +++ /dev/null @@ -1,173 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { Input } from 'antd'; -import { Flowchart, FormWrapper } from '@ant-design/flowchart'; - -/** - * 样式文件引入,实际项目中不要这么用,可以考虑在对应的less\sass文件中引入 - * eg: - * style.less - * @import (inline) '../../node_modules/antd/dist/antd.css'; - * @import (inline) '../../node_modules/@ant-design/flowchart/dist/index.css'; - * demo.tsx - * import './style.less' - */ -const createLink = (src) => { - const link = document.createElement('link'); - link.rel = 'stylesheet'; - link.className = 'dynamic-link'; - link.href = src; - document.getElementsByTagName('head')[0].appendChild(link); -}; -createLink('https://unpkg.com/antd@4.24.3/dist/antd.css'); -createLink('https://unpkg.com/@ant-design/flowchart@1.2.1/dist/index.css'); - -const InputComponent = (props) => { - const { config, plugin = {} } = props; - const { placeholder, disabled } = config; - const { updateNode } = plugin; - const [label, setLabel] = useState(config?.label); - - const onLabelChange = async (e) => { - setLabel(e.target.value); - updateNode({ - label: e.target.value, - }); - }; - - useEffect(() => { - setLabel(config?.label); - }, [config]); - - return ( -
- - -
- ); -}; - -const RenameService = (props) => { - return ( - - {(config, plugin) => } - - ); -}; - -const CanvasService = (props) => { - return

主画布

; -}; - -export const controlMapService = (controlMap) => { - controlMap.set('rename-service', RenameService); - controlMap.set('canvas-service', CanvasService); - return controlMap; -}; - -const formSchemaService = async (args) => { - const { targetType } = args; - const isGroup = args.targetData?.isGroup; - const nodeSchema = { - tabs: [ - { - name: '设置', - groups: [ - { - name: 'groupName', - controls: [ - { - label: '节点名', - name: '自定义form', - shape: 'rename-service', - placeholder: '节点名称', - }, - ], - }, - ], - }, - ], - }; - - if (isGroup) { - // TODO - } - - if (targetType === 'node') { - return nodeSchema; - } - - if (targetType === 'edge') { - // TODO - } - - return { - tabs: [ - { - name: '设置', - groups: [ - { - name: 'groupName', - controls: [ - { - label: '', - name: 'canvas-service', - shape: 'canvas-service', - }, - ], - }, - ], - }, - ], - }; -}; - -const DemoFlowchart = () => { - return ( -
- { - console.log(d); - }} - toolbarPanelProps={{ - position: { - top: 0, - left: 0, - right: 0, - }, - }} - scaleToolbarPanelProps={{ - layout: 'horizontal', - position: { - right: 0, - top: -40, - }, - style: { - width: 150, - height: 39, - left: 'auto', - background: 'transparent', - }, - }} - canvasProps={{ - position: { - top: 40, - left: 0, - right: 0, - bottom: 0, - }, - }} - nodePanelProps={{ - position: { width: 160, top: 40, bottom: 0, left: 0 }, - }} - detailPanelProps={{ - position: { width: 200, top: 40, bottom: 0, right: 0 }, - controlMapService, - formSchemaService, - }} - /> -
- ); -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/flowchart/basic/demo/custom-node.js b/site/examples/flowchart/basic/demo/custom-node.js deleted file mode 100644 index a9309178d..000000000 --- a/site/examples/flowchart/basic/demo/custom-node.js +++ /dev/null @@ -1,114 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Flowchart } from '@ant-design/flowchart'; - -/** - * 样式文件引入,实际项目中不要这么用,可以考虑在对应的less\sass文件中引入 - * eg: - * style.less - * @import (inline) '../../node_modules/antd/dist/antd.css'; - * @import (inline) '../../node_modules/@ant-design/flowchart/dist/index.css'; - * demo.tsx - * import './style.less' - */ -const createLink = (src) => { - const link = document.createElement('link'); - link.rel = 'stylesheet'; - link.className = 'dynamic-link'; - link.href = src; - document.getElementsByTagName('head')[0].appendChild(link); -}; -createLink('https://unpkg.com/antd@4.24.3/dist/antd.css'); -createLink('https://unpkg.com/@ant-design/flowchart@1.2.1/dist/index.css'); - -const IndicatorNode = (props) => { - const { size = { width: 120, height: 50 }, data } = props; - const { width, height } = size; - const { label = '自定义节点', stroke = '#ccc', fill = '#fff', fontFill, fontSize } = data; - - return ( -
-
{label}
-
- ); -}; - -const DemoFlowchart = () => { - return ( -
- { - console.log(d); - }} - toolbarPanelProps={{ - position: { - top: 0, - left: 0, - right: 0, - }, - }} - scaleToolbarPanelProps={{ - layout: 'horizontal', - position: { - right: 0, - top: -40, - }, - style: { - width: 150, - height: 39, - left: 'auto', - background: 'transparent', - }, - }} - canvasProps={{ - position: { - top: 40, - left: 0, - right: 0, - bottom: 0, - }, - }} - nodePanelProps={{ - position: { width: 160, top: 40, bottom: 0, left: 0 }, - defaultActiveKey: ['custom'], // ['custom', 'official'] - registerNode: { - title: '指标节点', - nodes: [ - { - component: IndicatorNode, - popover: () =>
指标节点
, - name: 'custom-node-indicator', - width: 120, - height: 50, - label: '自定义节点', - }, - ], - }, - }} - detailPanelProps={{ - position: { width: 200, top: 40, bottom: 0, right: 0 }, - }} - /> -
- ); -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/flowchart/basic/demo/meta.json b/site/examples/flowchart/basic/demo/meta.json deleted file mode 100644 index 5f6ab8e63..000000000 --- a/site/examples/flowchart/basic/demo/meta.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "title": { - "zh": "中文分类", - "en": "Category" - }, - "demos": [ - { - "filename": "basic.js", - "title": { - "zh": "基础流程图", - "en": "Basic flowchart" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/ABozcNxHpq/a2219011-3e9b-47d2-82a3-376fc779a065.png" - }, - { - "filename": "custom-node.js", - "title": { - "zh": "自定义节点", - "en": "Custom node" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/4o%26HrctHA3/bcbfb761-4fbb-4bc9-8875-8e71853f3253.png" - }, - { - "filename": "custom-form.js", - "title": { - "zh": "自定义表单", - "en": "Custom form" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/zJ7Rye47U6/c5108c8c-d8f6-43bc-b18c-c93f8de7ac31.png" - }, - { - "filename": "read.js", - "title": { - "zh": "阅读态", - "en": "Reading state" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/EMItQJlo%24%24/42341287-3b55-4bcd-b62c-4d2e69298a0b.png" - }, - { - "filename": "complex-form.js", - "title": { - "zh": "自定义表单-结合内部组件", - "en": "Custom form with internal components" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/gDwaA%24IRr5/cdbe1478-ba99-44c7-b9f3-fc30c13698a1.png" - } - ] -} diff --git a/site/examples/flowchart/basic/demo/read.js b/site/examples/flowchart/basic/demo/read.js deleted file mode 100644 index 206ec6c85..000000000 --- a/site/examples/flowchart/basic/demo/read.js +++ /dev/null @@ -1,807 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Flowchart } from '@ant-design/flowchart'; - -/** - * 样式文件引入,实际项目中不要这么用,可以考虑在对应的less\sass文件中引入 - * eg: - * style.less - * @import (inline) '../../node_modules/antd/dist/antd.css'; - * @import (inline) '../../node_modules/@ant-design/flowchart/dist/index.css'; - * demo.tsx - * import './style.less' - */ -const createLink = (src) => { - const link = document.createElement('link'); - link.rel = 'stylesheet'; - link.className = 'dynamic-link'; - link.href = src; - document.getElementsByTagName('head')[0].appendChild(link); -}; -createLink('https://unpkg.com/antd@4.24.3/dist/antd.css'); -createLink('https://unpkg.com/@ant-design/flowchart@1.2.1/dist/index.css'); - -const DATA = { - nodes: [ - { - id: 'node-63cd90e9-090b-4a52-b003-084fe8512d37', - parentId: '', - renderKey: 'Terminal', - name: 'Terminal', - label: '开始', - width: 100, - height: 40, - ports: { - items: [ - { group: 'top', id: '3c0f5d34-3ab9-40a6-bfd8-bfe736fd8b59' }, - { group: 'right', id: '1911685f-a894-4e63-ace4-db386ae97bad' }, - { group: 'bottom', id: '25aed5b5-ad0e-4638-8775-de00294097f1' }, - { group: 'left', id: '9989c947-1b39-4635-b9aa-bb5e6ad9351e' }, - ], - groups: { - top: { - position: { name: 'top' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - right: { - position: { name: 'right' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - bottom: { - position: { name: 'bottom' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - left: { - position: { name: 'left' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - }, - }, - isLeaf: true, - x: 580, - y: 80, - zIndex: 10, - stroke: '#417505', - }, - { - id: 'node-915545b7-7723-4ccc-8970-3309da79a0d5', - parentId: '', - renderKey: 'Process', - name: 'Process', - label: '步骤1', - width: 100, - height: 40, - ports: { - items: [ - { group: 'top', id: '7643ce5d-4e4c-4776-affd-6f2ca0335dcc' }, - { group: 'right', id: 'fea7703c-2d37-46f0-b310-0955864644ba' }, - { group: 'bottom', id: '1fa43052-ace7-44ff-b64b-82fdf3a48298' }, - { group: 'left', id: '497cc3ac-68f4-4c50-b99e-1c8fa7a7c457' }, - ], - groups: { - top: { - position: { name: 'top' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - right: { - position: { name: 'right' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - bottom: { - position: { name: 'bottom' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - left: { - position: { name: 'left' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - }, - }, - isLeaf: true, - x: 580, - y: 180, - zIndex: 10, - stroke: '#000000', - fill: '#7ed321', - }, - { - id: 'node-79008d10-2f11-459c-888b-032ae29b8952', - parentId: '', - renderKey: 'Decision', - name: 'Decision', - label: '条件P', - width: 100, - height: 60, - ports: { - items: [ - { group: 'top', id: 'a90ca41d-3c7d-46d3-9a09-0a68e5923822' }, - { group: 'right', id: '5a5874a5-39ba-432a-b595-ff043912c57f' }, - { group: 'bottom', id: 'd007cc53-7925-4f82-87ac-673bd96404e2' }, - { group: 'left', id: 'd872380e-a3ba-4147-9a77-3a7b0d1c2f45' }, - ], - groups: { - top: { - position: { name: 'top' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - right: { - position: { name: 'right' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - bottom: { - position: { name: 'bottom' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - left: { - position: { name: 'left' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - }, - }, - isLeaf: true, - x: 580, - y: 278, - zIndex: 10, - fill: '#f8e71c', - stroke: '#000000', - }, - { - id: 'node-c657806d-dd71-4a89-b4ec-fc5fad51b843', - parentId: '', - renderKey: 'Process', - name: 'Process', - label: '步骤2', - width: 100, - height: 40, - ports: { - items: [ - { group: 'top', id: 'ec0aa7a6-40fe-4082-94e0-d98742ab062f' }, - { group: 'right', id: '79e56de6-b111-4b23-a89f-7dc244c0b02e' }, - { group: 'bottom', id: '8a32bebe-4fe8-4482-a40d-0a1ae7537246' }, - { group: 'left', id: 'ed13ee18-2198-4002-9bb2-89bc2e28ee72' }, - ], - groups: { - top: { - position: { name: 'top' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - right: { - position: { name: 'right' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - bottom: { - position: { name: 'bottom' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - left: { - position: { name: 'left' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - }, - }, - isLeaf: true, - x: 580, - y: 402, - zIndex: 10, - stroke: '#50e3c2', - }, - { - id: 'node-f6ccc339-9a05-4bf1-ad25-bfb956ff9388', - parentId: '', - renderKey: 'Terminal', - name: 'Terminal', - label: '结束', - width: 100, - height: 40, - ports: { - items: [ - { group: 'top', id: '481bf3a3-e4fc-40fc-be77-766a8ecb9360' }, - { group: 'right', id: 'ffc158ad-8ad5-4e33-a68a-50e2f1eb4794' }, - { group: 'bottom', id: 'efad4b89-681a-4c4a-b30a-6868cc2219a3' }, - { group: 'left', id: '588ceaae-2f21-4040-9325-ccae4d44484c' }, - ], - groups: { - top: { - position: { name: 'top' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - right: { - position: { name: 'right' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - bottom: { - position: { name: 'bottom' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - left: { - position: { name: 'left' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - }, - }, - isLeaf: true, - x: 580, - y: 499, - zIndex: 10, - stroke: '#bd10e0', - }, - { - id: 'node-e07e6834-7d15-4b3c-9b40-8f234fca363e', - parentId: '', - renderKey: 'Process', - name: 'Process', - label: '步骤3', - width: 100, - height: 40, - ports: { - items: [ - { group: 'top', id: '273b21fc-7b54-4819-83ca-3b0547976d5d' }, - { group: 'right', id: '42fce1fe-d257-4a08-8ac0-5804403e0ed0' }, - { group: 'bottom', id: '29465bdc-72ef-445d-9dc3-ac833c855658' }, - { group: 'left', id: '281f8f42-b772-4507-a56b-718f8ecc2a9b' }, - ], - groups: { - top: { - position: { name: 'top' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - right: { - position: { name: 'right' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - bottom: { - position: { name: 'bottom' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - left: { - position: { name: 'left' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - }, - }, - isLeaf: true, - x: 810, - y: 288, - zIndex: 10, - stroke: '#000000', - fill: '#7ed321', - group: '5f8e6625-9a79-4d0e-9ae3-023421a10c60', - isCollapsed: false, - }, - { - id: 'node-3f701e75-5116-4a62-8717-1fe8f71c920a', - parentId: '', - renderKey: 'Database', - name: 'Database', - label: '步骤4', - width: 100, - height: 40, - ports: { - items: [ - { group: 'top', id: '6ef1c94f-4083-4bd0-b35a-f68c6744f374' }, - { group: 'right', id: 'add1041d-6c42-4d9a-866b-1a2d16d74461' }, - { group: 'bottom', id: 'e2e4400d-b102-4685-a288-df626d54efa3' }, - { group: 'left', id: '85c0f07c-e618-4734-b541-1676eefa4cf0' }, - ], - groups: { - top: { - position: { name: 'top' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - right: { - position: { name: 'right' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - bottom: { - position: { name: 'bottom' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - left: { - position: { name: 'left' }, - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - style: { visibility: 'hidden' }, - }, - }, - zIndex: 10, - }, - }, - }, - isLeaf: true, - x: 811, - y: 374, - zIndex: 10, - stroke: '#bd10e0', - group: '5f8e6625-9a79-4d0e-9ae3-023421a10c60', - isCollapsed: false, - }, - { - id: '5f8e6625-9a79-4d0e-9ae3-023421a10c60', - renderKey: 'GROUP_NODE_RENDER_ID', - groupChildren: ['node-e07e6834-7d15-4b3c-9b40-8f234fca363e', 'node-3f701e75-5116-4a62-8717-1fe8f71c920a'], - groupCollapsedSize: { width: 200, height: 40 }, - label: '异常处理', - zIndex: 10, - width: 170, - height: 190, - groupChildrenSize: { width: 182, height: 192 }, - x: 770, - y: 252, - isGroup: true, - stroke: '#f5a623', - }, - ], - edges: [ - { - id: '[object Object]:25aed5b5-ad0e-4638-8775-de00294097f1-[object Object]:7643ce5d-4e4c-4776-affd-6f2ca0335dcc', - targetPortId: '7643ce5d-4e4c-4776-affd-6f2ca0335dcc', - sourcePortId: '25aed5b5-ad0e-4638-8775-de00294097f1', - source: { cell: 'node-63cd90e9-090b-4a52-b003-084fe8512d37', port: '25aed5b5-ad0e-4638-8775-de00294097f1' }, - target: { cell: 'node-915545b7-7723-4ccc-8970-3309da79a0d5', port: '7643ce5d-4e4c-4776-affd-6f2ca0335dcc' }, - zIndex: 1, - attrs: { - line: { - stroke: '#A2B1C3', - targetMarker: { name: 'block', width: 12, height: 8 }, - strokeDasharray: '5 5', - strokeWidth: 1, - }, - }, - data: { - targetPortId: '7643ce5d-4e4c-4776-affd-6f2ca0335dcc', - sourcePortId: '25aed5b5-ad0e-4638-8775-de00294097f1', - source: 'node-63cd90e9-090b-4a52-b003-084fe8512d37', - target: 'node-915545b7-7723-4ccc-8970-3309da79a0d5', - }, - }, - { - id: '[object Object]:1fa43052-ace7-44ff-b64b-82fdf3a48298-[object Object]:a90ca41d-3c7d-46d3-9a09-0a68e5923822', - targetPortId: 'a90ca41d-3c7d-46d3-9a09-0a68e5923822', - sourcePortId: '1fa43052-ace7-44ff-b64b-82fdf3a48298', - source: { cell: 'node-915545b7-7723-4ccc-8970-3309da79a0d5', port: '1fa43052-ace7-44ff-b64b-82fdf3a48298' }, - target: { cell: 'node-79008d10-2f11-459c-888b-032ae29b8952', port: 'a90ca41d-3c7d-46d3-9a09-0a68e5923822' }, - zIndex: 1, - attrs: { - line: { - stroke: '#A2B1C3', - targetMarker: { name: 'block', width: 12, height: 8 }, - strokeDasharray: '5 5', - strokeWidth: 1, - }, - }, - data: { - targetPortId: 'a90ca41d-3c7d-46d3-9a09-0a68e5923822', - sourcePortId: '1fa43052-ace7-44ff-b64b-82fdf3a48298', - source: 'node-915545b7-7723-4ccc-8970-3309da79a0d5', - target: 'node-79008d10-2f11-459c-888b-032ae29b8952', - }, - }, - { - id: '[object Object]:d007cc53-7925-4f82-87ac-673bd96404e2-[object Object]:ec0aa7a6-40fe-4082-94e0-d98742ab062f', - targetPortId: 'ec0aa7a6-40fe-4082-94e0-d98742ab062f', - sourcePortId: 'd007cc53-7925-4f82-87ac-673bd96404e2', - source: { cell: 'node-79008d10-2f11-459c-888b-032ae29b8952', port: 'd007cc53-7925-4f82-87ac-673bd96404e2' }, - target: { cell: 'node-c657806d-dd71-4a89-b4ec-fc5fad51b843', port: 'ec0aa7a6-40fe-4082-94e0-d98742ab062f' }, - zIndex: 1, - attrs: { - line: { - stroke: '#50e3c2', - targetMarker: { name: 'block', width: 12, height: 8 }, - strokeDasharray: '5 5', - strokeWidth: 1, - label: '是', - }, - }, - data: { - targetPortId: 'ec0aa7a6-40fe-4082-94e0-d98742ab062f', - sourcePortId: 'd007cc53-7925-4f82-87ac-673bd96404e2', - source: 'node-79008d10-2f11-459c-888b-032ae29b8952', - target: 'node-c657806d-dd71-4a89-b4ec-fc5fad51b843', - }, - stroke: '#50e3c2', - label: '是', - }, - { - id: '[object Object]:8a32bebe-4fe8-4482-a40d-0a1ae7537246-[object Object]:481bf3a3-e4fc-40fc-be77-766a8ecb9360', - targetPortId: '481bf3a3-e4fc-40fc-be77-766a8ecb9360', - sourcePortId: '8a32bebe-4fe8-4482-a40d-0a1ae7537246', - source: { cell: 'node-c657806d-dd71-4a89-b4ec-fc5fad51b843', port: '8a32bebe-4fe8-4482-a40d-0a1ae7537246' }, - target: { cell: 'node-f6ccc339-9a05-4bf1-ad25-bfb956ff9388', port: '481bf3a3-e4fc-40fc-be77-766a8ecb9360' }, - zIndex: 1, - attrs: { - line: { - stroke: '#bd10e0', - targetMarker: { name: 'block', width: 12, height: 8 }, - strokeDasharray: '5 5', - strokeWidth: 1, - }, - }, - data: { - targetPortId: '481bf3a3-e4fc-40fc-be77-766a8ecb9360', - sourcePortId: '8a32bebe-4fe8-4482-a40d-0a1ae7537246', - source: 'node-c657806d-dd71-4a89-b4ec-fc5fad51b843', - target: 'node-f6ccc339-9a05-4bf1-ad25-bfb956ff9388', - }, - stroke: '#bd10e0', - }, - { - id: '[object Object]:5a5874a5-39ba-432a-b595-ff043912c57f-[object Object]:281f8f42-b772-4507-a56b-718f8ecc2a9b', - targetPortId: '281f8f42-b772-4507-a56b-718f8ecc2a9b', - sourcePortId: '5a5874a5-39ba-432a-b595-ff043912c57f', - source: { cell: 'node-79008d10-2f11-459c-888b-032ae29b8952', port: '5a5874a5-39ba-432a-b595-ff043912c57f' }, - target: { cell: 'node-e07e6834-7d15-4b3c-9b40-8f234fca363e', port: '281f8f42-b772-4507-a56b-718f8ecc2a9b' }, - zIndex: 1, - attrs: { - line: { - stroke: '#f5a623', - targetMarker: { name: 'block', width: 12, height: 8 }, - strokeDasharray: '5 5', - strokeWidth: 1, - label: '否', - }, - }, - data: { - targetPortId: '281f8f42-b772-4507-a56b-718f8ecc2a9b', - sourcePortId: '5a5874a5-39ba-432a-b595-ff043912c57f', - source: 'node-79008d10-2f11-459c-888b-032ae29b8952', - target: 'node-e07e6834-7d15-4b3c-9b40-8f234fca363e', - }, - label: '否', - stroke: '#f5a623', - }, - { - id: '[object Object]:29465bdc-72ef-445d-9dc3-ac833c855658-[object Object]:6ef1c94f-4083-4bd0-b35a-f68c6744f374', - targetPortId: '6ef1c94f-4083-4bd0-b35a-f68c6744f374', - sourcePortId: '29465bdc-72ef-445d-9dc3-ac833c855658', - source: { cell: 'node-e07e6834-7d15-4b3c-9b40-8f234fca363e', port: '29465bdc-72ef-445d-9dc3-ac833c855658' }, - target: { cell: 'node-3f701e75-5116-4a62-8717-1fe8f71c920a', port: '6ef1c94f-4083-4bd0-b35a-f68c6744f374' }, - zIndex: 1, - attrs: { - line: { - stroke: '#A2B1C3', - targetMarker: { name: 'block', width: 12, height: 8 }, - strokeDasharray: '5 5', - strokeWidth: 1, - }, - }, - data: { - targetPortId: '6ef1c94f-4083-4bd0-b35a-f68c6744f374', - sourcePortId: '29465bdc-72ef-445d-9dc3-ac833c855658', - source: 'node-e07e6834-7d15-4b3c-9b40-8f234fca363e', - target: 'node-3f701e75-5116-4a62-8717-1fe8f71c920a', - }, - }, - { - id: '[object Object]:e2e4400d-b102-4685-a288-df626d54efa3-[object Object]:ffc158ad-8ad5-4e33-a68a-50e2f1eb4794', - targetPortId: 'ffc158ad-8ad5-4e33-a68a-50e2f1eb4794', - sourcePortId: 'e2e4400d-b102-4685-a288-df626d54efa3', - source: { cell: 'node-3f701e75-5116-4a62-8717-1fe8f71c920a', port: 'e2e4400d-b102-4685-a288-df626d54efa3' }, - target: { cell: 'node-f6ccc339-9a05-4bf1-ad25-bfb956ff9388', port: 'ffc158ad-8ad5-4e33-a68a-50e2f1eb4794' }, - zIndex: 1, - attrs: { - line: { - stroke: '#A2B1C3', - targetMarker: { name: 'block', width: 12, height: 8 }, - strokeDasharray: '5 5', - strokeWidth: 1, - }, - }, - data: { - targetPortId: 'ffc158ad-8ad5-4e33-a68a-50e2f1eb4794', - sourcePortId: 'e2e4400d-b102-4685-a288-df626d54efa3', - source: 'node-3f701e75-5116-4a62-8717-1fe8f71c920a', - target: 'node-f6ccc339-9a05-4bf1-ad25-bfb956ff9388', - }, - }, - ], -}; - -const DemoFlowchart = () => { - return ( -
- -
- ); -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/flowchart/basic/index.en.md b/site/examples/flowchart/basic/index.en.md deleted file mode 100644 index 7a112c6b8..000000000 --- a/site/examples/flowchart/basic/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Flowchart -order: 0 ---- diff --git a/site/examples/flowchart/basic/index.zh.md b/site/examples/flowchart/basic/index.zh.md deleted file mode 100644 index ef985ca9d..000000000 --- a/site/examples/flowchart/basic/index.zh.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 流程图 -order: 0 ---- - diff --git a/site/examples/line/basic/API.en.md b/site/examples/line/basic/API.en.md new file mode 100644 index 000000000..183d7f25f --- /dev/null +++ b/site/examples/line/basic/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/line/basic/API.zh.md b/site/examples/line/basic/API.zh.md new file mode 100644 index 000000000..02e374c79 --- /dev/null +++ b/site/examples/line/basic/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/line/basic/demo/basic.js b/site/examples/line/basic/demo/basic.js new file mode 100644 index 000000000..8542f8d09 --- /dev/null +++ b/site/examples/line/basic/demo/basic.js @@ -0,0 +1,23 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Line } from '@ant-design/plots'; + +const DemoLine = () => { + const props = { + data: [ + { genre: 'Sports', sold: 275 }, + { genre: 'Strategy', sold: 115 }, + { genre: 'Action', sold: 120 }, + { genre: 'Shooter', sold: 350 }, + { genre: 'Other', sold: 150 }, + ], + encode: { + x: 'genre', + y: 'sold', + color: 'genre', + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/mind-map-graph/demo/meta.json b/site/examples/line/basic/demo/meta.json similarity index 64% rename from site/examples/relation-graph/mind-map-graph/demo/meta.json rename to site/examples/line/basic/demo/meta.json index 62edf01d2..ba97e2b6b 100644 --- a/site/examples/relation-graph/mind-map-graph/demo/meta.json +++ b/site/examples/line/basic/demo/meta.json @@ -7,10 +7,10 @@ { "filename": "basic.js", "title": { - "zh": "脑图", - "en": "Basic" + "zh": "基础折线图", + "en": "Basic line plot" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/%24cS0yQQN%24/c69ba993-ca99-4ba1-a5d8-5ba824b83d95.png" + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" } ] } diff --git a/site/examples/line/basic/design.en.md b/site/examples/line/basic/design.en.md new file mode 100644 index 000000000..e041c7a04 --- /dev/null +++ b/site/examples/line/basic/design.en.md @@ -0,0 +1,29 @@ +--- +title: 设计规范 +--- + +## 何时使用 + +柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 + +## 数据类型 + +| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | +| ---------------- | -------------------------------------------------------------------------------------------------- | +| 功能 | 对比分类数据的数值大小 | +| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | +| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | + +## 用法建议 + +design + +## 元素 + +design + +- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 +- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 +- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 +- 标签:用来解释数据点的值。 +- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/line/basic/design.zh.md b/site/examples/line/basic/design.zh.md new file mode 100644 index 000000000..e041c7a04 --- /dev/null +++ b/site/examples/line/basic/design.zh.md @@ -0,0 +1,29 @@ +--- +title: 设计规范 +--- + +## 何时使用 + +柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 + +## 数据类型 + +| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | +| ---------------- | -------------------------------------------------------------------------------------------------- | +| 功能 | 对比分类数据的数值大小 | +| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | +| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | + +## 用法建议 + +design + +## 元素 + +design + +- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 +- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 +- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 +- 标签:用来解释数据点的值。 +- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/line/basic/index.en.md b/site/examples/line/basic/index.en.md new file mode 100644 index 000000000..150a6da40 --- /dev/null +++ b/site/examples/line/basic/index.en.md @@ -0,0 +1,4 @@ +--- +title: Basic line +order: 0 +--- \ No newline at end of file diff --git a/site/examples/line/basic/index.zh.md b/site/examples/line/basic/index.zh.md new file mode 100644 index 000000000..273a184ec --- /dev/null +++ b/site/examples/line/basic/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 基础折线图 +order: 0 +--- + +柱状图用于描述分类数据之间的对比,如果我们把时间周期,如周、月、年,也理解为一种分类数据 (time category),那么柱状图也可以用于描述时间周期之间的数值比较。 diff --git a/site/examples/map-advanced-plot/muti-layers/API.en.md b/site/examples/map-advanced-plot/muti-layers/API.en.md deleted file mode 100644 index 496de5e5e..000000000 --- a/site/examples/map-advanced-plot/muti-layers/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-advanced-plot/muti-layers/API.zh.md b/site/examples/map-advanced-plot/muti-layers/API.zh.md deleted file mode 100644 index 3d593c389..000000000 --- a/site/examples/map-advanced-plot/muti-layers/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-advanced-plot/muti-layers/demo/meta.json b/site/examples/map-advanced-plot/muti-layers/demo/meta.json deleted file mode 100644 index f02abb5bc..000000000 --- a/site/examples/map-advanced-plot/muti-layers/demo/meta.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "title": { - "zh": "分类", - "en": "Category" - }, - "demos": [ - { - "filename": "wind-field.js", - "title": { - "zh": "风场图", - "en": "Wind field map" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/wuc%26qDZ5Ov/4b425019-66be-4ccc-84b9-c314ed6b3313.png" - } - ] -} diff --git a/site/examples/map-advanced-plot/muti-layers/demo/wind-field.js b/site/examples/map-advanced-plot/muti-layers/demo/wind-field.js deleted file mode 100644 index 7937f0cc9..000000000 --- a/site/examples/map-advanced-plot/muti-layers/demo/wind-field.js +++ /dev/null @@ -1,67 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { L7PlotMap } from '@ant-design/maps'; - -const DemoL7PlotMap = () => { - const [data, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/bmw-prod/7455fead-1dc0-458d-b91a-fb4cf99e701e.txt') - .then((response) => response.text()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - if (!data.length) { - return null; - } - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [60, 40.7128], - zoom: 2, - }, - layers: [ - { - type: 'arcLayer', - source: { - data: data, - parser: { - type: 'csv', - x: 'lng1', - y: 'lat1', - x1: 'lng2', - y1: 'lat2', - }, - }, - shape: 'arc', - size: 0.5, - color: '#6495ED', - style: { - opacity: 0.8, - }, - animate: { - duration: 4, - interval: 0.2, - trailLength: 0.6, - }, - }, - ], - zoom: { - position: 'bottomright', - }, - scale: { - position: 'bottomright', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-advanced-plot/muti-layers/index.en.md b/site/examples/map-advanced-plot/muti-layers/index.en.md deleted file mode 100644 index 4e0cd4299..000000000 --- a/site/examples/map-advanced-plot/muti-layers/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Muti Layers -order: 0 ---- diff --git a/site/examples/map-advanced-plot/muti-layers/index.zh.md b/site/examples/map-advanced-plot/muti-layers/index.zh.md deleted file mode 100644 index ea3ae24b1..000000000 --- a/site/examples/map-advanced-plot/muti-layers/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 多图层 -order: 0 ---- diff --git a/site/examples/map-area/division/API.en.md b/site/examples/map-area/division/API.en.md deleted file mode 100644 index d7366a808..000000000 --- a/site/examples/map-area/division/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-area/division/API.zh.md b/site/examples/map-area/division/API.zh.md deleted file mode 100644 index a16845937..000000000 --- a/site/examples/map-area/division/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-area/division/demo/europe-pop-est.js b/site/examples/map-area/division/demo/europe-pop-est.js deleted file mode 100644 index 3d135ce42..000000000 --- a/site/examples/map-area/division/demo/europe-pop-est.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { AreaMap } from '@ant-design/maps'; - -const DemoAreaMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/EIXm%24lEPD%24/europe.geo.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - map: { - type: 'mapbox', - style: 'blank', - center: [120.19382669582967, 30.258134], - zoom: 3, - pitch: 0, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - }, - autoFit: true, - color: { - field: 'pop_est', - value: ['rgb(239,243,255)', 'rgb(189,215,231)', 'rgb(107,174,214)', 'rgb(49,130,189)', 'rgb(8,81,156)'], - scale: { - type: 'quantile', - }, - }, - style: { - opacity: 1, - stroke: 'rgb(93,112,146)', - lineWidth: 0.6, - lineOpacity: 1, - }, - state: { - active: true, - }, - label: { - visible: true, - field: 'name', - style: { - fill: '#000', - opacity: 0.8, - fontSize: 10, - stroke: '#fff', - strokeWidth: 1.5, - textAllowOverlap: false, - padding: [5, 5], - }, - }, - tooltip: { - items: ['name', 'name_zh', 'pop_est'], - }, - zoom: { - position: 'bottomright', - }, - legend: { - position: 'bottomleft', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-area/division/demo/meta.json b/site/examples/map-area/division/demo/meta.json deleted file mode 100644 index 6b334230b..000000000 --- a/site/examples/map-area/division/demo/meta.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "title": { - "zh": "分类", - "en": "Category" - }, - "demos": [ - { - "filename": "europe-pop-est.js", - "title": { - "zh": "2019 欧洲总人口数", - "en": "2019 Europe pop-est" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/lxHiE3f%24jB/2ab86960-79ee-477d-a656-8f86d71de072.png" - }, - { - "filename": "us-states-density.js", - "title": { - "zh": "美国人口密度", - "en": "US State density" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/IsrqSMt3SL/f9238dd6-fd88-4200-a624-3c27a8ae677e.png" - } - ] -} diff --git a/site/examples/map-area/division/demo/us-states-density.js b/site/examples/map-area/division/demo/us-states-density.js deleted file mode 100644 index d0c77dd16..000000000 --- a/site/examples/map-area/division/demo/us-states-density.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { AreaMap } from '@ant-design/maps'; - -const DemoAreaMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/basement_prod/d36ad90e-3902-4742-b8a2-d93f7e5dafa2.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - map: { - type: 'mapbox', - style: 'blank', - center: [120.19382669582967, 30.258134], - zoom: 3, - pitch: 0, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - }, - autoFit: true, - color: { - field: 'density', - value: ['#fee5d9', '#fcae91', '#fb6a4a', '#de2d26', '#a50f15'], - scale: { - type: 'quantile', - }, - }, - style: { - opacity: 1, - stroke: '#fff', - lineWidth: 0.6, - lineOpacity: 1, - }, - state: { - active: true, - }, - label: { - visible: true, - field: 'name', - style: { - fill: '#000', - opacity: 0.8, - fontSize: 10, - stroke: '#fff', - strokeWidth: 1.5, - textAllowOverlap: false, - padding: [8, 8], - }, - }, - tooltip: { - items: ['name', 'density'], - }, - zoom: { - position: 'bottomright', - }, - legend: { - position: 'bottomleft', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-area/division/index.en.md b/site/examples/map-area/division/index.en.md deleted file mode 100644 index e6e1db201..000000000 --- a/site/examples/map-area/division/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Division Fill -order: 0 ---- diff --git a/site/examples/map-area/division/index.zh.md b/site/examples/map-area/division/index.zh.md deleted file mode 100644 index 8c3eb8685..000000000 --- a/site/examples/map-area/division/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 区域填充 -order: 0 ---- diff --git a/site/examples/map-area/interactive/API.en.md b/site/examples/map-area/interactive/API.en.md deleted file mode 100644 index d7366a808..000000000 --- a/site/examples/map-area/interactive/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-area/interactive/API.zh.md b/site/examples/map-area/interactive/API.zh.md deleted file mode 100644 index a16845937..000000000 --- a/site/examples/map-area/interactive/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-area/interactive/demo/meta.json b/site/examples/map-area/interactive/demo/meta.json deleted file mode 100644 index d41bef6ee..000000000 --- a/site/examples/map-area/interactive/demo/meta.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "title": { - "zh": "分类", - "en": "Category" - }, - "demos": [ - { - "filename": "single-choice.js", - "title": { - "zh": "单选", - "en": "Single choice" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/Ths%26mCNgFa/2c4d5660-5946-49e8-8917-cdbeb37be073.png" - }, - { - "filename": "multiple-choice.js", - "title": { - "zh": "多选", - "en": "Multiple choice" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/wiunBM1p0N/4d58f32a-d2d3-40dc-824d-13e8207a4789.png" - } - ] -} diff --git a/site/examples/map-area/interactive/demo/multiple-choice.js b/site/examples/map-area/interactive/demo/multiple-choice.js deleted file mode 100644 index 4cce597b1..000000000 --- a/site/examples/map-area/interactive/demo/multiple-choice.js +++ /dev/null @@ -1,93 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { AreaMap } from '@ant-design/maps'; - -const DemoAreaMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/basement_prod/1d27c363-af3a-469e-ab5b-7a7e1ce4f311.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - map: { - type: 'mapbox', - style: 'blank', - center: [120.19382669582967, 30.258134], - zoom: 3, - pitch: 0, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - }, - autoFit: true, - color: { - field: 'unit_price', - value: [ - '#1A4397', - '#2555B7', - '#3165D1', - '#467BE8', - '#6296FE', - '#7EA6F9', - '#98B7F7', - '#BDD0F8', - '#DDE6F7', - '#F2F5FC', - ].reverse(), - scale: { - type: 'quantile', - }, - }, - style: { - opacity: 1, - stroke: '#fff', - lineWidth: 0.8, - lineOpacity: 1, - }, - state: { - active: true, - select: { - stroke: 'yellow', - lineWidth: 1.5, - lineOpacity: 0.8, - }, - }, - enabledMultiSelect: true, - label: { - visible: true, - field: 'name', - style: { - fill: 'black', - opacity: 0.5, - fontSize: 12, - spacing: 1, - padding: [15, 15], - }, - }, - tooltip: { - items: ['name', 'code'], - }, - zoom: { - position: 'bottomright', - }, - legend: { - position: 'bottomleft', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-area/interactive/demo/single-choice.js b/site/examples/map-area/interactive/demo/single-choice.js deleted file mode 100644 index 066909eed..000000000 --- a/site/examples/map-area/interactive/demo/single-choice.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { AreaMap } from '@ant-design/maps'; - -const DemoAreaMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/basement_prod/d36ad90e-3902-4742-b8a2-d93f7e5dafa2.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const color = [ - 'rgb(255,255,217)', - 'rgb(237,248,177)', - 'rgb(199,233,180)', - 'rgb(127,205,187)', - 'rgb(65,182,196)', - 'rgb(29,145,192)', - 'rgb(34,94,168)', - 'rgb(12,44,132)', - ]; - const config = { - map: { - type: 'mapbox', - style: 'blank', - center: [120.19382669582967, 30.258134], - zoom: 3, - pitch: 0, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - }, - autoFit: true, - color: { - field: 'density', - value: color, - scale: { - type: 'quantile', - }, - }, - style: { - opacity: 1, - stroke: 'rgb(93,112,146)', - lineType: 'dash', - lineDash: [2, 2], - lineWidth: 0.6, - lineOpacity: 1, - }, - state: { - active: true, - select: true, - }, - tooltip: { - items: ['name', 'density'], - }, - zoom: { - position: 'bottomright', - }, - legend: { - position: 'bottomleft', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-area/interactive/index.en.md b/site/examples/map-area/interactive/index.en.md deleted file mode 100644 index 38e4bb6ba..000000000 --- a/site/examples/map-area/interactive/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Map Interaction -order: 1 ---- diff --git a/site/examples/map-area/interactive/index.zh.md b/site/examples/map-area/interactive/index.zh.md deleted file mode 100644 index 2bbf8302b..000000000 --- a/site/examples/map-area/interactive/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 区域交互 -order: 1 ---- diff --git a/site/examples/map-dot/bobble/API.en.md b/site/examples/map-dot/bobble/API.en.md deleted file mode 100644 index 6fceadad4..000000000 --- a/site/examples/map-dot/bobble/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-dot/bobble/API.zh.md b/site/examples/map-dot/bobble/API.zh.md deleted file mode 100644 index 12e1658a9..000000000 --- a/site/examples/map-dot/bobble/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-dot/bobble/demo/air-temperature.js b/site/examples/map-dot/bobble/demo/air-temperature.js deleted file mode 100644 index d62e3fea9..000000000 --- a/site/examples/map-dot/bobble/demo/air-temperature.js +++ /dev/null @@ -1,112 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { DotMap } from '@ant-design/maps'; - -const DemoDotMap = () => { - const [data, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/rmsportal/oVTMqfzuuRFKiDwhPSFL.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [102.447303, 37.753574], - zoom: 5, - pitch: 0, - }, - source: { - data: data.list, - parser: { - type: 'json', - x: 'j', - y: 'w', - }, - }, - color: { - field: 't', - value: [ - '#03071e', - '#370617', - '#6a040f', - '#9d0208', - '#d00000', - '#dc2f02', - '#e85d04', - '#f48c06', - '#faa307', - '#ffba08', - ].reverse(), - scale: { - type: 'quantize', - }, - }, - size: { - field: 't', - value: [2, 18], - }, - style: { - opacity: 0.5, - strokeWidth: 0, - }, - state: { - active: { - color: '#FFF684', - }, - }, - autoFit: true, - label: { - visible: false, - // 是否显示标签图层 - field: 't', - style: { - fill: '#fff', - opacity: 0.6, - fontSize: 12, - textAnchor: 'top', - // 文本相对锚点的位置 center|left|right|top|bottom|top-left - textOffset: [0, 20], - // 文本相对锚点的偏移量 [水平, 垂直] - spacing: 1, - // 字符间距 - padding: [5, 5], - // 文本包围盒 padding [水平,垂直],影响碰撞检测结果,避免相邻文本靠的太近 - stroke: '#ffffff', - // 描边颜色 - strokeWidth: 0.3, - // 描边宽度 - strokeOpacity: 1.0, - }, - }, - tooltip: { - items: ['s', 't'], - }, - zoom: { - position: 'bottomright', - }, - scale: { - position: 'bottomright', - }, - layerMenu: { - position: 'topright', - }, - legend: { - position: 'bottomleft', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-dot/bobble/demo/animate.js b/site/examples/map-dot/bobble/demo/animate.js deleted file mode 100644 index c19a66605..000000000 --- a/site/examples/map-dot/bobble/demo/animate.js +++ /dev/null @@ -1,70 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { DotMap } from '@ant-design/maps'; - -const DemoDotMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/xZqmXatMnc/quanguojiaotongshijianxiangyingzhishu.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [102.447303, 37.753574], - zoom: 2, - pitch: 0, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - }, - color: '#4cfd47', - size: 20, - animate: true, - state: { - active: true, - }, - autoFit: true, - label: { - field: 'cityName', - style: { - fill: '#fff', - fontSize: 12, - textAnchor: 'top', - textOffset: [0, 20], - }, - }, - zoom: { - position: 'bottomright', - }, - layerMenu: { - position: 'topright', - }, - tooltip: { - items: [ - { - field: 'cityName', - alias: '名称', - }, - ], - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-dot/bobble/demo/distribution-cities.js b/site/examples/map-dot/bobble/demo/distribution-cities.js deleted file mode 100644 index 13d30ddc4..000000000 --- a/site/examples/map-dot/bobble/demo/distribution-cities.js +++ /dev/null @@ -1,70 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { DotMap } from '@ant-design/maps'; - -const DemoDotMap = () => { - const [list, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/g5hIthhKlr/quanguoshixianweizhi.json') - .then((response) => response.json()) - .then(({ list }) => setData(list)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - - const config = { - map: { - type: 'mapbox', - style: 'dark', - zoom: 5, - center: [107.4976, 32.1697], - pitch: 45, - }, - source: { - data: list, - parser: { - type: 'json', - coordinates: 'lnglat', - }, - }, - color: '#47aff7', - size: { - field: 'style', - value: ({ style }) => { - if (style == 0) { - return 8; - } else if (style == 1) { - return 4; - } else { - return 2; - } - }, - }, - style: { - opacity: 0.8, - stroke: '#c3faff', - strokeWidth: 1, - }, - state: { - active: { - color: '#FFF684', - }, - }, - zoom: { - position: 'bottomright', - }, - tooltip: { - items: ['name'], - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-dot/bobble/demo/earthquake-level.js b/site/examples/map-dot/bobble/demo/earthquake-level.js deleted file mode 100644 index 741db7a2b..000000000 --- a/site/examples/map-dot/bobble/demo/earthquake-level.js +++ /dev/null @@ -1,75 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { DotMap } from '@ant-design/maps'; - -const DemoDotMap = () => { - const [data, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/m5r7MFHt8U/wenchuandizhenshuju.json') - .then((response) => response.json()) - .then(({ data }) => setData(data)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [103.447303, 31.753574], - zoom: 7, - pitch: 0, - }, - source: { - data: data, - parser: { - type: 'json', - x: 'lng', - y: 'lat', - }, - }, - color: { - field: 'mag', - value: ['#82cf9c', '#10b3b0', '#2033ab'], - scale: { - type: 'quantize', - }, - }, - size: { - field: 'mag', - value: ({ mag }) => (mag - 4.3) * 10, - }, - style: { - opacity: 0.8, - strokeWidth: 0, - }, - state: { - active: { - color: '#FFF684', - }, - }, - autoFit: true, - zoom: { - position: 'topright', - }, - scale: { - position: 'bottomright', - }, - tooltip: { - items: ['title', 'mag', 'depth'], - }, - legend: { - position: 'bottomleft', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-dot/bobble/demo/meta.json b/site/examples/map-dot/bobble/demo/meta.json deleted file mode 100644 index 426d9194e..000000000 --- a/site/examples/map-dot/bobble/demo/meta.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "title": { - "zh": "分类", - "en": "Category" - }, - "demos": [ - { - "filename": "air-temperature.js", - "title": { - "zh": "国内气温气泡", - "en": "Air bubble map of China" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/gozHK9LNFl/d37bc490-722b-4b73-a627-3c261b0401d2.png" - }, - { - "filename": "distribution-cities.js", - "title": { - "zh": "全国城市与区县分布", - "en": "Distribution of cities, districts and counties in China" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/RGpOaNlkdd/1c099806-c02a-4b03-8dfe-788e982b822b.png" - }, - { - "filename": "earthquake-level.js", - "title": { - "zh": "地震等级", - "en": "Earthquake level" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/JVdKQHfpZC/d3287038-6329-4bdd-8471-c830d5daf52f.png" - }, - { - "filename": "animate.js", - "title": { - "zh": "全国交通事件气泡动画", - "en": "National traffic event bubble animation" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/dTdD4KQGvH/06e323e4-92ce-40d9-a58f-837adbce5f26.png" - } - ] -} diff --git a/site/examples/map-dot/bobble/index.en.md b/site/examples/map-dot/bobble/index.en.md deleted file mode 100644 index 35cbb4d43..000000000 --- a/site/examples/map-dot/bobble/index.en.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Bubble Map Map -order: 0 ---- - -Refers to a point layer that can be located on a map with a dot symbol of the same shape, size and a fixed ratio to the value it represents, and is used to express the distribution characteristics of discrete phenomena. diff --git a/site/examples/map-dot/bobble/index.zh.md b/site/examples/map-dot/bobble/index.zh.md deleted file mode 100644 index d4a102601..000000000 --- a/site/examples/map-dot/bobble/index.zh.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 地图气泡图 -order: 0 ---- - -指地图上可用一个形状相同、大小和与其代表的数值成固定比率的圆点符号来定位的点图层,用于表达离散现象分布特征的地图。 diff --git a/site/examples/map-dot/dot-density/API.en.md b/site/examples/map-dot/dot-density/API.en.md deleted file mode 100644 index ef451b413..000000000 --- a/site/examples/map-dot/dot-density/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-dot/dot-density/API.zh.md b/site/examples/map-dot/dot-density/API.zh.md deleted file mode 100644 index 5fca5d49c..000000000 --- a/site/examples/map-dot/dot-density/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-dot/dot-density/demo/beijing-traffic.js b/site/examples/map-dot/dot-density/demo/beijing-traffic.js deleted file mode 100644 index 5bb4e9955..000000000 --- a/site/examples/map-dot/dot-density/demo/beijing-traffic.js +++ /dev/null @@ -1,75 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { DotMap } from '@ant-design/maps'; - -const DemoDotMap = () => { - const [data, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/8Ps2h%24qgmk/traffic_110000.csv') - .then((response) => response.text()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - if (!data.length) { - return null; - } - const colors = ['#c57f34', '#cbfddf', '#edea70', '#8cc9f1', '#2c7bb6']; - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [116.417463, 40.015175], - pitch: 0, - zoom: 9, - }, - source: { - data: data, - parser: { - type: 'csv', - y: 'lat', - x: 'lng', - }, - }, - shape: 'dot', - color: { - field: 'type', - value: ({ type }) => { - switch (parseInt(type)) { - case 3: - return colors[0]; - - case 4: - return colors[1]; - - case 41: - return colors[2]; - - case 5: - return colors[3]; - - default: - return colors[4]; - } - }, - }, - size: 0.5, - style: { - opacity: 1, - }, - autoFit: true, - zoom: { - position: 'bottomright', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-dot/dot-density/demo/cuisine-nationwide.js b/site/examples/map-dot/dot-density/demo/cuisine-nationwide.js deleted file mode 100644 index c465f8e43..000000000 --- a/site/examples/map-dot/dot-density/demo/cuisine-nationwide.js +++ /dev/null @@ -1,49 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { DotMap } from '@ant-design/maps'; - -const DemoDotMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/fZreT5RyVT/6wanquanguoyuecaidefenbu.geojson') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [105.425968, 35.882505], - pitch: 0, - zoom: 4, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - }, - shape: 'dot', - color: '#3C1FA8', - size: 0.5, - style: { - opacity: 1, - }, - autoFit: true, - zoom: { - position: 'bottomright', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-dot/dot-density/demo/meta.json b/site/examples/map-dot/dot-density/demo/meta.json deleted file mode 100644 index dc86e38ca..000000000 --- a/site/examples/map-dot/dot-density/demo/meta.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "title": { - "zh": "分类", - "en": "Category" - }, - "demos": [ - { - "filename": "cuisine-nationwide.js", - "title": { - "zh": "6万点位全国粤菜分布", - "en": "Distribution of 60000 Cantonese dishes in China" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/RO8qymvsqT/447d85e6-7b2f-4344-b3c5-265db3cf4633.png" - }, - { - "filename": "beijing-traffic.js", - "title": { - "zh": "10万辆北京公共交通车辆", - "en": "100000 Beijing public transport vehicles" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/zkZZmhfMei/ac9d0fb0-283a-46c1-9b6a-c9eeea288bc8.png" - }, - { - "filename": "shanghai-traffic.js", - "title": { - "zh": "164万辆上海市交通车辆", - "en": "1.64 million traffic vehicles in Shanghai" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/t5BQDH5Jp8/dbcddc7e-5ff9-4d3b-af9b-2d86f40b626a.png" - } - ] -} diff --git a/site/examples/map-dot/dot-density/demo/shanghai-traffic.js b/site/examples/map-dot/dot-density/demo/shanghai-traffic.js deleted file mode 100644 index 6f18946ca..000000000 --- a/site/examples/map-dot/dot-density/demo/shanghai-traffic.js +++ /dev/null @@ -1,59 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { DotMap } from '@ant-design/maps'; - -const DemoDotMap = () => { - const [data, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/rmsportal/BElVQFEFvpAKzddxFZxJ.txt') - .then((response) => response.text()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - if (!data.length) { - return null; - } - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [121.417463, 31.215175], - pitch: 0, - zoom: 11, - }, - source: { - data: data, - parser: { - type: 'csv', - y: 'lat', - x: 'lng', - }, - }, - shape: 'dot', - color: '#080298', - size: 0.5, - style: { - opacity: 1, - }, - zoom: { - position: 'bottomright', - }, - scale: { - position: 'bottomleft', - }, - layerMenu: { - position: 'topright', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-dot/dot-density/index.en.md b/site/examples/map-dot/dot-density/index.en.md deleted file mode 100644 index c2a0ace28..000000000 --- a/site/examples/map-dot/dot-density/index.en.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Dot Density -order: 1 ---- - -Also known as a Point Map, Dot Distribution Map. - -Dot Maps are a way of detecting spatial patterns or the distribution of data over a geographical region, by placing equally sized points over a geographical region. - -Dot Maps are ideal for seeing how things are distributed over a geographical region and can reveal patterns when the points cluster on the map. Dot Maps are easy to grasp and are better at giving an overview of the data, but are not great for retrieving exact values. diff --git a/site/examples/map-dot/dot-density/index.zh.md b/site/examples/map-dot/dot-density/index.zh.md deleted file mode 100644 index 9bda71001..000000000 --- a/site/examples/map-dot/dot-density/index.zh.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 点密度图 -order: 1 ---- - -也称为「点分布图」或「点密度图」。 - -点密度地图在地理区域上放置相等大小的圆点,旨在检测该地域上的空间布局或数据分布。 - -点密度地图非常适合用来查看物件在某地域内的分布状况和模式,而且容易掌握,能提供数据概览,可是在检索精确数值方面表现则不太理想。 diff --git a/site/examples/map-dot/icon/API.en.md b/site/examples/map-dot/icon/API.en.md deleted file mode 100644 index 6fceadad4..000000000 --- a/site/examples/map-dot/icon/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-dot/icon/API.zh.md b/site/examples/map-dot/icon/API.zh.md deleted file mode 100644 index 12e1658a9..000000000 --- a/site/examples/map-dot/icon/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-dot/icon/demo/bank.js b/site/examples/map-dot/icon/demo/bank.js deleted file mode 100644 index 1132d3194..000000000 --- a/site/examples/map-dot/icon/demo/bank.js +++ /dev/null @@ -1,86 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { DotMap, registerImages } from '@ant-design/maps'; - -const DemoDotMap = () => { - const [data, setData] = useState({ - list: [], - }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/h%26vOn55UIF/yinhangwangdian.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const images = [ - { - id: '160104', - image: 'https://gw.alipayobjects.com/zos/antfincdn/tWx6gaMr9P/zhongguoyinhang.png', - }, - { - id: '160139', - image: 'https://gw.alipayobjects.com/zos/antfincdn/KDjael3M3h/youzhengyinhang.png', - }, - { - id: '160105', - image: 'https://gw.alipayobjects.com/zos/antfincdn/Cxwxb%265wn7/gongshangyinhang.png', - }, - { - id: '160106', - image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg', - }, - { - id: '160107', - image: 'https://gw.alipayobjects.com/zos/antfincdn/hITtoj%2672C/nongyeyinhang.png', - }, - { - id: '160108', - image: 'https://gw.alipayobjects.com/zos/antfincdn/KHWJyfcPJu/jiaotongyinhang.png', - }, - { - id: '160109', - image: 'https://gw.alipayobjects.com/zos/antfincdn/%247VfhYcrfu/zhaoshangyinhang.png', - }, - { - id: '160111', - image: 'https://gw.alipayobjects.com/zos/antfincdn/pgo8%261emOy/guangdayinhang.png', - }, - ]; - registerImages(images); - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [116.473168, 39.993015], - zoom: 15, - pitch: 0, - }, - source: { - data: data.list, - parser: { - type: 'json', - coordinates: 'location', - }, - }, - color: '#fff', - shape: { - field: 'typecode', - value: ({ typecode }) => typecode, - }, - size: 10, - tooltip: { - items: ['name', 'address', 'tel'], - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-dot/icon/demo/meta.json b/site/examples/map-dot/icon/demo/meta.json deleted file mode 100644 index 7b3291579..000000000 --- a/site/examples/map-dot/icon/demo/meta.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "title": { - "zh": "分类", - "en": "Category" - }, - "demos": [ - { - "filename": "bank.js", - "title": { - "zh": "银行网点", - "en": "Bank outlets" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/zWvhGhbuTY/08a0857b-814b-4165-b787-b375d73a5b6c.png" - }, - { - "filename": "poi.js", - "title": { - "zh": "POI 图标", - "en": "POI Icon" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/cfT2Jb1Fi2/83261ea9-3ccc-4684-a47a-721343c0279b.png" - } - ] -} diff --git a/site/examples/map-dot/icon/demo/poi.js b/site/examples/map-dot/icon/demo/poi.js deleted file mode 100644 index e06bad1f0..000000000 --- a/site/examples/map-dot/icon/demo/poi.js +++ /dev/null @@ -1,62 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { DotMap, registerImages } from '@ant-design/maps'; - -const DemoDotMap = () => { - const [data, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/basement_prod/893d1d5f-11d9-45f3-8322-ee9140d288ae.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const images = [ - { - id: '01', - image: 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg', - }, - { - id: '02', - image: 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg', - }, - { - id: '03', - image: 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg', - }, - ]; - registerImages(images); - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [121.409765, 31.256735], - zoom: 14.5, - pitch: 0, - }, - source: { - data: data, - parser: { - type: 'json', - x: 'longitude', - y: 'latitude', - }, - }, - color: '#fff', - shape: { - field: 'name', - value: ['01', '02', '03'], - }, - size: 20, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-dot/icon/index.en.md b/site/examples/map-dot/icon/index.en.md deleted file mode 100644 index 8613c85d9..000000000 --- a/site/examples/map-dot/icon/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Icon Map -order: 1 ---- diff --git a/site/examples/map-dot/icon/index.zh.md b/site/examples/map-dot/icon/index.zh.md deleted file mode 100644 index a5c35c5b8..000000000 --- a/site/examples/map-dot/icon/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 图标图 -order: 1 ---- diff --git a/site/examples/map-dot/map-scatter/API.en.md b/site/examples/map-dot/map-scatter/API.en.md deleted file mode 100644 index 6fceadad4..000000000 --- a/site/examples/map-dot/map-scatter/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-dot/map-scatter/API.zh.md b/site/examples/map-dot/map-scatter/API.zh.md deleted file mode 100644 index 12e1658a9..000000000 --- a/site/examples/map-dot/map-scatter/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-dot/map-scatter/demo/classified-scatter.js b/site/examples/map-dot/map-scatter/demo/classified-scatter.js deleted file mode 100644 index f49407cc7..000000000 --- a/site/examples/map-dot/map-scatter/demo/classified-scatter.js +++ /dev/null @@ -1,89 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { DotMap } from '@ant-design/maps'; - -const DemoDotMap = () => { - const [data, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/basement_prod/6c4bb5f2-850b-419d-afc4-e46032fc9f94.csv') - .then((response) => response.text()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - if (!data.length) { - return null; - } - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [-121.24357, 37.58264], - pitch: 0, - zoom: 6.45, - }, - source: { - data: data, - parser: { - type: 'csv', - x: 'Longitude', - y: 'Latitude', - }, - }, - color: { - field: 'Magnitude', - value: [ - '#0A3663', - '#1558AC', - '#3771D9', - '#4D89E5', - '#64A5D3', - '#72BED6', - '#83CED6', - '#A6E1E0', - '#B8EFE2', - '#D7F9F0', - ], - }, - size: 3, - style: { - opacity: 0.8, - strokeWidth: 0, - }, - state: { - active: { - color: '#FFF684', - }, - }, - label: { - visible: false, - field: 'Magnitude', - style: { - fill: '#fff', - fontSize: 12, - textAnchor: 'top', - textOffset: [0, 20], - padding: [10, 10], - }, - }, - tooltip: { - items: ['Magnitude'], - }, - zoom: { - position: 'bottomright', - }, - layerMenu: { - position: 'topright', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-dot/map-scatter/demo/distribution-cities.js b/site/examples/map-dot/map-scatter/demo/distribution-cities.js deleted file mode 100644 index 7ebfd4bb4..000000000 --- a/site/examples/map-dot/map-scatter/demo/distribution-cities.js +++ /dev/null @@ -1,100 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { DotMap } from '@ant-design/maps'; - -const DemoDotMap = () => { - const [list, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/g5hIthhKlr/quanguoshixianweizhi.json') - .then((response) => response.json()) - .then(({ list }) => setData(list)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - map: { - type: 'mapbox', - style: 'dark', - zoom: 5, - center: [107.4976, 32.1697], - pitch: 0, - }, - source: { - data: list, - parser: { - type: 'json', - coordinates: 'lnglat', - }, - }, - size: 4, - color: { - field: 'style', - value: ({ style }) => { - if (style == 0) { - return '#14B4C9'; - } else if (style == 1) { - return '#3771D9'; - } else { - return '#B8EFE2'; - } - }, - }, - style: { - opacity: 0.8, - strokeWidth: 0, - }, - state: { - active: { - color: '#FFF684', - }, - }, - label: { - visible: false, - field: 'name', - style: { - fill: '#fff', - fontSize: 12, - textAnchor: 'top', - textOffset: [0, 20], - padding: [10, 10], - }, - }, - tooltip: { - items: ['name'], - }, - zoom: { - position: 'bottomright', - }, - layerMenu: { - position: 'topright', - }, - legend: { - type: 'category', - position: 'bottomleft', - items: [ - { - color: '#14B4C9', - value: '地级市', - }, - { - color: '#3771D9', - value: '县城市', - }, - { - color: '#B8EFE2', - value: '区县', - }, - ], - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-dot/map-scatter/demo/meta.json b/site/examples/map-dot/map-scatter/demo/meta.json deleted file mode 100644 index 818abd4e4..000000000 --- a/site/examples/map-dot/map-scatter/demo/meta.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "title": { - "zh": "分类", - "en": "Category" - }, - "demos": [ - { - "filename": "distribution-cities.js", - "title": { - "zh": "全国城市与区县分布", - "en": "Distribution of cities, districts and counties in China" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/TKxay5%26lpP/c01e799b-85f2-4dd1-8126-4c5d6845c522.png" - }, - { - "filename": "classified-scatter.js", - "title": { - "zh": "分类散点", - "en": "Classified Scatter Map" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/u31zxgii2R/d3fe9e5f-feb6-4b32-8237-4d79ae99a906.png" - } - ] -} diff --git a/site/examples/map-dot/map-scatter/index.en.md b/site/examples/map-dot/map-scatter/index.en.md deleted file mode 100644 index 9e39a4e2f..000000000 --- a/site/examples/map-dot/map-scatter/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Scatter Map -order: 0 ---- diff --git a/site/examples/map-dot/map-scatter/index.zh.md b/site/examples/map-dot/map-scatter/index.zh.md deleted file mode 100644 index 6db174451..000000000 --- a/site/examples/map-dot/map-scatter/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 地图散点图 -order: 0 ---- diff --git a/site/examples/map-heat/grid/API.en.md b/site/examples/map-heat/grid/API.en.md deleted file mode 100644 index 3371990ad..000000000 --- a/site/examples/map-heat/grid/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-heat/grid/API.zh.md b/site/examples/map-heat/grid/API.zh.md deleted file mode 100644 index 347643127..000000000 --- a/site/examples/map-heat/grid/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-heat/grid/demo/grid2d.js b/site/examples/map-heat/grid/demo/grid2d.js deleted file mode 100644 index 5a1cd0167..000000000 --- a/site/examples/map-heat/grid/demo/grid2d.js +++ /dev/null @@ -1,58 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { GridMap } from '@ant-design/maps'; - -const DemoGridMap = () => { - const [data, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/aBQAMIpvPL/qingdao_500m.csv') - .then((response) => response.text()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - if (!data.length) { - return null; - } - const config = { - map: { - type: 'mapbox', - style: 'dark', - pitch: 0, - zoom: 8.6, - center: [120.198254, 36.265551], - }, - source: { - data: data, - parser: { - type: 'csv', - x: 'lng', - y: 'lat', - }, - aggregation: { - radius: 1000, - field: 'count', - method: 'sum', - }, - }, - shape: 'square', - color: { - field: 'count', - value: ['#0868AC', '#43A2CA', '#43A2CA', '#7BCCC4', '#BAE4BC', '#F0F9E8', '#F0F9E8'], - }, - style: { - coverage: 0.9, - angle: 0, - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-heat/grid/demo/grid3d.js b/site/examples/map-heat/grid/demo/grid3d.js deleted file mode 100644 index 18e56e84b..000000000 --- a/site/examples/map-heat/grid/demo/grid3d.js +++ /dev/null @@ -1,77 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { GridMap } from '@ant-design/maps'; - -const DemoGridMap = () => { - const [data, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/basement_prod/7359a5e9-3c5e-453f-b207-bc892fb23b84.csv') - .then((response) => response.text()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - if (!data.length) { - return null; - } - const config = { - map: { - type: 'mapbox', - style: 'dark', - pitch: 48, - center: [109.054293, 29.246265], - zoom: 6, - }, - source: { - data: data, - parser: { - type: 'csv', - x: 'lng', - y: 'lat', - }, - aggregation: { - radius: 20000, - field: 'v', - method: 'sum', - }, - }, - shape: 'squareColumn', - size: { - field: 'count', - value: ({ count }) => { - return count * 200; - }, - }, - color: { - field: 'count', - value: [ - '#8C1EB2', - '#8C1EB2', - '#DA05AA', - '#F0051A', - '#FF2A3C', - '#FF4818', - '#FF4818', - '#FF8B18', - '#F77B00', - '#ED9909', - '#ECC357', - '#EDE59C', - ].reverse(), - }, - style: { - coverage: 0.9, - angle: 0, - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-heat/grid/demo/meta.json b/site/examples/map-heat/grid/demo/meta.json deleted file mode 100644 index f430df417..000000000 --- a/site/examples/map-heat/grid/demo/meta.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "title": { - "zh": "分类", - "en": "Category" - }, - "demos": [ - { - "filename": "grid2d.js", - "title": { - "zh": "网格热力 2D", - "en": "Grid thermal 2D" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/fKPFt8cFk4/a091a42a-2411-4011-9dc7-ef7d39197f8d.png" - }, - { - "filename": "grid3d.js", - "title": { - "zh": "网格热力 3D", - "en": "Grid thermal 3D" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/XPitK0Ftor/9dcf6d62-ffc1-4207-9bb6-1f52fbc93002.png" - } - ] -} diff --git a/site/examples/map-heat/grid/index.en.md b/site/examples/map-heat/grid/index.en.md deleted file mode 100644 index bef82c2c6..000000000 --- a/site/examples/map-heat/grid/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Grid -order: 1 ---- diff --git a/site/examples/map-heat/grid/index.zh.md b/site/examples/map-heat/grid/index.zh.md deleted file mode 100644 index 88976ffe1..000000000 --- a/site/examples/map-heat/grid/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 网格聚合图 -order: 1 ---- diff --git a/site/examples/map-heat/heatmap/API.en.md b/site/examples/map-heat/heatmap/API.en.md deleted file mode 100644 index d05edf7cd..000000000 --- a/site/examples/map-heat/heatmap/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-heat/heatmap/API.zh.md b/site/examples/map-heat/heatmap/API.zh.md deleted file mode 100644 index 7680e5da4..000000000 --- a/site/examples/map-heat/heatmap/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-heat/heatmap/demo/global-2d.js b/site/examples/map-heat/heatmap/demo/global-2d.js deleted file mode 100644 index 0dec4db83..000000000 --- a/site/examples/map-heat/heatmap/demo/global-2d.js +++ /dev/null @@ -1,79 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { HeatMap } from '@ant-design/maps'; - -const DemoHeatMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/basement_prod/d3564b06-670f-46ea-8edb-842f7010a7c6.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [127.5671666579043, 7.445038892195569], - zoom: 2.632456779444394, - pitch: 0, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - }, - size: { - field: 'mag', - }, - style: { - intensity: 3, - radius: 20, - opacity: 1, - colorsRamp: [ - { - color: '#206C7C', - position: 0, - }, - { - color: '#2EA9A1 ', - position: 0.2, - }, - { - color: '#91EABC', - position: 0.4, - }, - { - color: '#FFF598', - position: 0.6, - }, - { - color: '#F7B74A', - position: 0.8, - }, - { - color: '#FF4818', - position: 1, - }, - ], - }, - zoom: { - position: 'bottomright', - }, - legend: { - position: 'bottomleft', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-heat/heatmap/demo/global-3d.js b/site/examples/map-heat/heatmap/demo/global-3d.js deleted file mode 100644 index 113bc0b20..000000000 --- a/site/examples/map-heat/heatmap/demo/global-3d.js +++ /dev/null @@ -1,46 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { HeatMap } from '@ant-design/maps'; - -const DemoHeatMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/basement_prod/d3564b06-670f-46ea-8edb-842f7010a7c6.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [127.5671666579043, 7.445038892195569], - zoom: 2.632456779444394, - pitch: 45, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - }, - shape: 'heatmap3D', - size: { - field: 'mag', - }, - legend: { - position: 'bottomleft', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-heat/heatmap/demo/housing-transaction.js b/site/examples/map-heat/heatmap/demo/housing-transaction.js deleted file mode 100644 index f106aee15..000000000 --- a/site/examples/map-heat/heatmap/demo/housing-transaction.js +++ /dev/null @@ -1,80 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { HeatMap } from '@ant-design/maps'; - -const DemoHeatMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/S2Pb%26549sG/20210723023614.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - map: { - type: 'mapbox', - style: 'dark', - zoom: 11.7, - center: [120.19660949707033, 30.234747338474293], - pitch: 0, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - }, - size: { - field: 'count', - value: [0, 1], - }, - style: { - intensity: 2, - radius: 15, - opacity: 1, - colorsRamp: [ - { - color: 'rgba(33,102,172,0.0)', - position: 0, - }, - { - color: 'rgb(103,169,207)', - position: 0.2, - }, - { - color: 'rgb(209,229,240)', - position: 0.4, - }, - { - color: 'rgb(253,219,199)', - position: 0.6, - }, - { - color: 'rgb(239,138,98)', - position: 0.8, - }, - { - color: 'rgb(178,24,43,1.0)', - position: 1, - }, - ], - }, - zoom: { - position: 'bottomright', - }, - legend: { - position: 'bottomleft', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-heat/heatmap/demo/meta.json b/site/examples/map-heat/heatmap/demo/meta.json deleted file mode 100644 index 28f12b7b6..000000000 --- a/site/examples/map-heat/heatmap/demo/meta.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "title": { - "zh": "分类", - "en": "Category" - }, - "demos": [ - { - "filename": "housing-transaction.js", - "title": { - "zh": "杭州房屋交易量", - "en": "Hangzhou housing transaction volume" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/qgKi3OxQVE/4553729d-c2ce-490b-aebb-ea948bef7f2e.png" - }, - { - "filename": "traffic-accident.js", - "title": { - "zh": "全国交通事故增长率", - "en": "National traffic accident growth rate" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/HRChB6ZKXz/343063e1-afbc-4fb1-a5d7-0383be3d28b3.png" - }, - { - "filename": "global-2d.js", - "title": { - "zh": "全球热力", - "en": "Global heat map" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/svqQmzIKVw/2977de7d-6362-42f1-b731-05e734b6bfe0.png" - }, - { - "filename": "global-3d.js", - "title": { - "zh": "全球热力 3D", - "en": "Global 3D heat map" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/5osUdJv%24Nq/51c6693d-e00a-4c32-adb2-90b95359d4f2.png" - } - ] -} diff --git a/site/examples/map-heat/heatmap/demo/traffic-accident.js b/site/examples/map-heat/heatmap/demo/traffic-accident.js deleted file mode 100644 index 7e8283166..000000000 --- a/site/examples/map-heat/heatmap/demo/traffic-accident.js +++ /dev/null @@ -1,47 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { HeatMap } from '@ant-design/maps'; - -const DemoHeatMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/OOSGL1vhp3/20200726024229.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - map: { - type: 'mapbox', - style: 'dark', - center: [127.5671666579043, 7.445038892195569], - zoom: 2.632456779444394, - pitch: 45, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - }, - shape: 'heatmap3D', - size: { - field: 'avg', - value: ({ avg }) => avg / 100, - }, - legend: { - position: 'bottomleft', - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-heat/heatmap/index.en.md b/site/examples/map-heat/heatmap/index.en.md deleted file mode 100644 index 02e7f2b1a..000000000 --- a/site/examples/map-heat/heatmap/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Heatmap -order: 0 ---- diff --git a/site/examples/map-heat/heatmap/index.zh.md b/site/examples/map-heat/heatmap/index.zh.md deleted file mode 100644 index a7e81e475..000000000 --- a/site/examples/map-heat/heatmap/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 点热力图 -order: 0 ---- diff --git a/site/examples/map-heat/hexbin/API.en.md b/site/examples/map-heat/hexbin/API.en.md deleted file mode 100644 index 7c6a2093d..000000000 --- a/site/examples/map-heat/hexbin/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-heat/hexbin/API.zh.md b/site/examples/map-heat/hexbin/API.zh.md deleted file mode 100644 index ee399ba5f..000000000 --- a/site/examples/map-heat/hexbin/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/map-heat/hexbin/demo/hexbin3d.js b/site/examples/map-heat/hexbin/demo/hexbin3d.js deleted file mode 100644 index fec0ebd4c..000000000 --- a/site/examples/map-heat/hexbin/demo/hexbin3d.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { HexbinMap } from '@ant-design/maps'; - -const DemoHexbinMap = () => { - const [data, setData] = useState([]); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/basement_prod/a1a8158d-6fe3-424b-8e50-694ccf61c4d7.csv') - .then((response) => response.text()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - if (!data.length) { - return null; - } - const config = { - map: { - type: 'mapbox', - style: 'dark', - pitch: 43, - center: [120.13383079335335, 29.9], - zoom: 8.2, - }, - source: { - data: data, - parser: { - type: 'csv', - x: 'lng', - y: 'lat', - }, - aggregation: { - field: 'v', - radius: 2500, - method: 'sum', - }, - }, - shape: 'hexagonColumn', - size: { - field: 'sum', - value: ({ sum }) => { - return sum * 200; - }, - }, - color: { - field: 'sum', - value: [ - '#094D4A', - '#146968', - '#1D7F7E', - '#289899', - '#34B6B7', - '#4AC5AF', - '#5FD3A6', - '#7BE39E', - '#A1EDB8', - '#C3F9CC', - '#DEFAC0', - '#ECFFB1', - ], - }, - style: { - coverage: 0.8, - angle: 0, - opacity: 1.0, - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-heat/hexbin/demo/meta.json b/site/examples/map-heat/hexbin/demo/meta.json deleted file mode 100644 index 12173939e..000000000 --- a/site/examples/map-heat/hexbin/demo/meta.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "title": { - "zh": "分类", - "en": "Category" - }, - "demos": [ - { - "filename": "traffic-delay.js", - "title": { - "zh": "杭州交通高峰期路口延误指数", - "en": "Intersection delay index in traffic peak in Hangzhou" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/7W1VDrMpy%24/63f536b0-244a-41e9-9698-c3249a2108a7.png" - }, - { - "filename": "hexbin3d.js", - "title": { - "zh": "蜂窝热力 3D", - "en": "Hexbin thermal 3D" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/fA50QqeP%24T/a5031ad0-7786-4183-bf23-e66dbdf52fe5.png" - } - ] -} diff --git a/site/examples/map-heat/hexbin/demo/traffic-delay.js b/site/examples/map-heat/hexbin/demo/traffic-delay.js deleted file mode 100644 index 34c46dcb1..000000000 --- a/site/examples/map-heat/hexbin/demo/traffic-delay.js +++ /dev/null @@ -1,60 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactDOM from 'react-dom'; -import { HexbinMap } from '@ant-design/maps'; - -const DemoHexbinMap = () => { - const [data, setData] = useState({ type: 'FeatureCollection', features: [] }); - - useEffect(() => { - asyncFetch(); - }, []); - - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antfincdn/Ml2DwikvFC/20210726100731.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - map: { - type: 'mapbox', - style: 'dark', - pitch: 43, - center: [120.13383079335335, 29.9], - zoom: 8.2, - }, - source: { - data: data, - parser: { - type: 'geojson', - }, - aggregation: { - radius: 1200, - field: 'rank', - method: 'sum', - }, - }, - shape: 'hexagonColumn', - size: { - field: 'sum', - value: ({ sum }) => { - return sum * 10; - }, - }, - color: { - field: 'sum', - value: ['#0553A1', '#0B79B0', '#10B3B0', '#7CCF98', '#DCE872'], - }, - style: { - coverage: 0.8, - angle: 0, - opacity: 1.0, - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/map-heat/hexbin/index.en.md b/site/examples/map-heat/hexbin/index.en.md deleted file mode 100644 index 2e8409c66..000000000 --- a/site/examples/map-heat/hexbin/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Hexbin -order: 2 ---- diff --git a/site/examples/map-heat/hexbin/index.zh.md b/site/examples/map-heat/hexbin/index.zh.md deleted file mode 100644 index 14347e1a4..000000000 --- a/site/examples/map-heat/hexbin/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 蜂窝聚合图 -order: 2 ---- diff --git a/site/examples/relation-graph/decomposition-tree-graph/API.en.md b/site/examples/relation-graph/decomposition-tree-graph/API.en.md deleted file mode 100644 index c9663778f..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/decomposition-tree-graph/API.zh.md b/site/examples/relation-graph/decomposition-tree-graph/API.zh.md deleted file mode 100644 index 77765267c..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/decomposition-tree-graph/demo/async-load.js b/site/examples/relation-graph/decomposition-tree-graph/demo/async-load.js deleted file mode 100644 index accb89b30..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/demo/async-load.js +++ /dev/null @@ -1,147 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { DecompositionTreeGraph } from '@ant-design/graphs'; - -const DemoDecompositionTreeGraph = () => { - const data = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '广东', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '广西', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A13', - value: { - title: '海南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '华北', - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }; - - const fetchData = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve( - [1, 2].map(() => ({ - id: 'A2' + Math.random().toString(), - value: { - title: '异步节点' + Math.random().toString(), - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '50%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - })), - ); - }, 1000); - }); - }; - - const getChildren = async () => { - const asyncData = await fetchData(); - return asyncData; - }; - - const config = { - data, - autoFit: false, - nodeCfg: { - getChildren, - }, - markerCfg: (cfg) => { - const { children } = cfg; - return { - show: true, - collapsed: !children?.length, - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/decomposition-tree-graph/demo/auto-width.js b/site/examples/relation-graph/decomposition-tree-graph/demo/auto-width.js deleted file mode 100644 index 4aeb67108..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/demo/auto-width.js +++ /dev/null @@ -1,117 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { DecompositionTreeGraph } from '@ant-design/graphs'; - -const DemoDecompositionTreeGraph = () => { - const data = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '广东', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '广西', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A13', - value: { - title: '海南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '华北', - items: [ - { - text: '595万', - }, - { - text: '占比-非常非常非常非常非常长', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }; - const config = { - data, - autoFit: false, - nodeCfg: { - autoWidth: true, - items: { - layout: 'follow', - }, - }, - layout: { - getWidth: () => { - return 60; - }, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/decomposition-tree-graph/demo/basic.js b/site/examples/relation-graph/decomposition-tree-graph/demo/basic.js deleted file mode 100644 index 163ca8438..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/demo/basic.js +++ /dev/null @@ -1,112 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { DecompositionTreeGraph } from '@ant-design/graphs'; - -const DemoDecompositionTreeGraph = () => { - const data = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '广东', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '广西', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A13', - value: { - title: '海南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '华北', - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }; - - const config = { - data, - markerCfg: (cfg) => { - const { children } = cfg; - return { - show: children?.length, - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/decomposition-tree-graph/demo/layout.js b/site/examples/relation-graph/decomposition-tree-graph/demo/layout.js deleted file mode 100644 index 16cd4d041..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/demo/layout.js +++ /dev/null @@ -1,124 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { DecompositionTreeGraph } from '@ant-design/graphs'; - -const DemoDecompositionTreeGraph = () => { - const data = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '广东', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '广西', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A13', - value: { - title: '海南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '华北', - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }; - - const config = { - data, - layout: { - type: 'indented', - direction: 'LR', - dropCap: false, - indent: 250, - getHeight: () => { - return 60; - }, - getWidth: () => { - return 100; - }, - }, - markerCfg: (cfg) => { - const { children } = cfg; - return { - show: children?.length, - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/decomposition-tree-graph/demo/line-style.js b/site/examples/relation-graph/decomposition-tree-graph/demo/line-style.js deleted file mode 100644 index 7bc3df5b1..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/demo/line-style.js +++ /dev/null @@ -1,158 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { DecompositionTreeGraph } from '@ant-design/graphs'; - -const DemoDecompositionTreeGraph = () => { - const data = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '广东', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '广西', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A13', - value: { - title: '海南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '华北', - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }; - - const config = { - data, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - nodeCfg: { - items: { - style: (cfg, group, type) => { - const styles = { - value: { - fill: '#52c41a', - }, - text: { - fill: '#aaa', - }, - icon: { - width: 10, - height: 10, - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - style: { - stroke: '#40a9ff', - }, - }, - edgeCfg: { - endArrow: { - fill: '#40a9ff', - }, - style: (item, graph) => { - /** - * graph.findById(item.target).getModel() - * item.source: 获取 source 数据 - * item.target: 获取 target 数据 - */ - // console.log(graph.findById(item.source).getModel()); - return { - stroke: '#40a9ff', - lineWidth: 1, - strokeOpacity: 0.5, - }; - }, - }, - markerCfg: (cfg) => { - const { children } = cfg; - return { - show: children?.length, - }; - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/decomposition-tree-graph/demo/meta.json b/site/examples/relation-graph/decomposition-tree-graph/demo/meta.json deleted file mode 100644 index e2c5c6161..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/demo/meta.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "title": { - "zh": "中文分类", - "en": "Category" - }, - "demos": [ - { - "filename": "basic.js", - "title": { - "zh": "指标拆解图", - "en": "Basic" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/cOaXmA8nSM/ea4bd786-2442-41a0-acb6-fa1d9dfb20f2.png" - }, - { - "filename": "layout.js", - "title": { - "zh": "指标拆解图-调整布局", - "en": "Layout" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/vcSjpldUrc/569cf7e4-0b01-41d7-b71f-fdb71645c520.png" - }, - { - "filename": "percent.js", - "title": { - "zh": "指标拆解图-节点占比", - "en": "Percent" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/9UCy2n8WPu/fe8e1b07-efde-4ba8-9e83-97986f668faf.png" - }, - { - "filename": "style.js", - "title": { - "zh": "指标拆解图-节点样式", - "en": "Node style" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/IJhgY4ZtHf/4ca28c72-d60c-42ca-b562-1cec9489f409.png" - }, - { - "filename": "line-style.js", - "title": { - "zh": "指标拆解图-边样式", - "en": "Line style" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/sizWh4nARJ/615012d8-825d-462c-a20f-d1e51a2aed15.png" - }, - { - "filename": "no-stroke.js", - "title": { - "zh": "指标拆解图-无边框", - "en": "No stroke" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/eVNaLR7coY/54584a5f-3233-4881-8006-aa7b71678994.png" - }, - { - "filename": "async-load.js", - "title": { - "zh": "指标拆解图-异步请求", - "en": "Asynchronous request" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/oTq0fFxMRL/993abc47-28f7-4489-b3d8-3a04f9fbb10b.png" - }, - { - "filename": "auto-width.js", - "title": { - "zh": "指标拆解图-自适应", - "en": "Auto width" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/d21RW%24hqns/e390cf8f-375f-48da-8eee-b01d7c3184a9.png" - } - ] -} diff --git a/site/examples/relation-graph/decomposition-tree-graph/demo/no-stroke.js b/site/examples/relation-graph/decomposition-tree-graph/demo/no-stroke.js deleted file mode 100644 index 3acace017..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/demo/no-stroke.js +++ /dev/null @@ -1,158 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { DecompositionTreeGraph } from '@ant-design/graphs'; - -const DemoDecompositionTreeGraph = () => { - const data = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '广东', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '广西', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A13', - value: { - title: '海南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '华北', - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }; - const config = { - data, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - nodeCfg: { - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - }, - }, - items: { - containerStyle: { - fill: '#fff', - }, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 10, - height: 10, - }, - value: { - fill: '#52c41a', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - style: { - stroke: 'transparent', - }, - nodeStateStyles: false, - }, - edgeCfg: { - endArrow: { - show: false, - }, - style: (item, graph) => { - /** - * graph.findById(item.target).getModel() - * item.source: 获取 source 数据 - * item.target: 获取 target 数据 - */ - // console.log(graph.findById(item.source).getModel()); - return { - stroke: '#40a9ff', - lineWidth: Math.random() * 10 + 1, - strokeOpacity: 0.5, - }; - }, - edgeStateStyles: false, - }, - }; - // @ts-ignore - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/decomposition-tree-graph/demo/percent.js b/site/examples/relation-graph/decomposition-tree-graph/demo/percent.js deleted file mode 100644 index f2b6fc06a..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/demo/percent.js +++ /dev/null @@ -1,199 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { DecompositionTreeGraph } from '@ant-design/graphs'; - -const DemoDecompositionTreeGraph = () => { - const data = { - id: 'A0', - value: { - title: '全年降本增收', - items: [ - { - text: '3031万', - value: '80%', - }, - ], - percent: 0.8, - }, - children: [ - { - id: 'A1', - value: { - title: '降本增收项目1', - percent: 0.7, - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '70%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '降本增收项目1-1', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '降本增收项目1-2', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A13', - value: { - title: '降本增收项目1-3', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '降本增收项目2', - percent: 0.3, - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }; - const stroke = '#EA2F97'; - const config = { - data, - nodeCfg: { - size: [140, 25], - percent: { - position: 'bottom', - size: 4, - style: (arg) => { - return { - radius: [0, 0, 0, 2], - fill: arg.value.percent > 0.3 ? stroke : '#1f8fff', - }; - }, - }, - items: { - containerStyle: { - fill: '#fff', - }, - padding: 6, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: (arg) => { - return { - fill: '#fff', - radius: 2, - stroke: arg.value.percent > 0.3 ? stroke : '#1f8fff', - }; - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }, - }, - style: (edge) => { - return { - stroke: '#518AD3', - strokeOpacity: 0.5, - }; - }, - endArrow: { - fill: '#518AD3', - }, - edgeStateStyles: { - hover: { - strokeOpacity: 1, - }, - }, - }, - markerCfg: (cfg) => { - return { - position: 'right', - show: cfg.children?.length, - style: (arg) => { - return { - stroke: arg.value.percent > 0.3 ? stroke : '#1f8fff', - }; - }, - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/decomposition-tree-graph/demo/style.js b/site/examples/relation-graph/decomposition-tree-graph/demo/style.js deleted file mode 100644 index 5d8f2b451..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/demo/style.js +++ /dev/null @@ -1,150 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { DecompositionTreeGraph } from '@ant-design/graphs'; - -const DemoDecompositionTreeGraph = () => { - const data = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '广东', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '广西', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A13', - value: { - title: '海南', - items: [ - { - text: '1152万', - }, - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '华北', - items: [ - { - text: '595万', - }, - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - ], - }; - - const config = { - data, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - nodeCfg: { - title: { - style: (cfg) => { - return { - fill: cfg?.value?.title === '青年' ? 'yellow' : '#fff', - }; - }, - }, - items: { - containerStyle: { - fill: '#fff', - }, - style: (cfg, group, type) => { - const styles = { - value: { - fill: '#52c41a', - }, - text: { - fill: '#aaa', - }, - icon: { - width: 10, - height: 10, - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - style: { - radius: [2, 2, 2, 2], - }, - }, - markerCfg: (cfg) => { - const { children } = cfg; - return { - show: children?.length, - }; - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/decomposition-tree-graph/index.en.md b/site/examples/relation-graph/decomposition-tree-graph/index.en.md deleted file mode 100644 index 04953fe18..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Decomposition Tree Graph -order: 0 ---- diff --git a/site/examples/relation-graph/decomposition-tree-graph/index.zh.md b/site/examples/relation-graph/decomposition-tree-graph/index.zh.md deleted file mode 100644 index 1f4ea0914..000000000 --- a/site/examples/relation-graph/decomposition-tree-graph/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 指标拆解图 -order: 0 ---- diff --git a/site/examples/relation-graph/flow-analysis-graph/API.en.md b/site/examples/relation-graph/flow-analysis-graph/API.en.md deleted file mode 100644 index 594bd1869..000000000 --- a/site/examples/relation-graph/flow-analysis-graph/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/flow-analysis-graph/API.zh.md b/site/examples/relation-graph/flow-analysis-graph/API.zh.md deleted file mode 100644 index 594bd1869..000000000 --- a/site/examples/relation-graph/flow-analysis-graph/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/flow-analysis-graph/demo/basic.js b/site/examples/relation-graph/flow-analysis-graph/demo/basic.js deleted file mode 100644 index e6807b757..000000000 --- a/site/examples/relation-graph/flow-analysis-graph/demo/basic.js +++ /dev/null @@ -1,288 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { FlowAnalysisGraph } from '@ant-design/graphs'; - -const DemoFlowAnalysisGraph = () => { - const data = { - nodes: [ - { - id: '-3', - value: { - title: '来源页面A', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-2', - value: { - title: '来源页面B', - items: [ - { - text: '点击UV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-1', - value: { - title: '来源页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '0', - value: { - title: '活动页面', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '1', - value: { - title: '去向页面A', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '2', - value: { - title: '去向页面B', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '3', - value: { - title: '去向页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '4', - value: { - title: '去向页面D', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '5', - value: { - title: '去向页面E', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '7', - value: { - title: '去向页面G', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '8', - value: { - title: '去向页面H', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - ], - edges: [ - { - source: '-3', - target: '0', - value: '来源A', - }, - { - source: '-2', - target: '0', - value: '来源B', - }, - { - source: '-1', - target: '0', - value: '来源C', - }, - { - source: '0', - target: '1', - }, - { - source: '0', - target: '2', - }, - { - source: '0', - target: '3', - }, - { - source: '0', - target: '4', - }, - { - source: '0', - target: '5', - }, - { - source: '2', - target: '6', - }, - { - source: '3', - target: '7', - }, - { - source: '4', - target: '8', - }, - ], - }; - const config = { - data, - nodeCfg: { - size: [140, 25], - items: { - containerStyle: { - fill: '#fff', - }, - padding: 6, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: [2, 2, 2, 2], - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }, - }, - style: (edge) => { - const stroke = edge.target === '0' ? '#c86bdd' : '#5ae859'; - return { - stroke, - lineWidth: Math.random() * 10 + 1, - strokeOpacity: 0.5, - }; - }, - edgeStateStyles: { - hover: { - strokeOpacity: 1, - }, - }, - }, - markerCfg: (cfg) => { - const { edges } = data; - return { - position: 'right', - show: edges.find((item) => item.source === cfg.id), - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/flow-analysis-graph/demo/custom.js b/site/examples/relation-graph/flow-analysis-graph/demo/custom.js deleted file mode 100644 index 001681738..000000000 --- a/site/examples/relation-graph/flow-analysis-graph/demo/custom.js +++ /dev/null @@ -1,221 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { FlowAnalysisGraph } from '@ant-design/graphs'; - -const DemoFlowAnalysisGraph = () => { - const data = { - nodes: [ - { - id: '0', - value: { - title: 'spmd1', - items: [ - { - text: '曝光UV', - value: '1000万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - trend: '45.9%', - }, - { - text: '点击UV', - value: '10万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - trend: '1.9%', - }, - ], - }, - }, - { - id: '1', - value: { - title: '开通营销页1', - items: [ - { - text: '访问UV', - value: '1000万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - trend: '45.9%', - }, - ], - }, - }, - { - id: '2', - value: { - title: '开通营销页2', - items: [ - { - text: '访问UV', - value: '1000万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - trend: '45.9%', - }, - ], - }, - }, - { - id: '3', - value: { - title: '去向页面1', - items: [ - { - text: '访问UV', - value: '1000万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - trend: '45.9%', - }, - ], - }, - }, - { - id: '4', - value: { - title: '去向页面2', - items: [ - { - text: '访问UV', - value: '1000万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - trend: '45.9%', - }, - ], - }, - }, - ], - edges: [ - { - source: '0', - target: '1', - }, - { - source: '0', - target: '2', - }, - { - source: '1', - target: '3', - }, - { - source: '2', - target: '4', - }, - ], - }; - - const config = { - data, - nodeCfg: { - size: [180, 30], - items: { - padding: 6, - containerStyle: { - fill: '#fff', - }, - }, - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text, value, icon, trend } = item; - text && - group?.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX, - y: startY, - text, - fill: '#aaa', - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - value && - group?.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX + 60, - y: startY, - text: value, - fill: '#000', - }, - name: `value-${Math.random()}`, - }); - icon && - group?.addShape('image', { - attrs: { - x: startX + 100, - y: startY, - width: 8, - height: 10, - img: icon, - }, - name: `image-${Math.random()}`, - }); - trend && - group?.addShape('text', { - attrs: { - textBaseline: 'top', - x: startX + 110, - y: startY, - text: trend, - fill: '#f00', - }, - name: `value-${Math.random()}`, - }); - - // 行高 - return 14; - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: [2, 2, 2, 2], - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 0.5, - }, - }, - edgeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - }, - markerCfg: (cfg) => { - const { edges } = data; - return { - position: 'right', - show: edges.find((item) => item.source === cfg.id), - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - layout: { - ranksepFunc: () => 30, - nodesepFunc: () => 30, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/flow-analysis-graph/demo/layout.js b/site/examples/relation-graph/flow-analysis-graph/demo/layout.js deleted file mode 100644 index 55f9af1fc..000000000 --- a/site/examples/relation-graph/flow-analysis-graph/demo/layout.js +++ /dev/null @@ -1,234 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { FlowAnalysisGraph } from '@ant-design/graphs'; - -const DemoFlowAnalysisGraph = () => { - const data = { - nodes: [ - { - id: '-3', - value: { - title: '来源页面A', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-2', - value: { - title: '来源页面B', - items: [ - { - text: '点击UV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-1', - value: { - title: '来源页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '0', - value: { - title: '活动页面', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '1', - value: { - title: '去向页面A', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '2', - value: { - title: '去向页面B', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '3', - value: { - title: '去向页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '4', - value: { - title: '去向页面D', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '5', - value: { - title: '去向页面E', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '7', - value: { - title: '去向页面G', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '8', - value: { - title: '去向页面H', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - ], - edges: [ - { - source: '-3', - target: '0', - value: '来源A', - }, - { - source: '-2', - target: '0', - value: '来源B', - }, - { - source: '-1', - target: '0', - value: '来源C', - }, - { - source: '0', - target: '1', - }, - { - source: '0', - target: '2', - }, - { - source: '0', - target: '3', - }, - { - source: '0', - target: '4', - }, - { - source: '0', - target: '5', - }, - { - source: '2', - target: '6', - }, - { - source: '3', - target: '7', - }, - { - source: '4', - target: '8', - }, - ], - }; - const config = { - data, - layout: { - rankdir: 'TB', - ranksepFunc: () => 20, - }, - nodeCfg: { - anchorPoints: [ - [0.5, 0], - [0.5, 1], - ], - }, - edgeCfg: { - type: 'polyline', - endArrow: true, - }, - markerCfg: (cfg) => { - return { - position: 'bottom', - show: data.edges.filter((item) => item.source === cfg.id)?.length, - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/flow-analysis-graph/demo/line-style.js b/site/examples/relation-graph/flow-analysis-graph/demo/line-style.js deleted file mode 100644 index e6807b757..000000000 --- a/site/examples/relation-graph/flow-analysis-graph/demo/line-style.js +++ /dev/null @@ -1,288 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { FlowAnalysisGraph } from '@ant-design/graphs'; - -const DemoFlowAnalysisGraph = () => { - const data = { - nodes: [ - { - id: '-3', - value: { - title: '来源页面A', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-2', - value: { - title: '来源页面B', - items: [ - { - text: '点击UV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-1', - value: { - title: '来源页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '0', - value: { - title: '活动页面', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '1', - value: { - title: '去向页面A', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '2', - value: { - title: '去向页面B', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '3', - value: { - title: '去向页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '4', - value: { - title: '去向页面D', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '5', - value: { - title: '去向页面E', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '7', - value: { - title: '去向页面G', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '8', - value: { - title: '去向页面H', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - ], - edges: [ - { - source: '-3', - target: '0', - value: '来源A', - }, - { - source: '-2', - target: '0', - value: '来源B', - }, - { - source: '-1', - target: '0', - value: '来源C', - }, - { - source: '0', - target: '1', - }, - { - source: '0', - target: '2', - }, - { - source: '0', - target: '3', - }, - { - source: '0', - target: '4', - }, - { - source: '0', - target: '5', - }, - { - source: '2', - target: '6', - }, - { - source: '3', - target: '7', - }, - { - source: '4', - target: '8', - }, - ], - }; - const config = { - data, - nodeCfg: { - size: [140, 25], - items: { - containerStyle: { - fill: '#fff', - }, - padding: 6, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: [2, 2, 2, 2], - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }, - }, - style: (edge) => { - const stroke = edge.target === '0' ? '#c86bdd' : '#5ae859'; - return { - stroke, - lineWidth: Math.random() * 10 + 1, - strokeOpacity: 0.5, - }; - }, - edgeStateStyles: { - hover: { - strokeOpacity: 1, - }, - }, - }, - markerCfg: (cfg) => { - const { edges } = data; - return { - position: 'right', - show: edges.find((item) => item.source === cfg.id), - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/flow-analysis-graph/demo/meta.json b/site/examples/relation-graph/flow-analysis-graph/demo/meta.json deleted file mode 100644 index 9c76b182e..000000000 --- a/site/examples/relation-graph/flow-analysis-graph/demo/meta.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "title": { - "zh": "中文分类", - "en": "Category" - }, - "demos": [ - { - "filename": "basic.js", - "title": { - "zh": "来源去向图", - "en": "Basic" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/SM9hvYbqYB/1caef0d3-78cf-4f7d-aaca-59a361cae2ec.png" - }, - { - "filename": "layout.js", - "title": { - "zh": "来源去向图-调整布局", - "en": "Layout" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/%26%26CzCKJS%26v/3dabb996-b6eb-4be9-b5ce-71f58bb7a238.png" - }, - { - "filename": "line-style.js", - "title": { - "zh": "来源去向图-边样式", - "en": "Line style" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/RBLyS%24za4m/ab3d4511-87d4-4d96-989b-97704c283556.png" - }, - { - "filename": "state.js", - "title": { - "zh": "来源去向图-状态", - "en": "State" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/vaMmDDzbmV/fc466a8f-0526-4226-af7d-a4445b00df26.png" - }, - { - "filename": "type.js", - "title": { - "zh": "来源去向图-节点类型", - "en": "Node type" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/FZ8uhqbOHj/4b5198e2-5466-46e9-8869-fca9015ccbf6.png" - }, - { - "filename": "custom.js", - "title": { - "zh": "来源去向图-自定义节点", - "en": "Custom node" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/x%24v02l2Gk1/b41b1807-2dba-4f4c-af46-192930eb7501.png" - } - ] -} diff --git a/site/examples/relation-graph/flow-analysis-graph/demo/state.js b/site/examples/relation-graph/flow-analysis-graph/demo/state.js deleted file mode 100644 index e59b8f0e3..000000000 --- a/site/examples/relation-graph/flow-analysis-graph/demo/state.js +++ /dev/null @@ -1,299 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { FlowAnalysisGraph } from '@ant-design/graphs'; - -const DemoFlowAnalysisGraph = () => { - const data = { - nodes: [ - { - id: '-3', - value: { - title: '来源页面A', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-2', - value: { - title: '来源页面B', - items: [ - { - text: '点击UV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-1', - value: { - title: '来源页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '0', - value: { - title: '活动页面', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '1', - value: { - title: '去向页面A', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '2', - value: { - title: '去向页面B', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '3', - value: { - title: '去向页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '4', - value: { - title: '去向页面D', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '5', - value: { - title: '去向页面E', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '7', - value: { - title: '去向页面G', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '8', - value: { - title: '去向页面H', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - ], - edges: [ - { - source: '-3', - target: '0', - value: '来源A', - }, - { - source: '-2', - target: '0', - value: '来源B', - }, - { - source: '-1', - target: '0', - value: '来源C', - }, - { - source: '0', - target: '1', - }, - { - source: '0', - target: '2', - }, - { - source: '0', - target: '3', - }, - { - source: '0', - target: '4', - }, - { - source: '0', - target: '5', - }, - { - source: '2', - target: '6', - }, - { - source: '3', - target: '7', - }, - { - source: '4', - target: '8', - }, - ], - }; - const config = { - data, - nodeCfg: { - size: [140, 25], - badge: { - style: (cfg) => { - const ids = ['-3', '-2', '-1']; - const fill = ids.includes(cfg.id) ? '#c86bdd' : '#5ae859'; - return { - fill, - radius: [2, 0, 0, 2], - }; - }, - }, - items: { - padding: 6, - containerStyle: { - fill: '#fff', - }, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: [2, 2, 2, 2], - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }, - }, - style: (edge) => { - const stroke = edge.target === '0' ? '#c86bdd' : '#5ae859'; - return { - stroke, - lineWidth: 1, - strokeOpacity: 0.5, - }; - }, - edgeStateStyles: { - hover: { - lineWidth: 2, - strokeOpacity: 1, - }, - }, - }, - markerCfg: (cfg) => { - const { edges } = data; - return { - position: 'right', - show: edges.find((item) => item.source === cfg.id), - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/flow-analysis-graph/demo/type.js b/site/examples/relation-graph/flow-analysis-graph/demo/type.js deleted file mode 100644 index e59b8f0e3..000000000 --- a/site/examples/relation-graph/flow-analysis-graph/demo/type.js +++ /dev/null @@ -1,299 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { FlowAnalysisGraph } from '@ant-design/graphs'; - -const DemoFlowAnalysisGraph = () => { - const data = { - nodes: [ - { - id: '-3', - value: { - title: '来源页面A', - items: [ - { - text: '曝光PV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-2', - value: { - title: '来源页面B', - items: [ - { - text: '点击UV', - value: '10.30万', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - }, - { - id: '-1', - value: { - title: '来源页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '0', - value: { - title: '活动页面', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '1', - value: { - title: '去向页面A', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '2', - value: { - title: '去向页面B', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '3', - value: { - title: '去向页面C', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '4', - value: { - title: '去向页面D', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '5', - value: { - title: '去向页面E', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '6', - value: { - title: '去向页面F', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '7', - value: { - title: '去向页面G', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - { - id: '8', - value: { - title: '去向页面H', - items: [ - { - text: '访问页面UV', - }, - ], - }, - }, - ], - edges: [ - { - source: '-3', - target: '0', - value: '来源A', - }, - { - source: '-2', - target: '0', - value: '来源B', - }, - { - source: '-1', - target: '0', - value: '来源C', - }, - { - source: '0', - target: '1', - }, - { - source: '0', - target: '2', - }, - { - source: '0', - target: '3', - }, - { - source: '0', - target: '4', - }, - { - source: '0', - target: '5', - }, - { - source: '2', - target: '6', - }, - { - source: '3', - target: '7', - }, - { - source: '4', - target: '8', - }, - ], - }; - const config = { - data, - nodeCfg: { - size: [140, 25], - badge: { - style: (cfg) => { - const ids = ['-3', '-2', '-1']; - const fill = ids.includes(cfg.id) ? '#c86bdd' : '#5ae859'; - return { - fill, - radius: [2, 0, 0, 2], - }; - }, - }, - items: { - padding: 6, - containerStyle: { - fill: '#fff', - }, - style: (cfg, group, type) => { - const styles = { - icon: { - width: 12, - height: 12, - }, - value: { - fill: '#f00', - }, - text: { - fill: '#aaa', - }, - }; - return styles[type]; - }, - }, - nodeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - }, - }, - title: { - containerStyle: { - fill: 'transparent', - }, - style: { - fill: '#000', - fontSize: 12, - }, - }, - style: { - fill: '#E6EAF1', - stroke: '#B2BED5', - radius: [2, 2, 2, 2], - }, - }, - edgeCfg: { - label: { - style: { - fill: '#aaa', - fontSize: 12, - fillOpacity: 1, - }, - }, - style: (edge) => { - const stroke = edge.target === '0' ? '#c86bdd' : '#5ae859'; - return { - stroke, - lineWidth: 1, - strokeOpacity: 0.5, - }; - }, - edgeStateStyles: { - hover: { - lineWidth: 2, - strokeOpacity: 1, - }, - }, - }, - markerCfg: (cfg) => { - const { edges } = data; - return { - position: 'right', - show: edges.find((item) => item.source === cfg.id), - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/flow-analysis-graph/index.en.md b/site/examples/relation-graph/flow-analysis-graph/index.en.md deleted file mode 100644 index 4b38637d9..000000000 --- a/site/examples/relation-graph/flow-analysis-graph/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Flow Analysis Graph -order: 1 ---- diff --git a/site/examples/relation-graph/flow-analysis-graph/index.zh.md b/site/examples/relation-graph/flow-analysis-graph/index.zh.md deleted file mode 100644 index cfc2ce4c0..000000000 --- a/site/examples/relation-graph/flow-analysis-graph/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 来源去向图 -order: 1 ---- diff --git a/site/examples/relation-graph/fund-flow-graph/API.en.md b/site/examples/relation-graph/fund-flow-graph/API.en.md deleted file mode 100644 index 718c4c032..000000000 --- a/site/examples/relation-graph/fund-flow-graph/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/fund-flow-graph/API.zh.md b/site/examples/relation-graph/fund-flow-graph/API.zh.md deleted file mode 100644 index 8ef851055..000000000 --- a/site/examples/relation-graph/fund-flow-graph/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/fund-flow-graph/demo/basic.js b/site/examples/relation-graph/fund-flow-graph/demo/basic.js deleted file mode 100644 index 3468fb883..000000000 --- a/site/examples/relation-graph/fund-flow-graph/demo/basic.js +++ /dev/null @@ -1,99 +0,0 @@ -import React, { useState, useEffect, useRef } from 'react'; -import ReactDOM from 'react-dom'; -import { FundFlowGraph } from '@ant-design/graphs'; - -const DemoFundFlowGraph = () => { - const data = { - nodes: [ - { - id: '1', - value: { - text: 'Company1', - // 建议使用 bae64 数据 - icon: 'https://gw.alipayobjects.com/zos/antfincdn/28B4PgocL4/bbd3e7ef-6b5e-4034-893d-1b5073ad9aa4.png', - }, - }, - { - id: '2', - value: { text: 'Company2' }, - }, - { - id: '3', - value: { text: 'Company3' }, - }, - { - id: '4', - value: { text: 'Company4' }, - }, - { - id: '5', - value: { text: 'Company5' }, - }, - { - id: '6', - value: { text: 'Company6' }, - }, - { - id: '7', - value: { text: 'Company7' }, - }, - { - id: '8', - value: { text: 'Company8' }, - }, - { - id: '9', - value: { text: 'Company9' }, - }, - ], - edges: [ - { - source: '1', - target: '2', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '1', - target: '3', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '2', - target: '5', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '5', - target: '6', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '3', - target: '4', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '4', - target: '7', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '1', - target: '8', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '1', - target: '9', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - ], - }; - const config = { - data, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/fund-flow-graph/demo/meta.json b/site/examples/relation-graph/fund-flow-graph/demo/meta.json deleted file mode 100644 index 4f115e0dc..000000000 --- a/site/examples/relation-graph/fund-flow-graph/demo/meta.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "title": { - "zh": "中文分类", - "en": "Category" - }, - "demos": [ - { - "filename": "basic.js", - "title": { - "zh": "资金流向图", - "en": "Basic" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/qQk2NkG%26En/8a4e97f4-23a0-4aba-b2a6-a71343b7a3f8.png" - }, - { - "filename": "style.js", - "title": { - "zh": "资金流向图-格式化设置", - "en": "Style" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/p7h4IUyVXM/680af564-b119-4e38-9626-bb9917424ec7.png" - } - ] -} diff --git a/site/examples/relation-graph/fund-flow-graph/demo/style.js b/site/examples/relation-graph/fund-flow-graph/demo/style.js deleted file mode 100644 index c003477b1..000000000 --- a/site/examples/relation-graph/fund-flow-graph/demo/style.js +++ /dev/null @@ -1,135 +0,0 @@ -import React, { useState, useEffect, useRef } from 'react'; -import ReactDOM from 'react-dom'; -import { FundFlowGraph } from '@ant-design/graphs'; - -const DemoFundFlowGraph = () => { - const data = { - nodes: [ - { - id: '1', - value: { - text: 'Company1', - // 建议使用 bae64 数据 - icon: 'https://gw.alipayobjects.com/zos/antfincdn/28B4PgocL4/bbd3e7ef-6b5e-4034-893d-1b5073ad9aa4.png', - }, - }, - { - id: '2', - value: { text: 'Company2' }, - }, - { - id: '3', - value: { text: 'Company3' }, - }, - { - id: '4', - value: { text: 'Company4' }, - }, - { - id: '5', - value: { text: 'Company5' }, - }, - { - id: '6', - value: { text: 'Company6' }, - }, - { - id: '7', - value: { text: 'Company7' }, - }, - { - id: '8', - value: { text: 'Company8' }, - }, - { - id: '9', - value: { text: 'Company9' }, - }, - ], - edges: [ - { - source: '1', - target: '2', - value: { text: '100,000 Yuan', subText: '2019-08-03', extraKey: 'A' }, - }, - { - source: '1', - target: '3', - value: { text: '100,000 Yuan', subText: '2019-08-03', extraKey: 'B' }, - }, - { - source: '2', - target: '5', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '5', - target: '6', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '3', - target: '4', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '4', - target: '7', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '1', - target: '8', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - { - source: '1', - target: '9', - value: { text: '100,000 Yuan', subText: '2019-08-03' }, - }, - ], - }; - const colorMap = { - A: '#FFAA15', - B: '#72CC4A', - }; - const config = { - data, - edgeCfg: { - // type: 'line', - endArrow: (edge) => { - const { value } = edge; - return { - fill: colorMap[value.extraKey] || '#40a9ff', - }; - }, - style: (edge) => { - const { value } = edge; - return { - stroke: colorMap[value.extraKey] || '#40a9ff', - }; - }, - edgeStateStyles: { - hover: { - stroke: '#1890ff', - lineWidth: 2, - endArrow: { - fill: '#1890ff', - }, - }, - }, - }, - markerCfg: (cfg) => { - const { edges } = data; - return { - position: 'right', - show: edges.find((item) => item.source === cfg.id), - collapsed: !edges.find((item) => item.source === cfg.id), - }; - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/fund-flow-graph/index.en.md b/site/examples/relation-graph/fund-flow-graph/index.en.md deleted file mode 100644 index 77e92773e..000000000 --- a/site/examples/relation-graph/fund-flow-graph/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Fund Flow Graph -order: 2 ---- diff --git a/site/examples/relation-graph/fund-flow-graph/index.zh.md b/site/examples/relation-graph/fund-flow-graph/index.zh.md deleted file mode 100644 index ffce08c52..000000000 --- a/site/examples/relation-graph/fund-flow-graph/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 资金流向图 -order: 2 ---- diff --git a/site/examples/relation-graph/mind-map-graph/API.en.md b/site/examples/relation-graph/mind-map-graph/API.en.md deleted file mode 100644 index f75476884..000000000 --- a/site/examples/relation-graph/mind-map-graph/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/mind-map-graph/API.zh.md b/site/examples/relation-graph/mind-map-graph/API.zh.md deleted file mode 100644 index d68916f48..000000000 --- a/site/examples/relation-graph/mind-map-graph/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/mind-map-graph/demo/basic.js b/site/examples/relation-graph/mind-map-graph/demo/basic.js deleted file mode 100644 index 060b87e7b..000000000 --- a/site/examples/relation-graph/mind-map-graph/demo/basic.js +++ /dev/null @@ -1,279 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { MindMapGraph } from '@ant-design/graphs'; - -const MindMapGraphGraph = () => { - const data = { - id: 'A0', - value: { - title: '订单金额', - items: [ - { - text: '3031万', - }, - ], - }, - children: [ - { - id: 'A1', - value: { - title: '华南', - items: [ - { - text: '占比', - value: '30%', - }, - ], - }, - children: [ - { - id: 'A11', - value: { - title: '广东', - items: [ - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A12', - value: { - title: '广西', - items: [ - { - text: '占比', - value: '30%', - }, - ], - }, - }, - { - id: 'A13', - value: { - title: '海南', - items: [ - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - { - id: 'A2', - value: { - title: '华北', - items: [ - { - text: '占比', - value: '30%', - icon: 'https://gw.alipayobjects.com/zos/antfincdn/iFh9X011qd/7797962c-04b6-4d67-9143-e9d05f9778bf.png', - }, - ], - }, - children: [ - { - id: 'A2-1', - value: { - title: '华北', - items: [ - { - text: '占比', - value: '30%', - }, - ], - }, - }, - ], - }, - ], - }; - - const level = [-2, -1, 0, 1, 2]; - const levelTexts = level.map((l) => { - if (l < 0) return `${Math.abs(l)}层上游`; - if (l > 0) return `${Math.abs(l)}层下游`; - return `主节点`; - }); - const containerWidth = 800; - const width = 120; - const LevelFC = () => ( - - {levelTexts.map((l) => ( -
- - {l} - -
- ))} -
- ); - - const nodeSize = [width, 40]; - const config = { - data: data, - autoFit: false, - width: containerWidth, - // level: 5, - layout: { - getHeight: () => { - return 40; - }, - getWidth: () => { - return nodeSize[0]; - }, - getVGap: () => { - return 16; - }, - getHGap: () => { - return (containerWidth / level.length - width) / 2; - }, - }, - // level, - nodeCfg: { - size: nodeSize, - padding: 4, - style: { - stroke: '#5AD8A6', - }, - items: { - padding: [4, 0], - }, - customContent: (item, group, cfg) => { - const { startX, startY, width } = cfg; - const { text, value, icon, trend } = item; - const tagWidth = 28; - const tagHeight = 16; - group?.addShape('rect', { - attrs: { - x: 0, - y: 0, - width: nodeSize[0], - height: nodeSize[1] + 8, - fillOpacity: 0.1, - }, - // group 内唯一字段 - name: `container-${Math.random()}`, - }); - group?.addShape('rect', { - attrs: { - x: startX, - y: startY, - width: tagWidth, - height: tagHeight, - fill: '#47c796', - }, - // group 内唯一字段 - name: `tag-${Math.random()}`, - }); - group?.addShape('text', { - attrs: { - textBaseline: 'middle', - textAlign: 'center', - x: startX + tagWidth / 2, - y: startY + tagHeight / 2, - text: '人群', - fill: '#fff', - fontSize: 10, - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - group?.addShape('text', { - attrs: { - textBaseline: 'middle', - textAlign: 'start', - x: startX + tagWidth + 4, - y: startY + tagHeight / 2, - text: '人群服务名称', - fill: 'rgba(0,0,0,.65)', - fontSize: 10, - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - const textMargin = 10; - const sense = group?.addShape('text', { - attrs: { - textBaseline: 'top', - textAlign: 'start', - x: startX, - y: startY + tagHeight + textMargin, - text: '所属场景:', - fill: 'rgba(0,0,0,.45)', - fontSize: 10, - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - group?.addShape('text', { - attrs: { - textBaseline: 'top', - textAlign: 'start', - x: sense.getBBox().maxX, - y: startY + tagHeight + textMargin, - text: '这是场景名称', - fill: 'rgba(0,0,0,.45)', - fontSize: 10, - }, - // group 内唯一字段 - name: `text-${Math.random()}`, - }); - }, - }, - markerCfg: (cfg) => { - const { children = [], id } = cfg; - if (id === 'A0') { - return [ - { - position: 'left', - show: !!children?.length, - collapsed: !children?.length, - }, - { - position: 'right', - show: !!children?.length, - collapsed: !children?.length, - }, - ]; - } - return { - position: 'right', - show: !!children?.length, - collapsed: !children?.length, - }; - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ( -
-
{LevelFC()}
- -
- ); -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/mind-map-graph/index.en.md b/site/examples/relation-graph/mind-map-graph/index.en.md deleted file mode 100644 index 5a892d065..000000000 --- a/site/examples/relation-graph/mind-map-graph/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: MindMap Graph -order: 0 ---- diff --git a/site/examples/relation-graph/mind-map-graph/index.zh.md b/site/examples/relation-graph/mind-map-graph/index.zh.md deleted file mode 100644 index 7734d8494..000000000 --- a/site/examples/relation-graph/mind-map-graph/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 脑图 -order: 4 ---- diff --git a/site/examples/relation-graph/organization-graph/API.en.md b/site/examples/relation-graph/organization-graph/API.en.md deleted file mode 100644 index 4e754e489..000000000 --- a/site/examples/relation-graph/organization-graph/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/organization-graph/API.zh.md b/site/examples/relation-graph/organization-graph/API.zh.md deleted file mode 100644 index 0b4207193..000000000 --- a/site/examples/relation-graph/organization-graph/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/organization-graph/demo/basic.js b/site/examples/relation-graph/organization-graph/demo/basic.js deleted file mode 100644 index 8a3a1ae9f..000000000 --- a/site/examples/relation-graph/organization-graph/demo/basic.js +++ /dev/null @@ -1,112 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { OrganizationGraph } from '@ant-design/graphs'; - -const DemoOrganizationGraph = () => { - const data = { - id: 'root', - value: { - name: '股东会', - }, - children: [ - { - id: 'joel', - value: { - name: 'Joel Alan', - }, - children: [ - { - id: 'c1', - value: { - name: 'c1', - }, - children: [ - { - id: 'c1-1', - value: { - name: 'c1-1', - }, - }, - { - id: 'c1-2', - value: { - name: 'c1-2', - }, - children: [ - { - id: 'c1-2-1', - value: { - name: 'c1-2-1', - }, - }, - { - id: 'c1-2-2', - value: { - name: 'c1-2-2', - }, - }, - ], - }, - ], - }, - { - id: 'c2', - value: { - name: 'c2', - }, - }, - { - id: 'c3', - value: { - name: 'c3', - }, - children: [ - { - id: 'c3-1', - value: { - name: 'c3-1', - }, - }, - { - id: 'c3-2', - value: { - name: 'c3-2', - }, - children: [ - { - id: 'c3-2-1', - value: { - name: 'c3-2-1', - }, - }, - { - id: 'c3-2-2', - value: { - name: 'c3-2-2', - }, - }, - { - id: 'c3-2-3', - value: { - name: 'c3-2-3', - }, - }, - ], - }, - { - id: 'c3-3', - value: { - name: 'c3-3', - }, - }, - ], - }, - ], - }, - ], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/organization-graph/demo/custom.js b/site/examples/relation-graph/organization-graph/demo/custom.js deleted file mode 100644 index a7ba1abcf..000000000 --- a/site/examples/relation-graph/organization-graph/demo/custom.js +++ /dev/null @@ -1,320 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { OrganizationGraph } from '@ant-design/graphs'; - -const DemoOrganizationGraph = () => { - const data = { - id: 'root', - value: { - name: '赵某某', - }, - children: [ - { - id: 'jug', - value: { - name: '审判长', - level: 2, - }, - children: [ - { - id: 'joel', - value: { - name: '一审', - level: 1, - }, - children: [ - { - id: 'c1', - value: { - name: '原告', - level: 2, - }, - children: [ - { - id: 'c1-1', - value: { - name: '中纺原料xx有限公司', - }, - children: [ - { - id: 'c1-1-1', - value: { - name: '法定代表人', - }, - children: [ - { - id: 'c1-1-1-1', - value: { - name: '刘某某', - }, - }, - ], - }, - ], - }, - { - id: 'c1-2', - value: { - name: '委托诉讼代理人', - }, - children: [ - { - id: 'c1-2-1', - value: { - name: '北京xx律师事务所', - }, - }, - { - id: 'c1-2-2', - value: { - name: '赵某某', - }, - }, - ], - }, - ], - }, - { - id: 'c2', - value: { - name: '被告1', - level: 2, - }, - children: [ - { - id: 'c2-1', - value: { - name: '北京西郊xxxx农副产品批发市场有限公司', - }, - children: [ - { - id: 'c2-1-1', - value: { - name: '法定代表人', - }, - children: [ - { - id: 'c2-1-1-1', - value: { - name: '李某某', - }, - }, - ], - }, - ], - }, - { - id: 'c2-2', - value: { - name: '委托诉讼代理人', - }, - children: [ - { - id: 'c2-2-1', - value: { - name: '北京xx律师事务所', - }, - }, - { - id: 'c2-2-2', - value: { - name: '张某某', - }, - }, - ], - }, - ], - }, - { - id: 'c3', - value: { - name: '被告2', - level: 2, - }, - children: [ - { - id: 'c3-1', - value: { - name: '徐某某', - }, - }, - { - id: 'c3-2', - value: { - name: '委托诉讼代理人', - }, - children: [ - { - id: 'c3-2-1', - value: { - name: '北京xx律师事务所', - }, - }, - { - id: 'c3-2-2', - value: { - name: '张某某', - }, - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }; - const getTextStyle = (level) => { - switch (level) { - case 1: - return 18; - case 2: - return 12; - default: - return 12; - } - }; - - const getRootTextAttrs = () => { - return { - fontSize: getTextStyle(1), - fontWeight: 'bold', - fill: '#fff', - }; - }; - - const getSecondTextStyle = () => { - return { - fontSize: getTextStyle(2), - color: '#000', - }; - }; - - const getRootNodeStyle = () => { - return { - fill: '#1E88E5', - stroke: '#1E88E5', - radius: 5, - }; - }; - - const getSecondNodeStyle = () => { - return { - fill: '#e8e8e8', - stroke: '#e8e8e8', - radius: 5, - }; - }; - - const calcStrLen = function calcStrLen(str) { - var len = 0; - for (var i = 0; i < str.length; i++) { - if (str.charCodeAt(i) > 0 && str.charCodeAt(i) < 128) { - len++; - } else { - len += 2; - } - } - return len; - }; - - const config = { - nodeCfg: { - size: [40, 40], - autoWidth: true, - padding: 10, - style: (item) => { - const { level } = item.value; - return { - fill: 'transparent', - stroke: 'transparent', - radius: 4, - cursor: 'pointer', - ...(level === 1 ? getRootNodeStyle() : {}), - ...(level === 2 ? getSecondNodeStyle() : {}), - }; - }, - nodeStateStyles: { - hover: { - lineWidth: 2, - stroke: '#96DEFF', - }, - }, - label: { - style: (cfg, group, type) => { - const { level, href } = cfg.value; - - if (type !== 'name') { - return {}; - } - return { - fontSize: getTextStyle(), - cursor: 'pointer', - fill: href ? '#1890ff' : '#000', - ...(level === 1 ? getRootTextAttrs() : {}), - ...(level === 2 ? getSecondTextStyle() : {}), - }; - }, - }, - anchorPoints: [ - [0, 0.5], - [1, 0.5], - ], - }, - edgeCfg: { - type: 'polyline', - style: { - stroke: '#000', - endArrow: false, - }, - }, - markerCfg: (cfg) => { - const { level, direction } = cfg.value; - const show = level !== 1 && cfg.children && cfg.children.length > 0; - return { - position: direction, - show, - }; - }, - layout: { - type: 'mindmap', - direction: 'H', - getWidth: (cfg) => { - const { name, level } = cfg.value; - const fontSize = getTextStyle(level); - const width = (fontSize * calcStrLen(name)) / 2; - return width; - }, - getHeight: () => { - return 25; - }, - getVGap: () => { - return 20; - }, - getHGap: () => { - return 40; - }, - getSide: (d) => { - return d.data.value.direction === 'left' ? 'left' : 'right'; - }, - }, - autoFit: true, - fitCenter: true, - animate: false, - behaviors: ['drag-canvas', 'zoom-canvas'], - onReady: (graph) => { - graph.on('node:click', (evt) => { - const { item, target } = evt; - const { value } = item.get('model'); - if (value.href) { - window.open(value.href); - } - }); - }, - }; - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/organization-graph/demo/meta.json b/site/examples/relation-graph/organization-graph/demo/meta.json deleted file mode 100644 index 7ff54143a..000000000 --- a/site/examples/relation-graph/organization-graph/demo/meta.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "title": { - "zh": "中文分类", - "en": "Category" - }, - "demos": [ - { - "filename": "basic.js", - "title": { - "zh": "组织架构图", - "en": "Basic" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/ZOrAJo18HO/5f53b378-ffc0-4982-83d4-a0ddcac86b4d.png" - }, - { - "filename": "style.js", - "title": { - "zh": "组织架构图-格式化设置", - "en": "Style" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/9Q5ftNEgkR/f9f6ae73-9a2c-4c8d-8ce2-919b16acdad0.png" - }, - { - "filename": "custom.js", - "title": { - "zh": "组织架构图-自定义样式", - "en": "Custom" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/JailFwu5B3/042ce37a-9b73-4218-ae2c-dcdb5994379a.png" - } - ] -} diff --git a/site/examples/relation-graph/organization-graph/demo/style.js b/site/examples/relation-graph/organization-graph/demo/style.js deleted file mode 100644 index 67d4383b8..000000000 --- a/site/examples/relation-graph/organization-graph/demo/style.js +++ /dev/null @@ -1,141 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { OrganizationGraph } from '@ant-design/graphs'; - -const DemoOrganizationGraph = () => { - const data = { - id: 'joel', - value: { - name: 'Joel Alan', - title: 'CEO', - // 建议使用 bae64 数据 - icon: 'https://avatars.githubusercontent.com/u/31396322?v=4', - }, - children: [ - { - id: 'c1', - value: { - name: 'c1', - title: 'CTO', - }, - children: [ - { - id: 'c1-1', - value: { - name: 'c1-1', - }, - }, - { - id: 'c1-2', - value: { - name: 'c1-2', - }, - children: [ - { - id: 'c1-2-1', - value: { - name: 'c1-2-1', - }, - }, - { - id: 'c1-2-2', - value: { - name: 'c1-2-2', - }, - }, - ], - }, - ], - }, - { - id: 'c2', - value: { - name: 'c2', - title: 'COO', - }, - }, - { - id: 'c3', - value: { - name: 'c3', - title: 'CFO', - }, - children: [ - { - id: 'c3-1', - value: { - name: 'c3-1', - }, - }, - { - id: 'c3-2', - value: { - name: 'c3-2', - }, - children: [ - { - id: 'c3-2-1', - value: { - name: 'c3-2-1', - }, - }, - { - id: 'c3-2-2', - value: { - name: 'c3-2-2', - }, - }, - { - id: 'c3-2-3', - value: { - name: 'c3-2-3', - }, - }, - ], - }, - { - id: 'c3-3', - value: { - name: 'c3-3', - }, - }, - ], - }, - ], - }; - - return ( - { - return node.id === 'joel' - ? { - fill: '#91d5ff', - stroke: '#91d5ff', - } - : {}; - }, - label: { - style: (node, group, type) => { - const styles = { - icon: { - width: 32, - height: 32, - }, - title: { - fill: '#fff', - }, - name: { - fill: '#fff', - }, - }; - return node.id === 'joel' ? styles[type] : {}; - }, - }, - }} - /> - ); -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/organization-graph/index.en.md b/site/examples/relation-graph/organization-graph/index.en.md deleted file mode 100644 index dee962beb..000000000 --- a/site/examples/relation-graph/organization-graph/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Organization Graph -order: 3 ---- diff --git a/site/examples/relation-graph/organization-graph/index.zh.md b/site/examples/relation-graph/organization-graph/index.zh.md deleted file mode 100644 index 91f7b83bb..000000000 --- a/site/examples/relation-graph/organization-graph/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 组织架构图 -order: 3 ---- diff --git a/site/examples/relation-graph/radial-graph/API.en.md b/site/examples/relation-graph/radial-graph/API.en.md deleted file mode 100644 index 101499f13..000000000 --- a/site/examples/relation-graph/radial-graph/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/radial-graph/API.zh.md b/site/examples/relation-graph/radial-graph/API.zh.md deleted file mode 100644 index 7f9528d9c..000000000 --- a/site/examples/relation-graph/radial-graph/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/radial-graph/demo/basic.js b/site/examples/relation-graph/radial-graph/demo/basic.js deleted file mode 100644 index 75327cc83..000000000 --- a/site/examples/relation-graph/radial-graph/demo/basic.js +++ /dev/null @@ -1,179 +0,0 @@ -import React, { useRef } from 'react'; -import ReactDOM from 'react-dom'; -import { RadialGraph } from '@ant-design/graphs'; - -const DemoRadialGraph = () => { - const chartRef = useRef(); - const RadialData = { - nodes: [ - { - id: '0', - label: '0', - }, - { - id: '1', - label: '1', - }, - { - id: '2', - label: '2', - }, - { - id: '3', - label: '3', - }, - { - id: '4', - label: '4', - }, - { - id: '5', - label: '5', - }, - { - id: '6', - label: '6', - }, - { - id: '7', - label: '7', - }, - { - id: '8', - label: '8', - }, - { - id: '9', - label: '9', - }, - ], - edges: [ - { - source: '0', - target: '1', - }, - { - source: '0', - target: '2', - }, - { - source: '0', - target: '3', - }, - { - source: '0', - target: '4', - }, - { - source: '0', - target: '5', - }, - { - source: '0', - target: '6', - }, - { - source: '0', - target: '7', - }, - { - source: '0', - target: '8', - }, - { - source: '0', - target: '9', - }, - ], - }; - - const fetchData = (node) => { - return new Promise((resolve, reject) => { - const data = new Array(Math.ceil(Math.random() * 10) + 2).fill('').map((_, i) => i + 1); - setTimeout(() => { - resolve({ - nodes: [ - { - ...node, - }, - ].concat( - data.map((i) => { - return { - id: `${node.id}-${i}`, - label: `${node.label}-${i}`, - }; - }), - ), - edges: data.map((i) => { - return { - source: node.id, - target: `${node.id}-${i}`, - }; - }), - }); - }, 1000); - }); - }; - - const asyncData = async (node) => { - return await fetchData(node); - }; - - const config = { - data: RadialData, - autoFit: false, - layout: { - unitRadius: 80, - /** 节点直径 */ - nodeSize: 20, - /** 节点间距 */ - nodeSpacing: 10, - }, - nodeCfg: { - asyncData, - size: 20, - style: { - fill: '#6CE8DC', - stroke: '#6CE8DC', - }, - labelCfg: { - style: { - fontSize: 5, - fill: '#000', - }, - }, - }, - menuCfg: { - customContent: (e) => { - return ( -
- -
- ); - }, - }, - edgeCfg: { - style: { - lineWidth: 1, - }, - endArrow: { - d: 10, - size: 2, - }, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - onReady: (graph) => { - chartRef.current = graph; - }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/radial-graph/demo/meta.json b/site/examples/relation-graph/radial-graph/demo/meta.json deleted file mode 100644 index 903e6234b..000000000 --- a/site/examples/relation-graph/radial-graph/demo/meta.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "title": { - "zh": "中文分类", - "en": "Category" - }, - "demos": [ - { - "filename": "basic.js", - "title": { - "zh": "辐射图", - "en": "Basic" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/LvOmM0I5dZ/explore.gif" - } - ] -} diff --git a/site/examples/relation-graph/radial-graph/index.en.md b/site/examples/relation-graph/radial-graph/index.en.md deleted file mode 100644 index 00d16afe6..000000000 --- a/site/examples/relation-graph/radial-graph/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Radial Graph -order: 4 ---- diff --git a/site/examples/relation-graph/radial-graph/index.zh.md b/site/examples/relation-graph/radial-graph/index.zh.md deleted file mode 100644 index 06b4d2274..000000000 --- a/site/examples/relation-graph/radial-graph/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 辐射图 -order: 4 ---- diff --git a/site/examples/relation-graph/radial-tree-graph/API.en.md b/site/examples/relation-graph/radial-tree-graph/API.en.md deleted file mode 100644 index 2573d7e7d..000000000 --- a/site/examples/relation-graph/radial-tree-graph/API.en.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/radial-tree-graph/API.zh.md b/site/examples/relation-graph/radial-tree-graph/API.zh.md deleted file mode 100644 index 938048a7b..000000000 --- a/site/examples/relation-graph/radial-tree-graph/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/examples/relation-graph/radial-tree-graph/demo/basic.js b/site/examples/relation-graph/radial-tree-graph/demo/basic.js deleted file mode 100644 index 3a9ba9092..000000000 --- a/site/examples/relation-graph/radial-tree-graph/demo/basic.js +++ /dev/null @@ -1,87 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { RadialTreeGraph } from '@ant-design/graphs'; - -const DemoRadialTreeGraph = () => { - const data = { - id: 'Modeling Methods', - children: [ - { - id: 'Classification', - children: [ - { id: 'Logistic regression', value: 'Logistic regression' }, - { id: 'Linear discriminant analysis', value: 'Linear discriminant analysis' }, - { id: 'Rules', value: 'Rules' }, - { id: 'Decision trees', value: 'Decision trees' }, - { id: 'Naive Bayes', value: 'Naive Bayes' }, - { id: 'K nearest neighbor', value: 'K nearest neighbor' }, - { id: 'Probabilistic neural network', value: 'Probabilistic neural network' }, - { id: 'Support vector machine', value: 'Support vector machine' }, - ], - value: 'Classification', - }, - { - id: 'Consensus', - children: [ - { - id: 'Models diversity', - children: [ - { id: 'Different initializations', value: 'Different initializations' }, - { id: 'Different parameter choices', value: 'Different parameter choices' }, - { id: 'Different architectures', value: 'Different architectures' }, - { id: 'Different modeling methods', value: 'Different modeling methods' }, - { id: 'Different training sets', value: 'Different training sets' }, - { id: 'Different feature sets', value: 'Different feature sets' }, - ], - value: 'Models diversity', - }, - { - id: 'Methods', - children: [ - { id: 'Classifier selection', value: 'Classifier selection' }, - { id: 'Classifier fusion', value: 'Classifier fusion' }, - ], - value: 'Methods', - }, - { - id: 'Common', - children: [ - { id: 'Bagging', value: 'Bagging' }, - { id: 'Boosting', value: 'Boosting' }, - { id: 'AdaBoost', value: 'AdaBoost' }, - ], - value: 'Common', - }, - ], - value: 'Consensus', - }, - { - id: 'Regression', - children: [ - { id: 'Multiple linear regression', value: 'Multiple linear regression' }, - { id: 'Partial least squares', value: 'Partial least squares' }, - { - id: 'Multi-layer feedforward neural network', - value: 'Multi-layer feedforward neural network', - }, - { id: 'General regression neural network', value: 'General regression neural network' }, - { id: 'Support vector regression', value: 'Support vector regression' }, - ], - value: 'Regression', - }, - ], - value: 'Modeling Methods', - }; - - const config = { - data, - nodeCfg: { - type: 'diamond', - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/radial-tree-graph/demo/layout.js b/site/examples/relation-graph/radial-tree-graph/demo/layout.js deleted file mode 100644 index 18c459a5c..000000000 --- a/site/examples/relation-graph/radial-tree-graph/demo/layout.js +++ /dev/null @@ -1,107 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { RadialTreeGraph } from '@ant-design/graphs'; - -const DemoRadialTreeGraph = () => { - const data = { - id: 'Modeling Methods', - children: [ - { - id: 'Classification', - children: [ - { id: 'Logistic regression', value: 'Logistic regression' }, - { id: 'Linear discriminant analysis', value: 'Linear discriminant analysis' }, - { id: 'Rules', value: 'Rules' }, - { id: 'Decision trees', value: 'Decision trees' }, - { id: 'Naive Bayes', value: 'Naive Bayes' }, - { id: 'K nearest neighbor', value: 'K nearest neighbor' }, - { id: 'Probabilistic neural network', value: 'Probabilistic neural network' }, - { id: 'Support vector machine', value: 'Support vector machine' }, - ], - value: 'Classification', - }, - { - id: 'Consensus', - children: [ - { - id: 'Models diversity', - children: [ - { id: 'Different initializations', value: 'Different initializations' }, - { id: 'Different parameter choices', value: 'Different parameter choices' }, - { id: 'Different architectures', value: 'Different architectures' }, - { id: 'Different modeling methods', value: 'Different modeling methods' }, - { id: 'Different training sets', value: 'Different training sets' }, - { id: 'Different feature sets', value: 'Different feature sets' }, - ], - value: 'Models diversity', - }, - { - id: 'Methods', - children: [ - { id: 'Classifier selection', value: 'Classifier selection' }, - { id: 'Classifier fusion', value: 'Classifier fusion' }, - ], - value: 'Methods', - }, - { - id: 'Common', - children: [ - { id: 'Bagging', value: 'Bagging' }, - { id: 'Boosting', value: 'Boosting' }, - { id: 'AdaBoost', value: 'AdaBoost' }, - ], - value: 'Common', - }, - ], - value: 'Consensus', - }, - { - id: 'Regression', - children: [ - { id: 'Multiple linear regression', value: 'Multiple linear regression' }, - { id: 'Partial least squares', value: 'Partial least squares' }, - { - id: 'Multi-layer feedforward neural network', - value: 'Multi-layer feedforward neural network', - }, - { id: 'General regression neural network', value: 'General regression neural network' }, - { id: 'Support vector regression', value: 'Support vector regression' }, - ], - value: 'Regression', - }, - ], - value: 'Modeling Methods', - }; - - const config = { - data, - nodeCfg: { - type: 'diamond', - }, - layout: { - type: 'compactBox', - direction: 'RL', - getId: function getId(d) { - return d.id; - }, - getHeight: () => { - return 26; - }, - getWidth: () => { - return 26; - }, - getVGap: () => { - return 20; - }, - getHGap: () => { - return 30; - }, - radial: true, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/radial-tree-graph/demo/meta.json b/site/examples/relation-graph/radial-tree-graph/demo/meta.json deleted file mode 100644 index ee632caf5..000000000 --- a/site/examples/relation-graph/radial-tree-graph/demo/meta.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "title": { - "zh": "中文分类", - "en": "Category" - }, - "demos": [ - { - "filename": "basic.js", - "title": { - "zh": "辐射树图", - "en": "Basic" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/lXkLSzbqST/c58f6a93-e4de-478b-93c2-4c1fc1471fbd.png" - }, - { - "filename": "layout.js", - "title": { - "zh": "辐射树图-调整布局", - "en": "Layout" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/%242j6oyybYK/46bf0b8d-9d34-4fbe-a9bb-1580346f7f1b.png" - }, - { - "filename": "style.js", - "title": { - "zh": "辐射树图-格式化设置", - "en": "Style" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/tCykDJncjJ/2200d0c0-40bd-46a8-a885-30393fb165b1.png" - } - ] -} diff --git a/site/examples/relation-graph/radial-tree-graph/demo/style.js b/site/examples/relation-graph/radial-tree-graph/demo/style.js deleted file mode 100644 index 75c425bfe..000000000 --- a/site/examples/relation-graph/radial-tree-graph/demo/style.js +++ /dev/null @@ -1,167 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { RadialTreeGraph } from '@ant-design/graphs'; - -const DemoRadialTreeGraph = () => { - const data = { - id: 'Modeling Methods', - children: [ - { - id: 'Classification', - children: [ - { id: 'Logistic regression', value: 'Logistic regression' }, - { - id: 'Linear discriminant analysis', - value: 'Linear discriminant analysis', - }, - { id: 'Rules', value: 'Rules' }, - { id: 'Decision trees', value: 'Decision trees' }, - { id: 'Naive Bayes', value: 'Naive Bayes' }, - { id: 'K nearest neighbor', value: 'K nearest neighbor' }, - { - id: 'Probabilistic neural network', - value: 'Probabilistic neural network', - }, - { id: 'Support vector machine', value: 'Support vector machine' }, - ], - value: 'Classification', - }, - { - id: 'Consensus', - children: [ - { - id: 'Models diversity', - children: [ - { - id: 'Different initializations', - value: 'Different initializations', - }, - { - id: 'Different parameter choices', - value: 'Different parameter choices', - }, - { - id: 'Different architectures', - value: 'Different architectures', - }, - { - id: 'Different modeling methods', - value: 'Different modeling methods', - }, - { - id: 'Different training sets', - value: 'Different training sets', - }, - { id: 'Different feature sets', value: 'Different feature sets' }, - ], - value: 'Models diversity', - }, - { - id: 'Methods', - children: [ - { id: 'Classifier selection', value: 'Classifier selection' }, - { id: 'Classifier fusion', value: 'Classifier fusion' }, - ], - value: 'Methods', - }, - { - id: 'Common', - children: [ - { id: 'Bagging', value: 'Bagging' }, - { id: 'Boosting', value: 'Boosting' }, - { id: 'AdaBoost', value: 'AdaBoost' }, - ], - value: 'Common', - }, - ], - value: 'Consensus', - }, - { - id: 'Regression', - children: [ - { - id: 'Multiple linear regression', - value: 'Multiple linear regression', - }, - { id: 'Partial least squares', value: 'Partial least squares' }, - { - id: 'Multi-layer feedforward neural network', - value: 'Multi-layer feedforward neural network', - }, - { - id: 'General regression neural network', - value: 'General regression neural network', - }, - { - id: 'Support vector regression', - value: 'Support vector regression', - }, - ], - value: 'Regression', - }, - ], - value: 'Modeling Methods', - }; - const themeColor = '#73B3D1'; - const config = { - data, - nodeCfg: { - size: 30, - type: 'circle', - label: { - style: { - fill: '#fff', - }, - }, - style: { - fill: themeColor, - stroke: '#0E1155', - lineWidth: 2, - strokeOpacity: 0.45, - shadowColor: themeColor, - shadowBlur: 25, - }, - nodeStateStyles: { - hover: { - stroke: themeColor, - lineWidth: 2, - strokeOpacity: 1, - }, - }, - }, - edgeCfg: { - style: { - stroke: themeColor, - shadowColor: themeColor, - shadowBlur: 20, - }, - endArrow: { - type: 'triangle', - fill: themeColor, - d: 15, - size: 8, - }, - edgeStateStyles: { - hover: { - stroke: themeColor, - lineWidth: 2, - }, - }, - }, - behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'], - }; - - return ( -
- -
- ); -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/relation-graph/radial-tree-graph/index.en.md b/site/examples/relation-graph/radial-tree-graph/index.en.md deleted file mode 100644 index 5f34626db..000000000 --- a/site/examples/relation-graph/radial-tree-graph/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Radial Tree Graph -order: 5 ---- diff --git a/site/examples/relation-graph/radial-tree-graph/index.zh.md b/site/examples/relation-graph/radial-tree-graph/index.zh.md deleted file mode 100644 index 07f5a3c62..000000000 --- a/site/examples/relation-graph/radial-tree-graph/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 辐射树图 -order: 5 ---- diff --git a/site/package.json b/site/package.json index 08bb7173c..742683553 100644 --- a/site/package.json +++ b/site/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@ant-design/charts-site", - "version": "0.0.1-beta.4", + "version": "2.0.0-alpha.0", "description": "React Visual component library", "keywords": [ "antv", @@ -44,7 +44,6 @@ "@ant-design/maps": "^1.0.1", "@ant-design/plots": "^2.0.0-alpha.0", "@antv/data-set": "^0.11.8", - "@antv/util": "^2.0.9", "antd": "^4.16.13", "insert-css": "^2.0.0", "react": "^16.14.0", diff --git a/template/chart/index.ejs b/template/chart/index.ejs index 6c2975c75..0fe012b42 100644 --- a/template/chart/index.ejs +++ b/template/chart/index.ejs @@ -1,40 +1,42 @@ -import React, { useEffect, useImperativeHandle, forwardRef } from 'react'; -import { <%= chartName %> as G2plot<%= chartName %>, <%= chartName %>Options as G2plotConfig } from '@antv/g2plot'; -import useChart from '../hooks/useChart'; -import { getChart } from '../util'; -import { ChartRefConfig, ContainerConfig } from '../interface'; -import { ErrorBoundary } from '../base'; -import ChartLoading from '../util/createLoading'; +import React, { useEffect, useImperativeHandle, forwardRef } from 'react'; +import { <%= chartName %> as G2plot<%= chartName %>, <%= chartName %>Options as G2plotConfig } from '@antv/g2'; + import useChart from '../hooks/useChart'; + import { getChart } from '../util'; + import { ChartRefConfig, ContainerConfig } from '../interface'; + import { ErrorBoundary } from '../base'; + import ChartLoading from '../util/createLoading'; -export interface <%= chartName %>Config extends G2plotConfig, ContainerConfig { - chartRef?: ChartRefConfig; -} + export interface <%= chartName %>Config extends G2plotConfig, ContainerConfig { + chartRef?: ChartRefConfig; + } -const <%= chartName %>Chart = forwardRef((props: <%= chartName %>Config, ref) => { - const { - chartRef, - style = { - height: 'inherit' - }, - className, - loading, - loadingTemplate, - errorTemplate, - ...rest - } = props; - const { chart, container } = useChart, <%= chartName %>Config>(G2plot<%= chartName %>, rest); - useEffect(() => { - getChart(chartRef, chart.current); - }, [chart.current]); - useImperativeHandle(ref, () => ({ - getChart: () => chart.current, - })); - return ( - - {loading && } -
- - ); -}); + const <%= chartName %>Chart = forwardRef((props: <%= chartName %>Config, ref) => { + const { + chartRef, + style = { + height: 'inherit' + }, + className, + loading, + loadingTemplate, + errorTemplate, + ...rest + } = props; + const { chart, container } = useChart, <%= chartName %>Config>(G2plot<%= chartName + %>, rest); + useEffect(() => { + getChart(chartRef, chart.current); + }, [chart.current]); + useImperativeHandle(ref, () => ({ + getChart: () => chart.current, + })); + return ( + + {loading && + } +
+ + ); + }); -export default <%= chartName %>Chart; \ No newline at end of file + export default <%= chartName %>Chart; \ No newline at end of file diff --git a/template/doc/demo.ejs b/template/doc/demo.ejs index 672427ab8..7e6097f25 100644 --- a/template/doc/demo.ejs +++ b/template/doc/demo.ejs @@ -2,7 +2,7 @@ import React, { useState, useEffect }from 'react'; import ReactDOM from 'react-dom'; import { <%= plotName %> } from '@ant-design/<%= lib %>'; <% if (utilName) { %> -import { <%= utilName %> } from '@antv/util'; +import { <%= utilName %> } from 'lodash-es'; <% } %> <% if (dataSet) { %> import { <%= dataSet %> } from '@antv/data-set'; From 7693a30b955cb90d1ac3044553ce7f0f4688765f Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Fri, 11 Aug 2023 17:51:11 +0800 Subject: [PATCH 004/268] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=842.0=E6=9E=B6?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plots/src/components/base/index.tsx | 6 +- .../plots/src/components/column/index.tsx | 2 +- packages/plots/src/components/index.ts | 3 +- packages/plots/src/components/line/index.tsx | 2 +- packages/plots/src/components/pie/index.tsx | 10 +++ .../core/plot.ts => core/base/index.ts} | 5 +- .../src/{g2-core => core}/components/index.ts | 0 .../src/{g2-core => core}/components/mark.ts | 0 packages/plots/src/core/constants/index.ts | 81 +++++++++++++++++++ packages/plots/src/{g2-core => core}/index.ts | 4 +- .../plots/src/{g2-core => core}/module.d.ts | 0 .../{g2-core => core}/plots/column/adaptor.ts | 4 +- .../{g2-core => core}/plots/column/index.ts | 4 +- .../{g2-core => core}/plots/column/type.ts | 0 .../{g2-core => core}/plots/line/adaptor.ts | 4 +- .../src/{g2-core => core}/plots/line/index.ts | 4 +- .../src/{g2-core => core}/plots/line/type.ts | 0 packages/plots/src/core/plots/pie/adaptor.ts | 21 +++++ packages/plots/src/core/plots/pie/index.ts | 37 +++++++++ packages/plots/src/core/plots/pie/type.ts | 3 + packages/plots/src/core/types/common.ts | 27 +++++++ .../src/{g2-core => core}/types/index.ts | 0 packages/plots/src/core/utils/index.ts | 3 + .../utils/is-composite-plot.ts | 0 packages/plots/src/core/utils/transform.ts | 69 ++++++++++++++++ packages/plots/src/g2-core/types/common.ts | 10 --- packages/plots/src/g2-core/utils/index.ts | 2 - packages/plots/src/interface.ts | 8 +- site/.dumirc.ts | 8 ++ site/examples/column/basic/demo/basic.js | 12 ++- site/examples/line/basic/demo/basic.js | 47 ++++++++--- .../examples/line/basic/demo/connect-nulls.js | 52 ++++++++++++ site/examples/line/basic/demo/meta.json | 16 ++++ site/examples/line/basic/demo/multi.js | 19 +++++ site/examples/pie/basic/API.en.md | 1 + site/examples/pie/basic/API.zh.md | 1 + site/examples/pie/basic/demo/basic.js | 21 +++++ site/examples/pie/basic/demo/meta.json | 16 ++++ site/examples/pie/basic/design.en.md | 29 +++++++ site/examples/pie/basic/design.zh.md | 29 +++++++ site/examples/pie/basic/index.en.md | 4 + site/examples/pie/basic/index.zh.md | 6 ++ 42 files changed, 516 insertions(+), 54 deletions(-) create mode 100644 packages/plots/src/components/pie/index.tsx rename packages/plots/src/{g2-core/core/plot.ts => core/base/index.ts} (97%) rename packages/plots/src/{g2-core => core}/components/index.ts (100%) rename packages/plots/src/{g2-core => core}/components/mark.ts (100%) create mode 100644 packages/plots/src/core/constants/index.ts rename packages/plots/src/{g2-core => core}/index.ts (65%) rename packages/plots/src/{g2-core => core}/module.d.ts (100%) rename packages/plots/src/{g2-core => core}/plots/column/adaptor.ts (76%) rename packages/plots/src/{g2-core => core}/plots/column/index.ts (86%) rename packages/plots/src/{g2-core => core}/plots/column/type.ts (100%) rename packages/plots/src/{g2-core => core}/plots/line/adaptor.ts (76%) rename packages/plots/src/{g2-core => core}/plots/line/index.ts (87%) rename packages/plots/src/{g2-core => core}/plots/line/type.ts (100%) create mode 100644 packages/plots/src/core/plots/pie/adaptor.ts create mode 100644 packages/plots/src/core/plots/pie/index.ts create mode 100644 packages/plots/src/core/plots/pie/type.ts create mode 100644 packages/plots/src/core/types/common.ts rename packages/plots/src/{g2-core => core}/types/index.ts (100%) create mode 100644 packages/plots/src/core/utils/index.ts rename packages/plots/src/{g2-core => core}/utils/is-composite-plot.ts (100%) create mode 100644 packages/plots/src/core/utils/transform.ts delete mode 100644 packages/plots/src/g2-core/types/common.ts delete mode 100644 packages/plots/src/g2-core/utils/index.ts create mode 100644 site/examples/line/basic/demo/connect-nulls.js create mode 100644 site/examples/line/basic/demo/multi.js create mode 100644 site/examples/pie/basic/API.en.md create mode 100644 site/examples/pie/basic/API.zh.md create mode 100644 site/examples/pie/basic/demo/basic.js create mode 100644 site/examples/pie/basic/demo/meta.json create mode 100644 site/examples/pie/basic/design.en.md create mode 100644 site/examples/pie/basic/design.zh.md create mode 100644 site/examples/pie/basic/index.en.md create mode 100644 site/examples/pie/basic/index.zh.md diff --git a/packages/plots/src/components/base/index.tsx b/packages/plots/src/components/base/index.tsx index 23cff9c03..6f83d13b0 100644 --- a/packages/plots/src/components/base/index.tsx +++ b/packages/plots/src/components/base/index.tsx @@ -1,12 +1,12 @@ import React, { useImperativeHandle, forwardRef } from 'react'; import { ErrorBoundary, ChartLoading } from 'rc-utils'; import useChart from '../../hooks/useChart'; -import { Plots } from '../../g2-core'; +import { Plots } from '../../core'; import { CommonConfig, Chart } from '../../interface'; export const BaseChart: React.FC = forwardRef(({ chartType, ...config }: CommonConfig, ref) => { const { - style = { + containerStyle = { height: 'inherit', }, className, @@ -23,7 +23,7 @@ export const BaseChart: React.FC = forwardRef(({ chartType, ...config }: Co return ( {loading && } -
+
); }); diff --git a/packages/plots/src/components/column/index.tsx b/packages/plots/src/components/column/index.tsx index 065768a9e..7b771203a 100644 --- a/packages/plots/src/components/column/index.tsx +++ b/packages/plots/src/components/column/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { ColumnOptions } from '../../g2-core'; +import { ColumnOptions } from '../../core'; import { CommonConfig } from '../../interface'; import { BaseChart } from '../base'; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 47b963d2a..073343e06 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -1,4 +1,5 @@ import Column from './column'; import Line from './line'; +import Pie from './pie'; -export { Column, Line }; +export { Column, Line, Pie }; diff --git a/packages/plots/src/components/line/index.tsx b/packages/plots/src/components/line/index.tsx index dc7b54338..dc8844c4b 100644 --- a/packages/plots/src/components/line/index.tsx +++ b/packages/plots/src/components/line/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { LineOptions } from '../../g2-core'; +import { LineOptions } from '../../core'; import { CommonConfig } from '../../interface'; import { BaseChart } from '../base'; diff --git a/packages/plots/src/components/pie/index.tsx b/packages/plots/src/components/pie/index.tsx new file mode 100644 index 000000000..672596f91 --- /dev/null +++ b/packages/plots/src/components/pie/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { PieOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type PieConfig = CommonConfig; + +const PieChart = (props: PieConfig) => ; + +export default PieChart; diff --git a/packages/plots/src/g2-core/core/plot.ts b/packages/plots/src/core/base/index.ts similarity index 97% rename from packages/plots/src/g2-core/core/plot.ts rename to packages/plots/src/core/base/index.ts index 1d16ec4d0..ba9c1606c 100644 --- a/packages/plots/src/g2-core/core/plot.ts +++ b/packages/plots/src/core/base/index.ts @@ -26,7 +26,6 @@ export abstract class Plot extends EE { this.container = typeof container === 'string' ? document.getElementById(container) : container; this.options = merge({}, this.getBaseOptions(), this.getDefaultOptions(), options); this.createG2(); - this.render(); this.bindEvents(); } @@ -62,7 +61,7 @@ export abstract class Plot extends EE { } this.chart = new Chart(this.getChartOptions()); // 给容器增加标识,知道图表的来源区别于 G2 - this.container.setAttribute(SOURCE_ATTRIBUTE_NAME, 'G2Plot'); + this.container.setAttribute(SOURCE_ATTRIBUTE_NAME, 'Ant Design Charts'); } /** @@ -164,7 +163,7 @@ export abstract class Plot extends EE { // 转化成 G2 Spec adaptor({ chart: this.chart, - options: this.options, + options: omit(this.options, CHART_OPTIONS), }); } diff --git a/packages/plots/src/g2-core/components/index.ts b/packages/plots/src/core/components/index.ts similarity index 100% rename from packages/plots/src/g2-core/components/index.ts rename to packages/plots/src/core/components/index.ts diff --git a/packages/plots/src/g2-core/components/mark.ts b/packages/plots/src/core/components/mark.ts similarity index 100% rename from packages/plots/src/g2-core/components/mark.ts rename to packages/plots/src/core/components/mark.ts diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts new file mode 100644 index 000000000..afa564da0 --- /dev/null +++ b/packages/plots/src/core/constants/index.ts @@ -0,0 +1,81 @@ +import { isBoolean } from '../utils'; +/** + * @title 字段转换逻辑 + * @example + * 1. xField: 'year' -> encode: {x: 'year'} + * 2. yField: 'scales' -> encode: {y: 'scales'} + * 3. shape: 'smooth' -> style: {shape: 'smooth'} + * 4. connectNulls: {connect: true} -> style: {connect: true} + */ +export const TRANSFORM_OPTION_KEY = { + encode: { + xField: 'x', + yField: 'y', + colorField: 'color', + angleField: 'y', + }, + transform: { + /** + * @title 是否堆叠 + * @example + * 1. stack: true -> transform: [{type: 'stackY'}] + */ + stack: (value: boolean | object) => { + if (isBoolean(value)) { + return { + type: 'stackY', + available: value, + }; + } + return value; + }, + }, + style: { + /** + * @title 折线的形状 + * @example + * 1. shape: 'smooth' -> style: {shape: 'smooth'} + */ + shape: 'shape', + /** + * @title 是否链接空值 + * @description 支持 boolean 和 对象类型 + */ + connectNulls: (value: boolean | object) => { + if (isBoolean(value)) { + return { + connect: value, + }; + } + return value; + }, + }, +}; + +/** + * @title 将 CHILDREN_SHAPE 中的配置项, 转换为 children + * @example + * 1. annotations: [{type: 'text'}] -> children: [{type: 'text'}] + */ +export const CHILDREN_SHAPE = ['annotations']; + +/** + * @description 一些特殊的配置项,需要自定义转换逻辑 + */ +export const SPECIAL_OPTIONS = [ + { + key: 'transform', + callback: (origin: object, key: string, value: { type: string; available?: boolean }) => { + origin[key] = origin[key] || []; + const { available = true } = value; + if (available) { + origin[key].push(value); + } else { + origin[key].splice( + origin[key].indexOf((item) => item.type === value.type), + 1, + ); + } + }, + }, +]; diff --git a/packages/plots/src/g2-core/index.ts b/packages/plots/src/core/index.ts similarity index 65% rename from packages/plots/src/g2-core/index.ts rename to packages/plots/src/core/index.ts index cbc2c82ff..d04d1c6b7 100644 --- a/packages/plots/src/g2-core/index.ts +++ b/packages/plots/src/core/index.ts @@ -4,8 +4,10 @@ export * from './types'; import { Line } from './plots/line'; import { Column } from './plots/column'; +import { Pie } from './plots/pie'; export type { LineOptions } from './plots/line'; export type { ColumnOptions } from './plots/column'; +export type { PieOptions } from './plots/pie'; -export const Plots = { Line, Column }; +export const Plots = { Line, Column, Pie }; diff --git a/packages/plots/src/g2-core/module.d.ts b/packages/plots/src/core/module.d.ts similarity index 100% rename from packages/plots/src/g2-core/module.d.ts rename to packages/plots/src/core/module.d.ts diff --git a/packages/plots/src/g2-core/plots/column/adaptor.ts b/packages/plots/src/core/plots/column/adaptor.ts similarity index 76% rename from packages/plots/src/g2-core/plots/column/adaptor.ts rename to packages/plots/src/core/plots/column/adaptor.ts index 28a3427bb..fb0b3ae2d 100644 --- a/packages/plots/src/g2-core/plots/column/adaptor.ts +++ b/packages/plots/src/core/plots/column/adaptor.ts @@ -1,4 +1,4 @@ -import { flow } from '../../utils'; +import { flow, transformOptions } from '../../utils'; import { mark } from '../../components'; import type { Adaptor } from '../../types'; import type { ColumnOptions } from './type'; @@ -17,5 +17,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, mark)(params); + return flow(init, transformOptions, mark)(params); } diff --git a/packages/plots/src/g2-core/plots/column/index.ts b/packages/plots/src/core/plots/column/index.ts similarity index 86% rename from packages/plots/src/g2-core/plots/column/index.ts rename to packages/plots/src/core/plots/column/index.ts index a86ac6496..3d03b4000 100644 --- a/packages/plots/src/g2-core/plots/column/index.ts +++ b/packages/plots/src/core/plots/column/index.ts @@ -1,4 +1,4 @@ -import { Plot } from '../../core/plot'; +import { Plot } from '../../base'; import type { Adaptor } from '../../types'; import { adaptor } from './adaptor'; import { ColumnOptions } from './type'; @@ -14,7 +14,7 @@ export class Column extends Plot { * 供外部使用 */ static getDefaultOptions(): Partial { - return { type: 'interval' }; + return { type: 'view', children: [{ type: 'interval' }] }; } /** diff --git a/packages/plots/src/g2-core/plots/column/type.ts b/packages/plots/src/core/plots/column/type.ts similarity index 100% rename from packages/plots/src/g2-core/plots/column/type.ts rename to packages/plots/src/core/plots/column/type.ts diff --git a/packages/plots/src/g2-core/plots/line/adaptor.ts b/packages/plots/src/core/plots/line/adaptor.ts similarity index 76% rename from packages/plots/src/g2-core/plots/line/adaptor.ts rename to packages/plots/src/core/plots/line/adaptor.ts index 1dfed8bc8..0d95bbed1 100644 --- a/packages/plots/src/g2-core/plots/line/adaptor.ts +++ b/packages/plots/src/core/plots/line/adaptor.ts @@ -1,4 +1,4 @@ -import { flow } from '../../utils'; +import { flow, transformOptions } from '../../utils'; import { mark } from '../../components'; import type { Adaptor } from '../../types'; import type { LineOptions } from './type'; @@ -17,5 +17,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, mark)(params); + return flow(init, transformOptions, mark)(params); } diff --git a/packages/plots/src/g2-core/plots/line/index.ts b/packages/plots/src/core/plots/line/index.ts similarity index 87% rename from packages/plots/src/g2-core/plots/line/index.ts rename to packages/plots/src/core/plots/line/index.ts index 8a65b1fd8..6f5b67e4a 100644 --- a/packages/plots/src/g2-core/plots/line/index.ts +++ b/packages/plots/src/core/plots/line/index.ts @@ -1,4 +1,4 @@ -import { Plot } from '../../core/plot'; +import { Plot } from '../../base'; import type { Adaptor } from '../../types'; import { adaptor } from './adaptor'; import { LineOptions } from './type'; @@ -14,7 +14,7 @@ export class Line extends Plot { * 供外部使用 */ static getDefaultOptions(): Partial { - return { type: 'line' }; + return { type: 'view', children: [{ type: 'line' }] }; } /** diff --git a/packages/plots/src/g2-core/plots/line/type.ts b/packages/plots/src/core/plots/line/type.ts similarity index 100% rename from packages/plots/src/g2-core/plots/line/type.ts rename to packages/plots/src/core/plots/line/type.ts diff --git a/packages/plots/src/core/plots/pie/adaptor.ts b/packages/plots/src/core/plots/pie/adaptor.ts new file mode 100644 index 000000000..c0d8f7857 --- /dev/null +++ b/packages/plots/src/core/plots/pie/adaptor.ts @@ -0,0 +1,21 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { PieOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/pie/index.ts b/packages/plots/src/core/plots/pie/index.ts new file mode 100644 index 000000000..0f25695f3 --- /dev/null +++ b/packages/plots/src/core/plots/pie/index.ts @@ -0,0 +1,37 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { PieOptions } from './type'; + +export type { PieOptions }; + +export class Pie extends Plot { + /** 图表类型 */ + public type = 'pie'; + + /** + * 获取 饼图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + children: [{ type: 'interval' }], + transform: [{ type: 'stackY' }], + coordinate: { type: 'theta' }, + }; + } + + /** + * 获取 折线图 默认配置 + */ + protected getDefaultOptions() { + return Pie.getDefaultOptions(); + } + + /** + * 折线图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/pie/type.ts b/packages/plots/src/core/plots/pie/type.ts new file mode 100644 index 000000000..89e02a8bd --- /dev/null +++ b/packages/plots/src/core/plots/pie/type.ts @@ -0,0 +1,3 @@ +import type { Options } from '../../types/common'; + +export type PieOptions = Options; diff --git a/packages/plots/src/core/types/common.ts b/packages/plots/src/core/types/common.ts new file mode 100644 index 000000000..dd737a037 --- /dev/null +++ b/packages/plots/src/core/types/common.ts @@ -0,0 +1,27 @@ +import type { Chart, G2Spec } from '@antv/g2'; + +export type Options = G2Spec & + AppendOptions & { + [key: string]: any; + }; + +export type Adaptor

= { + chart: Chart; + options: P; + originOptions?: P; +}; + +export type AppendOptions = { + /** + * @title x轴字段 + */ + readonly xField: string; + /** + * @title y轴字段 + */ + readonly yField: string; + /** + * @title 拆分字段 + */ + readonly colorField?: string; +}; diff --git a/packages/plots/src/g2-core/types/index.ts b/packages/plots/src/core/types/index.ts similarity index 100% rename from packages/plots/src/g2-core/types/index.ts rename to packages/plots/src/core/types/index.ts diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts new file mode 100644 index 000000000..8af5c87ef --- /dev/null +++ b/packages/plots/src/core/utils/index.ts @@ -0,0 +1,3 @@ +export { omit, pick, isArray, flatten, flow, merge, isBoolean } from 'lodash-es'; +export { isCompositePlot } from './is-composite-plot'; +export { transformOptions } from './transform'; diff --git a/packages/plots/src/g2-core/utils/is-composite-plot.ts b/packages/plots/src/core/utils/is-composite-plot.ts similarity index 100% rename from packages/plots/src/g2-core/utils/is-composite-plot.ts rename to packages/plots/src/core/utils/is-composite-plot.ts diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts new file mode 100644 index 000000000..50fb5b2da --- /dev/null +++ b/packages/plots/src/core/utils/transform.ts @@ -0,0 +1,69 @@ +import { omit } from './index'; +import { TRANSFORM_OPTION_KEY, CHILDREN_SHAPE, SPECIAL_OPTIONS } from '../constants'; +import { Adaptor } from '../types'; +/** + * @title 将自定义配置转换为 G2 接受的格式 + */ +export const transformOptions = (params: Adaptor) => { + const { options } = params; + const { children = [] } = options; + + const getRest = (o: Adaptor['options']) => { + const { children, type, data, ...rest } = o; + return omit(rest, CHILDREN_SHAPE); + }; + + const rest = getRest(options); + + const getValue = (newConfig: string | Function, value: unknown, origin: object) => { + if (typeof newConfig === 'function') { + return newConfig(value, origin); + } + return { + [newConfig]: value, + }; + }; + + const getCustomTransform = (key: string) => { + return SPECIAL_OPTIONS.find((option) => option.key === key)?.callback; + }; + + children.forEach((child) => { + /** + * @description 外层配置应用到所有 children + */ + const transformOption = Object.assign(child, rest); + + Object.keys(TRANSFORM_OPTION_KEY).forEach((specKey) => { + const transformObject = TRANSFORM_OPTION_KEY[specKey]; + /** + * @description 遍历配置项,如果存在对应的映射规则,则进行转换 + * @example 详见 src/core/constants/index.ts + */ + Object.keys(transformObject).forEach((key) => { + if (options[key]) { + const transformValue = getValue(transformObject[key], options[key], transformOption); + const callback = getCustomTransform(specKey); + if (callback) { + callback(transformOption, specKey, transformValue); + } else { + transformOption[specKey] = Object.assign(transformOption[specKey] || {}, transformValue); + delete options[key]; + } + } + }); + }); + }); + + /** + * @description 将 CHILDREN_SHAPE 中的配置项, 转换为 children + * @example 详见 src/core/constants/index.ts + */ + Object.keys(options).forEach((key) => { + if (CHILDREN_SHAPE.includes(key)) { + children.push(...options[key]); + delete options[key]; + } + }); + return params; +}; diff --git a/packages/plots/src/g2-core/types/common.ts b/packages/plots/src/g2-core/types/common.ts deleted file mode 100644 index 02aed368c..000000000 --- a/packages/plots/src/g2-core/types/common.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { Chart, G2Spec } from '@antv/g2'; - -export type Options = G2Spec & { - [key: string]: any; -}; - -export type Adaptor

= { - chart: Chart; - options: P; -}; diff --git a/packages/plots/src/g2-core/utils/index.ts b/packages/plots/src/g2-core/utils/index.ts deleted file mode 100644 index d431bd922..000000000 --- a/packages/plots/src/g2-core/utils/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { omit, pick, isArray, flatten, flow, merge } from 'lodash-es'; -export { isCompositePlot } from './is-composite-plot'; diff --git a/packages/plots/src/interface.ts b/packages/plots/src/interface.ts index f855b695c..31e0ea39e 100644 --- a/packages/plots/src/interface.ts +++ b/packages/plots/src/interface.ts @@ -1,4 +1,4 @@ -import { Options, G2Spec } from './g2-core'; +import { Options, G2Spec } from './core'; /** * @title 图表浮窗配置 @@ -20,10 +20,10 @@ export interface ContainerConfig { /** * @title 图表样式 * @description 配置图表样式 - * @title.en_US Chart style - * @description.en_US Configure chart styles + * @title.en_US Chart containerStyle + * @description.en_US Configure chart container styles */ - style?: React.CSSProperties; + containerStyle?: React.CSSProperties; /** * @title 容器class * @description 类名添加 diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 13b8fdebe..ef630e189 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -85,6 +85,14 @@ export default defineConfig({ en: 'Line', }, }, + { + slug: 'pie', + icon: 'pie', + title: { + zh: '饼图', + en: 'Pie', + }, + }, ], detail: { title: { diff --git a/site/examples/column/basic/demo/basic.js b/site/examples/column/basic/demo/basic.js index c2a79ff71..70a91de5f 100644 --- a/site/examples/column/basic/demo/basic.js +++ b/site/examples/column/basic/demo/basic.js @@ -3,7 +3,7 @@ import ReactDOM from 'react-dom'; import { Column } from '@ant-design/plots'; const DemoColumn = () => { - const props = { + const config = { data: [ { genre: 'Sports', sold: 275 }, { genre: 'Strategy', sold: 115 }, @@ -11,13 +11,11 @@ const DemoColumn = () => { { genre: 'Shooter', sold: 350 }, { genre: 'Other', sold: 150 }, ], - encode: { - x: 'genre', - y: 'sold', - color: 'genre', - }, + xField: 'genre', + yField: 'sold', + colorField: 'genre', }; - return ; + return ; }; ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/line/basic/demo/basic.js b/site/examples/line/basic/demo/basic.js index 8542f8d09..6f29fb3c6 100644 --- a/site/examples/line/basic/demo/basic.js +++ b/site/examples/line/basic/demo/basic.js @@ -3,21 +3,42 @@ import ReactDOM from 'react-dom'; import { Line } from '@ant-design/plots'; const DemoLine = () => { - const props = { - data: [ - { genre: 'Sports', sold: 275 }, - { genre: 'Strategy', sold: 115 }, - { genre: 'Action', sold: 120 }, - { genre: 'Shooter', sold: 350 }, - { genre: 'Other', sold: 150 }, - ], - encode: { - x: 'genre', - y: 'sold', - color: 'genre', + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/1d565782-dde4-4bb6-8946-ea6a38ccf184.json', + }, + xField: 'Date', + yField: 'scales', + shape: 'smooth', + style: { + lineWidth: 2, }, + annotations: [ + { + type: 'text', + data: ['2014-03', 1834], + style: { + text: '2014-03, 受比特币影响,blockchain 1834', + wordWrap: true, + wordWrapWidth: 164, + dx: -174, + dy: 30, + fill: '#2C3542', + fillOpacity: 0.65, + fontSize: 10, + background: true, + backgroundRadius: 2, + connector: true, + startMarker: true, + startMarkerFill: '#2C3542', + startMarkerFillOpacity: 0.65, + }, + tooltip: false, + }, + ], }; - return ; + return ; }; ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/line/basic/demo/connect-nulls.js b/site/examples/line/basic/demo/connect-nulls.js new file mode 100644 index 000000000..1ceac1cb4 --- /dev/null +++ b/site/examples/line/basic/demo/connect-nulls.js @@ -0,0 +1,52 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Line } from '@ant-design/plots'; + +const DemoLine = () => { + const config = { + data: [ + { + Date: '2010-01', + scales: 1998, + }, + { + Date: '2010-02', + scales: 1850, + }, + { + Date: '2010-03', + scales: 1720, + }, + { + Date: '2010-04', + scales: 1818, + }, + { + Date: '2010-05', + scales: null, + }, + { + Date: '2010-06', + scales: 1802, + }, + { + Date: '2010-07', + scales: 1945, + }, + { + Date: '2010-08', + scales: 1856, + }, + ], + xField: 'Date', + yField: 'scales', + shape: 'smooth', + connectNulls: { + connect: true, + connectStroke: 'red', + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/line/basic/demo/meta.json b/site/examples/line/basic/demo/meta.json index ba97e2b6b..1562ebf34 100644 --- a/site/examples/line/basic/demo/meta.json +++ b/site/examples/line/basic/demo/meta.json @@ -11,6 +11,22 @@ "en": "Basic line plot" }, "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" + }, + { + "filename": "multi.js", + "title": { + "zh": "多折线图", + "en": "Multi line plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*IZ9nRq-a6fIAAAAAAAAAAABkARQnAQ" + }, + { + "filename": "connect-nulls.js", + "title": { + "zh": "连接空值", + "en": "Connect nulls plot" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" } ] } diff --git a/site/examples/line/basic/demo/multi.js b/site/examples/line/basic/demo/multi.js new file mode 100644 index 000000000..60b43d2ee --- /dev/null +++ b/site/examples/line/basic/demo/multi.js @@ -0,0 +1,19 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Line } from '@ant-design/plots'; + +const DemoLine = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/55424a73-7cb8-4f79-b60d-3ab627ac5698.json', + }, + xField: 'year', + yField: 'value', + stack: true, + colorField: 'category', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/pie/basic/API.en.md b/site/examples/pie/basic/API.en.md new file mode 100644 index 000000000..6c00eaf29 --- /dev/null +++ b/site/examples/pie/basic/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/pie/basic/API.zh.md b/site/examples/pie/basic/API.zh.md new file mode 100644 index 000000000..ca784afc7 --- /dev/null +++ b/site/examples/pie/basic/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/pie/basic/demo/basic.js b/site/examples/pie/basic/demo/basic.js new file mode 100644 index 000000000..a8e223928 --- /dev/null +++ b/site/examples/pie/basic/demo/basic.js @@ -0,0 +1,21 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Pie } from '@ant-design/plots'; + +const DemoPie = () => { + const config = { + data: [ + { type: '分类一', value: 27 }, + { type: '分类二', value: 25 }, + { type: '分类三', value: 18 }, + { type: '分类四', value: 15 }, + { type: '分类五', value: 10 }, + { type: '其他', value: 5 }, + ], + angleField: 'value', + colorField: 'type', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/pie/basic/demo/meta.json b/site/examples/pie/basic/demo/meta.json new file mode 100644 index 000000000..589aa8c6c --- /dev/null +++ b/site/examples/pie/basic/demo/meta.json @@ -0,0 +1,16 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "基础饼图", + "en": "Basic pie plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*wmldRZZj9lIAAAAAAAAAAABkARQnAQ" + } + ] +} diff --git a/site/examples/pie/basic/design.en.md b/site/examples/pie/basic/design.en.md new file mode 100644 index 000000000..e041c7a04 --- /dev/null +++ b/site/examples/pie/basic/design.en.md @@ -0,0 +1,29 @@ +--- +title: 设计规范 +--- + +## 何时使用 + +柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 + +## 数据类型 + +| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | +| ---------------- | -------------------------------------------------------------------------------------------------- | +| 功能 | 对比分类数据的数值大小 | +| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | +| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | + +## 用法建议 + +design + +## 元素 + +design + +- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 +- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 +- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 +- 标签:用来解释数据点的值。 +- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/pie/basic/design.zh.md b/site/examples/pie/basic/design.zh.md new file mode 100644 index 000000000..e041c7a04 --- /dev/null +++ b/site/examples/pie/basic/design.zh.md @@ -0,0 +1,29 @@ +--- +title: 设计规范 +--- + +## 何时使用 + +柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 + +## 数据类型 + +| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | +| ---------------- | -------------------------------------------------------------------------------------------------- | +| 功能 | 对比分类数据的数值大小 | +| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | +| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | + +## 用法建议 + +design + +## 元素 + +design + +- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 +- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 +- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 +- 标签:用来解释数据点的值。 +- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/pie/basic/index.en.md b/site/examples/pie/basic/index.en.md new file mode 100644 index 000000000..fdd33a6e6 --- /dev/null +++ b/site/examples/pie/basic/index.en.md @@ -0,0 +1,4 @@ +--- +title: Basic Pie +order: 0 +--- \ No newline at end of file diff --git a/site/examples/pie/basic/index.zh.md b/site/examples/pie/basic/index.zh.md new file mode 100644 index 000000000..fccb7b6ee --- /dev/null +++ b/site/examples/pie/basic/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 基础饼图 +order: 0 +--- + +柱状图用于描述分类数据之间的对比,如果我们把时间周期,如周、月、年,也理解为一种分类数据 (time category),那么柱状图也可以用于描述时间周期之间的数值比较。 From a2610bc36a25e0fd24b7f11d5e5d8761891c6d7f Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Fri, 11 Aug 2023 18:00:44 +0800 Subject: [PATCH 005/268] =?UTF-8?q?docs:=20=E4=BF=AE=E6=94=B9=E5=85=B1?= =?UTF-8?q?=E5=BB=BA=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.zh-CN.md | 55 ++++++------------------------------------- 1 file changed, 7 insertions(+), 48 deletions(-) diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md index 79ddeb3e5..e14d66b89 100644 --- a/CONTRIBUTING.zh-CN.md +++ b/CONTRIBUTING.zh-CN.md @@ -10,12 +10,17 @@ ```bash # clone 代码 -$ git clone https://github.com/ant-design/ant-design-charts.git +$ git clone -b v2 https://github.com/ant-design/ant-design-charts.git $ cd ./ant-design-charts # 依赖安装,由于项目使用了 pnpm 做多包管理,如果没有安装 pnpm,请先[安装pnpm](https://pnpm.io/installation#using-npm),并配置对应的 [store-dir](https://pnpm.io/configuring) $ pnpm i # 先创建开发分支开发,分支名应该有含义,避免使用 update、tmp 之类的 $ git checkout -b branch-name +# 启动本地官网 +$ pnpm start +# 监听要改动的包,eg plots +$ cd ./packages/plots +$ pnpm start # 开发完成后跑下测试是否通过,必要时需要新增或修改测试用例 $ pnpm test # 测试通过后,提交代码,message 见下面的规范 @@ -39,56 +44,10 @@ $ git push origin branch-name ```ts - packages - - charts - - flowchart - - graphs - - maps + - rc-utils - plots ``` -以 graphs 为例,`cd ./packages/graphs`, 修改 scripts 里面的 `test:live` 文件路径修改为对应的测试文件, 并执行 `pnpm test:live` 即可,由于 afterEach 会移除对应的 DOM,测试时记得注释掉。 - -```tsx -import React from 'react'; -import { act } from 'react-dom/test-utils'; -import { render } from '../../src/utils'; -import { FileTreeGraph } from '../../src'; -import { FileData } from '../data'; - -describe('File Tree', () => { - let container; - beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); - }); - afterEach(() => { - // document.body.removeChild(container); - // container = null; - }); - it('render', () => { - let chartRef = undefined; - const chartProps = { - data: FileData, - onReady: (graph) => { - chartRef = graph; - }, - }; - act(() => { - render(, container); - }); - expect(chartRef).not.toBeUndefined(); - expect( - chartRef - .findById('0-1') - .get('group') - .getChildren() - .filter((item) => item.cfg.name === 'text-shape').length, - ).toBe(1); - }); -}); -``` - - ### 代码风格 你的代码风格必须通过 eslint,你可以运行 `$ pnpm lint -r` 本地测试。 From 8168468d15b8664e427f01ad29c14cb08680cdbb Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Fri, 11 Aug 2023 20:11:45 +0800 Subject: [PATCH 006/268] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plots/src/core/constants/index.ts | 53 ++++++++++++++++++++-- packages/plots/src/core/utils/transform.ts | 8 +++- site/examples/line/basic/demo/color.js | 31 +++++++++++++ site/examples/line/basic/demo/group.js | 26 +++++++++++ site/examples/line/basic/demo/meta.json | 32 +++++++++++++ site/examples/line/basic/demo/multi.js | 3 ++ site/examples/line/basic/demo/normalize.js | 33 ++++++++++++++ site/examples/line/basic/demo/series.js | 19 ++++++++ 8 files changed, 200 insertions(+), 5 deletions(-) create mode 100644 site/examples/line/basic/demo/color.js create mode 100644 site/examples/line/basic/demo/group.js create mode 100644 site/examples/line/basic/demo/normalize.js create mode 100644 site/examples/line/basic/demo/series.js diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index afa564da0..9bb7de529 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -13,10 +13,12 @@ export const TRANSFORM_OPTION_KEY = { yField: 'y', colorField: 'color', angleField: 'y', + sizeField: 'size', + seriesField: 'series', }, transform: { /** - * @title 是否堆叠 + * @title 堆叠 * @example * 1. stack: true -> transform: [{type: 'stackY'}] */ @@ -27,6 +29,44 @@ export const TRANSFORM_OPTION_KEY = { available: value, }; } + return { type: 'stackY', ...(value as object) }; + }, + /** + * @title 归一化 + * @example + * 1. normalize: true -> transform: [{type: 'normalizeY'}] + */ + normalize: (value: boolean | object) => { + if (isBoolean(value)) { + return { + type: 'normalizeY', + available: value, + }; + } + return { type: 'normalizeY', ...(value as object) }; + }, + /** + * @title 聚合 + * @example + * 1. group: true -> transform: [{type: 'groupX'}] + */ + group: (value: boolean | object) => { + if (isBoolean(value)) { + return { + type: 'groupX', + available: value, + }; + } + return { type: 'groupX', ...(value as object) }; + }, + }, + scale: { + meta: (value: object) => { + return value; + }, + }, + labels: { + label: (value: object) => { return value; }, }, @@ -67,9 +107,9 @@ export const SPECIAL_OPTIONS = [ key: 'transform', callback: (origin: object, key: string, value: { type: string; available?: boolean }) => { origin[key] = origin[key] || []; - const { available = true } = value; + const { available = true, ...rest } = value; if (available) { - origin[key].push(value); + origin[key].push(rest); } else { origin[key].splice( origin[key].indexOf((item) => item.type === value.type), @@ -78,4 +118,11 @@ export const SPECIAL_OPTIONS = [ } }, }, + { + key: 'labels', + callback: (origin: object, key: string, value: { type: string; available?: boolean }) => { + origin[key] = origin[key] || []; + origin[key].push(value); + }, + }, ]; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index 50fb5b2da..07fc083ae 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -10,7 +10,11 @@ export const transformOptions = (params: Adaptor) => { const getRest = (o: Adaptor['options']) => { const { children, type, data, ...rest } = o; - return omit(rest, CHILDREN_SHAPE); + const customKeys = []; + Object.keys(TRANSFORM_OPTION_KEY).forEach((key) => { + customKeys.push(...Object.keys(TRANSFORM_OPTION_KEY[key])); + }); + return omit(rest, CHILDREN_SHAPE, customKeys); }; const rest = getRest(options); @@ -48,8 +52,8 @@ export const transformOptions = (params: Adaptor) => { callback(transformOption, specKey, transformValue); } else { transformOption[specKey] = Object.assign(transformOption[specKey] || {}, transformValue); - delete options[key]; } + delete options[key]; } }); }); diff --git a/site/examples/line/basic/demo/color.js b/site/examples/line/basic/demo/color.js new file mode 100644 index 000000000..0ccc047d8 --- /dev/null +++ b/site/examples/line/basic/demo/color.js @@ -0,0 +1,31 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Line } from '@ant-design/plots'; + +const DemoLine = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/temperatures1.json', + }, + xField: (d) => new Date(d.date), + yField: 'value', + colorField: 'condition', + seriesField: () => 'a', + shape: 'hvh', + style: { + gradient: 'x', + lineWidth: 2, + }, + meta: { + y: { nice: true }, + color: { + domain: ['CLR', 'FEW', 'SCT', 'BKN', 'OVC', 'VV '], + range: ['deepskyblue', 'lightskyblue', 'lightblue', '#aaaaaa', '#666666', '#666666'], + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/line/basic/demo/group.js b/site/examples/line/basic/demo/group.js new file mode 100644 index 000000000..1c213ec3a --- /dev/null +++ b/site/examples/line/basic/demo/group.js @@ -0,0 +1,26 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Line } from '@ant-design/plots'; + +const DemoLine = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/cb99c4ab-e0a3-4c76-9586-fe7fa2ff1a8c.csv', + }, + xField: (d) => new Date(d.date).getFullYear(), + yField: 'price', + colorField: 'symbol', + label: { + text: 'price', + transform: [{ type: 'overlapDodgeY' }], + style: { + fontSize: 10, + }, + }, + group: { y: 'mean' }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/line/basic/demo/meta.json b/site/examples/line/basic/demo/meta.json index 1562ebf34..5f67b3856 100644 --- a/site/examples/line/basic/demo/meta.json +++ b/site/examples/line/basic/demo/meta.json @@ -27,6 +27,38 @@ "en": "Connect nulls plot" }, "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" + }, + { + "filename": "series.js", + "title": { + "zh": "系列折线图", + "en": "Series Line plot" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" + }, + { + "filename": "normalize.js", + "title": { + "zh": "归一化折线图", + "en": "Normalize Line plot" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" + }, + { + "filename": "group.js", + "title": { + "zh": "聚合折线图", + "en": "Group Line plot" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" + }, + { + "filename": "color.js", + "title": { + "zh": "多色折线图", + "en": "Colors Line plot" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" } ] } diff --git a/site/examples/line/basic/demo/multi.js b/site/examples/line/basic/demo/multi.js index 60b43d2ee..0185a717e 100644 --- a/site/examples/line/basic/demo/multi.js +++ b/site/examples/line/basic/demo/multi.js @@ -10,7 +10,10 @@ const DemoLine = () => { }, xField: 'year', yField: 'value', + sizeField: 'value', stack: true, + shape: 'trail', + legend: { size: false }, colorField: 'category', }; return ; diff --git a/site/examples/line/basic/demo/normalize.js b/site/examples/line/basic/demo/normalize.js new file mode 100644 index 000000000..26cc1037f --- /dev/null +++ b/site/examples/line/basic/demo/normalize.js @@ -0,0 +1,33 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Line } from '@ant-design/plots'; + +const DemoLine = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/indices.json', + }, + xField: (d) => new Date(d.Date), + yField: 'Close', + colorField: 'Symbol', + normalize: { basis: 'first', groupBy: 'color' }, + meta: { + y: { type: 'log' }, + }, + axis: { + y: { title: '↑ Change in price (%)' }, + }, + label: { + text: 'Symbol', + selector: 'last', + style: { + fontSize: 10, + }, + }, + tooltip: { channel: 'y', valueFormatter: '.1f' }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/line/basic/demo/series.js b/site/examples/line/basic/demo/series.js new file mode 100644 index 000000000..0eb649849 --- /dev/null +++ b/site/examples/line/basic/demo/series.js @@ -0,0 +1,19 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Line } from '@ant-design/plots'; + +const DemoLine = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/728a4bdc-9d0b-49e0-a92f-6320a6cddeed.csv', + }, + xField: 'date', + yField: 'unemployment', + colorField: 'steelblue', + seriesField: 'division', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 9d7387f6cd17754ab921513d07ff8330624bc287 Mon Sep 17 00:00:00 2001 From: OctKun Date: Sun, 13 Aug 2023 12:54:45 +0800 Subject: [PATCH 007/268] =?UTF-8?q?feat:=20=E5=9F=BA=E7=A1=80=E9=9D=A2?= =?UTF-8?q?=E7=A7=AF=E5=9B=BE=20(#2025)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: chenkun --- packages/plots/src/components/area/index.tsx | 10 + packages/plots/src/components/index.ts | 3 +- packages/plots/src/components/interface.ts | 1 + packages/plots/src/core/index.ts | 4 +- packages/plots/src/core/plots/area/adaptor.ts | 21 ++ packages/plots/src/core/plots/area/index.ts | 33 +++ packages/plots/src/core/plots/area/type.ts | 3 + site/.dumirc.ts | 8 + site/examples/area/basic/demo/basic.js | 247 ++++++++++++++++++ site/examples/area/basic/demo/meta.json | 16 ++ site/examples/area/basic/index.en.md | 4 + site/examples/area/basic/index.zh.md | 4 + 12 files changed, 352 insertions(+), 2 deletions(-) create mode 100644 packages/plots/src/components/area/index.tsx create mode 100644 packages/plots/src/core/plots/area/adaptor.ts create mode 100644 packages/plots/src/core/plots/area/index.ts create mode 100644 packages/plots/src/core/plots/area/type.ts create mode 100644 site/examples/area/basic/demo/basic.js create mode 100644 site/examples/area/basic/demo/meta.json create mode 100644 site/examples/area/basic/index.en.md create mode 100644 site/examples/area/basic/index.zh.md diff --git a/packages/plots/src/components/area/index.tsx b/packages/plots/src/components/area/index.tsx new file mode 100644 index 000000000..ad6f6412f --- /dev/null +++ b/packages/plots/src/components/area/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { AreaOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type AreaConfig = CommonConfig; + +const AreaChart = (props: AreaConfig) => ; + +export default AreaChart; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 073343e06..fb2b74828 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -1,5 +1,6 @@ +import Area from './area'; import Column from './column'; import Line from './line'; import Pie from './pie'; -export { Column, Line, Pie }; +export { Column, Line, Pie, Area }; diff --git a/packages/plots/src/components/interface.ts b/packages/plots/src/components/interface.ts index 7fc0412ef..83af69d6a 100644 --- a/packages/plots/src/components/interface.ts +++ b/packages/plots/src/components/interface.ts @@ -1,2 +1,3 @@ +export type { AreaConfig } from './area'; export type { ColumnConfig } from './column'; export type { LineConfig } from './line'; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index d04d1c6b7..1fd8b40b5 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -5,9 +5,11 @@ export * from './types'; import { Line } from './plots/line'; import { Column } from './plots/column'; import { Pie } from './plots/pie'; +import { Area } from './plots/area'; export type { LineOptions } from './plots/line'; export type { ColumnOptions } from './plots/column'; export type { PieOptions } from './plots/pie'; +export type { AreaOptions } from './plots/area'; -export const Plots = { Line, Column, Pie }; +export const Plots = { Line, Column, Pie, Area }; diff --git a/packages/plots/src/core/plots/area/adaptor.ts b/packages/plots/src/core/plots/area/adaptor.ts new file mode 100644 index 000000000..3e874697f --- /dev/null +++ b/packages/plots/src/core/plots/area/adaptor.ts @@ -0,0 +1,21 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { AreaOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/area/index.ts b/packages/plots/src/core/plots/area/index.ts new file mode 100644 index 000000000..72a2dbda3 --- /dev/null +++ b/packages/plots/src/core/plots/area/index.ts @@ -0,0 +1,33 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { AreaOptions } from './type'; + +export type { AreaOptions }; + +export class Area extends Plot { + /** 图表类型 */ + public type = 'area'; + + /** + * 获取 面积图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { type: 'view', children: [{ type: 'area' }] }; + } + + /** + * 获取 面积图 默认配置 + */ + protected getDefaultOptions() { + return Area.getDefaultOptions(); + } + + /** + * 面积图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/area/type.ts b/packages/plots/src/core/plots/area/type.ts new file mode 100644 index 000000000..939cba7f4 --- /dev/null +++ b/packages/plots/src/core/plots/area/type.ts @@ -0,0 +1,3 @@ +import type { Options } from '../../types/common'; + +export type AreaOptions = Options; diff --git a/site/.dumirc.ts b/site/.dumirc.ts index ef630e189..18a84a212 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -93,6 +93,14 @@ export default defineConfig({ en: 'Pie', }, }, + { + slug: 'area', + icon: 'area', + title: { + zh: '面积图', + en: 'Area', + }, + }, ], detail: { title: { diff --git a/site/examples/area/basic/demo/basic.js b/site/examples/area/basic/demo/basic.js new file mode 100644 index 000000000..2adc8090a --- /dev/null +++ b/site/examples/area/basic/demo/basic.js @@ -0,0 +1,247 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: [ + { + timePeriod: '2006 Q3', + value: 1, + }, + { + timePeriod: '2006 Q4', + value: 1.08, + }, + { + timePeriod: '2007 Q1', + value: 1.17, + }, + { + timePeriod: '2007 Q2', + value: 1.26, + }, + { + timePeriod: '2007 Q3', + value: 1.34, + }, + { + timePeriod: '2007 Q4', + value: 1.41, + }, + { + timePeriod: '2008 Q1', + value: 1.52, + }, + { + timePeriod: '2008 Q2', + value: 1.67, + }, + { + timePeriod: '2008 Q3', + value: 1.84, + }, + { + timePeriod: '2008 Q4', + value: 2.07, + }, + { + timePeriod: '2009 Q1', + value: 2.39, + }, + { + timePeriod: '2009 Q2', + value: 2.71, + }, + { + timePeriod: '2009 Q3', + value: 3.03, + }, + { + timePeriod: '2009 Q4', + value: 3.33, + }, + { + timePeriod: '2010 Q1', + value: 3.5, + }, + { + timePeriod: '2010 Q2', + value: 3.37, + }, + { + timePeriod: '2010 Q3', + value: 3.15, + }, + { + timePeriod: '2010 Q4', + value: 3.01, + }, + { + timePeriod: '2011 Q1', + value: 2.8, + }, + { + timePeriod: '2011 Q2', + value: 2.8, + }, + { + timePeriod: '2011 Q3', + value: 2.84, + }, + { + timePeriod: '2011 Q4', + value: 2.75, + }, + { + timePeriod: '2012 Q1', + value: 2.64, + }, + { + timePeriod: '2012 Q2', + value: 2.55, + }, + { + timePeriod: '2012 Q3', + value: 2.46, + }, + { + timePeriod: '2012 Q4', + value: 2.45, + }, + { + timePeriod: '2013 Q1', + value: 2.57, + }, + { + timePeriod: '2013 Q2', + value: 2.68, + }, + { + timePeriod: '2013 Q3', + value: 2.8, + }, + { + timePeriod: '2013 Q4', + value: 2.89, + }, + { + timePeriod: '2014 Q1', + value: 2.85, + }, + { + timePeriod: '2014 Q2', + value: 2.73, + }, + { + timePeriod: '2014 Q3', + value: 2.54, + }, + { + timePeriod: '2014 Q4', + value: 2.32, + }, + { + timePeriod: '2015 Q1', + value: 2.25, + }, + { + timePeriod: '2015 Q2', + value: 2.33, + }, + { + timePeriod: '2015 Q3', + value: 2.53, + }, + { + timePeriod: '2015 Q4', + value: 2.74, + }, + { + timePeriod: '2016 Q1', + value: 2.76, + }, + { + timePeriod: '2016 Q2', + value: 2.61, + }, + { + timePeriod: '2016 Q3', + value: 2.35, + }, + { + timePeriod: '2016 Q4', + value: 2.11, + }, + { + timePeriod: '2017 Q1', + value: 2.08, + }, + { + timePeriod: '2017 Q2', + value: 2.2, + }, + { + timePeriod: '2017 Q3', + value: 2.38, + }, + { + timePeriod: '2017 Q4', + value: 2.59, + }, + { + timePeriod: '2018 Q1', + value: 2.63, + }, + { + timePeriod: '2018 Q2', + value: 2.67, + }, + { + timePeriod: '2018 Q3', + value: 2.64, + }, + { + timePeriod: '2018 Q4', + value: 2.5, + }, + { + timePeriod: '2019 Q1', + value: 2.31, + }, + { + timePeriod: '2019 Q2', + value: 2.04, + }, + { + timePeriod: '2019 Q3', + value: 1.83, + }, + { + timePeriod: '2019 Q4', + value: 1.71, + }, + { + timePeriod: '2020 Q1', + value: 1.65, + }, + { + timePeriod: '2020 Q2', + value: 1.59, + }, + { + timePeriod: '2020 Q3', + value: 1.58, + }, + ], + xField: 'timePeriod', + yField: 'value', + xAxis: { + range: [0, 1], + }, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/area/basic/demo/meta.json b/site/examples/area/basic/demo/meta.json new file mode 100644 index 000000000..0546bb3b0 --- /dev/null +++ b/site/examples/area/basic/demo/meta.json @@ -0,0 +1,16 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "基础面积图", + "en": "Basic Area plot" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/ld0NQtdLO0/mianjitugengxinshuju-after.gif" + } + ] +} diff --git a/site/examples/area/basic/index.en.md b/site/examples/area/basic/index.en.md new file mode 100644 index 000000000..ce79c401d --- /dev/null +++ b/site/examples/area/basic/index.en.md @@ -0,0 +1,4 @@ +--- +title: Basic Area +order: 0 +--- \ No newline at end of file diff --git a/site/examples/area/basic/index.zh.md b/site/examples/area/basic/index.zh.md new file mode 100644 index 000000000..6bf328e49 --- /dev/null +++ b/site/examples/area/basic/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 基础面积图 +order: 0 +--- From 322186bfc08bdd3d9602df5799dcaa3541e54ee0 Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Mon, 14 Aug 2023 14:48:58 +0800 Subject: [PATCH 008/268] fix: demo error --- package.json | 3 +- packages/charts/package.json | 2 - packages/plots/src/core/base/index.ts | 2 +- packages/plots/src/core/constants/index.ts | 8 +-- packages/plots/src/core/utils/transform.ts | 4 +- .../plots/tests/plots/column-proxy-spec.tsx | 15 ++--- site/examples/column/basic/demo/bar-dodged.js | 27 +++++++++ site/examples/column/basic/demo/basic.js | 21 ------- site/examples/column/basic/demo/column-log.js | 25 +++++++++ .../column/basic/demo/column-maxwidth.js | 20 +++++++ site/examples/column/basic/demo/column.js | 22 ++++++++ site/examples/column/basic/demo/meta.json | 32 +++++++++-- site/examples/line/basic/demo/basic.js | 2 +- .../examples/line/basic/demo/connect-nulls.js | 55 ++++++------------- site/examples/line/basic/demo/meta.json | 10 ++-- site/package.json | 6 +- template/doc/demo.ejs | 3 - 17 files changed, 159 insertions(+), 98 deletions(-) create mode 100644 site/examples/column/basic/demo/bar-dodged.js delete mode 100644 site/examples/column/basic/demo/basic.js create mode 100644 site/examples/column/basic/demo/column-log.js create mode 100644 site/examples/column/basic/demo/column-maxwidth.js create mode 100644 site/examples/column/basic/demo/column.js diff --git a/package.json b/package.json index 852c83bce..be2434b0f 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "add:changelog": "pnpm changeset" }, "devDependencies": { - "@antv/data-set": "^0.11.8", "@babel/core": "^7.11.6", "@babel/polyfill": "^7.12.1", "@babel/preset-env": "^7.13.9", @@ -65,7 +64,7 @@ "overrides": { "@typescript-eslint/eslint-plugin": "^4.1.1", "@typescript-eslint/parser": "^4.1.1", - "monaco-editor": "0.21.3" + "tslib": "2.3.1" } }, "gitHooks": { diff --git a/packages/charts/package.json b/packages/charts/package.json index 3b02e246c..e3e63b7ce 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -34,8 +34,6 @@ "@ant-design/plots": "workspace:*" }, "peerDependencies": { - "@ant-design/icons": "^4.6.0", - "antd": "^4.6.3", "lodash": "^4.17.20", "react": ">=16.8.4", "react-dom": ">=16.8.4" diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index ba9c1606c..154cbf5a3 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -1,8 +1,8 @@ import EE from '@antv/event-emitter'; import { Chart } from '@antv/g2'; import { bind } from 'size-sensor'; +import type { Adaptor, Options } from '../types'; import { merge, omit, pick } from '../utils'; -import type { Options, Adaptor } from '../types'; const SOURCE_ATTRIBUTE_NAME = 'data-chart-source-type'; diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 9bb7de529..d0b3bf273 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -46,18 +46,18 @@ export const TRANSFORM_OPTION_KEY = { return { type: 'normalizeY', ...(value as object) }; }, /** - * @title 聚合 + * @title 分组 * @example - * 1. group: true -> transform: [{type: 'groupX'}] + * 1. group: true -> transform: [{type: 'dodgeX'}] */ group: (value: boolean | object) => { if (isBoolean(value)) { return { - type: 'groupX', + type: 'dodgeX', available: value, }; } - return { type: 'groupX', ...(value as object) }; + return { type: 'dodgeX', ...(value as object) }; }, }, scale: { diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index 07fc083ae..ee17e0bb8 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -1,6 +1,6 @@ -import { omit } from './index'; -import { TRANSFORM_OPTION_KEY, CHILDREN_SHAPE, SPECIAL_OPTIONS } from '../constants'; +import { CHILDREN_SHAPE, SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY } from '../constants'; import { Adaptor } from '../types'; +import { omit } from './index'; /** * @title 将自定义配置转换为 G2 接受的格式 */ diff --git a/packages/plots/tests/plots/column-proxy-spec.tsx b/packages/plots/tests/plots/column-proxy-spec.tsx index c1532618d..78f8b730d 100644 --- a/packages/plots/tests/plots/column-proxy-spec.tsx +++ b/packages/plots/tests/plots/column-proxy-spec.tsx @@ -1,9 +1,8 @@ -import React, { useRef } from 'react'; +import { renderHook } from '@testing-library/react-hooks/server'; import { render } from 'rc-utils'; +import React, { useRef } from 'react'; import { act } from 'react-dom/test-utils'; -import { renderHook } from '@testing-library/react-hooks/server'; import { Column } from '../../src'; -import { setTimeout } from 'timers'; const ref: any = renderHook(() => useRef()); @@ -28,14 +27,13 @@ describe('Proxy config', () => { document.body.appendChild(container); }); afterEach(() => { - // document.body.removeChild(container); - // container = null; + document.body.removeChild(container); + container = null; }); it('chart render', async () => { let stateProxy: any; let plot: any; - const proxy = (state) => (stateProxy = state); const config = { data, xField: 'date', @@ -45,11 +43,8 @@ describe('Proxy config', () => { onReady: (plotInstance) => (plot = plotInstance), }; act(() => { - render(, container); + render(, container); }); expect(stateProxy['xField']).toBe('date'); - stateProxy.data = [...stateProxy.data, { date: '2010-04', scales: 1250 }]; - await new Promise((r) => setTimeout(r, 2000)); - expect(plot.chart.getData().length).toBe(4); }); }); diff --git a/site/examples/column/basic/demo/bar-dodged.js b/site/examples/column/basic/demo/bar-dodged.js new file mode 100644 index 000000000..1b11cf804 --- /dev/null +++ b/site/examples/column/basic/demo/bar-dodged.js @@ -0,0 +1,27 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Column } from '@ant-design/plots'; + +const DemoColumn = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/f129b517-158d-41a9-83a3-3294d639b39e.csv', + format: 'csv', + }, + xField: 'state', + yField: 'population', + colorFiekd: 'age', + group: {}, + axis: { + y: { labelFormatter: '~s' }, + }, + interaction: { + tooltip: { shared: true }, + elementHighlightByColor: { background: true }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/column/basic/demo/basic.js b/site/examples/column/basic/demo/basic.js deleted file mode 100644 index 70a91de5f..000000000 --- a/site/examples/column/basic/demo/basic.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Column } from '@ant-design/plots'; - -const DemoColumn = () => { - const config = { - data: [ - { genre: 'Sports', sold: 275 }, - { genre: 'Strategy', sold: 115 }, - { genre: 'Action', sold: 120 }, - { genre: 'Shooter', sold: 350 }, - { genre: 'Other', sold: 150 }, - ], - xField: 'genre', - yField: 'sold', - colorField: 'genre', - }; - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/column/basic/demo/column-log.js b/site/examples/column/basic/demo/column-log.js new file mode 100644 index 000000000..53212b56e --- /dev/null +++ b/site/examples/column/basic/demo/column-log.js @@ -0,0 +1,25 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Column } from '@ant-design/plots'; + +const EPSILON = 1e-6; + +const DemoColumn = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv', + }, + xField: 'letter', + yField: 'frequency', + meta: { + y: { type: 'log' }, + }, + axis: { + y: { labelFormatter: (d) => (d === EPSILON ? 0 : d) }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/column/basic/demo/column-maxwidth.js b/site/examples/column/basic/demo/column-maxwidth.js new file mode 100644 index 000000000..0799203d3 --- /dev/null +++ b/site/examples/column/basic/demo/column-maxwidth.js @@ -0,0 +1,20 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Column } from '@ant-design/plots'; + +const DemoColumn = () => { + const config = { + data: [{ letter: 'A', frequency: 120 }], + xField: 'letter', + yField: 'frequency', + meta: { + x: { padding: 0.5 }, + }, + style: { + maxWidth: 200, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/column/basic/demo/column.js b/site/examples/column/basic/demo/column.js new file mode 100644 index 000000000..011e4ee5e --- /dev/null +++ b/site/examples/column/basic/demo/column.js @@ -0,0 +1,22 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Column } from '@ant-design/plots'; + +const DemoColumn = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv', + }, + xField: 'letter', + yField: 'frequency', + axis: { + y: { + labelFormatter: '.0%', + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/column/basic/demo/meta.json b/site/examples/column/basic/demo/meta.json index 3874aa334..388a1e36d 100644 --- a/site/examples/column/basic/demo/meta.json +++ b/site/examples/column/basic/demo/meta.json @@ -5,12 +5,36 @@ }, "demos": [ { - "filename": "basic.js", + "filename": "column.js", "title": { - "zh": "基础柱状图", - "en": "Basic column plot" + "zh": "柱形图", + "en": "Column Chart" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*KAg2TY-oYRUAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*vhCKQJ9UJX4AAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "column-maxwidth.js", + "title": { + "zh": "限制宽度的柱形图", + "en": "Column with maxWidth" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*fu-BSYg7U_kAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "column-log.js", + "title": { + "zh": "对数柱形图", + "en": "Log Column Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*cRE5TqJGnVUAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "bar-dodged.js", + "title": { + "zh": "分组条形图", + "en": "Dodged Bar Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*FrshQpaS4f0AAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/line/basic/demo/basic.js b/site/examples/line/basic/demo/basic.js index 6f29fb3c6..d3591c8f9 100644 --- a/site/examples/line/basic/demo/basic.js +++ b/site/examples/line/basic/demo/basic.js @@ -1,6 +1,6 @@ +import { Line } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; -import { Line } from '@ant-design/plots'; const DemoLine = () => { const config = { diff --git a/site/examples/line/basic/demo/connect-nulls.js b/site/examples/line/basic/demo/connect-nulls.js index 1ceac1cb4..9ec63c585 100644 --- a/site/examples/line/basic/demo/connect-nulls.js +++ b/site/examples/line/basic/demo/connect-nulls.js @@ -4,46 +4,25 @@ import { Line } from '@ant-design/plots'; const DemoLine = () => { const config = { - data: [ - { - Date: '2010-01', - scales: 1998, - }, - { - Date: '2010-02', - scales: 1850, - }, - { - Date: '2010-03', - scales: 1720, - }, - { - Date: '2010-04', - scales: 1818, - }, - { - Date: '2010-05', - scales: null, - }, - { - Date: '2010-06', - scales: 1802, - }, - { - Date: '2010-07', - scales: 1945, - }, - { - Date: '2010-08', - scales: 1856, - }, - ], - xField: 'Date', - yField: 'scales', - shape: 'smooth', + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/551d80c6-a6be-4f3c-a82a-abd739e12977.csv', + transform: [ + // Mock missing data. + { + type: 'map', + callback: (d) => ({ + ...d, + close: d.date.getUTCMonth() < 3 ? NaN : d.close, + }), + }, + ], + }, + xField: 'date', + yField: 'close', connectNulls: { connect: true, - connectStroke: 'red', + connectStroke: '#aaa', }, }; return ; diff --git a/site/examples/line/basic/demo/meta.json b/site/examples/line/basic/demo/meta.json index 5f67b3856..988fd54da 100644 --- a/site/examples/line/basic/demo/meta.json +++ b/site/examples/line/basic/demo/meta.json @@ -26,7 +26,7 @@ "zh": "连接空值", "en": "Connect nulls plot" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*46DiTJLA2t8AAAAAAAAAAAAADmJ7AQ" }, { "filename": "series.js", @@ -34,7 +34,7 @@ "zh": "系列折线图", "en": "Series Line plot" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*y84BS5AqJLYAAAAAAAAAAAAADmJ7AQ" }, { "filename": "normalize.js", @@ -42,7 +42,7 @@ "zh": "归一化折线图", "en": "Normalize Line plot" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*MzXYRqHjHQEAAAAAAAAAAAAADmJ7AQ" }, { "filename": "group.js", @@ -50,7 +50,7 @@ "zh": "聚合折线图", "en": "Group Line plot" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*-q4yQZ7WtDcAAAAAAAAAAAAADmJ7AQ" }, { "filename": "color.js", @@ -58,7 +58,7 @@ "zh": "多色折线图", "en": "Colors Line plot" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*WVwSRa-HQAcAAAAAAAAAAAAADmJ7AQ" } ] } diff --git a/site/package.json b/site/package.json index 742683553..2863267bd 100644 --- a/site/package.json +++ b/site/package.json @@ -28,7 +28,7 @@ "start": "NODE_OPTIONS=--max_old_space_size=8192 pnpm run develop" }, "devDependencies": { - "@antv/dumi-theme-antv": "^0.3.0", + "@antv/dumi-theme-antv": "0.3.18", "@types/react": "^16.14.8", "@types/react-dom": "^16.9.13", "cross-env": "^7.0.3", @@ -39,11 +39,7 @@ "typescript": "^3.6.5" }, "dependencies": { - "@ant-design/flowchart": "^1.0.2", - "@ant-design/graphs": "^1.0.1", - "@ant-design/maps": "^1.0.1", "@ant-design/plots": "^2.0.0-alpha.0", - "@antv/data-set": "^0.11.8", "antd": "^4.16.13", "insert-css": "^2.0.0", "react": "^16.14.0", diff --git a/template/doc/demo.ejs b/template/doc/demo.ejs index 7e6097f25..3ad0b1f58 100644 --- a/template/doc/demo.ejs +++ b/template/doc/demo.ejs @@ -4,9 +4,6 @@ import { <%= plotName %> } from '@ant-design/<%= lib %>'; <% if (utilName) { %> import { <%= utilName %> } from 'lodash-es'; <% } %> -<% if (dataSet) { %> -import { <%= dataSet %> } from '@antv/data-set'; -<% } %> const Demo<%= chartName %> = () => { <%- chartContent.toString() %> From 975b047084749008b225c7f494203579d3874613 Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Mon, 14 Aug 2023 17:46:24 +0800 Subject: [PATCH 009/268] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9EBar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- packages/plots/src/components/bar/index.tsx | 10 +++++ packages/plots/src/components/index.ts | 3 +- packages/plots/src/core/base/index.ts | 10 ++--- packages/plots/src/core/constants/index.ts | 18 +++++++++ packages/plots/src/core/index.ts | 18 ++++----- packages/plots/src/core/plots/bar/adaptor.ts | 21 +++++++++++ packages/plots/src/core/plots/bar/index.ts | 33 +++++++++++++++++ packages/plots/src/core/plots/bar/type.ts | 3 ++ .../plots/src/core/utils/get-custom-keys.ts | 9 +++++ packages/plots/src/core/utils/index.ts | 3 +- packages/plots/src/core/utils/transform.ts | 9 ++--- site/.dumirc.ts | 8 ++++ site/examples/bar/basic/API.en.md | 1 + site/examples/bar/basic/API.zh.md | 1 + site/examples/bar/basic/demo/bar.js | 35 ++++++++++++++++++ site/examples/bar/basic/demo/meta.json | 32 ++++++++++++++++ .../bar/basic/demo/normalized-stacked.js | 35 ++++++++++++++++++ site/examples/bar/basic/demo/stacked.js | 33 +++++++++++++++++ site/examples/bar/basic/design.en.md | 29 +++++++++++++++ site/examples/bar/basic/design.zh.md | 29 +++++++++++++++ site/examples/bar/basic/index.en.md | 4 ++ site/examples/bar/basic/index.zh.md | 6 +++ site/examples/column/basic/demo/bar-dodged.js | 11 ++++-- site/examples/column/basic/demo/column-log.js | 25 ------------- site/examples/column/basic/demo/column.js | 6 ++- site/examples/column/basic/demo/meta.json | 16 ++++++-- site/examples/column/basic/demo/range.js | 37 +++++++++++++++++++ site/examples/column/basic/demo/stacked.js | 34 +++++++++++++++++ 29 files changed, 425 insertions(+), 56 deletions(-) create mode 100644 packages/plots/src/components/bar/index.tsx create mode 100644 packages/plots/src/core/plots/bar/adaptor.ts create mode 100644 packages/plots/src/core/plots/bar/index.ts create mode 100644 packages/plots/src/core/plots/bar/type.ts create mode 100644 packages/plots/src/core/utils/get-custom-keys.ts create mode 100644 site/examples/bar/basic/API.en.md create mode 100644 site/examples/bar/basic/API.zh.md create mode 100644 site/examples/bar/basic/demo/bar.js create mode 100644 site/examples/bar/basic/demo/meta.json create mode 100644 site/examples/bar/basic/demo/normalized-stacked.js create mode 100644 site/examples/bar/basic/demo/stacked.js create mode 100644 site/examples/bar/basic/design.en.md create mode 100644 site/examples/bar/basic/design.zh.md create mode 100644 site/examples/bar/basic/index.en.md create mode 100644 site/examples/bar/basic/index.zh.md delete mode 100644 site/examples/column/basic/demo/column-log.js create mode 100644 site/examples/column/basic/demo/range.js create mode 100644 site/examples/column/basic/demo/stacked.js diff --git a/package.json b/package.json index be2434b0f..98597b767 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "overrides": { "@typescript-eslint/eslint-plugin": "^4.1.1", "@typescript-eslint/parser": "^4.1.1", - "tslib": "2.3.1" + "tslib": "2.6.1" } }, "gitHooks": { diff --git a/packages/plots/src/components/bar/index.tsx b/packages/plots/src/components/bar/index.tsx new file mode 100644 index 000000000..44463e3f4 --- /dev/null +++ b/packages/plots/src/components/bar/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { BarOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type BarConfig = CommonConfig; + +const BarChart = (props: BarConfig) => ; + +export default BarChart; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index fb2b74828..31833ae47 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -1,6 +1,7 @@ import Area from './area'; +import Bar from './bar'; import Column from './column'; import Line from './line'; import Pie from './pie'; -export { Column, Line, Pie, Area }; +export { Column, Line, Pie, Area, Bar }; diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 154cbf5a3..ae68e2146 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -1,14 +1,12 @@ import EE from '@antv/event-emitter'; import { Chart } from '@antv/g2'; import { bind } from 'size-sensor'; +import { CHART_OPTIONS } from '../constants'; import type { Adaptor, Options } from '../types'; -import { merge, omit, pick } from '../utils'; +import { getCustomKeys, merge, omit, pick } from '../utils'; const SOURCE_ATTRIBUTE_NAME = 'data-chart-source-type'; -/** new Chart options */ -export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas', 'theme']; - export abstract class Plot extends EE { /** plot 类型名称 */ public abstract readonly type: string; @@ -49,7 +47,7 @@ export abstract class Plot extends EE { * G2 options(Spec) 配置 */ private getSpecOptions() { - return omit(this.options, CHART_OPTIONS); + return omit(this.options, CHART_OPTIONS, getCustomKeys()); } /** @@ -94,6 +92,8 @@ export abstract class Plot extends EE { this.execAdaptor(); // options 转换 + console.log(this.getSpecOptions()); + this.chart.options(this.getSpecOptions()); // 渲染 this.chart.render(); diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index d0b3bf273..63dfe93ca 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -1,4 +1,8 @@ import { isBoolean } from '../utils'; + +/** new Chart options */ +export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas', 'theme']; + /** * @title 字段转换逻辑 * @example @@ -59,6 +63,20 @@ export const TRANSFORM_OPTION_KEY = { } return { type: 'dodgeX', ...(value as object) }; }, + /** + * @title 排序 + * @example + * 1. sort: true -> transform: [{type: 'sortX'}] + */ + sort: (value: boolean | object) => { + if (isBoolean(value)) { + return { + type: 'sortX', + available: value, + }; + } + return { type: 'sortX', ...(value as object) }; + }, }, scale: { meta: (value: object) => { diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 1fd8b40b5..da580b70f 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -1,15 +1,15 @@ export * as G2 from '@antv/g2'; - +export type { AreaOptions } from './plots/area'; +export type { BarOptions } from './plots/bar'; +export type { ColumnOptions } from './plots/column'; +export type { LineOptions } from './plots/line'; +export type { PieOptions } from './plots/pie'; export * from './types'; -import { Line } from './plots/line'; +import { Area } from './plots/area'; +import { Bar } from './plots/bar'; import { Column } from './plots/column'; +import { Line } from './plots/line'; import { Pie } from './plots/pie'; -import { Area } from './plots/area'; - -export type { LineOptions } from './plots/line'; -export type { ColumnOptions } from './plots/column'; -export type { PieOptions } from './plots/pie'; -export type { AreaOptions } from './plots/area'; -export const Plots = { Line, Column, Pie, Area }; +export const Plots = { Line, Column, Pie, Area, Bar }; diff --git a/packages/plots/src/core/plots/bar/adaptor.ts b/packages/plots/src/core/plots/bar/adaptor.ts new file mode 100644 index 000000000..3407852b8 --- /dev/null +++ b/packages/plots/src/core/plots/bar/adaptor.ts @@ -0,0 +1,21 @@ +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import { flow, transformOptions } from '../../utils'; +import type { BarOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/bar/index.ts b/packages/plots/src/core/plots/bar/index.ts new file mode 100644 index 000000000..a72592014 --- /dev/null +++ b/packages/plots/src/core/plots/bar/index.ts @@ -0,0 +1,33 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { BarOptions } from './type'; + +export type { BarOptions }; + +export class Bar extends Plot { + /** 图表类型 */ + public type = 'Bar'; + + /** + * 获取 条形图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { type: 'view', children: [{ type: 'interval', coordinate: { transform: [{ type: 'transpose' }] } }] }; + } + + /** + * 获取 条形图 默认配置 + */ + protected getDefaultOptions() { + return Bar.getDefaultOptions(); + } + + /** + * 条形图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/bar/type.ts b/packages/plots/src/core/plots/bar/type.ts new file mode 100644 index 000000000..c6037305b --- /dev/null +++ b/packages/plots/src/core/plots/bar/type.ts @@ -0,0 +1,3 @@ +import type { Options } from '../../types/common'; + +export type BarOptions = Options; diff --git a/packages/plots/src/core/utils/get-custom-keys.ts b/packages/plots/src/core/utils/get-custom-keys.ts new file mode 100644 index 000000000..ba6fb2442 --- /dev/null +++ b/packages/plots/src/core/utils/get-custom-keys.ts @@ -0,0 +1,9 @@ +import { TRANSFORM_OPTION_KEY } from '../constants'; + +export const getCustomKeys = () => { + const customKeys = []; + Object.keys(TRANSFORM_OPTION_KEY).forEach((key) => { + customKeys.push(...Object.keys(TRANSFORM_OPTION_KEY[key])); + }); + return customKeys; +}; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 8af5c87ef..3182478f5 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -1,3 +1,4 @@ -export { omit, pick, isArray, flatten, flow, merge, isBoolean } from 'lodash-es'; +export { flatten, flow, isArray, isBoolean, merge, omit, pick } from 'lodash-es'; +export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index ee17e0bb8..636ef14c0 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -1,6 +1,6 @@ import { CHILDREN_SHAPE, SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY } from '../constants'; import { Adaptor } from '../types'; -import { omit } from './index'; +import { getCustomKeys, omit } from './index'; /** * @title 将自定义配置转换为 G2 接受的格式 */ @@ -10,11 +10,8 @@ export const transformOptions = (params: Adaptor) => { const getRest = (o: Adaptor['options']) => { const { children, type, data, ...rest } = o; - const customKeys = []; - Object.keys(TRANSFORM_OPTION_KEY).forEach((key) => { - customKeys.push(...Object.keys(TRANSFORM_OPTION_KEY[key])); - }); - return omit(rest, CHILDREN_SHAPE, customKeys); + + return omit(rest, CHILDREN_SHAPE, getCustomKeys()); }; const rest = getRest(options); diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 18a84a212..36852999f 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -77,6 +77,14 @@ export default defineConfig({ en: 'Column', }, }, + { + slug: 'bar', + icon: 'bar', + title: { + zh: '条形图', + en: 'Bar', + }, + }, { slug: 'line', icon: 'line', diff --git a/site/examples/bar/basic/API.en.md b/site/examples/bar/basic/API.en.md new file mode 100644 index 000000000..60be19afe --- /dev/null +++ b/site/examples/bar/basic/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/bar/basic/API.zh.md b/site/examples/bar/basic/API.zh.md new file mode 100644 index 000000000..04ad03f4e --- /dev/null +++ b/site/examples/bar/basic/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/bar/basic/demo/bar.js b/site/examples/bar/basic/demo/bar.js new file mode 100644 index 000000000..b64aeae4e --- /dev/null +++ b/site/examples/bar/basic/demo/bar.js @@ -0,0 +1,35 @@ +import { Bar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoBar = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv', + format: 'csv', + }, + xField: 'letter', + yField: 'frequency', + sort: { + reverse: true, + }, + label: { + text: 'frequency', + formatter: '.1%', + style: { + textAnchor: (d) => (+d.frequency > 0.008 ? 'right' : 'start'), + fill: (d) => (+d.frequency > 0.008 ? '#fff' : '#000'), + dx: (d) => (+d.frequency > 0.008 ? -5 : 5), + }, + }, + axis: { + y: { + labelFormatter: '.0%', + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/bar/basic/demo/meta.json b/site/examples/bar/basic/demo/meta.json new file mode 100644 index 000000000..d655e6215 --- /dev/null +++ b/site/examples/bar/basic/demo/meta.json @@ -0,0 +1,32 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "bar.js", + "title": { + "zh": "柱形图", + "en": "Bar Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*eU1cRqm_fPAAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "stacked.js", + "title": { + "zh": "堆叠条形图", + "en": "Stacked Bar Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*RJvHRpHoFmYAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "normalized-stacked.js", + "title": { + "zh": "归一化条形图", + "en": "Normalized Stacked Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*m6vKSptL6qkAAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/site/examples/bar/basic/demo/normalized-stacked.js b/site/examples/bar/basic/demo/normalized-stacked.js new file mode 100644 index 000000000..1b7f6a126 --- /dev/null +++ b/site/examples/bar/basic/demo/normalized-stacked.js @@ -0,0 +1,35 @@ +import { Bar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoBar = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/f129b517-158d-41a9-83a3-3294d639b39e.csv', + format: 'csv', + }, + xField: 'state', + yField: 'population', + colorField: 'age', + stack: true, + normalize: true, + sort: { + reverse: true, + by: 'y', + }, + axis: { + y: { labelFormatter: '~s' }, + x: { + labelSpacing: 4, + style: { + labelTransform: 'rotate(90)', + }, + }, + }, + tooltip: { items: [{ channel: 'y0', valueFormatter: '.0%' }] }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/bar/basic/demo/stacked.js b/site/examples/bar/basic/demo/stacked.js new file mode 100644 index 000000000..c0f54f6e6 --- /dev/null +++ b/site/examples/bar/basic/demo/stacked.js @@ -0,0 +1,33 @@ +import { Bar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoBar = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/f129b517-158d-41a9-83a3-3294d639b39e.csv', + format: 'csv', + }, + xField: 'state', + yField: 'population', + colorField: 'age', + stack: true, + sort: { + reverse: true, + by: 'y', + }, + axis: { + y: { labelFormatter: '~s' }, + x: { + labelSpacing: 4, + style: { + labelTransform: 'rotate(90)', + }, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/bar/basic/design.en.md b/site/examples/bar/basic/design.en.md new file mode 100644 index 000000000..e041c7a04 --- /dev/null +++ b/site/examples/bar/basic/design.en.md @@ -0,0 +1,29 @@ +--- +title: 设计规范 +--- + +## 何时使用 + +柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 + +## 数据类型 + +| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | +| ---------------- | -------------------------------------------------------------------------------------------------- | +| 功能 | 对比分类数据的数值大小 | +| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | +| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | + +## 用法建议 + +design + +## 元素 + +design + +- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 +- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 +- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 +- 标签:用来解释数据点的值。 +- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/bar/basic/design.zh.md b/site/examples/bar/basic/design.zh.md new file mode 100644 index 000000000..e041c7a04 --- /dev/null +++ b/site/examples/bar/basic/design.zh.md @@ -0,0 +1,29 @@ +--- +title: 设计规范 +--- + +## 何时使用 + +柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 + +## 数据类型 + +| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | +| ---------------- | -------------------------------------------------------------------------------------------------- | +| 功能 | 对比分类数据的数值大小 | +| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | +| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | + +## 用法建议 + +design + +## 元素 + +design + +- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 +- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 +- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 +- 标签:用来解释数据点的值。 +- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/bar/basic/index.en.md b/site/examples/bar/basic/index.en.md new file mode 100644 index 000000000..60de1c597 --- /dev/null +++ b/site/examples/bar/basic/index.en.md @@ -0,0 +1,4 @@ +--- +title: Basic Bar +order: 0 +--- \ No newline at end of file diff --git a/site/examples/bar/basic/index.zh.md b/site/examples/bar/basic/index.zh.md new file mode 100644 index 000000000..94ce48510 --- /dev/null +++ b/site/examples/bar/basic/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 基础条形图 +order: 0 +--- + +柱状图用于描述分类数据之间的对比,如果我们把时间周期,如周、月、年,也理解为一种分类数据 (time category),那么柱状图也可以用于描述时间周期之间的数值比较。 diff --git a/site/examples/column/basic/demo/bar-dodged.js b/site/examples/column/basic/demo/bar-dodged.js index 1b11cf804..fe416cbd8 100644 --- a/site/examples/column/basic/demo/bar-dodged.js +++ b/site/examples/column/basic/demo/bar-dodged.js @@ -1,6 +1,6 @@ +import { Column } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; -import { Column } from '@ant-design/plots'; const DemoColumn = () => { const config = { @@ -11,8 +11,13 @@ const DemoColumn = () => { }, xField: 'state', yField: 'population', - colorFiekd: 'age', - group: {}, + colorField: 'age', + group: true, + sort: { + reverse: true, + slice: 6, + by: 'y', + }, axis: { y: { labelFormatter: '~s' }, }, diff --git a/site/examples/column/basic/demo/column-log.js b/site/examples/column/basic/demo/column-log.js deleted file mode 100644 index 53212b56e..000000000 --- a/site/examples/column/basic/demo/column-log.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Column } from '@ant-design/plots'; - -const EPSILON = 1e-6; - -const DemoColumn = () => { - const config = { - data: { - type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv', - }, - xField: 'letter', - yField: 'frequency', - meta: { - y: { type: 'log' }, - }, - axis: { - y: { labelFormatter: (d) => (d === EPSILON ? 0 : d) }, - }, - }; - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/column/basic/demo/column.js b/site/examples/column/basic/demo/column.js index 011e4ee5e..b4f266a3a 100644 --- a/site/examples/column/basic/demo/column.js +++ b/site/examples/column/basic/demo/column.js @@ -1,6 +1,6 @@ +import { Column } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; -import { Column } from '@ant-design/plots'; const DemoColumn = () => { const config = { @@ -10,6 +10,10 @@ const DemoColumn = () => { }, xField: 'letter', yField: 'frequency', + label: { + text: (d) => `${(d.frequency * 100).toFixed(1)}%`, + textBaseline: 'bottom', + }, axis: { y: { labelFormatter: '.0%', diff --git a/site/examples/column/basic/demo/meta.json b/site/examples/column/basic/demo/meta.json index 388a1e36d..26c9a0a16 100644 --- a/site/examples/column/basic/demo/meta.json +++ b/site/examples/column/basic/demo/meta.json @@ -21,12 +21,12 @@ "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*fu-BSYg7U_kAAAAAAAAAAAAADmJ7AQ/original" }, { - "filename": "column-log.js", + "filename": "range.js", "title": { - "zh": "对数柱形图", - "en": "Log Column Chart" + "zh": "区间柱形图", + "en": "Range Column Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*cRE5TqJGnVUAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*hTfETY0ObOsAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "bar-dodged.js", @@ -35,6 +35,14 @@ "en": "Dodged Bar Chart" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*FrshQpaS4f0AAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "stacked.js", + "title": { + "zh": "堆叠柱形图", + "en": "Stacked Column Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*GwDUQbVt9XYAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/column/basic/demo/range.js b/site/examples/column/basic/demo/range.js new file mode 100644 index 000000000..4aa31d95f --- /dev/null +++ b/site/examples/column/basic/demo/range.js @@ -0,0 +1,37 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const EPSILON = 1e-6; + +const DemoColumn = () => { + const config = { + data: [ + { month: 'Jan.', profit: 387264, start: 0, end: 387264 }, + { month: 'Feb.', profit: 772096, start: 387264, end: 1159360 }, + { month: 'Mar.', profit: 638075, start: 1159360, end: 1797435 }, + { month: 'Apr.', profit: -211386, start: 1797435, end: 1586049 }, + { month: 'May', profit: -138135, start: 1586049, end: 1447914 }, + { month: 'Jun', profit: -267238, start: 1447914, end: 1180676 }, + { month: 'Jul.', profit: 431406, start: 1180676, end: 1612082 }, + { month: 'Aug.', profit: 363018, start: 1612082, end: 1975100 }, + { month: 'Sep.', profit: -224638, start: 1975100, end: 1750462 }, + { month: 'Oct.', profit: -299867, start: 1750462, end: 1450595 }, + { month: 'Nov.', profit: 607365, start: 1450595, end: 2057960 }, + { month: 'Dec.', profit: 1106986, start: 2057960, end: 3164946 }, + { month: 'Total', start: 0, end: 3164946 }, + ], + xField: 'month', + yField: ['start', 'end'], + colorField: (d) => (d.month === 'Total' ? 'Total' : d.profit > 0 ? 'Increase' : 'Decrease'), + axis: { + y: { labelFormatter: '~s' }, + }, + tooltip: { + items: ['start', 'end'], + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/column/basic/demo/stacked.js b/site/examples/column/basic/demo/stacked.js new file mode 100644 index 000000000..1cdc91a49 --- /dev/null +++ b/site/examples/column/basic/demo/stacked.js @@ -0,0 +1,34 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoColumn = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/f129b517-158d-41a9-83a3-3294d639b39e.csv', + format: 'csv', + }, + xField: 'state', + yField: 'population', + colorField: 'age', + stack: true, + sort: { + reverse: true, + slice: 6, + by: 'y', + }, + axis: { + y: { labelFormatter: '~s' }, + x: { + labelSpacing: 4, + style: { + labelTransform: 'rotate(90)', + }, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 0ccd1d86a45b28027dce1e44cc9c9c38b5c3ef1e Mon Sep 17 00:00:00 2001 From: OctKun Date: Mon, 14 Aug 2023 17:53:54 +0800 Subject: [PATCH 010/268] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E9=9D=A2?= =?UTF-8?q?=E7=A7=AF=E5=9B=BE=E7=A4=BA=E4=BE=8B=E5=9D=90=E6=A0=87=E7=B3=BB?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=20(#2026)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: chenkun --- site/examples/area/basic/demo/basic.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/site/examples/area/basic/demo/basic.js b/site/examples/area/basic/demo/basic.js index 2adc8090a..217ba3d35 100644 --- a/site/examples/area/basic/demo/basic.js +++ b/site/examples/area/basic/demo/basic.js @@ -236,8 +236,8 @@ const DemoArea = () => { ], xField: 'timePeriod', yField: 'value', - xAxis: { - range: [0, 1], + axis: { + x: { range: [0, 1] }, }, }; From 9d332763baa3a05dae55966255fccf5ef4ac727d Mon Sep 17 00:00:00 2001 From: OctKun Date: Tue, 15 Aug 2023 10:09:33 +0800 Subject: [PATCH 011/268] =?UTF-8?q?chore:=20=E6=B7=BB=E5=8A=A0=E9=9D=A2?= =?UTF-8?q?=E7=A7=AF=E5=9B=BE=E7=A4=BA=E4=BE=8B=20(#2029)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: chenkun --- .../area/basic/demo/basic-gradients.js | 20 ++ site/examples/area/basic/demo/basic-slider.js | 23 ++ site/examples/area/basic/demo/basic.js | 260 ++---------------- site/examples/area/basic/demo/meta.json | 42 ++- .../area/basic/demo/missing-data-area.js | 22 ++ .../area/basic/demo/percentage-area.js | 21 ++ site/examples/area/basic/demo/stacked-area.js | 20 ++ 7 files changed, 174 insertions(+), 234 deletions(-) create mode 100644 site/examples/area/basic/demo/basic-gradients.js create mode 100644 site/examples/area/basic/demo/basic-slider.js create mode 100644 site/examples/area/basic/demo/missing-data-area.js create mode 100644 site/examples/area/basic/demo/percentage-area.js create mode 100644 site/examples/area/basic/demo/stacked-area.js diff --git a/site/examples/area/basic/demo/basic-gradients.js b/site/examples/area/basic/demo/basic-gradients.js new file mode 100644 index 000000000..b6a7238e9 --- /dev/null +++ b/site/examples/area/basic/demo/basic-gradients.js @@ -0,0 +1,20 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/1d565782-dde4-4bb6-8946-ea6a38ccf184.json', + }, + xField: 'Date', + yField: 'scales', + style: { + fill: 'l(270) 0:#ffffff 0.5:#7ec2f3 1:#1890ff', + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/area/basic/demo/basic-slider.js b/site/examples/area/basic/demo/basic-slider.js new file mode 100644 index 000000000..dd99e2cb9 --- /dev/null +++ b/site/examples/area/basic/demo/basic-slider.js @@ -0,0 +1,23 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/1d565782-dde4-4bb6-8946-ea6a38ccf184.json', + }, + xField: 'Date', + yField: 'scales', + animation: false, + slider: { + x: { + values: [0.1, 0.9], + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/area/basic/demo/basic.js b/site/examples/area/basic/demo/basic.js index 217ba3d35..2175f19b5 100644 --- a/site/examples/area/basic/demo/basic.js +++ b/site/examples/area/basic/demo/basic.js @@ -4,241 +4,35 @@ import { Area } from '@ant-design/plots'; const DemoArea = () => { const config = { - data: [ - { - timePeriod: '2006 Q3', - value: 1, - }, - { - timePeriod: '2006 Q4', - value: 1.08, - }, - { - timePeriod: '2007 Q1', - value: 1.17, - }, - { - timePeriod: '2007 Q2', - value: 1.26, - }, - { - timePeriod: '2007 Q3', - value: 1.34, - }, - { - timePeriod: '2007 Q4', - value: 1.41, - }, - { - timePeriod: '2008 Q1', - value: 1.52, - }, - { - timePeriod: '2008 Q2', - value: 1.67, - }, - { - timePeriod: '2008 Q3', - value: 1.84, - }, - { - timePeriod: '2008 Q4', - value: 2.07, - }, - { - timePeriod: '2009 Q1', - value: 2.39, - }, - { - timePeriod: '2009 Q2', - value: 2.71, - }, - { - timePeriod: '2009 Q3', - value: 3.03, - }, - { - timePeriod: '2009 Q4', - value: 3.33, - }, - { - timePeriod: '2010 Q1', - value: 3.5, - }, - { - timePeriod: '2010 Q2', - value: 3.37, - }, - { - timePeriod: '2010 Q3', - value: 3.15, - }, - { - timePeriod: '2010 Q4', - value: 3.01, - }, - { - timePeriod: '2011 Q1', - value: 2.8, - }, - { - timePeriod: '2011 Q2', - value: 2.8, - }, - { - timePeriod: '2011 Q3', - value: 2.84, - }, - { - timePeriod: '2011 Q4', - value: 2.75, - }, - { - timePeriod: '2012 Q1', - value: 2.64, - }, - { - timePeriod: '2012 Q2', - value: 2.55, - }, - { - timePeriod: '2012 Q3', - value: 2.46, - }, - { - timePeriod: '2012 Q4', - value: 2.45, - }, - { - timePeriod: '2013 Q1', - value: 2.57, - }, - { - timePeriod: '2013 Q2', - value: 2.68, - }, - { - timePeriod: '2013 Q3', - value: 2.8, - }, - { - timePeriod: '2013 Q4', - value: 2.89, - }, - { - timePeriod: '2014 Q1', - value: 2.85, - }, - { - timePeriod: '2014 Q2', - value: 2.73, - }, - { - timePeriod: '2014 Q3', - value: 2.54, - }, - { - timePeriod: '2014 Q4', - value: 2.32, - }, - { - timePeriod: '2015 Q1', - value: 2.25, - }, - { - timePeriod: '2015 Q2', - value: 2.33, - }, - { - timePeriod: '2015 Q3', - value: 2.53, - }, - { - timePeriod: '2015 Q4', - value: 2.74, - }, - { - timePeriod: '2016 Q1', - value: 2.76, - }, - { - timePeriod: '2016 Q2', - value: 2.61, - }, - { - timePeriod: '2016 Q3', - value: 2.35, - }, - { - timePeriod: '2016 Q4', - value: 2.11, - }, - { - timePeriod: '2017 Q1', - value: 2.08, - }, - { - timePeriod: '2017 Q2', - value: 2.2, - }, - { - timePeriod: '2017 Q3', - value: 2.38, - }, - { - timePeriod: '2017 Q4', - value: 2.59, - }, - { - timePeriod: '2018 Q1', - value: 2.63, - }, - { - timePeriod: '2018 Q2', - value: 2.67, - }, - { - timePeriod: '2018 Q3', - value: 2.64, - }, - { - timePeriod: '2018 Q4', - value: 2.5, - }, - { - timePeriod: '2019 Q1', - value: 2.31, - }, - { - timePeriod: '2019 Q2', - value: 2.04, - }, - { - timePeriod: '2019 Q3', - value: 1.83, - }, - { - timePeriod: '2019 Q4', - value: 1.71, - }, - { - timePeriod: '2020 Q1', - value: 1.65, - }, - { - timePeriod: '2020 Q2', - value: 1.59, - }, - { - timePeriod: '2020 Q3', - value: 1.58, + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/1d565782-dde4-4bb6-8946-ea6a38ccf184.json', + }, + xField: 'Date', + yField: 'scales', + annotations: [ + { + type: 'text', + data: ['2014-03', 1834], + style: { + text: '2014-03, 受比特币影响,blockchain 1834', + wordWrap: true, + wordWrapWidth: 164, + dx: -174, + dy: 30, + fill: '#2C3542', + fillOpacity: 0.65, + fontSize: 10, + background: true, + backgroundRadius: 2, + connector: true, + startMarker: true, + startMarkerFill: '#2C3542', + startMarkerFillOpacity: 0.65, + }, + tooltip: false, }, ], - xField: 'timePeriod', - yField: 'value', - axis: { - x: { range: [0, 1] }, - }, }; return ; diff --git a/site/examples/area/basic/demo/meta.json b/site/examples/area/basic/demo/meta.json index 0546bb3b0..0c1e4d126 100644 --- a/site/examples/area/basic/demo/meta.json +++ b/site/examples/area/basic/demo/meta.json @@ -10,7 +10,47 @@ "zh": "基础面积图", "en": "Basic Area plot" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/ld0NQtdLO0/mianjitugengxinshuju-after.gif" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ZxtyTrhyN4sAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "basic-gradients.js", + "title": { + "zh": "渐变色面积图", + "en": "Gradients area plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*4dnrSbNeOGQAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "basic-slider.js", + "title": { + "zh": "带缩略轴面积图", + "en": "Area plot with slider" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*xXtxRLa2CHoAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "missing-data-area.js", + "title": { + "zh": "数据缺失面积图", + "en": "missing data area plot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ns2sS5S_VEAAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "stacked-area.js", + "title": { + "zh": "堆叠面积图", + "en": "Stacked Area Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*O3TaRpybBCgAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "percentage-area.js", + "title": { + "zh": "归一化堆积面积图", + "en": "Normalized Area, MaxIndex" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*WZe_T5tyWgoAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/area/basic/demo/missing-data-area.js b/site/examples/area/basic/demo/missing-data-area.js new file mode 100644 index 000000000..cb2d4b31f --- /dev/null +++ b/site/examples/area/basic/demo/missing-data-area.js @@ -0,0 +1,22 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/aapl.json', + }, + xField: (d) => new Date(d.date), + yField: (d) => (new Date(d.date).getUTCMonth() <= 3 ? NaN : d.close), + connectNulls: { + connect: true, + connectFill: 'grey', + connectFillOpacity: 0.15, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/area/basic/demo/percentage-area.js b/site/examples/area/basic/demo/percentage-area.js new file mode 100644 index 000000000..e52036f27 --- /dev/null +++ b/site/examples/area/basic/demo/percentage-area.js @@ -0,0 +1,21 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/unemployment-by-industry.json', + }, + xField: (d) => new Date(d.date), + yField: 'unemployed', + colorField: 'industry', + normalize: true, + stack: true, + tooltip: { channel: 'y0', valueFormatter: '.3f' }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/area/basic/demo/stacked-area.js b/site/examples/area/basic/demo/stacked-area.js new file mode 100644 index 000000000..ac472f8dc --- /dev/null +++ b/site/examples/area/basic/demo/stacked-area.js @@ -0,0 +1,20 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/unemployment-by-industry.json', + }, + xField: (d) => new Date(d.date), + yField: 'unemployed', + colorField: 'industry', + shape: 'smooth', + stack: true, // Try to remove this line. + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 12153b1f9e95cb5f8f3b0f015d9f97bf93da0e14 Mon Sep 17 00:00:00 2001 From: OctKun <2310353398@qq.com> Date: Tue, 15 Aug 2023 10:10:07 +0800 Subject: [PATCH 012/268] =?UTF-8?q?chore:=20=E6=B7=BB=E5=8A=A0cross-env?= =?UTF-8?q?=E5=85=BC=E5=AE=B9windows=E5=B9=B3=E5=8F=B0=20(#2022)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/site/package.json b/site/package.json index 2863267bd..73aee932c 100644 --- a/site/package.json +++ b/site/package.json @@ -22,10 +22,10 @@ "license": "MIT", "author": "https://github.com/orgs/antvis/people", "scripts": { - "build": "NODE_OPTIONS=--max_old_space_size=12288 dumi build", + "build": "cross-env NODE_OPTIONS=--max_old_space_size=12288 dumi build", "develop": "cross-env DUMI=true dumi dev", "deploy": "pnpm run build && gh-pages -d public", - "start": "NODE_OPTIONS=--max_old_space_size=8192 pnpm run develop" + "start": "cross-env NODE_OPTIONS=--max_old_space_size=8192 pnpm run develop" }, "devDependencies": { "@antv/dumi-theme-antv": "0.3.18", From bd685cc44c7bd7fd8ac63374895ad6079d770854 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 15 Aug 2023 10:45:07 +0800 Subject: [PATCH 013/268] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20DualAxes?= =?UTF-8?q?=20(#2028)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 新增DualAxes * fix: test --- .github/workflows/lint.yml | 2 +- .github/workflows/test.yml | 2 +- packages/plots/CHANGELOG.md | 2 +- packages/plots/jest.config.js | 4 +- .../plots/src/components/dual-axes/index.tsx | 10 ++++ packages/plots/src/components/index.ts | 3 +- packages/plots/src/core/base/index.ts | 2 - packages/plots/src/core/index.ts | 4 +- .../plots/src/core/plots/dual-axes/adaptor.ts | 21 +++++++ .../plots/src/core/plots/dual-axes/index.ts | 33 +++++++++++ .../plots/src/core/plots/dual-axes/type.ts | 3 + packages/plots/src/core/utils/transform.ts | 43 ++++++++++++--- ...{column-proxy-spec.tsx => column-spec.tsx} | 3 +- site/.dumirc.ts | 8 +++ site/examples/dual-axes/basic/API.en.md | 1 + site/examples/dual-axes/basic/API.zh.md | 1 + site/examples/dual-axes/basic/demo/basic.js | 55 +++++++++++++++++++ site/examples/dual-axes/basic/demo/meta.json | 16 ++++++ site/examples/dual-axes/basic/index.en.md | 4 ++ site/examples/dual-axes/basic/index.zh.md | 6 ++ site/examples/line/basic/demo/group.js | 26 --------- site/examples/line/basic/demo/meta.json | 8 --- 22 files changed, 205 insertions(+), 52 deletions(-) create mode 100644 packages/plots/src/components/dual-axes/index.tsx create mode 100644 packages/plots/src/core/plots/dual-axes/adaptor.ts create mode 100644 packages/plots/src/core/plots/dual-axes/index.ts create mode 100644 packages/plots/src/core/plots/dual-axes/type.ts rename packages/plots/tests/plots/{column-proxy-spec.tsx => column-spec.tsx} (93%) create mode 100644 site/examples/dual-axes/basic/API.en.md create mode 100644 site/examples/dual-axes/basic/API.zh.md create mode 100644 site/examples/dual-axes/basic/demo/basic.js create mode 100644 site/examples/dual-axes/basic/demo/meta.json create mode 100644 site/examples/dual-axes/basic/index.en.md create mode 100644 site/examples/dual-axes/basic/index.zh.md delete mode 100644 site/examples/line/basic/demo/group.js diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 5ca524058..87adb6f9e 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [14.x] + node-version: [16.x] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 898a5b684..6a7bb2caf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: timeout-minutes: 15 strategy: matrix: - node-version: [14.x] + node-version: [16.x] steps: - name: checkout code repository uses: actions/checkout@v3 diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 282b72b15..851043980 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -2,7 +2,7 @@ `2023-02-03` -- 🐞 Revert PR [fix: 在 grid 布局中图表 autofit 缩小宽度时不生效](https://github.com/ant-design/ant-design-charts/pull/1766) grid自适应问题参考[在 grid 布局中图表 autofit 缩小宽度时不生效](https://github.com/ant-design/ant-design-charts/issues/1761) +- 🐞 Revert PR [fix: 在 grid 布局中图表 autofit 缩小宽度时不生效](https://github.com/ant-design/ant-design-charts/pull/1766) grid 自适应问题参考[在 grid 布局中图表 autofit 缩小宽度时不生效](https://github.com/ant-design/ant-design-charts/issues/1761) ## 1.2.4 diff --git a/packages/plots/jest.config.js b/packages/plots/jest.config.js index fa82ad77e..06953c3a3 100644 --- a/packages/plots/jest.config.js +++ b/packages/plots/jest.config.js @@ -3,6 +3,8 @@ module.exports = { ...BaseJestConfig, ...(process.env.DEBUG_MODE === '1' ? OnlineConfig : {}), moduleNameMapper: { - 'd3-((?!linear)\\S*)': `/../../node_modules/d3-$1/dist/d3-$1.min.js`, + '^d3-((?!linear)\\S*)': `/../../node_modules/d3-$1/dist/d3-$1.min.js`, + '^lodash-es$': 'lodash', + '^rc-utils': `/../../packages/rc-utils/src`, }, }; diff --git a/packages/plots/src/components/dual-axes/index.tsx b/packages/plots/src/components/dual-axes/index.tsx new file mode 100644 index 000000000..10a3b2835 --- /dev/null +++ b/packages/plots/src/components/dual-axes/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { DualAxesOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type DualAxesConfig = CommonConfig; + +const DualAxesChart = (props: DualAxesConfig) => ; + +export default DualAxesChart; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 31833ae47..dfa89f9ba 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -1,7 +1,8 @@ import Area from './area'; import Bar from './bar'; import Column from './column'; +import DualAxes from './dual-axes'; import Line from './line'; import Pie from './pie'; -export { Column, Line, Pie, Area, Bar }; +export { Column, Line, Pie, Area, Bar, DualAxes }; diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index ae68e2146..1f6b11d3c 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -92,8 +92,6 @@ export abstract class Plot extends EE { this.execAdaptor(); // options 转换 - console.log(this.getSpecOptions()); - this.chart.options(this.getSpecOptions()); // 渲染 this.chart.render(); diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index da580b70f..a7487430f 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -2,6 +2,7 @@ export * as G2 from '@antv/g2'; export type { AreaOptions } from './plots/area'; export type { BarOptions } from './plots/bar'; export type { ColumnOptions } from './plots/column'; +export type { DualAxesOptions } from './plots/dual-axes'; export type { LineOptions } from './plots/line'; export type { PieOptions } from './plots/pie'; export * from './types'; @@ -9,7 +10,8 @@ export * from './types'; import { Area } from './plots/area'; import { Bar } from './plots/bar'; import { Column } from './plots/column'; +import { DualAxes } from './plots/dual-axes'; import { Line } from './plots/line'; import { Pie } from './plots/pie'; -export const Plots = { Line, Column, Pie, Area, Bar }; +export const Plots = { Line, Column, Pie, Area, Bar, DualAxes }; diff --git a/packages/plots/src/core/plots/dual-axes/adaptor.ts b/packages/plots/src/core/plots/dual-axes/adaptor.ts new file mode 100644 index 000000000..251ed9f07 --- /dev/null +++ b/packages/plots/src/core/plots/dual-axes/adaptor.ts @@ -0,0 +1,21 @@ +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import { flow, transformOptions } from '../../utils'; +import type { DualAxesOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/dual-axes/index.ts b/packages/plots/src/core/plots/dual-axes/index.ts new file mode 100644 index 000000000..65441aa4e --- /dev/null +++ b/packages/plots/src/core/plots/dual-axes/index.ts @@ -0,0 +1,33 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { DualAxesOptions } from './type'; + +export type { DualAxesOptions }; + +export class DualAxes extends Plot { + /** 图表类型 */ + public type = 'DualAxes'; + + /** + * 获取 双轴图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { type: 'view' }; + } + + /** + * 获取 条形图 默认配置 + */ + protected getDefaultOptions() { + return DualAxes.getDefaultOptions(); + } + + /** + * 条形图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/dual-axes/type.ts b/packages/plots/src/core/plots/dual-axes/type.ts new file mode 100644 index 000000000..644a7bdcd --- /dev/null +++ b/packages/plots/src/core/plots/dual-axes/type.ts @@ -0,0 +1,3 @@ +import type { Options } from '../../types/common'; + +export type DualAxesOptions = Options; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index 636ef14c0..3a9446f3e 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -8,6 +8,8 @@ export const transformOptions = (params: Adaptor) => { const { options } = params; const { children = [] } = options; + const deleteKeys = []; + const getRest = (o: Adaptor['options']) => { const { children, type, data, ...rest } = o; @@ -29,6 +31,18 @@ export const transformOptions = (params: Adaptor) => { return SPECIAL_OPTIONS.find((option) => option.key === key)?.callback; }; + /** + * @description 更新图表配置 + */ + const updateOptions = (origin, key, value) => { + const callback = getCustomTransform(key); + if (callback) { + callback(origin, key, value); + } else { + origin[key] = Object.assign({}, origin[key], value); + } + }; + children.forEach((child) => { /** * @description 外层配置应用到所有 children @@ -42,27 +56,40 @@ export const transformOptions = (params: Adaptor) => { * @example 详见 src/core/constants/index.ts */ Object.keys(transformObject).forEach((key) => { + /** + * @description 常规图表 + * @example Line Bar Column 等单图层图表 + */ if (options[key]) { const transformValue = getValue(transformObject[key], options[key], transformOption); - const callback = getCustomTransform(specKey); - if (callback) { - callback(transformOption, specKey, transformValue); - } else { - transformOption[specKey] = Object.assign(transformOption[specKey] || {}, transformValue); - } - delete options[key]; + updateOptions(transformOption, specKey, transformValue); + deleteKeys.push(key); + } + /** + * @description 特殊图表 + * @example DualAxes 等多图层图表 + */ + if (child[key]) { + const transformValue = getValue(transformObject[key], child[key], transformOption); + updateOptions(transformOption, specKey, transformValue); + delete child[key]; } }); }); }); /** - * @description 将 CHILDREN_SHAPE 中的配置项, 转换为 children + * @description + * 1. 将 CHILDREN_SHAPE 中的配置项, 转换为 children + * 2. 删除已移入到 children 内的 key * @example 详见 src/core/constants/index.ts */ Object.keys(options).forEach((key) => { if (CHILDREN_SHAPE.includes(key)) { children.push(...options[key]); + deleteKeys.push(key); + } + if (deleteKeys.includes(key)) { delete options[key]; } }); diff --git a/packages/plots/tests/plots/column-proxy-spec.tsx b/packages/plots/tests/plots/column-spec.tsx similarity index 93% rename from packages/plots/tests/plots/column-proxy-spec.tsx rename to packages/plots/tests/plots/column-spec.tsx index 78f8b730d..6cd331731 100644 --- a/packages/plots/tests/plots/column-proxy-spec.tsx +++ b/packages/plots/tests/plots/column-spec.tsx @@ -32,7 +32,6 @@ describe('Proxy config', () => { }); it('chart render', async () => { - let stateProxy: any; let plot: any; const config = { data, @@ -45,6 +44,6 @@ describe('Proxy config', () => { act(() => { render(, container); }); - expect(stateProxy['xField']).toBe('date'); + expect(plot).not.toBeUndefined(); }); }); diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 36852999f..790966c52 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -109,6 +109,14 @@ export default defineConfig({ en: 'Area', }, }, + { + slug: 'dual-axes', + icon: 'other', + title: { + zh: '双轴图', + en: 'DualAxes', + }, + }, ], detail: { title: { diff --git a/site/examples/dual-axes/basic/API.en.md b/site/examples/dual-axes/basic/API.en.md new file mode 100644 index 000000000..16b855f11 --- /dev/null +++ b/site/examples/dual-axes/basic/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/dual-axes/basic/API.zh.md b/site/examples/dual-axes/basic/API.zh.md new file mode 100644 index 000000000..60f45a35a --- /dev/null +++ b/site/examples/dual-axes/basic/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/dual-axes/basic/demo/basic.js b/site/examples/dual-axes/basic/demo/basic.js new file mode 100644 index 000000000..15f544230 --- /dev/null +++ b/site/examples/dual-axes/basic/demo/basic.js @@ -0,0 +1,55 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const config = { + data: [ + { time: '10:10', call: 4, waiting: 2, people: 2 }, + { time: '10:15', call: 2, waiting: 6, people: 3 }, + { time: '10:20', call: 13, waiting: 2, people: 5 }, + { time: '10:25', call: 9, waiting: 9, people: 1 }, + { time: '10:30', call: 5, waiting: 2, people: 3 }, + { time: '10:35', call: 8, waiting: 2, people: 1 }, + { time: '10:40', call: 13, waiting: 1, people: 2 }, + ], + children: [ + { + type: 'interval', + xField: 'time', + yField: 'waiting', + axis: { + y: { title: 'Waiting', style: { titleFill: '#5B8FF9' } }, + }, + }, + { + type: 'line', + xField: 'time', + yField: 'people', + shape: 'smooth', + style: { + stroke: '#fdae6b', + lineWidth: 2, + }, + meta: { + y: { + independent: true, + }, + }, + axis: { + y: { + position: 'right', + grid: null, + title: 'People', + style: { + titleFill: '#fdae6b', + }, + }, + }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/dual-axes/basic/demo/meta.json b/site/examples/dual-axes/basic/demo/meta.json new file mode 100644 index 000000000..9cf15a1ea --- /dev/null +++ b/site/examples/dual-axes/basic/demo/meta.json @@ -0,0 +1,16 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": " 柱线混合", + "en": "Line Bar Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*GLvKQbqMjTQAAAAAAAAAAAAADmJ7AQ/fmt.webp" + } + ] +} diff --git a/site/examples/dual-axes/basic/index.en.md b/site/examples/dual-axes/basic/index.en.md new file mode 100644 index 000000000..4d98f299b --- /dev/null +++ b/site/examples/dual-axes/basic/index.en.md @@ -0,0 +1,4 @@ +--- +title: Basic DualAxes +order: 0 +--- \ No newline at end of file diff --git a/site/examples/dual-axes/basic/index.zh.md b/site/examples/dual-axes/basic/index.zh.md new file mode 100644 index 000000000..3978cd779 --- /dev/null +++ b/site/examples/dual-axes/basic/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 基础双轴图 +order: 0 +--- + +柱状图用于描述分类数据之间的对比,如果我们把时间周期,如周、月、年,也理解为一种分类数据 (time category),那么柱状图也可以用于描述时间周期之间的数值比较。 diff --git a/site/examples/line/basic/demo/group.js b/site/examples/line/basic/demo/group.js deleted file mode 100644 index 1c213ec3a..000000000 --- a/site/examples/line/basic/demo/group.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Line } from '@ant-design/plots'; - -const DemoLine = () => { - const config = { - data: { - type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/cb99c4ab-e0a3-4c76-9586-fe7fa2ff1a8c.csv', - }, - xField: (d) => new Date(d.date).getFullYear(), - yField: 'price', - colorField: 'symbol', - label: { - text: 'price', - transform: [{ type: 'overlapDodgeY' }], - style: { - fontSize: 10, - }, - }, - group: { y: 'mean' }, - }; - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/line/basic/demo/meta.json b/site/examples/line/basic/demo/meta.json index 988fd54da..01b8a40ab 100644 --- a/site/examples/line/basic/demo/meta.json +++ b/site/examples/line/basic/demo/meta.json @@ -44,14 +44,6 @@ }, "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*MzXYRqHjHQEAAAAAAAAAAAAADmJ7AQ" }, - { - "filename": "group.js", - "title": { - "zh": "聚合折线图", - "en": "Group Line plot" - }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*-q4yQZ7WtDcAAAAAAAAAAAAADmJ7AQ" - }, { "filename": "color.js", "title": { From 0611a86e6ceade557aac1fe6c47d4905ca2cfdd0 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 15 Aug 2023 11:26:34 +0800 Subject: [PATCH 014/268] =?UTF-8?q?chore:=20=E6=96=B0=E5=A2=9E=E9=83=A8?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E5=9E=8B=E5=AE=9A=E4=B9=89=20(#2030)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plots/src/core/plots/area/type.ts | 4 +- packages/plots/src/core/plots/bar/type.ts | 4 +- packages/plots/src/core/plots/column/type.ts | 4 +- packages/plots/src/core/plots/line/type.ts | 4 +- packages/plots/src/core/plots/pie/type.ts | 4 +- packages/plots/src/core/types/common.ts | 74 +++++++++++++++----- 6 files changed, 67 insertions(+), 27 deletions(-) diff --git a/packages/plots/src/core/plots/area/type.ts b/packages/plots/src/core/plots/area/type.ts index 939cba7f4..46cb3b7a6 100644 --- a/packages/plots/src/core/plots/area/type.ts +++ b/packages/plots/src/core/plots/area/type.ts @@ -1,3 +1,3 @@ -import type { Options } from '../../types/common'; +import type { BaseOptions, Options } from '../../types/common'; -export type AreaOptions = Options; +export type AreaOptions = Options & BaseOptions; diff --git a/packages/plots/src/core/plots/bar/type.ts b/packages/plots/src/core/plots/bar/type.ts index c6037305b..944559d76 100644 --- a/packages/plots/src/core/plots/bar/type.ts +++ b/packages/plots/src/core/plots/bar/type.ts @@ -1,3 +1,3 @@ -import type { Options } from '../../types/common'; +import type { BaseOptions, Options } from '../../types/common'; -export type BarOptions = Options; +export type BarOptions = Options & BaseOptions; diff --git a/packages/plots/src/core/plots/column/type.ts b/packages/plots/src/core/plots/column/type.ts index b24fc0627..a94dfecb8 100644 --- a/packages/plots/src/core/plots/column/type.ts +++ b/packages/plots/src/core/plots/column/type.ts @@ -1,3 +1,3 @@ -import type { Options } from '../../types/common'; +import type { BaseOptions, Options } from '../../types/common'; -export type ColumnOptions = Options; +export type ColumnOptions = Options & BaseOptions; diff --git a/packages/plots/src/core/plots/line/type.ts b/packages/plots/src/core/plots/line/type.ts index b73f2121a..2005fc8b8 100644 --- a/packages/plots/src/core/plots/line/type.ts +++ b/packages/plots/src/core/plots/line/type.ts @@ -1,3 +1,3 @@ -import type { Options } from '../../types/common'; +import type { BaseOptions, Options } from '../../types/common'; -export type LineOptions = Options; +export type LineOptions = Options & BaseOptions; diff --git a/packages/plots/src/core/plots/pie/type.ts b/packages/plots/src/core/plots/pie/type.ts index 89e02a8bd..0b6bae255 100644 --- a/packages/plots/src/core/plots/pie/type.ts +++ b/packages/plots/src/core/plots/pie/type.ts @@ -1,3 +1,3 @@ -import type { Options } from '../../types/common'; +import type { ArcBaseOptions, Options } from '../../types/common'; -export type PieOptions = Options; +export type PieOptions = Options & ArcBaseOptions; diff --git a/packages/plots/src/core/types/common.ts b/packages/plots/src/core/types/common.ts index dd737a037..b1cf8ef18 100644 --- a/packages/plots/src/core/types/common.ts +++ b/packages/plots/src/core/types/common.ts @@ -1,27 +1,67 @@ -import type { Chart, G2Spec } from '@antv/g2'; +import type { Chart, DodgeXTransform, G2Spec, NormalizeYTransform, SortByTransform, StackYTransform } from '@antv/g2'; -export type Options = G2Spec & - AppendOptions & { - [key: string]: any; - }; - -export type Adaptor

= { - chart: Chart; - options: P; - originOptions?: P; -}; - -export type AppendOptions = { +export type BaseOptions = { /** * @title x轴字段 */ - readonly xField: string; + readonly xField?: string; /** * @title y轴字段 */ - readonly yField: string; + readonly yField?: string; + /** + * @title 分组字段 + */ + readonly seriesField?: string; /** - * @title 拆分字段 + * @title 堆积 */ - readonly colorField?: string; + readonly stack?: boolean | StackYTransform; + /** + * @title 归一化 + */ + readonly normalize?: boolean | NormalizeYTransform; + /** + * @title 排序 + */ + readonly sort?: boolean | SortByTransform; + /** + * @title 分组 + */ + readonly group?: boolean | DodgeXTransform; + /** + * @title 图形 + * @description interval 图形元素展示形状 + * @example smooth | hvh + */ + readonly shape?: string; +}; + +export type ArcBaseOptions = { + /** + * @title 角度映射字段 + */ + readonly angleField: string; + /** + * @title 颜色映射字段 + */ + readonly colorField: string; + /** + * @title 饼图半径 + */ + readonly radius?: number; + /** + * @title 饼图内半径 + */ + readonly innerRadius?: number; +}; + +export type Options = G2Spec & { + [key: string]: any; +}; + +export type Adaptor

= { + chart: Chart; + options: P; + originOptions?: P; }; From 82ebc1c9013889829ceb0d5b03fd02b56e5f24ba Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Wed, 16 Aug 2023 16:52:55 +0800 Subject: [PATCH 015/268] fix(g2): update antv/g2 5.0.16 (#2034) Co-authored-by: ai-qing-hai --- packages/plots/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plots/package.json b/packages/plots/package.json index a1d8c0a30..b0308020d 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@antv/event-emitter": "^0.1.3", - "@antv/g2": "^5.0.6", + "@antv/g2": "^5.0.16", "size-sensor": "^1.0.1", "react-content-loader": "^5.0.4", "rc-utils": "workspace:*" From d36e0f57f80a89564db30758f22ec7e2697f3db9 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Thu, 17 Aug 2023 19:12:47 +0800 Subject: [PATCH 016/268] feat(scatter): add scatter (#2031) * feat(scatter): add scatter * feat(scatter): add shape: point default --------- Co-authored-by: ai-qing-hai --- packages/plots/src/components/index.ts | 3 +- .../plots/src/components/scatter/index.tsx | 10 ++ packages/plots/src/core/constants/index.ts | 5 +- packages/plots/src/core/index.ts | 5 +- .../plots/src/core/plots/scatter/adaptor.ts | 21 ++++ .../plots/src/core/plots/scatter/index.ts | 37 +++++++ packages/plots/src/core/plots/scatter/type.ts | 3 + site/.dumirc.ts | 8 ++ site/examples/scatter/basic/API.en.md | 1 + site/examples/scatter/basic/API.zh.md | 1 + site/examples/scatter/basic/demo/basic.js | 19 ++++ site/examples/scatter/basic/demo/meta.json | 103 ++++++++++++++++++ .../scatter/basic/demo/point-aggregated.js | 27 +++++ .../scatter/basic/demo/point-bubble.js | 36 ++++++ site/examples/scatter/basic/demo/point-dot.js | 36 ++++++ .../scatter/basic/demo/point-jitter.js | 25 +++++ .../scatter/basic/demo/point-label.js | 35 ++++++ site/examples/scatter/basic/demo/point-log.js | 24 ++++ .../scatter/basic/demo/point-one-dimension.js | 19 ++++ .../scatter/basic/demo/point-sequential.js | 35 ++++++ .../scatter/basic/demo/point-shape.js | 23 ++++ .../scatter/basic/demo/point-stacked.js | 37 +++++++ .../scatter/basic/demo/point-strip.js | 29 +++++ site/examples/scatter/basic/design.en.md | 29 +++++ site/examples/scatter/basic/design.zh.md | 29 +++++ site/examples/scatter/basic/index.en.md | 4 + site/examples/scatter/basic/index.zh.md | 6 + 27 files changed, 607 insertions(+), 3 deletions(-) create mode 100644 packages/plots/src/components/scatter/index.tsx create mode 100644 packages/plots/src/core/plots/scatter/adaptor.ts create mode 100644 packages/plots/src/core/plots/scatter/index.ts create mode 100644 packages/plots/src/core/plots/scatter/type.ts create mode 100644 site/examples/scatter/basic/API.en.md create mode 100644 site/examples/scatter/basic/API.zh.md create mode 100644 site/examples/scatter/basic/demo/basic.js create mode 100644 site/examples/scatter/basic/demo/meta.json create mode 100644 site/examples/scatter/basic/demo/point-aggregated.js create mode 100644 site/examples/scatter/basic/demo/point-bubble.js create mode 100644 site/examples/scatter/basic/demo/point-dot.js create mode 100644 site/examples/scatter/basic/demo/point-jitter.js create mode 100644 site/examples/scatter/basic/demo/point-label.js create mode 100644 site/examples/scatter/basic/demo/point-log.js create mode 100644 site/examples/scatter/basic/demo/point-one-dimension.js create mode 100644 site/examples/scatter/basic/demo/point-sequential.js create mode 100644 site/examples/scatter/basic/demo/point-shape.js create mode 100644 site/examples/scatter/basic/demo/point-stacked.js create mode 100644 site/examples/scatter/basic/demo/point-strip.js create mode 100644 site/examples/scatter/basic/design.en.md create mode 100644 site/examples/scatter/basic/design.zh.md create mode 100644 site/examples/scatter/basic/index.en.md create mode 100644 site/examples/scatter/basic/index.zh.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index dfa89f9ba..91c999c3c 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -4,5 +4,6 @@ import Column from './column'; import DualAxes from './dual-axes'; import Line from './line'; import Pie from './pie'; +import Scatter from './scatter'; -export { Column, Line, Pie, Area, Bar, DualAxes }; +export { Column, Line, Pie, Area, Bar, DualAxes, Scatter }; diff --git a/packages/plots/src/components/scatter/index.tsx b/packages/plots/src/components/scatter/index.tsx new file mode 100644 index 000000000..d724e9e6f --- /dev/null +++ b/packages/plots/src/components/scatter/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { ScatterOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type ScatterConfig = CommonConfig; + +const ScatterChart = (props: ScatterConfig) => ; + +export default ScatterChart; diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 63dfe93ca..acc862223 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -8,8 +8,9 @@ export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas' * @example * 1. xField: 'year' -> encode: {x: 'year'} * 2. yField: 'scales' -> encode: {y: 'scales'} - * 3. shape: 'smooth' -> style: {shape: 'smooth'} + * 3. shape: 'smooth' -> style: {shape: 'smooth'} shapeField: 'shape' -> encode: { shape: 'shape' } * 4. connectNulls: {connect: true} -> style: {connect: true} + * 5. keyField: 'key' -> encode: { key: 'key' } */ export const TRANSFORM_OPTION_KEY = { encode: { @@ -18,7 +19,9 @@ export const TRANSFORM_OPTION_KEY = { colorField: 'color', angleField: 'y', sizeField: 'size', + shapeField: 'shape', seriesField: 'series', + keyField: 'key', }, transform: { /** diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index a7487430f..316be2178 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -5,6 +5,7 @@ export type { ColumnOptions } from './plots/column'; export type { DualAxesOptions } from './plots/dual-axes'; export type { LineOptions } from './plots/line'; export type { PieOptions } from './plots/pie'; +export type { ScatterOptions } from './plots/scatter'; export * from './types'; import { Area } from './plots/area'; @@ -13,5 +14,7 @@ import { Column } from './plots/column'; import { DualAxes } from './plots/dual-axes'; import { Line } from './plots/line'; import { Pie } from './plots/pie'; +import { Scatter } from './plots/scatter'; + +export const Plots = { Line, Column, Pie, Area, Bar, DualAxes, Scatter }; -export const Plots = { Line, Column, Pie, Area, Bar, DualAxes }; diff --git a/packages/plots/src/core/plots/scatter/adaptor.ts b/packages/plots/src/core/plots/scatter/adaptor.ts new file mode 100644 index 000000000..9b7977c7f --- /dev/null +++ b/packages/plots/src/core/plots/scatter/adaptor.ts @@ -0,0 +1,21 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { ScatterOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/scatter/index.ts b/packages/plots/src/core/plots/scatter/index.ts new file mode 100644 index 000000000..30f98e1fc --- /dev/null +++ b/packages/plots/src/core/plots/scatter/index.ts @@ -0,0 +1,37 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { ScatterOptions } from './type'; + +export type { ScatterOptions }; + +export class Scatter extends Plot { + /** 图表类型 */ + public type = 'scatter'; + + /** + * 获取 散点图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + children: [{ type: 'point' }], + // 默认为 point 有 'line' 的情况 + shape: 'point', + }; + } + + /** + * 获取 散点图 默认配置 + */ + protected getDefaultOptions() { + return Scatter.getDefaultOptions(); + } + + /** + * 散点图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/scatter/type.ts b/packages/plots/src/core/plots/scatter/type.ts new file mode 100644 index 000000000..dbac70985 --- /dev/null +++ b/packages/plots/src/core/plots/scatter/type.ts @@ -0,0 +1,3 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type ScatterOptions = Options & BaseOptions; diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 790966c52..feff67078 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -115,6 +115,14 @@ export default defineConfig({ title: { zh: '双轴图', en: 'DualAxes', + } + }, + { + slug: 'scatter', + icon: 'scatter', + title: { + zh: '散点图', + en: 'Scatter', }, }, ], diff --git a/site/examples/scatter/basic/API.en.md b/site/examples/scatter/basic/API.en.md new file mode 100644 index 000000000..8049f93bf --- /dev/null +++ b/site/examples/scatter/basic/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/scatter/basic/API.zh.md b/site/examples/scatter/basic/API.zh.md new file mode 100644 index 000000000..230e7a912 --- /dev/null +++ b/site/examples/scatter/basic/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/scatter/basic/demo/basic.js b/site/examples/scatter/basic/demo/basic.js new file mode 100644 index 000000000..6710ef43f --- /dev/null +++ b/site/examples/scatter/basic/demo/basic.js @@ -0,0 +1,19 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/basement_prod/6b4aa721-b039-49b9-99d8-540b3f87d339.json", + }, + xField: 'height', + yField: 'weight', + colorField: 'gender', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/scatter/basic/demo/meta.json b/site/examples/scatter/basic/demo/meta.json new file mode 100644 index 000000000..ce121448b --- /dev/null +++ b/site/examples/scatter/basic/demo/meta.json @@ -0,0 +1,103 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [{ + "filename": "basic.js", + "title": { + "zh": "散点图", + "en": "Scatterplot" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*u5aGSoyRDN8AAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "point-one-dimension.js", + "title": { + "zh": "一维散点图", + "en": "One Dimension Scatterplot" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*SCXXQYObM_AAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "point-strip.js", + "title": { + "zh": "带子散点图", + "en": "Strip Plot" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*pCUiTouHSbYAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "point-label.js", + "title": { + "zh": "标签散点图", + "en": "Scatterplot, Labeled" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*m7HITJRLnu8AAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "point-shape.js", + "title": { + "zh": "多形状散点图", + "en": "Multi-Shape Scatterplot" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*eZdTSrbFVdgAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "point-sequential.js", + "title": { + "zh": "渐变色散点图", + "en": "Gradient Scatterplot" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*A1N1SbupvX8AAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "point-jitter.js", + "title": { + "zh": "扰动散点图", + "en": "Jitter Scatterplot" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*0BaMRpu8tN8AAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "point-stacked.js", + "title": { + "zh": "堆叠散点图", + "en": "Stacked Scatterplot" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*f26KS6m_fHgAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "point-bubble.js", + "title": { + "zh": "气泡图", + "en": "Bubble Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*TE7xQLXpdUUAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "point-log.js", + "title": { + "zh": "对数气泡图", + "en": "Log Scatterplot" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*T8Y-T5BlUTgAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "point-aggregated.js", + "title": { + "zh": "聚合气泡图", + "en": "Aggregated Bubble Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*49cUTYAB3HcAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "point-dot.js", + "title": { + "zh": "点图", + "en": "Dot Plot" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*RtalTb-DPdkAAAAAAAAAAAAADmJ7AQ" + } + ] +} diff --git a/site/examples/scatter/basic/demo/point-aggregated.js b/site/examples/scatter/basic/demo/point-aggregated.js new file mode 100644 index 000000000..6923d073e --- /dev/null +++ b/site/examples/scatter/basic/demo/point-aggregated.js @@ -0,0 +1,27 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/commits.json", + }, + style: { mainStroke: "black" }, + xField: (d) => new Date(d.time).getUTCHours(), + yField: (d) => new Date(d.time).getUTCDay(), + sizeField: "count", + colorField: "count", + shape: "point", + transform: [{ type: "group", size: "sum" }, { type: "sortY" }], + meta: { y: { type: "point" } }, + axis: { + x: { title: "time (hours)", tickCount: 24 }, + y: { title: "time (day)", grid: true }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/scatter/basic/demo/point-bubble.js b/site/examples/scatter/basic/demo/point-bubble.js new file mode 100644 index 000000000..1973675b1 --- /dev/null +++ b/site/examples/scatter/basic/demo/point-bubble.js @@ -0,0 +1,36 @@ +import {Scatter} from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + data: { + type: "fetch", + value: "https://gw.alipayobjects.com/os/bmw-prod/2b48887c-56fb-437e-a91c-6f48e80e5a91.csv", + transform: [{ + type: 'filter', + callback: (d) => d.Entity !== 'All natural disasters', + }], + }, + paddingLeft: 150, + paddingTop: 50, + xField: 'Year', + yField: 'Entity', + sizeField: 'Deaths', + colorField: 'Entity', + scale: { + size: { + rangeMax: 35, + }, + }, + legend: false, + style: { + stroke: 'black', + opacity: 0.8, + lineWidth: 1, + } + }; + return ; +}; + +ReactDOM.render( , document.getElementById('container')); diff --git a/site/examples/scatter/basic/demo/point-dot.js b/site/examples/scatter/basic/demo/point-dot.js new file mode 100644 index 000000000..1b9653625 --- /dev/null +++ b/site/examples/scatter/basic/demo/point-dot.js @@ -0,0 +1,36 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/bmw-prod/b6f2ff26-b232-447d-a613-0df5e30104a0.csv", + }, + width: 800, + height: 1200, + autoFit: false, + coordinate: { transform: [{ type: "transpose" }] }, + interaction: { tooltip: { shared: true } }, + xField: 'state', + yField: 'population', + colorField: 'age', + meta: { color: { palette: "spectral" } }, + tooltip: { title: "state", items: ["population"] }, + annotations: [ + { + type: "link", + encode: { x: "state", y: "population" }, + transform: [{ type: "groupX", y: "min", y1: "max" }], + scale: { y: { labelFormatter: ".0%" } }, + style: { stroke: "#000" }, + tooltip: false, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/scatter/basic/demo/point-jitter.js b/site/examples/scatter/basic/demo/point-jitter.js new file mode 100644 index 000000000..63884412d --- /dev/null +++ b/site/examples/scatter/basic/demo/point-jitter.js @@ -0,0 +1,25 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/bmw-prod/2c813e2d-2276-40b9-a9af-cf0a0fb7e942.csv", + }, + transform: [{ type: 'sortX', channel: 'x' },{ type: 'jitterX' }], + xField: 'Cylinders', + yField: 'Horsepower', + colorField: 'Cylinders', + shape: 'hollow', + meta: { + x: { type: 'point' }, + color: { type: 'ordinal' }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/scatter/basic/demo/point-label.js b/site/examples/scatter/basic/demo/point-label.js new file mode 100644 index 000000000..18a9867df --- /dev/null +++ b/site/examples/scatter/basic/demo/point-label.js @@ -0,0 +1,35 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/bmw-prod/474e51c8-b47b-4bb6-b3ed-87813a960df2.csv", + }, + xField: 'mpg', + yField: 'hp', + colorField: 'steelblue', + meta: { + x: { nice: true, domainMax: 38 }, + y: { nice: true }, + }, + label: { + text: 'name', + style: { + stroke: '#fff', + textAnchor: 'start', + textBaseline: 'middle', + dx: 10, + position: 'left', + fontSize: 10, + lineWidth: 2, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/scatter/basic/demo/point-log.js b/site/examples/scatter/basic/demo/point-log.js new file mode 100644 index 000000000..a641e8ee0 --- /dev/null +++ b/site/examples/scatter/basic/demo/point-log.js @@ -0,0 +1,24 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/antvdemo/assets/data/bubble.json", + }, + xField: 'GDP', + yField: 'LifeExpectancy', + sizeField: 'Population', + colorField: 'continent', + meta: { + size: { type: "log", range: [4, 20] }, + }, + style: { fillOpacity: 0.3, lineWidth: 1 }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/scatter/basic/demo/point-one-dimension.js b/site/examples/scatter/basic/demo/point-one-dimension.js new file mode 100644 index 000000000..c192f5e6a --- /dev/null +++ b/site/examples/scatter/basic/demo/point-one-dimension.js @@ -0,0 +1,19 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + height: 120, + autoFit: false, + data: { + type: "fetch", + value: + 'https://gw.alipayobjects.com/os/basement_prod/6b4aa721-b039-49b9-99d8-540b3f87d339.json', + }, + xField: 'height', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/scatter/basic/demo/point-sequential.js b/site/examples/scatter/basic/demo/point-sequential.js new file mode 100644 index 000000000..9152c31ba --- /dev/null +++ b/site/examples/scatter/basic/demo/point-sequential.js @@ -0,0 +1,35 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + paddingLeft: 60, + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/bmw-prod/56b6b137-e04e-4757-8af5-d75bafaef886.csv", + }, + xField: 'date', + yField: 'value', + colorField: 'value', + style: { + stroke: '#000', + strokeOpacity: 0.2, + }, + meta: { + color: { + palette: 'rdBu', + offset: (t) => 1 - t, + }, + }, + tooltip: [ + { channel: 'x', name: 'year', valueFormatter: (d) => d.getFullYear() }, + { channel: 'y' }, + ], + annotations: [{ type: "lineY", data: [0], style: { stroke: "#000", strokeOpacity: 0.2 } }] + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/scatter/basic/demo/point-shape.js b/site/examples/scatter/basic/demo/point-shape.js new file mode 100644 index 000000000..2e29097c9 --- /dev/null +++ b/site/examples/scatter/basic/demo/point-shape.js @@ -0,0 +1,23 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + data: { + type: "fetch", + value: "https://gw.alipayobjects.com/os/bmw-prod/bd73a175-4417-4749-8b88-bc04d955e899.csv", + }, + xField: 'x', + yField: 'y', + colorField: 'category', + sizeField: 5, + shapeField: 'category', + meta: { + shape: { range: ['point', 'plus', 'diamond'] }, + }, + }; + return ; +}; + +ReactDOM.render( , document.getElementById('container')); diff --git a/site/examples/scatter/basic/demo/point-stacked.js b/site/examples/scatter/basic/demo/point-stacked.js new file mode 100644 index 000000000..4a8956766 --- /dev/null +++ b/site/examples/scatter/basic/demo/point-stacked.js @@ -0,0 +1,37 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/bmw-prod/88c601cd-c1ff-4c9b-90d5-740d0b710b7e.json", + }, + height: 360, + autoFit: false, + stack: { + y1: 'y' + }, + xField: (d) => 2021 - d.birth, + yField: (d) => (d.gender === 'M' ? 1 : -1), + colorField: 'gender', + meta: { + x: { nice: true }, + }, + axis: { + y: { + title: "← Women · Men →", + labelFormatter: (d) => `${Math.abs(+d)}`, + }, + x: { title: "Age →" }, + }, + legend: { color: { title: "Gender" } }, + tooltip: { items: [{ channel: "x", name: "age" }] }, + annotations: [{ type: "lineY", data: [0], style: { stroke: "black" } }], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/scatter/basic/demo/point-strip.js b/site/examples/scatter/basic/demo/point-strip.js new file mode 100644 index 000000000..b38cbe8a2 --- /dev/null +++ b/site/examples/scatter/basic/demo/point-strip.js @@ -0,0 +1,29 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + autoFit: false, + height: 300, + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/bmw-prod/2c813e2d-2276-40b9-a9af-cf0a0fb7e942.csv", + }, + transform: [{ type: 'sortX', channel: 'x' }], + coordinate: { transform: [{ type: "transpose" }] }, + xField: 'Cylinders', + yField: 'Horsepower', + sizeField: 20, + meta: { + x: { type: 'point' }, + y: { zero: true }, + color: { type: 'ordinal' }, + }, + shape: 'line', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/scatter/basic/design.en.md b/site/examples/scatter/basic/design.en.md new file mode 100644 index 000000000..e041c7a04 --- /dev/null +++ b/site/examples/scatter/basic/design.en.md @@ -0,0 +1,29 @@ +--- +title: 设计规范 +--- + +## 何时使用 + +柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 + +## 数据类型 + +| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | +| ---------------- | -------------------------------------------------------------------------------------------------- | +| 功能 | 对比分类数据的数值大小 | +| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | +| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | + +## 用法建议 + +design + +## 元素 + +design + +- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 +- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 +- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 +- 标签:用来解释数据点的值。 +- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/scatter/basic/design.zh.md b/site/examples/scatter/basic/design.zh.md new file mode 100644 index 000000000..e041c7a04 --- /dev/null +++ b/site/examples/scatter/basic/design.zh.md @@ -0,0 +1,29 @@ +--- +title: 设计规范 +--- + +## 何时使用 + +柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 + +## 数据类型 + +| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | +| ---------------- | -------------------------------------------------------------------------------------------------- | +| 功能 | 对比分类数据的数值大小 | +| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | +| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | + +## 用法建议 + +design + +## 元素 + +design + +- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 +- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 +- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 +- 标签:用来解释数据点的值。 +- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/scatter/basic/index.en.md b/site/examples/scatter/basic/index.en.md new file mode 100644 index 000000000..20d73ca11 --- /dev/null +++ b/site/examples/scatter/basic/index.en.md @@ -0,0 +1,4 @@ +--- +title: Basic Scatter +order: 4 +--- \ No newline at end of file diff --git a/site/examples/scatter/basic/index.zh.md b/site/examples/scatter/basic/index.zh.md new file mode 100644 index 000000000..91140d8bf --- /dev/null +++ b/site/examples/scatter/basic/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 基础散点图 +order: 4 +--- + +散点图利用点的粒度来分析数据的分布情况. From 45768ef0e7fcba0e6580e318896917bcb40bc9fd Mon Sep 17 00:00:00 2001 From: Ancyloce <103255835+ancyloce@users.noreply.github.com> Date: Sat, 19 Aug 2023 14:10:07 +0800 Subject: [PATCH 017/268] docs: Added an example of pie v2. (#2037) * docs: Added an example of spider label for pie. * docs: Added an example of outer label for pie. * refactor: Updated label and legend properties for basic pie. * docs: Updated meta --- site/examples/pie/basic/demo/basic.js | 11 +++++++ site/examples/pie/basic/demo/meta.json | 16 ++++++++++ site/examples/pie/basic/demo/outer-label.js | 32 +++++++++++++++++++ site/examples/pie/basic/demo/spider-label.js | 33 ++++++++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 site/examples/pie/basic/demo/outer-label.js create mode 100644 site/examples/pie/basic/demo/spider-label.js diff --git a/site/examples/pie/basic/demo/basic.js b/site/examples/pie/basic/demo/basic.js index a8e223928..9910f9457 100644 --- a/site/examples/pie/basic/demo/basic.js +++ b/site/examples/pie/basic/demo/basic.js @@ -14,6 +14,17 @@ const DemoPie = () => { ], angleField: 'value', colorField: 'type', + label: { + text: d => `${d.value}%`, + style: { + fontWeight: 'bold', + } + }, + legend: { + color: { + position: "right" + } + }, }; return ; }; diff --git a/site/examples/pie/basic/demo/meta.json b/site/examples/pie/basic/demo/meta.json index 589aa8c6c..29f452995 100644 --- a/site/examples/pie/basic/demo/meta.json +++ b/site/examples/pie/basic/demo/meta.json @@ -11,6 +11,22 @@ "en": "Basic pie plot" }, "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*wmldRZZj9lIAAAAAAAAAAABkARQnAQ" + }, + { + "filename": "outer-label.js", + "title": { + "zh": "饼图-外部图形标签", + "en": "Pie plot - outer label" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*ZztJQa4RLwoAAAAAAAAAAABkARQnAQ" + }, + { + "filename": "spider-label.js", + "title": { + "zh": "饼图-蜘蛛布局标签", + "en": "Pie plot - spider label" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*QyXPRK-URmUAAAAAAAAAAAAAARQnAQ" } ] } diff --git a/site/examples/pie/basic/demo/outer-label.js b/site/examples/pie/basic/demo/outer-label.js new file mode 100644 index 000000000..1b7f5ed5b --- /dev/null +++ b/site/examples/pie/basic/demo/outer-label.js @@ -0,0 +1,32 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Pie } from '@ant-design/plots'; + +const DemoPie = () => { + const config = { + data: [ + { type: '分类一', value: 27 }, + { type: '分类二', value: 25 }, + { type: '分类三', value: 18 }, + { type: '分类四', value: 15 }, + { type: '分类五', value: 10 }, + { type: '其他', value: 5 }, + ], + appendPadding: 10, + angleField: 'value', + colorField: 'type', + radius: 0.8, + label: { + text: 'value', + position: 'outside', + }, + legend: { + color: { + position: "right" + } + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/pie/basic/demo/spider-label.js b/site/examples/pie/basic/demo/spider-label.js new file mode 100644 index 000000000..11b62d3a9 --- /dev/null +++ b/site/examples/pie/basic/demo/spider-label.js @@ -0,0 +1,33 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Pie } from '@ant-design/plots'; + +const data = [ + { type: '分类一', value: 27 }, + { type: '分类二', value: 25 }, + { type: '分类三', value: 18 }, + { type: '分类四', value: 15 }, + { type: '分类五', value: 10 }, + { type: '其他', value: 5 }, +]; +const DemoPie = () => { + const config = { + data, + appendPadding: 10, + angleField: 'value', + colorField: 'type', + radius: 0.75, + label: { + text: (d) => `${d.type}\n ${d.value}`, + position: 'spider', + }, + legend: { + color: { + position: "right" + } + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 3db26cbf8571e7237abe83fa6feaac9660dbccc5 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 21 Aug 2023 17:33:48 +0800 Subject: [PATCH 018/268] chore: directory adjustment (#2044) * chore: directory adjustment * chore: rename --- site/.dumirc.ts | 54 ++----------------- site/examples/area/basic/index.en.md | 4 -- site/examples/area/basic/index.zh.md | 4 -- site/examples/bar/basic/design.en.md | 29 ---------- site/examples/bar/basic/design.zh.md | 29 ---------- site/examples/bar/basic/index.en.md | 4 -- site/examples/bar/basic/index.zh.md | 6 --- site/examples/column/basic/design.en.md | 29 ---------- site/examples/column/basic/design.zh.md | 29 ---------- site/examples/column/basic/index.en.md | 4 -- site/examples/column/basic/index.zh.md | 6 --- site/examples/dual-axes/basic/index.en.md | 4 -- site/examples/dual-axes/basic/index.zh.md | 6 --- site/examples/line/basic/design.en.md | 29 ---------- site/examples/line/basic/design.zh.md | 29 ---------- site/examples/line/basic/index.en.md | 4 -- site/examples/line/basic/index.zh.md | 6 --- site/examples/pie/basic/design.en.md | 29 ---------- site/examples/pie/basic/design.zh.md | 29 ---------- site/examples/pie/basic/index.en.md | 4 -- site/examples/scatter/basic/design.en.md | 29 ---------- site/examples/scatter/basic/design.zh.md | 29 ---------- site/examples/scatter/basic/index.en.md | 4 -- .../area}/demo/basic-gradients.js | 0 .../area}/demo/basic-slider.js | 0 .../basic => statistics/area}/demo/basic.js | 0 .../basic => statistics/area}/demo/meta.json | 0 .../area}/demo/missing-data-area.js | 0 .../area}/demo/percentage-area.js | 0 .../area}/demo/stacked-area.js | 0 site/examples/statistics/area/index.en.md | 4 ++ site/examples/statistics/area/index.zh.md | 4 ++ .../{bar/basic => statistics/bar}/API.en.md | 0 .../{bar/basic => statistics/bar}/API.zh.md | 0 .../{bar/basic => statistics/bar}/demo/bar.js | 0 .../basic => statistics/bar}/demo/meta.json | 0 .../bar}/demo/normalized-stacked.js | 0 .../basic => statistics/bar}/demo/stacked.js | 0 site/examples/statistics/bar/index.en.md | 4 ++ site/examples/statistics/bar/index.zh.md | 6 +++ .../basic => statistics/column}/API.en.md | 0 .../basic => statistics/column}/API.zh.md | 0 .../column}/demo/bar-dodged.js | 0 .../column}/demo/column-maxwidth.js | 0 .../column}/demo/column.js | 0 .../column}/demo/meta.json | 0 .../basic => statistics/column}/demo/range.js | 0 .../column}/demo/stacked.js | 0 site/examples/statistics/column/index.en.md | 4 ++ .../basic => statistics/column}/index.zh.md | 6 +-- .../basic => statistics/dual-axes}/API.en.md | 0 .../basic => statistics/dual-axes}/API.zh.md | 0 .../dual-axes}/demo/basic.js | 0 .../dual-axes}/demo/meta.json | 0 .../examples/statistics/dual-axes/index.en.md | 4 ++ .../examples/statistics/dual-axes/index.zh.md | 6 +++ .../{line/basic => statistics/line}/API.en.md | 0 .../{line/basic => statistics/line}/API.zh.md | 0 .../basic => statistics/line}/demo/basic.js | 0 .../basic => statistics/line}/demo/color.js | 0 .../line}/demo/connect-nulls.js | 0 .../basic => statistics/line}/demo/meta.json | 0 .../basic => statistics/line}/demo/multi.js | 0 .../line}/demo/normalize.js | 0 .../basic => statistics/line}/demo/series.js | 0 site/examples/statistics/line/index.en.md | 4 ++ site/examples/statistics/line/index.zh.md | 6 +++ .../{pie/basic => statistics/pie}/API.en.md | 0 .../{pie/basic => statistics/pie}/API.zh.md | 0 .../basic => statistics/pie}/demo/basic.js | 0 .../basic => statistics/pie}/demo/meta.json | 0 .../pie}/demo/outer-label.js | 0 .../pie}/demo/spider-label.js | 0 site/examples/statistics/pie/index.en.md | 4 ++ site/examples/statistics/pie/index.zh.md | 6 +++ .../basic => statistics/scatter}/API.en.md | 0 .../basic => statistics/scatter}/API.zh.md | 0 .../scatter}/demo/basic.js | 0 .../scatter}/demo/meta.json | 0 .../scatter}/demo/point-aggregated.js | 0 .../scatter}/demo/point-bubble.js | 0 .../scatter}/demo/point-dot.js | 0 .../scatter}/demo/point-jitter.js | 0 .../scatter}/demo/point-label.js | 0 .../scatter}/demo/point-log.js | 0 .../scatter}/demo/point-one-dimension.js | 0 .../scatter}/demo/point-sequential.js | 0 .../scatter}/demo/point-shape.js | 0 .../scatter}/demo/point-stacked.js | 0 .../scatter}/demo/point-strip.js | 0 site/examples/statistics/scatter/index.en.md | 4 ++ .../basic => statistics/scatter}/index.zh.md | 4 +- 92 files changed, 64 insertions(+), 402 deletions(-) delete mode 100644 site/examples/area/basic/index.en.md delete mode 100644 site/examples/area/basic/index.zh.md delete mode 100644 site/examples/bar/basic/design.en.md delete mode 100644 site/examples/bar/basic/design.zh.md delete mode 100644 site/examples/bar/basic/index.en.md delete mode 100644 site/examples/bar/basic/index.zh.md delete mode 100644 site/examples/column/basic/design.en.md delete mode 100644 site/examples/column/basic/design.zh.md delete mode 100644 site/examples/column/basic/index.en.md delete mode 100644 site/examples/column/basic/index.zh.md delete mode 100644 site/examples/dual-axes/basic/index.en.md delete mode 100644 site/examples/dual-axes/basic/index.zh.md delete mode 100644 site/examples/line/basic/design.en.md delete mode 100644 site/examples/line/basic/design.zh.md delete mode 100644 site/examples/line/basic/index.en.md delete mode 100644 site/examples/line/basic/index.zh.md delete mode 100644 site/examples/pie/basic/design.en.md delete mode 100644 site/examples/pie/basic/design.zh.md delete mode 100644 site/examples/pie/basic/index.en.md delete mode 100644 site/examples/scatter/basic/design.en.md delete mode 100644 site/examples/scatter/basic/design.zh.md delete mode 100644 site/examples/scatter/basic/index.en.md rename site/examples/{area/basic => statistics/area}/demo/basic-gradients.js (100%) rename site/examples/{area/basic => statistics/area}/demo/basic-slider.js (100%) rename site/examples/{area/basic => statistics/area}/demo/basic.js (100%) rename site/examples/{area/basic => statistics/area}/demo/meta.json (100%) rename site/examples/{area/basic => statistics/area}/demo/missing-data-area.js (100%) rename site/examples/{area/basic => statistics/area}/demo/percentage-area.js (100%) rename site/examples/{area/basic => statistics/area}/demo/stacked-area.js (100%) create mode 100644 site/examples/statistics/area/index.en.md create mode 100644 site/examples/statistics/area/index.zh.md rename site/examples/{bar/basic => statistics/bar}/API.en.md (100%) rename site/examples/{bar/basic => statistics/bar}/API.zh.md (100%) rename site/examples/{bar/basic => statistics/bar}/demo/bar.js (100%) rename site/examples/{bar/basic => statistics/bar}/demo/meta.json (100%) rename site/examples/{bar/basic => statistics/bar}/demo/normalized-stacked.js (100%) rename site/examples/{bar/basic => statistics/bar}/demo/stacked.js (100%) create mode 100644 site/examples/statistics/bar/index.en.md create mode 100644 site/examples/statistics/bar/index.zh.md rename site/examples/{column/basic => statistics/column}/API.en.md (100%) rename site/examples/{column/basic => statistics/column}/API.zh.md (100%) rename site/examples/{column/basic => statistics/column}/demo/bar-dodged.js (100%) rename site/examples/{column/basic => statistics/column}/demo/column-maxwidth.js (100%) rename site/examples/{column/basic => statistics/column}/demo/column.js (100%) rename site/examples/{column/basic => statistics/column}/demo/meta.json (100%) rename site/examples/{column/basic => statistics/column}/demo/range.js (100%) rename site/examples/{column/basic => statistics/column}/demo/stacked.js (100%) create mode 100644 site/examples/statistics/column/index.en.md rename site/examples/{pie/basic => statistics/column}/index.zh.md (76%) rename site/examples/{dual-axes/basic => statistics/dual-axes}/API.en.md (100%) rename site/examples/{dual-axes/basic => statistics/dual-axes}/API.zh.md (100%) rename site/examples/{dual-axes/basic => statistics/dual-axes}/demo/basic.js (100%) rename site/examples/{dual-axes/basic => statistics/dual-axes}/demo/meta.json (100%) create mode 100644 site/examples/statistics/dual-axes/index.en.md create mode 100644 site/examples/statistics/dual-axes/index.zh.md rename site/examples/{line/basic => statistics/line}/API.en.md (100%) rename site/examples/{line/basic => statistics/line}/API.zh.md (100%) rename site/examples/{line/basic => statistics/line}/demo/basic.js (100%) rename site/examples/{line/basic => statistics/line}/demo/color.js (100%) rename site/examples/{line/basic => statistics/line}/demo/connect-nulls.js (100%) rename site/examples/{line/basic => statistics/line}/demo/meta.json (100%) rename site/examples/{line/basic => statistics/line}/demo/multi.js (100%) rename site/examples/{line/basic => statistics/line}/demo/normalize.js (100%) rename site/examples/{line/basic => statistics/line}/demo/series.js (100%) create mode 100644 site/examples/statistics/line/index.en.md create mode 100644 site/examples/statistics/line/index.zh.md rename site/examples/{pie/basic => statistics/pie}/API.en.md (100%) rename site/examples/{pie/basic => statistics/pie}/API.zh.md (100%) rename site/examples/{pie/basic => statistics/pie}/demo/basic.js (100%) rename site/examples/{pie/basic => statistics/pie}/demo/meta.json (100%) rename site/examples/{pie/basic => statistics/pie}/demo/outer-label.js (100%) rename site/examples/{pie/basic => statistics/pie}/demo/spider-label.js (100%) create mode 100644 site/examples/statistics/pie/index.en.md create mode 100644 site/examples/statistics/pie/index.zh.md rename site/examples/{scatter/basic => statistics/scatter}/API.en.md (100%) rename site/examples/{scatter/basic => statistics/scatter}/API.zh.md (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/basic.js (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/meta.json (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/point-aggregated.js (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/point-bubble.js (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/point-dot.js (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/point-jitter.js (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/point-label.js (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/point-log.js (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/point-one-dimension.js (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/point-sequential.js (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/point-shape.js (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/point-stacked.js (100%) rename site/examples/{scatter/basic => statistics/scatter}/demo/point-strip.js (100%) create mode 100644 site/examples/statistics/scatter/index.en.md rename site/examples/{scatter/basic => statistics/scatter}/index.zh.md (68%) diff --git a/site/.dumirc.ts b/site/.dumirc.ts index feff67078..861e234de 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -70,59 +70,11 @@ export default defineConfig({ ], examples: [ { - slug: 'column', - icon: 'column', - title: { - zh: '柱形图', - en: 'Column', - }, - }, - { - slug: 'bar', - icon: 'bar', - title: { - zh: '条形图', - en: 'Bar', - }, - }, - { - slug: 'line', + slug: 'statistics', icon: 'line', title: { - zh: '折线图', - en: 'Line', - }, - }, - { - slug: 'pie', - icon: 'pie', - title: { - zh: '饼图', - en: 'Pie', - }, - }, - { - slug: 'area', - icon: 'area', - title: { - zh: '面积图', - en: 'Area', - }, - }, - { - slug: 'dual-axes', - icon: 'other', - title: { - zh: '双轴图', - en: 'DualAxes', - } - }, - { - slug: 'scatter', - icon: 'scatter', - title: { - zh: '散点图', - en: 'Scatter', + zh: '统计图表', + en: 'Statistics', }, }, ], diff --git a/site/examples/area/basic/index.en.md b/site/examples/area/basic/index.en.md deleted file mode 100644 index ce79c401d..000000000 --- a/site/examples/area/basic/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Basic Area -order: 0 ---- \ No newline at end of file diff --git a/site/examples/area/basic/index.zh.md b/site/examples/area/basic/index.zh.md deleted file mode 100644 index 6bf328e49..000000000 --- a/site/examples/area/basic/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 基础面积图 -order: 0 ---- diff --git a/site/examples/bar/basic/design.en.md b/site/examples/bar/basic/design.en.md deleted file mode 100644 index e041c7a04..000000000 --- a/site/examples/bar/basic/design.en.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 设计规范 ---- - -## 何时使用 - -柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 - -## 数据类型 - -| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | -| ---------------- | -------------------------------------------------------------------------------------------------- | -| 功能 | 对比分类数据的数值大小 | -| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | -| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | - -## 用法建议 - -design - -## 元素 - -design - -- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 -- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 -- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 -- 标签:用来解释数据点的值。 -- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/bar/basic/design.zh.md b/site/examples/bar/basic/design.zh.md deleted file mode 100644 index e041c7a04..000000000 --- a/site/examples/bar/basic/design.zh.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 设计规范 ---- - -## 何时使用 - -柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 - -## 数据类型 - -| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | -| ---------------- | -------------------------------------------------------------------------------------------------- | -| 功能 | 对比分类数据的数值大小 | -| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | -| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | - -## 用法建议 - -design - -## 元素 - -design - -- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 -- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 -- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 -- 标签:用来解释数据点的值。 -- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/bar/basic/index.en.md b/site/examples/bar/basic/index.en.md deleted file mode 100644 index 60de1c597..000000000 --- a/site/examples/bar/basic/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Basic Bar -order: 0 ---- \ No newline at end of file diff --git a/site/examples/bar/basic/index.zh.md b/site/examples/bar/basic/index.zh.md deleted file mode 100644 index 94ce48510..000000000 --- a/site/examples/bar/basic/index.zh.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 基础条形图 -order: 0 ---- - -柱状图用于描述分类数据之间的对比,如果我们把时间周期,如周、月、年,也理解为一种分类数据 (time category),那么柱状图也可以用于描述时间周期之间的数值比较。 diff --git a/site/examples/column/basic/design.en.md b/site/examples/column/basic/design.en.md deleted file mode 100644 index e041c7a04..000000000 --- a/site/examples/column/basic/design.en.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 设计规范 ---- - -## 何时使用 - -柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 - -## 数据类型 - -| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | -| ---------------- | -------------------------------------------------------------------------------------------------- | -| 功能 | 对比分类数据的数值大小 | -| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | -| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | - -## 用法建议 - -design - -## 元素 - -design - -- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 -- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 -- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 -- 标签:用来解释数据点的值。 -- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/column/basic/design.zh.md b/site/examples/column/basic/design.zh.md deleted file mode 100644 index e041c7a04..000000000 --- a/site/examples/column/basic/design.zh.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 设计规范 ---- - -## 何时使用 - -柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 - -## 数据类型 - -| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | -| ---------------- | -------------------------------------------------------------------------------------------------- | -| 功能 | 对比分类数据的数值大小 | -| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | -| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | - -## 用法建议 - -design - -## 元素 - -design - -- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 -- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 -- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 -- 标签:用来解释数据点的值。 -- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/column/basic/index.en.md b/site/examples/column/basic/index.en.md deleted file mode 100644 index de81817c4..000000000 --- a/site/examples/column/basic/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Basic Column -order: 0 ---- \ No newline at end of file diff --git a/site/examples/column/basic/index.zh.md b/site/examples/column/basic/index.zh.md deleted file mode 100644 index 946147515..000000000 --- a/site/examples/column/basic/index.zh.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 基础柱状图 -order: 0 ---- - -柱状图用于描述分类数据之间的对比,如果我们把时间周期,如周、月、年,也理解为一种分类数据 (time category),那么柱状图也可以用于描述时间周期之间的数值比较。 diff --git a/site/examples/dual-axes/basic/index.en.md b/site/examples/dual-axes/basic/index.en.md deleted file mode 100644 index 4d98f299b..000000000 --- a/site/examples/dual-axes/basic/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Basic DualAxes -order: 0 ---- \ No newline at end of file diff --git a/site/examples/dual-axes/basic/index.zh.md b/site/examples/dual-axes/basic/index.zh.md deleted file mode 100644 index 3978cd779..000000000 --- a/site/examples/dual-axes/basic/index.zh.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 基础双轴图 -order: 0 ---- - -柱状图用于描述分类数据之间的对比,如果我们把时间周期,如周、月、年,也理解为一种分类数据 (time category),那么柱状图也可以用于描述时间周期之间的数值比较。 diff --git a/site/examples/line/basic/design.en.md b/site/examples/line/basic/design.en.md deleted file mode 100644 index e041c7a04..000000000 --- a/site/examples/line/basic/design.en.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 设计规范 ---- - -## 何时使用 - -柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 - -## 数据类型 - -| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | -| ---------------- | -------------------------------------------------------------------------------------------------- | -| 功能 | 对比分类数据的数值大小 | -| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | -| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | - -## 用法建议 - -design - -## 元素 - -design - -- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 -- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 -- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 -- 标签:用来解释数据点的值。 -- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/line/basic/design.zh.md b/site/examples/line/basic/design.zh.md deleted file mode 100644 index e041c7a04..000000000 --- a/site/examples/line/basic/design.zh.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 设计规范 ---- - -## 何时使用 - -柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 - -## 数据类型 - -| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | -| ---------------- | -------------------------------------------------------------------------------------------------- | -| 功能 | 对比分类数据的数值大小 | -| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | -| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | - -## 用法建议 - -design - -## 元素 - -design - -- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 -- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 -- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 -- 标签:用来解释数据点的值。 -- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/line/basic/index.en.md b/site/examples/line/basic/index.en.md deleted file mode 100644 index 150a6da40..000000000 --- a/site/examples/line/basic/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Basic line -order: 0 ---- \ No newline at end of file diff --git a/site/examples/line/basic/index.zh.md b/site/examples/line/basic/index.zh.md deleted file mode 100644 index 273a184ec..000000000 --- a/site/examples/line/basic/index.zh.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 基础折线图 -order: 0 ---- - -柱状图用于描述分类数据之间的对比,如果我们把时间周期,如周、月、年,也理解为一种分类数据 (time category),那么柱状图也可以用于描述时间周期之间的数值比较。 diff --git a/site/examples/pie/basic/design.en.md b/site/examples/pie/basic/design.en.md deleted file mode 100644 index e041c7a04..000000000 --- a/site/examples/pie/basic/design.en.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 设计规范 ---- - -## 何时使用 - -柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 - -## 数据类型 - -| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | -| ---------------- | -------------------------------------------------------------------------------------------------- | -| 功能 | 对比分类数据的数值大小 | -| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | -| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | - -## 用法建议 - -design - -## 元素 - -design - -- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 -- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 -- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 -- 标签:用来解释数据点的值。 -- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/pie/basic/design.zh.md b/site/examples/pie/basic/design.zh.md deleted file mode 100644 index e041c7a04..000000000 --- a/site/examples/pie/basic/design.zh.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 设计规范 ---- - -## 何时使用 - -柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 - -## 数据类型 - -| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | -| ---------------- | -------------------------------------------------------------------------------------------------- | -| 功能 | 对比分类数据的数值大小 | -| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | -| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | - -## 用法建议 - -design - -## 元素 - -design - -- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 -- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 -- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 -- 标签:用来解释数据点的值。 -- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/pie/basic/index.en.md b/site/examples/pie/basic/index.en.md deleted file mode 100644 index fdd33a6e6..000000000 --- a/site/examples/pie/basic/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Basic Pie -order: 0 ---- \ No newline at end of file diff --git a/site/examples/scatter/basic/design.en.md b/site/examples/scatter/basic/design.en.md deleted file mode 100644 index e041c7a04..000000000 --- a/site/examples/scatter/basic/design.en.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 设计规范 ---- - -## 何时使用 - -柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 - -## 数据类型 - -| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | -| ---------------- | -------------------------------------------------------------------------------------------------- | -| 功能 | 对比分类数据的数值大小 | -| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | -| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | - -## 用法建议 - -design - -## 元素 - -design - -- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 -- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 -- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 -- 标签:用来解释数据点的值。 -- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/scatter/basic/design.zh.md b/site/examples/scatter/basic/design.zh.md deleted file mode 100644 index e041c7a04..000000000 --- a/site/examples/scatter/basic/design.zh.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 设计规范 ---- - -## 何时使用 - -柱状图通过垂直柱子长短对比数值大小,适用于对比一组或者多组分类数据。 - -## 数据类型 - -| 适合的数据 | 「一组或多组分类数据」+「一组或者多组对应的数值」 | -| ---------------- | -------------------------------------------------------------------------------------------------- | -| 功能 | 对比分类数据的数值大小 | -| 数据与图形的映射 | 分类数据字段映射到横轴的位置,连续数据字段映射到矩形的高度,分类数据也可以设置颜色增强分类的区分度 | -| 适合的数据条数 | 分类数据不宜过多,不建议超过 20 条,如有多组分类数据,不建议超过 10 组 | - -## 用法建议 - -design - -## 元素 - -design - -- X 轴:通常对应分类数据,值为文本,调用连续数据 X 轴。 -- Y 轴:通常对应连续数据,值为数字,调用连续数据 Y 轴。 -- 图例:通常出现在分组柱关图、分组条形图中,用来区分不同柱子代表的数据含义。 -- 标签:用来解释数据点的值。 -- 辅助元素:用来解释某个特殊的数据点的值,或标记出某个特殊含义的区域。 diff --git a/site/examples/scatter/basic/index.en.md b/site/examples/scatter/basic/index.en.md deleted file mode 100644 index 20d73ca11..000000000 --- a/site/examples/scatter/basic/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Basic Scatter -order: 4 ---- \ No newline at end of file diff --git a/site/examples/area/basic/demo/basic-gradients.js b/site/examples/statistics/area/demo/basic-gradients.js similarity index 100% rename from site/examples/area/basic/demo/basic-gradients.js rename to site/examples/statistics/area/demo/basic-gradients.js diff --git a/site/examples/area/basic/demo/basic-slider.js b/site/examples/statistics/area/demo/basic-slider.js similarity index 100% rename from site/examples/area/basic/demo/basic-slider.js rename to site/examples/statistics/area/demo/basic-slider.js diff --git a/site/examples/area/basic/demo/basic.js b/site/examples/statistics/area/demo/basic.js similarity index 100% rename from site/examples/area/basic/demo/basic.js rename to site/examples/statistics/area/demo/basic.js diff --git a/site/examples/area/basic/demo/meta.json b/site/examples/statistics/area/demo/meta.json similarity index 100% rename from site/examples/area/basic/demo/meta.json rename to site/examples/statistics/area/demo/meta.json diff --git a/site/examples/area/basic/demo/missing-data-area.js b/site/examples/statistics/area/demo/missing-data-area.js similarity index 100% rename from site/examples/area/basic/demo/missing-data-area.js rename to site/examples/statistics/area/demo/missing-data-area.js diff --git a/site/examples/area/basic/demo/percentage-area.js b/site/examples/statistics/area/demo/percentage-area.js similarity index 100% rename from site/examples/area/basic/demo/percentage-area.js rename to site/examples/statistics/area/demo/percentage-area.js diff --git a/site/examples/area/basic/demo/stacked-area.js b/site/examples/statistics/area/demo/stacked-area.js similarity index 100% rename from site/examples/area/basic/demo/stacked-area.js rename to site/examples/statistics/area/demo/stacked-area.js diff --git a/site/examples/statistics/area/index.en.md b/site/examples/statistics/area/index.en.md new file mode 100644 index 000000000..120f70425 --- /dev/null +++ b/site/examples/statistics/area/index.en.md @@ -0,0 +1,4 @@ +--- +title: Area +order: 1 +--- \ No newline at end of file diff --git a/site/examples/statistics/area/index.zh.md b/site/examples/statistics/area/index.zh.md new file mode 100644 index 000000000..b63642903 --- /dev/null +++ b/site/examples/statistics/area/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 面积图 +order: 1 +--- diff --git a/site/examples/bar/basic/API.en.md b/site/examples/statistics/bar/API.en.md similarity index 100% rename from site/examples/bar/basic/API.en.md rename to site/examples/statistics/bar/API.en.md diff --git a/site/examples/bar/basic/API.zh.md b/site/examples/statistics/bar/API.zh.md similarity index 100% rename from site/examples/bar/basic/API.zh.md rename to site/examples/statistics/bar/API.zh.md diff --git a/site/examples/bar/basic/demo/bar.js b/site/examples/statistics/bar/demo/bar.js similarity index 100% rename from site/examples/bar/basic/demo/bar.js rename to site/examples/statistics/bar/demo/bar.js diff --git a/site/examples/bar/basic/demo/meta.json b/site/examples/statistics/bar/demo/meta.json similarity index 100% rename from site/examples/bar/basic/demo/meta.json rename to site/examples/statistics/bar/demo/meta.json diff --git a/site/examples/bar/basic/demo/normalized-stacked.js b/site/examples/statistics/bar/demo/normalized-stacked.js similarity index 100% rename from site/examples/bar/basic/demo/normalized-stacked.js rename to site/examples/statistics/bar/demo/normalized-stacked.js diff --git a/site/examples/bar/basic/demo/stacked.js b/site/examples/statistics/bar/demo/stacked.js similarity index 100% rename from site/examples/bar/basic/demo/stacked.js rename to site/examples/statistics/bar/demo/stacked.js diff --git a/site/examples/statistics/bar/index.en.md b/site/examples/statistics/bar/index.en.md new file mode 100644 index 000000000..0e975f918 --- /dev/null +++ b/site/examples/statistics/bar/index.en.md @@ -0,0 +1,4 @@ +--- +title: Bar +order: 1 +--- \ No newline at end of file diff --git a/site/examples/statistics/bar/index.zh.md b/site/examples/statistics/bar/index.zh.md new file mode 100644 index 000000000..a3a0a685b --- /dev/null +++ b/site/examples/statistics/bar/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 条形图 +order: 1 +--- + + diff --git a/site/examples/column/basic/API.en.md b/site/examples/statistics/column/API.en.md similarity index 100% rename from site/examples/column/basic/API.en.md rename to site/examples/statistics/column/API.en.md diff --git a/site/examples/column/basic/API.zh.md b/site/examples/statistics/column/API.zh.md similarity index 100% rename from site/examples/column/basic/API.zh.md rename to site/examples/statistics/column/API.zh.md diff --git a/site/examples/column/basic/demo/bar-dodged.js b/site/examples/statistics/column/demo/bar-dodged.js similarity index 100% rename from site/examples/column/basic/demo/bar-dodged.js rename to site/examples/statistics/column/demo/bar-dodged.js diff --git a/site/examples/column/basic/demo/column-maxwidth.js b/site/examples/statistics/column/demo/column-maxwidth.js similarity index 100% rename from site/examples/column/basic/demo/column-maxwidth.js rename to site/examples/statistics/column/demo/column-maxwidth.js diff --git a/site/examples/column/basic/demo/column.js b/site/examples/statistics/column/demo/column.js similarity index 100% rename from site/examples/column/basic/demo/column.js rename to site/examples/statistics/column/demo/column.js diff --git a/site/examples/column/basic/demo/meta.json b/site/examples/statistics/column/demo/meta.json similarity index 100% rename from site/examples/column/basic/demo/meta.json rename to site/examples/statistics/column/demo/meta.json diff --git a/site/examples/column/basic/demo/range.js b/site/examples/statistics/column/demo/range.js similarity index 100% rename from site/examples/column/basic/demo/range.js rename to site/examples/statistics/column/demo/range.js diff --git a/site/examples/column/basic/demo/stacked.js b/site/examples/statistics/column/demo/stacked.js similarity index 100% rename from site/examples/column/basic/demo/stacked.js rename to site/examples/statistics/column/demo/stacked.js diff --git a/site/examples/statistics/column/index.en.md b/site/examples/statistics/column/index.en.md new file mode 100644 index 000000000..f8ad6a3b5 --- /dev/null +++ b/site/examples/statistics/column/index.en.md @@ -0,0 +1,4 @@ +--- +title: Column +order: 1 +--- \ No newline at end of file diff --git a/site/examples/pie/basic/index.zh.md b/site/examples/statistics/column/index.zh.md similarity index 76% rename from site/examples/pie/basic/index.zh.md rename to site/examples/statistics/column/index.zh.md index fccb7b6ee..7a5eb1d8e 100644 --- a/site/examples/pie/basic/index.zh.md +++ b/site/examples/statistics/column/index.zh.md @@ -1,6 +1,6 @@ --- -title: 基础饼图 -order: 0 +title: 柱状图 +order: 1 --- -柱状图用于描述分类数据之间的对比,如果我们把时间周期,如周、月、年,也理解为一种分类数据 (time category),那么柱状图也可以用于描述时间周期之间的数值比较。 +柱状图用于描述分类数据之间的对比,如果我们把时间周期,如周、月、年,也理解为一种分类数据 (time category),那么柱状图也可以用于描述时间周期之间的数值比较。 \ No newline at end of file diff --git a/site/examples/dual-axes/basic/API.en.md b/site/examples/statistics/dual-axes/API.en.md similarity index 100% rename from site/examples/dual-axes/basic/API.en.md rename to site/examples/statistics/dual-axes/API.en.md diff --git a/site/examples/dual-axes/basic/API.zh.md b/site/examples/statistics/dual-axes/API.zh.md similarity index 100% rename from site/examples/dual-axes/basic/API.zh.md rename to site/examples/statistics/dual-axes/API.zh.md diff --git a/site/examples/dual-axes/basic/demo/basic.js b/site/examples/statistics/dual-axes/demo/basic.js similarity index 100% rename from site/examples/dual-axes/basic/demo/basic.js rename to site/examples/statistics/dual-axes/demo/basic.js diff --git a/site/examples/dual-axes/basic/demo/meta.json b/site/examples/statistics/dual-axes/demo/meta.json similarity index 100% rename from site/examples/dual-axes/basic/demo/meta.json rename to site/examples/statistics/dual-axes/demo/meta.json diff --git a/site/examples/statistics/dual-axes/index.en.md b/site/examples/statistics/dual-axes/index.en.md new file mode 100644 index 000000000..52dde4ca2 --- /dev/null +++ b/site/examples/statistics/dual-axes/index.en.md @@ -0,0 +1,4 @@ +--- +title: DualAxes +order: 2 +--- \ No newline at end of file diff --git a/site/examples/statistics/dual-axes/index.zh.md b/site/examples/statistics/dual-axes/index.zh.md new file mode 100644 index 000000000..293931348 --- /dev/null +++ b/site/examples/statistics/dual-axes/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 双轴图 +order: 2 +--- + + diff --git a/site/examples/line/basic/API.en.md b/site/examples/statistics/line/API.en.md similarity index 100% rename from site/examples/line/basic/API.en.md rename to site/examples/statistics/line/API.en.md diff --git a/site/examples/line/basic/API.zh.md b/site/examples/statistics/line/API.zh.md similarity index 100% rename from site/examples/line/basic/API.zh.md rename to site/examples/statistics/line/API.zh.md diff --git a/site/examples/line/basic/demo/basic.js b/site/examples/statistics/line/demo/basic.js similarity index 100% rename from site/examples/line/basic/demo/basic.js rename to site/examples/statistics/line/demo/basic.js diff --git a/site/examples/line/basic/demo/color.js b/site/examples/statistics/line/demo/color.js similarity index 100% rename from site/examples/line/basic/demo/color.js rename to site/examples/statistics/line/demo/color.js diff --git a/site/examples/line/basic/demo/connect-nulls.js b/site/examples/statistics/line/demo/connect-nulls.js similarity index 100% rename from site/examples/line/basic/demo/connect-nulls.js rename to site/examples/statistics/line/demo/connect-nulls.js diff --git a/site/examples/line/basic/demo/meta.json b/site/examples/statistics/line/demo/meta.json similarity index 100% rename from site/examples/line/basic/demo/meta.json rename to site/examples/statistics/line/demo/meta.json diff --git a/site/examples/line/basic/demo/multi.js b/site/examples/statistics/line/demo/multi.js similarity index 100% rename from site/examples/line/basic/demo/multi.js rename to site/examples/statistics/line/demo/multi.js diff --git a/site/examples/line/basic/demo/normalize.js b/site/examples/statistics/line/demo/normalize.js similarity index 100% rename from site/examples/line/basic/demo/normalize.js rename to site/examples/statistics/line/demo/normalize.js diff --git a/site/examples/line/basic/demo/series.js b/site/examples/statistics/line/demo/series.js similarity index 100% rename from site/examples/line/basic/demo/series.js rename to site/examples/statistics/line/demo/series.js diff --git a/site/examples/statistics/line/index.en.md b/site/examples/statistics/line/index.en.md new file mode 100644 index 000000000..e92d9748d --- /dev/null +++ b/site/examples/statistics/line/index.en.md @@ -0,0 +1,4 @@ +--- +title: Line +order: 0 +--- \ No newline at end of file diff --git a/site/examples/statistics/line/index.zh.md b/site/examples/statistics/line/index.zh.md new file mode 100644 index 000000000..cb20f682d --- /dev/null +++ b/site/examples/statistics/line/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 折线图 +order: 0 +--- + + diff --git a/site/examples/pie/basic/API.en.md b/site/examples/statistics/pie/API.en.md similarity index 100% rename from site/examples/pie/basic/API.en.md rename to site/examples/statistics/pie/API.en.md diff --git a/site/examples/pie/basic/API.zh.md b/site/examples/statistics/pie/API.zh.md similarity index 100% rename from site/examples/pie/basic/API.zh.md rename to site/examples/statistics/pie/API.zh.md diff --git a/site/examples/pie/basic/demo/basic.js b/site/examples/statistics/pie/demo/basic.js similarity index 100% rename from site/examples/pie/basic/demo/basic.js rename to site/examples/statistics/pie/demo/basic.js diff --git a/site/examples/pie/basic/demo/meta.json b/site/examples/statistics/pie/demo/meta.json similarity index 100% rename from site/examples/pie/basic/demo/meta.json rename to site/examples/statistics/pie/demo/meta.json diff --git a/site/examples/pie/basic/demo/outer-label.js b/site/examples/statistics/pie/demo/outer-label.js similarity index 100% rename from site/examples/pie/basic/demo/outer-label.js rename to site/examples/statistics/pie/demo/outer-label.js diff --git a/site/examples/pie/basic/demo/spider-label.js b/site/examples/statistics/pie/demo/spider-label.js similarity index 100% rename from site/examples/pie/basic/demo/spider-label.js rename to site/examples/statistics/pie/demo/spider-label.js diff --git a/site/examples/statistics/pie/index.en.md b/site/examples/statistics/pie/index.en.md new file mode 100644 index 000000000..10ce89471 --- /dev/null +++ b/site/examples/statistics/pie/index.en.md @@ -0,0 +1,4 @@ +--- +title: Pie +order: 1 +--- \ No newline at end of file diff --git a/site/examples/statistics/pie/index.zh.md b/site/examples/statistics/pie/index.zh.md new file mode 100644 index 000000000..5538057b0 --- /dev/null +++ b/site/examples/statistics/pie/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 饼图 +order: 1 +--- + + diff --git a/site/examples/scatter/basic/API.en.md b/site/examples/statistics/scatter/API.en.md similarity index 100% rename from site/examples/scatter/basic/API.en.md rename to site/examples/statistics/scatter/API.en.md diff --git a/site/examples/scatter/basic/API.zh.md b/site/examples/statistics/scatter/API.zh.md similarity index 100% rename from site/examples/scatter/basic/API.zh.md rename to site/examples/statistics/scatter/API.zh.md diff --git a/site/examples/scatter/basic/demo/basic.js b/site/examples/statistics/scatter/demo/basic.js similarity index 100% rename from site/examples/scatter/basic/demo/basic.js rename to site/examples/statistics/scatter/demo/basic.js diff --git a/site/examples/scatter/basic/demo/meta.json b/site/examples/statistics/scatter/demo/meta.json similarity index 100% rename from site/examples/scatter/basic/demo/meta.json rename to site/examples/statistics/scatter/demo/meta.json diff --git a/site/examples/scatter/basic/demo/point-aggregated.js b/site/examples/statistics/scatter/demo/point-aggregated.js similarity index 100% rename from site/examples/scatter/basic/demo/point-aggregated.js rename to site/examples/statistics/scatter/demo/point-aggregated.js diff --git a/site/examples/scatter/basic/demo/point-bubble.js b/site/examples/statistics/scatter/demo/point-bubble.js similarity index 100% rename from site/examples/scatter/basic/demo/point-bubble.js rename to site/examples/statistics/scatter/demo/point-bubble.js diff --git a/site/examples/scatter/basic/demo/point-dot.js b/site/examples/statistics/scatter/demo/point-dot.js similarity index 100% rename from site/examples/scatter/basic/demo/point-dot.js rename to site/examples/statistics/scatter/demo/point-dot.js diff --git a/site/examples/scatter/basic/demo/point-jitter.js b/site/examples/statistics/scatter/demo/point-jitter.js similarity index 100% rename from site/examples/scatter/basic/demo/point-jitter.js rename to site/examples/statistics/scatter/demo/point-jitter.js diff --git a/site/examples/scatter/basic/demo/point-label.js b/site/examples/statistics/scatter/demo/point-label.js similarity index 100% rename from site/examples/scatter/basic/demo/point-label.js rename to site/examples/statistics/scatter/demo/point-label.js diff --git a/site/examples/scatter/basic/demo/point-log.js b/site/examples/statistics/scatter/demo/point-log.js similarity index 100% rename from site/examples/scatter/basic/demo/point-log.js rename to site/examples/statistics/scatter/demo/point-log.js diff --git a/site/examples/scatter/basic/demo/point-one-dimension.js b/site/examples/statistics/scatter/demo/point-one-dimension.js similarity index 100% rename from site/examples/scatter/basic/demo/point-one-dimension.js rename to site/examples/statistics/scatter/demo/point-one-dimension.js diff --git a/site/examples/scatter/basic/demo/point-sequential.js b/site/examples/statistics/scatter/demo/point-sequential.js similarity index 100% rename from site/examples/scatter/basic/demo/point-sequential.js rename to site/examples/statistics/scatter/demo/point-sequential.js diff --git a/site/examples/scatter/basic/demo/point-shape.js b/site/examples/statistics/scatter/demo/point-shape.js similarity index 100% rename from site/examples/scatter/basic/demo/point-shape.js rename to site/examples/statistics/scatter/demo/point-shape.js diff --git a/site/examples/scatter/basic/demo/point-stacked.js b/site/examples/statistics/scatter/demo/point-stacked.js similarity index 100% rename from site/examples/scatter/basic/demo/point-stacked.js rename to site/examples/statistics/scatter/demo/point-stacked.js diff --git a/site/examples/scatter/basic/demo/point-strip.js b/site/examples/statistics/scatter/demo/point-strip.js similarity index 100% rename from site/examples/scatter/basic/demo/point-strip.js rename to site/examples/statistics/scatter/demo/point-strip.js diff --git a/site/examples/statistics/scatter/index.en.md b/site/examples/statistics/scatter/index.en.md new file mode 100644 index 000000000..652631277 --- /dev/null +++ b/site/examples/statistics/scatter/index.en.md @@ -0,0 +1,4 @@ +--- +title: Scatter +order: 1 +--- \ No newline at end of file diff --git a/site/examples/scatter/basic/index.zh.md b/site/examples/statistics/scatter/index.zh.md similarity index 68% rename from site/examples/scatter/basic/index.zh.md rename to site/examples/statistics/scatter/index.zh.md index 91140d8bf..e18a7d4ee 100644 --- a/site/examples/scatter/basic/index.zh.md +++ b/site/examples/statistics/scatter/index.zh.md @@ -1,6 +1,6 @@ --- -title: 基础散点图 -order: 4 +title: 散点图 +order: 1 --- 散点图利用点的粒度来分析数据的分布情况. From e237dac1d3fb3e51b48727d37690db114bfa79e9 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 22 Aug 2023 15:30:22 +0800 Subject: [PATCH 019/268] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=20Area=20?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=20(#2049)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plots/src/core/constants/index.ts | 93 ++++++++++++------ .../plots/src/core/utils/get-custom-keys.ts | 5 +- .../src/core/utils/get-shape-config-keys.ts | 9 ++ packages/plots/src/core/utils/index.ts | 3 +- packages/plots/src/core/utils/transform.ts | 95 ++++++++++++------- .../statistics/area/demo/area-difference.js | 38 ++++++++ .../statistics/area/demo/area-gradient.js | 30 ++++++ .../statistics/area/demo/cascade-area.js | 39 ++++++++ site/examples/statistics/area/demo/meta.json | 56 +++++++++++ .../statistics/area/demo/orderly-area.js | 29 ++++++ .../statistics/area/demo/range-spline-area.js | 47 +++++++++ .../statistics/area/demo/step-area.js | 45 +++++++++ .../statistics/area/demo/streamgraph.js | 20 ++++ 13 files changed, 443 insertions(+), 66 deletions(-) create mode 100644 packages/plots/src/core/utils/get-shape-config-keys.ts create mode 100644 site/examples/statistics/area/demo/area-difference.js create mode 100644 site/examples/statistics/area/demo/area-gradient.js create mode 100644 site/examples/statistics/area/demo/cascade-area.js create mode 100644 site/examples/statistics/area/demo/orderly-area.js create mode 100644 site/examples/statistics/area/demo/range-spline-area.js create mode 100644 site/examples/statistics/area/demo/step-area.js create mode 100644 site/examples/statistics/area/demo/streamgraph.js diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index acc862223..e3ceaf7ac 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -12,6 +12,15 @@ export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas' * 4. connectNulls: {connect: true} -> style: {connect: true} * 5. keyField: 'key' -> encode: { key: 'key' } */ +const commonCallback = (type: string, value: boolean | object) => { + if (isBoolean(value)) { + return { + type, + available: value, + }; + } + return { type, ...(value as object) }; +}; export const TRANSFORM_OPTION_KEY = { encode: { xField: 'x', @@ -30,13 +39,7 @@ export const TRANSFORM_OPTION_KEY = { * 1. stack: true -> transform: [{type: 'stackY'}] */ stack: (value: boolean | object) => { - if (isBoolean(value)) { - return { - type: 'stackY', - available: value, - }; - } - return { type: 'stackY', ...(value as object) }; + return commonCallback('stackY', value); }, /** * @title 归一化 @@ -44,13 +47,7 @@ export const TRANSFORM_OPTION_KEY = { * 1. normalize: true -> transform: [{type: 'normalizeY'}] */ normalize: (value: boolean | object) => { - if (isBoolean(value)) { - return { - type: 'normalizeY', - available: value, - }; - } - return { type: 'normalizeY', ...(value as object) }; + return commonCallback('normalizeY', value); }, /** * @title 分组 @@ -58,13 +55,7 @@ export const TRANSFORM_OPTION_KEY = { * 1. group: true -> transform: [{type: 'dodgeX'}] */ group: (value: boolean | object) => { - if (isBoolean(value)) { - return { - type: 'dodgeX', - available: value, - }; - } - return { type: 'dodgeX', ...(value as object) }; + return commonCallback('dodgeX', value); }, /** * @title 排序 @@ -72,13 +63,23 @@ export const TRANSFORM_OPTION_KEY = { * 1. sort: true -> transform: [{type: 'sortX'}] */ sort: (value: boolean | object) => { - if (isBoolean(value)) { - return { - type: 'sortX', - available: value, - }; - } - return { type: 'sortX', ...(value as object) }; + return commonCallback('sortX', value); + }, + /** + * @title 对称 + * @example + * 1. symmetry: true -> transform: [{type: 'symmetryY'}] + */ + symmetry: (value: boolean | object) => { + return commonCallback('symmetryY', value); + }, + /** + * @title 对 y 和 y1 通道求差集 + * @example + * 1. diff: true -> transform: [{type: 'diffY'}] + */ + diff: (value: boolean | object) => { + return commonCallback('diffY', value); }, }, scale: { @@ -114,11 +115,43 @@ export const TRANSFORM_OPTION_KEY = { }; /** - * @title 将 CHILDREN_SHAPE 中的配置项, 转换为 children + * @title 将 CONFIG_SHAPE 中的配置项, 转换为 children * @example * 1. annotations: [{type: 'text'}] -> children: [{type: 'text'}] + * 2. lineConfig: {shape: 'hvh'}-> children: [{type: 'line', style: { shape: 'hvh'}}] */ -export const CHILDREN_SHAPE = ['annotations']; +const EXTEND_KEYS = ['xField', 'yField', 'seriesField', 'colorField', 'sizeField', 'shapeField', 'keyField']; +export const CONFIG_SHAPE = [ + { + key: 'annotations', + extend_keys: [], + }, + { + key: 'lineConfig', + type: 'line', + extend_keys: EXTEND_KEYS, + }, + { + key: 'pointConfig', + type: 'point', + extend_keys: EXTEND_KEYS, + }, + { + key: 'areaConfig', + type: 'area', + extend_keys: EXTEND_KEYS, + }, + { + key: 'intervalConfig', + type: 'interval', + extend_keys: EXTEND_KEYS, + }, + { + key: 'polygonConfig', + type: 'polygon', + extend_keys: EXTEND_KEYS, + }, +]; /** * @description 一些特殊的配置项,需要自定义转换逻辑 diff --git a/packages/plots/src/core/utils/get-custom-keys.ts b/packages/plots/src/core/utils/get-custom-keys.ts index ba6fb2442..7297d35ac 100644 --- a/packages/plots/src/core/utils/get-custom-keys.ts +++ b/packages/plots/src/core/utils/get-custom-keys.ts @@ -1,9 +1,12 @@ -import { TRANSFORM_OPTION_KEY } from '../constants'; +import { TRANSFORM_OPTION_KEY, CONFIG_SHAPE } from '../constants'; export const getCustomKeys = () => { const customKeys = []; Object.keys(TRANSFORM_OPTION_KEY).forEach((key) => { customKeys.push(...Object.keys(TRANSFORM_OPTION_KEY[key])); }); + Object.keys(CONFIG_SHAPE).forEach((key) => { + customKeys.push(key); + }); return customKeys; }; diff --git a/packages/plots/src/core/utils/get-shape-config-keys.ts b/packages/plots/src/core/utils/get-shape-config-keys.ts new file mode 100644 index 000000000..10c9b6641 --- /dev/null +++ b/packages/plots/src/core/utils/get-shape-config-keys.ts @@ -0,0 +1,9 @@ +import { CONFIG_SHAPE } from '../constants'; + +export const getShapeConfigKeys = () => { + const configKeys = []; + CONFIG_SHAPE.forEach((item) => { + configKeys.push(item.key); + }); + return configKeys; +}; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 3182478f5..53cbf37f6 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -1,4 +1,5 @@ -export { flatten, flow, isArray, isBoolean, merge, omit, pick } from 'lodash-es'; +export { flatten, flow, isArray, isBoolean, merge, omit, pick, isFunction } from 'lodash-es'; export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; +export { getShapeConfigKeys } from './get-shape-config-keys'; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index 3a9446f3e..fcbd66c96 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -1,6 +1,7 @@ -import { CHILDREN_SHAPE, SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY } from '../constants'; -import { Adaptor } from '../types'; -import { getCustomKeys, omit } from './index'; +import { SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY, CONFIG_SHAPE } from '../constants'; +import { Adaptor, Options } from '../types'; +import { getCustomKeys, omit, pick, isFunction, getShapeConfigKeys } from './index'; + /** * @title 将自定义配置转换为 G2 接受的格式 */ @@ -8,17 +9,17 @@ export const transformOptions = (params: Adaptor) => { const { options } = params; const { children = [] } = options; - const deleteKeys = []; + const deleteKeys = getCustomKeys(); const getRest = (o: Adaptor['options']) => { const { children, type, data, ...rest } = o; - - return omit(rest, CHILDREN_SHAPE, getCustomKeys()); + deleteKeys.push(...Object.keys(rest)); + return omit(rest, getShapeConfigKeys()); }; const rest = getRest(options); - const getValue = (newConfig: string | Function, value: unknown, origin: object) => { + const getValue = (newConfig: string | Function, value: unknown, origin: Options) => { if (typeof newConfig === 'function') { return newConfig(value, origin); } @@ -43,12 +44,14 @@ export const transformOptions = (params: Adaptor) => { } }; - children.forEach((child) => { - /** - * @description 外层配置应用到所有 children - */ - const transformOption = Object.assign(child, rest); - + /** + * @title 通用转换逻辑 + * @description 直接修改原对象 + */ + const transformConfig = ( + config: T, + callback?: (transformObject: object, specKey: string, key: string) => void, + ): T => { Object.keys(TRANSFORM_OPTION_KEY).forEach((specKey) => { const transformObject = TRANSFORM_OPTION_KEY[specKey]; /** @@ -60,38 +63,62 @@ export const transformOptions = (params: Adaptor) => { * @description 常规图表 * @example Line Bar Column 等单图层图表 */ - if (options[key]) { - const transformValue = getValue(transformObject[key], options[key], transformOption); - updateOptions(transformOption, specKey, transformValue); - deleteKeys.push(key); - } - /** - * @description 特殊图表 - * @example DualAxes 等多图层图表 - */ - if (child[key]) { - const transformValue = getValue(transformObject[key], child[key], transformOption); - updateOptions(transformOption, specKey, transformValue); - delete child[key]; + if (config[key]) { + const transformValue = getValue(transformObject[key], config[key], config); + updateOptions(config, specKey, transformValue); + delete config[key]; } + if (isFunction(callback)) callback(transformObject, specKey, key); }); }); + return config; + }; + + children.forEach((child) => { + /** + * @description 外层配置应用到所有 children + */ + const copyChild = { ...child }; + const transformOption = Object.assign(child, rest); + + const transformChildrenConfig = (transformObject: object, specKey: string, key: string) => { + /** + * @description 特殊图表 + * @example DualAxes 等多图层图表 + */ + if (copyChild[key]) { + const transformValue = getValue(transformObject[key], child[key], transformOption); + updateOptions(transformOption, specKey, transformValue); + delete child[key]; + } + }; + + transformConfig(transformOption, transformChildrenConfig); }); /** * @description - * 1. 将 CHILDREN_SHAPE 中的配置项, 转换为 children - * 2. 删除已移入到 children 内的 key + * 1. 将 CONFIG_SHAPE 中的配置项, 转换为 children * @example 详见 src/core/constants/index.ts */ Object.keys(options).forEach((key) => { - if (CHILDREN_SHAPE.includes(key)) { - children.push(...options[key]); - deleteKeys.push(key); - } - if (deleteKeys.includes(key)) { - delete options[key]; + const exist = CONFIG_SHAPE.find((item) => item.key === key); + if (exist) { + const { type, extend_keys } = exist; + if (type) { + children.push(transformConfig(Object.assign({}, pick(options, extend_keys), { type }, options[key]))); + } else { + // annotations + children.push(...options[key]); + } } }); + + /** + * 统一删除已转换的配置项 + */ + deleteKeys.forEach((key) => { + delete options[key]; + }); return params; }; diff --git a/site/examples/statistics/area/demo/area-difference.js b/site/examples/statistics/area/demo/area-difference.js new file mode 100644 index 000000000..896a3309c --- /dev/null +++ b/site/examples/statistics/area/demo/area-difference.js @@ -0,0 +1,38 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/temperature-compare.json', + transform: [ + { + type: 'fold', + fields: ['New York', 'San Francisco'], + key: 'city', + value: 'temperature', + }, + ], + }, + xField: (d) => new Date(d.date), + yField: 'temperature', + colorField: 'city', + shape: 'hvh', + diff: true, + meta: { + color: { range: ['#67a9cf', '#ef8a62'] }, + }, + lineConfig: { + yField: 'San Francisco', + shape: 'hvh', + style: { + stroke: '#000', + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/area/demo/area-gradient.js b/site/examples/statistics/area/demo/area-gradient.js new file mode 100644 index 000000000..d2e54ee5b --- /dev/null +++ b/site/examples/statistics/area/demo/area-gradient.js @@ -0,0 +1,30 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/stocks.json', + transform: [{ type: 'filter', callback: (d) => d.symbol === 'GOOG' }], + }, + xField: (d) => new Date(d.date), + yField: 'price', + style: { + fill: 'linear-gradient(-90deg, white 0%, darkgreen 100%)', + }, + axis: { + y: { labelFormatter: '~s' }, + }, + lineConfig: { + style: { + stroke: 'darkgreen', + strokeWidth: 2, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/area/demo/cascade-area.js b/site/examples/statistics/area/demo/cascade-area.js new file mode 100644 index 000000000..afb549bf3 --- /dev/null +++ b/site/examples/statistics/area/demo/cascade-area.js @@ -0,0 +1,39 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/f38a8ad0-6e1f-4bb3-894c-7db50781fdec.json', + }, + xField: (d) => new Date(d.year), + yField: 'revenue', + seriesField: 'format', + colorField: 'group', + shape: 'smooth', + stack: { + orderBy: 'maxIndex', + reverse: true, + }, + axis: { + y: { labelFormatter: '~s' }, + }, + tooltip: { channel: 'y', valueFormatter: '.2f' }, + lineConfig: { + shape: 'smooth', + stack: { + orderBy: 'maxIndex', + reverse: true, + y: 'y1', + }, + style: { + stroke: 'white', + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/area/demo/meta.json b/site/examples/statistics/area/demo/meta.json index 0c1e4d126..50f32471f 100644 --- a/site/examples/statistics/area/demo/meta.json +++ b/site/examples/statistics/area/demo/meta.json @@ -51,6 +51,62 @@ "en": "Normalized Area, MaxIndex" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*WZe_T5tyWgoAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "step-area.js", + "title": { + "zh": "阶梯面积图", + "en": "Step Area Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*NRD9RKPyOEsAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "area-gradient.js", + "title": { + "zh": "渐变色面积图", + "en": "Gradient Area Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*VasvRpYGSLYAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "orderly-area.js", + "title": { + "zh": "彩条图", + "en": "Stripe Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*HZ1BR6GS6U4AAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "streamgraph.js", + "title": { + "zh": "河流图", + "en": "Streamgraph" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Vf-FQZH-5FMAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "range-spline-area.js", + "title": { + "zh": "区间曲线面积图", + "en": "Range Spline Area Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*oLjrRb6l8CAAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "cascade-area.js", + "title": { + "zh": "出现顺序堆叠面积图", + "en": "Stacked Area" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*3JKERLor91gAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "area-difference.js", + "title": { + "zh": "差分面积图", + "en": "Area Difference" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*CJn4T4_Rf98AAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/area/demo/orderly-area.js b/site/examples/statistics/area/demo/orderly-area.js new file mode 100644 index 000000000..391751f8d --- /dev/null +++ b/site/examples/statistics/area/demo/orderly-area.js @@ -0,0 +1,29 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/e58c9758-0a09-4527-aa90-fbf175b45925.json', + }, + xField: (d) => new Date(d.date), + yField: 'unemployed', + colorField: 'industry', + shape: 'smooth', + meta: { + x: { utc: true }, + }, + axis: { + x: { title: 'Date' }, + y: { labelFormatter: '~s' }, + }, + legend: { + color: { size: 72, autoWrap: true, maxRows: 3, cols: 6 }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/area/demo/range-spline-area.js b/site/examples/statistics/area/demo/range-spline-area.js new file mode 100644 index 000000000..c69a777d9 --- /dev/null +++ b/site/examples/statistics/area/demo/range-spline-area.js @@ -0,0 +1,47 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/range-spline-area.json', + transform: [ + { + type: 'map', + callback: ([x, low, high, v2, v3]) => ({ x, low, high, v2, v3 }), + }, + ], + }, + xField: 'x', + yField: ['low', 'high'], + shape: 'smooth', + style: { + fillOpacity: 0.5, + fill: '#64b5f6', + lineWidth: 1, + }, + axis: { + y: { title: false }, + }, + meta: { + y: { type: 'linear', tickCount: 10 }, + }, + pointConfig: { + yField: 'v2', + shape: 'point', + sizeField: 2, + }, + lineConfig: { + yField: 'v3', + shape: 'smooth', + style: { + stroke: '#FF6B3B', + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/area/demo/step-area.js b/site/examples/statistics/area/demo/step-area.js new file mode 100644 index 000000000..401152a45 --- /dev/null +++ b/site/examples/statistics/area/demo/step-area.js @@ -0,0 +1,45 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: [ + { year: '1991', value: 15468 }, + { year: '1992', value: 16100 }, + { year: '1993', value: 15900 }, + { year: '1994', value: 17409 }, + { year: '1995', value: 17000 }, + { year: '1996', value: 31056 }, + { year: '1997', value: 31982 }, + { year: '1998', value: 32040 }, + { year: '1999', value: 33233 }, + ], + xField: 'year', + yField: 'value', + shape: 'hvh', + label: { + text: 'value', + style: { + fontSize: 10, + textAlign: (_, idx, arr) => { + if (idx === 0) return 'left'; + if (idx === arr.length - 1) return 'right'; + return 'center'; + }, + }, + }, + style: { + opacity: 0.4, + }, + axis: { + y: { labelFormatter: '~s' }, + }, + lineConfig: { + shape: 'hvh', + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/area/demo/streamgraph.js b/site/examples/statistics/area/demo/streamgraph.js new file mode 100644 index 000000000..f1ec7ab4c --- /dev/null +++ b/site/examples/statistics/area/demo/streamgraph.js @@ -0,0 +1,20 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Area } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/unemployment-by-industry.json', + }, + xField: (d) => new Date(d.date), + yField: 'unemployed', + colorField: 'industry', + stack: true, + symmetry: true, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 9c1045a77a653b0b2316452bb5ac6f017c2543ed Mon Sep 17 00:00:00 2001 From: OctKun <2310353398@qq.com> Date: Tue, 22 Aug 2023 17:53:12 +0800 Subject: [PATCH 020/268] fix: handle annotations config transform bug (#2052) Co-authored-by: chenkun --- packages/plots/src/core/utils/transform.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index fcbd66c96..91d9f8107 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -1,6 +1,6 @@ import { SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY, CONFIG_SHAPE } from '../constants'; import { Adaptor, Options } from '../types'; -import { getCustomKeys, omit, pick, isFunction, getShapeConfigKeys } from './index'; +import { getCustomKeys, omit, pick, isFunction, getShapeConfigKeys, isArray } from './index'; /** * @title 将自定义配置转换为 G2 接受的格式 @@ -109,7 +109,11 @@ export const transformOptions = (params: Adaptor) => { children.push(transformConfig(Object.assign({}, pick(options, extend_keys), { type }, options[key]))); } else { // annotations - children.push(...options[key]); + if (isArray(options[key])) { + options[key].forEach((annotation) => { + children.push(transformConfig(annotation)); + }); + } } } }); From bc23b972650f25b83d3012f6b25a8c780db1f10c Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Tue, 22 Aug 2023 17:55:18 +0800 Subject: [PATCH 021/268] fix: getCustom keys bug (#2051) * fix(customKeys): fix CONFIG_SHAPE getKeys bu gbug * fix(customKeys): fix CONFIG_SHAPE getKeys bu gbug --------- Co-authored-by: ai-qing-hai --- packages/plots/src/core/utils/get-custom-keys.ts | 10 +++++----- packages/plots/src/core/utils/get-shape-config-keys.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/plots/src/core/utils/get-custom-keys.ts b/packages/plots/src/core/utils/get-custom-keys.ts index 7297d35ac..337cd7de0 100644 --- a/packages/plots/src/core/utils/get-custom-keys.ts +++ b/packages/plots/src/core/utils/get-custom-keys.ts @@ -1,12 +1,12 @@ -import { TRANSFORM_OPTION_KEY, CONFIG_SHAPE } from '../constants'; +import { TRANSFORM_OPTION_KEY } from '../constants'; +import { getShapeConfigKeys } from './get-shape-config-keys'; -export const getCustomKeys = () => { +export const getCustomKeys = (): string[] => { const customKeys = []; Object.keys(TRANSFORM_OPTION_KEY).forEach((key) => { customKeys.push(...Object.keys(TRANSFORM_OPTION_KEY[key])); }); - Object.keys(CONFIG_SHAPE).forEach((key) => { - customKeys.push(key); - }); + const configKeys = getShapeConfigKeys(); + customKeys.push(...configKeys); return customKeys; }; diff --git a/packages/plots/src/core/utils/get-shape-config-keys.ts b/packages/plots/src/core/utils/get-shape-config-keys.ts index 10c9b6641..f3b76dec6 100644 --- a/packages/plots/src/core/utils/get-shape-config-keys.ts +++ b/packages/plots/src/core/utils/get-shape-config-keys.ts @@ -1,6 +1,6 @@ import { CONFIG_SHAPE } from '../constants'; -export const getShapeConfigKeys = () => { +export const getShapeConfigKeys = (): string[] => { const configKeys = []; CONFIG_SHAPE.forEach((item) => { configKeys.push(item.key); From ece7bdec9c86197986dbe85c4e5f86d6f12dd79a Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Tue, 22 Aug 2023 17:56:44 +0800 Subject: [PATCH 022/268] feat(charts): add radar (#2046) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(charts): add radar * feat(radar):add radar ,add coordinate mark --------- Co-authored-by: ai-qing-hai --- packages/plots/src/components/index.ts | 3 +- packages/plots/src/components/radar/index.tsx | 11 ++++ .../plots/src/core/components/coordinate.ts | 24 +++++++ packages/plots/src/core/components/index.ts | 1 + packages/plots/src/core/constants/index.ts | 5 +- packages/plots/src/core/index.ts | 5 +- packages/plots/src/core/plots/pie/adaptor.ts | 5 +- .../plots/src/core/plots/radar/adaptor.ts | 33 ++++++++++ packages/plots/src/core/plots/radar/index.ts | 38 +++++++++++ packages/plots/src/core/plots/radar/type.ts | 5 ++ packages/plots/src/core/utils/index.ts | 2 +- site/examples/statistics/radar/API.en.md | 1 + site/examples/statistics/radar/API.zh.md | 1 + .../statistics/radar/demo/area-radial.js | 56 ++++++++++++++++ site/examples/statistics/radar/demo/basic.js | 48 ++++++++++++++ site/examples/statistics/radar/demo/meta.json | 40 ++++++++++++ .../statistics/radar/demo/parallel-radar.js | 65 +++++++++++++++++++ site/examples/statistics/radar/demo/radar.js | 47 ++++++++++++++ site/examples/statistics/radar/index.en.md | 4 ++ site/examples/statistics/radar/index.zh.md | 6 ++ 20 files changed, 392 insertions(+), 8 deletions(-) create mode 100644 packages/plots/src/components/radar/index.tsx create mode 100644 packages/plots/src/core/components/coordinate.ts create mode 100644 packages/plots/src/core/plots/radar/adaptor.ts create mode 100644 packages/plots/src/core/plots/radar/index.ts create mode 100644 packages/plots/src/core/plots/radar/type.ts create mode 100644 site/examples/statistics/radar/API.en.md create mode 100644 site/examples/statistics/radar/API.zh.md create mode 100644 site/examples/statistics/radar/demo/area-radial.js create mode 100644 site/examples/statistics/radar/demo/basic.js create mode 100644 site/examples/statistics/radar/demo/meta.json create mode 100644 site/examples/statistics/radar/demo/parallel-radar.js create mode 100644 site/examples/statistics/radar/demo/radar.js create mode 100644 site/examples/statistics/radar/index.en.md create mode 100644 site/examples/statistics/radar/index.zh.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 91c999c3c..d530cd933 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -5,5 +5,6 @@ import DualAxes from './dual-axes'; import Line from './line'; import Pie from './pie'; import Scatter from './scatter'; +import Radar from './radar'; -export { Column, Line, Pie, Area, Bar, DualAxes, Scatter }; +export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar }; diff --git a/packages/plots/src/components/radar/index.tsx b/packages/plots/src/components/radar/index.tsx new file mode 100644 index 000000000..9fc44533d --- /dev/null +++ b/packages/plots/src/components/radar/index.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { BaseChart } from '../base'; + +import type { RadarOptions } from '../../core'; +import type { CommonConfig } from '../../interface'; + +export type RadarConfig = CommonConfig; + +const RadarChart = (props: RadarConfig) => ; + +export default RadarChart; diff --git a/packages/plots/src/core/components/coordinate.ts b/packages/plots/src/core/components/coordinate.ts new file mode 100644 index 000000000..b06e71758 --- /dev/null +++ b/packages/plots/src/core/components/coordinate.ts @@ -0,0 +1,24 @@ +import { set, pick, get } from '../utils'; + +import type { Adaptor } from '../types'; + +/** + * 主要为极坐标配置, 饼图、雷达图等 + * 通用坐标系配置, coordinate 配置根据图表默认进行配置,例如 coordinate 饼图 { type: 'theta' } 玉珏图 { type: 'radial' }。 + * 也可直接通过 options.coordinate 进行穿透。 + * 同样 coordinate 但其他配置需要直接在 options 中配置,例如 主要配置内径 innerRadius 结束角度 endAngle 等, 次要配置 focusX distortionX。 + * @param params Adaptor + * @returns params Adaptor + */ +export function coordinate

(params: P) { + const { options } = params; + const { coordinate = {} } = options; + + set(params, ['options', 'coordinate'], { + ...coordinate, + ...pick(options, ['innerRadius', 'startAngle', 'endAngle', 'focusX', 'focusY', 'distortionX', 'distortionY', 'visual']), + outerRadius: get(options, 'radius'), + }); + + return params; +} diff --git a/packages/plots/src/core/components/index.ts b/packages/plots/src/core/components/index.ts index 18f02928a..33d0aef5a 100644 --- a/packages/plots/src/core/components/index.ts +++ b/packages/plots/src/core/components/index.ts @@ -1 +1,2 @@ export { mark } from './mark'; +export { coordinate } from './coordinate'; diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index e3ceaf7ac..4979a2cd0 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -27,10 +27,11 @@ export const TRANSFORM_OPTION_KEY = { yField: 'y', colorField: 'color', angleField: 'y', + keyField: 'key', sizeField: 'size', shapeField: 'shape', seriesField: 'series', - keyField: 'key', + positionField: 'position', }, transform: { /** @@ -120,7 +121,7 @@ export const TRANSFORM_OPTION_KEY = { * 1. annotations: [{type: 'text'}] -> children: [{type: 'text'}] * 2. lineConfig: {shape: 'hvh'}-> children: [{type: 'line', style: { shape: 'hvh'}}] */ -const EXTEND_KEYS = ['xField', 'yField', 'seriesField', 'colorField', 'sizeField', 'shapeField', 'keyField']; +const EXTEND_KEYS = ['xField', 'yField', 'seriesField', 'colorField', 'sizeField', 'shapeField', 'keyField', 'positionField']; export const CONFIG_SHAPE = [ { key: 'annotations', diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 316be2178..18d49399e 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -6,6 +6,7 @@ export type { DualAxesOptions } from './plots/dual-axes'; export type { LineOptions } from './plots/line'; export type { PieOptions } from './plots/pie'; export type { ScatterOptions } from './plots/scatter'; +export type { RadarOptions } from './plots/radar'; export * from './types'; import { Area } from './plots/area'; @@ -15,6 +16,6 @@ import { DualAxes } from './plots/dual-axes'; import { Line } from './plots/line'; import { Pie } from './plots/pie'; import { Scatter } from './plots/scatter'; +import { Radar } from './plots/radar'; -export const Plots = { Line, Column, Pie, Area, Bar, DualAxes, Scatter }; - +export const Plots = { Line, Column, Pie, Area, Bar, DualAxes, Scatter, Radar }; diff --git a/packages/plots/src/core/plots/pie/adaptor.ts b/packages/plots/src/core/plots/pie/adaptor.ts index c0d8f7857..a5fc1e682 100644 --- a/packages/plots/src/core/plots/pie/adaptor.ts +++ b/packages/plots/src/core/plots/pie/adaptor.ts @@ -1,5 +1,6 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { coordinate } from '../../components'; + import type { Adaptor } from '../../types'; import type { PieOptions } from './type'; @@ -17,5 +18,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, transformOptions, mark)(params); + return flow(init, coordinate, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/radar/adaptor.ts b/packages/plots/src/core/plots/radar/adaptor.ts new file mode 100644 index 000000000..f1d36b08b --- /dev/null +++ b/packages/plots/src/core/plots/radar/adaptor.ts @@ -0,0 +1,33 @@ +import { flow, transformOptions, get } from '../../utils'; +import { coordinate } from '../../components'; + +import type { Adaptor } from '../../types'; +import type { RadarOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + /** + * area 配置 ,决定是否有面积 + * 注: + * 1、当前 g2 5.0 的雷达图分为 radar(polar + parallel)和 polar 坐标系的区别。 + * 2、使用 coordinateType 对 coordinate进行快速配置. + * 3、g2plot 比较简单的区分了 radar、polar 两者,使用的是 axis.grid.type 'line'|'smooth' 进行简单的区分,而 g2 5.0 没有,比较复杂,并且 radar 不能配置面积图。 + */ + if (params.options.area && params.options.coordinateType !== 'radar') { + params.options.children.push({ type: 'area' }); + } + params.options.coordinate = { type: get(params, 'options.coordinateType', 'polar') }; + return params; + }; + + return flow(init, coordinate, transformOptions)(params); +} diff --git a/packages/plots/src/core/plots/radar/index.ts b/packages/plots/src/core/plots/radar/index.ts new file mode 100644 index 000000000..133ad645c --- /dev/null +++ b/packages/plots/src/core/plots/radar/index.ts @@ -0,0 +1,38 @@ +import { adaptor } from './adaptor'; +import { Plot } from '../../base'; + +import type { RadarOptions } from './type'; +import type { Adaptor } from '../../types'; + +export type { RadarOptions }; + +export class Radar extends Plot { + /** 图表类型 */ + public type = 'radar'; + + /** + * 获取 雷达图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + children: [{ type: 'line' }], + // 有 polar 和 radar 两种极坐标形式 + coordinateType: 'polar', + }; + } + + /** + * 获取 雷达图 默认配置 + */ + protected getDefaultOptions() { + return Radar.getDefaultOptions(); + } + + /** + * 雷达图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/radar/type.ts b/packages/plots/src/core/plots/radar/type.ts new file mode 100644 index 000000000..dae58c82f --- /dev/null +++ b/packages/plots/src/core/plots/radar/type.ts @@ -0,0 +1,5 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type RadarOptions = Options & BaseOptions & { + coordinateType?: 'radar' | 'polar'; +}; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 53cbf37f6..ec7dc9ea2 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -1,4 +1,4 @@ -export { flatten, flow, isArray, isBoolean, merge, omit, pick, isFunction } from 'lodash-es'; +export { flatten, flow, isArray, isBoolean, merge, omit, pick, isFunction, remove, get, set } from 'lodash-es'; export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; diff --git a/site/examples/statistics/radar/API.en.md b/site/examples/statistics/radar/API.en.md new file mode 100644 index 000000000..ece5214a0 --- /dev/null +++ b/site/examples/statistics/radar/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/radar/API.zh.md b/site/examples/statistics/radar/API.zh.md new file mode 100644 index 000000000..8d93b7f1a --- /dev/null +++ b/site/examples/statistics/radar/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/radar/demo/area-radial.js b/site/examples/statistics/radar/demo/area-radial.js new file mode 100644 index 000000000..a6eac0512 --- /dev/null +++ b/site/examples/statistics/radar/demo/area-radial.js @@ -0,0 +1,56 @@ +import { Radar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoRadar = () => { + const config = { + autoFit: false, + width: 954, + height: 954, + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/seasonal-weather.json', + transform: [ + { + type: 'map', + callback: (d) => ({ + ...d, + date: new Date(d.date), + }), + }, + ], + }, + xField: 'date', + yField: 'avg', + meta: { x: { utc: true } }, + style: { stroke: "steelblue", strokeWidth: 1.5 }, + tooltip: { items: [{ channel: "y", valueFormatter: ".1f" }] }, + innerRadius: 0.4, + axis: { + y: { + zIndex: 1, + direction: "center", + title: null, + labelFormatter: (d, i, array) => + i === array.length - 1 ? `${d}°F` : `${d}`, + style: { labelStroke: "#fff", labelStrokeWidth: 5 }, + }, + x: { grid: true, position: "inner" }, + }, + annotations: [ + { + type: "area", + encode: { x: "date", y: ["minmin", "maxmax"] }, + style: { fill: "lightsteelblue", fillOpacity: 0.2 }, + }, + { + type: "area", + encode: { x: "date", y: ["min", "max"] }, + style: { fill: "steelblue", fillOpacity: 0.2 }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radar/demo/basic.js b/site/examples/statistics/radar/demo/basic.js new file mode 100644 index 000000000..241463d9b --- /dev/null +++ b/site/examples/statistics/radar/demo/basic.js @@ -0,0 +1,48 @@ +import { Radar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { name: 'G2', star: 10371 }, + { name: 'G6', star: 7380 }, + { name: 'F2', star: 7414 }, + { name: 'L7', star: 2140 }, + { name: 'X6', star: 660 }, + { name: 'AVA', star: 885 }, + { name: 'G2Plot', star: 1626 }, +]; + +const DemoRadar = () => { + const config = { + data: data.map((d) => ({ ...d, star: Math.sqrt(d.star) })), + xField: 'name', + yField: 'star', + area: true, + meta: { + x: { + padding: 0.5, + align: 0, + }, + y: { + nice: true, + } + }, + axis: { + x: { + title: false, + grid: true, + }, + y: { + gridAreaFill: 'rgba(0, 0, 0, 0.04)', + label: false, + title: false, + }, + }, + style: { + fillOpacity: 0.2, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radar/demo/meta.json b/site/examples/statistics/radar/demo/meta.json new file mode 100644 index 000000000..bc2e8699e --- /dev/null +++ b/site/examples/statistics/radar/demo/meta.json @@ -0,0 +1,40 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "基础雷达图", + "en": "Basic Radar" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*W-b2QoNhip0AAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "radar.js", + "title": { + "zh": "雷达图(一般极坐标 polar)", + "en": "Radar (coordinate polar)" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*-xcxS7E8sKcAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "parallel-radar.js", + "title": { + "zh": "雷达图(雷达图特殊极坐标 radar)", + "en": "Radar (coordinate radar)" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*4sqyTZUFCNkAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "area-radial.js", + "title": { + "zh": "径向面积图", + "en": "Radial Area Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*-m-2QolJUt0AAAAAAAAAAAAADmJ7AQ" + } + ] +} diff --git a/site/examples/statistics/radar/demo/parallel-radar.js b/site/examples/statistics/radar/demo/parallel-radar.js new file mode 100644 index 000000000..0a7793b94 --- /dev/null +++ b/site/examples/statistics/radar/demo/parallel-radar.js @@ -0,0 +1,65 @@ +import { Radar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const axis = { + zIndex: 1, + style: { + labelStroke: '#fff', + labelStrokeWidth: 5, + labelFontSize: 10, + labelStrokeLineJoin: 'round', + titleStroke: '#fff', + titleFontSize: 10, + titleStrokeWidth: 5, + titleStrokeLineJoin: 'round', + lineStroke: 'black', + tickStroke: 'black', + lineStrokeWidth: 1, + }, +}; + +const DemoRadar = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/cars3.json', + }, + colorField: 'weight (lb)', + coordinateType: 'radar', + positionField: [ + "economy (mpg)", + "cylinders", + "displacement (cc)", + "power (hp)", + "weight (lb)", + "0-60 mph (s)", + "year", + ], + area: false, + axis: { + position: axis, + position1: axis, + position2: axis, + position3: axis, + position4: axis, + position5: axis, + position6: axis, + position7: axis, + }, + legend: { + color: { + position: "bottom", + labelFormatter: "~s", + length: 200, + layout: { justifyContent: "center" }, + }, + }, + style: { strokeWidth: 1.5, strokeOpacity: 0.4 }, + interaction: { tooltip: { series: false } }, + meta: { color: { palette: "brBG", offset: (t) => 1 - t } }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radar/demo/radar.js b/site/examples/statistics/radar/demo/radar.js new file mode 100644 index 000000000..2428ee34c --- /dev/null +++ b/site/examples/statistics/radar/demo/radar.js @@ -0,0 +1,47 @@ +import { Radar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { item: 'Design', type: 'a', score: 70 }, + { item: 'Design', type: 'b', score: 30 }, + { item: 'Development', type: 'a', score: 60 }, + { item: 'Development', type: 'b', score: 70 }, + { item: 'Marketing', type: 'a', score: 50 }, + { item: 'Marketing', type: 'b', score: 60 }, + { item: 'Users', type: 'a', score: 40 }, + { item: 'Users', type: 'b', score: 50 }, + { item: 'Test', type: 'a', score: 60 }, + { item: 'Test', type: 'b', score: 70 }, + { item: 'Language', type: 'a', score: 70 }, + { item: 'Language', type: 'b', score: 50 }, + { item: 'Technology', type: 'a', score: 50 }, + { item: 'Technology', type: 'b', score: 40 }, + { item: 'Support', type: 'a', score: 30 }, + { item: 'Support', type: 'b', score: 40 }, + { item: 'Sales', type: 'a', score: 60 }, + { item: 'Sales', type: 'b', score: 40 }, + { item: 'UX', type: 'a', score: 50 }, + { item: 'UX', type: 'b', score: 60 }, +]; + +const DemoRadar = () => { + const config = { + data, + xField: 'item', + yField: 'score', + colorField: 'type', + shapeField: 'smooth', + area: true, + meta: { x: { padding: 0.5, align: 0 }, y: { tickCount: 5, domainMax: 80 } }, + axis: { x: { grid: true }, y: { zIndex: 1, title: false } }, + interaction: { tooltip: { style: { crosshairsLineDash: [4, 4] } } }, + style: { + fillOpacity: 0.5, + lineWidth: 2, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radar/index.en.md b/site/examples/statistics/radar/index.en.md new file mode 100644 index 000000000..c129061b2 --- /dev/null +++ b/site/examples/statistics/radar/index.en.md @@ -0,0 +1,4 @@ +--- +title: Radar +order: 2 +--- \ No newline at end of file diff --git a/site/examples/statistics/radar/index.zh.md b/site/examples/statistics/radar/index.zh.md new file mode 100644 index 000000000..573b78ad0 --- /dev/null +++ b/site/examples/statistics/radar/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 雷达图 +order: 2 +--- + +雷达图为折线图或面积图的极坐标版本,可用于查看哪些变量具有相似数值,或者每个变量中有没有任何异常值。 From d77fcf36597c00edbdd61b096feeab9ce155ddfa Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 23 Aug 2023 10:04:47 +0800 Subject: [PATCH 023/268] docs: add demos (#2054) --- packages/plots/src/core/constants/index.ts | 11 +- packages/plots/src/core/utils/transform.ts | 20 ++- .../statistics/dual-axes/demo/meta.json | 8 + .../statistics/dual-axes/demo/multi-line.js | 151 ++++++++++++++++++ .../statistics/line/demo/line-threshold.js | 32 ++++ .../line/demo/{multi.js => line-var-size.js} | 0 site/examples/statistics/line/demo/meta.json | 16 +- 7 files changed, 227 insertions(+), 11 deletions(-) create mode 100644 site/examples/statistics/dual-axes/demo/multi-line.js create mode 100644 site/examples/statistics/line/demo/line-threshold.js rename site/examples/statistics/line/demo/{multi.js => line-var-size.js} (100%) diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 4979a2cd0..8f794dc95 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -121,7 +121,16 @@ export const TRANSFORM_OPTION_KEY = { * 1. annotations: [{type: 'text'}] -> children: [{type: 'text'}] * 2. lineConfig: {shape: 'hvh'}-> children: [{type: 'line', style: { shape: 'hvh'}}] */ -const EXTEND_KEYS = ['xField', 'yField', 'seriesField', 'colorField', 'sizeField', 'shapeField', 'keyField', 'positionField']; +const EXTEND_KEYS = [ + 'xField', + 'yField', + 'seriesField', + 'colorField', + 'sizeField', + 'shapeField', + 'keyField', + 'positionField', +]; export const CONFIG_SHAPE = [ { key: 'annotations', diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index 91d9f8107..d8807a187 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -13,7 +13,6 @@ export const transformOptions = (params: Adaptor) => { const getRest = (o: Adaptor['options']) => { const { children, type, data, ...rest } = o; - deleteKeys.push(...Object.keys(rest)); return omit(rest, getShapeConfigKeys()); }; @@ -66,7 +65,6 @@ export const transformOptions = (params: Adaptor) => { if (config[key]) { const transformValue = getValue(transformObject[key], config[key], config); updateOptions(config, specKey, transformValue); - delete config[key]; } if (isFunction(callback)) callback(transformObject, specKey, key); }); @@ -89,7 +87,6 @@ export const transformOptions = (params: Adaptor) => { if (copyChild[key]) { const transformValue = getValue(transformObject[key], child[key], transformOption); updateOptions(transformOption, specKey, transformValue); - delete child[key]; } }; @@ -121,8 +118,19 @@ export const transformOptions = (params: Adaptor) => { /** * 统一删除已转换的配置项 */ - deleteKeys.forEach((key) => { - delete options[key]; - }); + const deleteCustomKeys = () => { + deleteKeys.forEach((key) => { + delete options[key]; + }); + options.children.forEach((child) => { + Object.keys(child).forEach((key) => { + if (deleteKeys.includes(key)) { + delete child[key]; + } + }); + }); + }; + deleteCustomKeys(); + return params; }; diff --git a/site/examples/statistics/dual-axes/demo/meta.json b/site/examples/statistics/dual-axes/demo/meta.json index 9cf15a1ea..a52485f09 100644 --- a/site/examples/statistics/dual-axes/demo/meta.json +++ b/site/examples/statistics/dual-axes/demo/meta.json @@ -11,6 +11,14 @@ "en": "Line Bar Chart" }, "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*GLvKQbqMjTQAAAAAAAAAAAAADmJ7AQ/fmt.webp" + }, + { + "filename": "multi-line.js", + "title": { + "zh": "多轴图", + "en": "Multi Axis Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*BxouQYIIQ0kAAAAAAAAAAAAADmJ7AQ/fmt.webp" } ] } diff --git a/site/examples/statistics/dual-axes/demo/multi-line.js b/site/examples/statistics/dual-axes/demo/multi-line.js new file mode 100644 index 000000000..2d3b1fd4e --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/multi-line.js @@ -0,0 +1,151 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const data = [ + { + Month: 'Jan', + Evaporation: 2, + Precipitation: 2.6, + Temperature: 2, + }, + { + Month: 'Feb', + Evaporation: 4.9, + Precipitation: 5.9, + Temperature: 2.2, + }, + { + Month: 'Mar', + Evaporation: 7, + Precipitation: 9, + Temperature: 3.3, + }, + { + Month: 'Apr', + Evaporation: 23.2, + Precipitation: 26.4, + Temperature: 4.5, + }, + { + Month: 'May', + Evaporation: 25.6, + Precipitation: 28.7, + Temperature: 6.3, + }, + { + Month: 'Jun', + Evaporation: 76.7, + Precipitation: 70.7, + Temperature: 10.2, + }, + { + Month: 'Jul', + Evaporation: 135.6, + Precipitation: 175.6, + Temperature: 20.3, + }, + { + Month: 'Aug', + Evaporation: 162.2, + Precipitation: 182.2, + Temperature: 23.4, + }, + { + Month: 'Sep', + Evaporation: 32.6, + Precipitation: 48.7, + Temperature: 23, + }, + { + Month: 'Oct', + Evaporation: 20, + Precipitation: 18.8, + Temperature: 16.5, + }, + { + Month: 'Nov', + Evaporation: 6.4, + Precipitation: 6, + Temperature: 12, + }, + { + Month: 'Dec', + Evaporation: 3.3, + Precipitation: 2.3, + Temperature: 6.2, + }, + ]; + + const config = { + data, + xField: 'Month', + children: [ + { + type: 'line', + yField: 'Temperature', + shape: 'smooth', + colorField: '#EE6666', + meta: { + y: { independent: true, domainMax: 30 }, + }, + axis: { + y: { + title: 'Temperature (°C)', + grid: null, + style: { + titleFill: '#EE6666', + }, + }, + }, + }, + { + type: 'interval', + yField: 'Evaporation', + colorField: '#5470C6', + meta: { + y: { independent: true, domainMax: 200 }, + }, + style: { + fillOpacity: 0.8, + }, + axis: { + y: { + position: 'right', + title: 'Evaporation (ml)', + style: { + titleFill: '#5470C6', + }, + }, + }, + }, + { + type: 'line', + yField: 'Precipitation', + shape: 'smooth', + colorField: '#91CC75', + meta: { + y: { independent: true }, + }, + style: { + lineWidth: 2, + lineDash: [2, 2], + }, + axis: { + y: { + position: 'right', + title: 'Precipitation (ml)', + grid: null, + style: { + titleFill: '#91CC75', + }, + }, + }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/line/demo/line-threshold.js b/site/examples/statistics/line/demo/line-threshold.js new file mode 100644 index 000000000..cd57a167e --- /dev/null +++ b/site/examples/statistics/line/demo/line-threshold.js @@ -0,0 +1,32 @@ +import { Line } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoLine = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/temperatures2.json', + }, + xField: (d) => new Date(d.date), + yField: 'value', + shape: 'hvh', + colorField: 'value', + axis: { + x: { title: 'date' }, + }, + style: { + gradient: 'y', + lineWidth: 1.5, + lineJoin: 'round', + }, + meta: { + x: { utc: true }, + y: { nice: true }, + color: { type: 'threshold', domain: [55], range: ['black', 'red'] }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/line/demo/multi.js b/site/examples/statistics/line/demo/line-var-size.js similarity index 100% rename from site/examples/statistics/line/demo/multi.js rename to site/examples/statistics/line/demo/line-var-size.js diff --git a/site/examples/statistics/line/demo/meta.json b/site/examples/statistics/line/demo/meta.json index 01b8a40ab..aa2eacbf5 100644 --- a/site/examples/statistics/line/demo/meta.json +++ b/site/examples/statistics/line/demo/meta.json @@ -13,12 +13,12 @@ "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" }, { - "filename": "multi.js", + "filename": "line-var-size.js", "title": { - "zh": "多折线图", - "en": "Multi line plot" + "zh": "变宽折线图", + "en": "Var Size Line Chart" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*IZ9nRq-a6fIAAAAAAAAAAABkARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*pWrERLZIMyQAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "connect-nulls.js", @@ -51,6 +51,14 @@ "en": "Colors Line plot" }, "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*WVwSRa-HQAcAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "line-threshold.js", + "title": { + "zh": "阈值折线图", + "en": "Threshold Line Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*YUrlS4AWYFkAAAAAAAAAAAAADmJ7AQ" } ] } From b6d5d3e49055cf0cb8f76354d73db09a040bb176 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Thu, 24 Aug 2023 13:52:14 +0800 Subject: [PATCH 024/268] feat: add rose (#2053) * feat(charts): add rose * feat(charts): add rose - 2 * feat(charts): add rose -3 * feat(charts): add rose -4 --------- Co-authored-by: ai-qing-hai --- packages/plots/src/components/index.ts | 3 +- packages/plots/src/components/rose/index.tsx | 11 ++++ .../plots/src/components/scatter/index.tsx | 5 +- packages/plots/src/core/base/index.ts | 7 +- .../plots/src/core/components/coordinate.ts | 4 +- packages/plots/src/core/components/index.ts | 2 +- packages/plots/src/core/index.ts | 4 +- packages/plots/src/core/plots/rose/adaptor.ts | 22 +++++++ packages/plots/src/core/plots/rose/index.ts | 39 +++++++++++ packages/plots/src/core/plots/rose/type.ts | 3 + .../plots/src/core/plots/scatter/adaptor.ts | 1 + .../plots/src/core/plots/scatter/index.ts | 5 +- packages/plots/src/core/utils/transform.ts | 8 ++- site/examples/statistics/rose/API.en.md | 1 + site/examples/statistics/rose/API.zh.md | 1 + site/examples/statistics/rose/demo/basic.js | 19 ++++++ site/examples/statistics/rose/demo/meta.json | 32 +++++++++ .../statistics/rose/demo/rose-label.js | 36 ++++++++++ site/examples/statistics/rose/demo/rose.js | 33 ++++++++++ .../statistics/rose/demo/stacked-rose.js | 66 +++++++++++++++++++ site/examples/statistics/rose/index.en.md | 4 ++ site/examples/statistics/rose/index.zh.md | 6 ++ 22 files changed, 299 insertions(+), 13 deletions(-) create mode 100644 packages/plots/src/components/rose/index.tsx create mode 100644 packages/plots/src/core/plots/rose/adaptor.ts create mode 100644 packages/plots/src/core/plots/rose/index.ts create mode 100644 packages/plots/src/core/plots/rose/type.ts create mode 100644 site/examples/statistics/rose/API.en.md create mode 100644 site/examples/statistics/rose/API.zh.md create mode 100644 site/examples/statistics/rose/demo/basic.js create mode 100644 site/examples/statistics/rose/demo/meta.json create mode 100644 site/examples/statistics/rose/demo/rose-label.js create mode 100644 site/examples/statistics/rose/demo/rose.js create mode 100644 site/examples/statistics/rose/demo/stacked-rose.js create mode 100644 site/examples/statistics/rose/index.en.md create mode 100644 site/examples/statistics/rose/index.zh.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index d530cd933..8593b078f 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -6,5 +6,6 @@ import Line from './line'; import Pie from './pie'; import Scatter from './scatter'; import Radar from './radar'; +import Rose from './rose'; -export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar }; +export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose }; diff --git a/packages/plots/src/components/rose/index.tsx b/packages/plots/src/components/rose/index.tsx new file mode 100644 index 000000000..436f91a27 --- /dev/null +++ b/packages/plots/src/components/rose/index.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { BaseChart } from '../base'; + +import type { RoseOptions } from '../../core'; +import type { CommonConfig } from '../../interface'; + +export type RoseConfig = CommonConfig; + +const RoseChart = (props: RoseConfig) => ; + +export default RoseChart; diff --git a/packages/plots/src/components/scatter/index.tsx b/packages/plots/src/components/scatter/index.tsx index d724e9e6f..34ef112ef 100644 --- a/packages/plots/src/components/scatter/index.tsx +++ b/packages/plots/src/components/scatter/index.tsx @@ -1,8 +1,9 @@ import React from 'react'; -import { ScatterOptions } from '../../core'; -import { CommonConfig } from '../../interface'; import { BaseChart } from '../base'; +import type { ScatterOptions } from '../../core'; +import type { CommonConfig } from '../../interface'; + export type ScatterConfig = CommonConfig; const ScatterChart = (props: ScatterConfig) => ; diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 1f6b11d3c..83a89556f 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -2,8 +2,9 @@ import EE from '@antv/event-emitter'; import { Chart } from '@antv/g2'; import { bind } from 'size-sensor'; import { CHART_OPTIONS } from '../constants'; +import { merge, omit, pick } from '../utils'; + import type { Adaptor, Options } from '../types'; -import { getCustomKeys, merge, omit, pick } from '../utils'; const SOURCE_ATTRIBUTE_NAME = 'data-chart-source-type'; @@ -47,7 +48,7 @@ export abstract class Plot extends EE { * G2 options(Spec) 配置 */ private getSpecOptions() { - return omit(this.options, CHART_OPTIONS, getCustomKeys()); + return omit(this.options, CHART_OPTIONS); } /** @@ -82,7 +83,7 @@ export abstract class Plot extends EE { /** * 获取默认的 options 配置项,每个组件都可以复写 */ - protected getDefaultOptions(): Partial | void {} + protected getDefaultOptions(): Partial | void { } /** * 绘制 diff --git a/packages/plots/src/core/components/coordinate.ts b/packages/plots/src/core/components/coordinate.ts index b06e71758..0b3e93a20 100644 --- a/packages/plots/src/core/components/coordinate.ts +++ b/packages/plots/src/core/components/coordinate.ts @@ -2,6 +2,8 @@ import { set, pick, get } from '../utils'; import type { Adaptor } from '../types'; +export const COORDIANTE_OPTIONS = ['radius', 'innerRadius', 'startAngle', 'endAngle', 'focusX', 'focusY', 'distortionX', 'distortionY', 'visual'] + /** * 主要为极坐标配置, 饼图、雷达图等 * 通用坐标系配置, coordinate 配置根据图表默认进行配置,例如 coordinate 饼图 { type: 'theta' } 玉珏图 { type: 'radial' }。 @@ -16,7 +18,7 @@ export function coordinate

(params: P) { set(params, ['options', 'coordinate'], { ...coordinate, - ...pick(options, ['innerRadius', 'startAngle', 'endAngle', 'focusX', 'focusY', 'distortionX', 'distortionY', 'visual']), + ...pick(options, COORDIANTE_OPTIONS), outerRadius: get(options, 'radius'), }); diff --git a/packages/plots/src/core/components/index.ts b/packages/plots/src/core/components/index.ts index 33d0aef5a..adf9117fc 100644 --- a/packages/plots/src/core/components/index.ts +++ b/packages/plots/src/core/components/index.ts @@ -1,2 +1,2 @@ export { mark } from './mark'; -export { coordinate } from './coordinate'; +export { coordinate, COORDIANTE_OPTIONS } from './coordinate'; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 18d49399e..2dff140df 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -7,6 +7,7 @@ export type { LineOptions } from './plots/line'; export type { PieOptions } from './plots/pie'; export type { ScatterOptions } from './plots/scatter'; export type { RadarOptions } from './plots/radar'; +export type { RoseOptions } from './plots/rose'; export * from './types'; import { Area } from './plots/area'; @@ -17,5 +18,6 @@ import { Line } from './plots/line'; import { Pie } from './plots/pie'; import { Scatter } from './plots/scatter'; import { Radar } from './plots/radar'; +import { Rose } from './plots/rose'; -export const Plots = { Line, Column, Pie, Area, Bar, DualAxes, Scatter, Radar }; +export const Plots = { Line, Column, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose }; diff --git a/packages/plots/src/core/plots/rose/adaptor.ts b/packages/plots/src/core/plots/rose/adaptor.ts new file mode 100644 index 000000000..b5180a91e --- /dev/null +++ b/packages/plots/src/core/plots/rose/adaptor.ts @@ -0,0 +1,22 @@ +import { flow, transformOptions } from '../../utils'; +import { coordinate } from '../../components'; + +import type { Adaptor } from '../../types'; +import type { RoseOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, coordinate, transformOptions)(params); +} diff --git a/packages/plots/src/core/plots/rose/index.ts b/packages/plots/src/core/plots/rose/index.ts new file mode 100644 index 000000000..3e5aced61 --- /dev/null +++ b/packages/plots/src/core/plots/rose/index.ts @@ -0,0 +1,39 @@ +import { Plot } from '../../base'; +import { adaptor } from './adaptor'; + +import type { RoseOptions } from './type'; +import type { Adaptor } from '../../types'; + +export type { RoseOptions }; + +export class Rose extends Plot { + /** 图表类型 */ + public type = 'rose'; + + /** + * 获取 散点图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + children: [{ type: 'interval' }], + coordinate: { type: 'polar' }, + animate: { enter: { type: "waveIn" } }, + }; + } + + /** + * 获取 散点图 默认配置 + */ + protected getDefaultOptions() { + return Rose.getDefaultOptions(); + } + + /** + * 散点图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/rose/type.ts b/packages/plots/src/core/plots/rose/type.ts new file mode 100644 index 000000000..5aaf0e69c --- /dev/null +++ b/packages/plots/src/core/plots/rose/type.ts @@ -0,0 +1,3 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type RoseOptions = Options & BaseOptions; diff --git a/packages/plots/src/core/plots/scatter/adaptor.ts b/packages/plots/src/core/plots/scatter/adaptor.ts index 9b7977c7f..cc44b7ff6 100644 --- a/packages/plots/src/core/plots/scatter/adaptor.ts +++ b/packages/plots/src/core/plots/scatter/adaptor.ts @@ -1,5 +1,6 @@ import { flow, transformOptions } from '../../utils'; import { mark } from '../../components'; + import type { Adaptor } from '../../types'; import type { ScatterOptions } from './type'; diff --git a/packages/plots/src/core/plots/scatter/index.ts b/packages/plots/src/core/plots/scatter/index.ts index 30f98e1fc..ab6ad70df 100644 --- a/packages/plots/src/core/plots/scatter/index.ts +++ b/packages/plots/src/core/plots/scatter/index.ts @@ -1,7 +1,8 @@ import { Plot } from '../../base'; -import type { Adaptor } from '../../types'; import { adaptor } from './adaptor'; -import { ScatterOptions } from './type'; + +import type { ScatterOptions } from './type'; +import type { Adaptor } from '../../types'; export type { ScatterOptions }; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index d8807a187..30e258fb7 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -1,7 +1,9 @@ +import { COORDIANTE_OPTIONS } from '../components'; import { SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY, CONFIG_SHAPE } from '../constants'; -import { Adaptor, Options } from '../types'; import { getCustomKeys, omit, pick, isFunction, getShapeConfigKeys, isArray } from './index'; +import type { Adaptor, Options } from '../types'; + /** * @title 将自定义配置转换为 G2 接受的格式 */ @@ -119,9 +121,10 @@ export const transformOptions = (params: Adaptor) => { * 统一删除已转换的配置项 */ const deleteCustomKeys = () => { - deleteKeys.forEach((key) => { + [...deleteKeys, ...COORDIANTE_OPTIONS].forEach((key) => { delete options[key]; }); + options.children.forEach((child) => { Object.keys(child).forEach((key) => { if (deleteKeys.includes(key)) { @@ -130,6 +133,7 @@ export const transformOptions = (params: Adaptor) => { }); }); }; + deleteCustomKeys(); return params; diff --git a/site/examples/statistics/rose/API.en.md b/site/examples/statistics/rose/API.en.md new file mode 100644 index 000000000..b670b11dc --- /dev/null +++ b/site/examples/statistics/rose/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/rose/API.zh.md b/site/examples/statistics/rose/API.zh.md new file mode 100644 index 000000000..bacfe8f74 --- /dev/null +++ b/site/examples/statistics/rose/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/rose/demo/basic.js b/site/examples/statistics/rose/demo/basic.js new file mode 100644 index 000000000..6710ef43f --- /dev/null +++ b/site/examples/statistics/rose/demo/basic.js @@ -0,0 +1,19 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoScatter = () => { + const config = { + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/basement_prod/6b4aa721-b039-49b9-99d8-540b3f87d339.json", + }, + xField: 'height', + yField: 'weight', + colorField: 'gender', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/rose/demo/meta.json b/site/examples/statistics/rose/demo/meta.json new file mode 100644 index 000000000..24f721c0b --- /dev/null +++ b/site/examples/statistics/rose/demo/meta.json @@ -0,0 +1,32 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "rose.js", + "title": { + "zh": "玫瑰图", + "en": "Rose Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*_DeKSr3oN5sAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "stacked-rose.js", + "title": { + "zh": "堆积玫瑰图", + "en": "Stacked Rose Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Lv1oT5JCtrMAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "rose-label.js", + "title": { + "zh": "玫瑰图标签", + "en": "Rose Chart, Label" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Cx8zT7vT5bUAAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/site/examples/statistics/rose/demo/rose-label.js b/site/examples/statistics/rose/demo/rose-label.js new file mode 100644 index 000000000..a8dd48e1c --- /dev/null +++ b/site/examples/statistics/rose/demo/rose-label.js @@ -0,0 +1,36 @@ +import { Rose } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoRose = () => { + const config = { + width: 720, + height: 720, + autoFit: false, + radius: 0.85, + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/bmw-prod/87b2ff47-2a33-4509-869c-dae4cdd81163.csv", + }, + xField: 'year', + yField: 'people', + colorField: 'year', + transform: [{ type: "groupX", y: "sum" }], + meta: { y: { type: "sqrt" }, x: { padding: 0 } }, + axis: false, + legend: { color: { length: 400, layout: { justifyContent: "center" } } }, + labels: [ + { + text: "people", + position: "outside", + formatter: "~s", + transform: [{ type: "overlapDodgeY" }], + }, + ], + tooltip: { items: [{ channel: "y", valueFormatter: "~s" }] }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/rose/demo/rose.js b/site/examples/statistics/rose/demo/rose.js new file mode 100644 index 000000000..ac71acc4b --- /dev/null +++ b/site/examples/statistics/rose/demo/rose.js @@ -0,0 +1,33 @@ +import { Rose } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoRose = () => { + const config = { + width: 720, + height: 720, + autoFit: false, + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/bmw-prod/87b2ff47-2a33-4509-869c-dae4cdd81163.csv", + }, + xField: 'year', + yField: 'people', + meta: { y: { type: "sqrt" } }, + transform: [{ type: "groupX", y: "sum" }], + axis: { + y: { + title: 'sum of people', + labelFormatter: "~s", + tickCount: 5, + tickFilter: (d, i) => i !== 0, + direction: "right", + }, + }, + tooltip: { items: [{ channel: "y", valueFormatter: "~s" }] }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/rose/demo/stacked-rose.js b/site/examples/statistics/rose/demo/stacked-rose.js new file mode 100644 index 000000000..410cbef1a --- /dev/null +++ b/site/examples/statistics/rose/demo/stacked-rose.js @@ -0,0 +1,66 @@ +import { Rose } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoRose = () => { + + const colors = [ + '#98abc5', + '#8a89a6', + '#7b6888', + '#6b486b', + '#a05d56', + '#d0743c', + '#ff8c00', + ]; + + const config = { + width: 800, + height: 800, + autoFit: false, + innerRadius: 0.4, + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/bmw-prod/d582a447-2057-4a74-97ed-1d73a5459ea4.csv", + transform: [ + { + type: "fold", + fields: [ + "Under 5 Years", + "5 to 13 Years", + "14 to 17 Years", + "18 to 24 Years", + "25 to 44 Years", + "45 to 64 Years", + "65 Years and Over", + ], + key: "Age", + value: "Population", + }, + ], + }, + xField: 'State', + yField: 'Population', + colorField: 'Age', + stack: true, + meta: { + y: { type: "sqrt" }, + color: { + range: colors, + }, + }, + axis: { + x: { position: "inner" }, + y: { + labelFormatter: "~s", + tickFilter: (_, i) => i !== 0, + direction: "center", + }, + }, + legend: { color: { position: "center", display: "grid", gridCol: 1 } }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/rose/index.en.md b/site/examples/statistics/rose/index.en.md new file mode 100644 index 000000000..4c833b4f2 --- /dev/null +++ b/site/examples/statistics/rose/index.en.md @@ -0,0 +1,4 @@ +--- +title: Rose +order: 13 +--- \ No newline at end of file diff --git a/site/examples/statistics/rose/index.zh.md b/site/examples/statistics/rose/index.zh.md new file mode 100644 index 000000000..c83f61907 --- /dev/null +++ b/site/examples/statistics/rose/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 玫瑰图 +order: 13 +--- + +玫瑰图区别于饼图,使用搬家来反映数值,而饼图通过弧度来表现。通过对数据进行夸张,有利于观测分辨数值相近的数据。 From 5116aa4fe857c004caa701c7fdf648130da67102 Mon Sep 17 00:00:00 2001 From: OctKun <2310353398@qq.com> Date: Thu, 24 Aug 2023 14:28:24 +0800 Subject: [PATCH 025/268] feat: add TinyLine & TinyColumn & TinyArea (#2045) Co-authored-by: chenkun Co-authored-by: Joel Alan <31396322+lxfu1@users.noreply.github.com> --- packages/plots/src/components/index.ts | 3 +- packages/plots/src/components/tiny/index.ts | 9 +++ .../src/components/tiny/tiny-area/index.tsx | 10 ++++ .../src/components/tiny/tiny-column/index.tsx | 10 ++++ .../src/components/tiny/tiny-line/index.tsx | 10 ++++ packages/plots/src/core/index.ts | 8 ++- .../plots/src/core/plots/tiny-area/adaptor.ts | 21 +++++++ .../plots/src/core/plots/tiny-area/index.ts | 37 ++++++++++++ .../plots/src/core/plots/tiny-area/type.ts | 3 + .../src/core/plots/tiny-column/adaptor.ts | 21 +++++++ .../plots/src/core/plots/tiny-column/index.ts | 37 ++++++++++++ .../plots/src/core/plots/tiny-column/type.ts | 3 + .../plots/src/core/plots/tiny-line/adaptor.ts | 21 +++++++ .../plots/src/core/plots/tiny-line/index.ts | 37 ++++++++++++ .../plots/src/core/plots/tiny-line/type.ts | 3 + site/examples/statistics/tiny-area/API.en.md | 1 + site/examples/statistics/tiny-area/API.zh.md | 1 + .../tiny-area/demo/area-annotation.js | 56 +++++++++++++++++++ .../statistics/tiny-area/demo/basic.js | 29 ++++++++++ .../statistics/tiny-area/demo/filled-area.js | 29 ++++++++++ .../statistics/tiny-area/demo/meta.json | 32 +++++++++++ .../examples/statistics/tiny-area/index.en.md | 4 ++ .../examples/statistics/tiny-area/index.zh.md | 4 ++ .../examples/statistics/tiny-column/API.en.md | 1 + .../examples/statistics/tiny-column/API.zh.md | 1 + .../statistics/tiny-column/demo/basic.js | 20 +++++++ .../tiny-column/demo/column-annotation.js | 33 +++++++++++ .../statistics/tiny-column/demo/meta.json | 24 ++++++++ .../statistics/tiny-column/index.en.md | 4 ++ .../statistics/tiny-column/index.zh.md | 4 ++ site/examples/statistics/tiny-line/API.en.md | 1 + site/examples/statistics/tiny-line/API.zh.md | 1 + .../statistics/tiny-line/demo/basic.js | 31 ++++++++++ .../tiny-line/demo/line-annotation.js | 45 +++++++++++++++ .../statistics/tiny-line/demo/meta.json | 24 ++++++++ .../examples/statistics/tiny-line/index.en.md | 4 ++ .../examples/statistics/tiny-line/index.zh.md | 4 ++ 37 files changed, 584 insertions(+), 2 deletions(-) create mode 100644 packages/plots/src/components/tiny/index.ts create mode 100644 packages/plots/src/components/tiny/tiny-area/index.tsx create mode 100644 packages/plots/src/components/tiny/tiny-column/index.tsx create mode 100644 packages/plots/src/components/tiny/tiny-line/index.tsx create mode 100644 packages/plots/src/core/plots/tiny-area/adaptor.ts create mode 100644 packages/plots/src/core/plots/tiny-area/index.ts create mode 100644 packages/plots/src/core/plots/tiny-area/type.ts create mode 100644 packages/plots/src/core/plots/tiny-column/adaptor.ts create mode 100644 packages/plots/src/core/plots/tiny-column/index.ts create mode 100644 packages/plots/src/core/plots/tiny-column/type.ts create mode 100644 packages/plots/src/core/plots/tiny-line/adaptor.ts create mode 100644 packages/plots/src/core/plots/tiny-line/index.ts create mode 100644 packages/plots/src/core/plots/tiny-line/type.ts create mode 100644 site/examples/statistics/tiny-area/API.en.md create mode 100644 site/examples/statistics/tiny-area/API.zh.md create mode 100644 site/examples/statistics/tiny-area/demo/area-annotation.js create mode 100644 site/examples/statistics/tiny-area/demo/basic.js create mode 100644 site/examples/statistics/tiny-area/demo/filled-area.js create mode 100644 site/examples/statistics/tiny-area/demo/meta.json create mode 100644 site/examples/statistics/tiny-area/index.en.md create mode 100644 site/examples/statistics/tiny-area/index.zh.md create mode 100644 site/examples/statistics/tiny-column/API.en.md create mode 100644 site/examples/statistics/tiny-column/API.zh.md create mode 100644 site/examples/statistics/tiny-column/demo/basic.js create mode 100644 site/examples/statistics/tiny-column/demo/column-annotation.js create mode 100644 site/examples/statistics/tiny-column/demo/meta.json create mode 100644 site/examples/statistics/tiny-column/index.en.md create mode 100644 site/examples/statistics/tiny-column/index.zh.md create mode 100644 site/examples/statistics/tiny-line/API.en.md create mode 100644 site/examples/statistics/tiny-line/API.zh.md create mode 100644 site/examples/statistics/tiny-line/demo/basic.js create mode 100644 site/examples/statistics/tiny-line/demo/line-annotation.js create mode 100644 site/examples/statistics/tiny-line/demo/meta.json create mode 100644 site/examples/statistics/tiny-line/index.en.md create mode 100644 site/examples/statistics/tiny-line/index.zh.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 8593b078f..24858b807 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -6,6 +6,7 @@ import Line from './line'; import Pie from './pie'; import Scatter from './scatter'; import Radar from './radar'; +import Tiny from './tiny'; import Rose from './rose'; -export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose }; +export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny }; diff --git a/packages/plots/src/components/tiny/index.ts b/packages/plots/src/components/tiny/index.ts new file mode 100644 index 000000000..1aa896dff --- /dev/null +++ b/packages/plots/src/components/tiny/index.ts @@ -0,0 +1,9 @@ +import TinyLine from './tiny-line'; +import TinyArea from './tiny-area'; +import TinyColumn from './tiny-column'; + +export default { + Line: TinyLine, + Area: TinyArea, + Column: TinyColumn, +}; diff --git a/packages/plots/src/components/tiny/tiny-area/index.tsx b/packages/plots/src/components/tiny/tiny-area/index.tsx new file mode 100644 index 000000000..107e9d388 --- /dev/null +++ b/packages/plots/src/components/tiny/tiny-area/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { TinyAreaOptions } from '../../../core'; +import { CommonConfig } from '../../../interface'; +import { BaseChart } from '../../base'; + +export type TinyLineConfig = CommonConfig; + +const TinyAreaChart = (props: TinyLineConfig) => ; + +export default TinyAreaChart; diff --git a/packages/plots/src/components/tiny/tiny-column/index.tsx b/packages/plots/src/components/tiny/tiny-column/index.tsx new file mode 100644 index 000000000..6521e2d2f --- /dev/null +++ b/packages/plots/src/components/tiny/tiny-column/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { TinyColumnOptions } from '../../../core'; +import { CommonConfig } from '../../../interface'; +import { BaseChart } from '../../base'; + +export type TinyLineConfig = CommonConfig; + +const TinyLineChart = (props: TinyLineConfig) => ; + +export default TinyLineChart; diff --git a/packages/plots/src/components/tiny/tiny-line/index.tsx b/packages/plots/src/components/tiny/tiny-line/index.tsx new file mode 100644 index 000000000..95fc16e21 --- /dev/null +++ b/packages/plots/src/components/tiny/tiny-line/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { TinyLineOptions } from '../../../core'; +import { CommonConfig } from '../../../interface'; +import { BaseChart } from '../../base'; + +export type TinyLineConfig = CommonConfig; + +const TinyLineChart = (props: TinyLineConfig) => ; + +export default TinyLineChart; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 2dff140df..83b51754d 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -7,6 +7,9 @@ export type { LineOptions } from './plots/line'; export type { PieOptions } from './plots/pie'; export type { ScatterOptions } from './plots/scatter'; export type { RadarOptions } from './plots/radar'; +export type { TinyLineOptions } from './plots/tiny-line'; +export type { TinyAreaOptions } from './plots/tiny-area'; +export type { TinyColumnOptions } from './plots/tiny-column'; export type { RoseOptions } from './plots/rose'; export * from './types'; @@ -18,6 +21,9 @@ import { Line } from './plots/line'; import { Pie } from './plots/pie'; import { Scatter } from './plots/scatter'; import { Radar } from './plots/radar'; +import { TinyLine } from './plots/tiny-line'; +import { TinyArea } from './plots/tiny-area'; +import { TinyColumn } from './plots/tiny-column'; import { Rose } from './plots/rose'; -export const Plots = { Line, Column, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose }; +export const Plots = { Line, Column, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, TinyLine, TinyArea, TinyColumn }; diff --git a/packages/plots/src/core/plots/tiny-area/adaptor.ts b/packages/plots/src/core/plots/tiny-area/adaptor.ts new file mode 100644 index 000000000..c4b454d91 --- /dev/null +++ b/packages/plots/src/core/plots/tiny-area/adaptor.ts @@ -0,0 +1,21 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { TinyAreaOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/tiny-area/index.ts b/packages/plots/src/core/plots/tiny-area/index.ts new file mode 100644 index 000000000..f209d848d --- /dev/null +++ b/packages/plots/src/core/plots/tiny-area/index.ts @@ -0,0 +1,37 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { TinyAreaOptions } from './type'; + +export type { TinyAreaOptions }; + +export class TinyArea extends Plot { + /** 图表类型 */ + public type = 'TinyArea'; + + /** + * 获取 面积图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + children: [{ type: 'area', axis: false }], + autoFit: false, + }; + } + + /** + * 获取 面积图 默认配置 + */ + protected getDefaultOptions() { + return TinyArea.getDefaultOptions(); + } + + /** + * 面积图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/tiny-area/type.ts b/packages/plots/src/core/plots/tiny-area/type.ts new file mode 100644 index 000000000..978cb6cf3 --- /dev/null +++ b/packages/plots/src/core/plots/tiny-area/type.ts @@ -0,0 +1,3 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type TinyAreaOptions = Options & BaseOptions; diff --git a/packages/plots/src/core/plots/tiny-column/adaptor.ts b/packages/plots/src/core/plots/tiny-column/adaptor.ts new file mode 100644 index 000000000..063e9a538 --- /dev/null +++ b/packages/plots/src/core/plots/tiny-column/adaptor.ts @@ -0,0 +1,21 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { TinyColumnOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/tiny-column/index.ts b/packages/plots/src/core/plots/tiny-column/index.ts new file mode 100644 index 000000000..6be444ed7 --- /dev/null +++ b/packages/plots/src/core/plots/tiny-column/index.ts @@ -0,0 +1,37 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { TinyColumnOptions } from './type'; + +export type { TinyColumnOptions }; + +export class TinyColumn extends Plot { + /** 图表类型 */ + public type = 'TinyColumn'; + + /** + * 获取 迷你柱形图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + children: [{ type: 'interval', axis: false }], + autoFit: false, + }; + } + + /** + * 获取 迷你柱形图 默认配置 + */ + protected getDefaultOptions() { + return TinyColumn.getDefaultOptions(); + } + + /** + * 迷你柱形图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/tiny-column/type.ts b/packages/plots/src/core/plots/tiny-column/type.ts new file mode 100644 index 000000000..5d517de1f --- /dev/null +++ b/packages/plots/src/core/plots/tiny-column/type.ts @@ -0,0 +1,3 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type TinyColumnOptions = Options & BaseOptions; diff --git a/packages/plots/src/core/plots/tiny-line/adaptor.ts b/packages/plots/src/core/plots/tiny-line/adaptor.ts new file mode 100644 index 000000000..e415b57ad --- /dev/null +++ b/packages/plots/src/core/plots/tiny-line/adaptor.ts @@ -0,0 +1,21 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { TinyLineOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/tiny-line/index.ts b/packages/plots/src/core/plots/tiny-line/index.ts new file mode 100644 index 000000000..baee2af4f --- /dev/null +++ b/packages/plots/src/core/plots/tiny-line/index.ts @@ -0,0 +1,37 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { TinyLineOptions } from './type'; + +export type { TinyLineOptions }; + +export class TinyLine extends Plot { + /** 图表类型 */ + public type = 'TinyLine'; + + /** + * 获取 迷你折线图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + children: [{ type: 'line', axis: false }], + autoFit: false, + }; + } + + /** + * 获取 迷你折线图 默认配置 + */ + protected getDefaultOptions() { + return TinyLine.getDefaultOptions(); + } + + /** + * 迷你折线图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/tiny-line/type.ts b/packages/plots/src/core/plots/tiny-line/type.ts new file mode 100644 index 000000000..074e66337 --- /dev/null +++ b/packages/plots/src/core/plots/tiny-line/type.ts @@ -0,0 +1,3 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type TinyLineOptions = Options & BaseOptions; diff --git a/site/examples/statistics/tiny-area/API.en.md b/site/examples/statistics/tiny-area/API.en.md new file mode 100644 index 000000000..0ebf69f2a --- /dev/null +++ b/site/examples/statistics/tiny-area/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/tiny-area/API.zh.md b/site/examples/statistics/tiny-area/API.zh.md new file mode 100644 index 000000000..d38f8f16d --- /dev/null +++ b/site/examples/statistics/tiny-area/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/tiny-area/demo/area-annotation.js b/site/examples/statistics/tiny-area/demo/area-annotation.js new file mode 100644 index 000000000..2f14a6845 --- /dev/null +++ b/site/examples/statistics/tiny-area/demo/area-annotation.js @@ -0,0 +1,56 @@ +import { Tiny } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, +]; + +const DemoArea = () => { + const config = { + data, + width: 480, + height: 80, + padding: 8, + shape: 'smooth', + xField: (_, idx) => idx, + yField: (d) => d, + meta: { + y: { zero: true }, + }, + style: { + fill: 'linear-gradient(-90deg, white 0%, darkgreen 100%)', + fillOpacity: 0.6, + }, + animate: { enter: { type: 'fadeIn' } }, + interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, + annotations: [ + { + type: 'lineY', + data: [data.reduce((acc, cur) => acc + cur, 0) / data.length], + label: { + text: '平均值', + position: 'left', + dx: -10, + style: { textBaseline: 'bottom' }, + }, + + style: { stroke: 'rgba(0, 0, 0)' }, + }, + { + type: 'lineY', + data: [800], + label: { + text: '目标值', + position: 'left', + dx: -10, + style: { textBaseline: 'bottom' }, + }, + style: { stroke: 'rgba(0, 0, 0)' }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/tiny-area/demo/basic.js b/site/examples/statistics/tiny-area/demo/basic.js new file mode 100644 index 000000000..d67fa4bb8 --- /dev/null +++ b/site/examples/statistics/tiny-area/demo/basic.js @@ -0,0 +1,29 @@ +import { Tiny } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoArea = () => { + const config = { + data: [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, + ], + width: 480, + height: 80, + padding: 8, + shape: 'smooth', + xField: (_, idx) => idx, + yField: (d) => d, + meta: { + y: { zero: true }, + }, + style: { + fill: 'linear-gradient(-90deg, white 0%, darkgreen 100%)', + fillOpacity: 0.6, + }, + animate: { enter: { type: 'fadeIn' } }, + interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/tiny-area/demo/filled-area.js b/site/examples/statistics/tiny-area/demo/filled-area.js new file mode 100644 index 000000000..f2f7c3b4e --- /dev/null +++ b/site/examples/statistics/tiny-area/demo/filled-area.js @@ -0,0 +1,29 @@ +import { Tiny } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoArea = () => { + const config = { + data: [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, + ], + width: 480, + height: 80, + padding: 8, + shape: 'smooth', + xField: (_, idx) => idx, + yField: (d) => d, + meta: { + y: { zero: true }, + }, + style: { + fill: '#d6e3fd', + fillOpacity: 0.6, + }, + animate: { enter: { type: 'fadeIn' } }, + interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/tiny-area/demo/meta.json b/site/examples/statistics/tiny-area/demo/meta.json new file mode 100644 index 000000000..8a18efebc --- /dev/null +++ b/site/examples/statistics/tiny-area/demo/meta.json @@ -0,0 +1,32 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "迷你面积", + "en": "tiny area plot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*e7gFTKK4RXwAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "area-annotation.js", + "title": { + "zh": "带辅助信息的迷你面积图", + "en": "Tiny area plot with annotations" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*0zwrR62OaHQAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "filled-area.js", + "title": { + "zh": "平铺填充迷你面积图", + "en": "Filled tiny area plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*tN1MTpkoO8gAAAAAAAAAAAAAARQnAQ" + } + ] +} diff --git a/site/examples/statistics/tiny-area/index.en.md b/site/examples/statistics/tiny-area/index.en.md new file mode 100644 index 000000000..0938028d0 --- /dev/null +++ b/site/examples/statistics/tiny-area/index.en.md @@ -0,0 +1,4 @@ +--- +title: Tiny Area +order: 2 +--- \ No newline at end of file diff --git a/site/examples/statistics/tiny-area/index.zh.md b/site/examples/statistics/tiny-area/index.zh.md new file mode 100644 index 000000000..a6dfeafa6 --- /dev/null +++ b/site/examples/statistics/tiny-area/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 迷你面积图 +order: 2 +--- diff --git a/site/examples/statistics/tiny-column/API.en.md b/site/examples/statistics/tiny-column/API.en.md new file mode 100644 index 000000000..39d4b0aab --- /dev/null +++ b/site/examples/statistics/tiny-column/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/tiny-column/API.zh.md b/site/examples/statistics/tiny-column/API.zh.md new file mode 100644 index 000000000..a76940975 --- /dev/null +++ b/site/examples/statistics/tiny-column/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/tiny-column/demo/basic.js b/site/examples/statistics/tiny-column/demo/basic.js new file mode 100644 index 000000000..5d257cc6e --- /dev/null +++ b/site/examples/statistics/tiny-column/demo/basic.js @@ -0,0 +1,20 @@ +import { Tiny } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoLine = () => { + const config = { + data: [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, + ], + width: 480, + height: 80, + padding: 8, + xField: (_, idx) => idx, + yField: (d) => d, + interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/tiny-column/demo/column-annotation.js b/site/examples/statistics/tiny-column/demo/column-annotation.js new file mode 100644 index 000000000..2d54dc5e6 --- /dev/null +++ b/site/examples/statistics/tiny-column/demo/column-annotation.js @@ -0,0 +1,33 @@ +import { Tiny } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoLine = () => { + const config = { + data: [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, + ], + width: 480, + height: 80, + padding: 8, + xField: (_, idx) => idx, + yField: (d) => d, + interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, + annotations: [ + { + type: 'lineY', + data: [700], + style: { arrow: true, stroke: 'red', lineDash: [2, 2] }, + label: { + text: 'value = 700', + position: 'right', + dx: -10, + style: { textBaseline: 'bottom' }, + }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/tiny-column/demo/meta.json b/site/examples/statistics/tiny-column/demo/meta.json new file mode 100644 index 000000000..152451296 --- /dev/null +++ b/site/examples/statistics/tiny-column/demo/meta.json @@ -0,0 +1,24 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "迷你柱形图", + "en": "tiny column plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*tLNqQpXbZWgAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "column-annotation.js", + "title": { + "zh": "带辅助线的迷你柱形图", + "en": "Tiny column plot with annotation" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*mVxXQZLTI8UAAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/site/examples/statistics/tiny-column/index.en.md b/site/examples/statistics/tiny-column/index.en.md new file mode 100644 index 000000000..424834bdc --- /dev/null +++ b/site/examples/statistics/tiny-column/index.en.md @@ -0,0 +1,4 @@ +--- +title: Tiny column +order: 2 +--- \ No newline at end of file diff --git a/site/examples/statistics/tiny-column/index.zh.md b/site/examples/statistics/tiny-column/index.zh.md new file mode 100644 index 000000000..78405f5ad --- /dev/null +++ b/site/examples/statistics/tiny-column/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 迷你柱形图 +order: 2 +--- \ No newline at end of file diff --git a/site/examples/statistics/tiny-line/API.en.md b/site/examples/statistics/tiny-line/API.en.md new file mode 100644 index 000000000..ebc5b0724 --- /dev/null +++ b/site/examples/statistics/tiny-line/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/tiny-line/API.zh.md b/site/examples/statistics/tiny-line/API.zh.md new file mode 100644 index 000000000..a92a81e40 --- /dev/null +++ b/site/examples/statistics/tiny-line/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/tiny-line/demo/basic.js b/site/examples/statistics/tiny-line/demo/basic.js new file mode 100644 index 000000000..173adb629 --- /dev/null +++ b/site/examples/statistics/tiny-line/demo/basic.js @@ -0,0 +1,31 @@ +import { Tiny } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoLine = () => { + const config = { + data: [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, + ], + width: 480, + height: 120, + shape: 'smooth', + xField: (_, idx) => idx, + yField: (d) => d, + label: { + selector: 'last', + text: (d) => d, + textAlign: 'right', + textBaseline: 'bottom', + dx: -10, + dy: -10, + connector: true, + style: { fontSize: 10 }, + }, + animate: { enter: { type: 'fadeIn' } }, + interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/tiny-line/demo/line-annotation.js b/site/examples/statistics/tiny-line/demo/line-annotation.js new file mode 100644 index 000000000..765f51167 --- /dev/null +++ b/site/examples/statistics/tiny-line/demo/line-annotation.js @@ -0,0 +1,45 @@ +import { Tiny } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; +const data = [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, +]; +const DemoLine = () => { + const config = { + data, + width: 480, + height: 120, + shape: 'smooth', + xField: (_, idx) => idx, + yField: (d) => d, + animate: { enter: { type: 'fadeIn' } }, + interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, + annotations: [ + { + type: 'lineY', + data: [data.reduce((acc, cur) => acc + cur, 0) / data.length], + label: { + text: '平均值', + position: 'left', + dx: -10, + style: { textBaseline: 'bottom' }, + }, + style: { stroke: 'rgba(0, 0, 0)' }, + }, + { + type: 'lineY', + data: [800], + label: { + text: '目标值', + position: 'left', + dx: -10, + style: { textBaseline: 'bottom' }, + }, + style: { stroke: 'rgba(0, 0, 0)' }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/tiny-line/demo/meta.json b/site/examples/statistics/tiny-line/demo/meta.json new file mode 100644 index 000000000..0ddfe5603 --- /dev/null +++ b/site/examples/statistics/tiny-line/demo/meta.json @@ -0,0 +1,24 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "迷你折线图", + "en": "Tiny line plot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*7mspQrtT-VYAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "line-annotation.js", + "title": { + "zh": "带辅助线的迷你折线图", + "en": "Tiny line plot with annotation" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*KShOSrCq0X4AAAAAAAAAAAAAARQnAQ" + } + ] +} diff --git a/site/examples/statistics/tiny-line/index.en.md b/site/examples/statistics/tiny-line/index.en.md new file mode 100644 index 000000000..7e47d640d --- /dev/null +++ b/site/examples/statistics/tiny-line/index.en.md @@ -0,0 +1,4 @@ +--- +title: Tiny line +order: 2 +--- \ No newline at end of file diff --git a/site/examples/statistics/tiny-line/index.zh.md b/site/examples/statistics/tiny-line/index.zh.md new file mode 100644 index 000000000..dd5372e0b --- /dev/null +++ b/site/examples/statistics/tiny-line/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 迷你折线图 +order: 2 +--- From 0d8b38fd4d1fb46762916aa76f4b7c9eedd5bc81 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 28 Aug 2023 14:09:01 +0800 Subject: [PATCH 026/268] feat: label and tooltip support react syntax (#2062) * feat: label and tooltip support react syntax * fix: test --- packages/plots/src/constants/index.ts | 14 +++++++++++ packages/plots/src/hooks/useChart.ts | 31 ++++++++----------------- packages/plots/src/utils/createNode.ts | 16 ++++--------- packages/plots/src/utils/index.ts | 2 +- packages/plots/src/utils/utils.ts | 4 ++-- packages/plots/tests/utils/util.test.ts | 16 ++++++------- 6 files changed, 40 insertions(+), 43 deletions(-) create mode 100644 packages/plots/src/constants/index.ts diff --git a/packages/plots/src/constants/index.ts b/packages/plots/src/constants/index.ts new file mode 100644 index 000000000..6c3827318 --- /dev/null +++ b/packages/plots/src/constants/index.ts @@ -0,0 +1,14 @@ +/** + * @description: 需要支持 JSX 的配置项 + * @example + * 1. config: { label: { render: () =>

xxx
} } + */ +export const JSX_TO_STRING = [ + { path: ['label', 'render'] }, + { + path: ['interaction', 'tooltip', 'render'], + extra: { + className: 'g2-tooltip', + }, + }, +]; diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 172c9dbd4..2386db5a9 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -1,7 +1,8 @@ import React, { useRef, useEffect } from 'react'; import { isEqual, get } from 'lodash-es'; import createNode from '../utils/createNode'; -import { hasPath, isType, deepClone, clone, setPath, uuid } from '../utils'; +import { getPathConfig, isType, deepClone, clone, setPathConfig } from '../utils'; +import { JSX_TO_STRING } from '../constants'; import { CommonConfig, Chart } from '../interface'; export default function useInit(ChartClass: T, config: U) { @@ -41,35 +42,23 @@ export default function useInit(ChartCl return imageName; }; - const reactDomToString = (source: U, path: string[], type?: string, _uuid?: string) => { - const statisticCustomHtml = hasPath(source, path); - setPath(source, path, (...arg: any[]) => { + const reactDomToString = (source: U, path: string[], extra?: object) => { + const statisticCustomHtml = getPathConfig(source, path); + setPathConfig(source, path, (...arg: any[]) => { const statisticDom = isType(statisticCustomHtml, 'Function') ? statisticCustomHtml(...arg) : statisticCustomHtml; if (isType(statisticDom, 'String') || isType(statisticDom, 'Number') || isType(statisticDom, 'HTMLDivElement')) { return statisticDom; } - return createNode(statisticDom, type, _uuid); + return createNode(statisticDom, extra); }); }; const processConfig = () => { - const _uuid = uuid(); - // statistic - if (hasPath(config, ['statistic', 'content', 'customHtml'])) { - reactDomToString(config, ['statistic', 'content', 'customHtml']); - } - if (hasPath(config, ['statistic', 'title', 'customHtml'])) { - reactDomToString(config, ['statistic', 'title', 'customHtml']); - } - // tooltip - if (typeof config.tooltip === 'object') { - if (hasPath(config, ['tooltip', 'container'])) { - reactDomToString(config, ['tooltip', 'container'], 'tooltip', _uuid); - } - if (hasPath(config, ['tooltip', 'customContent'])) { - reactDomToString(config, ['tooltip', 'customContent'], 'tooltip', _uuid); + JSX_TO_STRING.forEach(({ path, extra }) => { + if (getPathConfig(config, path)) { + reactDomToString(config, path, extra); } - } + }); }; useEffect(() => { diff --git a/packages/plots/src/utils/createNode.ts b/packages/plots/src/utils/createNode.ts index a2b01cd2a..2bf3a2366 100644 --- a/packages/plots/src/utils/createNode.ts +++ b/packages/plots/src/utils/createNode.ts @@ -1,18 +1,12 @@ import React from 'react'; import { render } from 'rc-utils'; -const TOOLTIP_CONTAINER_MAPPING = new Map(); - -const createNode = (children: React.ReactElement, type?: string, uuid?: string) => { +const createNode = (children: React.ReactElement, extra?: object) => { let mountPoint = document.createElement('div'); - if (type === 'tooltip') { - mountPoint.setAttribute('data-uuid', uuid); - if (TOOLTIP_CONTAINER_MAPPING.has(uuid)) { - mountPoint = TOOLTIP_CONTAINER_MAPPING.get(uuid); - } else { - TOOLTIP_CONTAINER_MAPPING.set(uuid, mountPoint); - } - mountPoint.className = 'g2-tooltip'; + if (extra) { + Object.keys(extra).forEach((key) => { + mountPoint.setAttribute(key, extra[key]); + }); } render(children, mountPoint); return mountPoint; diff --git a/packages/plots/src/utils/index.ts b/packages/plots/src/utils/index.ts index da6a0238c..d9b4e9e28 100644 --- a/packages/plots/src/utils/index.ts +++ b/packages/plots/src/utils/index.ts @@ -1 +1 @@ -export { isType, clone, hasPath, setPath, deepClone, uuid } from './utils'; +export { isType, clone, getPathConfig, setPathConfig, deepClone, uuid } from './utils'; diff --git a/packages/plots/src/utils/utils.ts b/packages/plots/src/utils/utils.ts index 1f845a901..c8e18d68f 100644 --- a/packages/plots/src/utils/utils.ts +++ b/packages/plots/src/utils/utils.ts @@ -46,7 +46,7 @@ export const deepClone = (source: Object | undefined) => { /** * 存在时返回路径值,不存在时返回 undefined */ -export const hasPath = (source: any, path: string[]) => { +export const getPathConfig = (source: any, path: string[]) => { let current = source; for (let i = 0; i < path.length; i += 1) { if (current?.[path[i]]) { @@ -62,7 +62,7 @@ export const hasPath = (source: any, path: string[]) => { /** * 内部指定 params ,不考虑复杂情况 */ -export const setPath = (source: object, path: string[], value?: any) => { +export const setPathConfig = (source: object, path: string[], value?: any) => { if (!source) { return source; } diff --git a/packages/plots/tests/utils/util.test.ts b/packages/plots/tests/utils/util.test.ts index a29128e24..90e555bd9 100644 --- a/packages/plots/tests/utils/util.test.ts +++ b/packages/plots/tests/utils/util.test.ts @@ -1,4 +1,4 @@ -import { hasPath, clone, isType, setPath } from '../../src/utils'; +import { getPathConfig, clone, isType, setPathConfig } from '../../src/utils'; describe('utils', () => { it('is type', () => { @@ -20,10 +20,10 @@ describe('utils', () => { title: {}, }, }; - expect(hasPath(undefined, ['noPath'])).toBeUndefined(); - expect(hasPath(config, ['statistic', 'content', 'customHtml'])).toBe('html'); - expect(hasPath(config, ['statistic', 'title', 'customHtml'])).toBeUndefined(); - expect(hasPath(config, [])).toEqual(config); + expect(getPathConfig(undefined, ['noPath'])).toBeUndefined(); + expect(getPathConfig(config, ['statistic', 'content', 'customHtml'])).toBe('html'); + expect(getPathConfig(config, ['statistic', 'title', 'customHtml'])).toBeUndefined(); + expect(getPathConfig(config, [])).toEqual(config); }); it('set path', () => { @@ -35,9 +35,9 @@ describe('utils', () => { title: {}, }, }; - expect(setPath(undefined, ['noPath'])).toBeUndefined(); - expect(setPath(config, [])).toEqual(config); - expect(setPath(config, ['statistic', 'title', 'customHtml'], 'title')).toEqual({ + expect(setPathConfig(undefined, ['noPath'])).toBeUndefined(); + expect(setPathConfig(config, [])).toEqual(config); + expect(setPathConfig(config, ['statistic', 'title', 'customHtml'], 'title')).toEqual({ statistic: { content: { customHtml: 'html', From c8a632e1d4d2de07f3b159819a7b9e13636d333f Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 29 Aug 2023 10:25:30 +0800 Subject: [PATCH 027/268] docs: perfecting examples (#2064) --- packages/plots/src/core/base/index.ts | 8 +-- .../src/core/utils/delete-custom-keys.ts | 23 ++++++++ packages/plots/src/core/utils/index.ts | 1 + packages/plots/src/core/utils/transform.ts | 24 +-------- packages/plots/src/hooks/useChart.ts | 14 ++--- site/.dumi/global.ts | 1 + .../statistics/area/demo/basic-gradients.js | 20 ------- .../statistics/area/demo/basic-slider.js | 23 -------- site/examples/statistics/area/demo/basic.js | 29 ++-------- site/examples/statistics/area/demo/meta.json | 16 ------ .../statistics/area/demo/range-spline-area.js | 2 +- .../statistics/column/demo/change-data.js | 32 +++++++++++ .../examples/statistics/column/demo/meta.json | 8 +++ .../statistics/line/demo/line-text.js | 53 +++++++++++++++++++ site/examples/statistics/line/demo/meta.json | 16 ++++++ site/examples/statistics/line/demo/slider.js | 23 ++++++++ site/package.json | 1 + 17 files changed, 171 insertions(+), 123 deletions(-) create mode 100644 packages/plots/src/core/utils/delete-custom-keys.ts delete mode 100644 site/examples/statistics/area/demo/basic-gradients.js delete mode 100644 site/examples/statistics/area/demo/basic-slider.js create mode 100644 site/examples/statistics/column/demo/change-data.js create mode 100644 site/examples/statistics/line/demo/line-text.js create mode 100644 site/examples/statistics/line/demo/slider.js diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 83a89556f..0d0e3884e 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -2,7 +2,7 @@ import EE from '@antv/event-emitter'; import { Chart } from '@antv/g2'; import { bind } from 'size-sensor'; import { CHART_OPTIONS } from '../constants'; -import { merge, omit, pick } from '../utils'; +import { merge, omit, pick, deleteCustomKeys } from '../utils'; import type { Adaptor, Options } from '../types'; @@ -48,7 +48,7 @@ export abstract class Plot extends EE { * G2 options(Spec) 配置 */ private getSpecOptions() { - return omit(this.options, CHART_OPTIONS); + return deleteCustomKeys(omit(this.options, CHART_OPTIONS)); } /** @@ -83,7 +83,7 @@ export abstract class Plot extends EE { /** * 获取默认的 options 配置项,每个组件都可以复写 */ - protected getDefaultOptions(): Partial | void { } + protected getDefaultOptions(): Partial | void {} /** * 绘制 @@ -122,7 +122,7 @@ export abstract class Plot extends EE { * @param options */ public changeData(data: any) { - this.chart.data(data); + this.chart.changeData(data); } /** diff --git a/packages/plots/src/core/utils/delete-custom-keys.ts b/packages/plots/src/core/utils/delete-custom-keys.ts new file mode 100644 index 000000000..943a9f261 --- /dev/null +++ b/packages/plots/src/core/utils/delete-custom-keys.ts @@ -0,0 +1,23 @@ +import { COORDIANTE_OPTIONS } from '../components'; +import { getCustomKeys } from './get-custom-keys'; +import { Options } from '../types'; + +/** + * 统一删除已转换的配置项 + */ +export const deleteCustomKeys = (options: O): O => { + const deleteKeys = getCustomKeys(); + [...deleteKeys, ...COORDIANTE_OPTIONS].forEach((key) => { + delete options[key]; + }); + + options.children.forEach((child) => { + Object.keys(child).forEach((key) => { + if (deleteKeys.includes(key)) { + delete child[key]; + } + }); + }); + + return options; +}; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index ec7dc9ea2..c44e122d6 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -3,3 +3,4 @@ export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; export { getShapeConfigKeys } from './get-shape-config-keys'; +export { deleteCustomKeys } from './delete-custom-keys'; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index 30e258fb7..eb9bdf068 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -1,6 +1,5 @@ -import { COORDIANTE_OPTIONS } from '../components'; import { SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY, CONFIG_SHAPE } from '../constants'; -import { getCustomKeys, omit, pick, isFunction, getShapeConfigKeys, isArray } from './index'; +import { omit, pick, isFunction, getShapeConfigKeys, isArray, deleteCustomKeys } from './index'; import type { Adaptor, Options } from '../types'; @@ -11,8 +10,6 @@ export const transformOptions = (params: Adaptor) => { const { options } = params; const { children = [] } = options; - const deleteKeys = getCustomKeys(); - const getRest = (o: Adaptor['options']) => { const { children, type, data, ...rest } = o; return omit(rest, getShapeConfigKeys()); @@ -117,24 +114,7 @@ export const transformOptions = (params: Adaptor) => { } }); - /** - * 统一删除已转换的配置项 - */ - const deleteCustomKeys = () => { - [...deleteKeys, ...COORDIANTE_OPTIONS].forEach((key) => { - delete options[key]; - }); - - options.children.forEach((child) => { - Object.keys(child).forEach((key) => { - if (deleteKeys.includes(key)) { - delete child[key]; - } - }); - }); - }; - - deleteCustomKeys(); + deleteCustomKeys(options); return params; }; diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 2386db5a9..1655125ec 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -71,20 +71,12 @@ export default function useInit(ChartCl changeData = isEqual(currentConfig, inputConfig); } chartOptions.current = deepClone(config); - if (changeData && get(config, 'chartType') !== 'Mix') { - let changeType = 'data'; - const typeMaps = ['percent']; // 特殊类型的图表 data 字段,例如 RingProgress - const currentKeys = Object.keys(config); - typeMaps.forEach((type: string) => { - if (currentKeys.includes(type)) { - changeType = type; - } - }); - chart.current.changeData(config?.[changeType] || []); - chart.current.render(); + if (changeData) { + chart.current.changeData(get(config, 'data')); } else { processConfig(); chart.current.update(config); + chart.current.render(); } } }, [config]); diff --git a/site/.dumi/global.ts b/site/.dumi/global.ts index add89791d..55288e829 100644 --- a/site/.dumi/global.ts +++ b/site/.dumi/global.ts @@ -3,6 +3,7 @@ if (window) { (window as any).antd = require('antd'); (window as any).react = require('react'); (window as any).reactDom = require('react-dom'); + (window as any).fecha = require('fecha'); /** 不要使用 link, react-dom 冲突 */ (window as any).plots = require('@ant-design/plots'); } diff --git a/site/examples/statistics/area/demo/basic-gradients.js b/site/examples/statistics/area/demo/basic-gradients.js deleted file mode 100644 index b6a7238e9..000000000 --- a/site/examples/statistics/area/demo/basic-gradients.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Area } from '@ant-design/plots'; - -const DemoArea = () => { - const config = { - data: { - type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/1d565782-dde4-4bb6-8946-ea6a38ccf184.json', - }, - xField: 'Date', - yField: 'scales', - style: { - fill: 'l(270) 0:#ffffff 0.5:#7ec2f3 1:#1890ff', - }, - }; - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/area/demo/basic-slider.js b/site/examples/statistics/area/demo/basic-slider.js deleted file mode 100644 index dd99e2cb9..000000000 --- a/site/examples/statistics/area/demo/basic-slider.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Area } from '@ant-design/plots'; - -const DemoArea = () => { - const config = { - data: { - type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/1d565782-dde4-4bb6-8946-ea6a38ccf184.json', - }, - xField: 'Date', - yField: 'scales', - animation: false, - slider: { - x: { - values: [0.1, 0.9], - }, - }, - }; - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/area/demo/basic.js b/site/examples/statistics/area/demo/basic.js index 2175f19b5..d6fc40cd5 100644 --- a/site/examples/statistics/area/demo/basic.js +++ b/site/examples/statistics/area/demo/basic.js @@ -6,33 +6,10 @@ const DemoArea = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/1d565782-dde4-4bb6-8946-ea6a38ccf184.json', + value: 'https://assets.antv.antgroup.com/g2/aapl.json', }, - xField: 'Date', - yField: 'scales', - annotations: [ - { - type: 'text', - data: ['2014-03', 1834], - style: { - text: '2014-03, 受比特币影响,blockchain 1834', - wordWrap: true, - wordWrapWidth: 164, - dx: -174, - dy: 30, - fill: '#2C3542', - fillOpacity: 0.65, - fontSize: 10, - background: true, - backgroundRadius: 2, - connector: true, - startMarker: true, - startMarkerFill: '#2C3542', - startMarkerFillOpacity: 0.65, - }, - tooltip: false, - }, - ], + xField: (d) => new Date(d.date), + yField: 'close', }; return ; diff --git a/site/examples/statistics/area/demo/meta.json b/site/examples/statistics/area/demo/meta.json index 50f32471f..0af1ede60 100644 --- a/site/examples/statistics/area/demo/meta.json +++ b/site/examples/statistics/area/demo/meta.json @@ -12,22 +12,6 @@ }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ZxtyTrhyN4sAAAAAAAAAAAAADmJ7AQ/original" }, - { - "filename": "basic-gradients.js", - "title": { - "zh": "渐变色面积图", - "en": "Gradients area plot" - }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*4dnrSbNeOGQAAAAAAAAAAAAAARQnAQ" - }, - { - "filename": "basic-slider.js", - "title": { - "zh": "带缩略轴面积图", - "en": "Area plot with slider" - }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*xXtxRLa2CHoAAAAAAAAAAAAAARQnAQ" - }, { "filename": "missing-data-area.js", "title": { diff --git a/site/examples/statistics/area/demo/range-spline-area.js b/site/examples/statistics/area/demo/range-spline-area.js index c69a777d9..817cf5018 100644 --- a/site/examples/statistics/area/demo/range-spline-area.js +++ b/site/examples/statistics/area/demo/range-spline-area.js @@ -26,7 +26,7 @@ const DemoArea = () => { y: { title: false }, }, meta: { - y: { type: 'linear', tickCount: 10 }, + x: { type: 'linear', tickCount: 10 }, }, pointConfig: { yField: 'v2', diff --git a/site/examples/statistics/column/demo/change-data.js b/site/examples/statistics/column/demo/change-data.js new file mode 100644 index 000000000..c2d2b843e --- /dev/null +++ b/site/examples/statistics/column/demo/change-data.js @@ -0,0 +1,32 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DATA = [1, 2, 3, 4, 5, 6, 7, 8]; + +const DemoColumn = () => { + const [data, setData] = React.useState(DATA); + + React.useEffect(() => { + const time = setInterval(() => { + setData([ + ...DATA.sort(() => { + return Math.random() - 0.5; + }), + ]); + }, 2000); + return () => clearInterval(time); + }, []); + + const config = { + data: data.map((value) => ({ + index: value.toString(), + value, + })), + xField: 'index', + yField: 'value', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index 26c9a0a16..97aaf4801 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -43,6 +43,14 @@ "en": "Stacked Column Chart" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*GwDUQbVt9XYAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "change-data.js", + "title": { + "zh": "数据更新", + "en": "Change Data" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*b5Q8R6DHJZMAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/line/demo/line-text.js b/site/examples/statistics/line/demo/line-text.js new file mode 100644 index 000000000..b1d62e019 --- /dev/null +++ b/site/examples/statistics/line/demo/line-text.js @@ -0,0 +1,53 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Line } from '@ant-design/plots'; + +const DemoArea = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antvdemo/assets/data/blockchain.json', + transform: [ + { + type: 'fold', + fields: ['blockchain', 'nlp'], + key: 'type', + value: 'value', + }, + ], + }, + xField: (d) => new Date(d.date), + yField: 'value', + colorField: 'type', + axis: { + x: { labelAutoHide: 'greedy' }, + }, + annotations: [ + { + type: 'text', + data: [new Date('2017-12-17'), 100], + style: { + text: '2014-03, 受比特币影响,blockchain 1834', + wordWrap: true, + wordWrapWidth: 164, + dx: -174, + dy: 30, + fill: '#2C3542', + fillOpacity: 0.65, + fontSize: 10, + background: true, + backgroundRadius: 2, + connector: true, + startMarker: true, + startMarkerFill: '#2C3542', + startMarkerFillOpacity: 0.65, + }, + tooltip: false, + }, + ], + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/line/demo/meta.json b/site/examples/statistics/line/demo/meta.json index aa2eacbf5..8a06e8cd8 100644 --- a/site/examples/statistics/line/demo/meta.json +++ b/site/examples/statistics/line/demo/meta.json @@ -59,6 +59,22 @@ "en": "Threshold Line Chart" }, "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*YUrlS4AWYFkAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "line-text.js", + "title": { + "zh": "文本标记的折线图", + "en": "Line, Text Annotation" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*pQq2S7Ns2MUAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "slider.js", + "title": { + "zh": "缩略轴", + "en": "Slider" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*xZAVSKcWzrwAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/line/demo/slider.js b/site/examples/statistics/line/demo/slider.js new file mode 100644 index 000000000..4dba5c75f --- /dev/null +++ b/site/examples/statistics/line/demo/slider.js @@ -0,0 +1,23 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Line } from '@ant-design/plots'; +import { format } from 'fecha'; + +const DemoLine = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/551d80c6-a6be-4f3c-a82a-abd739e12977.csv', + }, + xField: 'date', + yField: 'close', + axis: { x: { title: false, size: 40 }, y: { title: false, size: 36 } }, + slider: { + x: { labelFormatter: (d) => format(d, 'YYYY/M/D') }, + y: { labelFormatter: '~s' }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/package.json b/site/package.json index 73aee932c..f4983742a 100644 --- a/site/package.json +++ b/site/package.json @@ -33,6 +33,7 @@ "@types/react-dom": "^16.9.13", "cross-env": "^7.0.3", "dumi": "^2.1.11", + "fecha": "^4.2.3", "gh-pages": "^2.1.1", "typedoc": "^0.17.6", "typedoc-plugin-markdown": "^2.2.11", From 4455e28a148735bd7ad7308f050676a669f90469 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 29 Aug 2023 11:24:43 +0800 Subject: [PATCH 028/268] chore: rename config (#2066) --- packages/plots/src/core/constants/index.ts | 20 +++++-------------- .../statistics/area/demo/area-difference.js | 2 +- .../statistics/area/demo/area-gradient.js | 2 +- .../statistics/area/demo/cascade-area.js | 2 +- .../statistics/area/demo/range-spline-area.js | 4 ++-- .../statistics/area/demo/step-area.js | 2 +- 6 files changed, 11 insertions(+), 21 deletions(-) diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 8f794dc95..45e5d6ca6 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -119,7 +119,7 @@ export const TRANSFORM_OPTION_KEY = { * @title 将 CONFIG_SHAPE 中的配置项, 转换为 children * @example * 1. annotations: [{type: 'text'}] -> children: [{type: 'text'}] - * 2. lineConfig: {shape: 'hvh'}-> children: [{type: 'line', style: { shape: 'hvh'}}] + * 2. line: {shape: 'hvh'}-> children: [{type: 'line', style: { shape: 'hvh'}}] */ const EXTEND_KEYS = [ 'xField', @@ -137,30 +137,20 @@ export const CONFIG_SHAPE = [ extend_keys: [], }, { - key: 'lineConfig', + key: 'line', type: 'line', extend_keys: EXTEND_KEYS, }, { - key: 'pointConfig', + key: 'point', type: 'point', extend_keys: EXTEND_KEYS, }, { - key: 'areaConfig', + key: 'area', type: 'area', extend_keys: EXTEND_KEYS, - }, - { - key: 'intervalConfig', - type: 'interval', - extend_keys: EXTEND_KEYS, - }, - { - key: 'polygonConfig', - type: 'polygon', - extend_keys: EXTEND_KEYS, - }, + } ]; /** diff --git a/site/examples/statistics/area/demo/area-difference.js b/site/examples/statistics/area/demo/area-difference.js index 896a3309c..e3f58d8e5 100644 --- a/site/examples/statistics/area/demo/area-difference.js +++ b/site/examples/statistics/area/demo/area-difference.js @@ -24,7 +24,7 @@ const DemoArea = () => { meta: { color: { range: ['#67a9cf', '#ef8a62'] }, }, - lineConfig: { + line: { yField: 'San Francisco', shape: 'hvh', style: { diff --git a/site/examples/statistics/area/demo/area-gradient.js b/site/examples/statistics/area/demo/area-gradient.js index d2e54ee5b..d688bed80 100644 --- a/site/examples/statistics/area/demo/area-gradient.js +++ b/site/examples/statistics/area/demo/area-gradient.js @@ -17,7 +17,7 @@ const DemoArea = () => { axis: { y: { labelFormatter: '~s' }, }, - lineConfig: { + line: { style: { stroke: 'darkgreen', strokeWidth: 2, diff --git a/site/examples/statistics/area/demo/cascade-area.js b/site/examples/statistics/area/demo/cascade-area.js index afb549bf3..f8c5e1136 100644 --- a/site/examples/statistics/area/demo/cascade-area.js +++ b/site/examples/statistics/area/demo/cascade-area.js @@ -21,7 +21,7 @@ const DemoArea = () => { y: { labelFormatter: '~s' }, }, tooltip: { channel: 'y', valueFormatter: '.2f' }, - lineConfig: { + line: { shape: 'smooth', stack: { orderBy: 'maxIndex', diff --git a/site/examples/statistics/area/demo/range-spline-area.js b/site/examples/statistics/area/demo/range-spline-area.js index 817cf5018..3f38dae0b 100644 --- a/site/examples/statistics/area/demo/range-spline-area.js +++ b/site/examples/statistics/area/demo/range-spline-area.js @@ -28,12 +28,12 @@ const DemoArea = () => { meta: { x: { type: 'linear', tickCount: 10 }, }, - pointConfig: { + point: { yField: 'v2', shape: 'point', sizeField: 2, }, - lineConfig: { + line: { yField: 'v3', shape: 'smooth', style: { diff --git a/site/examples/statistics/area/demo/step-area.js b/site/examples/statistics/area/demo/step-area.js index 401152a45..280fa7ae5 100644 --- a/site/examples/statistics/area/demo/step-area.js +++ b/site/examples/statistics/area/demo/step-area.js @@ -35,7 +35,7 @@ const DemoArea = () => { axis: { y: { labelFormatter: '~s' }, }, - lineConfig: { + line: { shape: 'hvh', }, }; From e5a6e48b304f3ef37e4ed41648adddfff8ffc90a Mon Sep 17 00:00:00 2001 From: Ancyloce <103255835+ancyloce@users.noreply.github.com> Date: Tue, 29 Aug 2023 14:33:55 +0800 Subject: [PATCH 029/268] feat: Added a few more examples of pie chart. (#2067) --- packages/plots/src/core/plots/pie/index.ts | 4 +- .../statistics/pie/demo/basic-donut.js | 36 +++++++++++++++ site/examples/statistics/pie/demo/basic.js | 11 +++-- .../statistics/pie/demo/custom-label.js | 44 +++++++++++++++++++ site/examples/statistics/pie/demo/doughnut.js | 40 +++++++++++++++++ site/examples/statistics/pie/demo/meta.json | 44 ++++++++++++++++++- .../statistics/pie/demo/outer-label.js | 9 ++-- .../statistics/pie/demo/pie-texture.js | 34 ++++++++++++++ .../statistics/pie/demo/quarter-circle.js | 44 +++++++++++++++++++ .../statistics/pie/demo/spider-label.js | 15 +++++-- 10 files changed, 266 insertions(+), 15 deletions(-) create mode 100644 site/examples/statistics/pie/demo/basic-donut.js create mode 100644 site/examples/statistics/pie/demo/custom-label.js create mode 100644 site/examples/statistics/pie/demo/doughnut.js create mode 100644 site/examples/statistics/pie/demo/pie-texture.js create mode 100644 site/examples/statistics/pie/demo/quarter-circle.js diff --git a/packages/plots/src/core/plots/pie/index.ts b/packages/plots/src/core/plots/pie/index.ts index 0f25695f3..3138ad6a4 100644 --- a/packages/plots/src/core/plots/pie/index.ts +++ b/packages/plots/src/core/plots/pie/index.ts @@ -15,9 +15,11 @@ export class Pie extends Plot { */ static getDefaultOptions(): Partial { return { + type: 'view', children: [{ type: 'interval' }], - transform: [{ type: 'stackY' }], coordinate: { type: 'theta' }, + transform: [{ type: 'stackY', reverse: true }], + animate: { enter: { type: 'waveIn' } }, }; } diff --git a/site/examples/statistics/pie/demo/basic-donut.js b/site/examples/statistics/pie/demo/basic-donut.js new file mode 100644 index 000000000..9135390b4 --- /dev/null +++ b/site/examples/statistics/pie/demo/basic-donut.js @@ -0,0 +1,36 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Pie } from '@ant-design/plots'; + +const DemoPie = () => { + const config = { + data: [ + { type: '分类一', value: 27 }, + { type: '分类二', value: 25 }, + { type: '分类三', value: 18 }, + { type: '分类四', value: 15 }, + { type: '分类五', value: 10 }, + { type: '其他', value: 5 }, + ], + angleField: 'value', + colorField: 'type', + paddingRight: 80, + innerRadius: 0.6, + label: { + text: 'value', + style: { + fontWeight: 'bold', + }, + }, + legend: { + color: { + title: false, + position: 'right', + rowPadding: 5, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/pie/demo/basic.js b/site/examples/statistics/pie/demo/basic.js index 9910f9457..f55484fe5 100644 --- a/site/examples/statistics/pie/demo/basic.js +++ b/site/examples/statistics/pie/demo/basic.js @@ -14,16 +14,19 @@ const DemoPie = () => { ], angleField: 'value', colorField: 'type', + paddingRight: 80, label: { - text: d => `${d.value}%`, + text: 'value', style: { fontWeight: 'bold', - } + }, }, legend: { color: { - position: "right" - } + title: false, + position: 'right', + rowPadding: 5, + }, }, }; return ; diff --git a/site/examples/statistics/pie/demo/custom-label.js b/site/examples/statistics/pie/demo/custom-label.js new file mode 100644 index 000000000..54489ab23 --- /dev/null +++ b/site/examples/statistics/pie/demo/custom-label.js @@ -0,0 +1,44 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Pie } from '@ant-design/plots'; + +const data = [ + { type: '分类一', value: 27 }, + { type: '分类二', value: 25 }, + { type: '分类三', value: 18 }, + { type: '分类四', value: 15 }, + { type: '分类五', value: 10 }, + { type: '其他', value: 5 }, +]; + +const customLabel = (_, datum) => ( +
+
+
+ {datum.type} : {datum.value} +
+
+); + +const DemoPie = () => { + const config = { + data, + angleField: 'value', + colorField: 'type', + label: { + text: 'type', + position: 'outside', + textAlign: 'center', + transform: [ + { + type: 'contrastReverse', + }, + ], + render: customLabel, + }, + legend: false, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/pie/demo/doughnut.js b/site/examples/statistics/pie/demo/doughnut.js new file mode 100644 index 000000000..0ad744436 --- /dev/null +++ b/site/examples/statistics/pie/demo/doughnut.js @@ -0,0 +1,40 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Pie } from '@ant-design/plots'; + +const DemoPie = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/79fd9317-d2af-4bc4-90fa-9d07357398fd.csv', + }, + angleField: 'value', + colorField: 'name', + legend: false, + innerRadius: 0.6, + labels: [ + { text: 'name', style: { fontSize: 10, fontWeight: 'bold' } }, + { + text: (d, i, data) => (i < data.length - 3 ? d.value : ''), + style: { + fontSize: 9, + dy: 12, + }, + }, + ], + style: { + stroke: '#fff', + inset: 1, + radius: 10, + }, + scale: { + color: { + palette: 'spectral', + offset: (t) => t * 0.8 + 0.1, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/pie/demo/meta.json b/site/examples/statistics/pie/demo/meta.json index 29f452995..68cf58dd9 100644 --- a/site/examples/statistics/pie/demo/meta.json +++ b/site/examples/statistics/pie/demo/meta.json @@ -15,7 +15,7 @@ { "filename": "outer-label.js", "title": { - "zh": "饼图-外部图形标签", + "zh": "饼图 - 外部图形标签", "en": "Pie plot - outer label" }, "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*ZztJQa4RLwoAAAAAAAAAAABkARQnAQ" @@ -23,10 +23,50 @@ { "filename": "spider-label.js", "title": { - "zh": "饼图-蜘蛛布局标签", + "zh": "饼图 - 蜘蛛布局标签", "en": "Pie plot - spider label" }, "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*QyXPRK-URmUAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "custom-label.js", + "title": { + "zh": "饼图 - 自定义标签", + "en": "Pie plot - custom label" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/2SfPlGTkFv/0d1d3e53-59f3-4ecb-a0ec-e0b9609e864c.png" + }, + { + "filename": "quarter-circle.js", + "title": { + "zh": "饼图 - 四分之一圆", + "en": "Pie plot - Quarter circle pie" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/bzXrKEyk6T/f334d3fa-4494-41b7-9260-c469588555a6.png" + }, + { + "filename": "pie-texture.js", + "title": { + "zh": "饼图 - 带纹理的饼图", + "en": "Pie plot - Pie plot fill with texture" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/SUQSZupP5X/c2076423-44ca-41d2-b8fa-a221b6a8fcf2.png" + }, + { + "filename": "basic-donut.js", + "title": { + "zh": "基础环图", + "en": "Basic donut plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*65WIQK5T4c8AAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "doughnut.js", + "title": { + "zh": "甜甜圈图", + "en": "Pie plot - Donut Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*wu8VQIWJJ50AAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/pie/demo/outer-label.js b/site/examples/statistics/pie/demo/outer-label.js index 1b7f5ed5b..55d8a1fd0 100644 --- a/site/examples/statistics/pie/demo/outer-label.js +++ b/site/examples/statistics/pie/demo/outer-label.js @@ -12,18 +12,19 @@ const DemoPie = () => { { type: '分类五', value: 10 }, { type: '其他', value: 5 }, ], - appendPadding: 10, angleField: 'value', colorField: 'type', - radius: 0.8, + paddingRight: 80, label: { text: 'value', position: 'outside', }, legend: { color: { - position: "right" - } + title: false, + position: 'right', + rowPadding: 5, + }, }, }; return ; diff --git a/site/examples/statistics/pie/demo/pie-texture.js b/site/examples/statistics/pie/demo/pie-texture.js new file mode 100644 index 000000000..6d29a2de4 --- /dev/null +++ b/site/examples/statistics/pie/demo/pie-texture.js @@ -0,0 +1,34 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Pie } from '@ant-design/plots'; + +const DemoPie = () => { + const config = { + data: [ + { sex: '男', sold: 0.45 }, + { sex: '女', sold: 0.55 }, + ], + angleField: 'sold', + colorField: 'sex', + legend: false, + label: { + text: ({ sex, sold }) => { + return `${sex}: ${parseInt(sold * 100)}%`; + }, + fill: '#fff', + fontSize: 18, + }, + style: { + padding: 10, + fill: ({ sex }) => { + if (sex === '男') { + return 'p(a)https://gw.alipayobjects.com/zos/antfincdn/FioHMFgIld/pie-wenli1.png'; + } + return 'p(a)https://gw.alipayobjects.com/zos/antfincdn/Ye2DqRx%2627/pie-wenli2.png'; + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/pie/demo/quarter-circle.js b/site/examples/statistics/pie/demo/quarter-circle.js new file mode 100644 index 000000000..0a810f994 --- /dev/null +++ b/site/examples/statistics/pie/demo/quarter-circle.js @@ -0,0 +1,44 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Pie } from '@ant-design/plots'; + +const DemoPie = () => { + const config = { + data: [ + { type: '分类一', value: 27 }, + { type: '分类二', value: 25 }, + { type: '分类三', value: 18 }, + { type: '分类四', value: 15 }, + { type: '分类五', value: 10 }, + { type: '其他', value: 5 }, + ], + appendPadding: 10, + angleField: 'value', + colorField: 'type', + startAngle: Math.PI, + endAngle: Math.PI * 1.5, + label: { + text: 'type', + style: { + fontSize: 14, + fontWeight: 'bold', + transform: 'rotate(40)', + }, + transform: [ + { + type: 'overlapHide', + }, + ], + }, + legend: { + color: { + title: false, + position: 'right', + rowPadding: 5, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/pie/demo/spider-label.js b/site/examples/statistics/pie/demo/spider-label.js index 11b62d3a9..70809ea49 100644 --- a/site/examples/statistics/pie/demo/spider-label.js +++ b/site/examples/statistics/pie/demo/spider-label.js @@ -13,18 +13,25 @@ const data = [ const DemoPie = () => { const config = { data, - appendPadding: 10, angleField: 'value', colorField: 'type', - radius: 0.75, + inset: 5, + paddingRight: 80, label: { text: (d) => `${d.type}\n ${d.value}`, position: 'spider', + transform: [ + { + type: 'overlapDodgeY', + }, + ], }, legend: { color: { - position: "right" - } + title: false, + position: 'right', + rowPadding: 5, + }, }, }; return ; From bda8633406b4085624041081a36d18b1a17830b6 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Tue, 29 Aug 2023 18:16:15 +0800 Subject: [PATCH 030/268] =?UTF-8?q?fix(scatter):=20shape=20=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E5=A4=8D=EF=BC=8C=E4=BB=A5=E5=8F=8A=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20annotations=20(#2068)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plots/src/core/plots/scatter/index.ts | 2 -- site/examples/statistics/scatter/demo/point-aggregated.js | 5 ++++- site/examples/statistics/scatter/demo/point-bubble.js | 1 + site/examples/statistics/scatter/demo/point-dot.js | 6 ++++-- site/examples/statistics/scatter/demo/point-log.js | 1 + site/examples/statistics/scatter/demo/point-sequential.js | 1 + site/examples/statistics/scatter/demo/point-stacked.js | 1 + 7 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/plots/src/core/plots/scatter/index.ts b/packages/plots/src/core/plots/scatter/index.ts index ab6ad70df..8f0dafcfa 100644 --- a/packages/plots/src/core/plots/scatter/index.ts +++ b/packages/plots/src/core/plots/scatter/index.ts @@ -17,8 +17,6 @@ export class Scatter extends Plot { static getDefaultOptions(): Partial { return { children: [{ type: 'point' }], - // 默认为 point 有 'line' 的情况 - shape: 'point', }; } diff --git a/site/examples/statistics/scatter/demo/point-aggregated.js b/site/examples/statistics/scatter/demo/point-aggregated.js index 6923d073e..ea4ed0bca 100644 --- a/site/examples/statistics/scatter/demo/point-aggregated.js +++ b/site/examples/statistics/scatter/demo/point-aggregated.js @@ -4,6 +4,9 @@ import ReactDOM from 'react-dom'; const DemoScatter = () => { const config = { + autoFit: false, + height: 240, + inset: 10, data: { type: "fetch", value: "https://assets.antv.antgroup.com/g2/commits.json", @@ -13,7 +16,7 @@ const DemoScatter = () => { yField: (d) => new Date(d.time).getUTCDay(), sizeField: "count", colorField: "count", - shape: "point", + shapeField: "point", transform: [{ type: "group", size: "sum" }, { type: "sortY" }], meta: { y: { type: "point" } }, axis: { diff --git a/site/examples/statistics/scatter/demo/point-bubble.js b/site/examples/statistics/scatter/demo/point-bubble.js index 1973675b1..a949e0142 100644 --- a/site/examples/statistics/scatter/demo/point-bubble.js +++ b/site/examples/statistics/scatter/demo/point-bubble.js @@ -18,6 +18,7 @@ const DemoScatter = () => { yField: 'Entity', sizeField: 'Deaths', colorField: 'Entity', + shapeField: 'point', scale: { size: { rangeMax: 35, diff --git a/site/examples/statistics/scatter/demo/point-dot.js b/site/examples/statistics/scatter/demo/point-dot.js index 1b9653625..849638ac2 100644 --- a/site/examples/statistics/scatter/demo/point-dot.js +++ b/site/examples/statistics/scatter/demo/point-dot.js @@ -17,14 +17,16 @@ const DemoScatter = () => { xField: 'state', yField: 'population', colorField: 'age', + shapeField: "point", meta: { color: { palette: "spectral" } }, tooltip: { title: "state", items: ["population"] }, annotations: [ { type: "link", - encode: { x: "state", y: "population" }, + xField: "state", + yField: "population", transform: [{ type: "groupX", y: "min", y1: "max" }], - scale: { y: { labelFormatter: ".0%" } }, + meta: { y: { labelFormatter: ".0%" } }, style: { stroke: "#000" }, tooltip: false, }, diff --git a/site/examples/statistics/scatter/demo/point-log.js b/site/examples/statistics/scatter/demo/point-log.js index a641e8ee0..c621bcb84 100644 --- a/site/examples/statistics/scatter/demo/point-log.js +++ b/site/examples/statistics/scatter/demo/point-log.js @@ -13,6 +13,7 @@ const DemoScatter = () => { yField: 'LifeExpectancy', sizeField: 'Population', colorField: 'continent', + shapeField: 'point', meta: { size: { type: "log", range: [4, 20] }, }, diff --git a/site/examples/statistics/scatter/demo/point-sequential.js b/site/examples/statistics/scatter/demo/point-sequential.js index 9152c31ba..ad1e06fab 100644 --- a/site/examples/statistics/scatter/demo/point-sequential.js +++ b/site/examples/statistics/scatter/demo/point-sequential.js @@ -13,6 +13,7 @@ const DemoScatter = () => { xField: 'date', yField: 'value', colorField: 'value', + shapeField: 'point', style: { stroke: '#000', strokeOpacity: 0.2, diff --git a/site/examples/statistics/scatter/demo/point-stacked.js b/site/examples/statistics/scatter/demo/point-stacked.js index 4a8956766..a3d8dc01d 100644 --- a/site/examples/statistics/scatter/demo/point-stacked.js +++ b/site/examples/statistics/scatter/demo/point-stacked.js @@ -17,6 +17,7 @@ const DemoScatter = () => { xField: (d) => 2021 - d.birth, yField: (d) => (d.gender === 'M' ? 1 : -1), colorField: 'gender', + shapeField: 'point', meta: { x: { nice: true }, }, From 0808bbcf6ae13a4626cf7e821b0d5d6985bc6986 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 29 Aug 2023 20:12:47 +0800 Subject: [PATCH 031/268] feat: html render (#2071) --- packages/plots/package.json | 9 ++++---- packages/plots/src/core/base/index.ts | 16 +++++++++++++ packages/plots/src/core/shape/html.ts | 32 ++++++++++++++++++++++++++ packages/plots/src/core/shape/index.ts | 2 ++ 4 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 packages/plots/src/core/shape/html.ts create mode 100644 packages/plots/src/core/shape/index.ts diff --git a/packages/plots/package.json b/packages/plots/package.json index b0308020d..d5410a48e 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -37,15 +37,16 @@ }, "dependencies": { "@antv/event-emitter": "^0.1.3", + "@antv/g": "^5.18.14", "@antv/g2": "^5.0.16", - "size-sensor": "^1.0.1", + "rc-utils": "workspace:*", "react-content-loader": "^5.0.4", - "rc-utils": "workspace:*" + "size-sensor": "^1.0.1" }, "peerDependencies": { + "lodash-es": "^4.17.21", "react": ">=16.8.4", - "react-dom": ">=16.8.4", - "lodash-es": "^4.17.21" + "react-dom": ">=16.8.4" }, "sideEffects": false, "license": "MIT", diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 0d0e3884e..e919d5d00 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -3,6 +3,7 @@ import { Chart } from '@antv/g2'; import { bind } from 'size-sensor'; import { CHART_OPTIONS } from '../constants'; import { merge, omit, pick, deleteCustomKeys } from '../utils'; +import { HTMLRender, HTMLRenderOptions } from '../shape'; import type { Adaptor, Options } from '../types'; @@ -20,6 +21,9 @@ export abstract class Plot extends EE { /** resizer unbind */ private unbind: () => void; + /** G2 chart 实例 */ + public htmlRender: HTMLRender; + constructor(container: string | HTMLElement, options: O) { super(); this.container = typeof container === 'string' ? document.getElementById(container) : container; @@ -100,6 +104,16 @@ export abstract class Plot extends EE { this.bindSizeSensor(); } + /** + * html + * @param options + */ + public html(options: HTMLRenderOptions) { + // @ts-ignore + const { canvas } = this.chart._context; + this.htmlRender = new HTMLRender(canvas, options); + } + /** * 更新 * @param options @@ -140,6 +154,8 @@ export abstract class Plot extends EE { public destroy() { // 取消 size-sensor 的绑定 this.unbindSizeSensor(); + // html 的销毁 + this.htmlRender?.destroy(); // G2 的销毁 this.chart.destroy(); // 清空已经绑定的事件 diff --git a/packages/plots/src/core/shape/html.ts b/packages/plots/src/core/shape/html.ts new file mode 100644 index 000000000..0b66729ab --- /dev/null +++ b/packages/plots/src/core/shape/html.ts @@ -0,0 +1,32 @@ +import { HTML, canvas as GCanvas } from '@antv/g'; + +export type HTMLRenderOptions = { + x?: number; + y?: number; + innerHTML: string; +}; + +export class HTMLRender { + /** canvas 实例 */ + public canvas: GCanvas; + /** 配置 */ + public options: HTMLRenderOptions; + + constructor(canvas: GCanvas, options: HTMLRenderOptions) { + this.canvas = canvas; + this.options = options; + this.init(); + } + public init() { + const html = new HTML({ + style: { + x: 0, + y: 0, + ...this.options, + }, + }); + this.canvas.appendChild(html); + } + public update(options: HTMLRenderOptions) {} + public destroy() {} +} diff --git a/packages/plots/src/core/shape/index.ts b/packages/plots/src/core/shape/index.ts new file mode 100644 index 000000000..cd231597c --- /dev/null +++ b/packages/plots/src/core/shape/index.ts @@ -0,0 +1,2 @@ +export { HTMLRender } from './html'; +export type { HTMLRenderOptions } from './html'; From d7fa8c6d27e94c50d106ee6ca573fe56714ce0dc Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 29 Aug 2023 20:16:02 +0800 Subject: [PATCH 032/268] fix: down image api (#2070) --- packages/plots/src/hooks/useChart.ts | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 1655125ec..72d248e1c 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -5,7 +5,7 @@ import { getPathConfig, isType, deepClone, clone, setPathConfig } from '../utils import { JSX_TO_STRING } from '../constants'; import { CommonConfig, Chart } from '../interface'; -export default function useInit(ChartClass: T, config: U) { +export default function useChart(ChartClass: T, config: U) { const chart = useRef(); const chartOptions = useRef(); const container = useRef(null); @@ -17,7 +17,8 @@ export default function useInit(ChartCl * @param {number} encoderOptions A Number between 0 and 1 indicating the image quality */ const toDataURL = (type = 'image/png', encoderOptions?: number) => { - return chart.current?.chart.canvas.cfg.el.toDataURL(type, encoderOptions); + const canvas = container.current?.getElementsByTagName('canvas')[0]; + return canvas?.toDataURL(type, encoderOptions); }; /** @@ -31,7 +32,7 @@ export default function useInit(ChartCl if (name.indexOf('.') === -1) { imageName = `${name}.${type.split('/')[1]}`; } - const base64 = chart.current?.chart.canvas.cfg.el.toDataURL(type, encoderOptions); + const base64 = toDataURL(type, encoderOptions); let a: HTMLAnchorElement | null = document.createElement('a'); a.href = base64; a.download = imageName; @@ -93,12 +94,8 @@ export default function useInit(ChartCl ...config, }); - chartInstance.toDataURL = (type?: string, encoderOptions?: number) => { - return toDataURL(type, encoderOptions); - }; - chartInstance.downloadImage = (name?: string, type?: string, encoderOptions?: number) => { - return downloadImage(name, type, encoderOptions); - }; + chartInstance.toDataURL = toDataURL; + chartInstance.downloadImage = downloadImage; chartInstance.render(); chart.current = clone(chartInstance) as T; if (onReady) { From af8c536f320383ecd4bbbce1e9ec4656ba386d34 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 30 Aug 2023 10:33:09 +0800 Subject: [PATCH 033/268] Revert "feat: html render (#2071)" (#2072) This reverts commit 0808bbcf6ae13a4626cf7e821b0d5d6985bc6986. --- packages/plots/package.json | 9 ++++---- packages/plots/src/core/base/index.ts | 16 ------------- packages/plots/src/core/shape/html.ts | 32 -------------------------- packages/plots/src/core/shape/index.ts | 2 -- 4 files changed, 4 insertions(+), 55 deletions(-) delete mode 100644 packages/plots/src/core/shape/html.ts delete mode 100644 packages/plots/src/core/shape/index.ts diff --git a/packages/plots/package.json b/packages/plots/package.json index d5410a48e..b0308020d 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -37,16 +37,15 @@ }, "dependencies": { "@antv/event-emitter": "^0.1.3", - "@antv/g": "^5.18.14", "@antv/g2": "^5.0.16", - "rc-utils": "workspace:*", + "size-sensor": "^1.0.1", "react-content-loader": "^5.0.4", - "size-sensor": "^1.0.1" + "rc-utils": "workspace:*" }, "peerDependencies": { - "lodash-es": "^4.17.21", "react": ">=16.8.4", - "react-dom": ">=16.8.4" + "react-dom": ">=16.8.4", + "lodash-es": "^4.17.21" }, "sideEffects": false, "license": "MIT", diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index e919d5d00..0d0e3884e 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -3,7 +3,6 @@ import { Chart } from '@antv/g2'; import { bind } from 'size-sensor'; import { CHART_OPTIONS } from '../constants'; import { merge, omit, pick, deleteCustomKeys } from '../utils'; -import { HTMLRender, HTMLRenderOptions } from '../shape'; import type { Adaptor, Options } from '../types'; @@ -21,9 +20,6 @@ export abstract class Plot extends EE { /** resizer unbind */ private unbind: () => void; - /** G2 chart 实例 */ - public htmlRender: HTMLRender; - constructor(container: string | HTMLElement, options: O) { super(); this.container = typeof container === 'string' ? document.getElementById(container) : container; @@ -104,16 +100,6 @@ export abstract class Plot extends EE { this.bindSizeSensor(); } - /** - * html - * @param options - */ - public html(options: HTMLRenderOptions) { - // @ts-ignore - const { canvas } = this.chart._context; - this.htmlRender = new HTMLRender(canvas, options); - } - /** * 更新 * @param options @@ -154,8 +140,6 @@ export abstract class Plot extends EE { public destroy() { // 取消 size-sensor 的绑定 this.unbindSizeSensor(); - // html 的销毁 - this.htmlRender?.destroy(); // G2 的销毁 this.chart.destroy(); // 清空已经绑定的事件 diff --git a/packages/plots/src/core/shape/html.ts b/packages/plots/src/core/shape/html.ts deleted file mode 100644 index 0b66729ab..000000000 --- a/packages/plots/src/core/shape/html.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { HTML, canvas as GCanvas } from '@antv/g'; - -export type HTMLRenderOptions = { - x?: number; - y?: number; - innerHTML: string; -}; - -export class HTMLRender { - /** canvas 实例 */ - public canvas: GCanvas; - /** 配置 */ - public options: HTMLRenderOptions; - - constructor(canvas: GCanvas, options: HTMLRenderOptions) { - this.canvas = canvas; - this.options = options; - this.init(); - } - public init() { - const html = new HTML({ - style: { - x: 0, - y: 0, - ...this.options, - }, - }); - this.canvas.appendChild(html); - } - public update(options: HTMLRenderOptions) {} - public destroy() {} -} diff --git a/packages/plots/src/core/shape/index.ts b/packages/plots/src/core/shape/index.ts deleted file mode 100644 index cd231597c..000000000 --- a/packages/plots/src/core/shape/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { HTMLRender } from './html'; -export type { HTMLRenderOptions } from './html'; From 0ae73b93ec7acf1f68667cc326ed4d992cd2ef9b Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 30 Aug 2023 11:01:45 +0800 Subject: [PATCH 034/268] fix: spec options (#2073) --- packages/plots/src/core/base/index.ts | 2 +- packages/plots/src/core/constants/index.ts | 5 ++++- .../plots/src/core/utils/delete-custom-keys.ts | 14 +++++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 0d0e3884e..4c8874e59 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -48,7 +48,7 @@ export abstract class Plot extends EE { * G2 options(Spec) 配置 */ private getSpecOptions() { - return deleteCustomKeys(omit(this.options, CHART_OPTIONS)); + return deleteCustomKeys(omit(this.options, CHART_OPTIONS), true); } /** diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 45e5d6ca6..72fa41d84 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -3,6 +3,9 @@ import { isBoolean } from '../utils'; /** new Chart options */ export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas', 'theme']; +/** 最终透传给 G2 Spec 的保留字 */ +export const RESERVED_KEYS = ['data', 'type', 'children']; + /** * @title 字段转换逻辑 * @example @@ -150,7 +153,7 @@ export const CONFIG_SHAPE = [ key: 'area', type: 'area', extend_keys: EXTEND_KEYS, - } + }, ]; /** diff --git a/packages/plots/src/core/utils/delete-custom-keys.ts b/packages/plots/src/core/utils/delete-custom-keys.ts index 943a9f261..4bac855cf 100644 --- a/packages/plots/src/core/utils/delete-custom-keys.ts +++ b/packages/plots/src/core/utils/delete-custom-keys.ts @@ -1,11 +1,12 @@ import { COORDIANTE_OPTIONS } from '../components'; import { getCustomKeys } from './get-custom-keys'; +import { RESERVED_KEYS } from '../constants'; import { Options } from '../types'; /** * 统一删除已转换的配置项 */ -export const deleteCustomKeys = (options: O): O => { +export const deleteCustomKeys = (options: O, isRender?: boolean): O => { const deleteKeys = getCustomKeys(); [...deleteKeys, ...COORDIANTE_OPTIONS].forEach((key) => { delete options[key]; @@ -19,5 +20,16 @@ export const deleteCustomKeys = (options: O): O => { }); }); + /** + * @description 最终渲染,除保留配置外,其余全部删除,避免配置污染 + */ + if (isRender) { + Object.keys(options).forEach((key) => { + if (!RESERVED_KEYS.includes(key)) { + delete options[key]; + } + }); + } + return options; }; From f9870d83fe28775e8fe41448988b6df51e4bc110 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Wed, 30 Aug 2023 11:43:15 +0800 Subject: [PATCH 035/268] =?UTF-8?q?fix(radar):=E9=9B=B7=E8=BE=BE=E5=9B=BE?= =?UTF-8?q?=E7=9A=84=20area=20=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=92=8C=20trans?= =?UTF-8?q?form=20=E6=96=B0=E5=A2=9E=E7=9A=84=20area=20=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=86=B2=E7=AA=81=20(#2074)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plots/src/core/constants/index.ts | 3 +++ packages/plots/src/core/plots/radar/adaptor.ts | 10 ---------- site/examples/statistics/radar/demo/area-radial.js | 6 ++++-- site/examples/statistics/radar/demo/parallel-radar.js | 1 - 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 72fa41d84..4cfec0219 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -133,6 +133,9 @@ const EXTEND_KEYS = [ 'shapeField', 'keyField', 'positionField', + 'axis', + 'meta', + 'style', ]; export const CONFIG_SHAPE = [ { diff --git a/packages/plots/src/core/plots/radar/adaptor.ts b/packages/plots/src/core/plots/radar/adaptor.ts index f1d36b08b..c0ce28ed5 100644 --- a/packages/plots/src/core/plots/radar/adaptor.ts +++ b/packages/plots/src/core/plots/radar/adaptor.ts @@ -15,16 +15,6 @@ export function adaptor(params: Params) { * 图表差异化处理 */ const init = (params: Params) => { - /** - * area 配置 ,决定是否有面积 - * 注: - * 1、当前 g2 5.0 的雷达图分为 radar(polar + parallel)和 polar 坐标系的区别。 - * 2、使用 coordinateType 对 coordinate进行快速配置. - * 3、g2plot 比较简单的区分了 radar、polar 两者,使用的是 axis.grid.type 'line'|'smooth' 进行简单的区分,而 g2 5.0 没有,比较复杂,并且 radar 不能配置面积图。 - */ - if (params.options.area && params.options.coordinateType !== 'radar') { - params.options.children.push({ type: 'area' }); - } params.options.coordinate = { type: get(params, 'options.coordinateType', 'polar') }; return params; }; diff --git a/site/examples/statistics/radar/demo/area-radial.js b/site/examples/statistics/radar/demo/area-radial.js index a6eac0512..4a16d6adf 100644 --- a/site/examples/statistics/radar/demo/area-radial.js +++ b/site/examples/statistics/radar/demo/area-radial.js @@ -40,12 +40,14 @@ const DemoRadar = () => { annotations: [ { type: "area", - encode: { x: "date", y: ["minmin", "maxmax"] }, + xField: "date", + yField: ["minmin", "maxmax"], style: { fill: "lightsteelblue", fillOpacity: 0.2 }, }, { type: "area", - encode: { x: "date", y: ["min", "max"] }, + xField: "date", + yField: ["min", "max"], style: { fill: "steelblue", fillOpacity: 0.2 }, }, ], diff --git a/site/examples/statistics/radar/demo/parallel-radar.js b/site/examples/statistics/radar/demo/parallel-radar.js index 0a7793b94..eee0b2335 100644 --- a/site/examples/statistics/radar/demo/parallel-radar.js +++ b/site/examples/statistics/radar/demo/parallel-radar.js @@ -36,7 +36,6 @@ const DemoRadar = () => { "0-60 mph (s)", "year", ], - area: false, axis: { position: axis, position1: axis, From 14daaf26c4634e02a698def3e43a241c83b14c11 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Wed, 30 Aug 2023 14:52:33 +0800 Subject: [PATCH 036/268] =?UTF-8?q?fix(radar):=20=E9=9B=B7=E8=BE=BE?= =?UTF-8?q?=E5=9B=BE=E7=9A=84=20area=20=E9=85=8D=E7=BD=AE=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20(#2076)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plots/src/core/constants/index.ts | 2 -- site/examples/statistics/radar/demo/basic.js | 9 +++++---- site/examples/statistics/radar/demo/radar.js | 7 +++++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 4cfec0219..a5bf45859 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -133,9 +133,7 @@ const EXTEND_KEYS = [ 'shapeField', 'keyField', 'positionField', - 'axis', 'meta', - 'style', ]; export const CONFIG_SHAPE = [ { diff --git a/site/examples/statistics/radar/demo/basic.js b/site/examples/statistics/radar/demo/basic.js index 241463d9b..6076e5e84 100644 --- a/site/examples/statistics/radar/demo/basic.js +++ b/site/examples/statistics/radar/demo/basic.js @@ -17,7 +17,11 @@ const DemoRadar = () => { data: data.map((d) => ({ ...d, star: Math.sqrt(d.star) })), xField: 'name', yField: 'star', - area: true, + area: { + style: { + fillOpacity: 0.2, + } + }, meta: { x: { padding: 0.5, @@ -38,9 +42,6 @@ const DemoRadar = () => { title: false, }, }, - style: { - fillOpacity: 0.2, - }, }; return ; }; diff --git a/site/examples/statistics/radar/demo/radar.js b/site/examples/statistics/radar/demo/radar.js index 2428ee34c..96f20b469 100644 --- a/site/examples/statistics/radar/demo/radar.js +++ b/site/examples/statistics/radar/demo/radar.js @@ -32,12 +32,15 @@ const DemoRadar = () => { yField: 'score', colorField: 'type', shapeField: 'smooth', - area: true, + area: { + style: { + fillOpacity: 0.5, + }, + }, meta: { x: { padding: 0.5, align: 0 }, y: { tickCount: 5, domainMax: 80 } }, axis: { x: { grid: true }, y: { zIndex: 1, title: false } }, interaction: { tooltip: { style: { crosshairsLineDash: [4, 4] } } }, style: { - fillOpacity: 0.5, lineWidth: 2, }, }; From baa9f3bdb37d5a37152d33af63b045befccbed5b Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 30 Aug 2023 15:16:20 +0800 Subject: [PATCH 037/268] fix: config repeated (#2077) --- packages/plots/src/core/constants/index.ts | 7 +++++-- .../plots/src/core/utils/filter-transformed.ts | 17 +++++++++++++++++ packages/plots/src/core/utils/index.ts | 1 + packages/plots/src/core/utils/transform.ts | 4 ++-- 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 packages/plots/src/core/utils/filter-transformed.ts diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index a5bf45859..d46bb23cc 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -6,6 +6,9 @@ export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas' /** 最终透传给 G2 Spec 的保留字 */ export const RESERVED_KEYS = ['data', 'type', 'children']; +/** 特殊标识,用于标识改配置来自于转换逻辑,而非用户配置 */ +export const TRANSFORM_SIGN = '__transform__'; + /** * @title 字段转换逻辑 * @example @@ -167,7 +170,7 @@ export const SPECIAL_OPTIONS = [ origin[key] = origin[key] || []; const { available = true, ...rest } = value; if (available) { - origin[key].push(rest); + origin[key].push({ [TRANSFORM_SIGN]: true, ...rest }); } else { origin[key].splice( origin[key].indexOf((item) => item.type === value.type), @@ -180,7 +183,7 @@ export const SPECIAL_OPTIONS = [ key: 'labels', callback: (origin: object, key: string, value: { type: string; available?: boolean }) => { origin[key] = origin[key] || []; - origin[key].push(value); + origin[key].push({ [TRANSFORM_SIGN]: true, ...value }); }, }, ]; diff --git a/packages/plots/src/core/utils/filter-transformed.ts b/packages/plots/src/core/utils/filter-transformed.ts new file mode 100644 index 000000000..40a6bb701 --- /dev/null +++ b/packages/plots/src/core/utils/filter-transformed.ts @@ -0,0 +1,17 @@ +import { TRANSFORM_SIGN } from '../constants'; +import { isArray } from './index'; +import type { Adaptor } from '../types'; + +export const filterTransformed = (params: Adaptor) => { + const { options } = params; + const { children = [] } = options; + + children.forEach((child) => { + Object.keys(child).forEach((key) => { + if (isArray(child[key]) && key !== 'data') { + child[key] = child[key].filter((item) => !item[TRANSFORM_SIGN]); + } + }); + }); + return options; +}; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index c44e122d6..4abf7a96e 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -4,3 +4,4 @@ export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; export { getShapeConfigKeys } from './get-shape-config-keys'; export { deleteCustomKeys } from './delete-custom-keys'; +export { filterTransformed } from './filter-transformed'; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index eb9bdf068..dfb234e62 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -1,5 +1,5 @@ import { SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY, CONFIG_SHAPE } from '../constants'; -import { omit, pick, isFunction, getShapeConfigKeys, isArray, deleteCustomKeys } from './index'; +import { omit, pick, isFunction, getShapeConfigKeys, isArray, deleteCustomKeys, filterTransformed } from './index'; import type { Adaptor, Options } from '../types'; @@ -7,7 +7,7 @@ import type { Adaptor, Options } from '../types'; * @title 将自定义配置转换为 G2 接受的格式 */ export const transformOptions = (params: Adaptor) => { - const { options } = params; + const options = filterTransformed(params); const { children = [] } = options; const getRest = (o: Adaptor['options']) => { From abad903e0e1c88da3105b646c9746496db43457a Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Wed, 30 Aug 2023 20:01:53 +0800 Subject: [PATCH 038/268] docs: perfect dual-line (#2078) Co-authored-by: lkd01632719 --- .../dual-axes/demo/custom-dual-line.js | 79 +++++++++++++++++++ .../statistics/dual-axes/demo/dual-line.js | 61 ++++++++++++++ .../dual-axes/demo/dual-multi-line.js | 64 +++++++++++++++ .../dual-axes/demo/dual-step-line.js | 57 +++++++++++++ .../statistics/dual-axes/demo/meta.json | 32 ++++++++ 5 files changed, 293 insertions(+) create mode 100644 site/examples/statistics/dual-axes/demo/custom-dual-line.js create mode 100644 site/examples/statistics/dual-axes/demo/dual-line.js create mode 100644 site/examples/statistics/dual-axes/demo/dual-multi-line.js create mode 100644 site/examples/statistics/dual-axes/demo/dual-step-line.js diff --git a/site/examples/statistics/dual-axes/demo/custom-dual-line.js b/site/examples/statistics/dual-axes/demo/custom-dual-line.js new file mode 100644 index 000000000..da32eaadb --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/custom-dual-line.js @@ -0,0 +1,79 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoCustomDualLine = () => { + const data = [ + { year: '1991', value: 3, count: 10 }, + { year: '1992', value: 4, count: 4 }, + { year: '1993', value: 3.5, count: 5 }, + { year: '1994', value: 5, count: 5 }, + { year: '1995', value: 4.9, count: 4.9 }, + { year: '1996', value: 6, count: 35 }, + { year: '1997', value: 7, count: 7 }, + { year: '1998', value: 9, count: 1 }, + { year: '1999', value: 13, count: 20 }, + ]; + + const config = { + data, + xField: 'year', + children: [ + { + type: 'line', + yField: 'value', + style: { + stroke: '#5B8FF9', + lineWidth: 3, + lineDash: [5, 5], + }, + label: { + text: (datum) => `${datum.value}个`, + }, + meta: { + y: { independent: true }, + }, + axis: { + y: { + title: 'value', + style: { titleFill: '#5B8FF9' }, + }, + }, + }, + { + type: 'line', + yField: 'count', + shape: 'smooth', + style: { + stroke: '#5AD8A6', + lineWidth: 4, + opacity: 0.5, + }, + label: { + text: (datum) => `${datum.count}个`, + }, + axis: { + y: { + position: 'right', + title: 'count', + style: { + titleFill: '#5AD8A6', + }, + }, + }, + }, + { + type: 'point', + yField: 'count', + sizeField: 4, + style: { + stroke: '#5AD8A6', + fill: '#fff', + }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/dual-line.js b/site/examples/statistics/dual-axes/demo/dual-line.js new file mode 100644 index 000000000..dfb7aaa10 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/dual-line.js @@ -0,0 +1,61 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualLine = () => { + const data = [ + { year: '1991', value: 3, count: 10 }, + { year: '1992', value: 4, count: 4 }, + { year: '1993', value: 3.5, count: 5 }, + { year: '1994', value: 5, count: 5 }, + { year: '1995', value: 4.9, count: 4.9 }, + { year: '1996', value: 6, count: 35 }, + { year: '1997', value: 7, count: 7 }, + { year: '1998', value: 9, count: 1 }, + { year: '1999', value: 13, count: 20 }, + ]; + + const config = { + data, + xField: 'year', + children: [ + { + type: 'line', + yField: 'value', + style: { + stroke: '#5B8FF9', + lineWidth: 2, + }, + meta: { + y: { independent: true }, + }, + axis: { + y: { + title: 'value', + style: { titleFill: '#5B8FF9' }, + }, + }, + }, + { + type: 'line', + yField: 'count', + style: { + stroke: '#5AD8A6', + lineWidth: 2, + }, + axis: { + y: { + position: 'right', + title: 'count', + style: { + titleFill: '#5AD8A6', + }, + }, + }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/dual-multi-line.js b/site/examples/statistics/dual-axes/demo/dual-multi-line.js new file mode 100644 index 000000000..d915c1506 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/dual-multi-line.js @@ -0,0 +1,64 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +// TODO: 待完善 + +const DemoDualMultiLine = () => { + const uvBillData = [ + { time: '2019-03', value: 350, type: 'uv' }, + { time: '2019-04', value: 900, type: 'uv' }, + { time: '2019-05', value: 300, type: 'uv' }, + { time: '2019-06', value: 450, type: 'uv' }, + { time: '2019-07', value: 470, type: 'uv' }, + { time: '2019-03', value: 220, type: 'bill' }, + { time: '2019-04', value: 300, type: 'bill' }, + { time: '2019-05', value: 250, type: 'bill' }, + { time: '2019-06', value: 220, type: 'bill' }, + { time: '2019-07', value: 362, type: 'bill' }, + ]; + + const transformData = [ + { time: '2019-03', count: 800, name: 'a' }, + { time: '2019-04', count: 600, name: 'a' }, + { time: '2019-05', count: 400, name: 'a' }, + { time: '2019-06', count: 380, name: 'a' }, + { time: '2019-07', count: 220, name: 'a' }, + { time: '2019-03', count: 750, name: 'b' }, + { time: '2019-04', count: 650, name: 'b' }, + { time: '2019-05', count: 450, name: 'b' }, + { time: '2019-06', count: 400, name: 'b' }, + { time: '2019-07', count: 320, name: 'b' }, + { time: '2019-03', count: 900, name: 'c' }, + { time: '2019-04', count: 600, name: 'c' }, + { time: '2019-05', count: 450, name: 'c' }, + { time: '2019-06', count: 300, name: 'c' }, + { time: '2019-07', count: 200, name: 'c' }, + ]; + + const config = { + data: [...uvBillData, ...transformData], + xField: 'time', + children: [ + { + type: 'line', + yField: 'value', + seriesField: 'type', + shape: 'smooth', + style: { + lineWidth: 2, + lineDash: [5, 5], + }, + }, + { + type: 'line', + yField: 'count', + seriesField: 'name', + point: {}, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/dual-step-line.js b/site/examples/statistics/dual-axes/demo/dual-step-line.js new file mode 100644 index 000000000..24aaaab9b --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/dual-step-line.js @@ -0,0 +1,57 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualStepLine = () => { + const data = [ + { year: '1991', value: 3, count: 10 }, + { year: '1992', value: 4, count: 4 }, + { year: '1993', value: 3.5, count: 5 }, + { year: '1994', value: 5, count: 5 }, + { year: '1995', value: 4.9, count: 4.9 }, + { year: '1996', value: 6, count: 35 }, + { year: '1997', value: 7, count: 7 }, + { year: '1998', value: 9, count: 1 }, + { year: '1999', value: 13, count: 20 }, + ]; + + const config = { + data, + xField: 'year', + children: [ + { + type: 'line', + yField: 'value', + shape: 'vh', + style: { + stroke: '#29cae4', + lineWidth: 2, + }, + meta: { + y: { independent: true }, + }, + }, + { + type: 'line', + yField: 'count', + shape: 'smooth', + style: { + stroke: '#5AD8A6', + lineWidth: 2, + }, + axis: { + y: { + position: 'right', + title: 'count', + style: { + titleFill: '#5AD8A6', + }, + }, + }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/meta.json b/site/examples/statistics/dual-axes/demo/meta.json index a52485f09..6146e706d 100644 --- a/site/examples/statistics/dual-axes/demo/meta.json +++ b/site/examples/statistics/dual-axes/demo/meta.json @@ -19,6 +19,38 @@ "en": "Multi Axis Chart" }, "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*BxouQYIIQ0kAAAAAAAAAAAAADmJ7AQ/fmt.webp" + }, + { + "filename": "dual-line.js", + "title": { + "zh": "双折线图", + "en": "Dual line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*HS5DT4j34XEAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "custom-dual-line.js", + "title": { + "zh": "双折线图 - 自定义折线样式", + "en": "Dual line with style" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*FtUXRLU3mUgAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "dual-step-line.js", + "title": { + "zh": "双折线图 - 阶梯折线", + "en": "Dual Step Line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*5qvZTIy44UIAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "dual-multi-line.js", + "title": { + "zh": "双折线图 - 多折线", + "en": "Dual multi line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*BzyZQapC7ucAAAAAAAAAAAAAARQnAQ" } ] } From b8f04e2393daa6bc9c5b394d8383320a4b1f3c33 Mon Sep 17 00:00:00 2001 From: OctKun <2310353398@qq.com> Date: Wed, 30 Aug 2023 20:06:19 +0800 Subject: [PATCH 039/268] feat: add Column & Bar examples (#2079) Co-authored-by: chenkun --- site/.dumi/global.ts | 1 + site/examples/statistics/bar/demo/meta.json | 8 +++ site/examples/statistics/bar/demo/shape.js | 27 +++++++++ .../column/demo/annotation-label.js | 60 +++++++++++++++++++ site/examples/statistics/column/demo/color.js | 44 ++++++++++++++ .../examples/statistics/column/demo/column.js | 5 ++ .../statistics/column/demo/dodge-padding.js | 28 +++++++++ .../examples/statistics/column/demo/meta.json | 48 +++++++++++++++ .../column/demo/region-annotation.js | 47 +++++++++++++++ .../statistics/column/demo/scrollbar.js | 27 +++++++++ .../examples/statistics/column/demo/slider.js | 37 ++++++++++++ site/package.json | 1 + 12 files changed, 333 insertions(+) create mode 100644 site/examples/statistics/bar/demo/shape.js create mode 100644 site/examples/statistics/column/demo/annotation-label.js create mode 100644 site/examples/statistics/column/demo/color.js create mode 100644 site/examples/statistics/column/demo/dodge-padding.js create mode 100644 site/examples/statistics/column/demo/region-annotation.js create mode 100644 site/examples/statistics/column/demo/scrollbar.js create mode 100644 site/examples/statistics/column/demo/slider.js diff --git a/site/.dumi/global.ts b/site/.dumi/global.ts index 55288e829..53902de50 100644 --- a/site/.dumi/global.ts +++ b/site/.dumi/global.ts @@ -4,6 +4,7 @@ if (window) { (window as any).react = require('react'); (window as any).reactDom = require('react-dom'); (window as any).fecha = require('fecha'); + (window as any).lodashEs = require('lodash-es'); /** 不要使用 link, react-dom 冲突 */ (window as any).plots = require('@ant-design/plots'); } diff --git a/site/examples/statistics/bar/demo/meta.json b/site/examples/statistics/bar/demo/meta.json index d655e6215..f992bb570 100644 --- a/site/examples/statistics/bar/demo/meta.json +++ b/site/examples/statistics/bar/demo/meta.json @@ -12,6 +12,14 @@ }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*eU1cRqm_fPAAAAAAAAAAAAAADmJ7AQ/original" }, + { + "filename": "shape.js", + "title": { + "zh": "自定义条形图 shape", + "en": "Csutomize shape of bar plot" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/ZTl%26D3SI7D/fa6b9790-658e-4d7e-982e-57d9db8a12b8.png" + }, { "filename": "stacked.js", "title": { diff --git a/site/examples/statistics/bar/demo/shape.js b/site/examples/statistics/bar/demo/shape.js new file mode 100644 index 000000000..1cdf95be9 --- /dev/null +++ b/site/examples/statistics/bar/demo/shape.js @@ -0,0 +1,27 @@ +import { Bar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { year: '1951 年', value: 38 }, + { year: '1952 年', value: 52 }, + { year: '1956 年', value: 61 }, + { year: '1957 年', value: 145 }, + { year: '1958 年', value: 48 }, +]; + +const DemoBar = () => { + const config = { + data, + xField: 'value', + yField: 'year', + shapeField: 'hollow', + colorField: 'year', + legend: { + color: { size: 72, autoWrap: true, maxRows: 3, cols: 6 }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/annotation-label.js b/site/examples/statistics/column/demo/annotation-label.js new file mode 100644 index 000000000..f475170b1 --- /dev/null +++ b/site/examples/statistics/column/demo/annotation-label.js @@ -0,0 +1,60 @@ +import { Column } from '@ant-design/plots'; +import React, { useEffect, useState } from 'react'; +import ReactDOM from 'react-dom'; +import { forEach, groupBy } from 'lodash-es'; + +const DemoColumn = () => { + const [data, setData] = useState([]); + + const asyncFetch = () => { + fetch('https://gw.alipayobjects.com/os/antfincdn/8elHX%26irfq/stack-column-data.json') + .then((response) => response.json()) + .then((json) => setData(json)) + .catch((error) => { + console.log('fetch data failed', error); + }); + }; + + useEffect(() => { + asyncFetch(); + }, []); + + const annotations = []; + forEach(groupBy(data, 'year'), (values, k) => { + const value = values.reduce((a, b) => a + b.value, 0); + annotations.push({ + type: 'text', + data: [k, value], + style: { + textAlign: 'center', + fontSize: 14, + fill: 'rgba(0,0,0,0.85)', + }, + xField: 'year', + yField: 'value', + style: { + text: `${value}`, + textBaseline: 'bottom', + position: 'top', + textAlign: 'center', + }, + }); + }); + + const config = { + data, + xField: 'year', + yField: 'value', + stack: true, + colorField: 'type', + label: { + text: 'value', + textBaseline: 'bottom', + position: 'inside', + }, + annotations, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/color.js b/site/examples/statistics/column/demo/color.js new file mode 100644 index 000000000..174d0609c --- /dev/null +++ b/site/examples/statistics/column/demo/color.js @@ -0,0 +1,44 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { type: '1-3秒', value: 0.16 }, + { type: '4-10秒', value: 0.125 }, + { type: '11-30秒', value: 0.24 }, + { type: '31-60秒', value: 0.19 }, + { type: '1-3分', value: 0.22 }, + { type: '3-10分', value: 0.05 }, + { type: '10-30分', value: 0.01 }, + { type: '30+分', value: 0.015 }, +]; +const paletteSemanticRed = '#F4664A'; +const brandColor = '#5B8FF9'; + +const DemoColumn = () => { + const config = { + data, + xField: 'type', + yField: 'value', + colorField: ({ type }) => { + if (type === '10-30分' || type === '30+分') { + return paletteSemanticRed; + } + return brandColor; + }, + label: { + text: (originData) => { + const val = parseFloat(originData.value); + if (val < 0.05) { + return (val * 100).toFixed(1) + '%'; + } + return ''; + }, + offset: 10, + }, + legend: false, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/column.js b/site/examples/statistics/column/demo/column.js index b4f266a3a..e6e174166 100644 --- a/site/examples/statistics/column/demo/column.js +++ b/site/examples/statistics/column/demo/column.js @@ -19,6 +19,11 @@ const DemoColumn = () => { labelFormatter: '.0%', }, }, + style: { + // 圆角样式 + radiusTopLeft: 10, + radiusTopRight: 10, + }, }; return ; }; diff --git a/site/examples/statistics/column/demo/dodge-padding.js b/site/examples/statistics/column/demo/dodge-padding.js new file mode 100644 index 000000000..1a7321595 --- /dev/null +++ b/site/examples/statistics/column/demo/dodge-padding.js @@ -0,0 +1,28 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoColumn = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antfincdn/iPY8JFnxdb/dodge-padding.json', + }, + xField: '月份', + yField: '月均降雨量', + colorField: 'name', + group: true, + style: { + // 矩形四个方向的内边距 + inset: 5, + // 矩形单个方向的内边距 + // insetLeft:5, + // insetRight:20, + // insetBottom:10 + // insetTop:10 + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index 97aaf4801..74ce76a0f 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -12,6 +12,14 @@ }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*vhCKQJ9UJX4AAAAAAAAAAAAADmJ7AQ/original" }, + { + "filename": "color.js", + "title": { + "zh": "自定义柱状图颜色", + "en": "Column plot color" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*dr27SafKNzIAAAAAAAAAAAAAARQnAQ" + }, { "filename": "column-maxwidth.js", "title": { @@ -20,6 +28,30 @@ }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*fu-BSYg7U_kAAAAAAAAAAAAADmJ7AQ/original" }, + { + "filename": "slider.js", + "title": { + "zh": "带缩略轴柱状图", + "en": "Column plot with slider" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*QhoHQ4QIts0AAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "scrollbar.js", + "title": { + "zh": "带滚动条柱状图", + "en": "Column plot with scrollbar" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*IkdWTaXf4vAAAAAAAAAAAABkARQnAQ" + }, + { + "filename": "region-annotation.js", + "title": { + "zh": "带辅助框标注的基础柱状图", + "en": "Basic column plot with region annotation" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/ceFSs9FuNn/2922d5e4-df5f-4512-8f8f-6f2ec258c7b8.png" + }, { "filename": "range.js", "title": { @@ -44,6 +76,22 @@ }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*GwDUQbVt9XYAAAAAAAAAAAAADmJ7AQ/original" }, + { + "filename": "annotation-label.js", + "title": { + "zh": "借助图形标注展示总计 label", + "en": "Show total label with annotations" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/h5ZnxOZaVR/f4495644-e5b3-4130-8a8f-686cf6241267.png" + }, + { + "filename": "dodge-padding.js", + "title": { + "zh": "分组柱状图像素级组内柱子间距", + "en": "DodgePadding of grouped column plot" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/VL8xZlzwm5/2d96f1be-83c6-47c8-8a02-6023ecdbe035.png" + }, { "filename": "change-data.js", "title": { diff --git a/site/examples/statistics/column/demo/region-annotation.js b/site/examples/statistics/column/demo/region-annotation.js new file mode 100644 index 000000000..268063388 --- /dev/null +++ b/site/examples/statistics/column/demo/region-annotation.js @@ -0,0 +1,47 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { month: '1', value: 1078 }, + { month: '2', value: 1216 }, + { month: '3', value: 758 }, + { month: '4', value: 623 }, + { month: '5', value: 319 }, + { month: '6', value: 422 }, + { month: '7', value: -4 }, + { month: '8', value: -217 }, + { month: '9', value: -358 }, + { month: '10', value: 1513 }, + { month: '11', value: 1388 }, + { month: '12', value: 597 }, +]; + +const DemoColumn = () => { + const config = { + data, + xField: 'month', + yField: 'value', + meta: { + y: { + domainMax: 2000, + domainMin: -1000, + }, + }, + axis: { + x: { + labelFormatter: (val) => `${val} 月`, + }, + }, + annotations: [ + { + type: 'rangeX', + data: [{ month: ['7', '9'] }], + xField: 'month', + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/scrollbar.js b/site/examples/statistics/column/demo/scrollbar.js new file mode 100644 index 000000000..278385754 --- /dev/null +++ b/site/examples/statistics/column/demo/scrollbar.js @@ -0,0 +1,27 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Column } from '@ant-design/plots'; + +const DemoColumn = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/be63e0a2-d2be-4c45-97fd-c00f752a66d4.json', + }, + xField: '城市', + yField: '销售额', + xAxis: { + label: { + autoRotate: false, + }, + }, + scrollbar: { + x: { + ratio: 0.05, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/slider.js b/site/examples/statistics/column/demo/slider.js new file mode 100644 index 000000000..12f7eccca --- /dev/null +++ b/site/examples/statistics/column/demo/slider.js @@ -0,0 +1,37 @@ +import React, { useEffect, useRef } from 'react'; +import ReactDOM from 'react-dom'; +import { Column } from '@ant-design/plots'; + +const DemoColumn = () => { + const chartRef = useRef(); + useEffect(() => { + console.log({ chartRef }); + if (chartRef.current) { + } + }, []); + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/be63e0a2-d2be-4c45-97fd-c00f752a66d4.json', + }, + xField: '城市', + yField: '销售额', + xAxis: { + label: { + autoRotate: false, + }, + }, + slider: { + x: {}, + }, + onReady: (chartsInstance) => { + // 初始选区范围 + chartsInstance.emit('sliderX:filter', { + data: { selection: [[0.1, 0.2], undefined] }, + }); + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/package.json b/site/package.json index f4983742a..ddf41b5d0 100644 --- a/site/package.json +++ b/site/package.json @@ -43,6 +43,7 @@ "@ant-design/plots": "^2.0.0-alpha.0", "antd": "^4.16.13", "insert-css": "^2.0.0", + "lodash-es": "^4.17.21", "react": "^16.14.0", "react-dom": "^16.14.0" } From ac2939dbb2bd5b139e03dd48dca9f6710da95f3b Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 31 Aug 2023 10:14:04 +0800 Subject: [PATCH 040/268] feat: add conversion tag (#2080) --- .../src/core/annotation/conversion-tag.ts | 164 ++++++++++++++++++ packages/plots/src/core/annotation/index.ts | 3 + packages/plots/src/core/base/index.ts | 21 ++- packages/plots/src/core/constants/index.ts | 7 + .../statistics/column/demo/conversion-tag.js | 34 ++++ .../examples/statistics/column/demo/meta.json | 8 + 6 files changed, 235 insertions(+), 2 deletions(-) create mode 100644 packages/plots/src/core/annotation/conversion-tag.ts create mode 100644 packages/plots/src/core/annotation/index.ts create mode 100644 site/examples/statistics/column/demo/conversion-tag.js diff --git a/packages/plots/src/core/annotation/conversion-tag.ts b/packages/plots/src/core/annotation/conversion-tag.ts new file mode 100644 index 000000000..e09416c77 --- /dev/null +++ b/packages/plots/src/core/annotation/conversion-tag.ts @@ -0,0 +1,164 @@ +// @ts-expect-error +import { Text, Polygon, canvas as GCanvas } from '@antv/g'; +import { Chart } from '@antv/g2'; +import { get, isFunction } from '../utils'; + +type ShapeAttrs = Record; + +export type ConversionTagOptions = { + /** tag 高度 */ + size?: number; + /** tag 箭头大小 */ + arrowSize?: number; + /** tag 对柱子间距 */ + spacing?: number; + /** 文本配置 */ + text?: { + /** 文字样式 */ + style?: ShapeAttrs; + /** 文本格式化 */ + formatter?: (prev: number, next: number) => string; + }; + /** tag 样式 */ + style?: ShapeAttrs; +}; + +export class ConversionTag { + /** canvas 实例 */ + public canvas: GCanvas; + public chart: Chart; + public options: ConversionTagOptions; + public direction: 'vertical' | 'horizontal'; + + constructor(chart: Chart, options: ConversionTagOptions) { + if (!options) return; + this.chart = chart; + this.options = options; + this.init(); + } + public getElementsLayout() { + const elements = this.canvas.document.getElementsByClassName('element'); + const elementsLayout = []; + elements.forEach((element) => { + const bbox = element.getBBox(); + const { x, y, width, height } = bbox; + elementsLayout.push({ + bbox, + x, + y, + width, + height, + data: element['__data__'], + }); + }); + return elementsLayout; + } + public getConversionTagLayout() { + const isVertical = this.direction === 'vertical'; + const elementsLayout = this.getElementsLayout(); + const { x: firstX, y: firstY, height: firstHeigt, width: firstWidth, data: firstData } = elementsLayout[0]; + const valuePath = ['items', 0, 'value']; + let preValue = get(firstData, valuePath); + const elementDistance = isVertical + ? elementsLayout[1].y - firstY - firstHeigt + : elementsLayout[1].x - firstX - firstWidth; + const tagLayout = []; + const { size = 40, arrowSize = 20, spacing = 4 } = this.options; + elementsLayout.forEach((element, index) => { + if (index > 0) { + const { x, y, height, width, data } = element; + const currentValue = get(data, valuePath); + + const halfSize = size / 2; + if (isVertical) { + const arrowVertexX = x + width / 2; + const arrowVertexY = y; + tagLayout.push({ + points: [ + [arrowVertexX + halfSize, arrowVertexY - elementDistance + spacing], + [arrowVertexX + halfSize, arrowVertexY - arrowSize - spacing], + [arrowVertexX, arrowVertexY - spacing], + [arrowVertexX - halfSize, arrowVertexY - arrowSize - spacing], + [arrowVertexX - halfSize, arrowVertexY - elementDistance + spacing], + ], + center: [arrowVertexX, arrowVertexY - elementDistance / 2 - spacing], + width: elementDistance, + value: [preValue, currentValue], + }); + } else { + const arrowVertexX = x; + const arrowVertexY = y + height / 2; + tagLayout.push({ + points: [ + [x - elementDistance + spacing, arrowVertexY - halfSize], + [x - arrowSize - spacing, arrowVertexY - halfSize], + [arrowVertexX - spacing, arrowVertexY], + [x - arrowSize - spacing, arrowVertexY + halfSize], + [x - elementDistance + spacing, arrowVertexY + halfSize], + ], + center: [arrowVertexX - elementDistance / 2 - spacing, arrowVertexY], + width: elementDistance, + value: [preValue, currentValue], + }); + } + + preValue = currentValue; + } + }); + return tagLayout; + } + public init() { + const { canvas } = this.chart.getContext(); + this.canvas = canvas; + this.setDirection(); + this.drawConversionTag(); + } + /** 根据 coordinate 确定方向 */ + public setDirection() { + const coordinate = this.chart.getCoordinate(); + const transformations = get(coordinate, 'options.transformations'); + let direction = 'horizontal'; + transformations.forEach((transformation) => { + if (transformation.includes('transpose')) { + direction = 'vertical'; + } + }); + this.direction = direction as 'vertical' | 'horizontal'; + } + + public drawConversionTag() { + const conversionLayout = this.getConversionTagLayout(); + const { + style, + text: { style: textStyle, formatter }, + } = this.options; + conversionLayout.forEach((layout) => { + const { points, center, value } = layout; + const [prev, next] = value; + const [x, y] = center; + const polygon = new Polygon({ + style: { + points, + fill: '#eee', + ...style, + }, + }); + const text = new Text({ + style: { + x, + y, + text: isFunction(formatter) ? formatter(prev, next) : ((next / prev) * 100).toFixed(2) + '%', + fontSize: 12, + textBaseline: 'middle', + textAlign: 'center', + fill: '#000', + ...textStyle, + }, + }); + this.canvas.appendChild(polygon); + this.canvas.appendChild(text); + }); + } + public update(options: ConversionTagOptions) {} + public destroy() {} +} diff --git a/packages/plots/src/core/annotation/index.ts b/packages/plots/src/core/annotation/index.ts new file mode 100644 index 000000000..b50f98cf1 --- /dev/null +++ b/packages/plots/src/core/annotation/index.ts @@ -0,0 +1,3 @@ +import { ConversionTag } from './conversion-tag'; + +export const Annotaion = { ConversionTag }; diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 4c8874e59..7b0a4559e 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -1,8 +1,9 @@ import EE from '@antv/event-emitter'; import { Chart } from '@antv/g2'; import { bind } from 'size-sensor'; -import { CHART_OPTIONS } from '../constants'; +import { CHART_OPTIONS, ANNOTATION_LIST } from '../constants'; import { merge, omit, pick, deleteCustomKeys } from '../utils'; +import { Annotaion } from '../annotation'; import type { Adaptor, Options } from '../types'; @@ -95,11 +96,27 @@ export abstract class Plot extends EE { // options 转换 this.chart.options(this.getSpecOptions()); // 渲染 - this.chart.render(); + this.chart.render().then(() => { + this.annotations(); + }); + // 绑定 this.bindSizeSensor(); } + /** + * annotaions + */ + public annotations(): void { + ANNOTATION_LIST.forEach((annotation) => { + const { type, shape } = annotation; + const annotationOptions = this.options[type]; + if (annotationOptions) { + new Annotaion[shape](this.chart, annotationOptions); + } + }); + } + /** * 更新 * @param options diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index d46bb23cc..694fe8a2c 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -187,3 +187,10 @@ export const SPECIAL_OPTIONS = [ }, }, ]; + +export const ANNOTATION_LIST = [ + { + type: 'conversionTag', + shape: 'ConversionTag', + }, +]; diff --git a/site/examples/statistics/column/demo/conversion-tag.js b/site/examples/statistics/column/demo/conversion-tag.js new file mode 100644 index 000000000..63fe5929a --- /dev/null +++ b/site/examples/statistics/column/demo/conversion-tag.js @@ -0,0 +1,34 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoColumn = () => { + const config = { + data: [ + { action: '浏览网站', pv: 50000 }, + { action: '放入购物车', pv: 35000 }, + { action: '生成订单', pv: 25000 }, + { action: '支付订单', pv: 15000 }, + { action: '完成交易', pv: 8500 }, + ], + xField: 'action', + yField: 'pv', + label: { + text: (d) => d.pv, + textBaseline: 'bottom', + }, + style: { + maxWidth: 50, + }, + conversionTag: { + size: 40, + spacing: 4, + text: { + formatter: (prev, next) => `${((next / prev) * 100).toFixed(1)}%`, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index 74ce76a0f..455399ebe 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -99,6 +99,14 @@ "en": "Change Data" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*b5Q8R6DHJZMAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "conversion-tag.js", + "title": { + "zh": "带转化率柱状图", + "en": "Column plot with conversion tag" + }, + "screenshot": "https://gw.alicdn.com/tfs/TB1u3.cvUY1gK0jSZFMXXaWcVXa-1638-1228.png" } ] } From aa9e92a11cc75df3409eee5a7be96c31ccd38672 Mon Sep 17 00:00:00 2001 From: OctKun <2310353398@qq.com> Date: Thu, 31 Aug 2023 10:14:55 +0800 Subject: [PATCH 041/268] chore: merge tiny charts into one folder (#2082) Co-authored-by: chenkun --- site/examples/statistics/bar/demo/shape.js | 4 +- site/examples/statistics/tiny-area/API.en.md | 1 - site/examples/statistics/tiny-area/API.zh.md | 1 - .../statistics/tiny-area/demo/meta.json | 32 ---------- .../examples/statistics/tiny-area/index.en.md | 4 -- .../examples/statistics/tiny-area/index.zh.md | 4 -- .../examples/statistics/tiny-column/API.en.md | 1 - .../examples/statistics/tiny-column/API.zh.md | 1 - .../statistics/tiny-column/demo/meta.json | 24 ------- .../statistics/tiny-column/index.en.md | 4 -- .../statistics/tiny-column/index.zh.md | 4 -- site/examples/statistics/tiny-line/API.en.md | 1 - site/examples/statistics/tiny-line/API.zh.md | 1 - .../statistics/tiny-line/demo/meta.json | 24 ------- .../examples/statistics/tiny-line/index.en.md | 4 -- .../examples/statistics/tiny-line/index.zh.md | 4 -- site/examples/statistics/tiny/API.en.md | 1 + site/examples/statistics/tiny/API.zh.md | 1 + .../demo/area-annotation.js | 0 .../demo/basic.js => tiny/demo/basic-area.js} | 0 .../basic.js => tiny/demo/basic-column.js} | 0 .../demo/basic.js => tiny/demo/basic-line.js} | 0 .../demo/column-annotation.js | 0 .../{tiny-area => tiny}/demo/filled-area.js | 0 .../demo/line-annotation.js | 0 site/examples/statistics/tiny/demo/meta.json | 64 +++++++++++++++++++ site/examples/statistics/tiny/index.en.md | 4 ++ site/examples/statistics/tiny/index.zh.md | 4 ++ 28 files changed, 76 insertions(+), 112 deletions(-) delete mode 100644 site/examples/statistics/tiny-area/API.en.md delete mode 100644 site/examples/statistics/tiny-area/API.zh.md delete mode 100644 site/examples/statistics/tiny-area/demo/meta.json delete mode 100644 site/examples/statistics/tiny-area/index.en.md delete mode 100644 site/examples/statistics/tiny-area/index.zh.md delete mode 100644 site/examples/statistics/tiny-column/API.en.md delete mode 100644 site/examples/statistics/tiny-column/API.zh.md delete mode 100644 site/examples/statistics/tiny-column/demo/meta.json delete mode 100644 site/examples/statistics/tiny-column/index.en.md delete mode 100644 site/examples/statistics/tiny-column/index.zh.md delete mode 100644 site/examples/statistics/tiny-line/API.en.md delete mode 100644 site/examples/statistics/tiny-line/API.zh.md delete mode 100644 site/examples/statistics/tiny-line/demo/meta.json delete mode 100644 site/examples/statistics/tiny-line/index.en.md delete mode 100644 site/examples/statistics/tiny-line/index.zh.md create mode 100644 site/examples/statistics/tiny/API.en.md create mode 100644 site/examples/statistics/tiny/API.zh.md rename site/examples/statistics/{tiny-area => tiny}/demo/area-annotation.js (100%) rename site/examples/statistics/{tiny-area/demo/basic.js => tiny/demo/basic-area.js} (100%) rename site/examples/statistics/{tiny-column/demo/basic.js => tiny/demo/basic-column.js} (100%) rename site/examples/statistics/{tiny-line/demo/basic.js => tiny/demo/basic-line.js} (100%) rename site/examples/statistics/{tiny-column => tiny}/demo/column-annotation.js (100%) rename site/examples/statistics/{tiny-area => tiny}/demo/filled-area.js (100%) rename site/examples/statistics/{tiny-line => tiny}/demo/line-annotation.js (100%) create mode 100644 site/examples/statistics/tiny/demo/meta.json create mode 100644 site/examples/statistics/tiny/index.en.md create mode 100644 site/examples/statistics/tiny/index.zh.md diff --git a/site/examples/statistics/bar/demo/shape.js b/site/examples/statistics/bar/demo/shape.js index 1cdf95be9..17f1f3672 100644 --- a/site/examples/statistics/bar/demo/shape.js +++ b/site/examples/statistics/bar/demo/shape.js @@ -13,8 +13,8 @@ const data = [ const DemoBar = () => { const config = { data, - xField: 'value', - yField: 'year', + xField: 'year', + yField: 'value', shapeField: 'hollow', colorField: 'year', legend: { diff --git a/site/examples/statistics/tiny-area/API.en.md b/site/examples/statistics/tiny-area/API.en.md deleted file mode 100644 index 0ebf69f2a..000000000 --- a/site/examples/statistics/tiny-area/API.en.md +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/examples/statistics/tiny-area/API.zh.md b/site/examples/statistics/tiny-area/API.zh.md deleted file mode 100644 index d38f8f16d..000000000 --- a/site/examples/statistics/tiny-area/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/examples/statistics/tiny-area/demo/meta.json b/site/examples/statistics/tiny-area/demo/meta.json deleted file mode 100644 index 8a18efebc..000000000 --- a/site/examples/statistics/tiny-area/demo/meta.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "title": { - "zh": "中文分类", - "en": "Category" - }, - "demos": [ - { - "filename": "basic.js", - "title": { - "zh": "迷你面积", - "en": "tiny area plot" - }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*e7gFTKK4RXwAAAAAAAAAAAAADmJ7AQ/original" - }, - { - "filename": "area-annotation.js", - "title": { - "zh": "带辅助信息的迷你面积图", - "en": "Tiny area plot with annotations" - }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*0zwrR62OaHQAAAAAAAAAAAAAARQnAQ" - }, - { - "filename": "filled-area.js", - "title": { - "zh": "平铺填充迷你面积图", - "en": "Filled tiny area plot" - }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*tN1MTpkoO8gAAAAAAAAAAAAAARQnAQ" - } - ] -} diff --git a/site/examples/statistics/tiny-area/index.en.md b/site/examples/statistics/tiny-area/index.en.md deleted file mode 100644 index 0938028d0..000000000 --- a/site/examples/statistics/tiny-area/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Tiny Area -order: 2 ---- \ No newline at end of file diff --git a/site/examples/statistics/tiny-area/index.zh.md b/site/examples/statistics/tiny-area/index.zh.md deleted file mode 100644 index a6dfeafa6..000000000 --- a/site/examples/statistics/tiny-area/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 迷你面积图 -order: 2 ---- diff --git a/site/examples/statistics/tiny-column/API.en.md b/site/examples/statistics/tiny-column/API.en.md deleted file mode 100644 index 39d4b0aab..000000000 --- a/site/examples/statistics/tiny-column/API.en.md +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/examples/statistics/tiny-column/API.zh.md b/site/examples/statistics/tiny-column/API.zh.md deleted file mode 100644 index a76940975..000000000 --- a/site/examples/statistics/tiny-column/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/examples/statistics/tiny-column/demo/meta.json b/site/examples/statistics/tiny-column/demo/meta.json deleted file mode 100644 index 152451296..000000000 --- a/site/examples/statistics/tiny-column/demo/meta.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "title": { - "zh": "中文分类", - "en": "Category" - }, - "demos": [ - { - "filename": "basic.js", - "title": { - "zh": "迷你柱形图", - "en": "tiny column plot" - }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*tLNqQpXbZWgAAAAAAAAAAAAAARQnAQ" - }, - { - "filename": "column-annotation.js", - "title": { - "zh": "带辅助线的迷你柱形图", - "en": "Tiny column plot with annotation" - }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*mVxXQZLTI8UAAAAAAAAAAAAADmJ7AQ/original" - } - ] -} diff --git a/site/examples/statistics/tiny-column/index.en.md b/site/examples/statistics/tiny-column/index.en.md deleted file mode 100644 index 424834bdc..000000000 --- a/site/examples/statistics/tiny-column/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Tiny column -order: 2 ---- \ No newline at end of file diff --git a/site/examples/statistics/tiny-column/index.zh.md b/site/examples/statistics/tiny-column/index.zh.md deleted file mode 100644 index 78405f5ad..000000000 --- a/site/examples/statistics/tiny-column/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 迷你柱形图 -order: 2 ---- \ No newline at end of file diff --git a/site/examples/statistics/tiny-line/API.en.md b/site/examples/statistics/tiny-line/API.en.md deleted file mode 100644 index ebc5b0724..000000000 --- a/site/examples/statistics/tiny-line/API.en.md +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/examples/statistics/tiny-line/API.zh.md b/site/examples/statistics/tiny-line/API.zh.md deleted file mode 100644 index a92a81e40..000000000 --- a/site/examples/statistics/tiny-line/API.zh.md +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/examples/statistics/tiny-line/demo/meta.json b/site/examples/statistics/tiny-line/demo/meta.json deleted file mode 100644 index 0ddfe5603..000000000 --- a/site/examples/statistics/tiny-line/demo/meta.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "title": { - "zh": "中文分类", - "en": "Category" - }, - "demos": [ - { - "filename": "basic.js", - "title": { - "zh": "迷你折线图", - "en": "Tiny line plot" - }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*7mspQrtT-VYAAAAAAAAAAAAADmJ7AQ/original" - }, - { - "filename": "line-annotation.js", - "title": { - "zh": "带辅助线的迷你折线图", - "en": "Tiny line plot with annotation" - }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*KShOSrCq0X4AAAAAAAAAAAAAARQnAQ" - } - ] -} diff --git a/site/examples/statistics/tiny-line/index.en.md b/site/examples/statistics/tiny-line/index.en.md deleted file mode 100644 index 7e47d640d..000000000 --- a/site/examples/statistics/tiny-line/index.en.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Tiny line -order: 2 ---- \ No newline at end of file diff --git a/site/examples/statistics/tiny-line/index.zh.md b/site/examples/statistics/tiny-line/index.zh.md deleted file mode 100644 index dd5372e0b..000000000 --- a/site/examples/statistics/tiny-line/index.zh.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 迷你折线图 -order: 2 ---- diff --git a/site/examples/statistics/tiny/API.en.md b/site/examples/statistics/tiny/API.en.md new file mode 100644 index 000000000..f01ba56cc --- /dev/null +++ b/site/examples/statistics/tiny/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/tiny/API.zh.md b/site/examples/statistics/tiny/API.zh.md new file mode 100644 index 000000000..9635e982d --- /dev/null +++ b/site/examples/statistics/tiny/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/tiny-area/demo/area-annotation.js b/site/examples/statistics/tiny/demo/area-annotation.js similarity index 100% rename from site/examples/statistics/tiny-area/demo/area-annotation.js rename to site/examples/statistics/tiny/demo/area-annotation.js diff --git a/site/examples/statistics/tiny-area/demo/basic.js b/site/examples/statistics/tiny/demo/basic-area.js similarity index 100% rename from site/examples/statistics/tiny-area/demo/basic.js rename to site/examples/statistics/tiny/demo/basic-area.js diff --git a/site/examples/statistics/tiny-column/demo/basic.js b/site/examples/statistics/tiny/demo/basic-column.js similarity index 100% rename from site/examples/statistics/tiny-column/demo/basic.js rename to site/examples/statistics/tiny/demo/basic-column.js diff --git a/site/examples/statistics/tiny-line/demo/basic.js b/site/examples/statistics/tiny/demo/basic-line.js similarity index 100% rename from site/examples/statistics/tiny-line/demo/basic.js rename to site/examples/statistics/tiny/demo/basic-line.js diff --git a/site/examples/statistics/tiny-column/demo/column-annotation.js b/site/examples/statistics/tiny/demo/column-annotation.js similarity index 100% rename from site/examples/statistics/tiny-column/demo/column-annotation.js rename to site/examples/statistics/tiny/demo/column-annotation.js diff --git a/site/examples/statistics/tiny-area/demo/filled-area.js b/site/examples/statistics/tiny/demo/filled-area.js similarity index 100% rename from site/examples/statistics/tiny-area/demo/filled-area.js rename to site/examples/statistics/tiny/demo/filled-area.js diff --git a/site/examples/statistics/tiny-line/demo/line-annotation.js b/site/examples/statistics/tiny/demo/line-annotation.js similarity index 100% rename from site/examples/statistics/tiny-line/demo/line-annotation.js rename to site/examples/statistics/tiny/demo/line-annotation.js diff --git a/site/examples/statistics/tiny/demo/meta.json b/site/examples/statistics/tiny/demo/meta.json new file mode 100644 index 000000000..b7bfd815f --- /dev/null +++ b/site/examples/statistics/tiny/demo/meta.json @@ -0,0 +1,64 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic-area.js", + "title": { + "zh": "迷你面积", + "en": "tiny area plot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*e7gFTKK4RXwAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "area-annotation.js", + "title": { + "zh": "带辅助信息的迷你面积图", + "en": "Tiny area plot with annotations" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*0zwrR62OaHQAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "filled-area.js", + "title": { + "zh": "平铺填充迷你面积图", + "en": "Filled tiny area plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*tN1MTpkoO8gAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "basic-column.js", + "title": { + "zh": "迷你柱形图", + "en": "tiny column plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*tLNqQpXbZWgAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "column-annotation.js", + "title": { + "zh": "带辅助线的迷你柱形图", + "en": "Tiny column plot with annotation" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*mVxXQZLTI8UAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "basic-line.js", + "title": { + "zh": "迷你折线图", + "en": "Tiny line plot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*7mspQrtT-VYAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "line-annotation.js", + "title": { + "zh": "带辅助线的迷你折线图", + "en": "Tiny line plot with annotation" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*KShOSrCq0X4AAAAAAAAAAAAAARQnAQ" + } + ] +} diff --git a/site/examples/statistics/tiny/index.en.md b/site/examples/statistics/tiny/index.en.md new file mode 100644 index 000000000..9c2c58d71 --- /dev/null +++ b/site/examples/statistics/tiny/index.en.md @@ -0,0 +1,4 @@ +--- +title: Tiny +order: 2 +--- \ No newline at end of file diff --git a/site/examples/statistics/tiny/index.zh.md b/site/examples/statistics/tiny/index.zh.md new file mode 100644 index 000000000..6e9863b00 --- /dev/null +++ b/site/examples/statistics/tiny/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 迷你图 +order: 2 +--- From 94faaf37431a86490bd64cdebba233eb5583744f Mon Sep 17 00:00:00 2001 From: OctKun <2310353398@qq.com> Date: Fri, 1 Sep 2023 09:34:58 +0800 Subject: [PATCH 042/268] feat: add column examples & add default interaction config (#2086) Co-authored-by: chenkun --- .npmrc | 3 +- packages/plots/src/core/plots/column/index.ts | 14 +++++++- .../statistics/column/demo/connect-area.js | 33 +++++++++++++++++++ .../examples/statistics/column/demo/meta.json | 8 +++++ 4 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 site/examples/statistics/column/demo/connect-area.js diff --git a/.npmrc b/.npmrc index 62b8985c7..00e134fbe 100644 --- a/.npmrc +++ b/.npmrc @@ -4,4 +4,5 @@ public-hoist-pattern[]=d3-* public-hoist-pattern[]=@types/react public-hoist-pattern[]=@types/react-dom public-hoist-pattern[]=npm-run-all -public-hoist-pattern[]=rimraf \ No newline at end of file +public-hoist-pattern[]=rimraf +public-hoist-pattern[]=@antv/* \ No newline at end of file diff --git a/packages/plots/src/core/plots/column/index.ts b/packages/plots/src/core/plots/column/index.ts index 3d03b4000..f5374b26d 100644 --- a/packages/plots/src/core/plots/column/index.ts +++ b/packages/plots/src/core/plots/column/index.ts @@ -14,7 +14,19 @@ export class Column extends Plot { * 供外部使用 */ static getDefaultOptions(): Partial { - return { type: 'view', children: [{ type: 'interval' }] }; + return { + type: 'view', + children: [ + { + type: 'interval', + interaction: { + elementHighlightByColor: { + background: true, + }, + }, + }, + ], + }; } /** diff --git a/site/examples/statistics/column/demo/connect-area.js b/site/examples/statistics/column/demo/connect-area.js new file mode 100644 index 000000000..3fbb98790 --- /dev/null +++ b/site/examples/statistics/column/demo/connect-area.js @@ -0,0 +1,33 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoColumn = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antfincdn/8elHX%26irfq/stack-column-data.json', + }, + xField: 'year', + yField: 'value', + stack: true, + colorField: 'type', + label: { + text: 'value', + textBaseline: 'bottom', + position: 'inside', + }, + interaction: { + elementHighlightByColor: { + link: true, + }, + }, + state: { + active: { linkFill: 'rgba(0,0,0,0.25)', stroke: 'black', lineWidth: 0.5 }, + inactive: { opacity: 0.5 }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index 455399ebe..4a4659187 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -76,6 +76,14 @@ }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*GwDUQbVt9XYAAAAAAAAAAAAADmJ7AQ/original" }, + { + "filename": "connect-area.js", + "title": { + "zh": "自定义联通区域样式柱状图", + "en": "Stacked column plot with connectedArea" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/KLJB0t7S9W/93ca0482-9d1d-42e9-b99c-c70d87517888.png" + }, { "filename": "annotation-label.js", "title": { From d1c2515342f00b4965ce9a861bd01fbbbed70684 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 1 Sep 2023 14:23:21 +0800 Subject: [PATCH 043/268] chore: opt release actions (#2087) --- .changeset/config.json | 2 +- .github/workflows/release.yml | 51 ++++++++++++++++++++ package.json | 5 +- packages/plots/jest.config.js | 2 +- packages/plots/package.json | 2 +- packages/plots/src/components/base/index.tsx | 2 +- packages/plots/src/components/index.ts | 2 +- packages/plots/src/components/tiny/index.ts | 14 +++--- packages/plots/src/utils/createNode.ts | 2 +- packages/plots/tests/plots/column-spec.tsx | 2 +- packages/rc-utils/package.json | 2 +- 11 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.changeset/config.json b/.changeset/config.json index f38b47ab5..d71842701 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -5,7 +5,7 @@ "fixed": [], "linked": [], "access": "restricted", - "baseBranch": "main", + "baseBranch": "master", "updateInternalDependencies": "patch", "ignore": [] } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..3c90b9c4b --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,51 @@ +name: Changesets +on: + push: + branches: + - master +env: + CI: true + PNPM_CACHE_FOLDER: .pnpm-store + +jobs: + version: + timeout-minutes: 15 + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [16.x] + steps: + - name: checkout code repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - name: install pnpm + run: npm i pnpm@latest -g + - name: Setup npmrc + run: | + cat << EOF > "$HOME/.npmrc" + email=${NPM_EMAIL} + //registry.npmjs.org/:_authToken=$NPM_TOKEN + EOF + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_EMAIL: ${{ secrets.NPM_EMAIL }} + - name: setup pnpm config + run: pnpm config set store-dir $PNPM_CACHE_FOLDER + - name: install dependencies + run: pnpm install + - name: create publish versions + uses: changesets/action@v1 + with: + version: pnpm ci:version + commit: 'chore: release versions' + title: 'chore: release versions' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: publish to npm + run: pnpm run release \ No newline at end of file diff --git a/package.json b/package.json index 98597b767..b96acbea0 100644 --- a/package.json +++ b/package.json @@ -10,14 +10,15 @@ "profile": "webpack --config webpack.config.js --mode production --profile --json > stats.json", "prettier": "prettier --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", "ci:version": "pnpm changeset version", - "add:changelog": "pnpm changeset" + "add:changelog": "pnpm changeset", + "release": "pnpm publish --no-git-checks -r --filter @ant-design/*" }, "devDependencies": { "@babel/core": "^7.11.6", "@babel/polyfill": "^7.12.1", "@babel/preset-env": "^7.13.9", "@babel/preset-typescript": "^7.10.4", - "@changesets/cli": "^2.24.4", + "@changesets/cli": "^2.26.2", "@swc/jest": "^0.2.23", "@testing-library/jest-dom": "^5.5.0", "@testing-library/react-hooks": "^7.0.2", diff --git a/packages/plots/jest.config.js b/packages/plots/jest.config.js index 06953c3a3..bdebf39b8 100644 --- a/packages/plots/jest.config.js +++ b/packages/plots/jest.config.js @@ -5,6 +5,6 @@ module.exports = { moduleNameMapper: { '^d3-((?!linear)\\S*)': `/../../node_modules/d3-$1/dist/d3-$1.min.js`, '^lodash-es$': 'lodash', - '^rc-utils': `/../../packages/rc-utils/src`, + '^@ant-design/rc-utils': `/../../packages/rc-utils/src`, }, }; diff --git a/packages/plots/package.json b/packages/plots/package.json index b0308020d..298e4b7fd 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -40,7 +40,7 @@ "@antv/g2": "^5.0.16", "size-sensor": "^1.0.1", "react-content-loader": "^5.0.4", - "rc-utils": "workspace:*" + "@ant-design/rc-utils": "workspace:*" }, "peerDependencies": { "react": ">=16.8.4", diff --git a/packages/plots/src/components/base/index.tsx b/packages/plots/src/components/base/index.tsx index 6f83d13b0..7e5f592f0 100644 --- a/packages/plots/src/components/base/index.tsx +++ b/packages/plots/src/components/base/index.tsx @@ -1,5 +1,5 @@ import React, { useImperativeHandle, forwardRef } from 'react'; -import { ErrorBoundary, ChartLoading } from 'rc-utils'; +import { ErrorBoundary, ChartLoading } from '@ant-design/rc-utils'; import useChart from '../../hooks/useChart'; import { Plots } from '../../core'; import { CommonConfig, Chart } from '../../interface'; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 24858b807..95b368551 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -6,7 +6,7 @@ import Line from './line'; import Pie from './pie'; import Scatter from './scatter'; import Radar from './radar'; -import Tiny from './tiny'; +import { Tiny } from './tiny'; import Rose from './rose'; export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny }; diff --git a/packages/plots/src/components/tiny/index.ts b/packages/plots/src/components/tiny/index.ts index 1aa896dff..0af39d10d 100644 --- a/packages/plots/src/components/tiny/index.ts +++ b/packages/plots/src/components/tiny/index.ts @@ -1,9 +1,7 @@ -import TinyLine from './tiny-line'; -import TinyArea from './tiny-area'; -import TinyColumn from './tiny-column'; +import Line from './tiny-line'; +import Area from './tiny-area'; +import Column from './tiny-column'; -export default { - Line: TinyLine, - Area: TinyArea, - Column: TinyColumn, -}; +type TinyOptions = Record; + +export const Tiny: TinyOptions = { Line, Area, Column }; diff --git a/packages/plots/src/utils/createNode.ts b/packages/plots/src/utils/createNode.ts index 2bf3a2366..8026c7d28 100644 --- a/packages/plots/src/utils/createNode.ts +++ b/packages/plots/src/utils/createNode.ts @@ -1,5 +1,5 @@ import React from 'react'; -import { render } from 'rc-utils'; +import { render } from '@ant-design/rc-utils'; const createNode = (children: React.ReactElement, extra?: object) => { let mountPoint = document.createElement('div'); diff --git a/packages/plots/tests/plots/column-spec.tsx b/packages/plots/tests/plots/column-spec.tsx index 6cd331731..dcb68d2d8 100644 --- a/packages/plots/tests/plots/column-spec.tsx +++ b/packages/plots/tests/plots/column-spec.tsx @@ -1,5 +1,5 @@ import { renderHook } from '@testing-library/react-hooks/server'; -import { render } from 'rc-utils'; +import { render } from '@ant-design/rc-utils'; import React, { useRef } from 'react'; import { act } from 'react-dom/test-utils'; import { Column } from '../../src'; diff --git a/packages/rc-utils/package.json b/packages/rc-utils/package.json index 5b01a41be..88a8ba73d 100644 --- a/packages/rc-utils/package.json +++ b/packages/rc-utils/package.json @@ -1,5 +1,5 @@ { - "name": "rc-utils", + "name": "@ant-design/rc-utils", "version": "0.0.1", "description": "charts utils", "bugs": { From 742ce0bee1fa95b32f34096edaf3c2d0929be2ae Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Mon, 4 Sep 2023 09:11:47 +0800 Subject: [PATCH 044/268] docs: perfect dual-axes (#2092) Co-authored-by: lkd01632719 --- .../dual-axes/demo/column-multi-line.js | 65 +++++++++++++++++++ .../dual-axes/demo/custom-dual-line.js | 12 +++- .../statistics/dual-axes/demo/dual-line.js | 4 +- .../dual-axes/demo/dual-multi-line.js | 34 ++++++++-- .../dual-axes/demo/dual-step-line.js | 4 +- .../statistics/dual-axes/demo/meta.json | 24 +++++++ .../dual-axes/demo/range-column-line.js | 47 ++++++++++++++ .../dual-axes/demo/slider-column-line.js | 63 ++++++++++++++++++ 8 files changed, 242 insertions(+), 11 deletions(-) create mode 100644 site/examples/statistics/dual-axes/demo/column-multi-line.js create mode 100644 site/examples/statistics/dual-axes/demo/range-column-line.js create mode 100644 site/examples/statistics/dual-axes/demo/slider-column-line.js diff --git a/site/examples/statistics/dual-axes/demo/column-multi-line.js b/site/examples/statistics/dual-axes/demo/column-multi-line.js new file mode 100644 index 000000000..aaeb96bfc --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/column-multi-line.js @@ -0,0 +1,65 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const lineColor = { + a: 'rgb(90, 216, 166)', + b: 'rgb(93, 112, 146)', + c: 'rgb(246, 189, 22)' +} + +const DemoDualAxes = () => { + const uvData = [ + { time: '2019-03', value: 35 }, + { time: '2019-04', value: 90 }, + { time: '2019-05', value: 30 }, + { time: '2019-06', value: 45 }, + { time: '2019-07', value: 47 }, + ]; + + const transformData = [ + { time: '2019-03', count: 800, name: 'a' }, + { time: '2019-04', count: 600, name: 'a' }, + { time: '2019-05', count: 400, name: 'a' }, + { time: '2019-06', count: 380, name: 'a' }, + { time: '2019-07', count: 220, name: 'a' }, + { time: '2019-03', count: 750, name: 'b' }, + { time: '2019-04', count: 650, name: 'b' }, + { time: '2019-05', count: 450, name: 'b' }, + { time: '2019-06', count: 400, name: 'b' }, + { time: '2019-07', count: 320, name: 'b' }, + { time: '2019-03', count: 900, name: 'c' }, + { time: '2019-04', count: 600, name: 'c' }, + { time: '2019-05', count: 450, name: 'c' }, + { time: '2019-06', count: 300, name: 'c' }, + { time: '2019-07', count: 200, name: 'c' }, + ]; + + const config = { + xField: 'time', + interaction: { tooltip: { sort: (d) => ['value', 'a', 'b', 'c'].indexOf(d.name) } }, + children: [ + { + data: uvData, + type: 'interval', + yField: 'value', + meta: { y: { independent: true } }, + axis: { y: { title: null } }, + }, + { + data: transformData, + type: 'line', + yField: 'count', + seriesField: 'name', + style: { + lineWidth: 2, + stroke: (d) => lineColor[d[0].name], + }, + axis: { y: { position: 'right', title: null } }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/custom-dual-line.js b/site/examples/statistics/dual-axes/demo/custom-dual-line.js index da32eaadb..04b256462 100644 --- a/site/examples/statistics/dual-axes/demo/custom-dual-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-dual-line.js @@ -2,7 +2,7 @@ import { DualAxes } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; -const DemoCustomDualLine = () => { +const DemoDualAxes = () => { const data = [ { year: '1991', value: 3, count: 10 }, { year: '1992', value: 4, count: 4 }, @@ -29,6 +29,10 @@ const DemoCustomDualLine = () => { }, label: { text: (datum) => `${datum.value}个`, + style: { + dy: -12, + textAnchor: 'middle', + }, }, meta: { y: { independent: true }, @@ -51,6 +55,10 @@ const DemoCustomDualLine = () => { }, label: { text: (datum) => `${datum.count}个`, + style: { + dy: -12, + textAnchor: 'middle', + }, }, axis: { y: { @@ -76,4 +84,4 @@ const DemoCustomDualLine = () => { return ; }; -ReactDOM.render(, document.getElementById('container')); +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/dual-line.js b/site/examples/statistics/dual-axes/demo/dual-line.js index dfb7aaa10..83b8ae62f 100644 --- a/site/examples/statistics/dual-axes/demo/dual-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-line.js @@ -2,7 +2,7 @@ import { DualAxes } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; -const DemoDualLine = () => { +const DemoDualAxes = () => { const data = [ { year: '1991', value: 3, count: 10 }, { year: '1992', value: 4, count: 4 }, @@ -58,4 +58,4 @@ const DemoDualLine = () => { return ; }; -ReactDOM.render(, document.getElementById('container')); +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/dual-multi-line.js b/site/examples/statistics/dual-axes/demo/dual-multi-line.js index d915c1506..c6e05d77f 100644 --- a/site/examples/statistics/dual-axes/demo/dual-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-multi-line.js @@ -2,9 +2,15 @@ import { DualAxes } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; -// TODO: 待完善 +const lineColor = { + uv: 'rgb(91, 143, 249)', + bill: 'rgb(90, 216, 166)', + a: 'rgb(93, 112, 146)', + b: 'rgb(246, 189, 22)', + c: 'rgb(111, 94, 249)' +} -const DemoDualMultiLine = () => { +const DemoDualAxes = () => { const uvBillData = [ { time: '2019-03', value: 350, type: 'uv' }, { time: '2019-04', value: 900, type: 'uv' }, @@ -37,10 +43,12 @@ const DemoDualMultiLine = () => { ]; const config = { - data: [...uvBillData, ...transformData], xField: 'time', + interaction: { tooltip: { sort: (d) => ['uv', 'bill', 'a', 'b', 'c'].indexOf(d.name) } }, + axis: { y: { title: null } }, children: [ { + data: uvBillData, type: 'line', yField: 'value', seriesField: 'type', @@ -48,17 +56,33 @@ const DemoDualMultiLine = () => { style: { lineWidth: 2, lineDash: [5, 5], + stroke: (d) => lineColor[d[0].type], }, }, { + data: transformData, type: 'line', yField: 'count', seriesField: 'name', - point: {}, + style: { + lineWidth: 2, + stroke: (d) => lineColor[d[0].name], + }, + }, + { + data: transformData, + type: 'point', + yField: 'count', + sizeField: 3, + style: { + fill: (d) => lineColor[d.name], + stroke: (d) => lineColor[d.name], + }, + tooltip: false }, ], }; return ; }; -ReactDOM.render(, document.getElementById('container')); +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/dual-step-line.js b/site/examples/statistics/dual-axes/demo/dual-step-line.js index 24aaaab9b..5694c1d5b 100644 --- a/site/examples/statistics/dual-axes/demo/dual-step-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-step-line.js @@ -2,7 +2,7 @@ import { DualAxes } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; -const DemoDualStepLine = () => { +const DemoDualAxes = () => { const data = [ { year: '1991', value: 3, count: 10 }, { year: '1992', value: 4, count: 4 }, @@ -54,4 +54,4 @@ const DemoDualStepLine = () => { return ; }; -ReactDOM.render(, document.getElementById('container')); +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/meta.json b/site/examples/statistics/dual-axes/demo/meta.json index 6146e706d..fdd27be25 100644 --- a/site/examples/statistics/dual-axes/demo/meta.json +++ b/site/examples/statistics/dual-axes/demo/meta.json @@ -20,6 +20,30 @@ }, "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*BxouQYIIQ0kAAAAAAAAAAAAADmJ7AQ/fmt.webp" }, + { + "filename": "range-column-line.js", + "title": { + "zh": "柱线混合图表-区间柱", + "en": "range-column-line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*MEdZR5UQzosAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "column-multi-line.js", + "title": { + "zh": "柱线混合图表-显示多折线", + "en": "Column multi line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*FfmvR5_sLAEAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "slider-column-line.js", + "title": { + "zh": "柱线混合图表-滑块", + "en": "Slider with column line" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/fxukGXuXfg/89ea37e5-e00d-4424-b75e-1aba3ff8b633.png" + }, { "filename": "dual-line.js", "title": { diff --git a/site/examples/statistics/dual-axes/demo/range-column-line.js b/site/examples/statistics/dual-axes/demo/range-column-line.js new file mode 100644 index 000000000..3eba8b294 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/range-column-line.js @@ -0,0 +1,47 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const data = [ + { time: '2019-03', value: [200, 350], count: 800, }, + { time: '2019-04', value: [400, 650], count: 600, }, + { time: '2019-05', value: [150, 350], count: 400, }, + { time: '2019-06', value: [100, 450], count: 380, }, + { time: '2019-07', value: [500, 550], count: 220, }, + ]; + + const config = { + data, + xField: 'time', + children: [ + { + type: 'interval', + yField: 'value', + style: { + stroke: '#5B8FF9', + maxWidth: 100, + }, + meta: { y: { independent: true } }, + axis: { y: { style: { titleFill: '#5B8FF9' }, }, }, + }, + { + type: 'line', + yField: 'count', + style: { + stroke: '#5AD8A6', + lineWidth: 2, + }, + axis: { + y: { + position: 'right', + style: { titleFill: '#5AD8A6' }, + }, + }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/slider-column-line.js b/site/examples/statistics/dual-axes/demo/slider-column-line.js new file mode 100644 index 000000000..ea689b496 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/slider-column-line.js @@ -0,0 +1,63 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const data = [ + { time: '2020-08-20', consumeTime: 10868, completeTime: 649.483, }, + { time: '2020-08-21', consumeTime: 8786, completeTime: 1053.7, }, + { time: '2020-08-22', consumeTime: 10824, completeTime: 679.817, }, + { time: '2020-08-23', consumeTime: 7860, completeTime: 638.117, }, + { time: '2020-08-24', consumeTime: 13253, completeTime: 843.3, }, + { time: '2020-08-25', consumeTime: 17015, completeTime: 1092.983, }, + { time: '2020-08-26', consumeTime: 19298, completeTime: 1036.317, }, + { time: '2020-08-27', consumeTime: 13937, completeTime: 1031.9, }, + { time: '2020-08-28', consumeTime: 11541, completeTime: 803.467, }, + { time: '2020-08-29', consumeTime: 15244, completeTime: 830.733, }, + { time: '2020-08-30', consumeTime: 14247, completeTime: 709.867, }, + { time: '2020-08-31', consumeTime: 9402, completeTime: 665.233, }, + { time: '2020-09-01', consumeTime: 10440, completeTime: 696.367, }, + { time: '2020-09-02', consumeTime: 9345, completeTime: 692.867, }, + { time: '2020-09-03', consumeTime: 18459, completeTime: 936.017, }, + { time: '2020-09-04', consumeTime: 9763, completeTime: 782.867, }, + { time: '2020-09-05', consumeTime: 11074, completeTime: 653.8, }, + { time: '2020-09-06', consumeTime: 11770, completeTime: 856.683, }, + { time: '2020-09-07', consumeTime: 12206, completeTime: 777.15, }, + { time: '2020-09-08', consumeTime: 11434, completeTime: 773.283, }, + { time: '2020-09-09', consumeTime: 16218, completeTime: 833.3, }, + { time: '2020-09-10', consumeTime: 11914, completeTime: 793.517, }, + { time: '2020-09-11', consumeTime: 16781, completeTime: 894.45, }, + { time: '2020-09-12', consumeTime: 10555, completeTime: 725.55, }, + { time: '2020-09-13', consumeTime: 10899, completeTime: 709.967, }, + { time: '2020-09-14', consumeTime: 10713, completeTime: 787.6, }, + { time: '2020-09-15', consumeTime: 0, completeTime: 644.183, }, + { time: '2020-09-16', consumeTime: 0, completeTime: 1066.65, }, + { time: '2020-09-17', consumeTime: 20357, completeTime: 932.45, }, + { time: '2020-09-18', consumeTime: 10424, completeTime: 753.583, }, + ]; + + const config = { + data, + xField: 'time', + padding: 70, + slider: { x: true }, + children: [ + { + type: 'interval', + yField: 'consumeTime', + style: { stroke: '#5B8FF9' }, + meta: { y: { independent: true } }, + axis: { y: { title: null } }, + }, + { + type: 'line', + yField: 'completeTime', + style: { stroke: '#5AD8A6', lineWidth: 2 }, + axis: { y: { position: 'right', title: null } }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From e771a29c92e395bb7af5603f126525dd8187b7cf Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 4 Sep 2023 09:39:43 +0800 Subject: [PATCH 045/268] feat: add deep assign (#2090) * feat: add deep assign * fix: deep assign --- packages/plots/src/core/utils/index.ts | 1 + packages/plots/src/core/utils/transform.ts | 17 +++++++--- packages/rc-utils/src/utils/deep-assign.ts | 32 +++++++++++++++++++ packages/rc-utils/src/utils/index.ts | 1 + .../rc-utils/tests/utils/deep-assign-spec.ts | 22 +++++++++++++ 5 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 packages/rc-utils/src/utils/deep-assign.ts create mode 100644 packages/rc-utils/tests/utils/deep-assign-spec.ts diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 4abf7a96e..c68af8d27 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -5,3 +5,4 @@ export { transformOptions } from './transform'; export { getShapeConfigKeys } from './get-shape-config-keys'; export { deleteCustomKeys } from './delete-custom-keys'; export { filterTransformed } from './filter-transformed'; +export { deepAssign } from '@ant-design/rc-utils'; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index dfb234e62..fb3014514 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -1,5 +1,14 @@ import { SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY, CONFIG_SHAPE } from '../constants'; -import { omit, pick, isFunction, getShapeConfigKeys, isArray, deleteCustomKeys, filterTransformed } from './index'; +import { + omit, + pick, + isFunction, + getShapeConfigKeys, + isArray, + deleteCustomKeys, + filterTransformed, + deepAssign, +} from './index'; import type { Adaptor, Options } from '../types'; @@ -38,7 +47,7 @@ export const transformOptions = (params: Adaptor) => { if (callback) { callback(origin, key, value); } else { - origin[key] = Object.assign({}, origin[key], value); + origin[key] = deepAssign({}, origin[key], value); } }; @@ -76,7 +85,7 @@ export const transformOptions = (params: Adaptor) => { * @description 外层配置应用到所有 children */ const copyChild = { ...child }; - const transformOption = Object.assign(child, rest); + const transformOption = deepAssign(child, rest); const transformChildrenConfig = (transformObject: object, specKey: string, key: string) => { /** @@ -102,7 +111,7 @@ export const transformOptions = (params: Adaptor) => { if (exist) { const { type, extend_keys } = exist; if (type) { - children.push(transformConfig(Object.assign({}, pick(options, extend_keys), { type }, options[key]))); + children.push(transformConfig(deepAssign({}, pick(options, extend_keys), { type }, options[key]))); } else { // annotations if (isArray(options[key])) { diff --git a/packages/rc-utils/src/utils/deep-assign.ts b/packages/rc-utils/src/utils/deep-assign.ts new file mode 100644 index 000000000..402c62d66 --- /dev/null +++ b/packages/rc-utils/src/utils/deep-assign.ts @@ -0,0 +1,32 @@ +const isArray = (obj: any) => Array.isArray(obj); + +const isObject = (obj: any) => { + return obj !== null && typeof obj === 'object' && !isArray(obj); +}; + +/** + * @title 深度合并 + * @param {object} target 目标对象 + * @param {object} sources 源对象 + * @description 深度合并对象,用于合并配置,数组类型目前只支持覆盖 + */ +export const deepAssign = (target: object, ...sources) => { + if (!sources.length) return target; + + const source = sources.shift(); + + for (const key in source) { + if (Object.hasOwnProperty.call(source, key)) { + if (isObject(source[key])) { + if (!target[key] || typeof target[key] !== 'object') { + target[key] = {}; + } + deepAssign(target[key], source[key]); + } else { + target[key] = source[key]; + } + } + } + + return deepAssign(target, ...sources); +}; diff --git a/packages/rc-utils/src/utils/index.ts b/packages/rc-utils/src/utils/index.ts index 9f69ae898..bee550d5b 100644 --- a/packages/rc-utils/src/utils/index.ts +++ b/packages/rc-utils/src/utils/index.ts @@ -1 +1,2 @@ export { isType } from './is-type'; +export { deepAssign } from './deep-assign'; diff --git a/packages/rc-utils/tests/utils/deep-assign-spec.ts b/packages/rc-utils/tests/utils/deep-assign-spec.ts new file mode 100644 index 000000000..72448fd11 --- /dev/null +++ b/packages/rc-utils/tests/utils/deep-assign-spec.ts @@ -0,0 +1,22 @@ +import { deepAssign } from '../../src'; + +describe('Deep assign', () => { + it('run', () => { + expect(deepAssign({ a: 1 }, { a: 2 })).toEqual({ a: 2 }); + expect(deepAssign({ a: 1 }, { a: 2, b: 1 })).toEqual({ a: 2, b: 1 }); + expect(deepAssign({ a: 1, b: { c: { d: 1 } } }, { a: 1, b: { c: { d: 2, e: 1 } } })).toEqual({ + a: 1, + b: { c: { d: 2, e: 1 } }, + }); + expect(deepAssign({ a: { b: 1 } }, { a: 2 })).toEqual({ a: 2 }); + expect(deepAssign({ a: { b: 1 } }, { a: { c: 1 } })).toEqual({ a: { b: 1, c: 1 } }); + expect(deepAssign({ a: { b: [1, 2, 3] } }, { a: 2 })).toEqual({ a: 2 }); + expect(deepAssign({ a: { b: ['b', 2, 'c'] } }, { a: { b: ['a', 2] } })).toEqual({ a: { b: ['a', 2] } }); + expect(deepAssign({ a: { b: [{ c: 1 }, { d: 2, e: 4 }] } }, { a: { b: [{ c: 2 }, { d: 3 }] } })).toEqual({ + a: { b: [{ c: 2 }, { d: 3 }] }, + }); + expect(deepAssign({ a: { b: { c: null } } }, { a: { b: { c: undefined } } })).toEqual({ + a: { b: { c: undefined } }, + }); + }); +}); From 285b09792296193907e981e00be55826f7a67ae4 Mon Sep 17 00:00:00 2001 From: OctKun <2310353398@qq.com> Date: Mon, 4 Sep 2023 20:37:20 +0800 Subject: [PATCH 046/268] feat: add histogram chart (#2093) Co-authored-by: chenkun --- .../plots/src/components/histogram/index.tsx | 10 +++ packages/plots/src/components/index.ts | 3 +- packages/plots/src/components/interface.ts | 1 + packages/plots/src/core/constants/index.ts | 1 + packages/plots/src/core/index.ts | 18 +++- .../plots/src/core/plots/histogram/adaptor.ts | 36 ++++++++ .../plots/src/core/plots/histogram/index.ts | 47 +++++++++++ .../plots/src/core/plots/histogram/type.ts | 8 ++ packages/plots/src/core/utils/index.ts | 19 ++++- .../statistics/histogram/demo/binWidth.js | 83 +++++++++++++++++++ .../statistics/histogram/demo/binx-color.js | 25 ++++++ .../statistics/histogram/demo/binx.js | 23 +++++ .../statistics/histogram/demo/meta.json | 32 +++++++ .../examples/statistics/histogram/index.en.md | 4 + .../examples/statistics/histogram/index.zh.md | 4 + 15 files changed, 311 insertions(+), 3 deletions(-) create mode 100644 packages/plots/src/components/histogram/index.tsx create mode 100644 packages/plots/src/core/plots/histogram/adaptor.ts create mode 100644 packages/plots/src/core/plots/histogram/index.ts create mode 100644 packages/plots/src/core/plots/histogram/type.ts create mode 100644 site/examples/statistics/histogram/demo/binWidth.js create mode 100644 site/examples/statistics/histogram/demo/binx-color.js create mode 100644 site/examples/statistics/histogram/demo/binx.js create mode 100644 site/examples/statistics/histogram/demo/meta.json create mode 100644 site/examples/statistics/histogram/index.en.md create mode 100644 site/examples/statistics/histogram/index.zh.md diff --git a/packages/plots/src/components/histogram/index.tsx b/packages/plots/src/components/histogram/index.tsx new file mode 100644 index 000000000..e8f367516 --- /dev/null +++ b/packages/plots/src/components/histogram/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { HistogramOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type HistogramConfig = CommonConfig; + +const HistogramChart = (props: HistogramConfig) => ; + +export default HistogramChart; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 95b368551..d88f1fc51 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -8,5 +8,6 @@ import Scatter from './scatter'; import Radar from './radar'; import { Tiny } from './tiny'; import Rose from './rose'; +import Histogram from './histogram'; -export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny }; +export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram }; diff --git a/packages/plots/src/components/interface.ts b/packages/plots/src/components/interface.ts index 83af69d6a..f499cf240 100644 --- a/packages/plots/src/components/interface.ts +++ b/packages/plots/src/components/interface.ts @@ -1,3 +1,4 @@ export type { AreaConfig } from './area'; export type { ColumnConfig } from './column'; export type { LineConfig } from './line'; +export type { HistogramConfig } from './histogram'; diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 694fe8a2c..c9be3f31e 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -38,6 +38,7 @@ export const TRANSFORM_OPTION_KEY = { shapeField: 'shape', seriesField: 'series', positionField: 'position', + binField: 'x', }, transform: { /** diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 83b51754d..8b4e3b24e 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -11,6 +11,7 @@ export type { TinyLineOptions } from './plots/tiny-line'; export type { TinyAreaOptions } from './plots/tiny-area'; export type { TinyColumnOptions } from './plots/tiny-column'; export type { RoseOptions } from './plots/rose'; +export type { HistogramOptions } from './plots/histogram'; export * from './types'; import { Area } from './plots/area'; @@ -25,5 +26,20 @@ import { TinyLine } from './plots/tiny-line'; import { TinyArea } from './plots/tiny-area'; import { TinyColumn } from './plots/tiny-column'; import { Rose } from './plots/rose'; +import { Histogram } from './plots/histogram'; -export const Plots = { Line, Column, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, TinyLine, TinyArea, TinyColumn }; +export const Plots = { + Line, + Column, + Pie, + Area, + Bar, + DualAxes, + Scatter, + Radar, + Rose, + TinyLine, + TinyArea, + TinyColumn, + Histogram, +}; diff --git a/packages/plots/src/core/plots/histogram/adaptor.ts b/packages/plots/src/core/plots/histogram/adaptor.ts new file mode 100644 index 000000000..b8fe70a53 --- /dev/null +++ b/packages/plots/src/core/plots/histogram/adaptor.ts @@ -0,0 +1,36 @@ +import { flow, transformOptions, assign, isNumber, divide, ceil } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { HistogramOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + const transformHistogramConfig = (params: Params) => { + const { options } = params; + const { data, binNumber, binWidth, children, channel = 'count' } = options; + if (isNumber(binWidth)) { + assign(children[0].transform[0], { thresholds: ceil(divide(data.length, binWidth)), y: channel }); + return params; + } + + if (isNumber(binNumber)) { + assign(children[0].transform[0], { thresholds: binNumber, y: channel }); + return params; + } + return params; + }; + + return flow(init, transformHistogramConfig, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/histogram/index.ts b/packages/plots/src/core/plots/histogram/index.ts new file mode 100644 index 000000000..a12312ec7 --- /dev/null +++ b/packages/plots/src/core/plots/histogram/index.ts @@ -0,0 +1,47 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { HistogramOptions } from './type'; + +export type { HistogramOptions }; + +export class Histogram extends Plot { + /** 图表类型 */ + public type = 'Histogram'; + + /** + * 获取 直方图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + autoFit: true, + children: [ + { + type: 'rect', + transform: [{ type: 'binX', y: 'count' }], + interaction: { + elementHighlightByColor: { + background: true, + }, + }, + }, + ], + }; + } + + /** + * 获取 直方图 默认配置 + */ + protected getDefaultOptions() { + return Histogram.getDefaultOptions(); + } + + /** + * 直方图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/histogram/type.ts b/packages/plots/src/core/plots/histogram/type.ts new file mode 100644 index 000000000..5b8b15a9a --- /dev/null +++ b/packages/plots/src/core/plots/histogram/type.ts @@ -0,0 +1,8 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type HistogramOptions = Options & + BaseOptions & { + binField: string; + binWidth: number; + binNumber: number; + }; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index c68af8d27..b33ed7ed8 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -1,4 +1,21 @@ -export { flatten, flow, isArray, isBoolean, merge, omit, pick, isFunction, remove, get, set } from 'lodash-es'; +export { + flatten, + flow, + isArray, + isBoolean, + merge, + omit, + pick, + isFunction, + remove, + get, + set, + sortBy, + assign, + divide, + ceil, + isNumber, +} from 'lodash-es'; export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; diff --git a/site/examples/statistics/histogram/demo/binWidth.js b/site/examples/statistics/histogram/demo/binWidth.js new file mode 100644 index 000000000..cd57558c9 --- /dev/null +++ b/site/examples/statistics/histogram/demo/binWidth.js @@ -0,0 +1,83 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Histogram } from '@ant-design/plots'; + +const data = [ + { value: 1.2 }, + { value: 3.4 }, + { value: 3.7 }, + { value: 4.3 }, + { value: 5.2 }, + { value: 5.8 }, + { value: 6.1 }, + { value: 6.5 }, + { value: 6.8 }, + { value: 7.1 }, + { value: 7.3 }, + { value: 7.7 }, + { value: 8.3 }, + { value: 8.6 }, + { value: 8.8 }, + { value: 9.1 }, + { value: 9.2 }, + { value: 9.4 }, + { value: 9.5 }, + { value: 9.7 }, + { value: 10.5 }, + { value: 10.7 }, + { value: 10.8 }, + { value: 11.0 }, + { value: 11.0 }, + { value: 11.1 }, + { value: 11.2 }, + { value: 11.3 }, + { value: 11.4 }, + { value: 11.4 }, + { value: 11.7 }, + { value: 12.0 }, + { value: 12.9 }, + { value: 12.9 }, + { value: 13.3 }, + { value: 13.7 }, + { value: 13.8 }, + { value: 13.9 }, + { value: 14.0 }, + { value: 14.2 }, + { value: 14.5 }, + { value: 15 }, + { value: 15.2 }, + { value: 15.6 }, + { value: 16.0 }, + { value: 16.3 }, + { value: 17.3 }, + { value: 17.5 }, + { value: 17.9 }, + { value: 18.0 }, + { value: 18.0 }, + { value: 20.6 }, + { value: 21 }, + { value: 23.4 }, +]; + +const DemoHistogram = () => { + const config = { + data, + style: { + inset: 0.5, + }, + binField: 'value', + channel: 'count', + binWidth: 4, + meta: { + x: { domainMin: 0, tickCount: 10 }, + y: { + domainMax: 15, + nice: true, + }, + }, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/histogram/demo/binx-color.js b/site/examples/statistics/histogram/demo/binx-color.js new file mode 100644 index 000000000..6589fc7f1 --- /dev/null +++ b/site/examples/statistics/histogram/demo/binx-color.js @@ -0,0 +1,25 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Histogram } from '@ant-design/plots'; + +const DemoHistogram = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/athletes.json', + }, + binField: 'weight', + channel: 'count', + colorField: 'sex', + stack: { + orderBy: 'series', + }, + style: { + inset: 0.5, + }, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/histogram/demo/binx.js b/site/examples/statistics/histogram/demo/binx.js new file mode 100644 index 000000000..1d6af1072 --- /dev/null +++ b/site/examples/statistics/histogram/demo/binx.js @@ -0,0 +1,23 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Histogram } from '@ant-design/plots'; + +const DemoHistogram = () => { + const config = { + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/unemployment2.json', + }, + style: { + inset: 0.5, + }, + binField: 'rate', + channel: 'count', + // 分箱数量 + binNumber: 10, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/histogram/demo/meta.json b/site/examples/statistics/histogram/demo/meta.json new file mode 100644 index 000000000..d23c253f5 --- /dev/null +++ b/site/examples/statistics/histogram/demo/meta.json @@ -0,0 +1,32 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "binx.js", + "title": { + "zh": "直方图", + "en": "Histogram" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*sE4kQYzbhS8AAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "binx-color.js", + "title": { + "zh": "颜色分类直方图", + "en": "Histogram with Color" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*sk8XRJTkuwYAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "binWidth.js", + "title": { + "zh": "直方图范围刻度", + "en": "Bin histogram plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*WTP6S6bzkpsAAAAAAAAAAAAAARQnAQ" + } + ] +} diff --git a/site/examples/statistics/histogram/index.en.md b/site/examples/statistics/histogram/index.en.md new file mode 100644 index 000000000..f50b0a037 --- /dev/null +++ b/site/examples/statistics/histogram/index.en.md @@ -0,0 +1,4 @@ +--- +title: Histogram +order: 2 +--- \ No newline at end of file diff --git a/site/examples/statistics/histogram/index.zh.md b/site/examples/statistics/histogram/index.zh.md new file mode 100644 index 000000000..d32983558 --- /dev/null +++ b/site/examples/statistics/histogram/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 直方图 +order: 2 +--- From e5d739ba6aa9359b356ec2c9a0c4f9b6d60f8577 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 4 Sep 2023 21:10:09 +0800 Subject: [PATCH 047/268] chore: shape to shapeField of example configuration (#2095) --- .../statistics/area/demo/area-difference.js | 3 +-- site/examples/statistics/area/demo/cascade-area.js | 3 +-- site/examples/statistics/area/demo/orderly-area.js | 2 +- .../statistics/area/demo/range-spline-area.js | 5 ++--- site/examples/statistics/area/demo/stacked-area.js | 2 +- site/examples/statistics/area/demo/step-area.js | 6 ++---- site/examples/statistics/dual-axes/demo/basic.js | 2 +- .../statistics/dual-axes/demo/custom-dual-line.js | 2 +- .../statistics/dual-axes/demo/dual-multi-line.js | 8 ++++---- .../statistics/dual-axes/demo/dual-step-line.js | 4 ++-- .../statistics/dual-axes/demo/multi-line.js | 4 ++-- site/examples/statistics/line/demo/basic.js | 2 +- site/examples/statistics/line/demo/color.js | 2 +- .../examples/statistics/line/demo/line-threshold.js | 2 +- site/examples/statistics/line/demo/line-var-size.js | 2 +- .../statistics/scatter/demo/point-jitter.js | 13 ++++++------- .../examples/statistics/scatter/demo/point-shape.js | 10 +++++----- .../examples/statistics/scatter/demo/point-strip.js | 9 ++++----- .../statistics/tiny/demo/area-annotation.js | 2 +- site/examples/statistics/tiny/demo/basic-area.js | 2 +- site/examples/statistics/tiny/demo/basic-line.js | 2 +- site/examples/statistics/tiny/demo/filled-area.js | 2 +- .../statistics/tiny/demo/line-annotation.js | 2 +- 23 files changed, 42 insertions(+), 49 deletions(-) diff --git a/site/examples/statistics/area/demo/area-difference.js b/site/examples/statistics/area/demo/area-difference.js index e3f58d8e5..67b350544 100644 --- a/site/examples/statistics/area/demo/area-difference.js +++ b/site/examples/statistics/area/demo/area-difference.js @@ -19,14 +19,13 @@ const DemoArea = () => { xField: (d) => new Date(d.date), yField: 'temperature', colorField: 'city', - shape: 'hvh', + shapeField: 'hvh', diff: true, meta: { color: { range: ['#67a9cf', '#ef8a62'] }, }, line: { yField: 'San Francisco', - shape: 'hvh', style: { stroke: '#000', }, diff --git a/site/examples/statistics/area/demo/cascade-area.js b/site/examples/statistics/area/demo/cascade-area.js index f8c5e1136..9e53bcb10 100644 --- a/site/examples/statistics/area/demo/cascade-area.js +++ b/site/examples/statistics/area/demo/cascade-area.js @@ -12,7 +12,7 @@ const DemoArea = () => { yField: 'revenue', seriesField: 'format', colorField: 'group', - shape: 'smooth', + shapeField: 'smooth', stack: { orderBy: 'maxIndex', reverse: true, @@ -22,7 +22,6 @@ const DemoArea = () => { }, tooltip: { channel: 'y', valueFormatter: '.2f' }, line: { - shape: 'smooth', stack: { orderBy: 'maxIndex', reverse: true, diff --git a/site/examples/statistics/area/demo/orderly-area.js b/site/examples/statistics/area/demo/orderly-area.js index 391751f8d..8c6e25e04 100644 --- a/site/examples/statistics/area/demo/orderly-area.js +++ b/site/examples/statistics/area/demo/orderly-area.js @@ -11,7 +11,7 @@ const DemoArea = () => { xField: (d) => new Date(d.date), yField: 'unemployed', colorField: 'industry', - shape: 'smooth', + shapeField: 'smooth', meta: { x: { utc: true }, }, diff --git a/site/examples/statistics/area/demo/range-spline-area.js b/site/examples/statistics/area/demo/range-spline-area.js index 3f38dae0b..88709b4d8 100644 --- a/site/examples/statistics/area/demo/range-spline-area.js +++ b/site/examples/statistics/area/demo/range-spline-area.js @@ -16,7 +16,7 @@ const DemoArea = () => { }, xField: 'x', yField: ['low', 'high'], - shape: 'smooth', + shapeField: 'smooth', style: { fillOpacity: 0.5, fill: '#64b5f6', @@ -30,12 +30,11 @@ const DemoArea = () => { }, point: { yField: 'v2', - shape: 'point', + shapeField: 'point', sizeField: 2, }, line: { yField: 'v3', - shape: 'smooth', style: { stroke: '#FF6B3B', }, diff --git a/site/examples/statistics/area/demo/stacked-area.js b/site/examples/statistics/area/demo/stacked-area.js index ac472f8dc..3442712a7 100644 --- a/site/examples/statistics/area/demo/stacked-area.js +++ b/site/examples/statistics/area/demo/stacked-area.js @@ -11,7 +11,7 @@ const DemoArea = () => { xField: (d) => new Date(d.date), yField: 'unemployed', colorField: 'industry', - shape: 'smooth', + shapeField: 'smooth', stack: true, // Try to remove this line. }; return ; diff --git a/site/examples/statistics/area/demo/step-area.js b/site/examples/statistics/area/demo/step-area.js index 280fa7ae5..11940b433 100644 --- a/site/examples/statistics/area/demo/step-area.js +++ b/site/examples/statistics/area/demo/step-area.js @@ -17,7 +17,7 @@ const DemoArea = () => { ], xField: 'year', yField: 'value', - shape: 'hvh', + shapeField: 'hvh', label: { text: 'value', style: { @@ -35,9 +35,7 @@ const DemoArea = () => { axis: { y: { labelFormatter: '~s' }, }, - line: { - shape: 'hvh', - }, + line: {}, }; return ; }; diff --git a/site/examples/statistics/dual-axes/demo/basic.js b/site/examples/statistics/dual-axes/demo/basic.js index 15f544230..b3bbc1e16 100644 --- a/site/examples/statistics/dual-axes/demo/basic.js +++ b/site/examples/statistics/dual-axes/demo/basic.js @@ -26,7 +26,7 @@ const DemoDualAxes = () => { type: 'line', xField: 'time', yField: 'people', - shape: 'smooth', + shapeField: 'smooth', style: { stroke: '#fdae6b', lineWidth: 2, diff --git a/site/examples/statistics/dual-axes/demo/custom-dual-line.js b/site/examples/statistics/dual-axes/demo/custom-dual-line.js index 04b256462..2cf0d5ff7 100644 --- a/site/examples/statistics/dual-axes/demo/custom-dual-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-dual-line.js @@ -47,7 +47,7 @@ const DemoDualAxes = () => { { type: 'line', yField: 'count', - shape: 'smooth', + shapeField: 'smooth', style: { stroke: '#5AD8A6', lineWidth: 4, diff --git a/site/examples/statistics/dual-axes/demo/dual-multi-line.js b/site/examples/statistics/dual-axes/demo/dual-multi-line.js index c6e05d77f..3280f5487 100644 --- a/site/examples/statistics/dual-axes/demo/dual-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-multi-line.js @@ -7,8 +7,8 @@ const lineColor = { bill: 'rgb(90, 216, 166)', a: 'rgb(93, 112, 146)', b: 'rgb(246, 189, 22)', - c: 'rgb(111, 94, 249)' -} + c: 'rgb(111, 94, 249)', +}; const DemoDualAxes = () => { const uvBillData = [ @@ -52,7 +52,7 @@ const DemoDualAxes = () => { type: 'line', yField: 'value', seriesField: 'type', - shape: 'smooth', + shapeField: 'smooth', style: { lineWidth: 2, lineDash: [5, 5], @@ -78,7 +78,7 @@ const DemoDualAxes = () => { fill: (d) => lineColor[d.name], stroke: (d) => lineColor[d.name], }, - tooltip: false + tooltip: false, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/dual-step-line.js b/site/examples/statistics/dual-axes/demo/dual-step-line.js index 5694c1d5b..a4bea526d 100644 --- a/site/examples/statistics/dual-axes/demo/dual-step-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-step-line.js @@ -22,7 +22,7 @@ const DemoDualAxes = () => { { type: 'line', yField: 'value', - shape: 'vh', + shapeField: 'vh', style: { stroke: '#29cae4', lineWidth: 2, @@ -34,7 +34,7 @@ const DemoDualAxes = () => { { type: 'line', yField: 'count', - shape: 'smooth', + shapeField: 'smooth', style: { stroke: '#5AD8A6', lineWidth: 2, diff --git a/site/examples/statistics/dual-axes/demo/multi-line.js b/site/examples/statistics/dual-axes/demo/multi-line.js index 2d3b1fd4e..56226682f 100644 --- a/site/examples/statistics/dual-axes/demo/multi-line.js +++ b/site/examples/statistics/dual-axes/demo/multi-line.js @@ -85,7 +85,7 @@ const DemoDualAxes = () => { { type: 'line', yField: 'Temperature', - shape: 'smooth', + shapeField: 'smooth', colorField: '#EE6666', meta: { y: { independent: true, domainMax: 30 }, @@ -123,7 +123,7 @@ const DemoDualAxes = () => { { type: 'line', yField: 'Precipitation', - shape: 'smooth', + shapeField: 'smooth', colorField: '#91CC75', meta: { y: { independent: true }, diff --git a/site/examples/statistics/line/demo/basic.js b/site/examples/statistics/line/demo/basic.js index d3591c8f9..1ecde7310 100644 --- a/site/examples/statistics/line/demo/basic.js +++ b/site/examples/statistics/line/demo/basic.js @@ -10,7 +10,7 @@ const DemoLine = () => { }, xField: 'Date', yField: 'scales', - shape: 'smooth', + shapeField: 'smooth', style: { lineWidth: 2, }, diff --git a/site/examples/statistics/line/demo/color.js b/site/examples/statistics/line/demo/color.js index 0ccc047d8..12353236f 100644 --- a/site/examples/statistics/line/demo/color.js +++ b/site/examples/statistics/line/demo/color.js @@ -12,7 +12,7 @@ const DemoLine = () => { yField: 'value', colorField: 'condition', seriesField: () => 'a', - shape: 'hvh', + shapeField: 'hvh', style: { gradient: 'x', lineWidth: 2, diff --git a/site/examples/statistics/line/demo/line-threshold.js b/site/examples/statistics/line/demo/line-threshold.js index cd57a167e..002f4db81 100644 --- a/site/examples/statistics/line/demo/line-threshold.js +++ b/site/examples/statistics/line/demo/line-threshold.js @@ -10,7 +10,7 @@ const DemoLine = () => { }, xField: (d) => new Date(d.date), yField: 'value', - shape: 'hvh', + shapeField: 'hvh', colorField: 'value', axis: { x: { title: 'date' }, diff --git a/site/examples/statistics/line/demo/line-var-size.js b/site/examples/statistics/line/demo/line-var-size.js index 0185a717e..88b25d239 100644 --- a/site/examples/statistics/line/demo/line-var-size.js +++ b/site/examples/statistics/line/demo/line-var-size.js @@ -12,7 +12,7 @@ const DemoLine = () => { yField: 'value', sizeField: 'value', stack: true, - shape: 'trail', + shapeField: 'trail', legend: { size: false }, colorField: 'category', }; diff --git a/site/examples/statistics/scatter/demo/point-jitter.js b/site/examples/statistics/scatter/demo/point-jitter.js index 63884412d..8fd25a96a 100644 --- a/site/examples/statistics/scatter/demo/point-jitter.js +++ b/site/examples/statistics/scatter/demo/point-jitter.js @@ -5,18 +5,17 @@ import ReactDOM from 'react-dom'; const DemoScatter = () => { const config = { data: { - type: "fetch", - value: - "https://gw.alipayobjects.com/os/bmw-prod/2c813e2d-2276-40b9-a9af-cf0a0fb7e942.csv", + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/2c813e2d-2276-40b9-a9af-cf0a0fb7e942.csv', }, - transform: [{ type: 'sortX', channel: 'x' },{ type: 'jitterX' }], + transform: [{ type: 'sortX', channel: 'x' }, { type: 'jitterX' }], xField: 'Cylinders', yField: 'Horsepower', colorField: 'Cylinders', - shape: 'hollow', + shapeField: 'hollow', meta: { - x: { type: 'point' }, - color: { type: 'ordinal' }, + x: { type: 'point' }, + color: { type: 'ordinal' }, }, }; return ; diff --git a/site/examples/statistics/scatter/demo/point-shape.js b/site/examples/statistics/scatter/demo/point-shape.js index 2e29097c9..d235f8646 100644 --- a/site/examples/statistics/scatter/demo/point-shape.js +++ b/site/examples/statistics/scatter/demo/point-shape.js @@ -5,8 +5,8 @@ import ReactDOM from 'react-dom'; const DemoScatter = () => { const config = { data: { - type: "fetch", - value: "https://gw.alipayobjects.com/os/bmw-prod/bd73a175-4417-4749-8b88-bc04d955e899.csv", + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/bd73a175-4417-4749-8b88-bc04d955e899.csv', }, xField: 'x', yField: 'y', @@ -14,10 +14,10 @@ const DemoScatter = () => { sizeField: 5, shapeField: 'category', meta: { - shape: { range: ['point', 'plus', 'diamond'] }, + shapeField: { range: ['point', 'plus', 'diamond'] }, }, }; - return ; + return ; }; -ReactDOM.render( , document.getElementById('container')); +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/scatter/demo/point-strip.js b/site/examples/statistics/scatter/demo/point-strip.js index b38cbe8a2..22c42100e 100644 --- a/site/examples/statistics/scatter/demo/point-strip.js +++ b/site/examples/statistics/scatter/demo/point-strip.js @@ -7,12 +7,11 @@ const DemoScatter = () => { autoFit: false, height: 300, data: { - type: "fetch", - value: - "https://gw.alipayobjects.com/os/bmw-prod/2c813e2d-2276-40b9-a9af-cf0a0fb7e942.csv", + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/2c813e2d-2276-40b9-a9af-cf0a0fb7e942.csv', }, transform: [{ type: 'sortX', channel: 'x' }], - coordinate: { transform: [{ type: "transpose" }] }, + coordinate: { transform: [{ type: 'transpose' }] }, xField: 'Cylinders', yField: 'Horsepower', sizeField: 20, @@ -21,7 +20,7 @@ const DemoScatter = () => { y: { zero: true }, color: { type: 'ordinal' }, }, - shape: 'line', + shapeField: 'line', }; return ; }; diff --git a/site/examples/statistics/tiny/demo/area-annotation.js b/site/examples/statistics/tiny/demo/area-annotation.js index 2f14a6845..b5a22044e 100644 --- a/site/examples/statistics/tiny/demo/area-annotation.js +++ b/site/examples/statistics/tiny/demo/area-annotation.js @@ -12,7 +12,7 @@ const DemoArea = () => { width: 480, height: 80, padding: 8, - shape: 'smooth', + shapeField: 'smooth', xField: (_, idx) => idx, yField: (d) => d, meta: { diff --git a/site/examples/statistics/tiny/demo/basic-area.js b/site/examples/statistics/tiny/demo/basic-area.js index d67fa4bb8..140677c3d 100644 --- a/site/examples/statistics/tiny/demo/basic-area.js +++ b/site/examples/statistics/tiny/demo/basic-area.js @@ -10,7 +10,7 @@ const DemoArea = () => { width: 480, height: 80, padding: 8, - shape: 'smooth', + shapeField: 'smooth', xField: (_, idx) => idx, yField: (d) => d, meta: { diff --git a/site/examples/statistics/tiny/demo/basic-line.js b/site/examples/statistics/tiny/demo/basic-line.js index 173adb629..2bb5a5129 100644 --- a/site/examples/statistics/tiny/demo/basic-line.js +++ b/site/examples/statistics/tiny/demo/basic-line.js @@ -9,7 +9,7 @@ const DemoLine = () => { ], width: 480, height: 120, - shape: 'smooth', + shapeField: 'smooth', xField: (_, idx) => idx, yField: (d) => d, label: { diff --git a/site/examples/statistics/tiny/demo/filled-area.js b/site/examples/statistics/tiny/demo/filled-area.js index f2f7c3b4e..95817f546 100644 --- a/site/examples/statistics/tiny/demo/filled-area.js +++ b/site/examples/statistics/tiny/demo/filled-area.js @@ -10,7 +10,7 @@ const DemoArea = () => { width: 480, height: 80, padding: 8, - shape: 'smooth', + shapeField: 'smooth', xField: (_, idx) => idx, yField: (d) => d, meta: { diff --git a/site/examples/statistics/tiny/demo/line-annotation.js b/site/examples/statistics/tiny/demo/line-annotation.js index 765f51167..f304ad70e 100644 --- a/site/examples/statistics/tiny/demo/line-annotation.js +++ b/site/examples/statistics/tiny/demo/line-annotation.js @@ -9,7 +9,7 @@ const DemoLine = () => { data, width: 480, height: 120, - shape: 'smooth', + shapeField: 'smooth', xField: (_, idx) => idx, yField: (d) => d, animate: { enter: { type: 'fadeIn' } }, From 6c27dd502bd19a8bf314bdf0b9e74bc025acfd0f Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 4 Sep 2023 21:16:52 +0800 Subject: [PATCH 048/268] feat: add waterfall chart (#2094) --- packages/plots/package.json | 2 +- packages/plots/src/components/index.ts | 3 +- .../plots/src/components/waterfall/index.tsx | 10 +++ packages/plots/src/core/index.ts | 3 + .../plots/src/core/plots/waterfall/adaptor.ts | 76 +++++++++++++++++++ .../src/core/plots/waterfall/constants.ts | 3 + .../plots/src/core/plots/waterfall/index.ts | 61 +++++++++++++++ .../plots/src/core/plots/waterfall/type.ts | 7 ++ packages/plots/src/core/types/common.ts | 2 + packages/plots/src/core/utils/transform.ts | 2 +- site/examples/statistics/waterfall/API.en.md | 1 + site/examples/statistics/waterfall/API.zh.md | 1 + .../statistics/waterfall/demo/annotation.js | 49 ++++++++++++ .../statistics/waterfall/demo/meta.json | 24 ++++++ .../waterfall/demo/revenue-flow-waterfall.js | 48 ++++++++++++ .../examples/statistics/waterfall/index.en.md | 4 + .../examples/statistics/waterfall/index.zh.md | 6 ++ 17 files changed, 299 insertions(+), 3 deletions(-) create mode 100644 packages/plots/src/components/waterfall/index.tsx create mode 100644 packages/plots/src/core/plots/waterfall/adaptor.ts create mode 100644 packages/plots/src/core/plots/waterfall/constants.ts create mode 100644 packages/plots/src/core/plots/waterfall/index.ts create mode 100644 packages/plots/src/core/plots/waterfall/type.ts create mode 100644 site/examples/statistics/waterfall/API.en.md create mode 100644 site/examples/statistics/waterfall/API.zh.md create mode 100644 site/examples/statistics/waterfall/demo/annotation.js create mode 100644 site/examples/statistics/waterfall/demo/meta.json create mode 100644 site/examples/statistics/waterfall/demo/revenue-flow-waterfall.js create mode 100644 site/examples/statistics/waterfall/index.en.md create mode 100644 site/examples/statistics/waterfall/index.zh.md diff --git a/packages/plots/package.json b/packages/plots/package.json index 298e4b7fd..0ce919808 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@antv/event-emitter": "^0.1.3", - "@antv/g2": "^5.0.16", + "@antv/g2": "^5.1.0", "size-sensor": "^1.0.1", "react-content-loader": "^5.0.4", "@ant-design/rc-utils": "workspace:*" diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index d88f1fc51..c38736f2d 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -8,6 +8,7 @@ import Scatter from './scatter'; import Radar from './radar'; import { Tiny } from './tiny'; import Rose from './rose'; +import Waterfall from './waterfall'; import Histogram from './histogram'; -export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram }; +export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall }; diff --git a/packages/plots/src/components/waterfall/index.tsx b/packages/plots/src/components/waterfall/index.tsx new file mode 100644 index 000000000..d11b7c1bd --- /dev/null +++ b/packages/plots/src/components/waterfall/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { WaterfallOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type WaterfallConfig = CommonConfig; + +const WaterfallChart = (props: WaterfallConfig) => ; + +export default WaterfallChart; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 8b4e3b24e..b8638f8ce 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -11,6 +11,7 @@ export type { TinyLineOptions } from './plots/tiny-line'; export type { TinyAreaOptions } from './plots/tiny-area'; export type { TinyColumnOptions } from './plots/tiny-column'; export type { RoseOptions } from './plots/rose'; +export type { WaterfallOptions } from './plots/waterfall'; export type { HistogramOptions } from './plots/histogram'; export * from './types'; @@ -26,6 +27,7 @@ import { TinyLine } from './plots/tiny-line'; import { TinyArea } from './plots/tiny-area'; import { TinyColumn } from './plots/tiny-column'; import { Rose } from './plots/rose'; +import { Waterfall } from './plots/waterfall'; import { Histogram } from './plots/histogram'; export const Plots = { @@ -41,5 +43,6 @@ export const Plots = { TinyLine, TinyArea, TinyColumn, + Waterfall, Histogram, }; diff --git a/packages/plots/src/core/plots/waterfall/adaptor.ts b/packages/plots/src/core/plots/waterfall/adaptor.ts new file mode 100644 index 000000000..6349fa0ce --- /dev/null +++ b/packages/plots/src/core/plots/waterfall/adaptor.ts @@ -0,0 +1,76 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import { START_KEY, END_KEY, WATERFALL_VALUE } from './constants'; +import type { Adaptor } from '../../types'; +import type { WaterfallOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + /** + * @description 数据转换 + */ + const transformData = (params: Params) => { + const { options } = params; + const { data = [], yField } = options; + if (!data.length) return params; + data.reduce((prev, cur, index) => { + if (index === 0 || cur.isTotal) { + cur[START_KEY] = 0; + cur[END_KEY] = cur[yField]; + cur[WATERFALL_VALUE] = cur[yField]; + } else { + const start = prev[END_KEY] ?? prev[yField]; + cur[START_KEY] = start; + cur[END_KEY] = start + cur[yField]; + cur[WATERFALL_VALUE] = prev[END_KEY]; + } + return cur; + }, []); + Object.assign(options, { yField: [START_KEY, END_KEY] }); + return params; + }; + /** + * @description 添加连线信息 + */ + const link = (params: Params) => { + const { options } = params; + const { data = [], xField, children, linkStyle } = options; + const linkData = [...data]; + linkData.reduce((prev, cur, index) => { + if (index > 0) { + cur.x1 = prev[xField]; + cur.x2 = cur[xField]; + cur.y1 = prev[END_KEY]; + } + return cur; + }, []); + linkData.shift(); + children.push({ + type: 'link', + xField: ['x1', 'x2'], + yField: 'y1', + data: linkData, + style: { + stroke: '#697474', + ...linkStyle, + }, + labels: [], + tooltip: false, + }); + return params; + }; + + return flow(init, transformData, link, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/waterfall/constants.ts b/packages/plots/src/core/plots/waterfall/constants.ts new file mode 100644 index 000000000..79f5c08ff --- /dev/null +++ b/packages/plots/src/core/plots/waterfall/constants.ts @@ -0,0 +1,3 @@ +export const START_KEY = '__start__'; +export const END_KEY = '__end__'; +export const WATERFALL_VALUE = '__waterfall_value__'; diff --git a/packages/plots/src/core/plots/waterfall/index.ts b/packages/plots/src/core/plots/waterfall/index.ts new file mode 100644 index 000000000..c92a6b4c9 --- /dev/null +++ b/packages/plots/src/core/plots/waterfall/index.ts @@ -0,0 +1,61 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { WATERFALL_VALUE } from './constants'; +import { WaterfallOptions } from './type'; + +export type { WaterfallOptions }; + +export class Waterfall extends Plot { + /** 图表类型 */ + public type = 'waterfall'; + + /** + * 获取 折线图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + legend: null, + tooltip: { + field: WATERFALL_VALUE, + valueFormatter: '~s', + name: 'value', + }, + axis: { + y: { + title: null, + labelFormatter: '~s', + }, + x: { + title: null, + }, + }, + children: [ + { + type: 'interval', + interaction: { + elementHighlightByColor: { + background: true, + }, + }, + }, + ], + }; + } + + /** + * 获取 折线图 默认配置 + */ + protected getDefaultOptions() { + return Waterfall.getDefaultOptions(); + } + + /** + * 折线图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/waterfall/type.ts b/packages/plots/src/core/plots/waterfall/type.ts new file mode 100644 index 000000000..8d79f3190 --- /dev/null +++ b/packages/plots/src/core/plots/waterfall/type.ts @@ -0,0 +1,7 @@ +import type { BaseOptions, Options, AttrStyle } from '../../types/common'; + +export type WaterfallOptions = Options & + BaseOptions & { + /***/ + linkStyle: AttrStyle; + }; diff --git a/packages/plots/src/core/types/common.ts b/packages/plots/src/core/types/common.ts index b1cf8ef18..b37c49f26 100644 --- a/packages/plots/src/core/types/common.ts +++ b/packages/plots/src/core/types/common.ts @@ -65,3 +65,5 @@ export type Adaptor

= { options: P; originOptions?: P; }; + +export type AttrStyle = Record; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index fb3014514..c38bd7f34 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -85,7 +85,7 @@ export const transformOptions = (params: Adaptor) => { * @description 外层配置应用到所有 children */ const copyChild = { ...child }; - const transformOption = deepAssign(child, rest); + const transformOption = deepAssign(child, rest, copyChild); const transformChildrenConfig = (transformObject: object, specKey: string, key: string) => { /** diff --git a/site/examples/statistics/waterfall/API.en.md b/site/examples/statistics/waterfall/API.en.md new file mode 100644 index 000000000..c1e37aeb9 --- /dev/null +++ b/site/examples/statistics/waterfall/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/waterfall/API.zh.md b/site/examples/statistics/waterfall/API.zh.md new file mode 100644 index 000000000..4aa3b3d32 --- /dev/null +++ b/site/examples/statistics/waterfall/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/waterfall/demo/annotation.js b/site/examples/statistics/waterfall/demo/annotation.js new file mode 100644 index 000000000..ed0553874 --- /dev/null +++ b/site/examples/statistics/waterfall/demo/annotation.js @@ -0,0 +1,49 @@ +import { Waterfall } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoWaterfall = () => { + const data = [ + { quarter: '第一季度', value: 6200000 }, + { quarter: '第二季度', value: -2600000 }, + { quarter: '第三季度', value: 4100000 }, + { quarter: '第四季度', value: 3700000 }, + { quarter: '总计', value: 11400000, isTotal: true }, + ]; + const config = { + data, + xField: 'quarter', + yField: 'value', + linkStyle: { + lineDash: [4, 2], + stroke: '#ccc', + }, + style: { + maxWidth: 60, + stroke: '#ccc', + fill: (d) => { + return d.isTotal ? '#96a6a6' : d.value > 0 ? '#F56E53' : '#3CC27F'; + }, + }, + labels: [ + { + text: 'value', + formatter: '~s', + position: 'inside', + fontSize: 10, + }, + { + text: (arg) => { + return `${arg.y1 / 10000000} 亿`; + }, + position: (d) => (d.value > 0 ? 'top' : 'bottom'), + textBaseline: (d) => (d.value > 0 ? 'bottom' : 'top'), + fontSize: 10, + dy: (d) => (d.value > 0 ? -4 : 4), + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/waterfall/demo/meta.json b/site/examples/statistics/waterfall/demo/meta.json new file mode 100644 index 000000000..a5d6e64fb --- /dev/null +++ b/site/examples/statistics/waterfall/demo/meta.json @@ -0,0 +1,24 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "revenue-flow-waterfall.js", + "title": { + "zh": "线标记的瀑布图", + "en": "Revenue Flow Waterfall Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*fG4DT7XWNzUAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "annotation.js", + "title": { + "zh": "瀑布图 - 添加标注", + "en": "Waterfall plot with annotation" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*xOfKT5qr9R4AAAAAAAAAAAAAARQnAQ" + } + ] +} diff --git a/site/examples/statistics/waterfall/demo/revenue-flow-waterfall.js b/site/examples/statistics/waterfall/demo/revenue-flow-waterfall.js new file mode 100644 index 000000000..cff52dd5b --- /dev/null +++ b/site/examples/statistics/waterfall/demo/revenue-flow-waterfall.js @@ -0,0 +1,48 @@ +import { Waterfall } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoWaterfall = () => { + const config = { + data: [ + { x: 'Start', value: 23000000 }, + { x: 'Jan', value: 2200000 }, + { x: 'Feb', value: -4600000 }, + { x: 'Mar', value: -9100000 }, + { x: 'Apr', value: 3700000 }, + { x: 'May', value: -2100000 }, + { x: 'Jun', value: 5300000 }, + { x: 'Jul', value: 3100000 }, + { x: 'Aug', value: -1500000 }, + { x: 'Sep', value: 4200000 }, + { x: 'Oct', value: 5300000 }, + { x: 'Nov', value: -1500000 }, + { x: 'Dec', value: 5100000 }, + { x: 'End', isTotal: true, value: 33100000 }, + ], + xField: 'x', + yField: 'value', + linkStyle: { + lineDash: [4, 2], + stroke: '#ccc', + }, + style: { + maxWidth: 25, + stroke: '#ccc', + fill: (d, idx) => { + return idx === 0 || d.isTotal ? '#96a6a6' : d.value > 0 ? '#64b5f6' : '#ef6c00'; + }, + }, + labels: { + text: 'value', + formatter: '~s', + position: (d) => (d.value > 0 ? 'top' : 'bottom'), + textBaseline: (d) => (d.value > 0 ? 'bottom' : 'top'), + fontSize: 10, + dy: (d) => (d.value > 0 ? -4 : 4), + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/waterfall/index.en.md b/site/examples/statistics/waterfall/index.en.md new file mode 100644 index 000000000..6ef4fdd4d --- /dev/null +++ b/site/examples/statistics/waterfall/index.en.md @@ -0,0 +1,4 @@ +--- +title: Waterfall +order: 1 +--- \ No newline at end of file diff --git a/site/examples/statistics/waterfall/index.zh.md b/site/examples/statistics/waterfall/index.zh.md new file mode 100644 index 000000000..c04cd0ed6 --- /dev/null +++ b/site/examples/statistics/waterfall/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 瀑布图 +order: 1 +--- + + From b5af09bebc2b787f07207083796d2512561c5ded Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 5 Sep 2023 09:40:03 +0800 Subject: [PATCH 049/268] chore: optimization label logic (#2096) --- packages/plots/src/core/constants/index.ts | 26 +++++++++++++++++-- .../plots/src/core/plots/waterfall/adaptor.ts | 2 +- .../statistics/dual-axes/demo/basic.js | 7 +++++ .../statistics/waterfall/demo/annotation.js | 2 +- .../waterfall/demo/revenue-flow-waterfall.js | 2 +- 5 files changed, 34 insertions(+), 5 deletions(-) diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index c9be3f31e..e3a8797c9 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -1,4 +1,4 @@ -import { isBoolean } from '../utils'; +import { isArray, isBoolean } from '../utils'; /** new Chart options */ export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas', 'theme']; @@ -182,7 +182,29 @@ export const SPECIAL_OPTIONS = [ }, { key: 'labels', - callback: (origin: object, key: string, value: { type: string; available?: boolean }) => { + callback: ( + origin: object, + key: string, + value: { available?: boolean; text?: string | Function; [key: string]: unknown } | any[], + ) => { + /** + * @description 特殊情况处理 + * 1. 如果 labels 为 false,表示关闭标签 + * 2. 如果 labels 为数组,用于多 label 的场景 + * @example + * 1. label: false -> labels: [] + * 2. label: [{x}, {xx}] -> labels: [{x}, {xx}] + */ + if (!value || isArray(value)) { + origin[key] = value ? value : []; + return; + } + /** + * @description 填充默认 text 逻辑 + */ + if (!(value as { text: string | Function }).text) { + value['text'] = origin['yField']; + } origin[key] = origin[key] || []; origin[key].push({ [TRANSFORM_SIGN]: true, ...value }); }, diff --git a/packages/plots/src/core/plots/waterfall/adaptor.ts b/packages/plots/src/core/plots/waterfall/adaptor.ts index 6349fa0ce..36041031e 100644 --- a/packages/plots/src/core/plots/waterfall/adaptor.ts +++ b/packages/plots/src/core/plots/waterfall/adaptor.ts @@ -66,7 +66,7 @@ export function adaptor(params: Params) { stroke: '#697474', ...linkStyle, }, - labels: [], + label: false, tooltip: false, }); return params; diff --git a/site/examples/statistics/dual-axes/demo/basic.js b/site/examples/statistics/dual-axes/demo/basic.js index b3bbc1e16..78988493a 100644 --- a/site/examples/statistics/dual-axes/demo/basic.js +++ b/site/examples/statistics/dual-axes/demo/basic.js @@ -21,6 +21,10 @@ const DemoDualAxes = () => { axis: { y: { title: 'Waiting', style: { titleFill: '#5B8FF9' } }, }, + label: { + text: 'waiting', + position: 'inside', + }, }, { type: 'line', @@ -31,6 +35,9 @@ const DemoDualAxes = () => { stroke: '#fdae6b', lineWidth: 2, }, + label: { + text: 'people', + }, meta: { y: { independent: true, diff --git a/site/examples/statistics/waterfall/demo/annotation.js b/site/examples/statistics/waterfall/demo/annotation.js index ed0553874..0d8c1af5a 100644 --- a/site/examples/statistics/waterfall/demo/annotation.js +++ b/site/examples/statistics/waterfall/demo/annotation.js @@ -25,7 +25,7 @@ const DemoWaterfall = () => { return d.isTotal ? '#96a6a6' : d.value > 0 ? '#F56E53' : '#3CC27F'; }, }, - labels: [ + label: [ { text: 'value', formatter: '~s', diff --git a/site/examples/statistics/waterfall/demo/revenue-flow-waterfall.js b/site/examples/statistics/waterfall/demo/revenue-flow-waterfall.js index cff52dd5b..93d05f3e7 100644 --- a/site/examples/statistics/waterfall/demo/revenue-flow-waterfall.js +++ b/site/examples/statistics/waterfall/demo/revenue-flow-waterfall.js @@ -33,7 +33,7 @@ const DemoWaterfall = () => { return idx === 0 || d.isTotal ? '#96a6a6' : d.value > 0 ? '#64b5f6' : '#ef6c00'; }, }, - labels: { + label: { text: 'value', formatter: '~s', position: (d) => (d.value > 0 ? 'top' : 'bottom'), From aff82fe169f47b77da02fab107f397098723964e Mon Sep 17 00:00:00 2001 From: OctKun <2310353398@qq.com> Date: Tue, 5 Sep 2023 20:08:02 +0800 Subject: [PATCH 050/268] =?UTF-8?q?chore:=20=E4=BD=BF=E7=94=A8lodash=20get?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2.=E8=BF=90=E7=AE=97=E7=AC=A6=20(#2097)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: chenkun --- packages/plots/src/core/plots/histogram/adaptor.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/plots/src/core/plots/histogram/adaptor.ts b/packages/plots/src/core/plots/histogram/adaptor.ts index b8fe70a53..8ffaa8a8e 100644 --- a/packages/plots/src/core/plots/histogram/adaptor.ts +++ b/packages/plots/src/core/plots/histogram/adaptor.ts @@ -1,4 +1,4 @@ -import { flow, transformOptions, assign, isNumber, divide, ceil } from '../../utils'; +import { flow, transformOptions, assign, isNumber, divide, ceil, get } from '../../utils'; import { mark } from '../../components'; import type { Adaptor } from '../../types'; import type { HistogramOptions } from './type'; @@ -20,13 +20,14 @@ export function adaptor(params: Params) { const transformHistogramConfig = (params: Params) => { const { options } = params; const { data, binNumber, binWidth, children, channel = 'count' } = options; + const targetTransform = get(children, '[0].transform[0]', {}); if (isNumber(binWidth)) { - assign(children[0].transform[0], { thresholds: ceil(divide(data.length, binWidth)), y: channel }); + assign(targetTransform, { thresholds: ceil(divide(data.length, binWidth)), y: channel }); return params; } if (isNumber(binNumber)) { - assign(children[0].transform[0], { thresholds: binNumber, y: channel }); + assign(targetTransform, { thresholds: binNumber, y: channel }); return params; } return params; From 4cdb47237845d6e30c8522bfc2eb0c589d38a7ac Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 5 Sep 2023 20:19:48 +0800 Subject: [PATCH 051/268] feat: add heatmap chart (#2098) --- .../plots/src/components/heatmap/index.tsx | 10 ++++ packages/plots/src/components/index.ts | 3 +- packages/plots/src/core/index.ts | 3 + .../plots/src/core/plots/heatmap/adaptor.ts | 45 ++++++++++++++ .../plots/src/core/plots/heatmap/index.ts | 59 +++++++++++++++++++ packages/plots/src/core/plots/heatmap/type.ts | 8 +++ site/examples/statistics/heatmap/API.en.md | 1 + site/examples/statistics/heatmap/API.zh.md | 1 + .../examples/statistics/heatmap/demo/basic.js | 43 ++++++++++++++ .../heatmap/demo/cell-aggregated.js | 29 +++++++++ .../statistics/heatmap/demo/meta.json | 32 ++++++++++ .../examples/statistics/heatmap/demo/shape.js | 45 ++++++++++++++ site/examples/statistics/heatmap/index.en.md | 4 ++ site/examples/statistics/heatmap/index.zh.md | 6 ++ 14 files changed, 288 insertions(+), 1 deletion(-) create mode 100644 packages/plots/src/components/heatmap/index.tsx create mode 100644 packages/plots/src/core/plots/heatmap/adaptor.ts create mode 100644 packages/plots/src/core/plots/heatmap/index.ts create mode 100644 packages/plots/src/core/plots/heatmap/type.ts create mode 100644 site/examples/statistics/heatmap/API.en.md create mode 100644 site/examples/statistics/heatmap/API.zh.md create mode 100644 site/examples/statistics/heatmap/demo/basic.js create mode 100644 site/examples/statistics/heatmap/demo/cell-aggregated.js create mode 100644 site/examples/statistics/heatmap/demo/meta.json create mode 100644 site/examples/statistics/heatmap/demo/shape.js create mode 100644 site/examples/statistics/heatmap/index.en.md create mode 100644 site/examples/statistics/heatmap/index.zh.md diff --git a/packages/plots/src/components/heatmap/index.tsx b/packages/plots/src/components/heatmap/index.tsx new file mode 100644 index 000000000..4766c6100 --- /dev/null +++ b/packages/plots/src/components/heatmap/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { HeatmapOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type HeatmapConfig = CommonConfig; + +const HeatmapChart = (props: HeatmapConfig) => ; + +export default HeatmapChart; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index c38736f2d..6766cda72 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -10,5 +10,6 @@ import { Tiny } from './tiny'; import Rose from './rose'; import Waterfall from './waterfall'; import Histogram from './histogram'; +import Heatmap from './heatmap'; -export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall }; +export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall,Heatmap}; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index b8638f8ce..88e2994ba 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -13,6 +13,7 @@ export type { TinyColumnOptions } from './plots/tiny-column'; export type { RoseOptions } from './plots/rose'; export type { WaterfallOptions } from './plots/waterfall'; export type { HistogramOptions } from './plots/histogram'; +export type { HeatmapOptions } from './plots/heatmap'; export * from './types'; import { Area } from './plots/area'; @@ -29,6 +30,7 @@ import { TinyColumn } from './plots/tiny-column'; import { Rose } from './plots/rose'; import { Waterfall } from './plots/waterfall'; import { Histogram } from './plots/histogram'; +import { Heatmap } from './plots/heatmap'; export const Plots = { Line, @@ -45,4 +47,5 @@ export const Plots = { TinyColumn, Waterfall, Histogram, + Heatmap, }; diff --git a/packages/plots/src/core/plots/heatmap/adaptor.ts b/packages/plots/src/core/plots/heatmap/adaptor.ts new file mode 100644 index 000000000..898146dbb --- /dev/null +++ b/packages/plots/src/core/plots/heatmap/adaptor.ts @@ -0,0 +1,45 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { HeatmapOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + /** + * @description 添加 tooltip 默认值 + */ + const tooltip = (params: Params) => { + const { options } = params; + const { tooltip, colorField, sizeField } = options; + if (!tooltip.field) { + tooltip.field = colorField || sizeField; + } + return params; + }; + + /** + * @description 根据 mark 修改图表类型 + */ + const transformMark = (params: Params) => { + const { options } = params; + const { mark, children } = options; + if (mark) { + children[0].type = mark; + } + return params; + }; + + return flow(init, tooltip, transformMark, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/heatmap/index.ts b/packages/plots/src/core/plots/heatmap/index.ts new file mode 100644 index 000000000..ffd4842d7 --- /dev/null +++ b/packages/plots/src/core/plots/heatmap/index.ts @@ -0,0 +1,59 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { HeatmapOptions } from './type'; + +export type { HeatmapOptions }; + +export class Heatmap extends Plot { + /** 图表类型 */ + public type = 'waterfall'; + + /** + * 获取 折线图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + legend: null, + tooltip: { + valueFormatter: '~s', + }, + axis: { + y: { + title: null, + grid: true, + }, + x: { + title: null, + grid: true, + }, + }, + children: [ + { + type: 'point', + interaction: { + elementHighlightByColor: { + background: true, + }, + }, + }, + ], + }; + } + + /** + * 获取 折线图 默认配置 + */ + protected getDefaultOptions() { + return Heatmap.getDefaultOptions(); + } + + /** + * 折线图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/heatmap/type.ts b/packages/plots/src/core/plots/heatmap/type.ts new file mode 100644 index 000000000..f8595756a --- /dev/null +++ b/packages/plots/src/core/plots/heatmap/type.ts @@ -0,0 +1,8 @@ +import { MarkTypes } from '@antv/g2'; +import type { BaseOptions, Options } from '../../types/common'; + +export type HeatmapOptions = Options & + BaseOptions & { + /** 热力图类型 */ + mark?: MarkTypes; + }; diff --git a/site/examples/statistics/heatmap/API.en.md b/site/examples/statistics/heatmap/API.en.md new file mode 100644 index 000000000..234a68dcf --- /dev/null +++ b/site/examples/statistics/heatmap/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/heatmap/API.zh.md b/site/examples/statistics/heatmap/API.zh.md new file mode 100644 index 000000000..0b6fecc57 --- /dev/null +++ b/site/examples/statistics/heatmap/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/heatmap/demo/basic.js b/site/examples/statistics/heatmap/demo/basic.js new file mode 100644 index 000000000..fc87e7be2 --- /dev/null +++ b/site/examples/statistics/heatmap/demo/basic.js @@ -0,0 +1,43 @@ +import React, { useState, useEffect } from 'react'; +import ReactDOM from 'react-dom'; +import { Heatmap } from '@ant-design/plots'; + +const DemoHeatmap = () => { + const [data, setData] = useState([]); + + useEffect(() => { + asyncFetch(); + }, []); + + const asyncFetch = () => { + fetch('https://gw.alipayobjects.com/os/bmw-prod/68d3f380-089e-4683-ab9e-4493200198f9.json') + .then((response) => response.json()) + .then((json) => setData(json)) + .catch((error) => { + console.log('fetch data failed', error); + }); + }; + const config = { + data, + xField: 'name', + yField: 'country', + colorField: 'value', + sizeField: 'value', + shapeField: 'square', + label: { + text: (d) => d.value, + position: 'inside', + style: { + fill: '#fff', + }, + }, + scale: { + size: { range: [12, 20] }, + color: { range: ['#dddddd', '#9ec8e0', '#5fa4cd', '#2e7ab6', '#114d90'] }, + }, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/heatmap/demo/cell-aggregated.js b/site/examples/statistics/heatmap/demo/cell-aggregated.js new file mode 100644 index 000000000..ab6dd92e9 --- /dev/null +++ b/site/examples/statistics/heatmap/demo/cell-aggregated.js @@ -0,0 +1,29 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Heatmap } from '@ant-design/plots'; + +const DemoHeatmap = () => { + const config = { + height: 300, + autoFit: false, + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/seattle-weather.json', + }, + xField: (d) => new Date(d.date).getUTCDate(), + yField: (d) => new Date(d.date).getUTCMonth(), + colorField: 'temp_max', + legend: {}, + mark: 'cell', + style: { inset: 0.5 }, + tooltip: { + title: 'date', + field: 'temp_max', + valueFormatter: '~s', + }, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/heatmap/demo/meta.json b/site/examples/statistics/heatmap/demo/meta.json new file mode 100644 index 000000000..0013883f2 --- /dev/null +++ b/site/examples/statistics/heatmap/demo/meta.json @@ -0,0 +1,32 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "热力形状大小映射", + "en": "Heatmap plot shape size mapping" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*H1vrQbPFskMAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "shape.js", + "title": { + "zh": "热力形状图", + "en": "Shape heatmap plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*ZG36SowgMVYAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "cell-aggregated.js", + "title": { + "zh": "聚合热力图", + "en": "Aggregated Heatmap" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*Wk4zR40uQesAAAAAAAAAAAAADmJ7AQ" + } + ] +} diff --git a/site/examples/statistics/heatmap/demo/shape.js b/site/examples/statistics/heatmap/demo/shape.js new file mode 100644 index 000000000..337d53aff --- /dev/null +++ b/site/examples/statistics/heatmap/demo/shape.js @@ -0,0 +1,45 @@ +import React, { useState, useEffect } from 'react'; +import ReactDOM from 'react-dom'; +import { Heatmap } from '@ant-design/plots'; + +const DemoHeatmap = () => { + const [data, setData] = useState([]); + + useEffect(() => { + asyncFetch(); + }, []); + + const asyncFetch = () => { + fetch('https://gw.alipayobjects.com/os/bmw-prod/68d3f380-089e-4683-ab9e-4493200198f9.json') + .then((response) => response.json()) + .then((json) => setData(json)) + .catch((error) => { + console.log('fetch data failed', error); + }); + }; + const config = { + data, + xField: 'name', + yField: 'country', + colorField: 'value', + sizeField: 'value', + shapeField: 'point', + scale: { + size: { range: [12, 20] }, + color: { range: ['#0d5fbb', '#7eadfc', '#fd8b6f', '#aa3523'] }, + }, + label: { + text: (d) => d.value, + position: 'inside', + style: { + fill: '#fff', + shadowBlur: 2, + shadowColor: 'rgba(0, 0, 0, .45)', + }, + }, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/heatmap/index.en.md b/site/examples/statistics/heatmap/index.en.md new file mode 100644 index 000000000..5072da822 --- /dev/null +++ b/site/examples/statistics/heatmap/index.en.md @@ -0,0 +1,4 @@ +--- +title: Heatmap +order: 1 +--- \ No newline at end of file diff --git a/site/examples/statistics/heatmap/index.zh.md b/site/examples/statistics/heatmap/index.zh.md new file mode 100644 index 000000000..15bd8930d --- /dev/null +++ b/site/examples/statistics/heatmap/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 热力图 +order: 1 +--- + + From c8f0320e06071ef32a13a83be5253c4522e7a74d Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Wed, 6 Sep 2023 16:34:13 +0800 Subject: [PATCH 052/268] feat(box): add box chartscharts (#2102) --- packages/plots/src/components/box/index.tsx | 10 ++ packages/plots/src/components/index.ts | 3 +- packages/plots/src/core/constants/index.ts | 4 +- packages/plots/src/core/index.ts | 3 + packages/plots/src/core/plots/box/adaptor.ts | 23 ++++ packages/plots/src/core/plots/box/index.ts | 47 ++++++++ packages/plots/src/core/plots/box/type.ts | 6 ++ site/examples/statistics/box/API.en.md | 1 + site/examples/statistics/box/API.zh.md | 1 + site/examples/statistics/box/demo/basic.js | 32 ++++++ .../statistics/box/demo/box-tooltip.js | 37 +++++++ site/examples/statistics/box/demo/box.js | 38 +++++++ .../statistics/box/demo/boxplot-no-outlier.js | 21 ++++ .../box/demo/boxplot-one-dimension.js | 23 ++++ .../statistics/box/demo/boxplot-outlier.js | 18 ++++ .../statistics/box/demo/boxplot-tooltip.js | 34 ++++++ .../statistics/box/demo/grouped-box.js | 101 ++++++++++++++++++ .../box/demo/grouped-boxplot-outlier.js | 21 ++++ site/examples/statistics/box/demo/meta.json | 88 +++++++++++++++ .../examples/statistics/box/demo/polar-box.js | 33 ++++++ site/examples/statistics/box/index.en.md | 4 + site/examples/statistics/box/index.zh.md | 4 + 22 files changed, 549 insertions(+), 3 deletions(-) create mode 100644 packages/plots/src/components/box/index.tsx create mode 100644 packages/plots/src/core/plots/box/adaptor.ts create mode 100644 packages/plots/src/core/plots/box/index.ts create mode 100644 packages/plots/src/core/plots/box/type.ts create mode 100644 site/examples/statistics/box/API.en.md create mode 100644 site/examples/statistics/box/API.zh.md create mode 100644 site/examples/statistics/box/demo/basic.js create mode 100644 site/examples/statistics/box/demo/box-tooltip.js create mode 100644 site/examples/statistics/box/demo/box.js create mode 100644 site/examples/statistics/box/demo/boxplot-no-outlier.js create mode 100644 site/examples/statistics/box/demo/boxplot-one-dimension.js create mode 100644 site/examples/statistics/box/demo/boxplot-outlier.js create mode 100644 site/examples/statistics/box/demo/boxplot-tooltip.js create mode 100644 site/examples/statistics/box/demo/grouped-box.js create mode 100644 site/examples/statistics/box/demo/grouped-boxplot-outlier.js create mode 100644 site/examples/statistics/box/demo/meta.json create mode 100644 site/examples/statistics/box/demo/polar-box.js create mode 100644 site/examples/statistics/box/index.en.md create mode 100644 site/examples/statistics/box/index.zh.md diff --git a/packages/plots/src/components/box/index.tsx b/packages/plots/src/components/box/index.tsx new file mode 100644 index 000000000..e4fa92ef7 --- /dev/null +++ b/packages/plots/src/components/box/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { BoxOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type BoxConfig = CommonConfig; + +const BoxChart = (props: BoxConfig) => ; + +export default BoxChart; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 6766cda72..9e3d8ca81 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -11,5 +11,6 @@ import Rose from './rose'; import Waterfall from './waterfall'; import Histogram from './histogram'; import Heatmap from './heatmap'; +import Box from './box'; -export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall,Heatmap}; +export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall, Heatmap, Box}; diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index e3a8797c9..9a2de6c85 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -1,7 +1,7 @@ import { isArray, isBoolean } from '../utils'; /** new Chart options */ -export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas', 'theme']; +export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas', 'theme', 'inset']; /** 最终透传给 G2 Spec 的保留字 */ export const RESERVED_KEYS = ['data', 'type', 'children']; @@ -185,7 +185,7 @@ export const SPECIAL_OPTIONS = [ callback: ( origin: object, key: string, - value: { available?: boolean; text?: string | Function; [key: string]: unknown } | any[], + value: { available?: boolean; text?: string | Function;[key: string]: unknown } | any[], ) => { /** * @description 特殊情况处理 diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 88e2994ba..e8d50c1ee 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -14,6 +14,7 @@ export type { RoseOptions } from './plots/rose'; export type { WaterfallOptions } from './plots/waterfall'; export type { HistogramOptions } from './plots/histogram'; export type { HeatmapOptions } from './plots/heatmap'; +export type { BoxOptions } from './plots/box'; export * from './types'; import { Area } from './plots/area'; @@ -31,6 +32,7 @@ import { Rose } from './plots/rose'; import { Waterfall } from './plots/waterfall'; import { Histogram } from './plots/histogram'; import { Heatmap } from './plots/heatmap'; +import { Box } from './plots/box'; export const Plots = { Line, @@ -48,4 +50,5 @@ export const Plots = { Waterfall, Histogram, Heatmap, + Box, }; diff --git a/packages/plots/src/core/plots/box/adaptor.ts b/packages/plots/src/core/plots/box/adaptor.ts new file mode 100644 index 000000000..62dcf2860 --- /dev/null +++ b/packages/plots/src/core/plots/box/adaptor.ts @@ -0,0 +1,23 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { BoxOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + const { boxType = 'box' } = params.options; + params.options.children[0].type = boxType; + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/box/index.ts b/packages/plots/src/core/plots/box/index.ts new file mode 100644 index 000000000..a9863a9e4 --- /dev/null +++ b/packages/plots/src/core/plots/box/index.ts @@ -0,0 +1,47 @@ +import { Plot } from '../../base'; +import { adaptor } from './adaptor'; + +import type { BoxOptions } from './type'; +import type { Adaptor } from '../../types'; + +export type { BoxOptions }; + +export class Box extends Plot { + /** 图表类型 */ + public type = 'box'; + + /** + * 获取 折线图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + children: [{ type: 'box' }], + // 默认 tooltip + tooltip: { + items: [ + { name: "min", channel: "y" }, + { name: "q1", channel: "y1" }, + { name: "q2", channel: "y2" }, + { name: "q3", channel: "y3" }, + { name: "max", channel: "y4" }, + ], + }, + }; + } + + /** + * 获取 折线图 默认配置 + */ + protected getDefaultOptions() { + return Box.getDefaultOptions(); + } + + /** + * 折线图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/box/type.ts b/packages/plots/src/core/plots/box/type.ts new file mode 100644 index 000000000..65d698887 --- /dev/null +++ b/packages/plots/src/core/plots/box/type.ts @@ -0,0 +1,6 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type BoxOptions = Options & BaseOptions & { + // box 预处理, boxplot 非预处理 + boxType: 'boxplot' | 'box'; +}; diff --git a/site/examples/statistics/box/API.en.md b/site/examples/statistics/box/API.en.md new file mode 100644 index 000000000..240b49454 --- /dev/null +++ b/site/examples/statistics/box/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/box/API.zh.md b/site/examples/statistics/box/API.zh.md new file mode 100644 index 000000000..b52c6db30 --- /dev/null +++ b/site/examples/statistics/box/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/box/demo/basic.js b/site/examples/statistics/box/demo/basic.js new file mode 100644 index 000000000..3c78dcc81 --- /dev/null +++ b/site/examples/statistics/box/demo/basic.js @@ -0,0 +1,32 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Box } from '@ant-design/plots'; + +const DemoBox = () => { + const data = [ + { x: 'Oceania', y: [ 1, 9, 16, 22, 24 ]}, + { x: 'East Europe', y: [ 1, 5, 8, 12, 16 ]}, + { x: 'Australia', y: [ 1, 8, 12, 19, 26 ]}, + { x: 'South America', y: [ 2, 8, 12, 21, 28 ]}, + { x: 'North Africa', y: [ 1, 8, 14, 18, 24 ]}, + { x: 'North America', y: [ 3, 10, 17, 28, 30 ]}, + { x: 'West Europe', y: [ 1, 7, 10, 17, 22 ]}, + { x: 'West Africa', y: [ 1, 6, 8, 13, 16 ]}, + ]; + + const config = { + data: { + value: data, + }, + xField: 'x', + yField: 'y', + style: { + stroke: '#545454', + fill: '#1890FF', + fillOpacity: 0.3, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/box/demo/box-tooltip.js b/site/examples/statistics/box/demo/box-tooltip.js new file mode 100644 index 000000000..4423f0880 --- /dev/null +++ b/site/examples/statistics/box/demo/box-tooltip.js @@ -0,0 +1,37 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Box } from '@ant-design/plots'; + +const DemoBox = () => { + const data = [ + { x: 'Oceania', y: [ 1, 9, 16, 22, 24 ]}, + { x: 'East Europe', y: [ 1, 5, 8, 12, 16 ]}, + { x: 'Australia', y: [ 1, 8, 12, 19, 26 ]}, + { x: 'South America', y: [ 2, 8, 12, 21, 28 ]}, + { x: 'North Africa', y: [ 1, 8, 14, 18, 24 ]}, + { x: 'North America', y: [ 3, 10, 17, 28, 30 ]}, + { x: 'West Europe', y: [ 1, 7, 10, 17, 22 ]}, + { x: 'West Africa', y: [ 1, 6, 8, 13, 16 ]}, + ]; + + const config = { + data: { + value: data, + }, + xField: 'x', + yField: 'y', + meta: { x: { paddingInner: 0.6, paddingOuter: 0.3 }, y: { zero: true } }, + tooltip: { + items: [ + { name: "最低值", channel: "y" }, + { name: "下四分位数", channel: "y1" }, + { name: "最低值", channel: "y2" }, + { name: "上四分位数", channel: "y3" }, + { name: "最高值", channel: "y4" }, + ], + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/box/demo/box.js b/site/examples/statistics/box/demo/box.js new file mode 100644 index 000000000..e7f96867e --- /dev/null +++ b/site/examples/statistics/box/demo/box.js @@ -0,0 +1,38 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Box } from '@ant-design/plots'; + +const DemoBox = () => { + const data = [ + { x: 'Oceania', y: [ 1, 9, 16, 22, 24 ]}, + { x: 'East Europe', y: [ 1, 5, 8, 12, 16 ]}, + { x: 'Australia', y: [ 1, 8, 12, 19, 26 ]}, + { x: 'South America', y: [ 2, 8, 12, 21, 28 ]}, + { x: 'North Africa', y: [ 1, 8, 14, 18, 24 ]}, + { x: 'North America', y: [ 3, 10, 17, 28, 30 ]}, + { x: 'West Europe', y: [ 1, 7, 10, 17, 22 ]}, + { x: 'West Africa', y: [ 1, 6, 8, 13, 16 ]}, + ]; + + const config = { + data: { + value: data, + }, + xField: 'x', + yField: 'y', + colorField: 'x', + // 默认 boxType 为 box, box 预处理, boxplot 非预处理 + boxType: 'box', + legend: false, + style: { + stroke: 'black', + }, + meta: { + x: { paddingInner: 0.6, paddingOuter: 0.3 }, + y: { zero: true }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/box/demo/boxplot-no-outlier.js b/site/examples/statistics/box/demo/boxplot-no-outlier.js new file mode 100644 index 000000000..f2067fc6c --- /dev/null +++ b/site/examples/statistics/box/demo/boxplot-no-outlier.js @@ -0,0 +1,21 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Box } from '@ant-design/plots'; + +const DemoBox = () => { + const config = { + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/morley.json", + }, + boxType: 'boxplot', + xField: 'Expt', + yField: 'Speed', + style: { + point: false, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/box/demo/boxplot-one-dimension.js b/site/examples/statistics/box/demo/boxplot-one-dimension.js new file mode 100644 index 000000000..7fd0dc304 --- /dev/null +++ b/site/examples/statistics/box/demo/boxplot-one-dimension.js @@ -0,0 +1,23 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Box } from '@ant-design/plots'; + +const DemoBox = () => { + const config = { + height: 120, + autoFit: false, + inset: 6, + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/morley.json", + transform: [{ type: "filter", callback: (d) => d.Expt === 1 }], + }, + boxType: 'boxplot', + yField: 'Speed', + coordinate: { transform: [{ type: "transpose" }] }, + style: { boxFill: "#aaa", pointStroke: "#000" }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/box/demo/boxplot-outlier.js b/site/examples/statistics/box/demo/boxplot-outlier.js new file mode 100644 index 000000000..bf7e016b5 --- /dev/null +++ b/site/examples/statistics/box/demo/boxplot-outlier.js @@ -0,0 +1,18 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Box } from '@ant-design/plots'; + +const DemoBox = () => { + const config = { + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/morley.json", + }, + boxType: 'boxplot', + xField: 'Expt', + yField: 'Speed', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/box/demo/boxplot-tooltip.js b/site/examples/statistics/box/demo/boxplot-tooltip.js new file mode 100644 index 000000000..b5c698992 --- /dev/null +++ b/site/examples/statistics/box/demo/boxplot-tooltip.js @@ -0,0 +1,34 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Box } from '@ant-design/plots'; + +const DemoBox = () => { + const config = { + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/morley.json", + }, + boxType: 'boxplot', + xField: 'Expt', + yField: 'Speed', + tooltip: { + boxTitle: { channel: 'y3' }, + boxItems: [ + { name: "最低值", channel: "y" }, + { name: "下四分位数", channel: "y1" }, + { name: "最低值", channel: "y2" }, + { name: "上四分位数", channel: "y3" }, + { name: "最高值", channel: "y4" }, + ], + pointTitle: { channel: 'x' }, + pointItems: [{ channel: 'y', color: 'red', name: '异常点' }], + }, + style: { + pointFill: 'red', + pointStroke: 'red', + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/box/demo/grouped-box.js b/site/examples/statistics/box/demo/grouped-box.js new file mode 100644 index 000000000..dc23f62ec --- /dev/null +++ b/site/examples/statistics/box/demo/grouped-box.js @@ -0,0 +1,101 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Box } from '@ant-design/plots'; + +const DemoBox = () => { + const data = [ + { + Species: 'I. setosa', + type: 'SepalLength', + value: 5.1, + bin: [4.3, 4.8, 5, 5.2, 5.8], + }, + { + Species: 'I. setosa', + type: 'SepalWidth', + value: 3.5, + bin: [2.3, 3.2, 3.4, 3.7, 4.4], + }, + { + Species: 'I. setosa', + type: 'PetalLength', + value: 1.4, + bin: [1, 1.4, 1.5, 1.6, 1.9], + }, + { + Species: 'I. setosa', + type: 'PetalWidth', + value: 0.2, + bin: [0.1, 0.2, 0.2, 0.3, 0.6], + }, + { + Species: 'I. versicolor', + type: 'SepalLength', + value: 7, + bin: [4.9, 5.6, 5.9, 6.3, 7], + }, + { + Species: 'I. versicolor', + type: 'SepalWidth', + value: 3.2, + bin: [2, 2.5, 2.8, 3, 3.4], + }, + { + Species: 'I. versicolor', + type: 'PetalLength', + value: 4.7, + bin: [3, 4, 4.35, 4.6, 5.1], + }, + { + Species: 'I. versicolor', + type: 'PetalWidth', + value: 1.4, + bin: [1, 1.2, 1.3, 1.5, 1.8], + }, + { + Species: 'I. virginica', + type: 'SepalLength', + value: 6.3, + bin: [4.9, 6.2, 6.5, 6.9, 7.9], + }, + { + Species: 'I. virginica', + type: 'SepalWidth', + value: 3.3, + bin: [2.2, 2.8, 3, 3.2, 3.8], + }, + { + Species: 'I. virginica', + type: 'PetalLength', + value: 6, + bin: [4.5, 5.1, 5.55, 5.9, 6.9], + }, + { + Species: 'I. virginica', + type: 'PetalWidth', + value: 2.5, + bin: [1.4, 1.8, 2, 2.3, 2.5], + }, + ]; + + const config = { + data: { + value: data, + }, + xField: 'type', + yField: 'bin', + colorField: 'Species', + seriesField: 'Species', + style: { + stroke: 'black', + }, + meta: { + x: { paddingInner: 0.2, paddingOuter: 0.1 }, + y: { zero: true }, + series: { paddingInner: 0.3, paddingOuter: 0.1 }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/box/demo/grouped-boxplot-outlier.js b/site/examples/statistics/box/demo/grouped-boxplot-outlier.js new file mode 100644 index 000000000..032cd04ae --- /dev/null +++ b/site/examples/statistics/box/demo/grouped-boxplot-outlier.js @@ -0,0 +1,21 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Box } from '@ant-design/plots'; + +const DemoBox = () => { + const config = { + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/penguins.json", + }, + boxType: 'boxplot', + xField: 'species', + yField: 'flipper_length_mm', + colorField: 'sex', + seriesField: 'sex', + coordinate: { transform: [{ type: "transpose" }] }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/box/demo/meta.json b/site/examples/statistics/box/demo/meta.json new file mode 100644 index 000000000..565f6f2df --- /dev/null +++ b/site/examples/statistics/box/demo/meta.json @@ -0,0 +1,88 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "基础箱线图", + "en": "Basic box plot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*NDHsSaeEmxYAAAAAAAAAAAAADo2bAQ/original" + }, + { + "filename": "box.js", + "title": { + "zh": "预处理箱线图", + "en": "Boxplot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*pU-NQa1PgxQAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "grouped-box.js", + "title": { + "zh": "预处理分组箱线图", + "en": "Grouped Boxplot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*5E47Qa9nQaQAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "boxplot-no-outlier.js", + "title": { + "zh": "无异常点箱线图", + "en": "Boxplot no outlier" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*xoCiQYXmOewAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "boxplot-outlier.js", + "title": { + "zh": "带异常点箱线图", + "en": "Boxplot with Outlier" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*yeZuSY9YIEAAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "grouped-boxplot-outlier.js", + "title": { + "zh": "带异常点分组箱线图", + "en": "grouped Boxplot with Outlier" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ex7XR4hQTOYAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "boxplot-one-dimension.js", + "title": { + "zh": "一维箱线图", + "en": "Boxplot one dimension" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ZOhpRaAAFpkAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "polar-box.js", + "title": { + "zh": "径向箱线图", + "en": "Polar Boxplot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*cCMOQ7YsuFkAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "box-tooltip.js", + "title": { + "zh": "预处理箱线图 tooltip 配置", + "en": "Box tooltip" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*LeZrRoOmJxsAAAAAAAAAAAAADo2bAQ/original" + }, + { + "filename": "boxplot-tooltip.js", + "title": { + "zh": "箱线图 tooltip 配置", + "en": "Boxplot tooltip" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*KQ0ZTIRDDg0AAAAAAAAAAAAADo2bAQ/original" + } + ] +} diff --git a/site/examples/statistics/box/demo/polar-box.js b/site/examples/statistics/box/demo/polar-box.js new file mode 100644 index 000000000..526a5b8cc --- /dev/null +++ b/site/examples/statistics/box/demo/polar-box.js @@ -0,0 +1,33 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Box } from '@ant-design/plots'; + +const DemoBox = () => { + const data = [ + { x: 'Oceania', y: [1, 9, 16, 22, 24] }, + { x: 'East Europe', y: [1, 5, 8, 12, 16] }, + { x: 'Australia', y: [1, 8, 12, 19, 26] }, + { x: 'South America', y: [2, 8, 12, 21, 28] }, + { x: 'North Africa', y: [1, 8, 14, 18, 24] }, + { x: 'North America', y: [3, 10, 17, 28, 30] }, + { x: 'West Europe', y: [1, 7, 10, 17, 22] }, + { x: 'West Africa', y: [1, 6, 8, 13, 16] }, + ]; + + const config = { + data: { + value: data, + }, + xField: 'x', + yField: 'y', + colorField: 'x', + meta: { x: { paddingInner: 0.6, paddingOuter: 0.3 }, y: { zero: true } }, + coordinate: { type: "polar", innerRadius: 0.2 }, + style: { stroke: "black" }, + axis: { y: { tickCount: 5 } }, + legend: false, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/box/index.en.md b/site/examples/statistics/box/index.en.md new file mode 100644 index 000000000..efba1b20a --- /dev/null +++ b/site/examples/statistics/box/index.en.md @@ -0,0 +1,4 @@ +--- +title: Box +order: 3 +--- \ No newline at end of file diff --git a/site/examples/statistics/box/index.zh.md b/site/examples/statistics/box/index.zh.md new file mode 100644 index 000000000..5ee443674 --- /dev/null +++ b/site/examples/statistics/box/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 箱线图 +order: 3 +--- From b63e7ea5917995457d9483cc22d19afbbb918ddf Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 7 Sep 2023 11:49:17 +0800 Subject: [PATCH 053/268] fix: annotation update (#2100) --- packages/plots/src/core/annotation/conversion-tag.ts | 8 +++++++- packages/plots/src/core/base/index.ts | 12 ++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/plots/src/core/annotation/conversion-tag.ts b/packages/plots/src/core/annotation/conversion-tag.ts index e09416c77..15d324036 100644 --- a/packages/plots/src/core/annotation/conversion-tag.ts +++ b/packages/plots/src/core/annotation/conversion-tag.ts @@ -29,6 +29,7 @@ export class ConversionTag { public chart: Chart; public options: ConversionTagOptions; public direction: 'vertical' | 'horizontal'; + public container: Array = []; constructor(chart: Chart, options: ConversionTagOptions) { if (!options) return; @@ -157,8 +158,13 @@ export class ConversionTag { }); this.canvas.appendChild(polygon); this.canvas.appendChild(text); + this.container.push(polygon, text); }); } public update(options: ConversionTagOptions) {} - public destroy() {} + public destroy() { + this.container.forEach((child) => { + child.destroy(); + }); + } } diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 7b0a4559e..fdc4cc8cc 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -1,5 +1,5 @@ import EE from '@antv/event-emitter'; -import { Chart } from '@antv/g2'; +import { Chart, ChartEvent } from '@antv/g2'; import { bind } from 'size-sensor'; import { CHART_OPTIONS, ANNOTATION_LIST } from '../constants'; import { merge, omit, pick, deleteCustomKeys } from '../utils'; @@ -9,6 +9,8 @@ import type { Adaptor, Options } from '../types'; const SOURCE_ATTRIBUTE_NAME = 'data-chart-source-type'; +const ANNOTATION_MAP = new Map(); + export abstract class Plot extends EE { /** plot 类型名称 */ public abstract readonly type: string; @@ -111,8 +113,11 @@ export abstract class Plot extends EE { ANNOTATION_LIST.forEach((annotation) => { const { type, shape } = annotation; const annotationOptions = this.options[type]; + if (ANNOTATION_MAP.has(type)) { + ANNOTATION_MAP.get(type).destroy(); + } if (annotationOptions) { - new Annotaion[shape](this.chart, annotationOptions); + ANNOTATION_MAP.set(type, new Annotaion[shape](this.chart, annotationOptions)); } }); } @@ -199,6 +204,9 @@ export abstract class Plot extends EE { } const { autoFit = true } = this.options; if (autoFit) { + this.chart.on(ChartEvent.AFTER_CHANGE_SIZE, () => { + this.annotations(); + }); this.unbind = bind(this.container, () => { // 获取最新的宽高信息 const { clientHeight, clientWidth } = this.container; From d2a9b7b22ffe1fdb42b41b7c3db3dd8234ef1874 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 8 Sep 2023 10:38:11 +0800 Subject: [PATCH 054/268] chore: opt utils (#2105) --- packages/plots/src/hooks/useChart.ts | 25 ++-- packages/plots/src/utils/createNode.ts | 15 --- packages/plots/src/utils/index.ts | 4 +- packages/plots/src/utils/utils.ts | 53 -------- packages/plots/tests/utils/deepClone.test.ts | 33 ----- packages/plots/tests/utils/util.test.ts | 35 +----- packages/rc-utils/package.json | 4 +- packages/rc-utils/src/rc/chart-loading.tsx | 114 ++++++++++++++++++ packages/rc-utils/src/rc/create-loading.tsx | 41 ------- packages/rc-utils/src/rc/create-node.ts | 12 +- packages/rc-utils/src/rc/index.ts | 4 +- packages/rc-utils/src/react/index.ts | 1 - packages/rc-utils/src/react/proxy.ts | 26 ---- packages/rc-utils/src/utils/index.ts | 2 +- packages/rc-utils/src/utils/is-type.ts | 4 - packages/rc-utils/src/utils/uuid.ts | 7 ++ packages/rc-utils/tests/utils/is-type-spec.ts | 13 -- 17 files changed, 154 insertions(+), 239 deletions(-) delete mode 100644 packages/plots/src/utils/createNode.ts delete mode 100644 packages/plots/tests/utils/deepClone.test.ts create mode 100644 packages/rc-utils/src/rc/chart-loading.tsx delete mode 100644 packages/rc-utils/src/rc/create-loading.tsx delete mode 100644 packages/rc-utils/src/react/proxy.ts delete mode 100644 packages/rc-utils/src/utils/is-type.ts create mode 100644 packages/rc-utils/src/utils/uuid.ts delete mode 100644 packages/rc-utils/tests/utils/is-type-spec.ts diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 72d248e1c..e84dadf70 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -1,7 +1,16 @@ import React, { useRef, useEffect } from 'react'; -import { isEqual, get } from 'lodash-es'; -import createNode from '../utils/createNode'; -import { getPathConfig, isType, deepClone, clone, setPathConfig } from '../utils'; +import { + getPathConfig, + isString, + isNumber, + isElement, + isFunction, + setPathConfig, + isEqual, + get, + createNode, + cloneDeep, +} from '../utils'; import { JSX_TO_STRING } from '../constants'; import { CommonConfig, Chart } from '../interface'; @@ -46,8 +55,8 @@ export default function useChart(ChartC const reactDomToString = (source: U, path: string[], extra?: object) => { const statisticCustomHtml = getPathConfig(source, path); setPathConfig(source, path, (...arg: any[]) => { - const statisticDom = isType(statisticCustomHtml, 'Function') ? statisticCustomHtml(...arg) : statisticCustomHtml; - if (isType(statisticDom, 'String') || isType(statisticDom, 'Number') || isType(statisticDom, 'HTMLDivElement')) { + const statisticDom = isFunction(statisticCustomHtml) ? statisticCustomHtml(...arg) : statisticCustomHtml; + if (isString(statisticDom) || isNumber(statisticDom) || isElement(statisticDom)) { return statisticDom; } return createNode(statisticDom, extra); @@ -71,7 +80,7 @@ export default function useChart(ChartC const { data: inputData, ...inputConfig } = config; changeData = isEqual(currentConfig, inputConfig); } - chartOptions.current = deepClone(config); + chartOptions.current = cloneDeep(config); if (changeData) { chart.current.changeData(get(config, 'data')); } else { @@ -87,7 +96,7 @@ export default function useChart(ChartC return () => null; } if (!chartOptions.current) { - chartOptions.current = deepClone(config); + chartOptions.current = cloneDeep(config); } processConfig(); const chartInstance: T = new (ChartClass as any)(container.current, { @@ -97,7 +106,7 @@ export default function useChart(ChartC chartInstance.toDataURL = toDataURL; chartInstance.downloadImage = downloadImage; chartInstance.render(); - chart.current = clone(chartInstance) as T; + chart.current = chartInstance; if (onReady) { onReady(chartInstance); } diff --git a/packages/plots/src/utils/createNode.ts b/packages/plots/src/utils/createNode.ts deleted file mode 100644 index 8026c7d28..000000000 --- a/packages/plots/src/utils/createNode.ts +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import { render } from '@ant-design/rc-utils'; - -const createNode = (children: React.ReactElement, extra?: object) => { - let mountPoint = document.createElement('div'); - if (extra) { - Object.keys(extra).forEach((key) => { - mountPoint.setAttribute(key, extra[key]); - }); - } - render(children, mountPoint); - return mountPoint; -}; - -export default createNode; diff --git a/packages/plots/src/utils/index.ts b/packages/plots/src/utils/index.ts index d9b4e9e28..8882dca3a 100644 --- a/packages/plots/src/utils/index.ts +++ b/packages/plots/src/utils/index.ts @@ -1 +1,3 @@ -export { isType, clone, getPathConfig, setPathConfig, deepClone, uuid } from './utils'; +export { getPathConfig, setPathConfig } from './utils'; +export { isEqual, get, isString, isNumber, isFunction, isElement, cloneDeep } from 'lodash-es'; +export { createNode, uuid } from '@ant-design/rc-utils'; diff --git a/packages/plots/src/utils/utils.ts b/packages/plots/src/utils/utils.ts index c8e18d68f..43d497421 100644 --- a/packages/plots/src/utils/utils.ts +++ b/packages/plots/src/utils/utils.ts @@ -1,48 +1,3 @@ -/* eslint-disable no-restricted-syntax */ -// 类型检测 -export const isType = (value: any, type: string): boolean => { - const { toString } = {}; - return toString.call(value) === `[object ${type}]`; -}; - -export const clone = (source: Object) => { - if (!source) { - return source; - } - const target = {}; - // eslint-disable-next-line guard-for-in - for (const k in source) { - target[k] = source[k]; - } - return target; -}; - -export const getType = (n: Object) => { - return Object.prototype.toString.call(n).slice(8, -1); -}; - -/** - * 深克隆 - * @param source 要深克隆的目标对象 - */ -export const deepClone = (source: Object | undefined) => { - if (!source || typeof source !== 'object') { - return source; - } - - let target; - if (Array.isArray(source)) { - target = source.map((item) => deepClone(item)); - } else { - target = {}; - Object.keys(source).forEach((key) => { - return (target[key] = deepClone(source[key])); - }); - } - - return target; -}; - /** * 存在时返回路径值,不存在时返回 undefined */ @@ -77,11 +32,3 @@ export const setPathConfig = (source: object, path: string[], value?: any) => { }); return source; }; - -export const uuid = () => { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { - const r = (Math.random() * 16) | 0; - const v = c == 'x' ? r : (r & 0x3) | 0x8; - return v.toString(16); - }); -}; diff --git a/packages/plots/tests/utils/deepClone.test.ts b/packages/plots/tests/utils/deepClone.test.ts deleted file mode 100644 index d737313af..000000000 --- a/packages/plots/tests/utils/deepClone.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { deepClone } from '../../src/utils'; - -describe('utils deepClone', () => { - it('deepClone', () => { - const data = { - nodes: [ - { - id: 'node1', - }, - { - id: 'node2', - }, - ], - edges: [ - { - source: 'node1', - target: 'node2', - }, - ], - }; - - const cloneObj = deepClone(data); - expect(deepClone(undefined)).toBeUndefined(); - expect(JSON.stringify(data)).toEqual(JSON.stringify(cloneObj)); - // 修改 clone 后的数据 - cloneObj.nodes.push({ - id: 'node3', - }); - - expect(data).not.toEqual(cloneObj); - expect(JSON.stringify(data)).not.toEqual(JSON.stringify(cloneObj)); - }); -}); diff --git a/packages/plots/tests/utils/util.test.ts b/packages/plots/tests/utils/util.test.ts index 90e555bd9..d88d70686 100644 --- a/packages/plots/tests/utils/util.test.ts +++ b/packages/plots/tests/utils/util.test.ts @@ -1,16 +1,6 @@ -import { getPathConfig, clone, isType, setPathConfig } from '../../src/utils'; +import { getPathConfig, setPathConfig } from '../../src/utils'; describe('utils', () => { - it('is type', () => { - expect(isType('s', 'String')).toBeTruthy(); - expect(isType(0, 'Number')).toBeTruthy(); - expect(isType({}, 'Object')).toBeTruthy(); - expect(isType(undefined, 'Undefined')).toBeTruthy(); - expect(isType(null, 'Null')).toBeTruthy(); - expect(isType(NaN, 'Number')).toBeTruthy(); - expect(isType([1, 2], 'Array')).toBeTruthy(); - }); - it('has path', () => { const config = { statistic: { @@ -48,27 +38,4 @@ describe('utils', () => { }, }); }); - it('clone', () => { - const config = { - statistic: { - content: { - customHtml: 'html', - }, - title: {}, - }, - }; - expect(clone(undefined)).toBeUndefined(); - expect(clone(config)).toEqual(config); - // @ts-ignore - config.__proto__.name = 'fj'; - expect(clone(config)).toEqual({ - statistic: { - content: { - customHtml: 'html', - }, - title: {}, - }, - name: 'fj', - }); - }); }); diff --git a/packages/rc-utils/package.json b/packages/rc-utils/package.json index 88a8ba73d..e8652c8da 100644 --- a/packages/rc-utils/package.json +++ b/packages/rc-utils/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/rc-utils", - "version": "0.0.1", + "version": "0.0.1-alpha.0", "description": "charts utils", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" @@ -19,7 +19,7 @@ "/dist" ], "scripts": { - "start": "pnpm lib:cjs --w", + "start": "pnpm lib:es --w", "build": "run-s clean lib dist", "build:lib": "run-s clean lib", "ci": "pnpm run build && pnpm run test:coverage", diff --git a/packages/rc-utils/src/rc/chart-loading.tsx b/packages/rc-utils/src/rc/chart-loading.tsx new file mode 100644 index 000000000..f2cc74a5a --- /dev/null +++ b/packages/rc-utils/src/rc/chart-loading.tsx @@ -0,0 +1,114 @@ +import React from 'react'; + +export interface ChartLoadingConfig { + /** + * @title 主题 + * @description 配置主题颜色 + */ + theme?: string | object; + /** + * @title 加载模板 + * @description 图表加载 + */ + loadingTemplate?: React.ReactElement; +} + +const shadowLoading = (ele: HTMLElement) => { + const shadowRoot = ele.attachShadow({ mode: 'open' }); + const shadowDiv = document.createElement('div'); + const shadowStyle = document.createElement('style'); + shadowStyle.innerHTML = `.loading { + display: inline-block; + position: relative; + width: 80px; + height: 80px; + } + .loading div { + position: absolute; + top: 33px; + width: 13px; + height: 13px; + border-radius: 50%; + background: #ccc; + animation-timing-function: cubic-bezier(0, 1, 1, 0); + } + .loading div:nth-child(1) { + left: 8px; + animation: loading1 0.6s infinite; + } + .loading div:nth-child(2) { + left: 8px; + animation: loading2 0.6s infinite; + } + .loading div:nth-child(3) { + left: 32px; + animation: loading2 0.6s infinite; + } + .loading div:nth-child(4) { + left: 56px; + animation: loading3 0.6s infinite; + } + @keyframes loading1 { + 0% { + transform: scale(0); + } + 100% { + transform: scale(1); + } + } + @keyframes loading3 { + 0% { + transform: scale(1); + } + 100% { + transform: scale(0); + } + } + @keyframes loading2 { + 0% { + transform: translate(0, 0); + } + 100% { + transform: translate(24px, 0); + } + } + `; + shadowDiv.classList.add('loading'); + shadowDiv.innerHTML = '

'; + shadowRoot.appendChild(shadowStyle); + shadowRoot.appendChild(shadowDiv); +}; + +export const ChartLoading = ({ loadingTemplate, theme = 'light' }: ChartLoadingConfig) => { + const shadow = React.useRef(null); + + React.useEffect(() => { + if (!loadingTemplate && shadow.current) { + shadowLoading(shadow.current); + } + }, []); + const renderLoading = () => { + if (loadingTemplate) return loadingTemplate; + return
; + }; + + return ( +
+ {renderLoading()} +
+ ); +}; diff --git a/packages/rc-utils/src/rc/create-loading.tsx b/packages/rc-utils/src/rc/create-loading.tsx deleted file mode 100644 index c94a551ba..000000000 --- a/packages/rc-utils/src/rc/create-loading.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; - -export interface ChartLoadingConfig { - /** - * @title 主题 - * @description 配置主题颜色 - */ - theme?: string | object; - /** - * @title 加载模板 - * @description 图表加载 - */ - loadingTemplate?: React.ReactElement; -} - -export const ChartLoading = ({ loadingTemplate, theme = 'light' }: ChartLoadingConfig) => { - const renderLoading = () => { - if (loadingTemplate) return loadingTemplate; - return 'loading...'; - }; - - return ( -
- {renderLoading()} -
- ); -}; diff --git a/packages/rc-utils/src/rc/create-node.ts b/packages/rc-utils/src/rc/create-node.ts index 55f3d7b21..339e3de53 100644 --- a/packages/rc-utils/src/rc/create-node.ts +++ b/packages/rc-utils/src/rc/create-node.ts @@ -1,11 +1,13 @@ import React from 'react'; import { render } from '../react/render'; -export const createNode = (children: React.ReactElement, options: object = {}) => { - const mountPoint = document.createElement('div'); - Object.keys(options).forEach((key) => { - mountPoint[key] = options[key]; - }); +export const createNode = (children: React.ReactElement, extra?: object) => { + let mountPoint = document.createElement('div'); + if (extra) { + Object.keys(extra).forEach((key) => { + mountPoint.setAttribute(key, extra[key]); + }); + } render(children, mountPoint); return mountPoint; }; diff --git a/packages/rc-utils/src/rc/index.ts b/packages/rc-utils/src/rc/index.ts index 26760d6ce..a23001d6f 100644 --- a/packages/rc-utils/src/rc/index.ts +++ b/packages/rc-utils/src/rc/index.ts @@ -1,4 +1,4 @@ export { createNode } from './create-node'; -export { ChartLoading } from './create-loading'; +export { ChartLoading } from './chart-loading'; export { ErrorBoundary } from './error-boundary'; -export type { ChartLoadingConfig } from './create-loading'; +export type { ChartLoadingConfig } from './chart-loading'; diff --git a/packages/rc-utils/src/react/index.ts b/packages/rc-utils/src/react/index.ts index 889a1d67b..05bff4a2a 100644 --- a/packages/rc-utils/src/react/index.ts +++ b/packages/rc-utils/src/react/index.ts @@ -1,2 +1 @@ export { render, unmount } from './render'; -export { stateProxy, useSnapshot, snapProxy } from './proxy'; diff --git a/packages/rc-utils/src/react/proxy.ts b/packages/rc-utils/src/react/proxy.ts deleted file mode 100644 index e5026304b..000000000 --- a/packages/rc-utils/src/react/proxy.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { proxy } from 'valtio'; - -export { useSnapshot } from 'valtio'; - -export type IProxy = object; - -export const stateCache = new WeakMap(); - -export function snapProxy(proxyObject: T): T { - if (!stateCache.get(proxyObject)) { - stateCache.set(proxyObject, proxy(proxyObject)); - } - return stateCache.get(proxyObject); -} - -export function stateProxy( - proxyObject: T, -): { - state: T; - snap: () => T; -} { - return { - state: snapProxy(proxyObject), - snap: () => snapProxy(proxyObject), - }; -} diff --git a/packages/rc-utils/src/utils/index.ts b/packages/rc-utils/src/utils/index.ts index bee550d5b..36babc329 100644 --- a/packages/rc-utils/src/utils/index.ts +++ b/packages/rc-utils/src/utils/index.ts @@ -1,2 +1,2 @@ -export { isType } from './is-type'; export { deepAssign } from './deep-assign'; +export { uuid } from './uuid'; diff --git a/packages/rc-utils/src/utils/is-type.ts b/packages/rc-utils/src/utils/is-type.ts deleted file mode 100644 index efbe40132..000000000 --- a/packages/rc-utils/src/utils/is-type.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const isType = (value: any, type: string): boolean => { - const { toString } = {}; - return toString.call(value) === `[object ${type}]`; -}; diff --git a/packages/rc-utils/src/utils/uuid.ts b/packages/rc-utils/src/utils/uuid.ts new file mode 100644 index 000000000..2710eaca7 --- /dev/null +++ b/packages/rc-utils/src/utils/uuid.ts @@ -0,0 +1,7 @@ +export const uuid = () => { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { + const r = (Math.random() * 16) | 0; + const v = c == 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); +}; diff --git a/packages/rc-utils/tests/utils/is-type-spec.ts b/packages/rc-utils/tests/utils/is-type-spec.ts deleted file mode 100644 index 1ec908a6c..000000000 --- a/packages/rc-utils/tests/utils/is-type-spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { isType } from '../../src'; - -describe('Is type', () => { - it('run', () => { - expect(isType('s', 'String')).toBeTruthy(); - expect(isType(0, 'Number')).toBeTruthy(); - expect(isType({}, 'Object')).toBeTruthy(); - expect(isType(undefined, 'Undefined')).toBeTruthy(); - expect(isType(null, 'Null')).toBeTruthy(); - expect(isType(NaN, 'Number')).toBeTruthy(); - expect(isType([1, 2], 'Array')).toBeTruthy(); - }); -}); From 9abf1b5073206ff591937a33238fa9f3f78f9b6a Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Fri, 8 Sep 2023 10:47:03 +0800 Subject: [PATCH 055/268] =?UTF-8?q?feat(base):=20add=20=E5=A4=8D=E5=90=88?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=20=E6=A1=88=E4=BE=8B=20(#2104)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plots/src/components/base/index.tsx | 2 +- packages/plots/src/components/index.ts | 3 +- packages/plots/src/core/base/index.ts | 3 +- packages/plots/src/core/index.ts | 2 + packages/plots/src/core/plots/base/index.ts | 34 ++++++++++ site/examples/statistics/base/API.en.md | 1 + site/examples/statistics/base/API.zh.md | 1 + site/examples/statistics/base/demo/circle.js | 68 +++++++++++++++++++ .../statistics/base/demo/facet-rect.js | 47 +++++++++++++ .../statistics/base/demo/matrix-col.js | 38 +++++++++++ site/examples/statistics/base/demo/matrix.js | 48 +++++++++++++ site/examples/statistics/base/demo/meta.json | 56 +++++++++++++++ .../statistics/base/demo/space-flex.js | 66 ++++++++++++++++++ .../statistics/base/demo/space-layer.js | 38 +++++++++++ site/examples/statistics/base/index.en.md | 4 ++ site/examples/statistics/base/index.zh.md | 4 ++ 16 files changed, 412 insertions(+), 3 deletions(-) create mode 100644 packages/plots/src/core/plots/base/index.ts create mode 100644 site/examples/statistics/base/API.en.md create mode 100644 site/examples/statistics/base/API.zh.md create mode 100644 site/examples/statistics/base/demo/circle.js create mode 100644 site/examples/statistics/base/demo/facet-rect.js create mode 100644 site/examples/statistics/base/demo/matrix-col.js create mode 100644 site/examples/statistics/base/demo/matrix.js create mode 100644 site/examples/statistics/base/demo/meta.json create mode 100644 site/examples/statistics/base/demo/space-flex.js create mode 100644 site/examples/statistics/base/demo/space-layer.js create mode 100644 site/examples/statistics/base/index.en.md create mode 100644 site/examples/statistics/base/index.zh.md diff --git a/packages/plots/src/components/base/index.tsx b/packages/plots/src/components/base/index.tsx index 7e5f592f0..fd5156105 100644 --- a/packages/plots/src/components/base/index.tsx +++ b/packages/plots/src/components/base/index.tsx @@ -4,7 +4,7 @@ import useChart from '../../hooks/useChart'; import { Plots } from '../../core'; import { CommonConfig, Chart } from '../../interface'; -export const BaseChart: React.FC = forwardRef(({ chartType, ...config }: CommonConfig, ref) => { +export const BaseChart: React.FC = forwardRef(({ chartType = 'Base', ...config }: CommonConfig, ref) => { const { containerStyle = { height: 'inherit', diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 9e3d8ca81..98659db86 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -1,3 +1,4 @@ +import { BaseChart as Base } from './base'; import Area from './area'; import Bar from './bar'; import Column from './column'; @@ -13,4 +14,4 @@ import Histogram from './histogram'; import Heatmap from './heatmap'; import Box from './box'; -export { Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall, Heatmap, Box}; +export { Base, Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall, Heatmap, Box }; diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index fdc4cc8cc..ecbfaad57 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -51,6 +51,7 @@ export abstract class Plot extends EE { * G2 options(Spec) 配置 */ private getSpecOptions() { + if(this.type === 'base') return this.options; return deleteCustomKeys(omit(this.options, CHART_OPTIONS), true); } @@ -94,7 +95,7 @@ export abstract class Plot extends EE { public render(): void { // 执行 adaptor this.execAdaptor(); - + // options 转换 this.chart.options(this.getSpecOptions()); // 渲染 diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index e8d50c1ee..3e5b1c45e 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -17,6 +17,7 @@ export type { HeatmapOptions } from './plots/heatmap'; export type { BoxOptions } from './plots/box'; export * from './types'; +import { Base } from './plots/base'; import { Area } from './plots/area'; import { Bar } from './plots/bar'; import { Column } from './plots/column'; @@ -35,6 +36,7 @@ import { Heatmap } from './plots/heatmap'; import { Box } from './plots/box'; export const Plots = { + Base, Line, Column, Pie, diff --git a/packages/plots/src/core/plots/base/index.ts b/packages/plots/src/core/plots/base/index.ts new file mode 100644 index 000000000..8b8e1dc77 --- /dev/null +++ b/packages/plots/src/core/plots/base/index.ts @@ -0,0 +1,34 @@ +import { Plot } from '../../base'; + +import type { Options } from '../../types/common'; +import type { Adaptor } from '../../types'; + +export class Base extends Plot { + /** 图表类型 */ + public type = 'base'; + + /** + * 获取 万能图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + children: [{ type: 'line' }], + }; + } + + /** + * 获取 万能图 默认配置 + */ + protected getDefaultOptions() { + return Base.getDefaultOptions(); + } + + /** + * 万能图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return (params) => params; + } +} diff --git a/site/examples/statistics/base/API.en.md b/site/examples/statistics/base/API.en.md new file mode 100644 index 000000000..1bfbf00ff --- /dev/null +++ b/site/examples/statistics/base/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/base/API.zh.md b/site/examples/statistics/base/API.zh.md new file mode 100644 index 000000000..64b12ce7f --- /dev/null +++ b/site/examples/statistics/base/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/base/demo/circle.js b/site/examples/statistics/base/demo/circle.js new file mode 100644 index 000000000..386340097 --- /dev/null +++ b/site/examples/statistics/base/demo/circle.js @@ -0,0 +1,68 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Base } from '@ant-design/plots'; + +const Demobase = () => { + const config = { + type: "facetCircle", + width: 480, + height: 480, + data: [ + { month: "Jan.", name: "A", value: 0.6326436603187056 }, + { month: "Jan.", name: "B", value: 0.9059036864077081 }, + { month: "Jan.", name: "C", value: 0.22780841416561715 }, + { month: "Jan.", name: "D", value: 0.1579683971505692 }, + { month: "Feb.", name: "A", value: 0.33301714406421823 }, + { month: "Feb.", name: "B", value: 0.03205686296291077 }, + { month: "Feb.", name: "C", value: 0.38611653432027015 }, + { month: "Feb.", name: "D", value: 0.7234835419120198 }, + { month: "Mar.", name: "A", value: 0.904928473886162 }, + { month: "Mar.", name: "B", value: 0.4484199491941676 }, + { month: "Mar.", name: "C", value: 0.2824508981652456 }, + { month: "Mar.", name: "D", value: 0.9685413602116679 }, + { month: "Apr.", name: "A", value: 0.041723574080341 }, + { month: "Apr.", name: "B", value: 0.8030787933582404 }, + { month: "Apr.", name: "C", value: 0.41748710621502005 }, + { month: "Apr.", name: "D", value: 0.5281546266115444 }, + { month: "May", name: "A", value: 0.8729036090146685 }, + { month: "May", name: "B", value: 0.28988839055401217 }, + { month: "May", name: "C", value: 0.33189556082639227 }, + { month: "May", name: "D", value: 0.21876873390293805 }, + { month: "Jun.", name: "A", value: 0.619594448441904 }, + { month: "Jun.", name: "B", value: 0.420356249903558 }, + { month: "Jun.", name: "C", value: 0.8796166275555974 }, + { month: "Jun.", name: "D", value: 0.6400454237168027 }, + { month: "Jul.", name: "A", value: 0.6908402378581739 }, + { month: "Jul.", name: "B", value: 0.12152124015288734 }, + { month: "Jul.", name: "C", value: 0.6033258688205794 }, + { month: "Jul.", name: "D", value: 0.5584958845688628 }, + { month: "Aug.", name: "A", value: 0.391095929118485 }, + { month: "Aug.", name: "B", value: 0.494137952382379 }, + { month: "Aug.", name: "C", value: 0.6116254958078564 }, + { month: "Aug.", name: "D", value: 0.5803641632635503 }, + { month: "Sept.", name: "A", value: 0.6506347276994731 }, + { month: "Sept.", name: "B", value: 0.8165757521460599 }, + { month: "Sept.", name: "C", value: 0.2279107933218536 }, + { month: "Sept.", name: "D", value: 0.37419172590345484 }, + { month: "Oct.", name: "A", value: 0.17980507555487946 }, + { month: "Oct.", name: "B", value: 0.8701220373856862 }, + { month: "Oct.", name: "C", value: 0.4737963124883502 }, + { month: "Oct.", name: "D", value: 0.7383798484457005 }, + { month: "Nov.", name: "A", value: 0.26679319143326663 }, + { month: "Nov.", name: "B", value: 0.15200589580375534 }, + { month: "Nov.", name: "C", value: 0.6648648719163961 }, + { month: "Nov.", name: "D", value: 0.5341976900165717 }, + { month: "Dec.", name: "A", value: 0.5889497642361026 }, + { month: "Dec.", name: "B", value: 0.7152071786469567 }, + { month: "Dec.", name: "C", value: 0.8096766390742625 }, + { month: "Dec.", name: "D", value: 0.8703522265977728 }, + ], + encode: { position: "month" }, + children: [ + { type: "interval", encode: { x: "name", y: "value", color: "name" } }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/base/demo/facet-rect.js b/site/examples/statistics/base/demo/facet-rect.js new file mode 100644 index 000000000..6fb7b3dee --- /dev/null +++ b/site/examples/statistics/base/demo/facet-rect.js @@ -0,0 +1,47 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Base } from '@ant-design/plots'; + +const Demobase = () => { + const config = { + type: "facetRect", + height: 640, + paddingLeft: 60, + paddingBottom: 60, + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/penguins.json", + transform: [ + { + type: "map", + callback: ({ + culmen_depth_mm: depth, + culmen_length_mm: length, + ...d + }) => ({ + ...d, + culmen_depth_mm: depth === "NaN" ? NaN : depth, + culmen_length_mm: length === "NaN" ? NaN : length, + }), + }, + ], + }, + encode: { x: "sex", y: "species" }, + children: [ + { + type: "point", + frame: false, + encode: { x: "culmen_depth_mm", y: "culmen_length_mm" }, + style: { fill: "#ddd", strokeWidth: 0 }, + facet: false, + }, + { + type: "point", + encode: { x: "culmen_depth_mm", y: "culmen_length_mm", color: "island" }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/base/demo/matrix-col.js b/site/examples/statistics/base/demo/matrix-col.js new file mode 100644 index 000000000..b4c1024b0 --- /dev/null +++ b/site/examples/statistics/base/demo/matrix-col.js @@ -0,0 +1,38 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Base } from '@ant-design/plots'; + +const Demobase = () => { + const config = { + type: "repeatMatrix", + width: 300, + height: 720, + paddingLeft: 60, + paddingBottom: 60, + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/weather.json", + transform: [ + { + type: "map", + callback: ({ date, ...d }) => ({ + ...d, + date: new Date(date).getMonth() + "", + }), + }, + ], + }, + encode: { y: ["temp_max", "precipitation", "wind"], x: "date" }, + children: [ + { + type: "line", + encode: { color: "location" }, + transform: [{ type: "groupX", y: "mean" }], + scale: { y: { zero: true } }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/base/demo/matrix.js b/site/examples/statistics/base/demo/matrix.js new file mode 100644 index 000000000..f2f779fd6 --- /dev/null +++ b/site/examples/statistics/base/demo/matrix.js @@ -0,0 +1,48 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Base } from '@ant-design/plots'; + +const Demobase = () => { + const toNaN = (d) => (d === 'NaN' ? NaN : d); + const config = { + type: "repeatMatrix", + width: 800, + height: 800, + paddingLeft: 70, + paddingBottom: 70, + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/penguins.json", + transform: [ + { + type: "map", + callback: ({ + culmen_depth_mm: cdepth, + culmen_length_mm: clength, + flipper_length_mm: flength, + body_mass_g: bmass, + ...d + }) => ({ + ...d, + culmen_depth_mm: toNaN(cdepth), + culmen_length_mm: toNaN(clength), + flipper_length_mm: toNaN(flength), + body_mass_g: toNaN(bmass), + }), + }, + ], + }, + encode: { + position: [ + "culmen_length_mm", + "culmen_depth_mm", + "flipper_length_mm", + "body_mass_g", + ], + }, + children: [{ type: "point", encode: { color: "species" } }], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/base/demo/meta.json b/site/examples/statistics/base/demo/meta.json new file mode 100644 index 000000000..69c4fbdba --- /dev/null +++ b/site/examples/statistics/base/demo/meta.json @@ -0,0 +1,56 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "space-layer.js", + "title": { + "zh": "层叠容器", + "en": "Space Layer" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*sS5PRrp_lj0AAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "space-flex.js", + "title": { + "zh": "弹性容器", + "en": "Space Flex" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*lLecQJkdPbIAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "facet-rect.js", + "title": { + "zh": "矩行分面", + "en": "Rect facet" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*xDR0QKhMLHQAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "circle.js", + "title": { + "zh": "圆形分面", + "en": "Facet Circle" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*Tsx5RJVrVtsAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "matrix-col.js", + "title": { + "zh": "列重复矩阵", + "en": "Repeat Matrix, Col" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*MhTMTrLKT5UAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "matrix.js", + "title": { + "zh": "重复矩阵", + "en": "Repeat Matrix" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*We0gRJIdGYUAAAAAAAAAAAAADmJ7AQ" + } + ] +} diff --git a/site/examples/statistics/base/demo/space-flex.js b/site/examples/statistics/base/demo/space-flex.js new file mode 100644 index 000000000..3d05e46b7 --- /dev/null +++ b/site/examples/statistics/base/demo/space-flex.js @@ -0,0 +1,66 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Base } from '@ant-design/plots'; + +const Demobase = () => { + const config = { + type: "spaceFlex", + width: 900, + ratio: [1, 2], + direction: "col", + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/seattle-weather.json", + }, + children: [ + { + type: "interval", + paddingBottom: 0, + paddingRight: 300, + encode: { + x: (d) => new Date(d.date).getUTCDate(), + y: "temp_max", + color: "steelblue", + }, + transform: [{ type: "groupX", y: "max" }], + axis: { x: false }, + }, + { + type: "spaceFlex", + paddingBottom: 60, + ratio: [2, 1], + children: [ + { + type: "cell", + paddingBottom: 60, + paddingRight: 0, + encode: { + x: (d) => new Date(d.date).getUTCDate(), + y: (d) => new Date(d.date).getUTCMonth(), + color: "temp_max", + }, + transform: [{ type: "group", color: "max" }], + scale: { color: { palette: "gnBu" } }, + style: { inset: 0.5 }, + axis: { x: { title: "Date" }, y: { title: "Month" } }, + legend: { color: false }, + }, + { + type: "interval", + encode: { + x: (d) => new Date(d.date).getUTCMonth(), + y: "temp_max", + color: "steelblue", + }, + transform: [{ type: "groupX", y: "max" }], + coordinate: { transform: [{ type: "transpose" }] }, + axis: { x: false }, + }, + ], + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/base/demo/space-layer.js b/site/examples/statistics/base/demo/space-layer.js new file mode 100644 index 000000000..d60ca695c --- /dev/null +++ b/site/examples/statistics/base/demo/space-layer.js @@ -0,0 +1,38 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Base } from '@ant-design/plots'; + +const Demobase = () => { + const config = { + type: "spaceLayer", + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv", + format: "csv", + }, + children: [ + { + type: "interval", + encode: { x: "letter", y: "frequency", color: "letter" }, + transform: [{ type: "sortX", reverse: true, by: "y" }], + scale: { color: { palette: "cool", offset: (t) => t * 0.8 + 0.1 } }, + }, + { + type: "interval", + x: 300, + y: 50, + width: 300, + height: 300, + encode: { y: "frequency", color: "letter" }, + transform: [{ type: "stackY" }], + scale: { color: { palette: "cool", offset: (t) => t * 0.8 + 0.1 } }, + coordinate: { type: "theta" }, + legend: false, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/base/index.en.md b/site/examples/statistics/base/index.en.md new file mode 100644 index 000000000..e177557cf --- /dev/null +++ b/site/examples/statistics/base/index.en.md @@ -0,0 +1,4 @@ +--- +title: Composite view +order: 16 +--- \ No newline at end of file diff --git a/site/examples/statistics/base/index.zh.md b/site/examples/statistics/base/index.zh.md new file mode 100644 index 000000000..590b0d59d --- /dev/null +++ b/site/examples/statistics/base/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 复合视图 +order: 16 +--- From 3695edcbe3738046973c63a436f8fe31fd8e5e28 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 8 Sep 2023 11:05:07 +0800 Subject: [PATCH 056/268] fix: dependencies (#2106) --- package.json | 1 - packages/charts/package.json | 2 +- packages/plots/package.json | 1 - packages/rc-utils/package.json | 4 ---- scripts/ast3.0/core/constants.js | 2 +- scripts/ast3.0/core/parser.js | 2 +- scripts/ast3.0/core/utils.js | 2 +- 7 files changed, 4 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index b96acbea0..81158c95c 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,6 @@ "jest-less-loader": "^0.1.2", "less": "^4.1.2", "less-loader": "^10.1.0", - "lodash": "^4.17.20", "np": "*", "npm-run-all": "^4.1.5", "prettier": "^2.8.7", diff --git a/packages/charts/package.json b/packages/charts/package.json index e3e63b7ce..52da86c5b 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -34,7 +34,7 @@ "@ant-design/plots": "workspace:*" }, "peerDependencies": { - "lodash": "^4.17.20", + "lodash-es": "^4.17.21", "react": ">=16.8.4", "react-dom": ">=16.8.4" }, diff --git a/packages/plots/package.json b/packages/plots/package.json index 0ce919808..5b755e922 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -39,7 +39,6 @@ "@antv/event-emitter": "^0.1.3", "@antv/g2": "^5.1.0", "size-sensor": "^1.0.1", - "react-content-loader": "^5.0.4", "@ant-design/rc-utils": "workspace:*" }, "peerDependencies": { diff --git a/packages/rc-utils/package.json b/packages/rc-utils/package.json index e8652c8da..d1d75a2d6 100644 --- a/packages/rc-utils/package.json +++ b/packages/rc-utils/package.json @@ -39,7 +39,6 @@ "react": ">=16.8.4", "react-dom": ">=16.8.4" }, - "sideEffects": false, "license": "MIT", "devDependencies": { "@types/jest": "^26.0.0", @@ -47,8 +46,5 @@ "@types/react-dom": "^18.0.6", "npm-run-all": "^4.1.5", "rimraf": "^3.0.2" - }, - "dependencies": { - "valtio": "^1.10.2" } } diff --git a/scripts/ast3.0/core/constants.js b/scripts/ast3.0/core/constants.js index 9cda9e18d..cb4ce09b8 100644 --- a/scripts/ast3.0/core/constants.js +++ b/scripts/ast3.0/core/constants.js @@ -1,4 +1,4 @@ -const { uniqBy, concat, filter, get } = require('lodash'); +const { uniqBy, concat, filter, get } = require('lodash-es'); /** * 函数标识 diff --git a/scripts/ast3.0/core/parser.js b/scripts/ast3.0/core/parser.js index 116ca466a..e439ba396 100644 --- a/scripts/ast3.0/core/parser.js +++ b/scripts/ast3.0/core/parser.js @@ -1,7 +1,7 @@ const fs = require('fs'); const babel = require('@babel/core'); const chalk = require('chalk'); -const { get, pick } = require('lodash'); +const { get, pick } = require('lodash-es'); const { PIPELINE } = require('./constants'); const { SETGLOBAL, RESETGLOBAL, INGLOBALRANGE } = require('./global'); const { diff --git a/scripts/ast3.0/core/utils.js b/scripts/ast3.0/core/utils.js index 1ac058874..a730a23f8 100644 --- a/scripts/ast3.0/core/utils.js +++ b/scripts/ast3.0/core/utils.js @@ -1,4 +1,4 @@ -const { get } = require('lodash'); +const { get } = require('lodash-es'); const { SHAPES, SIGN } = require('./constants'); const { SETGLOBAL } = require('./global'); From 08a879e98e9c50a08e6f604440817464227aef48 Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Fri, 8 Sep 2023 11:14:35 +0800 Subject: [PATCH 057/268] fix: scripts --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 81158c95c..59bf1ce39 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "start": "pnpm -r --stream --filter=./site run start", "test": "pnpm -r --stream --filter=./packages/* run test", "lint": "pnpm -r --stream --filter=./packages/* run lint", - "build": "pnpm -r --stream --filter=!./packages/site run build", - "build:lib": "pnpm -r --stream --filter=!./packages/site run build:lib", + "build": "pnpm -r --stream --filter=!./site run build", + "build:lib": "pnpm -r --stream --filter=!./site run build:lib", "profile": "webpack --config webpack.config.js --mode production --profile --json > stats.json", "prettier": "prettier --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", "ci:version": "pnpm changeset version", From 6aa5780b674612dd76748053cb598b1dc7f5906d Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Fri, 8 Sep 2023 12:11:50 +0800 Subject: [PATCH 058/268] chore: rename rc-utils to util --- package.json | 4 ++- packages/charts/package.json | 5 ++- packages/charts/scripts/copy.js | 4 --- packages/plots/jest.config.js | 2 +- packages/plots/package.json | 2 +- packages/plots/src/components/base/index.tsx | 2 +- packages/plots/src/core/utils/index.ts | 2 +- packages/plots/src/hooks/useChart.ts | 2 +- packages/plots/src/util/get-path-config.ts | 17 ++++++++++ packages/plots/src/util/index.ts | 4 +++ packages/plots/src/util/set-path-config.ts | 21 ++++++++++++ packages/plots/src/utils/index.ts | 3 -- packages/plots/src/utils/utils.ts | 34 ------------------- packages/plots/tests/plots/column-spec.tsx | 2 +- packages/plots/tests/utils/util.test.ts | 2 +- packages/rc-utils/src/index.ts | 3 -- packages/{rc-utils => util}/.babelrc | 0 packages/{rc-utils => util}/.eslintignore | 0 packages/{rc-utils => util}/.eslintrc.js | 0 packages/{rc-utils => util}/CHANGELOG.md | 0 packages/{rc-utils => util}/README.md | 0 packages/{rc-utils => util}/jest.config.js | 0 packages/{rc-utils => util}/jest.setup.js | 0 packages/{rc-utils => util}/package.json | 2 +- .../src/utils => util/src}/deep-assign.ts | 0 .../{rc-utils/src/utils => util/src}/index.ts | 2 ++ .../src/rc/chart-loading.tsx | 0 .../{rc-utils => util}/src/rc/create-node.ts | 0 .../src/rc/error-boundary.tsx | 0 packages/{rc-utils => util}/src/rc/index.ts | 0 .../{rc-utils => util}/src/react/index.ts | 0 .../{rc-utils => util}/src/react/render.ts | 0 .../{rc-utils/src/utils => util/src}/uuid.ts | 0 .../tests/rc/create-node-spec.tsx | 0 .../tests/react/render-spec.tsx | 0 .../tests/utils/deep-assign-spec.ts | 0 .../tests/utils/error-boundary-spec.tsx | 0 packages/{rc-utils => util}/tsconfig.json | 0 .../{rc-utils => util}/tsconfig.prod.json | 0 packages/{rc-utils => util}/webpack.config.js | 0 40 files changed, 57 insertions(+), 56 deletions(-) delete mode 100644 packages/charts/scripts/copy.js create mode 100644 packages/plots/src/util/get-path-config.ts create mode 100644 packages/plots/src/util/index.ts create mode 100644 packages/plots/src/util/set-path-config.ts delete mode 100644 packages/plots/src/utils/index.ts delete mode 100644 packages/plots/src/utils/utils.ts delete mode 100644 packages/rc-utils/src/index.ts rename packages/{rc-utils => util}/.babelrc (100%) rename packages/{rc-utils => util}/.eslintignore (100%) rename packages/{rc-utils => util}/.eslintrc.js (100%) rename packages/{rc-utils => util}/CHANGELOG.md (100%) rename packages/{rc-utils => util}/README.md (100%) rename packages/{rc-utils => util}/jest.config.js (100%) rename packages/{rc-utils => util}/jest.setup.js (100%) rename packages/{rc-utils => util}/package.json (97%) rename packages/{rc-utils/src/utils => util/src}/deep-assign.ts (100%) rename packages/{rc-utils/src/utils => util/src}/index.ts (61%) rename packages/{rc-utils => util}/src/rc/chart-loading.tsx (100%) rename packages/{rc-utils => util}/src/rc/create-node.ts (100%) rename packages/{rc-utils => util}/src/rc/error-boundary.tsx (100%) rename packages/{rc-utils => util}/src/rc/index.ts (100%) rename packages/{rc-utils => util}/src/react/index.ts (100%) rename packages/{rc-utils => util}/src/react/render.ts (100%) rename packages/{rc-utils/src/utils => util/src}/uuid.ts (100%) rename packages/{rc-utils => util}/tests/rc/create-node-spec.tsx (100%) rename packages/{rc-utils => util}/tests/react/render-spec.tsx (100%) rename packages/{rc-utils => util}/tests/utils/deep-assign-spec.ts (100%) rename packages/{rc-utils => util}/tests/utils/error-boundary-spec.tsx (100%) rename packages/{rc-utils => util}/tsconfig.json (100%) rename packages/{rc-utils => util}/tsconfig.prod.json (100%) rename packages/{rc-utils => util}/webpack.config.js (100%) diff --git a/package.json b/package.json index 59bf1ce39..67a1998e9 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,9 @@ "prettier": "prettier --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", "ci:version": "pnpm changeset version", "add:changelog": "pnpm changeset", - "release": "pnpm publish --no-git-checks -r --filter @ant-design/*" + "release": "pnpm publish --no-git-checks -r --filter @ant-design/*", + "release:alpha": "pnpm publish --tag alpha --no-git-checks -r --filter @ant-design/*", + "release:beta": "pnpm publish --tag beta --no-git-checks -r --filter @ant-design/*" }, "devDependencies": { "@babel/core": "^7.11.6", diff --git a/packages/charts/package.json b/packages/charts/package.json index 52da86c5b..167547781 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -20,15 +20,14 @@ "/dist" ], "scripts": { - "build": "run-s clean lib dist copy", + "build": "run-s clean lib dist", "ci": "pnpm run build && pnpm run test:coverage", "clean": "rimraf lib es dist", "dist": "webpack --config webpack.config.js --mode production", "profile": "webpack --config webpack.config.js --mode production --profile --json > stats.json", "lib": "run-p lib:*", "lib:cjs": "tsc -p tsconfig.json --target ES5 --module commonjs --outDir lib", - "lib:es": "tsc -p tsconfig.json --target ES5 --module ESNext --outDir es", - "copy": "node ./scripts/copy.js" + "lib:es": "tsc -p tsconfig.json --target ES5 --module ESNext --outDir es" }, "dependencies": { "@ant-design/plots": "workspace:*" diff --git a/packages/charts/scripts/copy.js b/packages/charts/scripts/copy.js deleted file mode 100644 index 50d77a593..000000000 --- a/packages/charts/scripts/copy.js +++ /dev/null @@ -1,4 +0,0 @@ -const shell = require('shelljs'); - -// 复制本地 g2plot.min.js -shell.exec(`cp ../flowchart/dist/index.css ./dist`); diff --git a/packages/plots/jest.config.js b/packages/plots/jest.config.js index bdebf39b8..db5939e9a 100644 --- a/packages/plots/jest.config.js +++ b/packages/plots/jest.config.js @@ -5,6 +5,6 @@ module.exports = { moduleNameMapper: { '^d3-((?!linear)\\S*)': `/../../node_modules/d3-$1/dist/d3-$1.min.js`, '^lodash-es$': 'lodash', - '^@ant-design/rc-utils': `/../../packages/rc-utils/src`, + '^@ant-design/charts-util': `/../../packages/charts-util/src`, }, }; diff --git a/packages/plots/package.json b/packages/plots/package.json index 5b755e922..507ed4a72 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -39,7 +39,7 @@ "@antv/event-emitter": "^0.1.3", "@antv/g2": "^5.1.0", "size-sensor": "^1.0.1", - "@ant-design/rc-utils": "workspace:*" + "@ant-design/charts-util": "workspace:*" }, "peerDependencies": { "react": ">=16.8.4", diff --git a/packages/plots/src/components/base/index.tsx b/packages/plots/src/components/base/index.tsx index fd5156105..2a552faf2 100644 --- a/packages/plots/src/components/base/index.tsx +++ b/packages/plots/src/components/base/index.tsx @@ -1,5 +1,5 @@ import React, { useImperativeHandle, forwardRef } from 'react'; -import { ErrorBoundary, ChartLoading } from '@ant-design/rc-utils'; +import { ErrorBoundary, ChartLoading } from '@ant-design/charts-util'; import useChart from '../../hooks/useChart'; import { Plots } from '../../core'; import { CommonConfig, Chart } from '../../interface'; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index b33ed7ed8..1842469c0 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -22,4 +22,4 @@ export { transformOptions } from './transform'; export { getShapeConfigKeys } from './get-shape-config-keys'; export { deleteCustomKeys } from './delete-custom-keys'; export { filterTransformed } from './filter-transformed'; -export { deepAssign } from '@ant-design/rc-utils'; +export { deepAssign } from '@ant-design/charts-util'; diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index e84dadf70..b7f72c912 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -10,7 +10,7 @@ import { get, createNode, cloneDeep, -} from '../utils'; +} from '../util'; import { JSX_TO_STRING } from '../constants'; import { CommonConfig, Chart } from '../interface'; diff --git a/packages/plots/src/util/get-path-config.ts b/packages/plots/src/util/get-path-config.ts new file mode 100644 index 000000000..c240abe82 --- /dev/null +++ b/packages/plots/src/util/get-path-config.ts @@ -0,0 +1,17 @@ +/** + * @description 存在时返回路径值,不存在时返回 undefined + * @param source 需要获取的对象 + * @param path 路径 + */ +export const getPathConfig = (source: any, path: string[]) => { + let current = source; + for (let i = 0; i < path.length; i += 1) { + if (current?.[path[i]]) { + current = current[path[i]]; + } else { + current = undefined; + break; + } + } + return current; +}; diff --git a/packages/plots/src/util/index.ts b/packages/plots/src/util/index.ts new file mode 100644 index 000000000..cb91ef229 --- /dev/null +++ b/packages/plots/src/util/index.ts @@ -0,0 +1,4 @@ +export { isEqual, get, isString, isNumber, isFunction, isElement, cloneDeep } from 'lodash-es'; +export { createNode, uuid } from '@ant-design/charts-util'; +export { getPathConfig } from './get-path-config'; +export { setPathConfig } from './set-path-config'; diff --git a/packages/plots/src/util/set-path-config.ts b/packages/plots/src/util/set-path-config.ts new file mode 100644 index 000000000..73e210a70 --- /dev/null +++ b/packages/plots/src/util/set-path-config.ts @@ -0,0 +1,21 @@ +/** + * @description 内部指定 params ,不考虑复杂情况 + * @param source 需要设置的对象 + * @param path 路径 + * @param value 值 + */ +export const setPathConfig = (source: object, path: string[], value?: any) => { + if (!source) { + return source; + } + let o = source; + path.forEach((key: string, idx: number) => { + // 不是最后一个 + if (idx < path.length - 1) { + o = o[key]; + } else { + o[key] = value; + } + }); + return source; +}; diff --git a/packages/plots/src/utils/index.ts b/packages/plots/src/utils/index.ts deleted file mode 100644 index 8882dca3a..000000000 --- a/packages/plots/src/utils/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { getPathConfig, setPathConfig } from './utils'; -export { isEqual, get, isString, isNumber, isFunction, isElement, cloneDeep } from 'lodash-es'; -export { createNode, uuid } from '@ant-design/rc-utils'; diff --git a/packages/plots/src/utils/utils.ts b/packages/plots/src/utils/utils.ts deleted file mode 100644 index 43d497421..000000000 --- a/packages/plots/src/utils/utils.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * 存在时返回路径值,不存在时返回 undefined - */ -export const getPathConfig = (source: any, path: string[]) => { - let current = source; - for (let i = 0; i < path.length; i += 1) { - if (current?.[path[i]]) { - current = current[path[i]]; - } else { - current = undefined; - break; - } - } - return current; -}; - -/** - * 内部指定 params ,不考虑复杂情况 - */ -export const setPathConfig = (source: object, path: string[], value?: any) => { - if (!source) { - return source; - } - let o = source; - path.forEach((key: string, idx: number) => { - // 不是最后一个 - if (idx < path.length - 1) { - o = o[key]; - } else { - o[key] = value; - } - }); - return source; -}; diff --git a/packages/plots/tests/plots/column-spec.tsx b/packages/plots/tests/plots/column-spec.tsx index dcb68d2d8..1fc6baafb 100644 --- a/packages/plots/tests/plots/column-spec.tsx +++ b/packages/plots/tests/plots/column-spec.tsx @@ -1,5 +1,5 @@ import { renderHook } from '@testing-library/react-hooks/server'; -import { render } from '@ant-design/rc-utils'; +import { render } from '@ant-design/charts-util'; import React, { useRef } from 'react'; import { act } from 'react-dom/test-utils'; import { Column } from '../../src'; diff --git a/packages/plots/tests/utils/util.test.ts b/packages/plots/tests/utils/util.test.ts index d88d70686..2342934eb 100644 --- a/packages/plots/tests/utils/util.test.ts +++ b/packages/plots/tests/utils/util.test.ts @@ -1,4 +1,4 @@ -import { getPathConfig, setPathConfig } from '../../src/utils'; +import { getPathConfig, setPathConfig } from '../../src/util'; describe('utils', () => { it('has path', () => { diff --git a/packages/rc-utils/src/index.ts b/packages/rc-utils/src/index.ts deleted file mode 100644 index 1374e3ece..000000000 --- a/packages/rc-utils/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './react'; -export * from './utils'; -export * from './rc'; diff --git a/packages/rc-utils/.babelrc b/packages/util/.babelrc similarity index 100% rename from packages/rc-utils/.babelrc rename to packages/util/.babelrc diff --git a/packages/rc-utils/.eslintignore b/packages/util/.eslintignore similarity index 100% rename from packages/rc-utils/.eslintignore rename to packages/util/.eslintignore diff --git a/packages/rc-utils/.eslintrc.js b/packages/util/.eslintrc.js similarity index 100% rename from packages/rc-utils/.eslintrc.js rename to packages/util/.eslintrc.js diff --git a/packages/rc-utils/CHANGELOG.md b/packages/util/CHANGELOG.md similarity index 100% rename from packages/rc-utils/CHANGELOG.md rename to packages/util/CHANGELOG.md diff --git a/packages/rc-utils/README.md b/packages/util/README.md similarity index 100% rename from packages/rc-utils/README.md rename to packages/util/README.md diff --git a/packages/rc-utils/jest.config.js b/packages/util/jest.config.js similarity index 100% rename from packages/rc-utils/jest.config.js rename to packages/util/jest.config.js diff --git a/packages/rc-utils/jest.setup.js b/packages/util/jest.setup.js similarity index 100% rename from packages/rc-utils/jest.setup.js rename to packages/util/jest.setup.js diff --git a/packages/rc-utils/package.json b/packages/util/package.json similarity index 97% rename from packages/rc-utils/package.json rename to packages/util/package.json index d1d75a2d6..6200e2d75 100644 --- a/packages/rc-utils/package.json +++ b/packages/util/package.json @@ -1,5 +1,5 @@ { - "name": "@ant-design/rc-utils", + "name": "@ant-design/charts-util", "version": "0.0.1-alpha.0", "description": "charts utils", "bugs": { diff --git a/packages/rc-utils/src/utils/deep-assign.ts b/packages/util/src/deep-assign.ts similarity index 100% rename from packages/rc-utils/src/utils/deep-assign.ts rename to packages/util/src/deep-assign.ts diff --git a/packages/rc-utils/src/utils/index.ts b/packages/util/src/index.ts similarity index 61% rename from packages/rc-utils/src/utils/index.ts rename to packages/util/src/index.ts index 36babc329..fa11fccb9 100644 --- a/packages/rc-utils/src/utils/index.ts +++ b/packages/util/src/index.ts @@ -1,2 +1,4 @@ +export * from './react'; +export * from './rc'; export { deepAssign } from './deep-assign'; export { uuid } from './uuid'; diff --git a/packages/rc-utils/src/rc/chart-loading.tsx b/packages/util/src/rc/chart-loading.tsx similarity index 100% rename from packages/rc-utils/src/rc/chart-loading.tsx rename to packages/util/src/rc/chart-loading.tsx diff --git a/packages/rc-utils/src/rc/create-node.ts b/packages/util/src/rc/create-node.ts similarity index 100% rename from packages/rc-utils/src/rc/create-node.ts rename to packages/util/src/rc/create-node.ts diff --git a/packages/rc-utils/src/rc/error-boundary.tsx b/packages/util/src/rc/error-boundary.tsx similarity index 100% rename from packages/rc-utils/src/rc/error-boundary.tsx rename to packages/util/src/rc/error-boundary.tsx diff --git a/packages/rc-utils/src/rc/index.ts b/packages/util/src/rc/index.ts similarity index 100% rename from packages/rc-utils/src/rc/index.ts rename to packages/util/src/rc/index.ts diff --git a/packages/rc-utils/src/react/index.ts b/packages/util/src/react/index.ts similarity index 100% rename from packages/rc-utils/src/react/index.ts rename to packages/util/src/react/index.ts diff --git a/packages/rc-utils/src/react/render.ts b/packages/util/src/react/render.ts similarity index 100% rename from packages/rc-utils/src/react/render.ts rename to packages/util/src/react/render.ts diff --git a/packages/rc-utils/src/utils/uuid.ts b/packages/util/src/uuid.ts similarity index 100% rename from packages/rc-utils/src/utils/uuid.ts rename to packages/util/src/uuid.ts diff --git a/packages/rc-utils/tests/rc/create-node-spec.tsx b/packages/util/tests/rc/create-node-spec.tsx similarity index 100% rename from packages/rc-utils/tests/rc/create-node-spec.tsx rename to packages/util/tests/rc/create-node-spec.tsx diff --git a/packages/rc-utils/tests/react/render-spec.tsx b/packages/util/tests/react/render-spec.tsx similarity index 100% rename from packages/rc-utils/tests/react/render-spec.tsx rename to packages/util/tests/react/render-spec.tsx diff --git a/packages/rc-utils/tests/utils/deep-assign-spec.ts b/packages/util/tests/utils/deep-assign-spec.ts similarity index 100% rename from packages/rc-utils/tests/utils/deep-assign-spec.ts rename to packages/util/tests/utils/deep-assign-spec.ts diff --git a/packages/rc-utils/tests/utils/error-boundary-spec.tsx b/packages/util/tests/utils/error-boundary-spec.tsx similarity index 100% rename from packages/rc-utils/tests/utils/error-boundary-spec.tsx rename to packages/util/tests/utils/error-boundary-spec.tsx diff --git a/packages/rc-utils/tsconfig.json b/packages/util/tsconfig.json similarity index 100% rename from packages/rc-utils/tsconfig.json rename to packages/util/tsconfig.json diff --git a/packages/rc-utils/tsconfig.prod.json b/packages/util/tsconfig.prod.json similarity index 100% rename from packages/rc-utils/tsconfig.prod.json rename to packages/util/tsconfig.prod.json diff --git a/packages/rc-utils/webpack.config.js b/packages/util/webpack.config.js similarity index 100% rename from packages/rc-utils/webpack.config.js rename to packages/util/webpack.config.js From 70f1e7d6bd9aeb1116851bb5862f20b052446f84 Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Fri, 8 Sep 2023 19:01:15 +0800 Subject: [PATCH 059/268] docs: add 10 demos (#2109) * docs: add 10 demos * fix: test --------- Co-authored-by: lkd01632719 Co-authored-by: Joel Alan <31396322+lxfu1@users.noreply.github.com> --- packages/plots/jest.config.js | 2 +- .../dual-axes/demo/column-multi-line.js | 6 +- .../demo/custom-grouped-column-line.js | 84 ++++++++++++++++++ .../demo/custom-stacked-column-line.js | 73 +++++++++++++++ .../demo/dual-aggregated-line-area.js | 51 +++++++++++ .../statistics/dual-axes/demo/dual-line.js | 4 +- .../dual-axes/demo/dual-multi-line.js | 1 - .../dual-axes/demo/grouped-column-line.js | 75 ++++++++++++++++ .../demo/grouped-column-multi-line.js | 71 +++++++++++++++ .../statistics/dual-axes/demo/meta.json | 80 +++++++++++++++++ .../statistics/dual-axes/demo/pareto.js | 88 +++++++++++++++++++ .../dual-axes/demo/pattern-with-callback.js | 86 ++++++++++++++++++ .../dual-axes/demo/range-column-line.js | 2 +- .../dual-axes/demo/slider-column-line.js | 5 +- .../dual-axes/demo/stacked-column-line.js | 61 +++++++++++++ .../demo/stacked-column-multi-line.js | 85 ++++++++++++++++++ .../demo/stacked-percent-column-line.js | 63 +++++++++++++ 17 files changed, 825 insertions(+), 12 deletions(-) create mode 100644 site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js create mode 100644 site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js create mode 100644 site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js create mode 100644 site/examples/statistics/dual-axes/demo/grouped-column-line.js create mode 100644 site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js create mode 100644 site/examples/statistics/dual-axes/demo/pareto.js create mode 100644 site/examples/statistics/dual-axes/demo/pattern-with-callback.js create mode 100644 site/examples/statistics/dual-axes/demo/stacked-column-line.js create mode 100644 site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js create mode 100644 site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js diff --git a/packages/plots/jest.config.js b/packages/plots/jest.config.js index db5939e9a..60e34dba6 100644 --- a/packages/plots/jest.config.js +++ b/packages/plots/jest.config.js @@ -5,6 +5,6 @@ module.exports = { moduleNameMapper: { '^d3-((?!linear)\\S*)': `/../../node_modules/d3-$1/dist/d3-$1.min.js`, '^lodash-es$': 'lodash', - '^@ant-design/charts-util': `/../../packages/charts-util/src`, + '^@ant-design/charts-util': `/../../packages/util/src`, }, }; diff --git a/site/examples/statistics/dual-axes/demo/column-multi-line.js b/site/examples/statistics/dual-axes/demo/column-multi-line.js index aaeb96bfc..c932d42aa 100644 --- a/site/examples/statistics/dual-axes/demo/column-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/column-multi-line.js @@ -43,8 +43,7 @@ const DemoDualAxes = () => { data: uvData, type: 'interval', yField: 'value', - meta: { y: { independent: true } }, - axis: { y: { title: null } }, + style: { maxWidth: 80 }, }, { data: transformData, @@ -55,7 +54,8 @@ const DemoDualAxes = () => { lineWidth: 2, stroke: (d) => lineColor[d[0].name], }, - axis: { y: { position: 'right', title: null } }, + meta: { y: { independent: true } }, + axis: { y: { position: 'right' } }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js new file mode 100644 index 000000000..d7185271b --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js @@ -0,0 +1,84 @@ + +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const uvBillData = [ + { time: '2019-03', value: 350, type: 'uv' }, + { time: '2019-04', value: 900, type: 'uv' }, + { time: '2019-05', value: 300, type: 'uv' }, + { time: '2019-06', value: 450, type: 'uv' }, + { time: '2019-07', value: 470, type: 'uv' }, + { time: '2019-03', value: 220, type: 'bill' }, + { time: '2019-04', value: 300, type: 'bill' }, + { time: '2019-05', value: 250, type: 'bill' }, + { time: '2019-06', value: 220, type: 'bill' }, + { time: '2019-07', value: 362, type: 'bill' }, + ]; + + const transformData = [ + { time: '2019-03', count: 800 }, + { time: '2019-04', count: 600 }, + { time: '2019-05', count: 400 }, + { time: '2019-06', count: 380 }, + { time: '2019-07', count: 220 }, + ]; + + const config = { + xField: 'time', + legend: { + color: { + position: 'bottom', + layout: { justifyContent: 'center' }, + }, + }, + children: [ + { + data: uvBillData, + type: 'interval', + yField: 'value', + colorField: 'type', + group: true, + style: { maxWidth: 50 }, + label: { position: 'inside' }, + scale: { color: { range: ['#5B8FF9', '#5D7092'] } }, + tooltip: { + items: [ + (d, index, _, column) => ({ + color: '#5B8FF9', + name: 'uv', + value: d.type === 'uv' ? d.value : column.y.value[index - uvBillData.length / 2], + }), + (d, index, _, column) => ({ + color: '#5D7092', + name: 'bill', + value: d.type === 'bill' ? d.value : column.y.value[index + uvBillData.length / 2], + }) + ], + }, + interaction: { elementHighlightByColor: { background: true, } }, + }, + { + data: transformData, + type: 'line', + yField: 'count', + style: { + stroke: '#5AD8A6', + lineWidth: 2, + }, + meta: { y: { independent: true } }, + axis: { y: { position: 'right' } }, + interaction: { + tooltip: { + crosshairs: false, + marker: false, + } + } + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js b/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js new file mode 100644 index 000000000..74007f905 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js @@ -0,0 +1,73 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const uvBillData = [ + { time: '2019-03', value: 350, type: 'uv' }, + { time: '2019-04', value: 900, type: 'uv' }, + { time: '2019-05', value: 300, type: 'uv' }, + { time: '2019-06', value: 450, type: 'uv' }, + { time: '2019-07', value: 470, type: 'uv' }, + { time: '2019-03', value: 220, type: 'bill' }, + { time: '2019-04', value: 300, type: 'bill' }, + { time: '2019-05', value: 250, type: 'bill' }, + { time: '2019-06', value: 220, type: 'bill' }, + { time: '2019-07', value: 362, type: 'bill' }, + ]; + + const transformData = [ + { time: '2019-03', count: 800 }, + { time: '2019-04', count: 600 }, + { time: '2019-05', count: 400 }, + { time: '2019-06', count: 380 }, + { time: '2019-07', count: 220 }, + ]; + + const config = { + xField: 'time', + legend: { + color: { + itemMarker: 'round', + itemMarkerSize: 14, + position: 'right' + }, + }, + axis: { y: { title: null } }, + children: [ + { + data: uvBillData, + type: 'interval', + yField: 'value', + stack: true, + colorField: 'type', + style: { maxWidth: 80 }, + label: { position: 'inside' }, + meta: { y: { domainMax: 1200 } }, + interaction: { + elementHighlight: true, + elementHighlightByColor: { background: true } + }, + }, + { + data: transformData, + type: 'line', + yField: 'count', + colorField: () => 'count', + style: { lineWidth: 2 }, + meta: { y: { independent: true } }, + axis: { y: { position: 'right' } }, + interaction: { + tooltip: { + crosshairs: false, + marker: false, + } + } + }, + ], + theme: { category10: ['#F4A49E', '#FACDAA', '#EE7B91', '#E85285', '#BE408C', '#BE408C'] }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js b/site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js new file mode 100644 index 000000000..b3adfbfe2 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js @@ -0,0 +1,51 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const config = { + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/weather.json", + transform: [{ type: "filter", callback: (d) => d.location === "Seattle" }], + }, + children: [ + { + type: "area", + xField: (d) => new Date(d.date).getUTCMonth(), + yField: ["temp_max", "temp_min"], + transform: [{ type: "groupX", y: "mean", y1: "mean" }], + meta: { y: { nice: true } }, + style: { fill: "#85c5A6", fillOpacity: 0.3 }, + axis: { y: { title: "Avg. Temperature (°C)", titleFill: "#85C5A6" } }, + tooltip: { + items: [ + { channel: "y", valueFormatter: ".1f" }, + { channel: "y1", valueFormatter: ".1f" }, + ], + }, + }, + { + type: "line", + xField: (d) => new Date(d.date).getMonth(), + yField: 'precipitation', + shapeField: 'smooth', + transform: [{ type: "groupX", y: "mean" }], + meta: { y: { independent: true } }, + style: { stroke: "steelblue" }, + axis: { + y: { + position: "right", + grid: null, + title: "Precipitation (inches)", + titleFill: "steelblue", + }, + }, + tooltip: { items: [{ channel: "y", valueFormatter: ".1f" }] }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/dual-line.js b/site/examples/statistics/dual-axes/demo/dual-line.js index 83b8ae62f..d6d52a64b 100644 --- a/site/examples/statistics/dual-axes/demo/dual-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-line.js @@ -26,9 +26,6 @@ const DemoDualAxes = () => { stroke: '#5B8FF9', lineWidth: 2, }, - meta: { - y: { independent: true }, - }, axis: { y: { title: 'value', @@ -43,6 +40,7 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, + meta: { y: { independent: true } }, axis: { y: { position: 'right', diff --git a/site/examples/statistics/dual-axes/demo/dual-multi-line.js b/site/examples/statistics/dual-axes/demo/dual-multi-line.js index 3280f5487..7cddb6f94 100644 --- a/site/examples/statistics/dual-axes/demo/dual-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-multi-line.js @@ -45,7 +45,6 @@ const DemoDualAxes = () => { const config = { xField: 'time', interaction: { tooltip: { sort: (d) => ['uv', 'bill', 'a', 'b', 'c'].indexOf(d.name) } }, - axis: { y: { title: null } }, children: [ { data: uvBillData, diff --git a/site/examples/statistics/dual-axes/demo/grouped-column-line.js b/site/examples/statistics/dual-axes/demo/grouped-column-line.js new file mode 100644 index 000000000..9d5de3146 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/grouped-column-line.js @@ -0,0 +1,75 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const uvBillData = [ + { time: '2019-03', value: 350, type: 'uv' }, + { time: '2019-04', value: 900, type: 'uv' }, + { time: '2019-05', value: 300, type: 'uv' }, + { time: '2019-06', value: 450, type: 'uv' }, + { time: '2019-07', value: 470, type: 'uv' }, + { time: '2019-03', value: 220, type: 'bill' }, + { time: '2019-04', value: 300, type: 'bill' }, + { time: '2019-05', value: 250, type: 'bill' }, + { time: '2019-06', value: 220, type: 'bill' }, + { time: '2019-07', value: 362, type: 'bill' }, + ]; + + const transformData = [ + { time: '2019-03', count: 800 }, + { time: '2019-04', count: 600 }, + { time: '2019-05', count: 400 }, + { time: '2019-06', count: 380 }, + { time: '2019-07', count: 220 }, + ]; + + const config = { + xField: 'time', + children: [ + { + data: uvBillData, + type: 'interval', + yField: 'value', + colorField: 'type', + // group: true, + tooltip: { + items: [ + (d, index, _, column) => ({ + color: '#5B8FF9', + name: 'uv', + value: d.type === 'uv' ? d.value : column.y.value[index - 5], + }), + (d, index, _, column) => ({ + color: '#5AD8A6', + name: 'bill', + value: d.type === 'bill' ? d.value : column.y.value[index + 5], + }) + ], + }, + interaction: { elementHighlightByColor: { background: true, } }, + }, + { + data: transformData, + type: 'line', + yField: 'count', + colorField: () => 'count', + style: { + stroke: '#5D7092', + lineWidth: 2, + }, + meta: { y: { independent: true } }, + axis: { y: { position: 'right' } }, + interaction: { + tooltip: { + crosshairs: false, + marker: false, + } + } + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js b/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js new file mode 100644 index 000000000..82b8d4529 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js @@ -0,0 +1,71 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const uvBillData = [ + { time: '2019-03', value: 350, type: 'uv' }, + { time: '2019-04', value: 900, type: 'uv' }, + { time: '2019-05', value: 300, type: 'uv' }, + { time: '2019-06', value: 450, type: 'uv' }, + { time: '2019-07', value: 470, type: 'uv' }, + { time: '2019-03', value: 220, type: 'bill' }, + { time: '2019-04', value: 300, type: 'bill' }, + { time: '2019-05', value: 250, type: 'bill' }, + { time: '2019-06', value: 220, type: 'bill' }, + { time: '2019-07', value: 362, type: 'bill' }, + ]; + + const transformData = [ + { time: '2019-03', count: 800, name: 'a' }, + { time: '2019-04', count: 600, name: 'a' }, + { time: '2019-05', count: 400, name: 'a' }, + { time: '2019-06', count: 380, name: 'a' }, + { time: '2019-07', count: 220, name: 'a' }, + { time: '2019-03', count: 750, name: 'b' }, + { time: '2019-04', count: 650, name: 'b' }, + { time: '2019-05', count: 450, name: 'b' }, + { time: '2019-06', count: 400, name: 'b' }, + { time: '2019-07', count: 320, name: 'b' }, + { time: '2019-03', count: 900, name: 'c' }, + { time: '2019-04', count: 600, name: 'c' }, + { time: '2019-05', count: 450, name: 'c' }, + { time: '2019-06', count: 300, name: 'c' }, + { time: '2019-07', count: 200, name: 'c' }, + ]; + + const config = { + xField: 'time', + interaction: { tooltip: { sort: (d) => ['uv', 'bill', 'a', 'b', 'c'].indexOf(d.name) } }, + children: [ + { + data: uvBillData, + type: 'interval', + yField: 'value', + colorField: 'type', + // TODO: group加上line会报错 + // group: true, + style: { maxWidth: 80 }, + interaction: { elementHighlightByColor: { background: true, } }, + }, + { + data: transformData, + type: 'line', + yField: 'count', + colorField: 'name', + style: { lineWidth: 2 }, + meta: { y: { independent: true } }, + axis: { y: { position: 'right' } }, + interaction: { + tooltip: { + crosshairs: false, + marker: false, + } + } + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/meta.json b/site/examples/statistics/dual-axes/demo/meta.json index fdd27be25..99074ee11 100644 --- a/site/examples/statistics/dual-axes/demo/meta.json +++ b/site/examples/statistics/dual-axes/demo/meta.json @@ -20,6 +20,22 @@ }, "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*BxouQYIIQ0kAAAAAAAAAAAAADmJ7AQ/fmt.webp" }, + { + "filename": "dual-aggregated-line-area.js", + "title": { + "zh": "聚合线面双轴图", + "en": "Aggregated Dual Line And Area Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*J-lVRamRfgUAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "pareto.js", + "title": { + "zh": "帕累托图", + "en": "Pareto Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*COKsS6s75kYAAAAAAAAAAAAADmJ7AQ/original" + }, { "filename": "range-column-line.js", "title": { @@ -75,6 +91,70 @@ "en": "Dual multi line" }, "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*BzyZQapC7ucAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "stacked-column-line.js", + "title": { + "zh": "堆叠柱线图表", + "en": "Stacked column line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*R2j7SIpYvDsAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "custom-stacked-column-line.js", + "title": { + "zh": "堆叠柱线图表-自定义样式", + "en": "Custom stacked column line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*RCl4Tr-4TqwAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "stacked-percent-column-line.js", + "title": { + "zh": "百分比堆叠柱线图表", + "en": "stacked-percent-column-line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*w_VfQ5sDvS0AAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "stacked-column-multi-line.js", + "title": { + "zh": "堆叠柱线图表-显示多折线", + "en": "Stacked column multi line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*I_bmR6CZJScAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "grouped-column-line.js", + "title": { + "zh": "分组柱线图表", + "en": "Grouped column line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*ydQDSpPe9B0AAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "custom-grouped-column-line.js", + "title": { + "zh": "分组柱线图表-自定义样式", + "en": "Custom grouped column line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*Ogg7R6trDvgAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "pattern-with-callback.js", + "title": { + "zh": "带贴图的分组柱线图表", + "en": "Grouped column line with pattern" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/SL3QbumEbL/6131d19d-56b8-42bb-9609-8d0640a77d4a.png" + }, + { + "filename": "grouped-column-multi-line.js", + "title": { + "zh": "分组柱线图表-显示多折线", + "en": "Grouped column multi line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*xzh4RYzYTFcAAAAAAAAAAAAAARQnAQ" } ] } diff --git a/site/examples/statistics/dual-axes/demo/pareto.js b/site/examples/statistics/dual-axes/demo/pareto.js new file mode 100644 index 000000000..64a1bd727 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/pareto.js @@ -0,0 +1,88 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const config = { + data: { + type: "inline", + value: [ + { x: "Parking Difficult", value: 95 }, + { x: "Sales Rep was Rude", value: 60 }, + { x: "Poor Lighting", value: 45 }, + { x: "Layout Confusing", value: 37 }, + { x: "Sizes Limited", value: 30 }, + { x: "Clothing Faded", value: 27 }, + { x: "Clothing Shrank", value: 18 }, + ], + transform: [ + { + type: "custom", + callback: (data) => { + const sum = data.reduce((r, curr) => r + curr.value, 0); + return data + .map((d) => ({ + ...d, + percentage: d.value / sum, + })) + .reduce((r, curr) => { + const v = r.length ? r[r.length - 1].accumulate : 0; + const accumulate = v + curr.percentage; + r.push({ + ...curr, + accumulate, + }); + return r; + }, []); + }, + }, + ], + }, + xField: 'x', + children: [ + { + type: "interval", + yField: 'value', + meta: { x: { padding: 0.5 }, y: { domainMax: 312, tickCount: 5 } }, + style: { fill: (d) => (d.percentage < 0.1 ? "#E24B26" : "#78B3F0") }, + axis: { x: { title: null }, y: { title: "Defect frequency" } }, + labels: [ + { + text: (d) => `${(d.percentage * 100).toFixed(1)}%`, + textBaseline: "bottom", + }, + ], + }, + { + type: "line", + yField: 'accumulate', + meta: { y: { independent: true, domainMin: 0, tickCount: 5 } }, + axis: { + y: { + position: "right", + title: "Cumulative Percentage", + grid: null, + labelFormatter: (d) => `${(d * 100).toFixed(0)}%`, + }, + }, + tooltip: { + items: [ + { channel: "y", valueFormatter: (d) => `${(d * 100).toFixed(2)}%` }, + ], + }, + }, + { + type: "point", + yField: 'accumulate', + shapeField: 'diamond', + meta: { y: { independent: true, domainMin: 0 } }, + axis: { y: null }, + tooltip: null, + }, + ], + title: "Pareto Chart of Customer Complaints", + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/pattern-with-callback.js b/site/examples/statistics/dual-axes/demo/pattern-with-callback.js new file mode 100644 index 000000000..a7cd665d5 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/pattern-with-callback.js @@ -0,0 +1,86 @@ + +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const uvBillData = [ + { time: '2019-03', value: 350, type: 'uv' }, + { time: '2019-04', value: 900, type: 'uv' }, + { time: '2019-05', value: 300, type: 'uv' }, + { time: '2019-06', value: 450, type: 'uv' }, + { time: '2019-07', value: 470, type: 'uv' }, + { time: '2019-03', value: 220, type: 'bill' }, + { time: '2019-04', value: 300, type: 'bill' }, + { time: '2019-05', value: 250, type: 'bill' }, + { time: '2019-06', value: 220, type: 'bill' }, + { time: '2019-07', value: 362, type: 'bill' }, + ]; + + const transformData = [ + { time: '2019-03', count: 800 }, + { time: '2019-04', count: 600 }, + { time: '2019-05', count: 400 }, + { time: '2019-06', count: 380 }, + { time: '2019-07', count: 220 }, + ]; + + const config = { + xField: 'time', + legend: { + color: { + position: 'bottom', + layout: { justifyContent: 'center' }, + }, + }, + children: [ + { + data: uvBillData, + type: 'interval', + yField: 'value', + colorField: 'type', + group: true, + style: { + fill: () => { } + }, + label: { position: 'inside' }, + scale: { color: { range: ['#5B8FF9', '#5D7092'] } }, + tooltip: { + items: [ + (d, index, _, column) => ({ + color: '#5B8FF9', + name: 'uv', + value: d.type === 'uv' ? d.value : column.y.value[index - uvBillData.length / 2], + }), + (d, index, _, column) => ({ + color: '#5D7092', + name: 'bill', + value: d.type === 'bill' ? d.value : column.y.value[index + uvBillData.length / 2], + }) + ], + }, + interaction: { elementHighlightByColor: { background: true, } }, + }, + { + data: transformData, + type: 'line', + yField: 'count', + style: { + stroke: '#5AD8A6', + lineWidth: 2, + }, + meta: { y: { independent: true } }, + axis: { y: { position: 'right' } }, + interaction: { + tooltip: { + crosshairs: false, + marker: false, + } + } + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/range-column-line.js b/site/examples/statistics/dual-axes/demo/range-column-line.js index 3eba8b294..9942067ed 100644 --- a/site/examples/statistics/dual-axes/demo/range-column-line.js +++ b/site/examples/statistics/dual-axes/demo/range-column-line.js @@ -22,7 +22,6 @@ const DemoDualAxes = () => { stroke: '#5B8FF9', maxWidth: 100, }, - meta: { y: { independent: true } }, axis: { y: { style: { titleFill: '#5B8FF9' }, }, }, }, { @@ -32,6 +31,7 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, + meta: { y: { independent: true } }, axis: { y: { position: 'right', diff --git a/site/examples/statistics/dual-axes/demo/slider-column-line.js b/site/examples/statistics/dual-axes/demo/slider-column-line.js index ea689b496..10197c15d 100644 --- a/site/examples/statistics/dual-axes/demo/slider-column-line.js +++ b/site/examples/statistics/dual-axes/demo/slider-column-line.js @@ -46,14 +46,13 @@ const DemoDualAxes = () => { type: 'interval', yField: 'consumeTime', style: { stroke: '#5B8FF9' }, - meta: { y: { independent: true } }, - axis: { y: { title: null } }, }, { type: 'line', yField: 'completeTime', style: { stroke: '#5AD8A6', lineWidth: 2 }, - axis: { y: { position: 'right', title: null } }, + meta: { y: { independent: true } }, + axis: { y: { position: 'right' } }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/stacked-column-line.js b/site/examples/statistics/dual-axes/demo/stacked-column-line.js new file mode 100644 index 000000000..1f7750438 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/stacked-column-line.js @@ -0,0 +1,61 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const uvBillData = [ + { time: '2019-03', value: 350, type: 'uv' }, + { time: '2019-04', value: 900, type: 'uv' }, + { time: '2019-05', value: 300, type: 'uv' }, + { time: '2019-06', value: 450, type: 'uv' }, + { time: '2019-07', value: 470, type: 'uv' }, + { time: '2019-03', value: 220, type: 'bill' }, + { time: '2019-04', value: 300, type: 'bill' }, + { time: '2019-05', value: 250, type: 'bill' }, + { time: '2019-06', value: 220, type: 'bill' }, + { time: '2019-07', value: 362, type: 'bill' }, + ]; + + const transformData = [ + { time: '2019-03', count: 800 }, + { time: '2019-04', count: 600 }, + { time: '2019-05', count: 400 }, + { time: '2019-06', count: 380 }, + { time: '2019-07', count: 220 }, + ]; + + const config = { + xField: 'time', + axis: { y: { title: null } }, + children: [ + { + data: uvBillData, + type: 'interval', + yField: 'value', + stack: true, + colorField: 'type', + style: { maxWidth: 80 }, + meta: { y: { domainMax: 1200 } }, + interaction: { elementHighlightByColor: { background: true, } }, + }, + { + data: transformData, + type: 'line', + yField: 'count', + colorField: () => 'count', + style: { lineWidth: 2 }, + axis: { y: { position: 'right' } }, + meta: { y: { independent: true } }, + interaction: { + tooltip: { + crosshairs: false, + marker: false, + } + } + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js b/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js new file mode 100644 index 000000000..619345174 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js @@ -0,0 +1,85 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const uvBillData = [ + { time: '2019-03', value: 350, type: 'uv' }, + { time: '2019-04', value: 900, type: 'uv' }, + { time: '2019-05', value: 300, type: 'uv' }, + { time: '2019-06', value: 450, type: 'uv' }, + { time: '2019-07', value: 470, type: 'uv' }, + { time: '2019-03', value: 220, type: 'bill' }, + { time: '2019-04', value: 300, type: 'bill' }, + { time: '2019-05', value: 250, type: 'bill' }, + { time: '2019-06', value: 220, type: 'bill' }, + { time: '2019-07', value: 362, type: 'bill' }, + ]; + + const transformData = [ + { time: '2019-03', count: 800, name: 'a' }, + { time: '2019-04', count: 600, name: 'a' }, + { time: '2019-05', count: 400, name: 'a' }, + { time: '2019-06', count: 380, name: 'a' }, + { time: '2019-07', count: 220, name: 'a' }, + { time: '2019-03', count: 750, name: 'b' }, + { time: '2019-04', count: 650, name: 'b' }, + { time: '2019-05', count: 450, name: 'b' }, + { time: '2019-06', count: 400, name: 'b' }, + { time: '2019-07', count: 320, name: 'b' }, + { time: '2019-03', count: 900, name: 'c' }, + { time: '2019-04', count: 600, name: 'c' }, + { time: '2019-05', count: 450, name: 'c' }, + { time: '2019-06', count: 300, name: 'c' }, + { time: '2019-07', count: 200, name: 'c' }, + ]; + + const config = { + xField: 'time', + axis: { y: { title: null } }, + interaction: { tooltip: { sort: (d) => ['uv', 'bill', 'a', 'b', 'c'].indexOf(d.name) } }, + children: [ + { + data: uvBillData, + type: 'interval', + yField: 'value', + colorField: 'type', + stack: true, + style: { maxWidth: 80 }, + meta: { y: { domainMax: 1200 } }, + interaction: { elementHighlightByColor: { background: true, } }, + }, + { + data: transformData, + type: 'line', + yField: 'count', + colorField: 'name', + style: { + lineWidth: 2, + opacity: (d) => { + if (d[0].name === 'a') { + return 1 + } + return 0.5 + }, + lineDash: (d) => { + if (d[0].name === 'a') { + return [1, 4] + } + }, + }, + meta: { y: { independent: true } }, + axis: { y: { position: 'right' } }, + interaction: { + tooltip: { + crosshairs: false, + marker: false, + } + } + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js b/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js new file mode 100644 index 000000000..dfb8b357c --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js @@ -0,0 +1,63 @@ +import { DualAxes, G2 } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const uvBillData = [ + { time: '2019-03', value: 350, type: 'uv' }, + { time: '2019-04', value: 900, type: 'uv' }, + { time: '2019-05', value: 300, type: 'uv' }, + { time: '2019-06', value: 450, type: 'uv' }, + { time: '2019-07', value: 470, type: 'uv' }, + { time: '2019-03', value: 220, type: 'bill' }, + { time: '2019-04', value: 300, type: 'bill' }, + { time: '2019-05', value: 250, type: 'bill' }, + { time: '2019-06', value: 220, type: 'bill' }, + { time: '2019-07', value: 362, type: 'bill' }, + ]; + + const transformData = [ + { time: '2019-03', count: 800 }, + { time: '2019-04', count: 600 }, + { time: '2019-05', count: 400 }, + { time: '2019-06', count: 380 }, + { time: '2019-07', count: 220 }, + ]; + + const config = { + xField: 'time', + children: [ + { + data: uvBillData, + type: 'interval', + yField: 'value', + stack: true, + percent: true, + colorField: 'type', + axis: { + y: { + title: 'value', + style: { titleFill: '#5B8FF9' }, + }, + }, + }, + { + data: transformData, + type: 'line', + yField: 'count', + colorField: () => 'count', + style: { lineWidth: 2 }, + meta: { y: { independent: true } }, + axis: { + y: { + position: 'right', + style: { titleFill: '#5AD8A6' }, + }, + }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 29f7bd246a58f983658d1a873f4555ebed19a93f Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 11 Sep 2023 09:33:12 +0800 Subject: [PATCH 060/268] fix: transform (#2111) --- packages/plots/src/core/utils/transform.ts | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index c38bd7f34..566b26376 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -84,21 +84,7 @@ export const transformOptions = (params: Adaptor) => { /** * @description 外层配置应用到所有 children */ - const copyChild = { ...child }; - const transformOption = deepAssign(child, rest, copyChild); - - const transformChildrenConfig = (transformObject: object, specKey: string, key: string) => { - /** - * @description 特殊图表 - * @example DualAxes 等多图层图表 - */ - if (copyChild[key]) { - const transformValue = getValue(transformObject[key], child[key], transformOption); - updateOptions(transformOption, specKey, transformValue); - } - }; - - transformConfig(transformOption, transformChildrenConfig); + transformConfig(deepAssign(child, rest, child)); }); /** From 03bbe9c1d9b093019b5f6e29191af9eed1956df1 Mon Sep 17 00:00:00 2001 From: xiaomo <18272190626@163.com> Date: Mon, 11 Sep 2023 16:17:46 +0800 Subject: [PATCH 061/268] feat: add progress chart (#2110) * feat: add progress chart * fix: remove omit in adaptor * fix: typo fix * chore: remove unless code & replace image & lint fixed * fix: resolve omit return new instance * chore: detach deleteChartOptionKeys function --------- Co-authored-by: jiahengz --- packages/plots/src/components/tiny/index.ts | 5 +- .../components/tiny/tiny-progress/index.tsx | 10 ++++ packages/plots/src/core/base/index.ts | 6 +-- packages/plots/src/core/index.ts | 3 ++ .../src/core/plots/tiny-progress/adaptor.ts | 40 ++++++++++++++++ .../src/core/plots/tiny-progress/index.ts | 46 +++++++++++++++++++ .../src/core/plots/tiny-progress/type.ts | 8 ++++ .../core/utils/delete-chart-option-keys.ts | 15 ++++++ packages/plots/src/core/utils/index.ts | 1 + .../statistics/tiny/demo/basic-progress.js | 32 +++++++++++++ site/examples/statistics/tiny/demo/meta.json | 8 ++++ 11 files changed, 169 insertions(+), 5 deletions(-) create mode 100644 packages/plots/src/components/tiny/tiny-progress/index.tsx create mode 100644 packages/plots/src/core/plots/tiny-progress/adaptor.ts create mode 100644 packages/plots/src/core/plots/tiny-progress/index.ts create mode 100644 packages/plots/src/core/plots/tiny-progress/type.ts create mode 100644 packages/plots/src/core/utils/delete-chart-option-keys.ts create mode 100644 site/examples/statistics/tiny/demo/basic-progress.js diff --git a/packages/plots/src/components/tiny/index.ts b/packages/plots/src/components/tiny/index.ts index 0af39d10d..0025572a5 100644 --- a/packages/plots/src/components/tiny/index.ts +++ b/packages/plots/src/components/tiny/index.ts @@ -1,7 +1,8 @@ import Line from './tiny-line'; import Area from './tiny-area'; import Column from './tiny-column'; +import Progress from './tiny-progress'; -type TinyOptions = Record; +type TinyOptions = Record; -export const Tiny: TinyOptions = { Line, Area, Column }; +export const Tiny: TinyOptions = { Line, Area, Column, Progress }; diff --git a/packages/plots/src/components/tiny/tiny-progress/index.tsx b/packages/plots/src/components/tiny/tiny-progress/index.tsx new file mode 100644 index 000000000..1053e2928 --- /dev/null +++ b/packages/plots/src/components/tiny/tiny-progress/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { TinyProgressOptions } from '../../../core'; +import { CommonConfig } from '../../../interface'; +import { BaseChart } from '../../base'; + +export type TinyProgressConfig = CommonConfig; + +const TinyProgressChart = (props: TinyProgressOptions) => ; + +export default TinyProgressChart; diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index ecbfaad57..ed1685f9a 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -2,7 +2,7 @@ import EE from '@antv/event-emitter'; import { Chart, ChartEvent } from '@antv/g2'; import { bind } from 'size-sensor'; import { CHART_OPTIONS, ANNOTATION_LIST } from '../constants'; -import { merge, omit, pick, deleteCustomKeys } from '../utils'; +import { merge, omit, pick, deleteCustomKeys, deleteChartOptionKeys } from '../utils'; import { Annotaion } from '../annotation'; import type { Adaptor, Options } from '../types'; @@ -95,7 +95,7 @@ export abstract class Plot extends EE { public render(): void { // 执行 adaptor this.execAdaptor(); - + // options 转换 this.chart.options(this.getSpecOptions()); // 渲染 @@ -185,7 +185,7 @@ export abstract class Plot extends EE { // 转化成 G2 Spec adaptor({ chart: this.chart, - options: omit(this.options, CHART_OPTIONS), + options: deleteChartOptionKeys(this.options), }); } diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 3e5b1c45e..c30709122 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -10,6 +10,7 @@ export type { RadarOptions } from './plots/radar'; export type { TinyLineOptions } from './plots/tiny-line'; export type { TinyAreaOptions } from './plots/tiny-area'; export type { TinyColumnOptions } from './plots/tiny-column'; +export type { TinyProgressOptions } from './plots/tiny-progress'; export type { RoseOptions } from './plots/rose'; export type { WaterfallOptions } from './plots/waterfall'; export type { HistogramOptions } from './plots/histogram'; @@ -29,6 +30,7 @@ import { Radar } from './plots/radar'; import { TinyLine } from './plots/tiny-line'; import { TinyArea } from './plots/tiny-area'; import { TinyColumn } from './plots/tiny-column'; +import { TinyProgress } from './plots/tiny-progress'; import { Rose } from './plots/rose'; import { Waterfall } from './plots/waterfall'; import { Histogram } from './plots/histogram'; @@ -49,6 +51,7 @@ export const Plots = { TinyLine, TinyArea, TinyColumn, + TinyProgress, Waterfall, Histogram, Heatmap, diff --git a/packages/plots/src/core/plots/tiny-progress/adaptor.ts b/packages/plots/src/core/plots/tiny-progress/adaptor.ts new file mode 100644 index 000000000..cff121e9c --- /dev/null +++ b/packages/plots/src/core/plots/tiny-progress/adaptor.ts @@ -0,0 +1,40 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { TinyProgressOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + /** + * @description 数据转换 + */ + const transformData = (params: Params) => { + const { options } = params; + const { percent, color = [] } = options; + if (!percent) return params; + + const transformOption = { + scale: { + color: { range: color.length ? color : [] }, + }, + data: [1, percent] + } + + Object.assign(options, { ...transformOption }); + return params + } + + return flow(init, transformData, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/tiny-progress/index.ts b/packages/plots/src/core/plots/tiny-progress/index.ts new file mode 100644 index 000000000..1daddace5 --- /dev/null +++ b/packages/plots/src/core/plots/tiny-progress/index.ts @@ -0,0 +1,46 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { TinyProgressOptions } from './type'; + +export type { TinyProgressOptions }; + +export class TinyProgress extends Plot { + /** 图表类型 */ + public type = 'TinyProgress'; + + /** + * 获取 进度图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + data: [], + children: [ + { + interaction: { tooltip: false }, + coordinate: { transform: [{ type: 'transpose' }] }, + type: 'interval', + axis: false, + legend: false, + encode: { y: (d) => d, color: (d, idx) => idx }, + } + ], + }; + } + + /** + * 获取 进度图 默认配置 + */ + protected getDefaultOptions() { + return TinyProgress.getDefaultOptions(); + } + + /** + * 迷你折线图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/tiny-progress/type.ts b/packages/plots/src/core/plots/tiny-progress/type.ts new file mode 100644 index 000000000..48d3ec93d --- /dev/null +++ b/packages/plots/src/core/plots/tiny-progress/type.ts @@ -0,0 +1,8 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type TinyProgressOptions = Options & BaseOptions & { + // 进度 + percent: number; + // 颜色 + color?: string[]; +}; diff --git a/packages/plots/src/core/utils/delete-chart-option-keys.ts b/packages/plots/src/core/utils/delete-chart-option-keys.ts new file mode 100644 index 000000000..dff3c2a75 --- /dev/null +++ b/packages/plots/src/core/utils/delete-chart-option-keys.ts @@ -0,0 +1,15 @@ +import { CHART_OPTIONS } from '../constants'; +import { Options } from '../types'; + +/** + * 统一删除不消费的配置项 + */ +export const deleteChartOptionKeys = (options: O): O => { + Object.keys(options).forEach((key) => { + if (CHART_OPTIONS.includes(key)) { + delete options[key]; + } + }); + + return options; +}; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 1842469c0..0c96e91c2 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -21,5 +21,6 @@ export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; export { getShapeConfigKeys } from './get-shape-config-keys'; export { deleteCustomKeys } from './delete-custom-keys'; +export { deleteChartOptionKeys } from './delete-chart-option-keys'; export { filterTransformed } from './filter-transformed'; export { deepAssign } from '@ant-design/charts-util'; diff --git a/site/examples/statistics/tiny/demo/basic-progress.js b/site/examples/statistics/tiny/demo/basic-progress.js new file mode 100644 index 000000000..f26222295 --- /dev/null +++ b/site/examples/statistics/tiny/demo/basic-progress.js @@ -0,0 +1,32 @@ +import { Tiny } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoProgress = () => { + const progress = 0.7 + + const config = { + width: 480, + height: 60, + autoFit: false, + percent: progress, + color: ['#f3cbb1', '#a0ff03'], + annotations: [ + { + type: 'text', + style: { + text: `${progress * 100}%`, + x: '50%', + y: '50%', + textAlign: 'center', + fontSize: 16, + fontStyle: 'bold', + }, + } + ] + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/tiny/demo/meta.json b/site/examples/statistics/tiny/demo/meta.json index b7bfd815f..d06fb3364 100644 --- a/site/examples/statistics/tiny/demo/meta.json +++ b/site/examples/statistics/tiny/demo/meta.json @@ -59,6 +59,14 @@ "en": "Tiny line plot with annotation" }, "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*KShOSrCq0X4AAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "basic-progress.js", + "title": { + "zh": "迷你进度图", + "en": "Tiny progress plot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ZJ6JSL4WFt8AAAAAAAAAAAAADmJ7AQ" } ] } From 4ce8bdefefd2e07f0e8d77035b893871617c5597 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 11 Sep 2023 21:29:08 +0800 Subject: [PATCH 062/268] chore: prefect percent demos (#2113) --- packages/plots/src/core/constants/index.ts | 11 +- .../statistics/area/demo/percentage-area.js | 2 +- .../examples/statistics/column/demo/meta.json | 8 ++ .../statistics/column/demo/percent.js | 132 ++++++++++++++++++ 4 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 site/examples/statistics/column/demo/percent.js diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 9a2de6c85..4276a0e26 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -57,6 +57,15 @@ export const TRANSFORM_OPTION_KEY = { normalize: (value: boolean | object) => { return commonCallback('normalizeY', value); }, + /** + * @title 百分比 + * @description 同 normalize + * @example + * 1. percent: true -> transform: [{type: 'normalizeY'}] + */ + percent: (value: boolean | object) => { + return commonCallback('normalizeY', value); + }, /** * @title 分组 * @example @@ -185,7 +194,7 @@ export const SPECIAL_OPTIONS = [ callback: ( origin: object, key: string, - value: { available?: boolean; text?: string | Function;[key: string]: unknown } | any[], + value: { available?: boolean; text?: string | Function; [key: string]: unknown } | any[], ) => { /** * @description 特殊情况处理 diff --git a/site/examples/statistics/area/demo/percentage-area.js b/site/examples/statistics/area/demo/percentage-area.js index e52036f27..f1847c557 100644 --- a/site/examples/statistics/area/demo/percentage-area.js +++ b/site/examples/statistics/area/demo/percentage-area.js @@ -13,7 +13,7 @@ const DemoArea = () => { colorField: 'industry', normalize: true, stack: true, - tooltip: { channel: 'y0', valueFormatter: '.3f' }, + tooltip: { channel: 'y0', valueFormatter: '.0%' }, }; return ; }; diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index 4a4659187..a9cb2531a 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -115,6 +115,14 @@ "en": "Column plot with conversion tag" }, "screenshot": "https://gw.alicdn.com/tfs/TB1u3.cvUY1gK0jSZFMXXaWcVXa-1638-1228.png" + }, + { + "filename": "percent.js", + "title": { + "zh": "百分比柱状图", + "en": "Percent Column plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*fFEqTrpsNQQAAAAAAAAAAAAAARQnAQ" } ] } diff --git a/site/examples/statistics/column/demo/percent.js b/site/examples/statistics/column/demo/percent.js new file mode 100644 index 000000000..9b7475ada --- /dev/null +++ b/site/examples/statistics/column/demo/percent.js @@ -0,0 +1,132 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Column } from '@ant-design/plots'; + +const data = [ + { + country: 'Asia', + year: '1750', + value: 502, + }, + { + country: 'Asia', + year: '1800', + value: 635, + }, + { + country: 'Asia', + year: '1850', + value: 809, + }, + { + country: 'Asia', + year: '1900', + value: 947, + }, + { + country: 'Asia', + year: '1950', + value: 1402, + }, + { + country: 'Asia', + year: '1999', + value: 3634, + }, + { + country: 'Asia', + year: '2050', + value: 5268, + }, + { + country: 'Africa', + year: '1750', + value: 106, + }, + { + country: 'Africa', + year: '1800', + value: 107, + }, + { + country: 'Africa', + year: '1850', + value: 111, + }, + { + country: 'Africa', + year: '1900', + value: 133, + }, + { + country: 'Africa', + year: '1950', + value: 221, + }, + { + country: 'Africa', + year: '1999', + value: 767, + }, + { + country: 'Africa', + year: '2050', + value: 1766, + }, + { + country: 'Europe', + year: '1750', + value: 163, + }, + { + country: 'Europe', + year: '1800', + value: 203, + }, + { + country: 'Europe', + year: '1850', + value: 276, + }, + { + country: 'Europe', + year: '1900', + value: 408, + }, + { + country: 'Europe', + year: '1950', + value: 547, + }, + { + country: 'Europe', + year: '1999', + value: 729, + }, + { + country: 'Europe', + year: '2050', + value: 628, + }, +]; + + +const DemoArea = () => { + const config = { + data, + xField: 'year', + yField: 'value', + colorField: 'country', + percent: true, + stack: true, + interaction: { + tooltip: { + shared: true + } + }, + tooltip: { channel: 'y0', valueFormatter: '.0%' }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 518a6f3a0d04384fe17795db505e0f1c7a9d6dbd Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Wed, 13 Sep 2023 19:17:45 +0800 Subject: [PATCH 063/268] docs: prefect duall-axes demos (#2115) Co-authored-by: lkd01632719 --- .../statistics/dual-axes/demo/column-line.js | 39 ++++++++++ .../dual-axes/demo/custom-column-line.js | 71 +++++++++++++++++++ .../demo/custom-grouped-column-line.js | 14 ---- .../dual-axes/demo/dual-multi-line.js | 22 ++---- .../dual-axes/demo/grouped-column-line.js | 17 +---- .../demo/grouped-column-multi-line.js | 4 +- .../statistics/dual-axes/demo/meta.json | 16 +++++ .../dual-axes/demo/pattern-with-callback.js | 17 ----- .../demo/stacked-percent-column-line.js | 16 +++-- 9 files changed, 144 insertions(+), 72 deletions(-) create mode 100644 site/examples/statistics/dual-axes/demo/column-line.js create mode 100644 site/examples/statistics/dual-axes/demo/custom-column-line.js diff --git a/site/examples/statistics/dual-axes/demo/column-line.js b/site/examples/statistics/dual-axes/demo/column-line.js new file mode 100644 index 000000000..53313ac5a --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/column-line.js @@ -0,0 +1,39 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const data = [ + { time: '2019-03', value: 350, count: 800 }, + { time: '2019-04', value: 900, count: 600 }, + { time: '2019-05', value: 300, count: 400 }, + { time: '2019-06', value: 450, count: 380 }, + { time: '2019-07', value: 470, count: 220 }, + ]; + + const config = { + data, + xField: 'time', + axis: { y: { title: null } }, + children: [ + { + type: 'interval', + yField: 'value', + style: { maxWidth: 80 }, + }, + { + type: 'line', + yField: 'count', + style: { + stroke: '#5AD8A6', + lineWidth: 2, + }, + meta: { y: { independent: true } }, + axis: { y: { position: 'right' } }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/custom-column-line.js b/site/examples/statistics/dual-axes/demo/custom-column-line.js new file mode 100644 index 000000000..6ed947350 --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/custom-column-line.js @@ -0,0 +1,71 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const data = [ + { time: '2019-03', value: 350, count: 800 }, + { time: '2019-04', value: 900, count: 600 }, + { time: '2019-05', value: 300, count: 400 }, + { time: '2019-06', value: 450, count: 380 }, + { time: '2019-07', value: 470, count: 220 }, + ]; + + const config = { + data, + xField: 'time', + axis: { y: { title: null } }, + children: [ + { + type: 'interval', + yField: 'value', + style: { maxWidth: 80 }, + label: { position: 'inside' }, + interaction: { + elementHighlight: true, + elementHighlightByColor: { background: true } + }, + }, + { + type: 'line', + yField: 'count', + shapeField: 'smooth', + style: { + stroke: '#5AD8A6', + lineWidth: 2, + }, + meta: { y: { independent: true } }, + axis: { y: { position: 'right' } }, + interaction: { + tooltip: { + crosshairs: false, + marker: false, + } + } + }, + ], + annotations: [ + { + type: 'text', + data: ['2019-05', 280], + style: { + text: '2019-05, 发布新版本', + dy: -30, + fill: '#2C3542', + fillOpacity: 0.65, + fontSize: 10, + background: true, + backgroundRadius: 4, + connector: true, + startMarker: true, + startMarkerSize: 6, + startMarkerFill: '#fff', + }, + tooltip: false, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js index d7185271b..eb9791439 100644 --- a/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js @@ -43,20 +43,6 @@ const DemoDualAxes = () => { style: { maxWidth: 50 }, label: { position: 'inside' }, scale: { color: { range: ['#5B8FF9', '#5D7092'] } }, - tooltip: { - items: [ - (d, index, _, column) => ({ - color: '#5B8FF9', - name: 'uv', - value: d.type === 'uv' ? d.value : column.y.value[index - uvBillData.length / 2], - }), - (d, index, _, column) => ({ - color: '#5D7092', - name: 'bill', - value: d.type === 'bill' ? d.value : column.y.value[index + uvBillData.length / 2], - }) - ], - }, interaction: { elementHighlightByColor: { background: true, } }, }, { diff --git a/site/examples/statistics/dual-axes/demo/dual-multi-line.js b/site/examples/statistics/dual-axes/demo/dual-multi-line.js index 7cddb6f94..d4e521ef2 100644 --- a/site/examples/statistics/dual-axes/demo/dual-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-multi-line.js @@ -44,39 +44,29 @@ const DemoDualAxes = () => { const config = { xField: 'time', - interaction: { tooltip: { sort: (d) => ['uv', 'bill', 'a', 'b', 'c'].indexOf(d.name) } }, children: [ { data: uvBillData, type: 'line', yField: 'value', - seriesField: 'type', + colorField: 'type', shapeField: 'smooth', - style: { - lineWidth: 2, - lineDash: [5, 5], - stroke: (d) => lineColor[d[0].type], - }, + style: { lineWidth: 3, lineDash: [5, 5] }, }, { data: transformData, type: 'line', yField: 'count', - seriesField: 'name', - style: { - lineWidth: 2, - stroke: (d) => lineColor[d[0].name], - }, + colorField: 'name', + style: { lineWidth: 3 }, }, { data: transformData, type: 'point', yField: 'count', sizeField: 3, - style: { - fill: (d) => lineColor[d.name], - stroke: (d) => lineColor[d.name], - }, + shapeField: 'point', + style: { fill: (d) => lineColor[d.name] }, tooltip: false, }, ], diff --git a/site/examples/statistics/dual-axes/demo/grouped-column-line.js b/site/examples/statistics/dual-axes/demo/grouped-column-line.js index 9d5de3146..c7cd6f66c 100644 --- a/site/examples/statistics/dual-axes/demo/grouped-column-line.js +++ b/site/examples/statistics/dual-axes/demo/grouped-column-line.js @@ -32,28 +32,13 @@ const DemoDualAxes = () => { type: 'interval', yField: 'value', colorField: 'type', - // group: true, - tooltip: { - items: [ - (d, index, _, column) => ({ - color: '#5B8FF9', - name: 'uv', - value: d.type === 'uv' ? d.value : column.y.value[index - 5], - }), - (d, index, _, column) => ({ - color: '#5AD8A6', - name: 'bill', - value: d.type === 'bill' ? d.value : column.y.value[index + 5], - }) - ], - }, + group: true, interaction: { elementHighlightByColor: { background: true, } }, }, { data: transformData, type: 'line', yField: 'count', - colorField: () => 'count', style: { stroke: '#5D7092', lineWidth: 2, diff --git a/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js b/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js index 82b8d4529..47d6158d1 100644 --- a/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js @@ -36,15 +36,13 @@ const DemoDualAxes = () => { const config = { xField: 'time', - interaction: { tooltip: { sort: (d) => ['uv', 'bill', 'a', 'b', 'c'].indexOf(d.name) } }, children: [ { data: uvBillData, type: 'interval', yField: 'value', colorField: 'type', - // TODO: group加上line会报错 - // group: true, + group: true, style: { maxWidth: 80 }, interaction: { elementHighlightByColor: { background: true, } }, }, diff --git a/site/examples/statistics/dual-axes/demo/meta.json b/site/examples/statistics/dual-axes/demo/meta.json index 99074ee11..319b183d9 100644 --- a/site/examples/statistics/dual-axes/demo/meta.json +++ b/site/examples/statistics/dual-axes/demo/meta.json @@ -36,6 +36,22 @@ }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*COKsS6s75kYAAAAAAAAAAAAADmJ7AQ/original" }, + { + "filename": "column-line.js", + "title": { + "zh": "柱线混合图表", + "en": "Column line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*M4ldTo75WeEAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "custom-column-line.js", + "title": { + "zh": "柱线混合图表-自定义样式", + "en": "Custom column line" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*vTPGSLODwLEAAAAAAAAAAAAAARQnAQ" + }, { "filename": "range-column-line.js", "title": { diff --git a/site/examples/statistics/dual-axes/demo/pattern-with-callback.js b/site/examples/statistics/dual-axes/demo/pattern-with-callback.js index a7cd665d5..cf9dd1647 100644 --- a/site/examples/statistics/dual-axes/demo/pattern-with-callback.js +++ b/site/examples/statistics/dual-axes/demo/pattern-with-callback.js @@ -40,25 +40,8 @@ const DemoDualAxes = () => { yField: 'value', colorField: 'type', group: true, - style: { - fill: () => { } - }, label: { position: 'inside' }, scale: { color: { range: ['#5B8FF9', '#5D7092'] } }, - tooltip: { - items: [ - (d, index, _, column) => ({ - color: '#5B8FF9', - name: 'uv', - value: d.type === 'uv' ? d.value : column.y.value[index - uvBillData.length / 2], - }), - (d, index, _, column) => ({ - color: '#5D7092', - name: 'bill', - value: d.type === 'bill' ? d.value : column.y.value[index + uvBillData.length / 2], - }) - ], - }, interaction: { elementHighlightByColor: { background: true, } }, }, { diff --git a/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js b/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js index dfb8b357c..a9119dfea 100644 --- a/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js +++ b/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js @@ -34,12 +34,10 @@ const DemoDualAxes = () => { stack: true, percent: true, colorField: 'type', - axis: { - y: { - title: 'value', - style: { titleFill: '#5B8FF9' }, - }, - }, + style: { maxWidth: 80 }, + tooltip: { channel: 'y0', valueFormatter: '.0%' }, + axis: { y: { title: 'value', style: { titleFill: '#5B8FF9' } } }, + interaction: { elementHighlightByColor: { background: true, } }, }, { data: transformData, @@ -54,6 +52,12 @@ const DemoDualAxes = () => { style: { titleFill: '#5AD8A6' }, }, }, + interaction: { + tooltip: { + crosshairs: false, + marker: false, + } + } }, ], }; From cc09fe4724e3f33ff678049427685a03622d857b Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 14 Sep 2023 15:57:49 +0800 Subject: [PATCH 064/268] fix: padding configuration (#2117) --- packages/plots/src/core/constants/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 4276a0e26..52a1334b7 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -1,7 +1,7 @@ import { isArray, isBoolean } from '../utils'; /** new Chart options */ -export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas', 'theme', 'inset']; +export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas', 'theme', 'inset', 'padding']; /** 最终透传给 G2 Spec 的保留字 */ export const RESERVED_KEYS = ['data', 'type', 'children']; From 0390cf1bc6677bc4c50119ef8eac3fe4852802fa Mon Sep 17 00:00:00 2001 From: curry Date: Mon, 18 Sep 2023 11:03:15 +0800 Subject: [PATCH 065/268] feat: add gauge chart (#2114) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: init gauge * feat: 基础仪表盘 * feat: 新增自定义仪表盘颜色 * feat: 新增自定义仪表盘颜色 * feat: 去掉console * fix: DemoGauge * feat: gauge适配器修改 --------- Co-authored-by: liangchaofei --- packages/plots/src/components/gauge/index.tsx | 10 ++++++ packages/plots/src/components/index.ts | 3 +- packages/plots/src/constants/index.ts | 1 + packages/plots/src/core/index.ts | 3 ++ .../plots/src/core/plots/gauge/adaptor.ts | 27 +++++++++++++++ packages/plots/src/core/plots/gauge/index.ts | 33 +++++++++++++++++++ packages/plots/src/core/plots/gauge/type.ts | 3 ++ .../statistics/gauge/demo/gauge-color.js | 29 ++++++++++++++++ site/examples/statistics/gauge/demo/gauge.js | 20 +++++++++++ site/examples/statistics/gauge/demo/meta.json | 24 ++++++++++++++ site/examples/statistics/gauge/index.en.md | 6 ++++ site/examples/statistics/gauge/index.zh.md | 6 ++++ 12 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 packages/plots/src/components/gauge/index.tsx create mode 100644 packages/plots/src/core/plots/gauge/adaptor.ts create mode 100644 packages/plots/src/core/plots/gauge/index.ts create mode 100644 packages/plots/src/core/plots/gauge/type.ts create mode 100644 site/examples/statistics/gauge/demo/gauge-color.js create mode 100644 site/examples/statistics/gauge/demo/gauge.js create mode 100644 site/examples/statistics/gauge/demo/meta.json create mode 100644 site/examples/statistics/gauge/index.en.md create mode 100644 site/examples/statistics/gauge/index.zh.md diff --git a/packages/plots/src/components/gauge/index.tsx b/packages/plots/src/components/gauge/index.tsx new file mode 100644 index 000000000..dbfa5bf66 --- /dev/null +++ b/packages/plots/src/components/gauge/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { GaugeOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type GaugeConfig = CommonConfig; + +const GaugeChart = (props: GaugeConfig) => ; + +export default GaugeChart; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 98659db86..f23ea4e1c 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -13,5 +13,6 @@ import Waterfall from './waterfall'; import Histogram from './histogram'; import Heatmap from './heatmap'; import Box from './box'; +import Gauge from './gauge'; -export { Base, Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall, Heatmap, Box }; +export { Base, Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall, Heatmap, Box, Gauge }; diff --git a/packages/plots/src/constants/index.ts b/packages/plots/src/constants/index.ts index 6c3827318..64fca6685 100644 --- a/packages/plots/src/constants/index.ts +++ b/packages/plots/src/constants/index.ts @@ -5,6 +5,7 @@ */ export const JSX_TO_STRING = [ { path: ['label', 'render'] }, + { path: ['style', 'textContent'] }, { path: ['interaction', 'tooltip', 'render'], extra: { diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index c30709122..4de046304 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -16,6 +16,7 @@ export type { WaterfallOptions } from './plots/waterfall'; export type { HistogramOptions } from './plots/histogram'; export type { HeatmapOptions } from './plots/heatmap'; export type { BoxOptions } from './plots/box'; +export type { GaugeOptions } from './plots/gauge'; export * from './types'; import { Base } from './plots/base'; @@ -36,6 +37,7 @@ import { Waterfall } from './plots/waterfall'; import { Histogram } from './plots/histogram'; import { Heatmap } from './plots/heatmap'; import { Box } from './plots/box'; +import { Gauge } from './plots/gauge'; export const Plots = { Base, @@ -56,4 +58,5 @@ export const Plots = { Histogram, Heatmap, Box, + Gauge }; diff --git a/packages/plots/src/core/plots/gauge/adaptor.ts b/packages/plots/src/core/plots/gauge/adaptor.ts new file mode 100644 index 000000000..9dc37e02a --- /dev/null +++ b/packages/plots/src/core/plots/gauge/adaptor.ts @@ -0,0 +1,27 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { GaugeOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + const { data } = params.options; + + params.options.data = { + value: data + } + + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/gauge/index.ts b/packages/plots/src/core/plots/gauge/index.ts new file mode 100644 index 000000000..ee263b61e --- /dev/null +++ b/packages/plots/src/core/plots/gauge/index.ts @@ -0,0 +1,33 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { GaugeOptions } from './type'; + +export type { GaugeOptions }; + +export class Gauge extends Plot { + /** 图表类型 */ + public type = 'Gauge'; + + /** + * 获取 仪表盘 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { type: 'view', children: [{ type: 'gauge' }] }; + } + + /** + * 获取 仪表盘 默认配置 + */ + protected getDefaultOptions() { + return Gauge.getDefaultOptions(); + } + + /** + * 仪表盘适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/gauge/type.ts b/packages/plots/src/core/plots/gauge/type.ts new file mode 100644 index 000000000..16209fc8c --- /dev/null +++ b/packages/plots/src/core/plots/gauge/type.ts @@ -0,0 +1,3 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type GaugeOptions = Options & BaseOptions; diff --git a/site/examples/statistics/gauge/demo/gauge-color.js b/site/examples/statistics/gauge/demo/gauge-color.js new file mode 100644 index 000000000..842a741b0 --- /dev/null +++ b/site/examples/statistics/gauge/demo/gauge-color.js @@ -0,0 +1,29 @@ +import { Gauge } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoGauge = () => { + const config = { + width: 720, + height: 720, + autoFit: true, + data: { + target: 159, + total: 400, + name: 'score', + thresholds: [100, 200, 400], + }, + legend: false, + meta: { + color: { + range: ['#F4664A', '#FAAD14', 'green'] + }, + }, + style: { + textContent:(target, total) => `得分:${target}\n占比:${(target / total) * 100}%`, + } + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/gauge/demo/gauge.js b/site/examples/statistics/gauge/demo/gauge.js new file mode 100644 index 000000000..03c78b9a7 --- /dev/null +++ b/site/examples/statistics/gauge/demo/gauge.js @@ -0,0 +1,20 @@ +import { Gauge } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoGauge = () => { + const config = { + width: 720, + height: 720, + autoFit: true, + data: { + target: 120, + total: 400, + name: 'score', + }, + legend: false + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/gauge/demo/meta.json b/site/examples/statistics/gauge/demo/meta.json new file mode 100644 index 000000000..ed5f9ad5f --- /dev/null +++ b/site/examples/statistics/gauge/demo/meta.json @@ -0,0 +1,24 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "gauge.js", + "title": { + "zh": "仪表盘", + "en": "Gauge Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*hpjTRr6LM7IAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "gauge-color.js", + "title": { + "zh": "自定义仪表盘颜色", + "en": "Gauge Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*VSrGTYrM954AAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/site/examples/statistics/gauge/index.en.md b/site/examples/statistics/gauge/index.en.md new file mode 100644 index 000000000..4bed8ab2e --- /dev/null +++ b/site/examples/statistics/gauge/index.en.md @@ -0,0 +1,6 @@ +--- +title: Gauge +order: 14 +--- + + diff --git a/site/examples/statistics/gauge/index.zh.md b/site/examples/statistics/gauge/index.zh.md new file mode 100644 index 000000000..2e270dda4 --- /dev/null +++ b/site/examples/statistics/gauge/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 仪表盘 +order: 14 +--- + + From 646a70ad6c8fe18a5ec40348ac4f158775ad3932 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Mon, 18 Sep 2023 11:13:35 +0800 Subject: [PATCH 066/268] feat(v2): add Bullet plots (#2118) * feat(v2): add Bullet plots * feat(v2): add Bullet plots -1 --------- Co-authored-by: Joel Alan <31396322+lxfu1@users.noreply.github.com> --- .../plots/src/components/bullet/index.tsx | 10 ++ packages/plots/src/components/index.ts | 3 +- .../src/core/components/coordinateLayout.ts | 12 ++ packages/plots/src/core/components/index.ts | 1 + packages/plots/src/core/index.ts | 3 + .../plots/src/core/plots/bullet/adaptor.ts | 153 ++++++++++++++++++ packages/plots/src/core/plots/bullet/index.ts | 69 ++++++++ packages/plots/src/core/plots/bullet/type.ts | 22 +++ packages/plots/src/core/utils/index.ts | 3 + site/examples/statistics/bullet/API.en.md | 1 + site/examples/statistics/bullet/API.zh.md | 1 + .../statistics/bullet/demo/bullet-group.js | 44 +++++ .../statistics/bullet/demo/bullet-more-cfg.js | 31 ++++ .../statistics/bullet/demo/bullet-vertical.js | 18 +++ .../examples/statistics/bullet/demo/bullet.js | 18 +++ .../statistics/bullet/demo/bullets-group.js | 46 ++++++ .../statistics/bullet/demo/bullets.js | 36 +++++ .../examples/statistics/bullet/demo/meta.json | 55 +++++++ site/examples/statistics/bullet/index.en.md | 4 + site/examples/statistics/bullet/index.zh.md | 4 + .../statistics/scatter/demo/point-shape.js | 2 +- 21 files changed, 534 insertions(+), 2 deletions(-) create mode 100644 packages/plots/src/components/bullet/index.tsx create mode 100644 packages/plots/src/core/components/coordinateLayout.ts create mode 100644 packages/plots/src/core/plots/bullet/adaptor.ts create mode 100644 packages/plots/src/core/plots/bullet/index.ts create mode 100644 packages/plots/src/core/plots/bullet/type.ts create mode 100644 site/examples/statistics/bullet/API.en.md create mode 100644 site/examples/statistics/bullet/API.zh.md create mode 100644 site/examples/statistics/bullet/demo/bullet-group.js create mode 100644 site/examples/statistics/bullet/demo/bullet-more-cfg.js create mode 100644 site/examples/statistics/bullet/demo/bullet-vertical.js create mode 100644 site/examples/statistics/bullet/demo/bullet.js create mode 100644 site/examples/statistics/bullet/demo/bullets-group.js create mode 100644 site/examples/statistics/bullet/demo/bullets.js create mode 100644 site/examples/statistics/bullet/demo/meta.json create mode 100644 site/examples/statistics/bullet/index.en.md create mode 100644 site/examples/statistics/bullet/index.zh.md diff --git a/packages/plots/src/components/bullet/index.tsx b/packages/plots/src/components/bullet/index.tsx new file mode 100644 index 000000000..01019351c --- /dev/null +++ b/packages/plots/src/components/bullet/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { BulletOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type BulletConfig = CommonConfig; + +const BulletChart = (props: BulletConfig) => ; + +export default BulletChart; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index f23ea4e1c..b4a460efa 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -13,6 +13,7 @@ import Waterfall from './waterfall'; import Histogram from './histogram'; import Heatmap from './heatmap'; import Box from './box'; +import Bullet from './bullet'; import Gauge from './gauge'; -export { Base, Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall, Heatmap, Box, Gauge }; +export { Base, Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall, Heatmap, Box, Bullet, Gauge }; \ No newline at end of file diff --git a/packages/plots/src/core/components/coordinateLayout.ts b/packages/plots/src/core/components/coordinateLayout.ts new file mode 100644 index 000000000..9b4f0febc --- /dev/null +++ b/packages/plots/src/core/components/coordinateLayout.ts @@ -0,0 +1,12 @@ +import type { Adaptor } from '../types'; + +/** + * layout = 'horizontal' | 'vertical' + * @param params + * @returns + */ +export function coordinateLayout

(params: P) { + const { layout = 'horizontal' } = params.options; + params.options.coordinate.transform = layout !== 'horizontal' ? undefined : [{ type: 'transpose' }]; + return params; +} diff --git a/packages/plots/src/core/components/index.ts b/packages/plots/src/core/components/index.ts index adf9117fc..0dda41686 100644 --- a/packages/plots/src/core/components/index.ts +++ b/packages/plots/src/core/components/index.ts @@ -1,2 +1,3 @@ export { mark } from './mark'; export { coordinate, COORDIANTE_OPTIONS } from './coordinate'; +export { coordinateLayout } from './coordinateLayout'; \ No newline at end of file diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 4de046304..683e7fede 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -16,6 +16,7 @@ export type { WaterfallOptions } from './plots/waterfall'; export type { HistogramOptions } from './plots/histogram'; export type { HeatmapOptions } from './plots/heatmap'; export type { BoxOptions } from './plots/box'; +export type { BulletOptions } from './plots/bullet'; export type { GaugeOptions } from './plots/gauge'; export * from './types'; @@ -37,6 +38,7 @@ import { Waterfall } from './plots/waterfall'; import { Histogram } from './plots/histogram'; import { Heatmap } from './plots/heatmap'; import { Box } from './plots/box'; +import { Bullet } from './plots/bullet'; import { Gauge } from './plots/gauge'; export const Plots = { @@ -58,5 +60,6 @@ export const Plots = { Histogram, Heatmap, Box, + Bullet, Gauge }; diff --git a/packages/plots/src/core/plots/bullet/adaptor.ts b/packages/plots/src/core/plots/bullet/adaptor.ts new file mode 100644 index 000000000..3fb4639cb --- /dev/null +++ b/packages/plots/src/core/plots/bullet/adaptor.ts @@ -0,0 +1,153 @@ +import { coordinateLayout } from '../../components'; +import { flow, transformOptions, map, get, isArray, includes, isNumber, deepAssign } from '../../utils'; + +import type { Adaptor } from '../../types'; +import type { BulletOptions } from './type'; + +// 默认颜色 +export const DEFAULT_COLORS = ['#f0efff', '#5B8FF9', '#3D76DD']; + +type Params = Adaptor; + +/** + * 转化为扁平化数据 + * [{ measures: [1,2], title: 'x' }, ...] -> [{ measures: 1, title: 'x' }, { measures: 2, title: 'x' },...] + * @param data 数据 + * @param field 通道 + * @param xField x 分类通道 + * @param isSort 是否排序(降序) + * @returns [扁平化的数据, 最大数据量] + */ +function getTransformData(data: any[], field: string, xField: string, isSort = true) { + let maxSize = 1; + const transformData = map(data, (d) => { + const fieldData = get(d, [field], []); + if (isArray(fieldData)) { + if (maxSize < fieldData.length) { + maxSize = fieldData.length; + } + + return map(isSort ? fieldData.sort((a, b) => b - a) : fieldData, (value: number, index: number) => ({ + [xField]: d[xField], + [field]: value, + index, + })); + } + + return { [xField]: d[xField], [field]: fieldData }; + }).flat(); + + return [transformData, maxSize]; +} +/** + * 按照最大数据量转化为颜色数组 + * @param maxSize 最大数据量 + * @param color 颜色 + * @returns string[] + */ +function getFieldColor(maxSize: number, color: string | string[]) { + return new Array(maxSize).fill('').map((d, i) => isArray(color) ? color[i % color.length] : color); +} + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + const { color, rangeField = 'ranges', measureField = 'measures', targetField = 'targets', xField = 'title', mapField, data } = params.options; + + // 数据进行拍平 + const [rangesData, rangesMaxSize] = getTransformData(data, rangeField, xField); + const [measuresData, measuresMaxSize] = getTransformData(data, measureField, xField, false); + const [targetsData, targetsMaxSize] = getTransformData(data, targetField, xField); + + // 获取颜色 + const rangesColor = get(color, [rangeField], DEFAULT_COLORS[0]); + const measuresColor = get(color, [measureField], DEFAULT_COLORS[1]); + const targetsColor = get(color, [targetField], DEFAULT_COLORS[2]); + + // 获取 scale.color 颜色分类 + const colors = [ + getFieldColor(rangesMaxSize, rangesColor), + getFieldColor(measuresMaxSize, measuresColor), + getFieldColor(targetsMaxSize, targetsColor), + ].flat(); + + params.options.children = map(params.options.children, (c, i) => { + const datas = [rangesData, measuresData, targetsData][i]; + const yField = [rangeField, measureField, targetField][i]; + + return { + ...c, + data: datas, + encode: { + ...(c.encode || {}), + x: xField, + y: yField, + color: (d) => { + const { index } = d; + const mapString = isNumber(index) ? `${yField}_${index}` : yField; + return mapField ? get(mapField, [yField, index], mapString) : mapString; + }, + }, + style: { + ...(c.style || {}), + // 层级 + zIndex: (d) => -d[yField], + }, + // labels 对应的 yField + labels: i !== 0 ? map(c.labels, (l) => ({ ...l, text: yField })) : undefined, + }; + }); + + params.options.scale.color.range = colors; + // legend itemMarker 的形状 + params.options.legend.color.itemMarker = (d) => { + if (mapField && includes(mapField?.[targetField], d)) { + return 'line'; + } + return d?.replace(/\_\d$/, '') === targetField ? 'line' : 'square'; + }; + + return params; + }; + + /** + * 水平|竖直 方向target配置适配 + * @param params Params + * @returns params Params + */ + const layoutAdaptor = (params: Params) => { + const { layout = 'horizontal' } = params.options; + + if (layout !== 'horizontal') { + const target = params.options.children[2]; + target.shapeField = 'hyphen'; + target.labels[0] = { + text: target.labels[0].text, + position: "bottom", + dy: -5, + }; + } + + return params; + } + + /** + * range、measure、target 配置适配 + * @param params Params + * @returns params Params + */ + const cfgAdaptor = (params: Params) => { + const { range = {}, measure = {}, target = {}, children } = params.options; + params.options.children = [range, measure, target].map((c, i) => deepAssign(children[i], c)); + return params; + } + + + return flow(init, layoutAdaptor, cfgAdaptor, coordinateLayout, transformOptions)(params); +} diff --git a/packages/plots/src/core/plots/bullet/index.ts b/packages/plots/src/core/plots/bullet/index.ts new file mode 100644 index 000000000..edc2f70d0 --- /dev/null +++ b/packages/plots/src/core/plots/bullet/index.ts @@ -0,0 +1,69 @@ +import { Plot } from '../../base'; +import { adaptor, DEFAULT_COLORS } from './adaptor'; + +import type { BulletOptions } from './type'; +import type { Adaptor } from '../../types'; + +export type { BulletOptions }; + +export class Bullet extends Plot { + /** 图表类型 */ + public type = 'bullet'; + + /** + * 获取 子弹图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + scale: { + color: { + range: DEFAULT_COLORS, + }, + }, + legend: { + color: { + itemMarker: (d) => { + return d === "target" ? "line" : "square"; + }, + }, + }, + children: [ + { + type: 'interval', + style: { maxWidth: 30 }, + axis: { y: { grid: true, gridLineWidth: 2 }, x: { title: false } }, + }, + { + type: 'interval', + style: { maxWidth: 20 }, + transform: [{ type: 'stackY' }], + labels: [{ text: "measures", position: "inside" }], + }, + { + type: 'point', + encode: { size: 8, shape: "line" }, + tooltip: { title: false, items: [{ channel: "y" }] }, + labels: [{ text: "targets", position: "right", textAlign: 'left', dx: 5 }], + }, + ], + interaction: { tooltip: { shared: true } }, + coordinate: { transform: [{ type: "transpose" }] }, + }; + } + + /** + * 获取 子弹图 默认配置 + */ + protected getDefaultOptions() { + return Bullet.getDefaultOptions(); + } + + /** + * 子弹图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/bullet/type.ts b/packages/plots/src/core/plots/bullet/type.ts new file mode 100644 index 000000000..d70521532 --- /dev/null +++ b/packages/plots/src/core/plots/bullet/type.ts @@ -0,0 +1,22 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type BulletOptions = Options & BaseOptions & { + color: { + ranges: string | string[], + measures: string | string[], + target: string | string[], + }, + rangeField: string, + measureField: string, + targetField: string, + mapField: { + ranges: string | string[], + measures: string | string[], + target: string | string[], + }, + // 竖直|水平 + layout: 'vertical' | 'horizontal', + range: BulletOptions, + measure: BulletOptions, + target: BulletOptions, +}; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 0c96e91c2..3aafd5f7c 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -15,6 +15,9 @@ export { divide, ceil, isNumber, + isString, + includes, + map, } from 'lodash-es'; export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; diff --git a/site/examples/statistics/bullet/API.en.md b/site/examples/statistics/bullet/API.en.md new file mode 100644 index 000000000..b9c488778 --- /dev/null +++ b/site/examples/statistics/bullet/API.en.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/bullet/API.zh.md b/site/examples/statistics/bullet/API.zh.md new file mode 100644 index 000000000..b2912436b --- /dev/null +++ b/site/examples/statistics/bullet/API.zh.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/examples/statistics/bullet/demo/bullet-group.js b/site/examples/statistics/bullet/demo/bullet-group.js new file mode 100644 index 000000000..871a00cb8 --- /dev/null +++ b/site/examples/statistics/bullet/demo/bullet-group.js @@ -0,0 +1,44 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Bullet } from '@ant-design/plots'; + +const DemoBullet = () => { + const data = [ + { + title: '5🌟', + ranges: 100, + measures: 40, + targets: 85, + }, + { + title: '4🌟', + ranges: 100, + measures: 80, + targets: 40, + }, + { + title: '3🌟', + ranges: 100, + measures: 20, + targets: 22, + }, + { + title: '0-2🌟', + ranges: 100, + measures: 30, + targets: 10, + }, + ]; + + const color = { + targets: 'red', + }; + + const config = { + data, + color, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bullet/demo/bullet-more-cfg.js b/site/examples/statistics/bullet/demo/bullet-more-cfg.js new file mode 100644 index 000000000..aa5b28c97 --- /dev/null +++ b/site/examples/statistics/bullet/demo/bullet-more-cfg.js @@ -0,0 +1,31 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Bullet } from '@ant-design/plots'; + +const DemoBullet = () => { + const config = { + data: [{ + title: '满意度', + ranges: 100, + measures: 80, + targets: 85, + }], + range: { + style: { + maxWidth: 50, + }, + }, + measure: { + style: { + lineWidth: 1, + stroke: '#fff', + }, + }, + target: { + sizeField: 40, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bullet/demo/bullet-vertical.js b/site/examples/statistics/bullet/demo/bullet-vertical.js new file mode 100644 index 000000000..307c1fb34 --- /dev/null +++ b/site/examples/statistics/bullet/demo/bullet-vertical.js @@ -0,0 +1,18 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Bullet } from '@ant-design/plots'; + +const DemoBullet = () => { + const config = { + data: [{ + title: '满意度', + ranges: 100, + measures: 80, + targets: 85, + }], + layout: 'vertical', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bullet/demo/bullet.js b/site/examples/statistics/bullet/demo/bullet.js new file mode 100644 index 000000000..69ac3a025 --- /dev/null +++ b/site/examples/statistics/bullet/demo/bullet.js @@ -0,0 +1,18 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Bullet } from '@ant-design/plots'; + +const DemoBullet = () => { + const config = { + // default xField: 'title'、rangeField: 'ranges'、measureField: 'measures'、targetField: 'targets' + data: [{ + title: '满意度', + ranges: 100, + measures: 80, + targets: 85, + }], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bullet/demo/bullets-group.js b/site/examples/statistics/bullet/demo/bullets-group.js new file mode 100644 index 000000000..a3305090c --- /dev/null +++ b/site/examples/statistics/bullet/demo/bullets-group.js @@ -0,0 +1,46 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Bullet } from '@ant-design/plots'; + +const DemoBullet = () => { + const data = [{ + title: '5🌟', + ranges: [100, 80], + measures: [50, 40], + targets: [85], + }, + { + title: '4🌟', + ranges: [100, 10], + measures: [12, 40], + targets: [40, 70], + }, + { + title: '3🌟', + ranges: [100], + measures: [20], + targets: [22], + }, + { + title: '0-2🌟', + ranges: [100], + measures: [30], + targets: [10], + }, + ]; + + const color = { + ranges: ['#FFbcb8', '#FFe0b0', '#bfeec8'], + measures: ['#5B8FF9', '#61DDAA'], + targets: ['#f0f'], + }; + + const config = { + data, + color, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bullet/demo/bullets.js b/site/examples/statistics/bullet/demo/bullets.js new file mode 100644 index 000000000..221d0665f --- /dev/null +++ b/site/examples/statistics/bullet/demo/bullets.js @@ -0,0 +1,36 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Bullet } from '@ant-design/plots'; + +const DemoBullet = () => { + const color = { + section: ['#bfeec8', '#FFe0b0', '#FFbcb8'], + score: ['#61DDAA', '#5B8FF9'], + target: '#39a3f4', + }; + + const config = { + data: [ + { + satisfaction: '满意度', + // 自动降序 + section: [40, 70, 100], + score: [30, 50], + target: [85], + }, + ], + color, + xField: 'satisfaction', + rangeField: 'section', + measureField: 'score', + targetField: 'target', + mapField: { + section: ['优', '良', '差'], + score: ['前段', '后段'], + target: ['目标'], + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bullet/demo/meta.json b/site/examples/statistics/bullet/demo/meta.json new file mode 100644 index 000000000..00e5a421b --- /dev/null +++ b/site/examples/statistics/bullet/demo/meta.json @@ -0,0 +1,55 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [{ + "filename": "bullet.js", + "title": { + "zh": "子弹图", + "en": "Bullet" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*R4hCRJwwMhgAAAAAAAAAAAAADo2bAQ/original" + }, + { + "filename": "bullets.js", + "title": { + "zh": "多指标子弹图", + "en": "Bullets" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*2VHuTLQBDJgAAAAAAAAAAAAADo2bAQ/original" + }, + { + "filename": "bullet-vertical.js", + "title": { + "zh": "子弹图 垂直方向", + "en": "Bullet vertical" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*8IYYQorPr_4AAAAAAAAAAAAADo2bAQ/original" + }, + { + "filename": "bullet-group.js", + "title": { + "zh": "分组子弹图", + "en": "Bullet group" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*kAwGRZaRy3wAAAAAAAAAAAAADo2bAQ/original" + }, + { + "filename": "bullets-group.js", + "title": { + "zh": "分组多指标子弹图", + "en": "Bullets group" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*u_YoTKv82soAAAAAAAAAAAAADo2bAQ/original" + }, + { + "filename": "bullet-more-cfg.js", + "title": { + "zh": "子弹图 更多配置", + "en": "Bullet more Config" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*RI6-TYu5QaMAAAAAAAAAAAAADo2bAQ/original" + } + ] +} diff --git a/site/examples/statistics/bullet/index.en.md b/site/examples/statistics/bullet/index.en.md new file mode 100644 index 000000000..9da52243c --- /dev/null +++ b/site/examples/statistics/bullet/index.en.md @@ -0,0 +1,4 @@ +--- +title: Bullet +order: 3 +--- \ No newline at end of file diff --git a/site/examples/statistics/bullet/index.zh.md b/site/examples/statistics/bullet/index.zh.md new file mode 100644 index 000000000..3a74bcebc --- /dev/null +++ b/site/examples/statistics/bullet/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 子弹图 +order: 3 +--- diff --git a/site/examples/statistics/scatter/demo/point-shape.js b/site/examples/statistics/scatter/demo/point-shape.js index d235f8646..c7d895da2 100644 --- a/site/examples/statistics/scatter/demo/point-shape.js +++ b/site/examples/statistics/scatter/demo/point-shape.js @@ -14,7 +14,7 @@ const DemoScatter = () => { sizeField: 5, shapeField: 'category', meta: { - shapeField: { range: ['point', 'plus', 'diamond'] }, + shape: { range: ['point', 'plus', 'diamond'] }, }, }; return ; From 02adbb04e212d9ae0e92920a05ed821c4029a4e1 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 18 Sep 2023 12:13:21 +0800 Subject: [PATCH 067/268] fix: types (#2121) --- packages/plots/src/components/index.ts | 37 ++++++++++++++++++- packages/plots/src/components/interface.ts | 4 -- packages/plots/src/components/tiny/index.ts | 5 +++ .../src/components/tiny/tiny-area/index.tsx | 4 +- .../src/components/tiny/tiny-column/index.tsx | 4 +- packages/plots/src/interface.ts | 14 +------ 6 files changed, 47 insertions(+), 21 deletions(-) delete mode 100644 packages/plots/src/components/interface.ts diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index b4a460efa..812183641 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -16,4 +16,39 @@ import Box from './box'; import Bullet from './bullet'; import Gauge from './gauge'; -export { Base, Column, Line, Pie, Area, Bar, DualAxes, Scatter, Radar, Rose, Tiny, Histogram, Waterfall, Heatmap, Box, Bullet, Gauge }; \ No newline at end of file +export type { AreaConfig } from './area'; +export type { BarConfig } from './bar'; +export type { ColumnConfig } from './column'; +export type { DualAxesConfig } from './dual-axes'; +export type { LineConfig } from './line'; +export type { PieConfig } from './pie'; +export type { ScatterConfig } from './scatter'; +export type { RadarConfig } from './radar'; +export type { TinyLineConfig, TinyAreaConfig, TinyColumnConfig, TinyProgressConfig } from './tiny'; +export type { RoseConfig } from './rose'; +export type { WaterfallConfig } from './waterfall'; +export type { HistogramConfig } from './histogram'; +export type { HeatmapConfig } from './heatmap'; +export type { BoxConfig } from './box'; +export type { BulletConfig } from './bullet'; +export type { GaugeConfig } from './gauge'; + +export { + Base, + Column, + Line, + Pie, + Area, + Bar, + DualAxes, + Scatter, + Radar, + Rose, + Tiny, + Histogram, + Waterfall, + Heatmap, + Box, + Bullet, + Gauge, +}; diff --git a/packages/plots/src/components/interface.ts b/packages/plots/src/components/interface.ts deleted file mode 100644 index f499cf240..000000000 --- a/packages/plots/src/components/interface.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type { AreaConfig } from './area'; -export type { ColumnConfig } from './column'; -export type { LineConfig } from './line'; -export type { HistogramConfig } from './histogram'; diff --git a/packages/plots/src/components/tiny/index.ts b/packages/plots/src/components/tiny/index.ts index 0025572a5..946fd4d47 100644 --- a/packages/plots/src/components/tiny/index.ts +++ b/packages/plots/src/components/tiny/index.ts @@ -3,6 +3,11 @@ import Area from './tiny-area'; import Column from './tiny-column'; import Progress from './tiny-progress'; +export type { TinyLineConfig } from './tiny-line'; +export type { TinyAreaConfig } from './tiny-area'; +export type { TinyColumnConfig } from './tiny-column'; +export type { TinyProgressConfig } from './tiny-progress'; + type TinyOptions = Record; export const Tiny: TinyOptions = { Line, Area, Column, Progress }; diff --git a/packages/plots/src/components/tiny/tiny-area/index.tsx b/packages/plots/src/components/tiny/tiny-area/index.tsx index 107e9d388..9182bb937 100644 --- a/packages/plots/src/components/tiny/tiny-area/index.tsx +++ b/packages/plots/src/components/tiny/tiny-area/index.tsx @@ -3,8 +3,8 @@ import { TinyAreaOptions } from '../../../core'; import { CommonConfig } from '../../../interface'; import { BaseChart } from '../../base'; -export type TinyLineConfig = CommonConfig; +export type TinyAreaConfig = CommonConfig; -const TinyAreaChart = (props: TinyLineConfig) => ; +const TinyAreaChart = (props: TinyAreaConfig) => ; export default TinyAreaChart; diff --git a/packages/plots/src/components/tiny/tiny-column/index.tsx b/packages/plots/src/components/tiny/tiny-column/index.tsx index 6521e2d2f..234c86f0e 100644 --- a/packages/plots/src/components/tiny/tiny-column/index.tsx +++ b/packages/plots/src/components/tiny/tiny-column/index.tsx @@ -3,8 +3,8 @@ import { TinyColumnOptions } from '../../../core'; import { CommonConfig } from '../../../interface'; import { BaseChart } from '../../base'; -export type TinyLineConfig = CommonConfig; +export type TinyColumnConfig = CommonConfig; -const TinyLineChart = (props: TinyLineConfig) => ; +const TinyLineChart = (props: TinyColumnConfig) => ; export default TinyLineChart; diff --git a/packages/plots/src/interface.ts b/packages/plots/src/interface.ts index 31e0ea39e..1082cbe90 100644 --- a/packages/plots/src/interface.ts +++ b/packages/plots/src/interface.ts @@ -1,13 +1,11 @@ +import { TooltipComponent } from '@antv/g2'; import { Options, G2Spec } from './core'; /** * @title 图表浮窗配置 * @title.en_US Chart tooltip configuration */ -export interface Tooltip extends Omit { - customContent?: (title: string, data: any[]) => React.ReactNode | string | unknown; - container?: React.ReactNode; -} +export type Tooltip = TooltipComponent; export type Plot = any; @@ -54,12 +52,6 @@ export interface ContainerConfig { * @description.en_US Error placeholder template */ errorTemplate?: (e: Error) => React.ReactNode; - /** - * @title 图表浮窗 - * @description 设置悬浮提示 - * @title.en_US Chart tooltip - * @description.en_US Setting chart tooltip - */ } export interface AttachConfig { @@ -108,6 +100,4 @@ export interface Common extends AttachConfig, ContainerConfig { export type CommonConfig = Common & TransformType; -export * from './components/interface'; - export { Options }; From 586b26358be008ae577f86af0eedd9bbbc61d155 Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Mon, 18 Sep 2023 13:45:55 +0800 Subject: [PATCH 068/268] chore: release alpha.1 --- packages/plots/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plots/package.json b/packages/plots/package.json index 507ed4a72..c5e28ffd7 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.0-alpha.0", + "version": "2.0.0-alpha.1", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From 557c8330ed1d574ca9fe73437ea8588a8566b965 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Mon, 18 Sep 2023 20:14:20 +0800 Subject: [PATCH 069/268] =?UTF-8?q?fix(transform):=20=E4=BF=AE=E5=A4=8Dtra?= =?UTF-8?q?nsformOptions=20=E6=96=B9=E6=B3=95=E4=B8=AD=E5=AD=90=20children?= =?UTF-8?q?=20=E9=85=8D=E7=BD=AE=E8=A2=AB=E6=80=BB=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E8=A6=86=E7=9B=96=E7=9A=84=E9=97=AE=E9=A2=98=20(#2122)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plots/package.json | 2 +- packages/plots/src/core/utils/transform.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/plots/package.json b/packages/plots/package.json index c5e28ffd7..2bca9eb57 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@antv/event-emitter": "^0.1.3", - "@antv/g2": "^5.1.0", + "@antv/g2": "^5.1.3", "size-sensor": "^1.0.1", "@ant-design/charts-util": "workspace:*" }, diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index 566b26376..695af233d 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -82,9 +82,11 @@ export const transformOptions = (params: Adaptor) => { children.forEach((child) => { /** + * 提前先 child 创造一个 config 防止 rest 被污染 和 child 数据缺失 * @description 外层配置应用到所有 children */ - transformConfig(deepAssign(child, rest, child)); + const config = deepAssign({}, rest, child); + transformConfig(deepAssign(child, config)); }); /** From 2d4b36374e3748cc079f27084c8e3c27da3afa14 Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Tue, 19 Sep 2023 09:22:01 +0800 Subject: [PATCH 070/268] chore: release alpha.2 --- packages/plots/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plots/package.json b/packages/plots/package.json index 2bca9eb57..6ade50d85 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.0-alpha.1", + "version": "2.0.0-alpha.2", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From e69fc902e3e62e5e8b6ec424da5493165f6d9d95 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Tue, 19 Sep 2023 17:18:09 +0800 Subject: [PATCH 071/268] =?UTF-8?q?fix(base):=20=E4=BF=AE=E5=A4=8D=20?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E7=A9=BF=E9=80=8F=20base=20=E4=B8=8D?= =?UTF-8?q?=E9=9C=80=E8=A6=81=20adaptor=20=E7=9A=84=E9=97=AE=E9=A2=98=20(#?= =?UTF-8?q?2124)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plots/src/core/base/index.ts | 10 ++++++---- site/examples/statistics/base/demo/circle.js | 1 + site/examples/statistics/base/demo/facet-rect.js | 1 + site/examples/statistics/base/demo/matrix-col.js | 1 + site/examples/statistics/base/demo/matrix.js | 1 + site/examples/statistics/base/demo/space-flex.js | 1 + 6 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index ed1685f9a..dfd6dd662 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -51,7 +51,7 @@ export abstract class Plot extends EE { * G2 options(Spec) 配置 */ private getSpecOptions() { - if(this.type === 'base') return this.options; + if (this.type === 'base') return { ...this.options, ...this.getChartOptions() }; return deleteCustomKeys(omit(this.options, CHART_OPTIONS), true); } @@ -87,14 +87,16 @@ export abstract class Plot extends EE { /** * 获取默认的 options 配置项,每个组件都可以复写 */ - protected getDefaultOptions(): Partial | void {} + protected getDefaultOptions(): Partial | void { } /** * 绘制 */ public render(): void { - // 执行 adaptor - this.execAdaptor(); + // 执行 adaptor , base 穿透类型不必 adaptor. + if (this.type !== 'base') { + this.execAdaptor(); + } // options 转换 this.chart.options(this.getSpecOptions()); diff --git a/site/examples/statistics/base/demo/circle.js b/site/examples/statistics/base/demo/circle.js index 386340097..96107016b 100644 --- a/site/examples/statistics/base/demo/circle.js +++ b/site/examples/statistics/base/demo/circle.js @@ -7,6 +7,7 @@ const Demobase = () => { type: "facetCircle", width: 480, height: 480, + autoFit: false, data: [ { month: "Jan.", name: "A", value: 0.6326436603187056 }, { month: "Jan.", name: "B", value: 0.9059036864077081 }, diff --git a/site/examples/statistics/base/demo/facet-rect.js b/site/examples/statistics/base/demo/facet-rect.js index 6fb7b3dee..2cddd4e79 100644 --- a/site/examples/statistics/base/demo/facet-rect.js +++ b/site/examples/statistics/base/demo/facet-rect.js @@ -6,6 +6,7 @@ const Demobase = () => { const config = { type: "facetRect", height: 640, + autoFit: false, paddingLeft: 60, paddingBottom: 60, data: { diff --git a/site/examples/statistics/base/demo/matrix-col.js b/site/examples/statistics/base/demo/matrix-col.js index b4c1024b0..34eaecebc 100644 --- a/site/examples/statistics/base/demo/matrix-col.js +++ b/site/examples/statistics/base/demo/matrix-col.js @@ -7,6 +7,7 @@ const Demobase = () => { type: "repeatMatrix", width: 300, height: 720, + autoFit: false, paddingLeft: 60, paddingBottom: 60, data: { diff --git a/site/examples/statistics/base/demo/matrix.js b/site/examples/statistics/base/demo/matrix.js index f2f779fd6..3f9e3cdaa 100644 --- a/site/examples/statistics/base/demo/matrix.js +++ b/site/examples/statistics/base/demo/matrix.js @@ -8,6 +8,7 @@ const Demobase = () => { type: "repeatMatrix", width: 800, height: 800, + autoFit: false, paddingLeft: 70, paddingBottom: 70, data: { diff --git a/site/examples/statistics/base/demo/space-flex.js b/site/examples/statistics/base/demo/space-flex.js index 3d05e46b7..d4eea4cf9 100644 --- a/site/examples/statistics/base/demo/space-flex.js +++ b/site/examples/statistics/base/demo/space-flex.js @@ -6,6 +6,7 @@ const Demobase = () => { const config = { type: "spaceFlex", width: 900, + autoFit: false, ratio: [1, 2], direction: "col", data: { From db66835aa125e8f1be43221c30510a4e2473da15 Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Tue, 19 Sep 2023 19:24:46 +0800 Subject: [PATCH 072/268] chore: release alpha.3 --- packages/plots/package.json | 2 +- packages/plots/src/core/constants/index.ts | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/plots/package.json b/packages/plots/package.json index 6ade50d85..4ef35ea34 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 52a1334b7..22b0ffacd 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -1,7 +1,20 @@ import { isArray, isBoolean } from '../utils'; /** new Chart options */ -export const CHART_OPTIONS = ['width', 'height', 'renderer', 'autoFit', 'canvas', 'theme', 'inset', 'padding']; +export const CHART_OPTIONS = [ + 'width', + 'height', + 'renderer', + 'autoFit', + 'canvas', + 'theme', + 'inset', + 'padding', + 'paddingTop', + 'paddingRight', + 'paddingBottom', + 'paddingLeft', +]; /** 最终透传给 G2 Spec 的保留字 */ export const RESERVED_KEYS = ['data', 'type', 'children']; From 5f6220054a492748a7247582a701a742744d5b34 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Wed, 20 Sep 2023 18:01:05 +0800 Subject: [PATCH 073/268] =?UTF-8?q?fix(waterfall):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=80=91=E5=B8=83=E5=9B=BE=E5=9C=A8=20scrollbar=20=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E9=85=8D=E7=BD=AE=E5=90=8E=EF=BC=8C=20Link=20?= =?UTF-8?q?=E5=9C=A8=E5=89=8D=E7=9A=84=E9=97=AE=E9=A2=98=20(#2126)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(waterfall): 修复瀑布图在 scrollbar 重新配置后, Link 在前的问题 * fix(waterfall): 修复瀑布图在 scrollbar 重新配置后, Link 在前的问题 --- packages/plots/src/core/plots/waterfall/adaptor.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/plots/src/core/plots/waterfall/adaptor.ts b/packages/plots/src/core/plots/waterfall/adaptor.ts index 36041031e..365901d66 100644 --- a/packages/plots/src/core/plots/waterfall/adaptor.ts +++ b/packages/plots/src/core/plots/waterfall/adaptor.ts @@ -61,6 +61,8 @@ export function adaptor(params: Params) { type: 'link', xField: ['x1', 'x2'], yField: 'y1', + // 防止动画或 scrollbar 重绘时 link 层级高于 interval + zIndex: -1, data: linkData, style: { stroke: '#697474', From f2e47e5c9cf3bbbfe1d74a9ea7bb1356d3d857da Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Mon, 25 Sep 2023 17:23:06 +0800 Subject: [PATCH 074/268] feat(plots): add Liquid (#2128) --- packages/plots/src/components/index.ts | 3 ++ .../plots/src/components/liquid/index.tsx | 11 +++++ packages/plots/src/core/index.ts | 5 ++- .../plots/src/core/plots/liquid/adaptor.ts | 21 ++++++++++ packages/plots/src/core/plots/liquid/index.ts | 33 +++++++++++++++ packages/plots/src/core/plots/liquid/type.ts | 5 +++ .../liquid/demo/liquid-background.js | 15 +++++++ .../liquid/demo/liquid-custom-shape.js | 36 +++++++++++++++++ .../statistics/liquid/demo/liquid-pin.js | 19 +++++++++ .../examples/statistics/liquid/demo/liquid.js | 17 ++++++++ .../examples/statistics/liquid/demo/meta.json | 40 +++++++++++++++++++ site/examples/statistics/liquid/index.en.md | 4 ++ site/examples/statistics/liquid/index.zh.md | 4 ++ 13 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 packages/plots/src/components/liquid/index.tsx create mode 100644 packages/plots/src/core/plots/liquid/adaptor.ts create mode 100644 packages/plots/src/core/plots/liquid/index.ts create mode 100644 packages/plots/src/core/plots/liquid/type.ts create mode 100644 site/examples/statistics/liquid/demo/liquid-background.js create mode 100644 site/examples/statistics/liquid/demo/liquid-custom-shape.js create mode 100644 site/examples/statistics/liquid/demo/liquid-pin.js create mode 100644 site/examples/statistics/liquid/demo/liquid.js create mode 100644 site/examples/statistics/liquid/demo/meta.json create mode 100644 site/examples/statistics/liquid/index.en.md create mode 100644 site/examples/statistics/liquid/index.zh.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 812183641..95e9cf80a 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -15,6 +15,7 @@ import Heatmap from './heatmap'; import Box from './box'; import Bullet from './bullet'; import Gauge from './gauge'; +import Liquid from './liquid'; export type { AreaConfig } from './area'; export type { BarConfig } from './bar'; @@ -32,6 +33,7 @@ export type { HeatmapConfig } from './heatmap'; export type { BoxConfig } from './box'; export type { BulletConfig } from './bullet'; export type { GaugeConfig } from './gauge'; +export type { LiquidConfig } from './liquid'; export { Base, @@ -51,4 +53,5 @@ export { Box, Bullet, Gauge, + Liquid, }; diff --git a/packages/plots/src/components/liquid/index.tsx b/packages/plots/src/components/liquid/index.tsx new file mode 100644 index 000000000..137ae1683 --- /dev/null +++ b/packages/plots/src/components/liquid/index.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { BaseChart } from '../base'; + +import type { LiquidOptions } from '../../core'; +import type { CommonConfig } from '../../interface'; + +export type LiquidConfig = CommonConfig; + +const LiquidChart = (props: LiquidConfig) => ; + +export default LiquidChart; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 683e7fede..6835ac15e 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -18,6 +18,7 @@ export type { HeatmapOptions } from './plots/heatmap'; export type { BoxOptions } from './plots/box'; export type { BulletOptions } from './plots/bullet'; export type { GaugeOptions } from './plots/gauge'; +export type { LiquidOptions } from './plots/liquid'; export * from './types'; import { Base } from './plots/base'; @@ -40,6 +41,7 @@ import { Heatmap } from './plots/heatmap'; import { Box } from './plots/box'; import { Bullet } from './plots/bullet'; import { Gauge } from './plots/gauge'; +import { Liquid } from './plots/liquid'; export const Plots = { Base, @@ -61,5 +63,6 @@ export const Plots = { Heatmap, Box, Bullet, - Gauge + Gauge, + Liquid, }; diff --git a/packages/plots/src/core/plots/liquid/adaptor.ts b/packages/plots/src/core/plots/liquid/adaptor.ts new file mode 100644 index 000000000..567580243 --- /dev/null +++ b/packages/plots/src/core/plots/liquid/adaptor.ts @@ -0,0 +1,21 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { LiquidOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/liquid/index.ts b/packages/plots/src/core/plots/liquid/index.ts new file mode 100644 index 000000000..3d33958a3 --- /dev/null +++ b/packages/plots/src/core/plots/liquid/index.ts @@ -0,0 +1,33 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { LiquidOptions } from './type'; + +export type { LiquidOptions }; + +export class Liquid extends Plot { + /** 图表类型 */ + public type = 'Liquid'; + + /** + * 获取 水波图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { type: 'view', children: [{ type: 'liquid' }] }; + } + + /** + * 获取 水波图 默认配置 + */ + protected getDefaultOptions() { + return Liquid.getDefaultOptions(); + } + + /** + * 水波图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/liquid/type.ts b/packages/plots/src/core/plots/liquid/type.ts new file mode 100644 index 000000000..b36e4e10a --- /dev/null +++ b/packages/plots/src/core/plots/liquid/type.ts @@ -0,0 +1,5 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type LiquidOptions = Options & BaseOptions & { + data: number; +}; diff --git a/site/examples/statistics/liquid/demo/liquid-background.js b/site/examples/statistics/liquid/demo/liquid-background.js new file mode 100644 index 000000000..d8867a33d --- /dev/null +++ b/site/examples/statistics/liquid/demo/liquid-background.js @@ -0,0 +1,15 @@ +import { Liquid } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoLiquid = () => { + const config = { + data: .3, + style: { + backgroundFill: 'pink', + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/liquid/demo/liquid-custom-shape.js b/site/examples/statistics/liquid/demo/liquid-custom-shape.js new file mode 100644 index 000000000..2d149bc36 --- /dev/null +++ b/site/examples/statistics/liquid/demo/liquid-custom-shape.js @@ -0,0 +1,36 @@ +import { Liquid } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoLiquid = () => { + const config = { + data: .3, + style: { + shape: (x, y, r) => { + const path = []; + const w = r * 2; + + for (let i = 0; i < 5; i++) { + path.push([ + i === 0 ? 'M' : 'L', + (Math.cos(((18 + i * 72) * Math.PI) / 180) * w) / 2 + x, + (-Math.sin(((18 + i * 72) * Math.PI) / 180) * w) / 2 + y, + ]); + path.push([ + 'L', + (Math.cos(((54 + i * 72) * Math.PI) / 180) * w) / 4 + x, + (-Math.sin(((54 + i * 72) * Math.PI) / 180) * w) / 4 + y, + ]); + } + path.push(['Z']); + return path; + }, + outlineBorder: 4, + outlineDistance: 8, + waveLength: 128, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/liquid/demo/liquid-pin.js b/site/examples/statistics/liquid/demo/liquid-pin.js new file mode 100644 index 000000000..738a1697f --- /dev/null +++ b/site/examples/statistics/liquid/demo/liquid-pin.js @@ -0,0 +1,19 @@ +import { Liquid } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoLiquid = () => { + const config = { + data: .7, + style: { + shape: 'pin', + textFill: '#fff', + outlineBorder: 4, + outlineDistance: 8, + waveLength: 128, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/liquid/demo/liquid.js b/site/examples/statistics/liquid/demo/liquid.js new file mode 100644 index 000000000..4708bae7f --- /dev/null +++ b/site/examples/statistics/liquid/demo/liquid.js @@ -0,0 +1,17 @@ +import { Liquid } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoLiquid = () => { + const config = { + data: .3, + style: { + outlineBorder: 4, + outlineDistance: 8, + waveLength: 128, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/liquid/demo/meta.json b/site/examples/statistics/liquid/demo/meta.json new file mode 100644 index 000000000..112b31638 --- /dev/null +++ b/site/examples/statistics/liquid/demo/meta.json @@ -0,0 +1,40 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "liquid.js", + "title": { + "zh": "水波图", + "en": "Liquid Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*cHArRaizyBsAAAAAAAAAAAAADo2bAQ/original" + }, + { + "filename": "liquid-pin.js", + "title": { + "zh": "水滴形状水波图", + "en": "Pin Liquid Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*G5TyT4PNLK0AAAAAAAAAAAAADo2bAQ/original" + }, + { + "filename": "liquid-background.js", + "title": { + "zh": "带背景的水波图", + "en": "Background Liquid Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*QgkTSq1OdvoAAAAAAAAAAAAADo2bAQ/original" + }, + { + "filename": "liquid-custom-shape.js", + "title": { + "zh": "自定义形状水波图", + "en": "Custom Shape Liquid Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_za7we3/afts/img/A*LYOpQLfrlqMAAAAAAAAAAAAADo2bAQ/original" + } + ] +} diff --git a/site/examples/statistics/liquid/index.en.md b/site/examples/statistics/liquid/index.en.md new file mode 100644 index 000000000..fea08a230 --- /dev/null +++ b/site/examples/statistics/liquid/index.en.md @@ -0,0 +1,4 @@ +--- +title: Liquid +order: 13 +--- diff --git a/site/examples/statistics/liquid/index.zh.md b/site/examples/statistics/liquid/index.zh.md new file mode 100644 index 000000000..74f6d8d64 --- /dev/null +++ b/site/examples/statistics/liquid/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 水波图 +order: 13 +--- From fec3f3f148a1f826167b7dba8e98414e0f64ca66 Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Mon, 25 Sep 2023 17:33:17 +0800 Subject: [PATCH 075/268] chore: release 2.0.0-beta.0 --- packages/charts/package.json | 2 +- packages/charts/src/index.ts | 2 +- packages/plots/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/charts/package.json b/packages/charts/package.json index 167547781..87beb3f62 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@ant-design/charts", - "version": "2.0.0-alpha.0", + "version": "2.0.0-beta.0", "description": "AntV upper level visual component library", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/charts/src/index.ts b/packages/charts/src/index.ts index 49a0ba5a1..ea5519eaa 100644 --- a/packages/charts/src/index.ts +++ b/packages/charts/src/index.ts @@ -1,3 +1,3 @@ export * from '@ant-design/plots'; -export const version = '2.0.0-alpha.0'; +export const version = '2.0.0-beta.0'; diff --git a/packages/plots/package.json b/packages/plots/package.json index 4ef35ea34..94f733cc9 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.0-alpha.3", + "version": "2.0.0-beta.0", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From 6a4fe246e7725fc3870391bd2892bed56cb2ed2a Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Thu, 28 Sep 2023 12:44:53 +0800 Subject: [PATCH 076/268] feat(plots): add treemap (#2132) --- packages/plots/src/components/index.ts | 3 ++ .../plots/src/components/treemap/index.tsx | 10 ++++ packages/plots/src/core/constants/index.ts | 1 + packages/plots/src/core/index.ts | 3 ++ .../plots/src/core/plots/heatmap/index.ts | 2 +- .../plots/src/core/plots/treemap/adaptor.ts | 22 ++++++++ .../plots/src/core/plots/treemap/index.ts | 41 ++++++++++++++ packages/plots/src/core/plots/treemap/type.ts | 3 ++ .../statistics/treemap/demo/meta.json | 16 ++++++ .../statistics/treemap/demo/treemap.js | 53 +++++++++++++++++++ site/examples/statistics/treemap/index.en.md | 4 ++ site/examples/statistics/treemap/index.zh.md | 4 ++ 12 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 packages/plots/src/components/treemap/index.tsx create mode 100644 packages/plots/src/core/plots/treemap/adaptor.ts create mode 100644 packages/plots/src/core/plots/treemap/index.ts create mode 100644 packages/plots/src/core/plots/treemap/type.ts create mode 100644 site/examples/statistics/treemap/demo/meta.json create mode 100644 site/examples/statistics/treemap/demo/treemap.js create mode 100644 site/examples/statistics/treemap/index.en.md create mode 100644 site/examples/statistics/treemap/index.zh.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 95e9cf80a..406b93c1b 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -16,6 +16,7 @@ import Box from './box'; import Bullet from './bullet'; import Gauge from './gauge'; import Liquid from './liquid'; +import Treemap from './treemap'; export type { AreaConfig } from './area'; export type { BarConfig } from './bar'; @@ -34,6 +35,7 @@ export type { BoxConfig } from './box'; export type { BulletConfig } from './bullet'; export type { GaugeConfig } from './gauge'; export type { LiquidConfig } from './liquid'; +export type { TreemapConfig } from './treemap'; export { Base, @@ -54,4 +56,5 @@ export { Bullet, Gauge, Liquid, + Treemap, }; diff --git a/packages/plots/src/components/treemap/index.tsx b/packages/plots/src/components/treemap/index.tsx new file mode 100644 index 000000000..7201cd251 --- /dev/null +++ b/packages/plots/src/components/treemap/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { TreemapOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type TreemapConfig = CommonConfig; + +const TreemapChart = (props: TreemapConfig) => ; + +export default TreemapChart; diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 22b0ffacd..8ebc99406 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -51,6 +51,7 @@ export const TRANSFORM_OPTION_KEY = { shapeField: 'shape', seriesField: 'series', positionField: 'position', + valueField: 'value', binField: 'x', }, transform: { diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 6835ac15e..0533f4628 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -19,6 +19,7 @@ export type { BoxOptions } from './plots/box'; export type { BulletOptions } from './plots/bullet'; export type { GaugeOptions } from './plots/gauge'; export type { LiquidOptions } from './plots/liquid'; +export type { TreemapOptions } from './plots/treemap'; export * from './types'; import { Base } from './plots/base'; @@ -42,6 +43,7 @@ import { Box } from './plots/box'; import { Bullet } from './plots/bullet'; import { Gauge } from './plots/gauge'; import { Liquid } from './plots/liquid'; +import { Treemap } from './plots/treemap'; export const Plots = { Base, @@ -65,4 +67,5 @@ export const Plots = { Bullet, Gauge, Liquid, + Treemap, }; diff --git a/packages/plots/src/core/plots/heatmap/index.ts b/packages/plots/src/core/plots/heatmap/index.ts index ffd4842d7..a3d24e73d 100644 --- a/packages/plots/src/core/plots/heatmap/index.ts +++ b/packages/plots/src/core/plots/heatmap/index.ts @@ -7,7 +7,7 @@ export type { HeatmapOptions }; export class Heatmap extends Plot { /** 图表类型 */ - public type = 'waterfall'; + public type = 'heatmap'; /** * 获取 折线图 默认配置项 diff --git a/packages/plots/src/core/plots/treemap/adaptor.ts b/packages/plots/src/core/plots/treemap/adaptor.ts new file mode 100644 index 000000000..32ab05bc7 --- /dev/null +++ b/packages/plots/src/core/plots/treemap/adaptor.ts @@ -0,0 +1,22 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; + +import type { Adaptor } from '../../types'; +import type { TreemapOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/treemap/index.ts b/packages/plots/src/core/plots/treemap/index.ts new file mode 100644 index 000000000..c7c201d06 --- /dev/null +++ b/packages/plots/src/core/plots/treemap/index.ts @@ -0,0 +1,41 @@ +import { Plot } from '../../base'; +import { adaptor } from './adaptor'; + +import type { TreemapOptions } from './type'; +import type { Adaptor } from '../../types'; + +export type { TreemapOptions }; + +export class Treemap extends Plot { + /** 图表类型 */ + public type = 'treemap'; + + /** + * 获取 折线图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + children: [ + { + type: 'treemap', + }, + ], + }; + } + + /** + * 获取 折线图 默认配置 + */ + protected getDefaultOptions() { + return Treemap.getDefaultOptions(); + } + + /** + * 折线图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/treemap/type.ts b/packages/plots/src/core/plots/treemap/type.ts new file mode 100644 index 000000000..ffde7429f --- /dev/null +++ b/packages/plots/src/core/plots/treemap/type.ts @@ -0,0 +1,3 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type TreemapOptions = Options & BaseOptions; diff --git a/site/examples/statistics/treemap/demo/meta.json b/site/examples/statistics/treemap/demo/meta.json new file mode 100644 index 000000000..dea3d81db --- /dev/null +++ b/site/examples/statistics/treemap/demo/meta.json @@ -0,0 +1,16 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "treemap.js", + "title": { + "zh": "矩阵树图", + "en": "Treemap Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*BD2zQIr7D5MAAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/site/examples/statistics/treemap/demo/treemap.js b/site/examples/statistics/treemap/demo/treemap.js new file mode 100644 index 000000000..b7410f2f4 --- /dev/null +++ b/site/examples/statistics/treemap/demo/treemap.js @@ -0,0 +1,53 @@ +import { Treemap } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoTreemap = () => { + const config = { + width: 1100, + height: 900, + autoFit: false, + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/flare-treemap.json", + }, + valueField: 'size', + colorField: (d) => d.parent.data.name.split(".")[1], + layout: { + // + path: (d) => d.name.replace(/\./g, "/"), + // treemapBinary、treemapDice、treemapSlice、treemapSliceDice、treemapSquarify、treemapResquarify + tile: "treemapBinary", + paddingInner: 1, + }, + meta: { + color: { + range: [ + "#4e79a7", + "#f28e2c", + "#e15759", + "#76b7b2", + "#59a14f", + "#edc949", + "#af7aa1", + "#ff9da7", + "#9c755f", + "#bab0ab", + ], + }, + }, + style: { + labelText: (d) => + d.data.name + .split(".") + .pop() + .split(/(?=[A-Z][a-z])/g)[0], + labelFill: "#000", + labelPosition: "top-left", + fillOpacity: 0.5, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/treemap/index.en.md b/site/examples/statistics/treemap/index.en.md new file mode 100644 index 000000000..2350dc982 --- /dev/null +++ b/site/examples/statistics/treemap/index.en.md @@ -0,0 +1,4 @@ +--- +title: Treemap +order: 12 +--- diff --git a/site/examples/statistics/treemap/index.zh.md b/site/examples/statistics/treemap/index.zh.md new file mode 100644 index 000000000..76764c386 --- /dev/null +++ b/site/examples/statistics/treemap/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 矩阵树图 +order: 12 +--- From 59d40f7d6d9246d165ceba42609e077b3fc9220f Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 16 Oct 2023 15:30:34 +0800 Subject: [PATCH 077/268] Update CONTRIBUTING.zh-CN.md --- CONTRIBUTING.zh-CN.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md index e14d66b89..18a8a5272 100644 --- a/CONTRIBUTING.zh-CN.md +++ b/CONTRIBUTING.zh-CN.md @@ -17,7 +17,7 @@ $ pnpm i # 先创建开发分支开发,分支名应该有含义,避免使用 update、tmp 之类的 $ git checkout -b branch-name # 启动本地官网 -$ pnpm start +$ pnpm build:lib & pnpm start # 监听要改动的包,eg plots $ cd ./packages/plots $ pnpm start @@ -149,4 +149,4 @@ Ant Design Charts 基于 [semver](http://semver.org/lang/zh-CN/) 语义化版本 - 避免提交重复的 issue,在提交之前搜索现有的 issue。 - 在标签、标题或内容中体现明确的意图。 -随后 AntV 负责人会确认 issue 意图,更新合适的标签,关联 milestone,指派开发者。 \ No newline at end of file +随后 AntV 负责人会确认 issue 意图,更新合适的标签,关联 milestone,指派开发者。 From 601752dd5243224107a1c145baccef91691e8922 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Mon, 16 Oct 2023 21:04:06 +0800 Subject: [PATCH 078/268] feat(plots): add WorlCloud (#2133) * feat(plots): add WorlCloud * feat(plots): add WorlCloud --------- Co-authored-by: Joel Alan <31396322+lxfu1@users.noreply.github.com> --- packages/plots/src/components/index.ts | 3 ++ .../plots/src/components/wordCloud/index.tsx | 11 ++++++ packages/plots/src/core/constants/index.ts | 1 + packages/plots/src/core/index.ts | 3 ++ packages/plots/src/core/plots/liquid/index.ts | 5 +-- .../plots/src/core/plots/wordCloud/adaptor.ts | 22 ++++++++++++ .../plots/src/core/plots/wordCloud/index.ts | 34 +++++++++++++++++++ .../plots/src/core/plots/wordCloud/type.ts | 3 ++ .../statistics/wordCloud/demo/meta.json | 24 +++++++++++++ .../wordCloud/demo/wordCloud-image.js | 27 +++++++++++++++ .../statistics/wordCloud/demo/wordCloud.js | 18 ++++++++++ .../examples/statistics/wordCloud/index.en.md | 4 +++ .../examples/statistics/wordCloud/index.zh.md | 4 +++ 13 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 packages/plots/src/components/wordCloud/index.tsx create mode 100644 packages/plots/src/core/plots/wordCloud/adaptor.ts create mode 100644 packages/plots/src/core/plots/wordCloud/index.ts create mode 100644 packages/plots/src/core/plots/wordCloud/type.ts create mode 100644 site/examples/statistics/wordCloud/demo/meta.json create mode 100644 site/examples/statistics/wordCloud/demo/wordCloud-image.js create mode 100644 site/examples/statistics/wordCloud/demo/wordCloud.js create mode 100644 site/examples/statistics/wordCloud/index.en.md create mode 100644 site/examples/statistics/wordCloud/index.zh.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 406b93c1b..27e8918ac 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -16,6 +16,7 @@ import Box from './box'; import Bullet from './bullet'; import Gauge from './gauge'; import Liquid from './liquid'; +import WordCloud from './wordCloud'; import Treemap from './treemap'; export type { AreaConfig } from './area'; @@ -35,6 +36,7 @@ export type { BoxConfig } from './box'; export type { BulletConfig } from './bullet'; export type { GaugeConfig } from './gauge'; export type { LiquidConfig } from './liquid'; +export type { WordCloudConfig } from './wordCloud'; export type { TreemapConfig } from './treemap'; export { @@ -56,5 +58,6 @@ export { Bullet, Gauge, Liquid, + WordCloud, Treemap, }; diff --git a/packages/plots/src/components/wordCloud/index.tsx b/packages/plots/src/components/wordCloud/index.tsx new file mode 100644 index 000000000..cb7c89306 --- /dev/null +++ b/packages/plots/src/components/wordCloud/index.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { BaseChart } from '../base'; + +import type { WordCloudOptions } from '../../core'; +import type { CommonConfig } from '../../interface'; + +export type WordCloudConfig = CommonConfig; + +const WordCloudChart = (props: WordCloudConfig) => ; + +export default WordCloudChart; diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 8ebc99406..2311a01e3 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -51,6 +51,7 @@ export const TRANSFORM_OPTION_KEY = { shapeField: 'shape', seriesField: 'series', positionField: 'position', + textField: 'text', valueField: 'value', binField: 'x', }, diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 0533f4628..4b8593cd6 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -19,6 +19,7 @@ export type { BoxOptions } from './plots/box'; export type { BulletOptions } from './plots/bullet'; export type { GaugeOptions } from './plots/gauge'; export type { LiquidOptions } from './plots/liquid'; +export type { WordCloudOptions } from './plots/wordCloud'; export type { TreemapOptions } from './plots/treemap'; export * from './types'; @@ -43,6 +44,7 @@ import { Box } from './plots/box'; import { Bullet } from './plots/bullet'; import { Gauge } from './plots/gauge'; import { Liquid } from './plots/liquid'; +import { WordCloud } from './plots/wordCloud'; import { Treemap } from './plots/treemap'; export const Plots = { @@ -67,5 +69,6 @@ export const Plots = { Bullet, Gauge, Liquid, + WordCloud, Treemap, }; diff --git a/packages/plots/src/core/plots/liquid/index.ts b/packages/plots/src/core/plots/liquid/index.ts index 3d33958a3..1fd421a63 100644 --- a/packages/plots/src/core/plots/liquid/index.ts +++ b/packages/plots/src/core/plots/liquid/index.ts @@ -1,7 +1,8 @@ import { Plot } from '../../base'; -import type { Adaptor } from '../../types'; import { adaptor } from './adaptor'; -import { LiquidOptions } from './type'; + +import type { Adaptor } from '../../types'; +import type { LiquidOptions } from './type'; export type { LiquidOptions }; diff --git a/packages/plots/src/core/plots/wordCloud/adaptor.ts b/packages/plots/src/core/plots/wordCloud/adaptor.ts new file mode 100644 index 000000000..30097e1c7 --- /dev/null +++ b/packages/plots/src/core/plots/wordCloud/adaptor.ts @@ -0,0 +1,22 @@ +import { flow, transformOptions } from '../../utils'; +import { mark } from '../../components'; + +import type { Adaptor } from '../../types'; +import type { WordCloudOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/wordCloud/index.ts b/packages/plots/src/core/plots/wordCloud/index.ts new file mode 100644 index 000000000..40b1696ad --- /dev/null +++ b/packages/plots/src/core/plots/wordCloud/index.ts @@ -0,0 +1,34 @@ +import { Plot } from '../../base'; +import { adaptor } from './adaptor'; + +import type { WordCloudOptions } from './type'; +import type { Adaptor } from '../../types'; + +export type { WordCloudOptions }; + +export class WordCloud extends Plot { + /** 图表类型 */ + public type = 'WordCloud'; + + /** + * 获取 词云图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { type: 'view', children: [{ type: 'wordCloud' }] }; + } + + /** + * 获取 词云图 默认配置 + */ + protected getDefaultOptions() { + return WordCloud.getDefaultOptions(); + } + + /** + * 词云图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/wordCloud/type.ts b/packages/plots/src/core/plots/wordCloud/type.ts new file mode 100644 index 000000000..f40612865 --- /dev/null +++ b/packages/plots/src/core/plots/wordCloud/type.ts @@ -0,0 +1,3 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type WordCloudOptions = Options & BaseOptions; diff --git a/site/examples/statistics/wordCloud/demo/meta.json b/site/examples/statistics/wordCloud/demo/meta.json new file mode 100644 index 000000000..8fc982c00 --- /dev/null +++ b/site/examples/statistics/wordCloud/demo/meta.json @@ -0,0 +1,24 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "wordCloud.js", + "title": { + "zh": "词云图", + "en": "WordCloud Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*2uvpTI0lHiYAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "wordCloud-image.js", + "title": { + "zh": "带图片遮罩的词云图", + "en": "WordCloud with image mask" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*zDm0SJEQSHwAAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/site/examples/statistics/wordCloud/demo/wordCloud-image.js b/site/examples/statistics/wordCloud/demo/wordCloud-image.js new file mode 100644 index 000000000..b210ffeec --- /dev/null +++ b/site/examples/statistics/wordCloud/demo/wordCloud-image.js @@ -0,0 +1,27 @@ +import { WordCloud } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoWordCloud = () => { + const config = { + width: 1000, + height: 400, + autoFit: false, + data: { + type: "fetch", + value: + "https://gw.alipayobjects.com/os/antvdemo/assets/data/antv-keywords.json", + }, + layout: { + imageMask: + "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*LKU4TYEiB-4AAAAAAAAAAAAADmJ7AQ/original", + fontSize: 10, + }, + colorField: 'name', + textField: 'name', + legend: false, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/wordCloud/demo/wordCloud.js b/site/examples/statistics/wordCloud/demo/wordCloud.js new file mode 100644 index 000000000..702e7f109 --- /dev/null +++ b/site/examples/statistics/wordCloud/demo/wordCloud.js @@ -0,0 +1,18 @@ +import { WordCloud } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoWordCloud = () => { + const config = { + paddingTop: 40, + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/philosophy-word.json", + }, + layout: { spiral: "rectangular" }, + colorField: 'text', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/wordCloud/index.en.md b/site/examples/statistics/wordCloud/index.en.md new file mode 100644 index 000000000..f069a50f6 --- /dev/null +++ b/site/examples/statistics/wordCloud/index.en.md @@ -0,0 +1,4 @@ +--- +title: WordCloud +order: 13 +--- diff --git a/site/examples/statistics/wordCloud/index.zh.md b/site/examples/statistics/wordCloud/index.zh.md new file mode 100644 index 000000000..3d29d42d2 --- /dev/null +++ b/site/examples/statistics/wordCloud/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 词云图 +order: 13 +--- From 895f6ff6e0e20fb9f3280a307118d2318bee57db Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 17 Oct 2023 09:56:54 +0800 Subject: [PATCH 079/268] Update CONTRIBUTING.zh-CN.md --- CONTRIBUTING.zh-CN.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md index 18a8a5272..c997ea148 100644 --- a/CONTRIBUTING.zh-CN.md +++ b/CONTRIBUTING.zh-CN.md @@ -44,8 +44,9 @@ $ git push origin branch-name ```ts - packages - - rc-utils + - charts - plots + - util ``` ### 代码风格 From 3ac0a6f3e58a9820e02fa0a336b1abd375b10e29 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 18 Oct 2023 11:31:08 +0800 Subject: [PATCH 080/268] feat: add tiny ring (#2142) --- .../tiny/{tiny-area => area}/index.tsx | 0 .../tiny/{tiny-column => column}/index.tsx | 0 packages/plots/src/components/tiny/index.ts | 22 ++++---- .../tiny/{tiny-line => line}/index.tsx | 0 .../{tiny-progress => progress}/index.tsx | 0 .../plots/src/components/tiny/ring/index.tsx | 10 ++++ packages/plots/src/core/base/index.ts | 2 +- packages/plots/src/core/constants/index.ts | 13 +++++ packages/plots/src/core/index.ts | 3 ++ packages/plots/src/core/plots/column/index.ts | 3 ++ packages/plots/src/core/plots/gauge/index.ts | 6 ++- packages/plots/src/core/plots/line/index.ts | 11 +++- .../plots/src/core/plots/liquid/adaptor.ts | 9 +++- packages/plots/src/core/plots/radar/index.ts | 6 +++ .../plots/src/core/plots/tiny-area/index.ts | 6 +++ .../plots/src/core/plots/tiny-column/index.ts | 3 ++ .../plots/src/core/plots/tiny-line/index.ts | 6 +++ .../src/core/plots/tiny-progress/index.ts | 6 ++- .../plots/src/core/plots/tiny-ring/adaptor.ts | 43 ++++++++++++++++ .../plots/src/core/plots/tiny-ring/index.ts | 51 +++++++++++++++++++ .../plots/src/core/plots/tiny-ring/type.ts | 20 ++++++++ .../plots/src/core/plots/wordCloud/index.ts | 2 +- .../liquid/demo/liquid-background.js | 2 +- .../liquid/demo/liquid-custom-shape.js | 4 +- .../statistics/liquid/demo/liquid-pin.js | 2 +- .../examples/statistics/liquid/demo/liquid.js | 2 +- site/examples/statistics/tiny/demo/meta.json | 8 +++ site/examples/statistics/tiny/demo/ring.js | 27 ++++++++++ 28 files changed, 246 insertions(+), 21 deletions(-) rename packages/plots/src/components/tiny/{tiny-area => area}/index.tsx (100%) rename packages/plots/src/components/tiny/{tiny-column => column}/index.tsx (100%) rename packages/plots/src/components/tiny/{tiny-line => line}/index.tsx (100%) rename packages/plots/src/components/tiny/{tiny-progress => progress}/index.tsx (100%) create mode 100644 packages/plots/src/components/tiny/ring/index.tsx create mode 100644 packages/plots/src/core/plots/tiny-ring/adaptor.ts create mode 100644 packages/plots/src/core/plots/tiny-ring/index.ts create mode 100644 packages/plots/src/core/plots/tiny-ring/type.ts create mode 100644 site/examples/statistics/tiny/demo/ring.js diff --git a/packages/plots/src/components/tiny/tiny-area/index.tsx b/packages/plots/src/components/tiny/area/index.tsx similarity index 100% rename from packages/plots/src/components/tiny/tiny-area/index.tsx rename to packages/plots/src/components/tiny/area/index.tsx diff --git a/packages/plots/src/components/tiny/tiny-column/index.tsx b/packages/plots/src/components/tiny/column/index.tsx similarity index 100% rename from packages/plots/src/components/tiny/tiny-column/index.tsx rename to packages/plots/src/components/tiny/column/index.tsx diff --git a/packages/plots/src/components/tiny/index.ts b/packages/plots/src/components/tiny/index.ts index 946fd4d47..083c0962f 100644 --- a/packages/plots/src/components/tiny/index.ts +++ b/packages/plots/src/components/tiny/index.ts @@ -1,13 +1,15 @@ -import Line from './tiny-line'; -import Area from './tiny-area'; -import Column from './tiny-column'; -import Progress from './tiny-progress'; +import Line from './line'; +import Area from './area'; +import Column from './column'; +import Progress from './progress'; +import Ring from './ring'; -export type { TinyLineConfig } from './tiny-line'; -export type { TinyAreaConfig } from './tiny-area'; -export type { TinyColumnConfig } from './tiny-column'; -export type { TinyProgressConfig } from './tiny-progress'; +export type { TinyLineConfig } from './line'; +export type { TinyAreaConfig } from './area'; +export type { TinyColumnConfig } from './column'; +export type { TinyProgressConfig } from './progress'; +export type { TinyRingConfig } from './ring'; -type TinyOptions = Record; +type TinyOptions = Record; -export const Tiny: TinyOptions = { Line, Area, Column, Progress }; +export const Tiny: TinyOptions = { Line, Area, Column, Progress, Ring }; diff --git a/packages/plots/src/components/tiny/tiny-line/index.tsx b/packages/plots/src/components/tiny/line/index.tsx similarity index 100% rename from packages/plots/src/components/tiny/tiny-line/index.tsx rename to packages/plots/src/components/tiny/line/index.tsx diff --git a/packages/plots/src/components/tiny/tiny-progress/index.tsx b/packages/plots/src/components/tiny/progress/index.tsx similarity index 100% rename from packages/plots/src/components/tiny/tiny-progress/index.tsx rename to packages/plots/src/components/tiny/progress/index.tsx diff --git a/packages/plots/src/components/tiny/ring/index.tsx b/packages/plots/src/components/tiny/ring/index.tsx new file mode 100644 index 000000000..c716bd5e3 --- /dev/null +++ b/packages/plots/src/components/tiny/ring/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { TinyRingOptions } from '../../../core'; +import { CommonConfig } from '../../../interface'; +import { BaseChart } from '../../base'; + +export type TinyRingConfig = CommonConfig; + +const TinyRingChart = (props: TinyRingOptions) => ; + +export default TinyRingChart; diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index dfd6dd662..8a0e7a66c 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -87,7 +87,7 @@ export abstract class Plot extends EE { /** * 获取默认的 options 配置项,每个组件都可以复写 */ - protected getDefaultOptions(): Partial | void { } + protected getDefaultOptions(): Partial | void {} /** * 绘制 diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 2311a01e3..d4ad5953c 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -9,11 +9,22 @@ export const CHART_OPTIONS = [ 'canvas', 'theme', 'inset', + 'insetLeft', + 'insetRight', + 'insetTop', + 'insetBottom', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', + 'margin', + 'marginTop', + 'marginRight', + 'marginBottom', + 'marginLeft', + 'depth', + 'title', ]; /** 最终透传给 G2 Spec 的保留字 */ @@ -162,6 +173,8 @@ const EXTEND_KEYS = [ 'keyField', 'positionField', 'meta', + 'tooltip', + 'animate', ]; export const CONFIG_SHAPE = [ { diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 4b8593cd6..22dd1b3a9 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -11,6 +11,7 @@ export type { TinyLineOptions } from './plots/tiny-line'; export type { TinyAreaOptions } from './plots/tiny-area'; export type { TinyColumnOptions } from './plots/tiny-column'; export type { TinyProgressOptions } from './plots/tiny-progress'; +export type { TinyRingOptions } from './plots/tiny-ring'; export type { RoseOptions } from './plots/rose'; export type { WaterfallOptions } from './plots/waterfall'; export type { HistogramOptions } from './plots/histogram'; @@ -36,6 +37,7 @@ import { TinyLine } from './plots/tiny-line'; import { TinyArea } from './plots/tiny-area'; import { TinyColumn } from './plots/tiny-column'; import { TinyProgress } from './plots/tiny-progress'; +import { TinyRing } from './plots/tiny-ring'; import { Rose } from './plots/rose'; import { Waterfall } from './plots/waterfall'; import { Histogram } from './plots/histogram'; @@ -62,6 +64,7 @@ export const Plots = { TinyArea, TinyColumn, TinyProgress, + TinyRing, Waterfall, Histogram, Heatmap, diff --git a/packages/plots/src/core/plots/column/index.ts b/packages/plots/src/core/plots/column/index.ts index f5374b26d..20ddd99cb 100644 --- a/packages/plots/src/core/plots/column/index.ts +++ b/packages/plots/src/core/plots/column/index.ts @@ -16,6 +16,9 @@ export class Column extends Plot { static getDefaultOptions(): Partial { return { type: 'view', + scale: { + y: { nice: true }, + }, children: [ { type: 'interval', diff --git a/packages/plots/src/core/plots/gauge/index.ts b/packages/plots/src/core/plots/gauge/index.ts index ee263b61e..b7b7a4e49 100644 --- a/packages/plots/src/core/plots/gauge/index.ts +++ b/packages/plots/src/core/plots/gauge/index.ts @@ -14,7 +14,11 @@ export class Gauge extends Plot { * 供外部使用 */ static getDefaultOptions(): Partial { - return { type: 'view', children: [{ type: 'gauge' }] }; + return { + type: 'view', + legend: false, + children: [{ type: 'gauge' }], + }; } /** diff --git a/packages/plots/src/core/plots/line/index.ts b/packages/plots/src/core/plots/line/index.ts index 6f5b67e4a..112661e21 100644 --- a/packages/plots/src/core/plots/line/index.ts +++ b/packages/plots/src/core/plots/line/index.ts @@ -14,7 +14,16 @@ export class Line extends Plot { * 供外部使用 */ static getDefaultOptions(): Partial { - return { type: 'view', children: [{ type: 'line' }] }; + return { + type: 'view', + scale: { + y: { nice: true }, + }, + animate: { + enter: { type: 'growInX' }, + }, + children: [{ type: 'line' }], + }; } /** diff --git a/packages/plots/src/core/plots/liquid/adaptor.ts b/packages/plots/src/core/plots/liquid/adaptor.ts index 567580243..8997b9935 100644 --- a/packages/plots/src/core/plots/liquid/adaptor.ts +++ b/packages/plots/src/core/plots/liquid/adaptor.ts @@ -1,4 +1,4 @@ -import { flow, transformOptions } from '../../utils'; +import { flow, transformOptions, isNumber, set } from '../../utils'; import { mark } from '../../components'; import type { Adaptor } from '../../types'; import type { LiquidOptions } from './type'; @@ -14,6 +14,13 @@ export function adaptor(params: Params) { * 图表差异化处理 */ const init = (params: Params) => { + const { + options: { percent }, + } = params; + + if (isNumber(percent)) { + set(params, 'options.data', percent); + } return params; }; diff --git a/packages/plots/src/core/plots/radar/index.ts b/packages/plots/src/core/plots/radar/index.ts index 133ad645c..810e4b541 100644 --- a/packages/plots/src/core/plots/radar/index.ts +++ b/packages/plots/src/core/plots/radar/index.ts @@ -16,6 +16,12 @@ export class Radar extends Plot { */ static getDefaultOptions(): Partial { return { + axis: { + x: { grid: true, line: true }, + y: { zIndex: 1, title: false, line: true , nice: true}, + }, + meta: { x: { padding: 0.5, align: 0 } }, + interaction: { tooltip: { style: { crosshairsLineDash: [4, 4] } } }, children: [{ type: 'line' }], // 有 polar 和 radar 两种极坐标形式 coordinateType: 'polar', diff --git a/packages/plots/src/core/plots/tiny-area/index.ts b/packages/plots/src/core/plots/tiny-area/index.ts index f209d848d..9c96a036c 100644 --- a/packages/plots/src/core/plots/tiny-area/index.ts +++ b/packages/plots/src/core/plots/tiny-area/index.ts @@ -16,8 +16,14 @@ export class TinyArea extends Plot { static getDefaultOptions(): Partial { return { type: 'view', + animate: { + enter: { type: 'growInX', duration: 500 }, + }, children: [{ type: 'area', axis: false }], autoFit: false, + padding: 0, + margin: 0, + tooltip: false }; } diff --git a/packages/plots/src/core/plots/tiny-column/index.ts b/packages/plots/src/core/plots/tiny-column/index.ts index 6be444ed7..59d819672 100644 --- a/packages/plots/src/core/plots/tiny-column/index.ts +++ b/packages/plots/src/core/plots/tiny-column/index.ts @@ -18,6 +18,9 @@ export class TinyColumn extends Plot { type: 'view', children: [{ type: 'interval', axis: false }], autoFit: false, + padding: 0, + margin: 0, + tooltip: false, }; } diff --git a/packages/plots/src/core/plots/tiny-line/index.ts b/packages/plots/src/core/plots/tiny-line/index.ts index baee2af4f..f84f3a22b 100644 --- a/packages/plots/src/core/plots/tiny-line/index.ts +++ b/packages/plots/src/core/plots/tiny-line/index.ts @@ -18,6 +18,12 @@ export class TinyLine extends Plot { type: 'view', children: [{ type: 'line', axis: false }], autoFit: false, + animate: { + enter: { type: 'growInX', duration: 500 }, + }, + padding: 0, + margin: 0, + tooltip: false, }; } diff --git a/packages/plots/src/core/plots/tiny-progress/index.ts b/packages/plots/src/core/plots/tiny-progress/index.ts index 1daddace5..42bd89f00 100644 --- a/packages/plots/src/core/plots/tiny-progress/index.ts +++ b/packages/plots/src/core/plots/tiny-progress/index.ts @@ -17,6 +17,10 @@ export class TinyProgress extends Plot { return { type: 'view', data: [], + autoFit: false, + margin: 0, + padding: 0, + tooltip: false, children: [ { interaction: { tooltip: false }, @@ -25,7 +29,7 @@ export class TinyProgress extends Plot { axis: false, legend: false, encode: { y: (d) => d, color: (d, idx) => idx }, - } + }, ], }; } diff --git a/packages/plots/src/core/plots/tiny-ring/adaptor.ts b/packages/plots/src/core/plots/tiny-ring/adaptor.ts new file mode 100644 index 000000000..490db8c37 --- /dev/null +++ b/packages/plots/src/core/plots/tiny-ring/adaptor.ts @@ -0,0 +1,43 @@ +import { flow, transformOptions, set } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { TinyRingOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * @description radius + */ + const radius = (params: Params) => { + const { options } = params; + const { radius = 0.8 } = options; + set(params, 'options.coordinate.innerRadius', radius); + return params; + }; + + /** + * @description 数据转换 + */ + const transformData = (params: Params) => { + const { options } = params; + const { percent, color = [] } = options; + if (!percent) return params; + + const transformOption = { + scale: { + color: { range: color.length ? color : [] }, + }, + data: [1, percent], + }; + + Object.assign(options, { ...transformOption }); + return params; + }; + + return flow(radius, transformData, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/tiny-ring/index.ts b/packages/plots/src/core/plots/tiny-ring/index.ts new file mode 100644 index 000000000..9f19d4a52 --- /dev/null +++ b/packages/plots/src/core/plots/tiny-ring/index.ts @@ -0,0 +1,51 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { TinyRingOptions } from './type'; + +export type { TinyRingOptions }; + +export class TinyRing extends Plot { + /** 图表类型 */ + public type = 'TinyRing'; + + /** + * 获取进度图默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + data: [], + autoFit: false, + margin: 0, + padding: 0, + coordinate: { type: 'theta' }, + animate: { enter: { type: 'waveIn' } }, + interaction: { tooltip: false }, + tooltip: false, + children: [ + { + type: 'interval', + axis: false, + legend: false, + encode: { y: (d) => d, color: (d, idx) => idx }, + }, + ], + }; + } + + /** + * 获取 进度图 默认配置 + */ + protected getDefaultOptions() { + return TinyRing.getDefaultOptions(); + } + + /** + * 迷你折线图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/tiny-ring/type.ts b/packages/plots/src/core/plots/tiny-ring/type.ts new file mode 100644 index 000000000..29505e78a --- /dev/null +++ b/packages/plots/src/core/plots/tiny-ring/type.ts @@ -0,0 +1,20 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type TinyRingOptions = Options & + BaseOptions & { + /** + * @title 进度 + */ + percent: number; + /** + * @title 颜色 + * @description [ backgroundColor, progressColor] + */ + color?: [string, string]; + /** + * @title 内径 + * @description 0 ~ 1 + * @default 0.8 + */ + radius?: number; + }; diff --git a/packages/plots/src/core/plots/wordCloud/index.ts b/packages/plots/src/core/plots/wordCloud/index.ts index 40b1696ad..67c478fe0 100644 --- a/packages/plots/src/core/plots/wordCloud/index.ts +++ b/packages/plots/src/core/plots/wordCloud/index.ts @@ -15,7 +15,7 @@ export class WordCloud extends Plot { * 供外部使用 */ static getDefaultOptions(): Partial { - return { type: 'view', children: [{ type: 'wordCloud' }] }; + return { type: 'view', legend: false, children: [{ type: 'wordCloud' }] }; } /** diff --git a/site/examples/statistics/liquid/demo/liquid-background.js b/site/examples/statistics/liquid/demo/liquid-background.js index d8867a33d..1f2e4e89d 100644 --- a/site/examples/statistics/liquid/demo/liquid-background.js +++ b/site/examples/statistics/liquid/demo/liquid-background.js @@ -4,7 +4,7 @@ import ReactDOM from 'react-dom'; const DemoLiquid = () => { const config = { - data: .3, + percent: .3, style: { backgroundFill: 'pink', }, diff --git a/site/examples/statistics/liquid/demo/liquid-custom-shape.js b/site/examples/statistics/liquid/demo/liquid-custom-shape.js index 2d149bc36..814e99666 100644 --- a/site/examples/statistics/liquid/demo/liquid-custom-shape.js +++ b/site/examples/statistics/liquid/demo/liquid-custom-shape.js @@ -4,12 +4,12 @@ import ReactDOM from 'react-dom'; const DemoLiquid = () => { const config = { - data: .3, + percent: 0.3, style: { shape: (x, y, r) => { const path = []; const w = r * 2; - + for (let i = 0; i < 5; i++) { path.push([ i === 0 ? 'M' : 'L', diff --git a/site/examples/statistics/liquid/demo/liquid-pin.js b/site/examples/statistics/liquid/demo/liquid-pin.js index 738a1697f..084420ae3 100644 --- a/site/examples/statistics/liquid/demo/liquid-pin.js +++ b/site/examples/statistics/liquid/demo/liquid-pin.js @@ -4,7 +4,7 @@ import ReactDOM from 'react-dom'; const DemoLiquid = () => { const config = { - data: .7, + percent: 0.7, style: { shape: 'pin', textFill: '#fff', diff --git a/site/examples/statistics/liquid/demo/liquid.js b/site/examples/statistics/liquid/demo/liquid.js index 4708bae7f..bcf95bcc0 100644 --- a/site/examples/statistics/liquid/demo/liquid.js +++ b/site/examples/statistics/liquid/demo/liquid.js @@ -4,7 +4,7 @@ import ReactDOM from 'react-dom'; const DemoLiquid = () => { const config = { - data: .3, + percent: 0.3, style: { outlineBorder: 4, outlineDistance: 8, diff --git a/site/examples/statistics/tiny/demo/meta.json b/site/examples/statistics/tiny/demo/meta.json index d06fb3364..2462f529b 100644 --- a/site/examples/statistics/tiny/demo/meta.json +++ b/site/examples/statistics/tiny/demo/meta.json @@ -67,6 +67,14 @@ "en": "Tiny progress plot" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ZJ6JSL4WFt8AAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "ring.js", + "title": { + "zh": "迷你进度环图", + "en": "Basic tiny ring progress" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*NaLRSIdTx_YAAAAAAAAAAAAAARQnAQ" } ] } diff --git a/site/examples/statistics/tiny/demo/ring.js b/site/examples/statistics/tiny/demo/ring.js new file mode 100644 index 000000000..7a3a2da54 --- /dev/null +++ b/site/examples/statistics/tiny/demo/ring.js @@ -0,0 +1,27 @@ +import { Tiny } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoRing = () => { + const config = { + percent: 0.7, + color: ['#E8EFF5', '#66AFF4'], + annotations: [ + { + type: 'text', + style: { + text: `${progress * 100}%`, + x: '50%', + y: '50%', + textAlign: 'center', + fontSize: 16, + fontStyle: 'bold', + }, + }, + ], + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 02a7ec2123e80f1fb6636cf362f0cf78d49f3b0a Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Wed, 18 Oct 2023 20:44:50 +0800 Subject: [PATCH 081/268] docs: add basic sankey (#2116) Co-authored-by: lkd01632719 Co-authored-by: Joel Alan <31396322+lxfu1@users.noreply.github.com> --- packages/plots/src/components/index.ts | 3 ++ .../plots/src/components/sankey/index.tsx | 10 ++++ packages/plots/src/core/index.ts | 3 ++ .../plots/src/core/plots/sankey/adaptor.ts | 21 +++++++++ packages/plots/src/core/plots/sankey/index.ts | 33 +++++++++++++ packages/plots/src/core/plots/sankey/type.ts | 3 ++ site/examples/statistics/sankey/demo/basic.js | 46 +++++++++++++++++++ .../examples/statistics/sankey/demo/meta.json | 16 +++++++ site/examples/statistics/sankey/index.en.md | 4 ++ site/examples/statistics/sankey/index.zh.md | 6 +++ 10 files changed, 145 insertions(+) create mode 100644 packages/plots/src/components/sankey/index.tsx create mode 100644 packages/plots/src/core/plots/sankey/adaptor.ts create mode 100644 packages/plots/src/core/plots/sankey/index.ts create mode 100644 packages/plots/src/core/plots/sankey/type.ts create mode 100644 site/examples/statistics/sankey/demo/basic.js create mode 100644 site/examples/statistics/sankey/demo/meta.json create mode 100644 site/examples/statistics/sankey/index.en.md create mode 100644 site/examples/statistics/sankey/index.zh.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 27e8918ac..f84a25c37 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -13,6 +13,7 @@ import Waterfall from './waterfall'; import Histogram from './histogram'; import Heatmap from './heatmap'; import Box from './box'; +import Sankey from './sankey'; import Bullet from './bullet'; import Gauge from './gauge'; import Liquid from './liquid'; @@ -33,6 +34,7 @@ export type { WaterfallConfig } from './waterfall'; export type { HistogramConfig } from './histogram'; export type { HeatmapConfig } from './heatmap'; export type { BoxConfig } from './box'; +export type { SankeyConfig } from './sankey'; export type { BulletConfig } from './bullet'; export type { GaugeConfig } from './gauge'; export type { LiquidConfig } from './liquid'; @@ -55,6 +57,7 @@ export { Waterfall, Heatmap, Box, + Sankey, Bullet, Gauge, Liquid, diff --git a/packages/plots/src/components/sankey/index.tsx b/packages/plots/src/components/sankey/index.tsx new file mode 100644 index 000000000..c5febface --- /dev/null +++ b/packages/plots/src/components/sankey/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { SankeyOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type SankeyConfig = CommonConfig; + +const SankeyChart = (props: SankeyConfig) => ; + +export default SankeyChart; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 22dd1b3a9..75b99349f 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -17,6 +17,7 @@ export type { WaterfallOptions } from './plots/waterfall'; export type { HistogramOptions } from './plots/histogram'; export type { HeatmapOptions } from './plots/heatmap'; export type { BoxOptions } from './plots/box'; +export type { SankeyOptions } from './plots/sankey'; export type { BulletOptions } from './plots/bullet'; export type { GaugeOptions } from './plots/gauge'; export type { LiquidOptions } from './plots/liquid'; @@ -43,6 +44,7 @@ import { Waterfall } from './plots/waterfall'; import { Histogram } from './plots/histogram'; import { Heatmap } from './plots/heatmap'; import { Box } from './plots/box'; +import { Sankey } from './plots/sankey'; import { Bullet } from './plots/bullet'; import { Gauge } from './plots/gauge'; import { Liquid } from './plots/liquid'; @@ -69,6 +71,7 @@ export const Plots = { Histogram, Heatmap, Box, + Sankey, Bullet, Gauge, Liquid, diff --git a/packages/plots/src/core/plots/sankey/adaptor.ts b/packages/plots/src/core/plots/sankey/adaptor.ts new file mode 100644 index 000000000..fa25137dd --- /dev/null +++ b/packages/plots/src/core/plots/sankey/adaptor.ts @@ -0,0 +1,21 @@ +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import { flow, transformOptions } from '../../utils'; +import type { SankeyOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/sankey/index.ts b/packages/plots/src/core/plots/sankey/index.ts new file mode 100644 index 000000000..300b908e0 --- /dev/null +++ b/packages/plots/src/core/plots/sankey/index.ts @@ -0,0 +1,33 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { SankeyOptions } from './type'; + +export type { SankeyOptions }; + +export class Sankey extends Plot { + /** 图表类型 */ + public type = 'sankey'; + + /** + * 获取 双轴图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { type: 'view', children: [{ type: 'sankey' }] }; + } + + /** + * 获取 条形图 默认配置 + */ + protected getDefaultOptions() { + return Sankey.getDefaultOptions(); + } + + /** + * 条形图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/sankey/type.ts b/packages/plots/src/core/plots/sankey/type.ts new file mode 100644 index 000000000..4a1f2cb56 --- /dev/null +++ b/packages/plots/src/core/plots/sankey/type.ts @@ -0,0 +1,3 @@ +import type { Options, BaseOptions } from '../../types/common'; + +export type SankeyOptions = Options & BaseOptions; diff --git a/site/examples/statistics/sankey/demo/basic.js b/site/examples/statistics/sankey/demo/basic.js new file mode 100644 index 000000000..fc22f4dad --- /dev/null +++ b/site/examples/statistics/sankey/demo/basic.js @@ -0,0 +1,46 @@ +import { Sankey } from '@ant-design/plots' +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoSankey = () => { + const config = { + layout: { nodeAlign: "center", nodePadding: 0.03 }, + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/energy.json", + transform: [ + { + type: "custom", + callback: (data) => ({ + links: data, + }), + }, + ], + }, + scale: { + color: { + range: [ + "#4e79a7", + "#f28e2c", + "#e15759", + "#76b7b2", + "#59a14f", + "#edc949", + "#af7aa1", + "#ff9da7", + "#9c755f", + "#bab0ab", + ], + }, + }, + style: { + labelSpacing: 3, + labelFontWeight: "bold", + nodeStrokeWidth: 1.2, + linkFillOpacity: 0.4, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/sankey/demo/meta.json b/site/examples/statistics/sankey/demo/meta.json new file mode 100644 index 000000000..cf1ca51a7 --- /dev/null +++ b/site/examples/statistics/sankey/demo/meta.json @@ -0,0 +1,16 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "桑基图", + "en": "Sankey" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*dACBR7ANcfEAAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/site/examples/statistics/sankey/index.en.md b/site/examples/statistics/sankey/index.en.md new file mode 100644 index 000000000..e757ad045 --- /dev/null +++ b/site/examples/statistics/sankey/index.en.md @@ -0,0 +1,4 @@ +--- +title: Sankey +order: 20 +--- \ No newline at end of file diff --git a/site/examples/statistics/sankey/index.zh.md b/site/examples/statistics/sankey/index.zh.md new file mode 100644 index 000000000..b51710f20 --- /dev/null +++ b/site/examples/statistics/sankey/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 桑基图 +order: 20 +--- + + From 18523bc0cc9739a8f0d594bbfe79fd409ad870f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8A=98=E6=9C=A8?= <1076849402@qq.com> Date: Wed, 18 Oct 2023 21:00:34 +0800 Subject: [PATCH 082/268] WIP: add Funnel (#2129) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * WIP: add Funnel * feat: 添加静态变量、label定制、尖底漏斗图 * feat: compare, facet * feat: facet funnel、各种转置适配 * fix: 引入路径修复 --------- Co-authored-by: Joel Alan <31396322+lxfu1@users.noreply.github.com> --- .../plots/src/components/funnel/index.tsx | 11 + packages/plots/src/components/index.ts | 3 + packages/plots/src/core/base/index.ts | 7 +- packages/plots/src/core/constants/index.ts | 3 + packages/plots/src/core/index.ts | 3 + .../plots/src/core/plots/funnel/adaptor.ts | 193 ++++++++++++++ .../plots/src/core/plots/funnel/compare.ts | 249 ++++++++++++++++++ .../plots/src/core/plots/funnel/constant.ts | 14 + packages/plots/src/core/plots/funnel/facet.ts | 155 +++++++++++ packages/plots/src/core/plots/funnel/index.ts | 73 +++++ packages/plots/src/core/plots/funnel/type.ts | 59 +++++ packages/plots/src/core/utils/conversion.ts | 26 ++ packages/plots/src/core/utils/index.ts | 3 + .../statistics/funnel/demo/basic-transpose.js | 42 +++ site/examples/statistics/funnel/demo/basic.js | 23 ++ .../funnel/demo/compare-transpose.js | 76 ++++++ .../statistics/funnel/demo/compare.js | 75 ++++++ .../statistics/funnel/demo/facet-transpose.js | 69 +++++ site/examples/statistics/funnel/demo/facet.js | 68 +++++ .../examples/statistics/funnel/demo/meta.json | 72 +++++ .../statistics/funnel/demo/pyramid.js | 24 ++ .../statistics/funnel/demo/static-field.js | 36 +++ site/examples/statistics/funnel/index.en.md | 4 + site/examples/statistics/funnel/index.zh.md | 4 + 24 files changed, 1290 insertions(+), 2 deletions(-) create mode 100644 packages/plots/src/components/funnel/index.tsx create mode 100644 packages/plots/src/core/plots/funnel/adaptor.ts create mode 100644 packages/plots/src/core/plots/funnel/compare.ts create mode 100644 packages/plots/src/core/plots/funnel/constant.ts create mode 100644 packages/plots/src/core/plots/funnel/facet.ts create mode 100644 packages/plots/src/core/plots/funnel/index.ts create mode 100644 packages/plots/src/core/plots/funnel/type.ts create mode 100644 packages/plots/src/core/utils/conversion.ts create mode 100644 site/examples/statistics/funnel/demo/basic-transpose.js create mode 100644 site/examples/statistics/funnel/demo/basic.js create mode 100644 site/examples/statistics/funnel/demo/compare-transpose.js create mode 100644 site/examples/statistics/funnel/demo/compare.js create mode 100644 site/examples/statistics/funnel/demo/facet-transpose.js create mode 100644 site/examples/statistics/funnel/demo/facet.js create mode 100644 site/examples/statistics/funnel/demo/meta.json create mode 100644 site/examples/statistics/funnel/demo/pyramid.js create mode 100644 site/examples/statistics/funnel/demo/static-field.js create mode 100644 site/examples/statistics/funnel/index.en.md create mode 100644 site/examples/statistics/funnel/index.zh.md diff --git a/packages/plots/src/components/funnel/index.tsx b/packages/plots/src/components/funnel/index.tsx new file mode 100644 index 000000000..9ea2ad1c8 --- /dev/null +++ b/packages/plots/src/components/funnel/index.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { FunnelOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; +import { Funnel } from '../../core/plots/funnel'; + +export type FunnelConfig = CommonConfig; + +const FunnelChart = (props: FunnelConfig) => ; + +export default Object.assign(FunnelChart, Funnel.getFields()); diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index f84a25c37..d77cd6359 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -3,6 +3,7 @@ import Area from './area'; import Bar from './bar'; import Column from './column'; import DualAxes from './dual-axes'; +import Funnel from './funnel'; import Line from './line'; import Pie from './pie'; import Scatter from './scatter'; @@ -24,6 +25,7 @@ export type { AreaConfig } from './area'; export type { BarConfig } from './bar'; export type { ColumnConfig } from './column'; export type { DualAxesConfig } from './dual-axes'; +export type { FunnelConfig } from './funnel'; export type { LineConfig } from './line'; export type { PieConfig } from './pie'; export type { ScatterConfig } from './scatter'; @@ -49,6 +51,7 @@ export { Area, Bar, DualAxes, + Funnel, Scatter, Radar, Rose, diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 8a0e7a66c..f1536583d 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -1,7 +1,7 @@ import EE from '@antv/event-emitter'; import { Chart, ChartEvent } from '@antv/g2'; import { bind } from 'size-sensor'; -import { CHART_OPTIONS, ANNOTATION_LIST } from '../constants'; +import { CHART_OPTIONS, ANNOTATION_LIST, SKIP_DEL_CUSTOM_SIGN } from '../constants'; import { merge, omit, pick, deleteCustomKeys, deleteChartOptionKeys } from '../utils'; import { Annotaion } from '../annotation'; @@ -51,7 +51,10 @@ export abstract class Plot extends EE { * G2 options(Spec) 配置 */ private getSpecOptions() { - if (this.type === 'base') return { ...this.options, ...this.getChartOptions() }; + if (this.type === 'base' || this[SKIP_DEL_CUSTOM_SIGN]) { + return { ...this.options, ...this.getChartOptions() }; + } + return deleteCustomKeys(omit(this.options, CHART_OPTIONS), true); } diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index d4ad5953c..9471ee297 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -33,6 +33,9 @@ export const RESERVED_KEYS = ['data', 'type', 'children']; /** 特殊标识,用于标识改配置来自于转换逻辑,而非用户配置 */ export const TRANSFORM_SIGN = '__transform__'; +/** 特殊标识,用于跳过 删除已转换的配置项 */ +export const SKIP_DEL_CUSTOM_SIGN = '__skipDelCustomKeys__'; + /** * @title 字段转换逻辑 * @example diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 75b99349f..dff5581bd 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -3,6 +3,7 @@ export type { AreaOptions } from './plots/area'; export type { BarOptions } from './plots/bar'; export type { ColumnOptions } from './plots/column'; export type { DualAxesOptions } from './plots/dual-axes'; +export type { FunnelOptions } from './plots/funnel'; export type { LineOptions } from './plots/line'; export type { PieOptions } from './plots/pie'; export type { ScatterOptions } from './plots/scatter'; @@ -30,6 +31,7 @@ import { Area } from './plots/area'; import { Bar } from './plots/bar'; import { Column } from './plots/column'; import { DualAxes } from './plots/dual-axes'; +import { Funnel } from './plots/funnel'; import { Line } from './plots/line'; import { Pie } from './plots/pie'; import { Scatter } from './plots/scatter'; @@ -59,6 +61,7 @@ export const Plots = { Area, Bar, DualAxes, + Funnel, Scatter, Radar, Rose, diff --git a/packages/plots/src/core/plots/funnel/adaptor.ts b/packages/plots/src/core/plots/funnel/adaptor.ts new file mode 100644 index 000000000..f8b4116f7 --- /dev/null +++ b/packages/plots/src/core/plots/funnel/adaptor.ts @@ -0,0 +1,193 @@ +import type { Adaptor } from '../../types'; +import { + deepAssign, + flow, + map, + transformOptions, + maxBy, + get, + groupBy, + conversionTagFormatter, + isNumber, + omit, + isFunction, +} from '../../utils'; +import type { FunnelOptions } from './type'; +import { FUNNEL_CONVERSATION, FUNNEL_PERCENT, FUNNEL_MAPPING_VALUE, CUSTOM_COMVERSION_TAG_CONFIG } from './constant'; +import { Datum } from '../../../interface'; +import { compareFunnel } from './compare'; +import { facetFunnel } from './facet'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * @description 数据转换 + */ + const _transformData = (params: Params, extraMaxValue?: number, customData?: any[]) => { + const { yField, maxSize, minSize, data: originData } = params.options; + const maxYFieldValue = extraMaxValue ?? get(maxBy(originData, yField), [yField]); + const max = isNumber(maxSize) ? maxSize : 1; + const min = isNumber(minSize) ? minSize : 0; + + const curData = customData || originData; + return map(curData, (row, index) => { + const percent = row[yField] === 253 ? 1 : (row[yField] || 0) / maxYFieldValue; + row[FUNNEL_PERCENT] = percent; + row[FUNNEL_MAPPING_VALUE] = (max - min) * percent + min; + // 转化率数据存储前后数据 + row[FUNNEL_CONVERSATION] = [get(curData, [index - 1, yField]), row[yField]]; + return row; + }); + }; + + const transformData = (params: Params) => { + const { yField, data, compareField, seriesField } = params.options; + + if (compareField || seriesField) { + const maxCache = {}; + const groupByField = compareField || seriesField; + + const groups = groupBy(data, (d) => () => { + const curKey = d[groupByField]; + const curMax = maxCache[curKey] ?? Number.MIN_SAFE_INTEGER; + maxCache[curKey] = Math.max(curMax, d[yField]); + return curKey; + }); + + const formatData = Object.keys(groups).reduce((res, curKey) => { + return res.concat(_transformData(params, maxCache[curKey], groups[curKey])); + }, []); + + params.options.data = formatData; + } else { + params.options.data = _transformData(params); + } + + return params; + }; + + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + const { xField, yField, shape, isTransposed, compareField, seriesField, funnelStyle, label } = params.options; + + if (compareField) { + compareFunnel(params); + } else if (seriesField) { + facetFunnel(params); + } else { + const conversionTag = get(params.options, CUSTOM_COMVERSION_TAG_CONFIG); + + const basicLabel = [ + { + text: (d) => `${d[xField]} ${d[yField]}`, + position: 'inside', + fillOpacity: 1, + ...label, + }, + ]; + + const rateLabel = [ + // coversion 内容, + { + textAlign: 'left', + textBaseline: 'middle', + fill: '#aaa', + fillOpacity: 1, + connector: true, + ...conversionTag, + text: (...args: [d: Datum, index: number]) => + args[1] !== 0 + ? isFunction(conversionTag?.text) + ? `${conversionTag.text(...args)}` + : `Rate: ${conversionTagFormatter(...(args[0][FUNNEL_CONVERSATION] as [number, number]))}` + : '', + ...(!isTransposed + ? { + position: 'top-right', + dx: 20, + backgroundPadding: [0, 8], + } + : { + position: 'top-left', + dy: -20, + dx: 8, // 与connector 间隙 + backgroundPadding: [-8, 8], + }), + }, + ]; + + const labels = [...(label === false ? [] : basicLabel), ...(conversionTag === false ? [] : rateLabel)]; + + const basicFunnel = { + type: 'interval', + axis: false, + coordinate: !isTransposed + ? { + transform: [{ type: 'transpose' }], + } + : undefined, + scale: { + x: { + padding: 0, + }, + }, + style: funnelStyle, + encode: { + x: xField, + y: FUNNEL_MAPPING_VALUE, + color: xField, + shape: shape || 'funnel', + }, + animate: { enter: { type: 'fadeIn' } }, + tooltip: { + title: false, + items: [ + (d) => ({ + name: d[xField], + value: d[yField], + }), + ], + }, + // labels 对应 xField + labels, + }; + + params.options.children = map(params.options.children, (child) => { + return deepAssign(child, basicFunnel); + }); + } + + // 漏斗图 label、conversionTag 不可被通用处理 + params.options = omit(params.options, ['label', CUSTOM_COMVERSION_TAG_CONFIG, 'yField', 'xField', 'seriesField']); + + return params; + }; + + /** + * legend 配置 + * @param params + */ + const legend = (params: Params): Params => { + const { legend } = params.options; + + params.options.legend = legend ?? { + color: { + position: 'bottom', + layout: { + justifyContent: 'center', + }, + }, + }; + + return params; + }; + + return flow(transformData, init, legend)(params); +} diff --git a/packages/plots/src/core/plots/funnel/compare.ts b/packages/plots/src/core/plots/funnel/compare.ts new file mode 100644 index 000000000..547c3b5b9 --- /dev/null +++ b/packages/plots/src/core/plots/funnel/compare.ts @@ -0,0 +1,249 @@ +import type { Adaptor } from '../../types'; +import { flow, map, maxBy, get, merge, conversionTagFormatter, omit, isFunction } from '../../utils'; +import type { FunnelOptions } from './type'; +import { FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE, CUSTOM_COMVERSION_TAG_CONFIG } from './constant'; +import { Datum } from '../../../interface'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function compareFunnel(params: Params) { + const getBasicFunnel = (params: Params, compareField: string) => { + const { xField, yField, funnelStyle, label, isTransposed } = params.options; + + const conversionTag = get(params.options, CUSTOM_COMVERSION_TAG_CONFIG); + + const basicLabel = [ + { + text: (d) => `${d[yField]}`, + position: 'inside', + fillOpacity: 1, + ...label, + }, + ]; + + const rateLabel = [ + { + textAlign: 'left', + textBaseline: 'middle', + fill: '#aaa', + fillOpacity: 1, + transform: [ + { + type: 'overlapDodgeY', + }, + ], + connector: true, + ...conversionTag, + text: (...args: [d: Datum, index: number]) => + args[1] !== 0 + ? isFunction(conversionTag?.text) + ? `${conversionTag.text(...args)}` + : `Rate: ${conversionTagFormatter(...(args[0][FUNNEL_CONVERSATION] as [number, number]))}` + : '', + ...(!isTransposed + ? { + position: 'top-right', + dx: 20, + backgroundPadding: [0, 8], + } + : { + position: 'top-left', + dx: 8, + dy: -20, + backgroundPadding: [-8, 8], + }), + }, + ]; + + const compareLabel = { + text: (_, index) => { + return index === 0 ? compareField : ''; + }, + fontSize: 14, + position: 'top', + fillOpacity: 1, + dy: -24, + }; + + const labels = [ + ...(label === false ? [] : basicLabel), + ...(conversionTag === false ? [] : rateLabel), + compareLabel, + ]; + + return { + type: 'interval', + axis: false, + coordinate: !isTransposed + ? { + transform: [{ type: 'transpose' }], + } + : undefined, + scale: { + x: { + padding: 0, + }, + }, + style: funnelStyle, + encode: { + x: xField, + y: FUNNEL_MAPPING_VALUE, + color: xField, + shape: 'funnel', + }, + animate: { enter: { type: 'fadeIn' } }, + tooltip: { + title: false, + items: [ + (d) => ({ + name: d[xField], + value: d[yField], + }), + ], + }, + // labels 对应 xField + labels, + }; + }; + + const getCompareFields = (params: Params) => { + const { data, compareField } = params.options; + const compareFields: string[] = []; + + let i = 0; + while (compareFields.length < 2) { + const curData = data[i][compareField]; + if (curData !== compareFields[0]) { + compareFields.push(curData); + } + if (compareFields.length === 2) return compareFields; + i += 1; + } + + return compareFields; + }; + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + const { yField, isTransposed, legend, conversionTag, label, compareField } = params.options; + + const compareFields = getCompareFields(params); + + params.options.children = [ + compareFields[0] + ? merge(getBasicFunnel(params, compareFields[0]), { + data: { + transform: [ + { + type: 'filter', + callback: (d) => d.company === compareFields[0], + }, + ], + }, + style: { + stroke: '#FFF', + }, + encode: { + y: (d) => -d[FUNNEL_MAPPING_VALUE], + }, + labels: [ + ...(label === false + ? [] + : [ + { + textAlign: isTransposed ? 'center' : 'end', + position: isTransposed ? 'top' : 'right', + dx: isTransposed ? undefined : -8, + dy: isTransposed ? 8 : undefined, + fill: '#FFF', + }, + ]), + ...(conversionTag === false + ? [] + : [ + { + ...(!isTransposed + ? { + position: 'top-left', + dx: -48 * 2, + } + : { + position: 'bottom-left', + dx: 8, + dy: 24, + }), + }, + ]), + isTransposed + ? { + text: (_, index, arr) => { + return index === arr.length - 1 ? compareFields[0] : ''; + }, + textAlign: 'end', + position: 'bottom-right', + textBaseline: 'middle', + dy: 24, + } + : {}, + ], + }) + : null, + compareFields[1] + ? merge(getBasicFunnel(params, compareFields[1]), { + data: { + transform: [ + { + type: 'filter', + callback: (d) => d.company === compareFields[1], + }, + ], + }, + style: { + stroke: '#FFF', + }, + labels: [ + ...(label === false + ? [] + : [ + { + textAlign: isTransposed ? 'center' : 'start', + position: isTransposed ? 'bottom' : 'left', + dx: isTransposed ? undefined : 8, + dy: isTransposed ? -8 : undefined, + fill: '#FFF', + }, + ]), + ...(conversionTag === false ? [] : [{}]), + isTransposed + ? { + text: (_, index, arr) => { + return index === arr.length - 1 ? compareFields[1] : ''; + }, + textAlign: 'end', + position: 'top-right', + textBaseline: 'middle', + dy: -24, + } + : {}, + ], + }) + : null, + ].filter((i) => !!i); + + params.options = merge(params.options, { + // 预留给 compareLabel 的空间 + paddingTop: 24, + paddingLeft: 60, + paddingRight: 60, + }); + + return params; + }; + + return flow(init)(params); +} diff --git a/packages/plots/src/core/plots/funnel/constant.ts b/packages/plots/src/core/plots/funnel/constant.ts new file mode 100644 index 000000000..21e1068fc --- /dev/null +++ b/packages/plots/src/core/plots/funnel/constant.ts @@ -0,0 +1,14 @@ +// 漏斗占比: data[n][yField] / data[0][yField] +export const FUNNEL_PERCENT = '__percentage__'; +// 漏斗映射值 +export const FUNNEL_MAPPING_VALUE = '__mappingValue__'; +// 漏斗转化率: data[n][yField] / data[n-1][yField]; +export const FUNNEL_CONVERSATION = '__conversion__'; +// 漏斗单项占总体和的百分比,用于动态漏斗图计算高度: +// data[n][yField] / sum(data[0-n][yField]) +export const FUNNEL_TOTAL_PERCENT = '__totalPercentage__'; +// 漏斗多边型 x 坐标 +export const PLOYGON_X = '$$x$$'; +export const PLOYGON_Y = '$$y$$'; + +export const CUSTOM_COMVERSION_TAG_CONFIG = '__conversionTag__'; diff --git a/packages/plots/src/core/plots/funnel/facet.ts b/packages/plots/src/core/plots/funnel/facet.ts new file mode 100644 index 000000000..b158df6e3 --- /dev/null +++ b/packages/plots/src/core/plots/funnel/facet.ts @@ -0,0 +1,155 @@ +import type { Adaptor } from '../../types'; +import { flow, get, merge, conversionTagFormatter, isFunction } from '../../utils'; +import type { FunnelOptions } from './type'; +import { FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE, CUSTOM_COMVERSION_TAG_CONFIG } from './constant'; +import { Datum } from '../../../interface'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function facetFunnel(params: Params) { + const getBasicFunnel = (params: Params) => { + const { xField, yField, shape, legend, label, isTransposed, seriesField } = params.options; + + const conversionTag = get(params.options, CUSTOM_COMVERSION_TAG_CONFIG); + + const basicLabel = [ + { + text: (d) => `${d[yField]}`, + position: 'inside', + fillOpacity: 1, + ...label, + }, + ]; + + const rateLabel = [ + { + textAlign: 'left', + textBaseline: 'middle', + fill: '#aaa', + fillOpacity: 1, + connector: true, + ...(!isTransposed + ? { + position: 'top-right', + dx: 20, + backgroundPadding: [0, 8], + } + : { + position: 'top-left', + dy: -20, + dx: 8, // 与connector 间隙 + backgroundPadding: [-8, 8], + }), + ...conversionTag, + text: (...args: [d: Datum, index: number]) => + args[1] !== 0 + ? isFunction(conversionTag?.text) + ? `${conversionTag.text(...args)}` + : `Rate: ${conversionTagFormatter(...(args[0][FUNNEL_CONVERSATION] as [number, number]))}` + : '', + }, + ]; + + const facetLabel = { + text: (d, index) => { + return index === 0 ? d[seriesField] : ''; + }, + fontSize: 14, + position: !isTransposed ? 'top' : 'left', + fillOpacity: 1, + dy: -24, + }; + + const labels = [...(label === false ? [] : basicLabel), ...(conversionTag === false ? [] : rateLabel)]; + + if (!isTransposed) { + labels.push(facetLabel); + } + + return { + // 分面中需要单独设置 theme + theme: 'classic', + type: 'interval', + axis: { + x: false, + y: false, + }, + legend, + // facetLabel 空间预留 + marginTop: !isTransposed ? 8 : undefined, + // 分面单元 紧凑 + marginLeft: !isTransposed ? -10 : undefined, + frame: false, + encode: { + x: xField, + y: FUNNEL_MAPPING_VALUE, + color: xField, + shape: shape || 'funnel', + }, + scale: { + x: { + padding: 0, + }, + }, + coordinate: !isTransposed + ? { + transform: [ + { + type: 'transpose', + }, + ], + } + : undefined, + transform: [ + { + type: 'symmetryY', + }, + ], + tooltip: { + title: false, + items: [ + (d) => ({ + name: d[xField], + value: d[yField], + }), + ], + }, + labels, + }; + }; + + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + const { isTransposed, legend, yField, seriesField } = params.options; + + params.options.legend = legend; + + params.options.children = [getBasicFunnel(params)]; + + params.options = merge(params.options, { + type: 'facetRect', + direction: isTransposed ? 'col' : 'row', + frame: false, + encode: { x: seriesField }, + autoFit: true, + paddingLeft: 60, + paddingRight: 60, + axis: { x: false }, + scale: { + [yField]: { + sync: true, + }, + }, + }); + + return params; + }; + + return flow(init)(params); +} diff --git a/packages/plots/src/core/plots/funnel/index.ts b/packages/plots/src/core/plots/funnel/index.ts new file mode 100644 index 000000000..47cbd4d41 --- /dev/null +++ b/packages/plots/src/core/plots/funnel/index.ts @@ -0,0 +1,73 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { pick, omit, set } from '../../utils'; +import { FunnelOptions } from './type'; +import { FUNNEL_CONVERSATION, FUNNEL_PERCENT, FUNNEL_TOTAL_PERCENT, CUSTOM_COMVERSION_TAG_CONFIG } from './constant'; +import { SKIP_DEL_CUSTOM_SIGN } from '../../constants'; + +export type { FunnelOptions }; + +export class Funnel extends Plot { + constructor(container: string | HTMLElement, options: FunnelOptions) { + super(container, omit(options, ['conversionTag'])); + set(this.options, CUSTOM_COMVERSION_TAG_CONFIG, options.conversionTag); + set(this, SKIP_DEL_CUSTOM_SIGN, true); + } + /** 图表类型 */ + public type = 'Funnel'; + + /** 漏斗 转化率 字段 */ + static CONVERSATION_FIELD = FUNNEL_CONVERSATION; + /** 漏斗 百分比 字段 */ + static PERCENT_FIELD = FUNNEL_PERCENT; + /** 漏斗 总转换率百分比 字段 */ + static TOTAL_PERCENT_FIELD = FUNNEL_TOTAL_PERCENT; + + static getFields() { + return pick(Funnel, ['CONVERSATION_FIELD', 'PERCENT_FIELD', 'TOTAL_PERCENT_FIELD']); + } + + /** + * 获取 漏斗图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + children: [ + { + type: 'interval', + transform: [ + { + type: 'symmetryY', + }, + ], + // 漏斗图默认不需要坐标系 + axis: false, + scale: { + x: { + padding: 0, + }, + }, + }, + ], + // 漏斗基本动画 + animate: { enter: { type: 'fadeIn' } }, + }; + } + + /** + * 获取 漏斗图 默认配置 + */ + protected getDefaultOptions() { + return Funnel.getDefaultOptions(); + } + + /** + * 漏斗图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/funnel/type.ts b/packages/plots/src/core/plots/funnel/type.ts new file mode 100644 index 000000000..518414fcc --- /dev/null +++ b/packages/plots/src/core/plots/funnel/type.ts @@ -0,0 +1,59 @@ +import type { BaseOptions, Options } from '../../types/common'; +import type { Datum } from '../../../interface'; + +type StyleAttr = Record; + +export type FunnelOptions = Options & + BaseOptions & { + /** + * @title x轴字段 + */ + xField: string; + /** + * @title y轴字段 + */ + yField: string; + /** + * @title 对比字段 + * @description 漏斗图将根据此字段转置为对比漏斗图 + */ + compareField?: string; + /** + * @title 分组字段 + * @description 漏斗图将根据此字段转置为分面漏斗图 + */ + seriesField?: string; + /** + * @title 是否转置 + * @default false + */ + isTransposed?: boolean; + /** + * @title 是否是动态高度 + * @default false + */ + readonly dynamicHeight?: boolean; + /** + * @title 漏斗分面标题 + * @description 是否关闭漏斗的标题展示,适用于存在多组漏斗的情形,如:分组漏斗图、对比漏斗图。 + */ + showFacetTitle?: boolean; + /** + * @title 漏斗图样式 + */ + funnelStyle?: StyleAttr; + /** 可以设置为金字塔 pyramid */ + shape?: 'pyramid'; + label?: { + text?: string | ((datum?: Datum, data?: Datum[]) => string); + }; + /** + * @title 转化率信息 + */ + conversionTag?: + | false + | { + style?: StyleAttr; + text?: string | ((datum?: Datum, data?: Datum[]) => string); + }; + }; diff --git a/packages/plots/src/core/utils/conversion.ts b/packages/plots/src/core/utils/conversion.ts new file mode 100644 index 000000000..3bbac516b --- /dev/null +++ b/packages/plots/src/core/utils/conversion.ts @@ -0,0 +1,26 @@ +import { isNumber } from '.'; +/** + * 转化率的计算方式 + * @param prev + * @param next + */ +export function conversionTagFormatter(prev: number, next: number): string { + if (!isNumber(prev) || !isNumber(next)) { + return '-'; + } + + // 0 / 0 没有意义 + if (prev === 0 && next === 0) { + return '-'; + } + + if (prev === next) { + return '100%'; + } + + if (prev === 0) { + return '∞'; + } + + return `${((100 * next) / prev).toFixed(2)}%`; +} diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 3aafd5f7c..b38880236 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -9,6 +9,7 @@ export { isFunction, remove, get, + groupBy, set, sortBy, assign, @@ -18,6 +19,7 @@ export { isString, includes, map, + maxBy, } from 'lodash-es'; export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; @@ -26,4 +28,5 @@ export { getShapeConfigKeys } from './get-shape-config-keys'; export { deleteCustomKeys } from './delete-custom-keys'; export { deleteChartOptionKeys } from './delete-chart-option-keys'; export { filterTransformed } from './filter-transformed'; +export { conversionTagFormatter } from './conversion'; export { deepAssign } from '@ant-design/charts-util'; diff --git a/site/examples/statistics/funnel/demo/basic-transpose.js b/site/examples/statistics/funnel/demo/basic-transpose.js new file mode 100644 index 000000000..91b2685c2 --- /dev/null +++ b/site/examples/statistics/funnel/demo/basic-transpose.js @@ -0,0 +1,42 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Funnel } from '@ant-design/plots'; + +const DemoFunnel = () => { + const data = [ + { stage: '简历筛选', number: 253 }, + { stage: '初试人数', number: 151 }, + { stage: '复试人数', number: 113 }, + { stage: '录取人数', number: 87 }, + { stage: '入职人数', number: 59 }, + ]; + + const config = { + data: data, + xField: 'stage', + yField: 'number', + isTransposed: true, + // minSize: 0.3, + // maxSize: 0.8, + // label: { + // formatter: (datum) => { + // // 提供占比$$percentage$$,转化率$$conversion$$两种格式 + // return `${datum.stage}:${datum.number}`; + // }, + // }, + // conversionTag: { + // formatter: (datum) => { + // return (datum[FUNNEL_CONVERSATION_FIELD][1] / datum[FUNNEL_CONVERSATION_FIELD][0]).toFixed(2); + // }, + // }, + // tooltip: { + // formatter: (datum) => { + // return { name: datum.stage, value: `${datum.number}个` }; + // }, + // }, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/basic.js b/site/examples/statistics/funnel/demo/basic.js new file mode 100644 index 000000000..0a051d791 --- /dev/null +++ b/site/examples/statistics/funnel/demo/basic.js @@ -0,0 +1,23 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Funnel } from '@ant-design/plots'; + +const DemoFunnel = () => { + const data = [ + { stage: '简历筛选', number: 253 }, + { stage: '初试人数', number: 151 }, + { stage: '复试人数', number: 113 }, + { stage: '录取人数', number: 87 }, + { stage: '入职人数', number: 59 }, + ]; + + const config = { + data, + xField: 'stage', + yField: 'number', + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/compare-transpose.js b/site/examples/statistics/funnel/demo/compare-transpose.js new file mode 100644 index 000000000..431d43278 --- /dev/null +++ b/site/examples/statistics/funnel/demo/compare-transpose.js @@ -0,0 +1,76 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Funnel } from '@ant-design/plots'; + +const DemoFunnel = () => { + const data = [ + { + stage: '简历筛选', + number: 253, + company: 'A公司', + }, + { + stage: '初试人数', + number: 151, + company: 'A公司', + }, + { + stage: '复试人数', + number: 113, + company: 'A公司', + }, + { + stage: '录取人数', + number: 87, + company: 'A公司', + }, + { + stage: '入职人数', + number: 59, + company: 'A公司', + }, + { + stage: '简历筛选', + number: 303, + company: 'B公司', + }, + { + stage: '初试人数', + number: 251, + company: 'B公司', + }, + { + stage: '复试人数', + number: 153, + company: 'B公司', + }, + { + stage: '录取人数', + number: 117, + company: 'B公司', + }, + { + stage: '入职人数', + number: 79, + company: 'B公司', + }, + ]; + const config = { + data, + xField: 'stage', + yField: 'number', + compareField: 'company', + tooltip: { + // fields: ['stage', 'number', 'company'], + formatter: (v) => ({ + name: `${v.company}的${v.stage}`, + value: v.number, + }), + }, + isTransposed: true, + legend: false, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/compare.js b/site/examples/statistics/funnel/demo/compare.js new file mode 100644 index 000000000..fea6a89a4 --- /dev/null +++ b/site/examples/statistics/funnel/demo/compare.js @@ -0,0 +1,75 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Funnel } from '@ant-design/plots'; + +const DemoFunnel = () => { + const data = [ + { + stage: '简历筛选', + number: 253, + company: 'A公司', + }, + { + stage: '初试人数', + number: 151, + company: 'A公司', + }, + { + stage: '复试人数', + number: 113, + company: 'A公司', + }, + { + stage: '录取人数', + number: 87, + company: 'A公司', + }, + { + stage: '入职人数', + number: 59, + company: 'A公司', + }, + { + stage: '简历筛选', + number: 303, + company: 'B公司', + }, + { + stage: '初试人数', + number: 251, + company: 'B公司', + }, + { + stage: '复试人数', + number: 153, + company: 'B公司', + }, + { + stage: '录取人数', + number: 117, + company: 'B公司', + }, + { + stage: '入职人数', + number: 79, + company: 'B公司', + }, + ]; + const config = { + data, + xField: 'stage', + yField: 'number', + compareField: 'company', + tooltip: { + // fields: ['stage', 'number', 'company'], + formatter: (v) => ({ + name: `${v.company}的${v.stage}`, + value: v.number, + }), + }, + legend: false, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/facet-transpose.js b/site/examples/statistics/funnel/demo/facet-transpose.js new file mode 100644 index 000000000..21eadcb6c --- /dev/null +++ b/site/examples/statistics/funnel/demo/facet-transpose.js @@ -0,0 +1,69 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Funnel } from '@ant-design/plots'; + +const DemoFunnel = () => { + const data = [ + { + stage: '简历筛选', + number: 253, + company: 'A公司', + }, + { + stage: '初试人数', + number: 151, + company: 'A公司', + }, + { + stage: '复试人数', + number: 113, + company: 'A公司', + }, + { + stage: '录取人数', + number: 87, + company: 'A公司', + }, + { + stage: '入职人数', + number: 59, + company: 'A公司', + }, + { + stage: '简历筛选', + number: 303, + company: 'B公司', + }, + { + stage: '初试人数', + number: 251, + company: 'B公司', + }, + { + stage: '复试人数', + number: 153, + company: 'B公司', + }, + { + stage: '录取人数', + number: 117, + company: 'B公司', + }, + { + stage: '入职人数', + number: 79, + company: 'B公司', + }, + ]; + const config = { + data, + xField: 'stage', + yField: 'number', + seriesField: 'company', + isTransposed: true, + legend: false, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/facet.js b/site/examples/statistics/funnel/demo/facet.js new file mode 100644 index 000000000..9ee03b42a --- /dev/null +++ b/site/examples/statistics/funnel/demo/facet.js @@ -0,0 +1,68 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Funnel } from '@ant-design/plots'; + +const DemoFunnel = () => { + const data = [ + { + stage: '简历筛选', + number: 253, + company: 'A公司', + }, + { + stage: '初试人数', + number: 151, + company: 'A公司', + }, + { + stage: '复试人数', + number: 113, + company: 'A公司', + }, + { + stage: '录取人数', + number: 87, + company: 'A公司', + }, + { + stage: '入职人数', + number: 59, + company: 'A公司', + }, + { + stage: '简历筛选', + number: 303, + company: 'B公司', + }, + { + stage: '初试人数', + number: 251, + company: 'B公司', + }, + { + stage: '复试人数', + number: 153, + company: 'B公司', + }, + { + stage: '录取人数', + number: 117, + company: 'B公司', + }, + { + stage: '入职人数', + number: 79, + company: 'B公司', + }, + ]; + const config = { + data, + xField: 'stage', + yField: 'number', + seriesField: 'company', + legend: false, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/meta.json b/site/examples/statistics/funnel/demo/meta.json new file mode 100644 index 000000000..90a33bdc4 --- /dev/null +++ b/site/examples/statistics/funnel/demo/meta.json @@ -0,0 +1,72 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "基础漏斗图", + "en": "Basic funnel plot" + }, + "screenshot": "https://gw.alicdn.com/tfs/TB158FxuAT2gK0jSZPcXXcKkpXa-646-500.png" + }, + { + "filename": "static-field.js", + "title": { + "zh": "漏斗图: 使用静态变量", + "en": "Funnel plot - static field" + }, + "screenshot": "https://gw.alicdn.com/tfs/TB158FxuAT2gK0jSZPcXXcKkpXa-646-500.png" + }, + { + "filename": "pyramid.js", + "title": { + "zh": "尖底漏斗图", + "en": "Pyramid funnel plot" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/L88CCTUbpo/9127293d-767c-4a57-8852-e7c27fc4df8d.png" + }, + { + "filename": "compare.js", + "title": { + "zh": "对比漏斗图", + "en": "Compare funnel plot" + }, + "screenshot": "https://gw.alicdn.com/tfs/TB1Y7dtuAL0gK0jSZFtXXXQCXXa-709-495.png" + }, + { + "filename": "facet.js", + "title": { + "zh": "分面漏斗图", + "en": "Facet funnel plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*Zk1rRJvD8zwAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "basic-transpose.js", + "title": { + "zh": "基础漏斗图-转置", + "en": "Funnel plot-transpose" + }, + "screenshot": "https://gw.alicdn.com/tfs/TB1EgtsuuT2gK0jSZFvXXXnFXXa-958-591.png" + }, + { + "filename": "compare-transpose.js", + "title": { + "zh": "对比漏斗图-转置", + "en": "Compare funnel plot" + }, + "screenshot": "https://gw.alicdn.com/tfs/TB1Hkluurr1gK0jSZR0XXbP8XXa-1095-565.png" + }, + { + "filename": "facet-transpose.js", + "title": { + "zh": "分面漏斗图-转置", + "en": "Facet funnel plot-transpose" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*lbtdRJjZ4qsAAAAAAAAAAAAAARQnAQ" + } + ] +} diff --git a/site/examples/statistics/funnel/demo/pyramid.js b/site/examples/statistics/funnel/demo/pyramid.js new file mode 100644 index 000000000..795aaa4a7 --- /dev/null +++ b/site/examples/statistics/funnel/demo/pyramid.js @@ -0,0 +1,24 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Funnel } from '@ant-design/plots'; + +const DemoFunnel = () => { + const data = [ + { stage: '简历筛选', number: 253 }, + { stage: '初试人数', number: 151 }, + { stage: '复试人数', number: 113 }, + { stage: '录取人数', number: 87 }, + { stage: '入职人数', number: 59 }, + ]; + + const config = { + data, + xField: 'stage', + yField: 'number', + shape: 'pyramid', + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/static-field.js b/site/examples/statistics/funnel/demo/static-field.js new file mode 100644 index 000000000..e0ddb7396 --- /dev/null +++ b/site/examples/statistics/funnel/demo/static-field.js @@ -0,0 +1,36 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Funnel } from '@ant-design/plots'; + +const DemoFunnel = () => { + const data = [ + { stage: '简历筛选', number: 253 }, + { stage: '初试人数', number: 151 }, + { stage: '复试人数', number: 113 }, + { stage: '录取人数', number: 87 }, + { stage: '入职人数', number: 59 }, + ]; + + const config = { + data: data, + xField: 'stage', + yField: 'number', + legend: false, + label: { + text: (datum) => { + return `${(datum[Funnel.PERCENT_FIELD] * 100).toFixed(2)}%`; + }, + }, + conversionTag: { + text: (datum) => { + return `${((datum[Funnel.CONVERSATION_FIELD][1] / datum[Funnel.CONVERSATION_FIELD][0]) * 100).toFixed(2)}%`; + }, + }, + // 关闭 conversionTag 转化率 展示 + // conversionTag: false, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/index.en.md b/site/examples/statistics/funnel/index.en.md new file mode 100644 index 000000000..54853d3df --- /dev/null +++ b/site/examples/statistics/funnel/index.en.md @@ -0,0 +1,4 @@ +--- +title: Funnel +order: 2 +--- diff --git a/site/examples/statistics/funnel/index.zh.md b/site/examples/statistics/funnel/index.zh.md new file mode 100644 index 000000000..13edd1929 --- /dev/null +++ b/site/examples/statistics/funnel/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 漏斗图 +order: 2 +--- From 9adc0e3018095f0c48ef29c5813587d05d1459a4 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:18:05 +0800 Subject: [PATCH 083/268] fix: funnel (#2150) --- packages/plots/package.json | 2 +- .../plots/src/components/funnel/index.tsx | 3 +- packages/plots/src/constants/index.ts | 15 -- packages/plots/src/core/base/index.ts | 1 - .../plots/src/core/plots/funnel/adaptor.ts | 220 ++++------------ .../plots/src/core/plots/funnel/compare.ts | 249 ------------------ .../plots/src/core/plots/funnel/constant.ts | 14 - packages/plots/src/core/plots/funnel/facet.ts | 155 ----------- packages/plots/src/core/plots/funnel/index.ts | 43 +-- packages/plots/src/core/plots/funnel/type.ts | 52 ---- packages/plots/src/hooks/useChart.ts | 47 ++-- packages/plots/src/util/get-path-config.ts | 17 -- packages/plots/src/util/index.ts | 5 +- packages/plots/src/util/is-valid-element.ts | 5 + packages/plots/src/util/set-path-config.ts | 21 -- packages/plots/tests/utils/util.test.ts | 41 --- packages/util/README.md | 2 +- .../statistics/funnel/demo/basic-transpose.js | 42 --- .../funnel/demo/compare-transpose.js | 76 ------ .../statistics/funnel/demo/compare.js | 75 ------ .../statistics/funnel/demo/facet-transpose.js | 69 ----- site/examples/statistics/funnel/demo/facet.js | 68 ----- .../funnel/demo/{basic.js => funnel.js} | 3 + .../examples/statistics/funnel/demo/meta.json | 58 +--- .../statistics/funnel/demo/mirror-funnel.js | 35 +++ .../statistics/funnel/demo/pyramid.js | 48 +++- .../statistics/funnel/demo/static-field.js | 36 --- .../statistics/funnel/demo/transpose.js | 56 ++++ 28 files changed, 240 insertions(+), 1218 deletions(-) delete mode 100644 packages/plots/src/constants/index.ts delete mode 100644 packages/plots/src/core/plots/funnel/compare.ts delete mode 100644 packages/plots/src/core/plots/funnel/constant.ts delete mode 100644 packages/plots/src/core/plots/funnel/facet.ts delete mode 100644 packages/plots/src/util/get-path-config.ts create mode 100644 packages/plots/src/util/is-valid-element.ts delete mode 100644 packages/plots/src/util/set-path-config.ts delete mode 100644 packages/plots/tests/utils/util.test.ts delete mode 100644 site/examples/statistics/funnel/demo/basic-transpose.js delete mode 100644 site/examples/statistics/funnel/demo/compare-transpose.js delete mode 100644 site/examples/statistics/funnel/demo/compare.js delete mode 100644 site/examples/statistics/funnel/demo/facet-transpose.js delete mode 100644 site/examples/statistics/funnel/demo/facet.js rename site/examples/statistics/funnel/demo/{basic.js => funnel.js} (89%) create mode 100644 site/examples/statistics/funnel/demo/mirror-funnel.js delete mode 100644 site/examples/statistics/funnel/demo/static-field.js create mode 100644 site/examples/statistics/funnel/demo/transpose.js diff --git a/packages/plots/package.json b/packages/plots/package.json index 94f733cc9..ff09ea56b 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@antv/event-emitter": "^0.1.3", - "@antv/g2": "^5.1.3", + "@antv/g2": "^5.1.6", "size-sensor": "^1.0.1", "@ant-design/charts-util": "workspace:*" }, diff --git a/packages/plots/src/components/funnel/index.tsx b/packages/plots/src/components/funnel/index.tsx index 9ea2ad1c8..e380f2a18 100644 --- a/packages/plots/src/components/funnel/index.tsx +++ b/packages/plots/src/components/funnel/index.tsx @@ -2,10 +2,9 @@ import React from 'react'; import { FunnelOptions } from '../../core'; import { CommonConfig } from '../../interface'; import { BaseChart } from '../base'; -import { Funnel } from '../../core/plots/funnel'; export type FunnelConfig = CommonConfig; const FunnelChart = (props: FunnelConfig) => ; -export default Object.assign(FunnelChart, Funnel.getFields()); +export default FunnelChart; diff --git a/packages/plots/src/constants/index.ts b/packages/plots/src/constants/index.ts deleted file mode 100644 index 64fca6685..000000000 --- a/packages/plots/src/constants/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @description: 需要支持 JSX 的配置项 - * @example - * 1. config: { label: { render: () =>

xxx
} } - */ -export const JSX_TO_STRING = [ - { path: ['label', 'render'] }, - { path: ['style', 'textContent'] }, - { - path: ['interaction', 'tooltip', 'render'], - extra: { - className: 'g2-tooltip', - }, - }, -]; diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index f1536583d..cb403c697 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -100,7 +100,6 @@ export abstract class Plot extends EE { if (this.type !== 'base') { this.execAdaptor(); } - // options 转换 this.chart.options(this.getSpecOptions()); // 渲染 diff --git a/packages/plots/src/core/plots/funnel/adaptor.ts b/packages/plots/src/core/plots/funnel/adaptor.ts index f8b4116f7..642cd73d2 100644 --- a/packages/plots/src/core/plots/funnel/adaptor.ts +++ b/packages/plots/src/core/plots/funnel/adaptor.ts @@ -1,22 +1,7 @@ +import { flow, transformOptions, set, groupBy } from '../../utils'; +import { mark } from '../../components'; import type { Adaptor } from '../../types'; -import { - deepAssign, - flow, - map, - transformOptions, - maxBy, - get, - groupBy, - conversionTagFormatter, - isNumber, - omit, - isFunction, -} from '../../utils'; import type { FunnelOptions } from './type'; -import { FUNNEL_CONVERSATION, FUNNEL_PERCENT, FUNNEL_MAPPING_VALUE, CUSTOM_COMVERSION_TAG_CONFIG } from './constant'; -import { Datum } from '../../../interface'; -import { compareFunnel } from './compare'; -import { facetFunnel } from './facet'; type Params = Adaptor; @@ -26,168 +11,77 @@ type Params = Adaptor; */ export function adaptor(params: Params) { /** - * @description 数据转换 + * 图表差异化处理 */ - const _transformData = (params: Params, extraMaxValue?: number, customData?: any[]) => { - const { yField, maxSize, minSize, data: originData } = params.options; - const maxYFieldValue = extraMaxValue ?? get(maxBy(originData, yField), [yField]); - const max = isNumber(maxSize) ? maxSize : 1; - const min = isNumber(minSize) ? minSize : 0; - - const curData = customData || originData; - return map(curData, (row, index) => { - const percent = row[yField] === 253 ? 1 : (row[yField] || 0) / maxYFieldValue; - row[FUNNEL_PERCENT] = percent; - row[FUNNEL_MAPPING_VALUE] = (max - min) * percent + min; - // 转化率数据存储前后数据 - row[FUNNEL_CONVERSATION] = [get(curData, [index - 1, yField]), row[yField]]; - return row; - }); + const init = (params: Params) => { + const { options } = params; + const { xField, colorField, labels } = options; + if (!colorField) { + set(options, 'colorField', xField); + } + if (labels) { + set(options, 'label', false); + } + return params; }; - const transformData = (params: Params) => { - const { yField, data, compareField, seriesField } = params.options; - - if (compareField || seriesField) { - const maxCache = {}; - const groupByField = compareField || seriesField; - - const groups = groupBy(data, (d) => () => { - const curKey = d[groupByField]; - const curMax = maxCache[curKey] ?? Number.MIN_SAFE_INTEGER; - maxCache[curKey] = Math.max(curMax, d[yField]); - return curKey; - }); - - const formatData = Object.keys(groups).reduce((res, curKey) => { - return res.concat(_transformData(params, maxCache[curKey], groups[curKey])); - }, []); - - params.options.data = formatData; - } else { - params.options.data = _transformData(params); + const transform = (params: Params) => { + const { options } = params; + const { compareField, transform, isTransposed = true, coordinate } = options; + if (!transform) { + if (compareField) { + set(options, 'transform', []); + } else { + set(options, 'transform', [{ type: 'symmetryY' }]); + } + } + if (!coordinate && isTransposed) { + set(options, 'coordinate', { transform: [{ type: 'transpose' }] }); } - return params; }; - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - const { xField, yField, shape, isTransposed, compareField, seriesField, funnelStyle, label } = params.options; - - if (compareField) { - compareFunnel(params); - } else if (seriesField) { - facetFunnel(params); - } else { - const conversionTag = get(params.options, CUSTOM_COMVERSION_TAG_CONFIG); - - const basicLabel = [ - { - text: (d) => `${d[xField]} ${d[yField]}`, - position: 'inside', - fillOpacity: 1, - ...label, - }, - ]; - - const rateLabel = [ - // coversion 内容, - { - textAlign: 'left', - textBaseline: 'middle', - fill: '#aaa', - fillOpacity: 1, - connector: true, - ...conversionTag, - text: (...args: [d: Datum, index: number]) => - args[1] !== 0 - ? isFunction(conversionTag?.text) - ? `${conversionTag.text(...args)}` - : `Rate: ${conversionTagFormatter(...(args[0][FUNNEL_CONVERSATION] as [number, number]))}` - : '', - ...(!isTransposed - ? { - position: 'top-right', - dx: 20, - backgroundPadding: [0, 8], - } - : { - position: 'top-left', - dy: -20, - dx: 8, // 与connector 间隙 - backgroundPadding: [-8, 8], - }), - }, - ]; - - const labels = [...(label === false ? [] : basicLabel), ...(conversionTag === false ? [] : rateLabel)]; + const compare = (params: Params) => { + const { options } = params; + const { compareField, seriesField, data, children, yField, isTransposed = true } = options; - const basicFunnel = { + if (compareField || seriesField) { + const groupedData = Object.values(groupBy(data, (item) => item[compareField || seriesField])); + children[0].data = groupedData[0]; + children.push({ type: 'interval', - axis: false, - coordinate: !isTransposed - ? { - transform: [{ type: 'transpose' }], - } - : undefined, - scale: { - x: { - padding: 0, - }, - }, - style: funnelStyle, - encode: { - x: xField, - y: FUNNEL_MAPPING_VALUE, - color: xField, - shape: shape || 'funnel', - }, - animate: { enter: { type: 'fadeIn' } }, - tooltip: { - title: false, - items: [ - (d) => ({ - name: d[xField], - value: d[yField], - }), - ], - }, - // labels 对应 xField - labels, - }; - - params.options.children = map(params.options.children, (child) => { - return deepAssign(child, basicFunnel); + data: groupedData[1], + yField: (item) => -item[yField], }); + delete options['compareField']; + delete options.data; + } + if (seriesField) { + set(options, 'type', 'spaceFlex'); + set(options, 'ratio', [1, 1]); + set(options, 'direction', isTransposed ? 'row' : 'col'); + // @ts-expect-error + delete options['seriesField']; } - - // 漏斗图 label、conversionTag 不可被通用处理 - params.options = omit(params.options, ['label', CUSTOM_COMVERSION_TAG_CONFIG, 'yField', 'xField', 'seriesField']); return params; }; - /** - * legend 配置 - * @param params - */ - const legend = (params: Params): Params => { - const { legend } = params.options; - - params.options.legend = legend ?? { - color: { - position: 'bottom', - layout: { - justifyContent: 'center', - }, - }, - }; - + const tooltip = (params) => { + const { options } = params; + const { tooltip, xField, yField } = options; + if (!tooltip) { + set(options, 'tooltip', { + title: false, + items: [ + (d) => { + return { name: d[xField], value: d[yField] }; + }, + ], + }); + } return params; }; - return flow(transformData, init, legend)(params); + return flow(init, transform, compare, tooltip, transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/funnel/compare.ts b/packages/plots/src/core/plots/funnel/compare.ts deleted file mode 100644 index 547c3b5b9..000000000 --- a/packages/plots/src/core/plots/funnel/compare.ts +++ /dev/null @@ -1,249 +0,0 @@ -import type { Adaptor } from '../../types'; -import { flow, map, maxBy, get, merge, conversionTagFormatter, omit, isFunction } from '../../utils'; -import type { FunnelOptions } from './type'; -import { FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE, CUSTOM_COMVERSION_TAG_CONFIG } from './constant'; -import { Datum } from '../../../interface'; - -type Params = Adaptor; - -/** - * @param chart - * @param options - */ -export function compareFunnel(params: Params) { - const getBasicFunnel = (params: Params, compareField: string) => { - const { xField, yField, funnelStyle, label, isTransposed } = params.options; - - const conversionTag = get(params.options, CUSTOM_COMVERSION_TAG_CONFIG); - - const basicLabel = [ - { - text: (d) => `${d[yField]}`, - position: 'inside', - fillOpacity: 1, - ...label, - }, - ]; - - const rateLabel = [ - { - textAlign: 'left', - textBaseline: 'middle', - fill: '#aaa', - fillOpacity: 1, - transform: [ - { - type: 'overlapDodgeY', - }, - ], - connector: true, - ...conversionTag, - text: (...args: [d: Datum, index: number]) => - args[1] !== 0 - ? isFunction(conversionTag?.text) - ? `${conversionTag.text(...args)}` - : `Rate: ${conversionTagFormatter(...(args[0][FUNNEL_CONVERSATION] as [number, number]))}` - : '', - ...(!isTransposed - ? { - position: 'top-right', - dx: 20, - backgroundPadding: [0, 8], - } - : { - position: 'top-left', - dx: 8, - dy: -20, - backgroundPadding: [-8, 8], - }), - }, - ]; - - const compareLabel = { - text: (_, index) => { - return index === 0 ? compareField : ''; - }, - fontSize: 14, - position: 'top', - fillOpacity: 1, - dy: -24, - }; - - const labels = [ - ...(label === false ? [] : basicLabel), - ...(conversionTag === false ? [] : rateLabel), - compareLabel, - ]; - - return { - type: 'interval', - axis: false, - coordinate: !isTransposed - ? { - transform: [{ type: 'transpose' }], - } - : undefined, - scale: { - x: { - padding: 0, - }, - }, - style: funnelStyle, - encode: { - x: xField, - y: FUNNEL_MAPPING_VALUE, - color: xField, - shape: 'funnel', - }, - animate: { enter: { type: 'fadeIn' } }, - tooltip: { - title: false, - items: [ - (d) => ({ - name: d[xField], - value: d[yField], - }), - ], - }, - // labels 对应 xField - labels, - }; - }; - - const getCompareFields = (params: Params) => { - const { data, compareField } = params.options; - const compareFields: string[] = []; - - let i = 0; - while (compareFields.length < 2) { - const curData = data[i][compareField]; - if (curData !== compareFields[0]) { - compareFields.push(curData); - } - if (compareFields.length === 2) return compareFields; - i += 1; - } - - return compareFields; - }; - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - const { yField, isTransposed, legend, conversionTag, label, compareField } = params.options; - - const compareFields = getCompareFields(params); - - params.options.children = [ - compareFields[0] - ? merge(getBasicFunnel(params, compareFields[0]), { - data: { - transform: [ - { - type: 'filter', - callback: (d) => d.company === compareFields[0], - }, - ], - }, - style: { - stroke: '#FFF', - }, - encode: { - y: (d) => -d[FUNNEL_MAPPING_VALUE], - }, - labels: [ - ...(label === false - ? [] - : [ - { - textAlign: isTransposed ? 'center' : 'end', - position: isTransposed ? 'top' : 'right', - dx: isTransposed ? undefined : -8, - dy: isTransposed ? 8 : undefined, - fill: '#FFF', - }, - ]), - ...(conversionTag === false - ? [] - : [ - { - ...(!isTransposed - ? { - position: 'top-left', - dx: -48 * 2, - } - : { - position: 'bottom-left', - dx: 8, - dy: 24, - }), - }, - ]), - isTransposed - ? { - text: (_, index, arr) => { - return index === arr.length - 1 ? compareFields[0] : ''; - }, - textAlign: 'end', - position: 'bottom-right', - textBaseline: 'middle', - dy: 24, - } - : {}, - ], - }) - : null, - compareFields[1] - ? merge(getBasicFunnel(params, compareFields[1]), { - data: { - transform: [ - { - type: 'filter', - callback: (d) => d.company === compareFields[1], - }, - ], - }, - style: { - stroke: '#FFF', - }, - labels: [ - ...(label === false - ? [] - : [ - { - textAlign: isTransposed ? 'center' : 'start', - position: isTransposed ? 'bottom' : 'left', - dx: isTransposed ? undefined : 8, - dy: isTransposed ? -8 : undefined, - fill: '#FFF', - }, - ]), - ...(conversionTag === false ? [] : [{}]), - isTransposed - ? { - text: (_, index, arr) => { - return index === arr.length - 1 ? compareFields[1] : ''; - }, - textAlign: 'end', - position: 'top-right', - textBaseline: 'middle', - dy: -24, - } - : {}, - ], - }) - : null, - ].filter((i) => !!i); - - params.options = merge(params.options, { - // 预留给 compareLabel 的空间 - paddingTop: 24, - paddingLeft: 60, - paddingRight: 60, - }); - - return params; - }; - - return flow(init)(params); -} diff --git a/packages/plots/src/core/plots/funnel/constant.ts b/packages/plots/src/core/plots/funnel/constant.ts deleted file mode 100644 index 21e1068fc..000000000 --- a/packages/plots/src/core/plots/funnel/constant.ts +++ /dev/null @@ -1,14 +0,0 @@ -// 漏斗占比: data[n][yField] / data[0][yField] -export const FUNNEL_PERCENT = '__percentage__'; -// 漏斗映射值 -export const FUNNEL_MAPPING_VALUE = '__mappingValue__'; -// 漏斗转化率: data[n][yField] / data[n-1][yField]; -export const FUNNEL_CONVERSATION = '__conversion__'; -// 漏斗单项占总体和的百分比,用于动态漏斗图计算高度: -// data[n][yField] / sum(data[0-n][yField]) -export const FUNNEL_TOTAL_PERCENT = '__totalPercentage__'; -// 漏斗多边型 x 坐标 -export const PLOYGON_X = '$$x$$'; -export const PLOYGON_Y = '$$y$$'; - -export const CUSTOM_COMVERSION_TAG_CONFIG = '__conversionTag__'; diff --git a/packages/plots/src/core/plots/funnel/facet.ts b/packages/plots/src/core/plots/funnel/facet.ts deleted file mode 100644 index b158df6e3..000000000 --- a/packages/plots/src/core/plots/funnel/facet.ts +++ /dev/null @@ -1,155 +0,0 @@ -import type { Adaptor } from '../../types'; -import { flow, get, merge, conversionTagFormatter, isFunction } from '../../utils'; -import type { FunnelOptions } from './type'; -import { FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE, CUSTOM_COMVERSION_TAG_CONFIG } from './constant'; -import { Datum } from '../../../interface'; - -type Params = Adaptor; - -/** - * @param chart - * @param options - */ -export function facetFunnel(params: Params) { - const getBasicFunnel = (params: Params) => { - const { xField, yField, shape, legend, label, isTransposed, seriesField } = params.options; - - const conversionTag = get(params.options, CUSTOM_COMVERSION_TAG_CONFIG); - - const basicLabel = [ - { - text: (d) => `${d[yField]}`, - position: 'inside', - fillOpacity: 1, - ...label, - }, - ]; - - const rateLabel = [ - { - textAlign: 'left', - textBaseline: 'middle', - fill: '#aaa', - fillOpacity: 1, - connector: true, - ...(!isTransposed - ? { - position: 'top-right', - dx: 20, - backgroundPadding: [0, 8], - } - : { - position: 'top-left', - dy: -20, - dx: 8, // 与connector 间隙 - backgroundPadding: [-8, 8], - }), - ...conversionTag, - text: (...args: [d: Datum, index: number]) => - args[1] !== 0 - ? isFunction(conversionTag?.text) - ? `${conversionTag.text(...args)}` - : `Rate: ${conversionTagFormatter(...(args[0][FUNNEL_CONVERSATION] as [number, number]))}` - : '', - }, - ]; - - const facetLabel = { - text: (d, index) => { - return index === 0 ? d[seriesField] : ''; - }, - fontSize: 14, - position: !isTransposed ? 'top' : 'left', - fillOpacity: 1, - dy: -24, - }; - - const labels = [...(label === false ? [] : basicLabel), ...(conversionTag === false ? [] : rateLabel)]; - - if (!isTransposed) { - labels.push(facetLabel); - } - - return { - // 分面中需要单独设置 theme - theme: 'classic', - type: 'interval', - axis: { - x: false, - y: false, - }, - legend, - // facetLabel 空间预留 - marginTop: !isTransposed ? 8 : undefined, - // 分面单元 紧凑 - marginLeft: !isTransposed ? -10 : undefined, - frame: false, - encode: { - x: xField, - y: FUNNEL_MAPPING_VALUE, - color: xField, - shape: shape || 'funnel', - }, - scale: { - x: { - padding: 0, - }, - }, - coordinate: !isTransposed - ? { - transform: [ - { - type: 'transpose', - }, - ], - } - : undefined, - transform: [ - { - type: 'symmetryY', - }, - ], - tooltip: { - title: false, - items: [ - (d) => ({ - name: d[xField], - value: d[yField], - }), - ], - }, - labels, - }; - }; - - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - const { isTransposed, legend, yField, seriesField } = params.options; - - params.options.legend = legend; - - params.options.children = [getBasicFunnel(params)]; - - params.options = merge(params.options, { - type: 'facetRect', - direction: isTransposed ? 'col' : 'row', - frame: false, - encode: { x: seriesField }, - autoFit: true, - paddingLeft: 60, - paddingRight: 60, - axis: { x: false }, - scale: { - [yField]: { - sync: true, - }, - }, - }); - - return params; - }; - - return flow(init)(params); -} diff --git a/packages/plots/src/core/plots/funnel/index.ts b/packages/plots/src/core/plots/funnel/index.ts index 47cbd4d41..e0a9e0129 100644 --- a/packages/plots/src/core/plots/funnel/index.ts +++ b/packages/plots/src/core/plots/funnel/index.ts @@ -1,32 +1,13 @@ import { Plot } from '../../base'; import type { Adaptor } from '../../types'; import { adaptor } from './adaptor'; -import { pick, omit, set } from '../../utils'; import { FunnelOptions } from './type'; -import { FUNNEL_CONVERSATION, FUNNEL_PERCENT, FUNNEL_TOTAL_PERCENT, CUSTOM_COMVERSION_TAG_CONFIG } from './constant'; -import { SKIP_DEL_CUSTOM_SIGN } from '../../constants'; export type { FunnelOptions }; export class Funnel extends Plot { - constructor(container: string | HTMLElement, options: FunnelOptions) { - super(container, omit(options, ['conversionTag'])); - set(this.options, CUSTOM_COMVERSION_TAG_CONFIG, options.conversionTag); - set(this, SKIP_DEL_CUSTOM_SIGN, true); - } /** 图表类型 */ - public type = 'Funnel'; - - /** 漏斗 转化率 字段 */ - static CONVERSATION_FIELD = FUNNEL_CONVERSATION; - /** 漏斗 百分比 字段 */ - static PERCENT_FIELD = FUNNEL_PERCENT; - /** 漏斗 总转换率百分比 字段 */ - static TOTAL_PERCENT_FIELD = FUNNEL_TOTAL_PERCENT; - - static getFields() { - return pick(Funnel, ['CONVERSATION_FIELD', 'PERCENT_FIELD', 'TOTAL_PERCENT_FIELD']); - } + public type = 'column'; /** * 获取 漏斗图 默认配置项 @@ -35,25 +16,19 @@ export class Funnel extends Plot { static getDefaultOptions(): Partial { return { type: 'view', + scale: { x: { padding: 0 } }, + animate: { enter: { type: 'fadeIn' } }, + axis: false, + shapeField: 'funnel', + label: { + position: 'inside', + transform: [{ type: 'contrastReverse' }], + }, children: [ { type: 'interval', - transform: [ - { - type: 'symmetryY', - }, - ], - // 漏斗图默认不需要坐标系 - axis: false, - scale: { - x: { - padding: 0, - }, - }, }, ], - // 漏斗基本动画 - animate: { enter: { type: 'fadeIn' } }, }; } diff --git a/packages/plots/src/core/plots/funnel/type.ts b/packages/plots/src/core/plots/funnel/type.ts index 518414fcc..3282883e9 100644 --- a/packages/plots/src/core/plots/funnel/type.ts +++ b/packages/plots/src/core/plots/funnel/type.ts @@ -1,59 +1,7 @@ import type { BaseOptions, Options } from '../../types/common'; -import type { Datum } from '../../../interface'; - -type StyleAttr = Record; export type FunnelOptions = Options & BaseOptions & { - /** - * @title x轴字段 - */ - xField: string; - /** - * @title y轴字段 - */ - yField: string; - /** - * @title 对比字段 - * @description 漏斗图将根据此字段转置为对比漏斗图 - */ compareField?: string; - /** - * @title 分组字段 - * @description 漏斗图将根据此字段转置为分面漏斗图 - */ - seriesField?: string; - /** - * @title 是否转置 - * @default false - */ isTransposed?: boolean; - /** - * @title 是否是动态高度 - * @default false - */ - readonly dynamicHeight?: boolean; - /** - * @title 漏斗分面标题 - * @description 是否关闭漏斗的标题展示,适用于存在多组漏斗的情形,如:分组漏斗图、对比漏斗图。 - */ - showFacetTitle?: boolean; - /** - * @title 漏斗图样式 - */ - funnelStyle?: StyleAttr; - /** 可以设置为金字塔 pyramid */ - shape?: 'pyramid'; - label?: { - text?: string | ((datum?: Datum, data?: Datum[]) => string); - }; - /** - * @title 转化率信息 - */ - conversionTag?: - | false - | { - style?: StyleAttr; - text?: string | ((datum?: Datum, data?: Datum[]) => string); - }; }; diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index b7f72c912..2fb6c4e88 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -1,17 +1,5 @@ import React, { useRef, useEffect } from 'react'; -import { - getPathConfig, - isString, - isNumber, - isElement, - isFunction, - setPathConfig, - isEqual, - get, - createNode, - cloneDeep, -} from '../util'; -import { JSX_TO_STRING } from '../constants'; +import { isFunction, isEqual, get, createNode, cloneDeep, isArray, isObject, isValidElement } from '../util'; import { CommonConfig, Chart } from '../interface'; export default function useChart(ChartClass: T, config: U) { @@ -52,21 +40,20 @@ export default function useChart(ChartC return imageName; }; - const reactDomToString = (source: U, path: string[], extra?: object) => { - const statisticCustomHtml = getPathConfig(source, path); - setPathConfig(source, path, (...arg: any[]) => { - const statisticDom = isFunction(statisticCustomHtml) ? statisticCustomHtml(...arg) : statisticCustomHtml; - if (isString(statisticDom) || isNumber(statisticDom) || isElement(statisticDom)) { - return statisticDom; - } - return createNode(statisticDom, extra); - }); - }; - - const processConfig = () => { - JSX_TO_STRING.forEach(({ path, extra }) => { - if (getPathConfig(config, path)) { - reactDomToString(config, path, extra); + const processConfig = (cfg: object) => { + const keys = Object.keys(cfg); + keys.forEach((key) => { + const current = cfg[key]; + if (isFunction(current) && isValidElement(`${current}`)) { + cfg[key] = (...arg) => createNode(current(...arg)); + } else { + if (isArray(current)) { + current.forEach((item) => { + processConfig(item); + }); + } else if (isObject(current)) { + processConfig(current); + } } }); }; @@ -84,7 +71,7 @@ export default function useChart(ChartC if (changeData) { chart.current.changeData(get(config, 'data')); } else { - processConfig(); + processConfig(config); chart.current.update(config); chart.current.render(); } @@ -98,7 +85,7 @@ export default function useChart(ChartC if (!chartOptions.current) { chartOptions.current = cloneDeep(config); } - processConfig(); + processConfig(config); const chartInstance: T = new (ChartClass as any)(container.current, { ...config, }); diff --git a/packages/plots/src/util/get-path-config.ts b/packages/plots/src/util/get-path-config.ts deleted file mode 100644 index c240abe82..000000000 --- a/packages/plots/src/util/get-path-config.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @description 存在时返回路径值,不存在时返回 undefined - * @param source 需要获取的对象 - * @param path 路径 - */ -export const getPathConfig = (source: any, path: string[]) => { - let current = source; - for (let i = 0; i < path.length; i += 1) { - if (current?.[path[i]]) { - current = current[path[i]]; - } else { - current = undefined; - break; - } - } - return current; -}; diff --git a/packages/plots/src/util/index.ts b/packages/plots/src/util/index.ts index cb91ef229..cbe81724b 100644 --- a/packages/plots/src/util/index.ts +++ b/packages/plots/src/util/index.ts @@ -1,4 +1,3 @@ -export { isEqual, get, isString, isNumber, isFunction, isElement, cloneDeep } from 'lodash-es'; +export { isEqual, get, isString, isNumber, isFunction, isElement, cloneDeep, isArray, isObject } from 'lodash-es'; export { createNode, uuid } from '@ant-design/charts-util'; -export { getPathConfig } from './get-path-config'; -export { setPathConfig } from './set-path-config'; +export { isValidElement } from './is-valid-element'; diff --git a/packages/plots/src/util/is-valid-element.ts b/packages/plots/src/util/is-valid-element.ts new file mode 100644 index 000000000..131c51b9a --- /dev/null +++ b/packages/plots/src/util/is-valid-element.ts @@ -0,0 +1,5 @@ +export const isValidElement = (jsxCode: string): boolean => { + const jsxRegex = /react(.*?).createElement/gi; + + return jsxRegex.test(jsxCode); +}; diff --git a/packages/plots/src/util/set-path-config.ts b/packages/plots/src/util/set-path-config.ts deleted file mode 100644 index 73e210a70..000000000 --- a/packages/plots/src/util/set-path-config.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @description 内部指定 params ,不考虑复杂情况 - * @param source 需要设置的对象 - * @param path 路径 - * @param value 值 - */ -export const setPathConfig = (source: object, path: string[], value?: any) => { - if (!source) { - return source; - } - let o = source; - path.forEach((key: string, idx: number) => { - // 不是最后一个 - if (idx < path.length - 1) { - o = o[key]; - } else { - o[key] = value; - } - }); - return source; -}; diff --git a/packages/plots/tests/utils/util.test.ts b/packages/plots/tests/utils/util.test.ts deleted file mode 100644 index 2342934eb..000000000 --- a/packages/plots/tests/utils/util.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { getPathConfig, setPathConfig } from '../../src/util'; - -describe('utils', () => { - it('has path', () => { - const config = { - statistic: { - content: { - customHtml: 'html', - }, - title: {}, - }, - }; - expect(getPathConfig(undefined, ['noPath'])).toBeUndefined(); - expect(getPathConfig(config, ['statistic', 'content', 'customHtml'])).toBe('html'); - expect(getPathConfig(config, ['statistic', 'title', 'customHtml'])).toBeUndefined(); - expect(getPathConfig(config, [])).toEqual(config); - }); - - it('set path', () => { - const config = { - statistic: { - content: { - customHtml: 'html', - }, - title: {}, - }, - }; - expect(setPathConfig(undefined, ['noPath'])).toBeUndefined(); - expect(setPathConfig(config, [])).toEqual(config); - expect(setPathConfig(config, ['statistic', 'title', 'customHtml'], 'title')).toEqual({ - statistic: { - content: { - customHtml: 'html', - }, - title: { - customHtml: 'title', - }, - }, - }); - }); -}); diff --git a/packages/util/README.md b/packages/util/README.md index 565fa2b0b..7eb67dffd 100644 --- a/packages/util/README.md +++ b/packages/util/README.md @@ -1,3 +1,3 @@ # charts-utils -Ant Design Charts Utils Library \ No newline at end of file +Ant Design Charts Utils Library diff --git a/site/examples/statistics/funnel/demo/basic-transpose.js b/site/examples/statistics/funnel/demo/basic-transpose.js deleted file mode 100644 index 91b2685c2..000000000 --- a/site/examples/statistics/funnel/demo/basic-transpose.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Funnel } from '@ant-design/plots'; - -const DemoFunnel = () => { - const data = [ - { stage: '简历筛选', number: 253 }, - { stage: '初试人数', number: 151 }, - { stage: '复试人数', number: 113 }, - { stage: '录取人数', number: 87 }, - { stage: '入职人数', number: 59 }, - ]; - - const config = { - data: data, - xField: 'stage', - yField: 'number', - isTransposed: true, - // minSize: 0.3, - // maxSize: 0.8, - // label: { - // formatter: (datum) => { - // // 提供占比$$percentage$$,转化率$$conversion$$两种格式 - // return `${datum.stage}:${datum.number}`; - // }, - // }, - // conversionTag: { - // formatter: (datum) => { - // return (datum[FUNNEL_CONVERSATION_FIELD][1] / datum[FUNNEL_CONVERSATION_FIELD][0]).toFixed(2); - // }, - // }, - // tooltip: { - // formatter: (datum) => { - // return { name: datum.stage, value: `${datum.number}个` }; - // }, - // }, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/compare-transpose.js b/site/examples/statistics/funnel/demo/compare-transpose.js deleted file mode 100644 index 431d43278..000000000 --- a/site/examples/statistics/funnel/demo/compare-transpose.js +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Funnel } from '@ant-design/plots'; - -const DemoFunnel = () => { - const data = [ - { - stage: '简历筛选', - number: 253, - company: 'A公司', - }, - { - stage: '初试人数', - number: 151, - company: 'A公司', - }, - { - stage: '复试人数', - number: 113, - company: 'A公司', - }, - { - stage: '录取人数', - number: 87, - company: 'A公司', - }, - { - stage: '入职人数', - number: 59, - company: 'A公司', - }, - { - stage: '简历筛选', - number: 303, - company: 'B公司', - }, - { - stage: '初试人数', - number: 251, - company: 'B公司', - }, - { - stage: '复试人数', - number: 153, - company: 'B公司', - }, - { - stage: '录取人数', - number: 117, - company: 'B公司', - }, - { - stage: '入职人数', - number: 79, - company: 'B公司', - }, - ]; - const config = { - data, - xField: 'stage', - yField: 'number', - compareField: 'company', - tooltip: { - // fields: ['stage', 'number', 'company'], - formatter: (v) => ({ - name: `${v.company}的${v.stage}`, - value: v.number, - }), - }, - isTransposed: true, - legend: false, - }; - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/compare.js b/site/examples/statistics/funnel/demo/compare.js deleted file mode 100644 index fea6a89a4..000000000 --- a/site/examples/statistics/funnel/demo/compare.js +++ /dev/null @@ -1,75 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Funnel } from '@ant-design/plots'; - -const DemoFunnel = () => { - const data = [ - { - stage: '简历筛选', - number: 253, - company: 'A公司', - }, - { - stage: '初试人数', - number: 151, - company: 'A公司', - }, - { - stage: '复试人数', - number: 113, - company: 'A公司', - }, - { - stage: '录取人数', - number: 87, - company: 'A公司', - }, - { - stage: '入职人数', - number: 59, - company: 'A公司', - }, - { - stage: '简历筛选', - number: 303, - company: 'B公司', - }, - { - stage: '初试人数', - number: 251, - company: 'B公司', - }, - { - stage: '复试人数', - number: 153, - company: 'B公司', - }, - { - stage: '录取人数', - number: 117, - company: 'B公司', - }, - { - stage: '入职人数', - number: 79, - company: 'B公司', - }, - ]; - const config = { - data, - xField: 'stage', - yField: 'number', - compareField: 'company', - tooltip: { - // fields: ['stage', 'number', 'company'], - formatter: (v) => ({ - name: `${v.company}的${v.stage}`, - value: v.number, - }), - }, - legend: false, - }; - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/facet-transpose.js b/site/examples/statistics/funnel/demo/facet-transpose.js deleted file mode 100644 index 21eadcb6c..000000000 --- a/site/examples/statistics/funnel/demo/facet-transpose.js +++ /dev/null @@ -1,69 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Funnel } from '@ant-design/plots'; - -const DemoFunnel = () => { - const data = [ - { - stage: '简历筛选', - number: 253, - company: 'A公司', - }, - { - stage: '初试人数', - number: 151, - company: 'A公司', - }, - { - stage: '复试人数', - number: 113, - company: 'A公司', - }, - { - stage: '录取人数', - number: 87, - company: 'A公司', - }, - { - stage: '入职人数', - number: 59, - company: 'A公司', - }, - { - stage: '简历筛选', - number: 303, - company: 'B公司', - }, - { - stage: '初试人数', - number: 251, - company: 'B公司', - }, - { - stage: '复试人数', - number: 153, - company: 'B公司', - }, - { - stage: '录取人数', - number: 117, - company: 'B公司', - }, - { - stage: '入职人数', - number: 79, - company: 'B公司', - }, - ]; - const config = { - data, - xField: 'stage', - yField: 'number', - seriesField: 'company', - isTransposed: true, - legend: false, - }; - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/facet.js b/site/examples/statistics/funnel/demo/facet.js deleted file mode 100644 index 9ee03b42a..000000000 --- a/site/examples/statistics/funnel/demo/facet.js +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Funnel } from '@ant-design/plots'; - -const DemoFunnel = () => { - const data = [ - { - stage: '简历筛选', - number: 253, - company: 'A公司', - }, - { - stage: '初试人数', - number: 151, - company: 'A公司', - }, - { - stage: '复试人数', - number: 113, - company: 'A公司', - }, - { - stage: '录取人数', - number: 87, - company: 'A公司', - }, - { - stage: '入职人数', - number: 59, - company: 'A公司', - }, - { - stage: '简历筛选', - number: 303, - company: 'B公司', - }, - { - stage: '初试人数', - number: 251, - company: 'B公司', - }, - { - stage: '复试人数', - number: 153, - company: 'B公司', - }, - { - stage: '录取人数', - number: 117, - company: 'B公司', - }, - { - stage: '入职人数', - number: 79, - company: 'B公司', - }, - ]; - const config = { - data, - xField: 'stage', - yField: 'number', - seriesField: 'company', - legend: false, - }; - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/basic.js b/site/examples/statistics/funnel/demo/funnel.js similarity index 89% rename from site/examples/statistics/funnel/demo/basic.js rename to site/examples/statistics/funnel/demo/funnel.js index 0a051d791..1b05bf79c 100644 --- a/site/examples/statistics/funnel/demo/basic.js +++ b/site/examples/statistics/funnel/demo/funnel.js @@ -15,6 +15,9 @@ const DemoFunnel = () => { data, xField: 'stage', yField: 'number', + label: { + text: (d) => `${d.stage}\n${d.number}`, + }, }; return ; diff --git a/site/examples/statistics/funnel/demo/meta.json b/site/examples/statistics/funnel/demo/meta.json index 90a33bdc4..001d4442a 100644 --- a/site/examples/statistics/funnel/demo/meta.json +++ b/site/examples/statistics/funnel/demo/meta.json @@ -5,68 +5,36 @@ }, "demos": [ { - "filename": "basic.js", + "filename": "funnel.js", "title": { - "zh": "基础漏斗图", - "en": "Basic funnel plot" + "zh": "漏斗图", + "en": "Funnel" }, - "screenshot": "https://gw.alicdn.com/tfs/TB158FxuAT2gK0jSZPcXXcKkpXa-646-500.png" - }, - { - "filename": "static-field.js", - "title": { - "zh": "漏斗图: 使用静态变量", - "en": "Funnel plot - static field" - }, - "screenshot": "https://gw.alicdn.com/tfs/TB158FxuAT2gK0jSZPcXXcKkpXa-646-500.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*6syuS6eMD1AAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "pyramid.js", "title": { - "zh": "尖底漏斗图", - "en": "Pyramid funnel plot" + "zh": "金字塔图", + "en": "Pyramid" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/L88CCTUbpo/9127293d-767c-4a57-8852-e7c27fc4df8d.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*8SagQbsQk6gAAAAAAAAAAAAADmJ7AQ/original" }, { - "filename": "compare.js", + "filename": "mirror-funnel.js", "title": { "zh": "对比漏斗图", - "en": "Compare funnel plot" - }, - "screenshot": "https://gw.alicdn.com/tfs/TB1Y7dtuAL0gK0jSZFtXXXQCXXa-709-495.png" - }, - { - "filename": "facet.js", - "title": { - "zh": "分面漏斗图", - "en": "Facet funnel plot" + "en": "Mirror Funnel" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*Zk1rRJvD8zwAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ejYqRJVJ12gAAAAAAAAAAAAADmJ7AQ/original" }, { - "filename": "basic-transpose.js", + "filename": "transpose.js", "title": { - "zh": "基础漏斗图-转置", - "en": "Funnel plot-transpose" + "zh": "转化漏斗图-转置", + "en": "Annotation Funnel transpose" }, "screenshot": "https://gw.alicdn.com/tfs/TB1EgtsuuT2gK0jSZFvXXXnFXXa-958-591.png" - }, - { - "filename": "compare-transpose.js", - "title": { - "zh": "对比漏斗图-转置", - "en": "Compare funnel plot" - }, - "screenshot": "https://gw.alicdn.com/tfs/TB1Hkluurr1gK0jSZR0XXbP8XXa-1095-565.png" - }, - { - "filename": "facet-transpose.js", - "title": { - "zh": "分面漏斗图-转置", - "en": "Facet funnel plot-transpose" - }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*lbtdRJjZ4qsAAAAAAAAAAAAAARQnAQ" } ] } diff --git a/site/examples/statistics/funnel/demo/mirror-funnel.js b/site/examples/statistics/funnel/demo/mirror-funnel.js new file mode 100644 index 000000000..7049b4dd1 --- /dev/null +++ b/site/examples/statistics/funnel/demo/mirror-funnel.js @@ -0,0 +1,35 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Funnel } from '@ant-design/plots'; + +const DemoFunnel = () => { + const data = [ + { action: '访问', visitor: 500, site: '站点1' }, + { action: '浏览', visitor: 400, site: '站点1' }, + { action: '交互', visitor: 300, site: '站点1' }, + { action: '下单', visitor: 200, site: '站点1' }, + { action: '完成', visitor: 100, site: '站点1' }, + { action: '访问', visitor: 550, site: '站点2' }, + { action: '浏览', visitor: 420, site: '站点2' }, + { action: '交互', visitor: 280, site: '站点2' }, + { action: '下单', visitor: 150, site: '站点2' }, + { action: '完成', visitor: 80, site: '站点2' }, + ]; + + const config = { + data, + xField: 'action', + yField: 'visitor', + compareField: 'site', + style: { + stroke: '#fff', + }, + label: { + text: 'visitor', + }, + legend: false, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/pyramid.js b/site/examples/statistics/funnel/demo/pyramid.js index 795aaa4a7..0509ac91a 100644 --- a/site/examples/statistics/funnel/demo/pyramid.js +++ b/site/examples/statistics/funnel/demo/pyramid.js @@ -4,18 +4,50 @@ import { Funnel } from '@ant-design/plots'; const DemoFunnel = () => { const data = [ - { stage: '简历筛选', number: 253 }, - { stage: '初试人数', number: 151 }, - { stage: '复试人数', number: 113 }, - { stage: '录取人数', number: 87 }, - { stage: '入职人数', number: 59 }, + { action: '浏览网站', pv: 50000 }, + { action: '放入购物车', pv: 35000 }, + { action: '生成订单', pv: 25000 }, + { action: '支付订单', pv: 15000 }, + { action: '完成交易', pv: 8000 }, ]; const config = { data, - xField: 'stage', - yField: 'number', - shape: 'pyramid', + xField: 'action', + yField: 'pv', + shapeField: 'pyramid', + label: [ + { + text: (d) => d.pv, + position: 'inside', + fontSize: 16, + }, + { + render: ($, _, i) => { + if (i) + return ( +
+ ); + }, + position: 'top-right', + }, + { + text: (d, i, data) => { + if (i) return ((d.pv / data[i - 1].pv) * 100).toFixed(2) + '%'; + }, + position: 'top-right', + textAlign: 'left', + textBaseline: 'middle', + dx: 40, + }, + ], }; return ; diff --git a/site/examples/statistics/funnel/demo/static-field.js b/site/examples/statistics/funnel/demo/static-field.js deleted file mode 100644 index e0ddb7396..000000000 --- a/site/examples/statistics/funnel/demo/static-field.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Funnel } from '@ant-design/plots'; - -const DemoFunnel = () => { - const data = [ - { stage: '简历筛选', number: 253 }, - { stage: '初试人数', number: 151 }, - { stage: '复试人数', number: 113 }, - { stage: '录取人数', number: 87 }, - { stage: '入职人数', number: 59 }, - ]; - - const config = { - data: data, - xField: 'stage', - yField: 'number', - legend: false, - label: { - text: (datum) => { - return `${(datum[Funnel.PERCENT_FIELD] * 100).toFixed(2)}%`; - }, - }, - conversionTag: { - text: (datum) => { - return `${((datum[Funnel.CONVERSATION_FIELD][1] / datum[Funnel.CONVERSATION_FIELD][0]) * 100).toFixed(2)}%`; - }, - }, - // 关闭 conversionTag 转化率 展示 - // conversionTag: false, - }; - - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/funnel/demo/transpose.js b/site/examples/statistics/funnel/demo/transpose.js new file mode 100644 index 000000000..a4b32b2d2 --- /dev/null +++ b/site/examples/statistics/funnel/demo/transpose.js @@ -0,0 +1,56 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Funnel } from '@ant-design/plots'; + +const DemoFunnel = () => { + const data = [ + { stage: '简历筛选', number: 253 }, + { stage: '初试人数', number: 151 }, + { stage: '复试人数', number: 113 }, + { stage: '录取人数', number: 87 }, + { stage: '入职人数', number: 59 }, + ]; + + const config = { + data: data, + xField: 'stage', + yField: 'number', + isTransposed: false, + label: [ + { + text: (d) => d.number, + position: 'inside', + fontSize: 16, + }, + { + render: ($, _, i) => { + if (i) + return ( +
+ ); + }, + position: 'top-left', + }, + { + text: (d, i, data) => { + if (i) return ((d.number / data[i - 1].number) * 100).toFixed(2) + '%'; + }, + position: 'top-left', + textAlign: 'middle', + textBaseline: 'bottom', + dy: -30, + }, + ], + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From d208c943f0d6d00915d9347f849fd6682909e763 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 26 Oct 2023 19:39:14 +0800 Subject: [PATCH 084/268] chore: opt treemap (#2152) --- packages/plots/package.json | 2 +- packages/plots/src/core/plots/area/index.ts | 10 ++- packages/plots/src/core/plots/bar/adaptor.ts | 36 ++++++++- packages/plots/src/core/plots/bar/index.ts | 11 ++- packages/plots/src/core/plots/bar/type.ts | 10 ++- packages/plots/src/core/plots/column/index.ts | 2 +- packages/plots/src/core/plots/column/type.ts | 4 +- packages/plots/src/core/plots/line/index.ts | 5 ++ .../plots/src/core/plots/treemap/adaptor.ts | 10 ++- packages/plots/src/core/utils/index.ts | 1 + packages/plots/src/util/is-valid-element.ts | 2 +- .../statistics/bar/demo/background.js | 71 +++++++++++++++++ site/examples/statistics/bar/demo/meta.json | 10 ++- .../statistics/treemap/demo/meta.json | 2 +- .../statistics/treemap/demo/treemap.js | 77 ++++++++++--------- 15 files changed, 202 insertions(+), 51 deletions(-) create mode 100644 site/examples/statistics/bar/demo/background.js diff --git a/packages/plots/package.json b/packages/plots/package.json index ff09ea56b..5c1a3bf3f 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.2", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/plots/area/index.ts b/packages/plots/src/core/plots/area/index.ts index 72a2dbda3..e7c337c7e 100644 --- a/packages/plots/src/core/plots/area/index.ts +++ b/packages/plots/src/core/plots/area/index.ts @@ -14,7 +14,15 @@ export class Area extends Plot { * 供外部使用 */ static getDefaultOptions(): Partial { - return { type: 'view', children: [{ type: 'area' }] }; + return { + type: 'view', + children: [{ type: 'area' }], + interaction: { + tooltip: { + shared: true, + }, + }, + }; } /** diff --git a/packages/plots/src/core/plots/bar/adaptor.ts b/packages/plots/src/core/plots/bar/adaptor.ts index 3407852b8..6e9bcd42f 100644 --- a/packages/plots/src/core/plots/bar/adaptor.ts +++ b/packages/plots/src/core/plots/bar/adaptor.ts @@ -1,6 +1,6 @@ import { mark } from '../../components'; import type { Adaptor } from '../../types'; -import { flow, transformOptions } from '../../utils'; +import { flow, transformOptions, get, isArray } from '../../utils'; import type { BarOptions } from './type'; type Params = Adaptor; @@ -17,5 +17,37 @@ export function adaptor(params: Params) { return params; }; - return flow(init, transformOptions, mark)(params); + /** + * @title 背景图 + * @description 通过新增 interval 实现 + */ + const background = (params: Params) => { + const { options } = params; + const { scale, markBackground, data, children } = options; + const domain = get(scale, 'y.domain', []); + if (markBackground && domain.length && isArray(data)) { + const domainMax = 'domainMax'; + const backgroundData = data.map((item) => { + return { + ...item, + [domainMax]: domain[domain.length - 1], + }; + }); + children.unshift({ + type: 'interval', + data: backgroundData, + yField: domainMax, + tooltip: false, + legend: false, + style: { + fill: '#eee', + }, + label: false, + ...markBackground, + }); + } + return params; + }; + + return flow(init, background, transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/bar/index.ts b/packages/plots/src/core/plots/bar/index.ts index a72592014..00996f5f3 100644 --- a/packages/plots/src/core/plots/bar/index.ts +++ b/packages/plots/src/core/plots/bar/index.ts @@ -14,7 +14,16 @@ export class Bar extends Plot { * 供外部使用 */ static getDefaultOptions(): Partial { - return { type: 'view', children: [{ type: 'interval', coordinate: { transform: [{ type: 'transpose' }] } }] }; + return { + type: 'view', + coordinate: { transform: [{ type: 'transpose' }] }, + children: [{ type: 'interval' }], + interaction: { + tooltip: { + shared: true, + }, + }, + }; } /** diff --git a/packages/plots/src/core/plots/bar/type.ts b/packages/plots/src/core/plots/bar/type.ts index 944559d76..1508d8127 100644 --- a/packages/plots/src/core/plots/bar/type.ts +++ b/packages/plots/src/core/plots/bar/type.ts @@ -1,3 +1,11 @@ import type { BaseOptions, Options } from '../../types/common'; -export type BarOptions = Options & BaseOptions; +type CommonOptions = Options & BaseOptions; + +export type BarOptions = Options & + BaseOptions & { + /** + * @title mark 背景配置 + */ + markBackground?: CommonOptions; + }; diff --git a/packages/plots/src/core/plots/column/index.ts b/packages/plots/src/core/plots/column/index.ts index 20ddd99cb..7196d1b76 100644 --- a/packages/plots/src/core/plots/column/index.ts +++ b/packages/plots/src/core/plots/column/index.ts @@ -1,6 +1,6 @@ import { Plot } from '../../base'; import type { Adaptor } from '../../types'; -import { adaptor } from './adaptor'; +import { adaptor } from '../bar/adaptor'; import { ColumnOptions } from './type'; export type { ColumnOptions }; diff --git a/packages/plots/src/core/plots/column/type.ts b/packages/plots/src/core/plots/column/type.ts index a94dfecb8..1e06f73b1 100644 --- a/packages/plots/src/core/plots/column/type.ts +++ b/packages/plots/src/core/plots/column/type.ts @@ -1,3 +1,3 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { BarOptions } from '../bar/type'; -export type ColumnOptions = Options & BaseOptions; +export type ColumnOptions = BarOptions; diff --git a/packages/plots/src/core/plots/line/index.ts b/packages/plots/src/core/plots/line/index.ts index 112661e21..b705304cb 100644 --- a/packages/plots/src/core/plots/line/index.ts +++ b/packages/plots/src/core/plots/line/index.ts @@ -19,6 +19,11 @@ export class Line extends Plot { scale: { y: { nice: true }, }, + interaction: { + tooltip: { + shared: true, + }, + }, animate: { enter: { type: 'growInX' }, }, diff --git a/packages/plots/src/core/plots/treemap/adaptor.ts b/packages/plots/src/core/plots/treemap/adaptor.ts index 32ab05bc7..788b640f3 100644 --- a/packages/plots/src/core/plots/treemap/adaptor.ts +++ b/packages/plots/src/core/plots/treemap/adaptor.ts @@ -1,6 +1,5 @@ -import { flow, transformOptions } from '../../utils'; +import { flow, transformOptions, set } from '../../utils'; import { mark } from '../../components'; - import type { Adaptor } from '../../types'; import type { TreemapOptions } from './type'; @@ -15,6 +14,13 @@ export function adaptor(params: Params) { * 图表差异化处理 */ const init = (params: Params) => { + const { options } = params; + const { data } = options; + if (data) { + set(options, 'data', { + value: data, + }); + } return params; }; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index b38880236..1572deae2 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -20,6 +20,7 @@ export { includes, map, maxBy, + isObject, } from 'lodash-es'; export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; diff --git a/packages/plots/src/util/is-valid-element.ts b/packages/plots/src/util/is-valid-element.ts index 131c51b9a..2f493857d 100644 --- a/packages/plots/src/util/is-valid-element.ts +++ b/packages/plots/src/util/is-valid-element.ts @@ -1,5 +1,5 @@ export const isValidElement = (jsxCode: string): boolean => { - const jsxRegex = /react(.*?).createElement/gi; + const jsxRegex = /react/i; return jsxRegex.test(jsxCode); }; diff --git a/site/examples/statistics/bar/demo/background.js b/site/examples/statistics/bar/demo/background.js new file mode 100644 index 000000000..5a4b33362 --- /dev/null +++ b/site/examples/statistics/bar/demo/background.js @@ -0,0 +1,71 @@ +import { Bar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { + labelName: '蓝领', + value: 110, + }, + { + labelName: '白领', + value: 220, + }, + { + labelName: '制造业蓝领', + value: 330, + }, + { + labelName: '退休人员', + value: 440, + }, +]; + +const DemoBar = () => { + const config = { + data, + xField: 'labelName', + yField: 'value', + paddingRight: 80, + style: { + maxWidth: 25, + }, + markBackground: { + label: { + text: (d) => { + return `${(d.value / 1000) * 100}% | ${d.value}`; + }, + position: 'right', + dx: 80, + style: { + fill: '#aaa', + fillOpacity: 1, + fontSize: 14, + }, + }, + style: { + fill: '#eee', + }, + }, + scale: { + y: { + domain: [0, 1000], + }, + }, + axis: { + x: { + tick: false, + title: false, + }, + y: { + grid: false, + tick: false, + label: false, + title: false, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bar/demo/meta.json b/site/examples/statistics/bar/demo/meta.json index f992bb570..786dd6952 100644 --- a/site/examples/statistics/bar/demo/meta.json +++ b/site/examples/statistics/bar/demo/meta.json @@ -32,9 +32,17 @@ "filename": "normalized-stacked.js", "title": { "zh": "归一化条形图", - "en": "Normalized Stacked Chart" + "en": "Normalized Bar Chart" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*m6vKSptL6qkAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "background.js", + "title": { + "zh": "背景条形图", + "en": "Background Bar Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*oDkdRodUnXwAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/treemap/demo/meta.json b/site/examples/statistics/treemap/demo/meta.json index dea3d81db..a28a2138b 100644 --- a/site/examples/statistics/treemap/demo/meta.json +++ b/site/examples/statistics/treemap/demo/meta.json @@ -10,7 +10,7 @@ "zh": "矩阵树图", "en": "Treemap Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*BD2zQIr7D5MAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://gw.alipayobjects.com/mdn/rms_f5c722/afts/img/A*Ob1jSbCUl8cAAAAAAAAAAABkARQnAQ" } ] } diff --git a/site/examples/statistics/treemap/demo/treemap.js b/site/examples/statistics/treemap/demo/treemap.js index b7410f2f4..92198a93e 100644 --- a/site/examples/statistics/treemap/demo/treemap.js +++ b/site/examples/statistics/treemap/demo/treemap.js @@ -3,49 +3,52 @@ import React from 'react'; import ReactDOM from 'react-dom'; const DemoTreemap = () => { + const data = { + name: 'root', + children: [ + { name: '分类 1', value: 560 }, + { name: '分类 2', value: 500 }, + { name: '分类 3', value: 150 }, + { name: '分类 4', value: 140 }, + { name: '分类 5', value: 115 }, + { name: '分类 6', value: 95 }, + { name: '分类 7', value: 90 }, + { name: '分类 8', value: 75 }, + { name: '分类 9', value: 98 }, + { name: '分类 10', value: 60 }, + { name: '分类 11', value: 45 }, + { name: '分类 12', value: 40 }, + { name: '分类 13', value: 40 }, + { name: '分类 14', value: 35 }, + { name: '分类 15', value: 40 }, + { name: '分类 16', value: 40 }, + { name: '分类 17', value: 40 }, + { name: '分类 18', value: 30 }, + { name: '分类 19', value: 28 }, + { name: '分类 20', value: 16 }, + ], + }; const config = { - width: 1100, - height: 900, - autoFit: false, - data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/flare-treemap.json", - }, - valueField: 'size', - colorField: (d) => d.parent.data.name.split(".")[1], - layout: { - // - path: (d) => d.name.replace(/\./g, "/"), - // treemapBinary、treemapDice、treemapSlice、treemapSliceDice、treemapSquarify、treemapResquarify - tile: "treemapBinary", - paddingInner: 1, - }, - meta: { + data, + colorField: 'value', + valueField: 'value', + scale: { color: { range: [ - "#4e79a7", - "#f28e2c", - "#e15759", - "#76b7b2", - "#59a14f", - "#edc949", - "#af7aa1", - "#ff9da7", - "#9c755f", - "#bab0ab", + '#4e79a7', + '#f28e2c', + '#e15759', + '#76b7b2', + '#59a14f', + '#edc949', + '#af7aa1', + '#ff9da7', + '#9c755f', + '#bab0ab', ], }, }, - style: { - labelText: (d) => - d.data.name - .split(".") - .pop() - .split(/(?=[A-Z][a-z])/g)[0], - labelFill: "#000", - labelPosition: "top-left", - fillOpacity: 0.5, - }, + legend: false, }; return ; }; From f9cea69c06a3545c066d18db3c6fe186e6d7f116 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 2 Nov 2023 15:05:06 +0800 Subject: [PATCH 085/268] chore: opt config (#2158) --- packages/plots/src/core/plots/area/index.ts | 3 +++ packages/plots/src/core/plots/bar/index.ts | 3 +++ .../plots/src/core/plots/bullet/adaptor.ts | 21 ++++++++++++------- packages/plots/src/core/plots/bullet/index.ts | 9 +++----- packages/plots/src/core/plots/column/index.ts | 5 +++++ site/package.json | 2 +- 6 files changed, 29 insertions(+), 14 deletions(-) diff --git a/packages/plots/src/core/plots/area/index.ts b/packages/plots/src/core/plots/area/index.ts index e7c337c7e..07f739a33 100644 --- a/packages/plots/src/core/plots/area/index.ts +++ b/packages/plots/src/core/plots/area/index.ts @@ -17,6 +17,9 @@ export class Area extends Plot { return { type: 'view', children: [{ type: 'area' }], + scale: { + y: { nice: true }, + }, interaction: { tooltip: { shared: true, diff --git a/packages/plots/src/core/plots/bar/index.ts b/packages/plots/src/core/plots/bar/index.ts index 00996f5f3..5aa4936d5 100644 --- a/packages/plots/src/core/plots/bar/index.ts +++ b/packages/plots/src/core/plots/bar/index.ts @@ -18,6 +18,9 @@ export class Bar extends Plot { type: 'view', coordinate: { transform: [{ type: 'transpose' }] }, children: [{ type: 'interval' }], + scale: { + y: { nice: true }, + }, interaction: { tooltip: { shared: true, diff --git a/packages/plots/src/core/plots/bullet/adaptor.ts b/packages/plots/src/core/plots/bullet/adaptor.ts index 3fb4639cb..8dc0715d8 100644 --- a/packages/plots/src/core/plots/bullet/adaptor.ts +++ b/packages/plots/src/core/plots/bullet/adaptor.ts @@ -46,7 +46,7 @@ function getTransformData(data: any[], field: string, xField: string, isSort = t * @returns string[] */ function getFieldColor(maxSize: number, color: string | string[]) { - return new Array(maxSize).fill('').map((d, i) => isArray(color) ? color[i % color.length] : color); + return new Array(maxSize).fill('').map((d, i) => (isArray(color) ? color[i % color.length] : color)); } /** @@ -58,12 +58,20 @@ export function adaptor(params: Params) { * 图表差异化处理 */ const init = (params: Params) => { - const { color, rangeField = 'ranges', measureField = 'measures', targetField = 'targets', xField = 'title', mapField, data } = params.options; + const { + color, + rangeField = 'ranges', + measureField = 'measures', + targetField = 'targets', + xField = 'title', + mapField, + data, + } = params.options; // 数据进行拍平 const [rangesData, rangesMaxSize] = getTransformData(data, rangeField, xField); const [measuresData, measuresMaxSize] = getTransformData(data, measureField, xField, false); - const [targetsData, targetsMaxSize] = getTransformData(data, targetField, xField); + const [targetsData, targetsMaxSize] = getTransformData(data, targetField, xField, false); // 获取颜色 const rangesColor = get(color, [rangeField], DEFAULT_COLORS[0]); @@ -129,13 +137,13 @@ export function adaptor(params: Params) { target.shapeField = 'hyphen'; target.labels[0] = { text: target.labels[0].text, - position: "bottom", + position: 'bottom', dy: -5, }; } return params; - } + }; /** * range、measure、target 配置适配 @@ -146,8 +154,7 @@ export function adaptor(params: Params) { const { range = {}, measure = {}, target = {}, children } = params.options; params.options.children = [range, measure, target].map((c, i) => deepAssign(children[i], c)); return params; - } - + }; return flow(init, layoutAdaptor, cfgAdaptor, coordinateLayout, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/bullet/index.ts b/packages/plots/src/core/plots/bullet/index.ts index edc2f70d0..d300db2e3 100644 --- a/packages/plots/src/core/plots/bullet/index.ts +++ b/packages/plots/src/core/plots/bullet/index.ts @@ -25,7 +25,7 @@ export class Bullet extends Plot { legend: { color: { itemMarker: (d) => { - return d === "target" ? "line" : "square"; + return d === 'target' ? 'line' : 'square'; }, }, }, @@ -39,17 +39,14 @@ export class Bullet extends Plot { type: 'interval', style: { maxWidth: 20 }, transform: [{ type: 'stackY' }], - labels: [{ text: "measures", position: "inside" }], }, { type: 'point', - encode: { size: 8, shape: "line" }, - tooltip: { title: false, items: [{ channel: "y" }] }, - labels: [{ text: "targets", position: "right", textAlign: 'left', dx: 5 }], + encode: { size: 8, shape: 'line' }, }, ], interaction: { tooltip: { shared: true } }, - coordinate: { transform: [{ type: "transpose" }] }, + coordinate: { transform: [{ type: 'transpose' }] }, }; } diff --git a/packages/plots/src/core/plots/column/index.ts b/packages/plots/src/core/plots/column/index.ts index 7196d1b76..6f73e042e 100644 --- a/packages/plots/src/core/plots/column/index.ts +++ b/packages/plots/src/core/plots/column/index.ts @@ -19,6 +19,11 @@ export class Column extends Plot { scale: { y: { nice: true }, }, + interaction: { + tooltip: { + shared: true, + }, + }, children: [ { type: 'interval', diff --git a/site/package.json b/site/package.json index ddf41b5d0..f7150f5da 100644 --- a/site/package.json +++ b/site/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@ant-design/charts-site", - "version": "2.0.0-alpha.0", + "version": "2.0.0-beta.2", "description": "React Visual component library", "keywords": [ "antv", From 3d5f8cecbf53649d5d1d32a6366462f333394e8c Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 6 Nov 2023 18:05:04 +0800 Subject: [PATCH 086/268] chore: default options (#2159) --- packages/plots/src/core/plots/area/index.ts | 4 ++++ packages/plots/src/core/plots/bar/index.ts | 4 ++++ packages/plots/src/core/plots/box/index.ts | 16 ++++++++++------ packages/plots/src/core/plots/bullet/adaptor.ts | 5 ----- packages/plots/src/core/plots/bullet/index.ts | 6 +++++- packages/plots/src/core/plots/column/index.ts | 4 ++++ packages/plots/src/core/plots/dual-axes/index.ts | 8 +++++++- packages/plots/src/core/plots/histogram/index.ts | 4 ++++ packages/plots/src/core/plots/line/index.ts | 4 ++++ packages/plots/src/core/plots/scatter/index.ts | 7 +++++++ 10 files changed, 49 insertions(+), 13 deletions(-) diff --git a/packages/plots/src/core/plots/area/index.ts b/packages/plots/src/core/plots/area/index.ts index 07f739a33..979e8f3f7 100644 --- a/packages/plots/src/core/plots/area/index.ts +++ b/packages/plots/src/core/plots/area/index.ts @@ -20,6 +20,10 @@ export class Area extends Plot { scale: { y: { nice: true }, }, + axis: { + y: { title: false }, + x: { title: false }, + }, interaction: { tooltip: { shared: true, diff --git a/packages/plots/src/core/plots/bar/index.ts b/packages/plots/src/core/plots/bar/index.ts index 5aa4936d5..e6d03e976 100644 --- a/packages/plots/src/core/plots/bar/index.ts +++ b/packages/plots/src/core/plots/bar/index.ts @@ -21,6 +21,10 @@ export class Bar extends Plot { scale: { y: { nice: true }, }, + axis: { + y: { title: false }, + x: { title: false }, + }, interaction: { tooltip: { shared: true, diff --git a/packages/plots/src/core/plots/box/index.ts b/packages/plots/src/core/plots/box/index.ts index a9863a9e4..757733df7 100644 --- a/packages/plots/src/core/plots/box/index.ts +++ b/packages/plots/src/core/plots/box/index.ts @@ -11,21 +11,25 @@ export class Box extends Plot { public type = 'box'; /** - * 获取 折线图 默认配置项 + * 获取箱线图默认配置项 * 供外部使用 */ static getDefaultOptions(): Partial { return { type: 'view', children: [{ type: 'box' }], + axis: { + y: { title: false }, + x: { title: false }, + }, // 默认 tooltip tooltip: { items: [ - { name: "min", channel: "y" }, - { name: "q1", channel: "y1" }, - { name: "q2", channel: "y2" }, - { name: "q3", channel: "y3" }, - { name: "max", channel: "y4" }, + { name: 'min', channel: 'y' }, + { name: 'q1', channel: 'y1' }, + { name: 'q2', channel: 'y2' }, + { name: 'q3', channel: 'y3' }, + { name: 'max', channel: 'y4' }, ], }, }; diff --git a/packages/plots/src/core/plots/bullet/adaptor.ts b/packages/plots/src/core/plots/bullet/adaptor.ts index 8dc0715d8..d1447eb05 100644 --- a/packages/plots/src/core/plots/bullet/adaptor.ts +++ b/packages/plots/src/core/plots/bullet/adaptor.ts @@ -135,11 +135,6 @@ export function adaptor(params: Params) { if (layout !== 'horizontal') { const target = params.options.children[2]; target.shapeField = 'hyphen'; - target.labels[0] = { - text: target.labels[0].text, - position: 'bottom', - dy: -5, - }; } return params; diff --git a/packages/plots/src/core/plots/bullet/index.ts b/packages/plots/src/core/plots/bullet/index.ts index d300db2e3..fd956d6a4 100644 --- a/packages/plots/src/core/plots/bullet/index.ts +++ b/packages/plots/src/core/plots/bullet/index.ts @@ -29,11 +29,15 @@ export class Bullet extends Plot { }, }, }, + axis: { + y: { title: false }, + x: { title: false }, + }, children: [ { type: 'interval', style: { maxWidth: 30 }, - axis: { y: { grid: true, gridLineWidth: 2 }, x: { title: false } }, + axis: { y: { grid: true, gridLineWidth: 2 } }, }, { type: 'interval', diff --git a/packages/plots/src/core/plots/column/index.ts b/packages/plots/src/core/plots/column/index.ts index 6f73e042e..d8b2240ad 100644 --- a/packages/plots/src/core/plots/column/index.ts +++ b/packages/plots/src/core/plots/column/index.ts @@ -24,6 +24,10 @@ export class Column extends Plot { shared: true, }, }, + axis: { + y: { title: false }, + x: { title: false }, + }, children: [ { type: 'interval', diff --git a/packages/plots/src/core/plots/dual-axes/index.ts b/packages/plots/src/core/plots/dual-axes/index.ts index 65441aa4e..a5c0e9d83 100644 --- a/packages/plots/src/core/plots/dual-axes/index.ts +++ b/packages/plots/src/core/plots/dual-axes/index.ts @@ -14,7 +14,13 @@ export class DualAxes extends Plot { * 供外部使用 */ static getDefaultOptions(): Partial { - return { type: 'view' }; + return { + type: 'view', + axis: { + y: { title: false }, + x: { title: false }, + }, + }; } /** diff --git a/packages/plots/src/core/plots/histogram/index.ts b/packages/plots/src/core/plots/histogram/index.ts index a12312ec7..1e2aac0fb 100644 --- a/packages/plots/src/core/plots/histogram/index.ts +++ b/packages/plots/src/core/plots/histogram/index.ts @@ -17,6 +17,10 @@ export class Histogram extends Plot { return { type: 'view', autoFit: true, + axis: { + y: { title: false }, + x: { title: false }, + }, children: [ { type: 'rect', diff --git a/packages/plots/src/core/plots/line/index.ts b/packages/plots/src/core/plots/line/index.ts index b705304cb..1a8628d37 100644 --- a/packages/plots/src/core/plots/line/index.ts +++ b/packages/plots/src/core/plots/line/index.ts @@ -24,6 +24,10 @@ export class Line extends Plot { shared: true, }, }, + axis: { + y: { title: false }, + x: { title: false }, + }, animate: { enter: { type: 'growInX' }, }, diff --git a/packages/plots/src/core/plots/scatter/index.ts b/packages/plots/src/core/plots/scatter/index.ts index 8f0dafcfa..747cfd162 100644 --- a/packages/plots/src/core/plots/scatter/index.ts +++ b/packages/plots/src/core/plots/scatter/index.ts @@ -16,6 +16,13 @@ export class Scatter extends Plot { */ static getDefaultOptions(): Partial { return { + axis: { + y: { title: false }, + x: { title: false }, + }, + legend: { + size: false, + }, children: [{ type: 'point' }], }; } From 179809483e4d0392d65f9f77d8145fc0fe1595af Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 14 Nov 2023 22:45:26 +0800 Subject: [PATCH 087/268] feat: bidirectional bar (#2170) --- packages/plots/package.json | 2 +- .../components/bidirectional-bar/index.tsx | 10 ++ packages/plots/src/components/index.ts | 3 + .../annotation/bidirectional-bar-axis-text.ts | 122 ++++++++++++++++++ packages/plots/src/core/annotation/index.ts | 3 +- packages/plots/src/core/base/index.ts | 10 +- packages/plots/src/core/constants/index.ts | 8 +- packages/plots/src/core/index.ts | 3 + .../core/plots/bidirectional-bar/adaptor.ts | 114 ++++++++++++++++ .../core/plots/bidirectional-bar/constants.ts | 3 + .../src/core/plots/bidirectional-bar/index.ts | 45 +++++++ .../src/core/plots/bidirectional-bar/type.ts | 12 ++ .../plots/src/core/plots/funnel/adaptor.ts | 1 - packages/plots/src/core/utils/index.ts | 1 + .../statistics/bidirectional-bar/API.en.md | 1 + .../statistics/bidirectional-bar/API.zh.md | 1 + .../bidirectional-bar/demo/basic.js | 67 ++++++++++ .../bidirectional-bar/demo/layout.js | 68 ++++++++++ .../bidirectional-bar/demo/meta.json | 24 ++++ .../statistics/bidirectional-bar/index.en.md | 4 + .../statistics/bidirectional-bar/index.zh.md | 6 + site/package.json | 2 +- 22 files changed, 499 insertions(+), 11 deletions(-) create mode 100644 packages/plots/src/components/bidirectional-bar/index.tsx create mode 100644 packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts create mode 100644 packages/plots/src/core/plots/bidirectional-bar/adaptor.ts create mode 100644 packages/plots/src/core/plots/bidirectional-bar/constants.ts create mode 100644 packages/plots/src/core/plots/bidirectional-bar/index.ts create mode 100644 packages/plots/src/core/plots/bidirectional-bar/type.ts create mode 100644 site/examples/statistics/bidirectional-bar/API.en.md create mode 100644 site/examples/statistics/bidirectional-bar/API.zh.md create mode 100644 site/examples/statistics/bidirectional-bar/demo/basic.js create mode 100644 site/examples/statistics/bidirectional-bar/demo/layout.js create mode 100644 site/examples/statistics/bidirectional-bar/demo/meta.json create mode 100644 site/examples/statistics/bidirectional-bar/index.en.md create mode 100644 site/examples/statistics/bidirectional-bar/index.zh.md diff --git a/packages/plots/package.json b/packages/plots/package.json index 5c1a3bf3f..541794ebe 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@antv/event-emitter": "^0.1.3", - "@antv/g2": "^5.1.6", + "@antv/g2": "^5.1.8", "size-sensor": "^1.0.1", "@ant-design/charts-util": "workspace:*" }, diff --git a/packages/plots/src/components/bidirectional-bar/index.tsx b/packages/plots/src/components/bidirectional-bar/index.tsx new file mode 100644 index 000000000..4d39e37f8 --- /dev/null +++ b/packages/plots/src/components/bidirectional-bar/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { BidirectionalBarOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type BidirectionalBarConfig = CommonConfig; + +const BidirectionalBarChart = (props: BidirectionalBarConfig) => ; + +export default BidirectionalBarChart; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index d77cd6359..8a426386f 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -20,6 +20,7 @@ import Gauge from './gauge'; import Liquid from './liquid'; import WordCloud from './wordCloud'; import Treemap from './treemap'; +import BidirectionalBar from './bidirectional-bar'; export type { AreaConfig } from './area'; export type { BarConfig } from './bar'; @@ -42,6 +43,7 @@ export type { GaugeConfig } from './gauge'; export type { LiquidConfig } from './liquid'; export type { WordCloudConfig } from './wordCloud'; export type { TreemapConfig } from './treemap'; +export type { BidirectionalBarConfig } from './bidirectional-bar'; export { Base, @@ -66,4 +68,5 @@ export { Liquid, WordCloud, Treemap, + BidirectionalBar, }; diff --git a/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts b/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts new file mode 100644 index 000000000..f1706bcfb --- /dev/null +++ b/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts @@ -0,0 +1,122 @@ +// @ts-expect-error +import { Text, Polygon, canvas as GCanvas } from '@antv/g'; +// @ts-expect-error +import { Chart, AxisComponent, G2ViewDescriptor } from '@antv/g2'; +import { get, isFunction, uniqBy } from '../utils'; +import { VERTICAL_MARGIN } from '../plots/bidirectional-bar/constants'; + +export type BidirectionalBarAxisTextOptions = AxisComponent; + +export class BidirectionalBarAxisText { + /** canvas 实例 */ + public canvas: GCanvas; + public views: G2ViewDescriptor[]; + public chart: Chart; + public options: BidirectionalBarAxisTextOptions; + public container: Array = []; + + constructor(chart: Chart, options: BidirectionalBarAxisTextOptions) { + if (!options) return; + this.chart = chart; + this.options = options; + this.init(); + } + public getElementsLayout() { + const { layout } = this.options; + const isVertical = layout === 'vertical'; + const elements = this.canvas.document.getElementsByClassName('element'); + const elementsLayout = []; + elements.forEach((element) => { + const bbox = element.getBBox(); + const { x, y, width, height } = bbox; + elementsLayout.push({ + bbox, + x, + y, + width, + height, + data: element['__data__'], + }); + }); + return isVertical ? uniqBy(elementsLayout, 'x') : uniqBy(elementsLayout, 'y'); + } + public getBidirectionalBarAxisTextLayout() { + const { layout } = this.options; + const isVertical = layout === 'vertical'; + const elementsLayout = this.getElementsLayout(); + const textPath = ['title']; + const textLayout = []; + const { width: viewWidth, height: viewHeight } = get(this.views, [0, 'layout']); + elementsLayout.forEach((element) => { + const { x, y, height, width, data } = element; + const text = get(data, textPath); + if (isVertical) { + textLayout.push({ + x: x + width / 2, + y: viewHeight, + text, + }); + } else { + textLayout.push({ + x: viewWidth, + y: y + height / 2, + text, + }); + } + }); + + return textLayout; + } + public init() { + const { canvas, views } = this.chart.getContext(); + this.views = views; + this.canvas = canvas; + this.drawBidirectionalBarAxisText(); + } + public transformLabelStyle(style) { + const removeLabel = {}; + Object.keys(style).forEach((key) => { + if (key.startsWith('label')) { + removeLabel[key.replace('label', '').replace(/^[A-Z]/, (match) => match.toLowerCase())] = style[key]; + } + }); + + return removeLabel; + } + + public drawBidirectionalBarAxisText() { + const axisLayout = this.getBidirectionalBarAxisTextLayout(); + const { + x: { labelFormatter, ...textStyle }, + layout: viewLayout, + } = this.options; + + axisLayout.forEach((layout) => { + const { x, y, text } = layout; + const textNode = new Text({ + style: { + x, + y, + text: isFunction(labelFormatter) ? labelFormatter(text) : text, + fontSize: 12, + textBaseline: 'middle', + textAlign: 'center', + fill: '#000', + wordWrap: true, + wordWrapWidth: viewLayout === 'horizontal' ? VERTICAL_MARGIN * 2 : 120, + maxLines: 2, + textOverflow: 'ellipsis', + ...this.transformLabelStyle(textStyle), + }, + }); + this.canvas.appendChild(textNode); + this.container.push(textNode); + }); + } + public update(options: BidirectionalBarAxisTextOptions) {} + public destroy() { + this.container.forEach((child) => { + child.destroy(); + }); + } +} diff --git a/packages/plots/src/core/annotation/index.ts b/packages/plots/src/core/annotation/index.ts index b50f98cf1..29feada5f 100644 --- a/packages/plots/src/core/annotation/index.ts +++ b/packages/plots/src/core/annotation/index.ts @@ -1,3 +1,4 @@ import { ConversionTag } from './conversion-tag'; +import { BidirectionalBarAxisText } from './bidirectional-bar-axis-text'; -export const Annotaion = { ConversionTag }; +export const Annotaion = { ConversionTag, BidirectionalBarAxisText }; diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index cb403c697..58429432a 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -116,13 +116,13 @@ export abstract class Plot extends EE { */ public annotations(): void { ANNOTATION_LIST.forEach((annotation) => { - const { type, shape } = annotation; - const annotationOptions = this.options[type]; - if (ANNOTATION_MAP.has(type)) { - ANNOTATION_MAP.get(type).destroy(); + const { key, shape } = annotation; + const annotationOptions = this.options[key]; + if (ANNOTATION_MAP.has(key)) { + ANNOTATION_MAP.get(key).destroy(); } if (annotationOptions) { - ANNOTATION_MAP.set(type, new Annotaion[shape](this.chart, annotationOptions)); + ANNOTATION_MAP.set(key, new Annotaion[shape](this.chart, annotationOptions)); } }); } diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 9471ee297..a7f3f35bd 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -28,7 +28,7 @@ export const CHART_OPTIONS = [ ]; /** 最终透传给 G2 Spec 的保留字 */ -export const RESERVED_KEYS = ['data', 'type', 'children']; +export const RESERVED_KEYS = ['data', 'type', 'children', 'direction']; /** 特殊标识,用于标识改配置来自于转换逻辑,而非用户配置 */ export const TRANSFORM_SIGN = '__transform__'; @@ -253,7 +253,11 @@ export const SPECIAL_OPTIONS = [ export const ANNOTATION_LIST = [ { - type: 'conversionTag', + key: 'conversionTag', shape: 'ConversionTag', }, + { + key: 'axis', + shape: 'BidirectionalBarAxisText', + }, ]; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index dff5581bd..ee1d1929b 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -24,6 +24,7 @@ export type { GaugeOptions } from './plots/gauge'; export type { LiquidOptions } from './plots/liquid'; export type { WordCloudOptions } from './plots/wordCloud'; export type { TreemapOptions } from './plots/treemap'; +export type { BidirectionalBarOptions } from './plots/bidirectional-bar'; export * from './types'; import { Base } from './plots/base'; @@ -52,6 +53,7 @@ import { Gauge } from './plots/gauge'; import { Liquid } from './plots/liquid'; import { WordCloud } from './plots/wordCloud'; import { Treemap } from './plots/treemap'; +import { BidirectionalBar } from './plots/bidirectional-bar'; export const Plots = { Base, @@ -80,4 +82,5 @@ export const Plots = { Liquid, WordCloud, Treemap, + BidirectionalBar, }; diff --git a/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts b/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts new file mode 100644 index 000000000..71f068531 --- /dev/null +++ b/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts @@ -0,0 +1,114 @@ +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import { flow, transformOptions, set, isArray, omit, get } from '../../utils'; +import { HORIZONTAL_MARGIN, AXIS_LABEL_PADDING, VERTICAL_MARGIN } from './constants'; +import type { BidirectionalBarOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** 除了 yFiled Array 的情况 */ + const field = (params: Params) => { + const { options } = params; + const { yField, children } = options; + if (isArray(yField)) { + children.forEach((child, index) => { + set(child, 'yField', yField[index] || yField[0]); + }); + } + return params; + }; + + /** data 拆分 */ + const data = (params: Params) => { + const { options } = params; + const { yField, children, data } = options; + const transformData = isArray(get(data, [0])) ? data : [data, data]; + children.forEach((child, index) => { + set(child, 'data', [...transformData[index].map((item) => ({ groupKey: yField[index], ...item }))]); + }); + return params; + }; + + /** 内置 Tooltip 逻辑 */ + const tooltip = (params: Params) => { + const { options } = params; + const { + yField: [y1, y2], + tooltip, + } = options; + if (!tooltip) { + set(options, 'tooltip', { + items: [ + { + field: y1, + value: y1, + }, + { + field: y2, + value: y2, + }, + ], + }); + } + return params; + }; + + /** 根据 layout 调整配置 */ + const layout = (params: Params) => { + const { options } = params; + const { + children, + layout, + coordinate: { transform }, + paddingBottom = AXIS_LABEL_PADDING, + paddingLeft = AXIS_LABEL_PADDING, + } = options; + set(options, 'axis.layout', layout); + const [child1, child2] = children; + if (layout === 'vertical') { + set(options, 'direction', 'col'); + set(options, 'paddingLeft', paddingLeft); + set( + options, + 'coordinate.transform', + transform.filter((item) => item.type !== 'transpose'), + ); + set(child1, 'paddingBottom', HORIZONTAL_MARGIN); + set(child2, 'paddingTop', HORIZONTAL_MARGIN); + set(child2, 'axis', { + x: { + position: 'top', + }, + }); + set(child2, 'scale', { + y: { + range: [0, 1], + }, + }); + } else { + set(options, 'paddingBottom', paddingBottom); + set(child1, 'scale', { + y: { + range: [0, 1], + }, + }); + const { paddingRight = VERTICAL_MARGIN } = child1; + const { paddingLeft = VERTICAL_MARGIN } = child2; + set(child1, 'paddingRight', paddingRight); + set(child1, 'axis', { + x: { + position: 'right', + }, + }); + set(child2, 'paddingLeft', paddingLeft); + } + return params; + }; + + return flow(field, data, tooltip, layout, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/bidirectional-bar/constants.ts b/packages/plots/src/core/plots/bidirectional-bar/constants.ts new file mode 100644 index 000000000..dac336715 --- /dev/null +++ b/packages/plots/src/core/plots/bidirectional-bar/constants.ts @@ -0,0 +1,3 @@ +export const VERTICAL_MARGIN = 32; +export const HORIZONTAL_MARGIN = 16; +export const AXIS_LABEL_PADDING = 48; diff --git a/packages/plots/src/core/plots/bidirectional-bar/index.ts b/packages/plots/src/core/plots/bidirectional-bar/index.ts new file mode 100644 index 000000000..3e4f872a4 --- /dev/null +++ b/packages/plots/src/core/plots/bidirectional-bar/index.ts @@ -0,0 +1,45 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { BidirectionalBarOptions } from './type'; + +export type { BidirectionalBarOptions }; + +export class BidirectionalBar extends Plot { + /** 图表类型 */ + public type = 'BidirectionalBar'; + + static getDefaultOptions(): Partial { + return { + type: 'spaceFlex', + coordinate: { transform: [{ type: 'transpose' }] }, + scale: { + y: { nice: true }, + }, + xAxisLabelText: true, + direction: 'row', + layout: 'horizontal', + axis: { + y: { + title: false, + labelFormatter: (item: number) => Math.abs(item), + }, + x: { title: false, label: false }, + }, + children: [ + { + type: 'interval', + }, + { type: 'interval' }, + ], + }; + } + + protected getDefaultOptions() { + return BidirectionalBar.getDefaultOptions(); + } + + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/bidirectional-bar/type.ts b/packages/plots/src/core/plots/bidirectional-bar/type.ts new file mode 100644 index 000000000..ca0ad0a4a --- /dev/null +++ b/packages/plots/src/core/plots/bidirectional-bar/type.ts @@ -0,0 +1,12 @@ +import type { BaseOptions, Options } from '../../types/common'; + +type CommonOptions = Options & BaseOptions; + +export type BidirectionalBarOptions = Options & + BaseOptions & { + /** + * @title 布局 + * @default "vertical" + */ + layout: 'vertical' | 'horizontal'; + }; diff --git a/packages/plots/src/core/plots/funnel/adaptor.ts b/packages/plots/src/core/plots/funnel/adaptor.ts index 642cd73d2..b0494261e 100644 --- a/packages/plots/src/core/plots/funnel/adaptor.ts +++ b/packages/plots/src/core/plots/funnel/adaptor.ts @@ -60,7 +60,6 @@ export function adaptor(params: Params) { set(options, 'type', 'spaceFlex'); set(options, 'ratio', [1, 1]); set(options, 'direction', isTransposed ? 'row' : 'col'); - // @ts-expect-error delete options['seriesField']; } diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 1572deae2..a3be99eb1 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -21,6 +21,7 @@ export { map, maxBy, isObject, + uniqBy, } from 'lodash-es'; export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; diff --git a/site/examples/statistics/bidirectional-bar/API.en.md b/site/examples/statistics/bidirectional-bar/API.en.md new file mode 100644 index 000000000..f53fad132 --- /dev/null +++ b/site/examples/statistics/bidirectional-bar/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/bidirectional-bar/API.zh.md b/site/examples/statistics/bidirectional-bar/API.zh.md new file mode 100644 index 000000000..0d3236c88 --- /dev/null +++ b/site/examples/statistics/bidirectional-bar/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/bidirectional-bar/demo/basic.js b/site/examples/statistics/bidirectional-bar/demo/basic.js new file mode 100644 index 000000000..62747e5ac --- /dev/null +++ b/site/examples/statistics/bidirectional-bar/demo/basic.js @@ -0,0 +1,67 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { BidirectionalBar } from '@ant-design/plots'; + +const DemoBidirectionalBar = () => { + const data = [ + { + country: '乌拉圭', + '2016年耕地总面积': 13.4, + '2016年转基因种植面积': 12.3, + }, + { + country: '巴拉圭', + '2016年耕地总面积': 14.4, + '2016年转基因种植面积': 6.3, + }, + { + country: '南非', + '2016年耕地总面积': 18.4, + '2016年转基因种植面积': 8.3, + }, + { + country: '巴基斯坦', + '2016年耕地总面积': 34.4, + '2016年转基因种植面积': 13.8, + }, + { + country: '阿根廷', + '2016年耕地总面积': 44.4, + '2016年转基因种植面积': 19.5, + }, + { + country: '巴西', + '2016年耕地总面积': 24.4, + '2016年转基因种植面积': 18.8, + }, + { + country: '加拿大', + '2016年耕地总面积': 54.4, + '2016年转基因种植面积': 24.7, + }, + { + country: '中国', + '2016年耕地总面积': 104.4, + '2016年转基因种植面积': 5.3, + }, + { + country: '美国', + '2016年耕地总面积': 165.2, + '2016年转基因种植面积': 72.9, + }, + ]; + const config = { + data, + xField: 'country', + yField: ['2016年耕地总面积', '2016年转基因种植面积'], + style: { + fill: (d) => { + if (d.groupKey === '2016年转基因种植面积') return '#64DAAB'; + return '#6395FA'; + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bidirectional-bar/demo/layout.js b/site/examples/statistics/bidirectional-bar/demo/layout.js new file mode 100644 index 000000000..72dc3afd9 --- /dev/null +++ b/site/examples/statistics/bidirectional-bar/demo/layout.js @@ -0,0 +1,68 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { BidirectionalBar } from '@ant-design/plots'; + +const DemoBidirectionalBar = () => { + const data = [ + { + country: '乌拉圭', + '2016年耕地总面积': 13.4, + '2016年转基因种植面积': 12.3, + }, + { + country: '巴拉圭', + '2016年耕地总面积': 14.4, + '2016年转基因种植面积': 6.3, + }, + { + country: '南非', + '2016年耕地总面积': 18.4, + '2016年转基因种植面积': 8.3, + }, + { + country: '巴基斯坦', + '2016年耕地总面积': 34.4, + '2016年转基因种植面积': 13.8, + }, + { + country: '阿根廷', + '2016年耕地总面积': 44.4, + '2016年转基因种植面积': 19.5, + }, + { + country: '巴西', + '2016年耕地总面积': 24.4, + '2016年转基因种植面积': 18.8, + }, + { + country: '加拿大', + '2016年耕地总面积': 54.4, + '2016年转基因种植面积': 24.7, + }, + { + country: '中国', + '2016年耕地总面积': 104.4, + '2016年转基因种植面积': 5.3, + }, + { + country: '美国', + '2016年耕地总面积': 165.2, + '2016年转基因种植面积': 72.9, + }, + ]; + const config = { + data, + xField: 'country', + layout: 'vertical', + style: { + fill: (d) => { + if (d.groupKey === '2016年转基因种植面积') return '#64DAAB'; + return '#6395FA'; + }, + }, + yField: ['2016年耕地总面积', '2016年转基因种植面积'], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bidirectional-bar/demo/meta.json b/site/examples/statistics/bidirectional-bar/demo/meta.json new file mode 100644 index 000000000..11ca371c0 --- /dev/null +++ b/site/examples/statistics/bidirectional-bar/demo/meta.json @@ -0,0 +1,24 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "对称条形图", + "en": "Bidirectional Bar Chart" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*9wdPQIJyXdoAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "layout.js", + "title": { + "zh": "垂直对称条形图", + "en": "Vertical Bidirectional Bar Chart" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*dpEiSZht_1AAAAAAAAAAAAAAARQnAQ" + } + ] +} diff --git a/site/examples/statistics/bidirectional-bar/index.en.md b/site/examples/statistics/bidirectional-bar/index.en.md new file mode 100644 index 000000000..89ee9ca7b --- /dev/null +++ b/site/examples/statistics/bidirectional-bar/index.en.md @@ -0,0 +1,4 @@ +--- +title: BidirectionalBar +order: 2 +--- diff --git a/site/examples/statistics/bidirectional-bar/index.zh.md b/site/examples/statistics/bidirectional-bar/index.zh.md new file mode 100644 index 000000000..5be7865ac --- /dev/null +++ b/site/examples/statistics/bidirectional-bar/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 对称条形图 +order: 2 +--- + + diff --git a/site/package.json b/site/package.json index f7150f5da..0d816d8fd 100644 --- a/site/package.json +++ b/site/package.json @@ -32,7 +32,7 @@ "@types/react": "^16.14.8", "@types/react-dom": "^16.9.13", "cross-env": "^7.0.3", - "dumi": "^2.1.11", + "dumi": "^2.1.14", "fecha": "^4.2.3", "gh-pages": "^2.1.1", "typedoc": "^0.17.6", From 0834952de135eca98aed20c57bb6c97ec70186ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=83=E9=B1=BC?= <48511770+leffy-yan@users.noreply.github.com> Date: Thu, 16 Nov 2023 14:56:53 +0800 Subject: [PATCH 088/268] develop violin plot (#2176) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: violin plot * feat: 封装violin API * fix: delete useEffect * fix: delete .editor * fix: ignore .vscode * fix: delete .vscode & delete init * feat: ignore .vscode * fix: open api xField yField seriesField * fix: lint --------- Co-authored-by: zy371123 Co-authored-by: Joel Alan <31396322+lxfu1@users.noreply.github.com> --- .gitignore | 1 + packages/plots/src/components/index.ts | 3 ++ .../plots/src/components/violin/index.tsx | 12 +++++ packages/plots/src/core/base/index.ts | 2 - packages/plots/src/core/index.ts | 3 ++ .../plots/src/core/plots/violin/adaptor.ts | 49 ++++++++++++++++++ .../plots/src/core/plots/violin/index.tsx | 51 +++++++++++++++++++ packages/plots/src/core/plots/violin/type.ts | 5 ++ .../src/core/utils/delete-custom-keys.ts | 4 +- packages/plots/src/hooks/useChart.ts | 1 + site/examples/statistics/violin/demo/basic.js | 19 +++++++ .../statistics/violin/demo/density.js | 19 +++++++ .../examples/statistics/violin/demo/meta.json | 32 ++++++++++++ site/examples/statistics/violin/demo/polar.js | 19 +++++++ site/examples/statistics/violin/index.en.md | 4 ++ site/examples/statistics/violin/index.zh.md | 4 ++ 16 files changed, 224 insertions(+), 4 deletions(-) create mode 100644 packages/plots/src/components/violin/index.tsx create mode 100644 packages/plots/src/core/plots/violin/adaptor.ts create mode 100644 packages/plots/src/core/plots/violin/index.tsx create mode 100644 packages/plots/src/core/plots/violin/type.ts create mode 100644 site/examples/statistics/violin/demo/basic.js create mode 100644 site/examples/statistics/violin/demo/density.js create mode 100644 site/examples/statistics/violin/demo/meta.json create mode 100644 site/examples/statistics/violin/demo/polar.js create mode 100644 site/examples/statistics/violin/index.en.md create mode 100644 site/examples/statistics/violin/index.zh.md diff --git a/.gitignore b/.gitignore index 33f664b2b..b06fb9636 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ logs #ide .idea/ .eslintcache +.vscode/** # temp temp-gallery.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 8a426386f..1044a9f7d 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -20,6 +20,7 @@ import Gauge from './gauge'; import Liquid from './liquid'; import WordCloud from './wordCloud'; import Treemap from './treemap'; +import Violin from './violin'; import BidirectionalBar from './bidirectional-bar'; export type { AreaConfig } from './area'; @@ -43,6 +44,7 @@ export type { GaugeConfig } from './gauge'; export type { LiquidConfig } from './liquid'; export type { WordCloudConfig } from './wordCloud'; export type { TreemapConfig } from './treemap'; +export type { ViolinConfig } from './violin'; export type { BidirectionalBarConfig } from './bidirectional-bar'; export { @@ -68,5 +70,6 @@ export { Liquid, WordCloud, Treemap, + Violin, BidirectionalBar, }; diff --git a/packages/plots/src/components/violin/index.tsx b/packages/plots/src/components/violin/index.tsx new file mode 100644 index 000000000..2cca323f2 --- /dev/null +++ b/packages/plots/src/components/violin/index.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import { ViolinOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type ViolinConfig = CommonConfig; + +const ViolinChart = (props: ViolinConfig) => { + return ; +} + +export default ViolinChart; \ No newline at end of file diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 58429432a..d4cb6345f 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -54,7 +54,6 @@ export abstract class Plot extends EE { if (this.type === 'base' || this[SKIP_DEL_CUSTOM_SIGN]) { return { ...this.options, ...this.getChartOptions() }; } - return deleteCustomKeys(omit(this.options, CHART_OPTIONS), true); } @@ -106,7 +105,6 @@ export abstract class Plot extends EE { this.chart.render().then(() => { this.annotations(); }); - // 绑定 this.bindSizeSensor(); } diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index ee1d1929b..514ce3f7e 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -24,6 +24,7 @@ export type { GaugeOptions } from './plots/gauge'; export type { LiquidOptions } from './plots/liquid'; export type { WordCloudOptions } from './plots/wordCloud'; export type { TreemapOptions } from './plots/treemap'; +export type { ViolinOptions } from './plots/violin'; export type { BidirectionalBarOptions } from './plots/bidirectional-bar'; export * from './types'; @@ -53,6 +54,7 @@ import { Gauge } from './plots/gauge'; import { Liquid } from './plots/liquid'; import { WordCloud } from './plots/wordCloud'; import { Treemap } from './plots/treemap'; +import { Violin } from './plots/violin'; import { BidirectionalBar } from './plots/bidirectional-bar'; export const Plots = { @@ -82,5 +84,6 @@ export const Plots = { Liquid, WordCloud, Treemap, + Violin, BidirectionalBar, }; diff --git a/packages/plots/src/core/plots/violin/adaptor.ts b/packages/plots/src/core/plots/violin/adaptor.ts new file mode 100644 index 000000000..b928232f5 --- /dev/null +++ b/packages/plots/src/core/plots/violin/adaptor.ts @@ -0,0 +1,49 @@ +import { flow, transformOptions, set } from '../../utils'; +import { mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { ViolinOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const customTransform = (params: Params) => { + const { options } = params; + const { xField, yField, seriesField, children } = options; + + const newChildren = children?.map((item) => { + return { + ...item, + xField, + yField, + seriesField, + colorField: seriesField, + data: item.type === 'density' ? { + transform: [ + { + type: 'kde', + field: yField, + groupBy: [xField, seriesField], + }, + ], + } : item.data, + } + }).filter((item) => options.violinType !== 'density' || item.type === 'density'); + set(options, 'children', newChildren); + // 默认‘normal’类型数据格式 + if (options.violinType === 'polar') { + set(options, 'coordinate', { type: 'polar'}) + } + // 底层不消费violinType字段。 + set(options, 'violinType', undefined); + return params; + } + + return flow(customTransform, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/violin/index.tsx b/packages/plots/src/core/plots/violin/index.tsx new file mode 100644 index 000000000..4143d09ca --- /dev/null +++ b/packages/plots/src/core/plots/violin/index.tsx @@ -0,0 +1,51 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { ViolinOptions } from './type'; + +export type { ViolinOptions }; + +export class Violin extends Plot { + /** 图表类型 */ + public type = 'violin'; + + /** + * 获取 折线图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + children: [ + { + type: 'density', + sizeField: 'size', + tooltip: false, + }, + { + type: 'boxplot', + shapeField: 'violin', + style: { + opacity: 0.5, + point: false, + }, + }, + ], + animate: { enter: { type: 'fadeIn' } }, + }; + } + + /** + * 获取 折线图 默认配置 + */ + protected getDefaultOptions() { + return Violin.getDefaultOptions(); + } + + /** + * 折线图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/violin/type.ts b/packages/plots/src/core/plots/violin/type.ts new file mode 100644 index 000000000..934b083f5 --- /dev/null +++ b/packages/plots/src/core/plots/violin/type.ts @@ -0,0 +1,5 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type ViolinOptions = Options & BaseOptions & { + violinType?: 'normal' | 'density' | 'polar' +}; diff --git a/packages/plots/src/core/utils/delete-custom-keys.ts b/packages/plots/src/core/utils/delete-custom-keys.ts index 4bac855cf..351fd9ebb 100644 --- a/packages/plots/src/core/utils/delete-custom-keys.ts +++ b/packages/plots/src/core/utils/delete-custom-keys.ts @@ -11,8 +11,8 @@ export const deleteCustomKeys = (options: O, isRender?: boole [...deleteKeys, ...COORDIANTE_OPTIONS].forEach((key) => { delete options[key]; }); - - options.children.forEach((child) => { + // 2023-11-09 对children为空情况做兼容。 + options.children?.forEach((child) => { Object.keys(child).forEach((key) => { if (deleteKeys.includes(key)) { delete child[key]; diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 2fb6c4e88..395ae5b96 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -114,6 +114,7 @@ export default function useChart(ChartC }; }, []); + return { chart, container, diff --git a/site/examples/statistics/violin/demo/basic.js b/site/examples/statistics/violin/demo/basic.js new file mode 100644 index 000000000..b4e915ec1 --- /dev/null +++ b/site/examples/statistics/violin/demo/basic.js @@ -0,0 +1,19 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Violin } from '@ant-design/plots'; + +const DemoViolin = () => { + const config = { + violinType: 'normal', + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/species.json', + }, + xField: 'x', + yField: 'y', + seriesField: 'species' + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/violin/demo/density.js b/site/examples/statistics/violin/demo/density.js new file mode 100644 index 000000000..7b4ca7a67 --- /dev/null +++ b/site/examples/statistics/violin/demo/density.js @@ -0,0 +1,19 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Violin } from '@ant-design/plots'; + +const DemoViolin = () => { + const config = { + violinType: 'density', + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/species.json', + }, + xField: 'x', + yField: 'y', + seriesField: 'species' + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); \ No newline at end of file diff --git a/site/examples/statistics/violin/demo/meta.json b/site/examples/statistics/violin/demo/meta.json new file mode 100644 index 000000000..13159b858 --- /dev/null +++ b/site/examples/statistics/violin/demo/meta.json @@ -0,0 +1,32 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "density.js", + "title": { + "zh": "和密度图", + "en": "Density plot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_lwk8lu/afts/img/A*pctXQbGFiBIAAAAAAAAAAAAADma_AQ/original" + }, + { + "filename": "basic.js", + "title": { + "zh": "基础小提琴图", + "en": "Basic violin plot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_lwk8lu/afts/img/A*vKc6SJjPY40AAAAAAAAAAAAADma_AQ/original" + }, + { + "filename": "polar.js", + "title": { + "zh": "极坐标小提琴图", + "en": "Polar violin plot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_lwk8lu/afts/img/A*LLm1S5RBXGIAAAAAAAAAAAAADma_AQ/original" + } + ] +} diff --git a/site/examples/statistics/violin/demo/polar.js b/site/examples/statistics/violin/demo/polar.js new file mode 100644 index 000000000..283aa9b67 --- /dev/null +++ b/site/examples/statistics/violin/demo/polar.js @@ -0,0 +1,19 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Violin } from '@ant-design/plots'; + +const DemoViolin = () => { + const config = { + violinType: 'polar', + data: { + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/species.json', + }, + xField: 'x', + yField: 'y', + seriesField: 'species' + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/violin/index.en.md b/site/examples/statistics/violin/index.en.md new file mode 100644 index 000000000..15e7a93a7 --- /dev/null +++ b/site/examples/statistics/violin/index.en.md @@ -0,0 +1,4 @@ +--- +title: Violin +order: 15 +--- \ No newline at end of file diff --git a/site/examples/statistics/violin/index.zh.md b/site/examples/statistics/violin/index.zh.md new file mode 100644 index 000000000..71ae5e3d1 --- /dev/null +++ b/site/examples/statistics/violin/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 小提琴图 +order: 15 +--- \ No newline at end of file From c5f65973a1d7bd2034d3afbfa2ce5fde49afb429 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 16 Nov 2023 20:24:51 +0800 Subject: [PATCH 089/268] fix: type&annotations (#2177) * fix: type&annotations * fix: lint * fix: delete log and run lint --- .../annotation/bidirectional-bar-axis-text.ts | 8 ++-- packages/plots/src/core/base/index.ts | 5 +- .../plots/src/core/components/coordinate.ts | 12 ++++- .../src/core/components/coordinateLayout.ts | 8 ++-- packages/plots/src/core/components/index.ts | 2 +- packages/plots/src/core/constants/index.ts | 2 +- packages/plots/src/core/plots/area/adaptor.ts | 9 +--- packages/plots/src/core/plots/area/type.ts | 4 +- packages/plots/src/core/plots/bar/adaptor.ts | 9 +--- packages/plots/src/core/plots/bar/type.ts | 17 +++---- .../core/plots/bidirectional-bar/adaptor.ts | 17 ++++--- .../src/core/plots/bidirectional-bar/index.ts | 1 - .../src/core/plots/bidirectional-bar/type.ts | 23 ++++----- packages/plots/src/core/plots/box/type.ts | 4 +- .../plots/src/core/plots/bullet/adaptor.ts | 5 +- packages/plots/src/core/plots/bullet/type.ts | 34 +++++++------- .../plots/src/core/plots/column/adaptor.ts | 9 +--- packages/plots/src/core/plots/column/index.ts | 10 ---- .../plots/src/core/plots/dual-axes/adaptor.ts | 9 +--- .../plots/src/core/plots/funnel/adaptor.ts | 7 ++- packages/plots/src/core/plots/funnel/type.ts | 11 ++--- .../plots/src/core/plots/gauge/adaptor.ts | 4 +- packages/plots/src/core/plots/gauge/type.ts | 4 +- .../plots/src/core/plots/heatmap/adaptor.ts | 9 +--- .../plots/src/core/plots/heatmap/index.ts | 10 ---- packages/plots/src/core/plots/heatmap/type.ts | 11 ++--- .../plots/src/core/plots/histogram/adaptor.ts | 9 +--- .../plots/src/core/plots/histogram/type.ts | 17 ++++--- packages/plots/src/core/plots/line/adaptor.ts | 9 +--- packages/plots/src/core/plots/line/type.ts | 4 +- packages/plots/src/core/plots/liquid/type.ts | 5 +- packages/plots/src/core/plots/pie/adaptor.ts | 9 +--- packages/plots/src/core/plots/radar/index.ts | 2 +- packages/plots/src/core/plots/radar/type.ts | 4 +- packages/plots/src/core/plots/rose/adaptor.ts | 9 +--- packages/plots/src/core/plots/rose/index.ts | 2 +- packages/plots/src/core/plots/rose/type.ts | 4 +- .../plots/src/core/plots/sankey/adaptor.ts | 9 +--- packages/plots/src/core/plots/sankey/type.ts | 2 +- .../plots/src/core/plots/scatter/adaptor.ts | 9 +--- packages/plots/src/core/plots/scatter/type.ts | 4 +- .../plots/src/core/plots/tiny-area/adaptor.ts | 9 +--- .../plots/src/core/plots/tiny-area/index.ts | 2 +- .../plots/src/core/plots/tiny-area/type.ts | 4 +- .../src/core/plots/tiny-column/adaptor.ts | 9 +--- .../plots/src/core/plots/tiny-column/type.ts | 4 +- .../plots/src/core/plots/tiny-line/adaptor.ts | 9 +--- .../plots/src/core/plots/tiny-line/type.ts | 4 +- .../src/core/plots/tiny-progress/adaptor.ts | 17 ++----- .../src/core/plots/tiny-progress/type.ts | 4 +- .../plots/src/core/plots/tiny-ring/type.ts | 37 +++++++-------- .../plots/src/core/plots/treemap/index.ts | 10 ---- packages/plots/src/core/plots/treemap/type.ts | 4 +- .../plots/src/core/plots/waterfall/adaptor.ts | 13 ++--- .../plots/src/core/plots/waterfall/index.ts | 10 ---- .../plots/src/core/plots/waterfall/type.ts | 18 ++++--- .../plots/src/core/plots/wordCloud/adaptor.ts | 9 +--- .../plots/src/core/plots/wordCloud/type.ts | 4 +- packages/plots/src/core/types/common.ts | 47 +++++++++++++++++-- packages/plots/src/core/types/index.ts | 2 - packages/plots/src/interface.ts | 4 +- .../statistics/column/demo/group-and-stack.js | 23 +++++++++ .../examples/statistics/column/demo/meta.json | 8 ++++ 63 files changed, 258 insertions(+), 335 deletions(-) create mode 100644 site/examples/statistics/column/demo/group-and-stack.js diff --git a/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts b/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts index f1706bcfb..40410a439 100644 --- a/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts +++ b/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts @@ -75,8 +75,9 @@ export class BidirectionalBarAxisText { } public transformLabelStyle(style) { const removeLabel = {}; + const reg = /^label[A-Z]/; Object.keys(style).forEach((key) => { - if (key.startsWith('label')) { + if (reg.test(key)) { removeLabel[key.replace('label', '').replace(/^[A-Z]/, (match) => match.toLowerCase())] = style[key]; } }); @@ -86,10 +87,7 @@ export class BidirectionalBarAxisText { public drawBidirectionalBarAxisText() { const axisLayout = this.getBidirectionalBarAxisTextLayout(); - const { - x: { labelFormatter, ...textStyle }, - layout: viewLayout, - } = this.options; + const { layout: viewLayout, labelFormatter, ...textStyle } = this.options; axisLayout.forEach((layout) => { const { x, y, text } = layout; diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index d4cb6345f..1525b4431 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -11,7 +11,8 @@ const SOURCE_ATTRIBUTE_NAME = 'data-chart-source-type'; const ANNOTATION_MAP = new Map(); -export abstract class Plot extends EE { +type PickOptions = Pick; +export abstract class Plot extends EE { /** plot 类型名称 */ public abstract readonly type: string; /** plot 绘制的 dom */ @@ -89,7 +90,7 @@ export abstract class Plot extends EE { /** * 获取默认的 options 配置项,每个组件都可以复写 */ - protected getDefaultOptions(): Partial | void {} + protected getDefaultOptions(): any {} /** * 绘制 diff --git a/packages/plots/src/core/components/coordinate.ts b/packages/plots/src/core/components/coordinate.ts index 0b3e93a20..5f28d7c91 100644 --- a/packages/plots/src/core/components/coordinate.ts +++ b/packages/plots/src/core/components/coordinate.ts @@ -2,7 +2,17 @@ import { set, pick, get } from '../utils'; import type { Adaptor } from '../types'; -export const COORDIANTE_OPTIONS = ['radius', 'innerRadius', 'startAngle', 'endAngle', 'focusX', 'focusY', 'distortionX', 'distortionY', 'visual'] +export const COORDIANTE_OPTIONS = [ + 'radius', + 'innerRadius', + 'startAngle', + 'endAngle', + 'focusX', + 'focusY', + 'distortionX', + 'distortionY', + 'visual', +]; /** * 主要为极坐标配置, 饼图、雷达图等 diff --git a/packages/plots/src/core/components/coordinateLayout.ts b/packages/plots/src/core/components/coordinateLayout.ts index 9b4f0febc..440ecc48b 100644 --- a/packages/plots/src/core/components/coordinateLayout.ts +++ b/packages/plots/src/core/components/coordinateLayout.ts @@ -1,11 +1,11 @@ -import type { Adaptor } from '../types'; +import type { Adaptor, Options } from '../types'; /** * layout = 'horizontal' | 'vertical' - * @param params - * @returns + * @param params + * @returns */ -export function coordinateLayout

(params: P) { +export function coordinateLayout

>(params: P) { const { layout = 'horizontal' } = params.options; params.options.coordinate.transform = layout !== 'horizontal' ? undefined : [{ type: 'transpose' }]; return params; diff --git a/packages/plots/src/core/components/index.ts b/packages/plots/src/core/components/index.ts index 0dda41686..77f790aa0 100644 --- a/packages/plots/src/core/components/index.ts +++ b/packages/plots/src/core/components/index.ts @@ -1,3 +1,3 @@ export { mark } from './mark'; export { coordinate, COORDIANTE_OPTIONS } from './coordinate'; -export { coordinateLayout } from './coordinateLayout'; \ No newline at end of file +export { coordinateLayout } from './coordinateLayout'; diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index a7f3f35bd..37d45a524 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -257,7 +257,7 @@ export const ANNOTATION_LIST = [ shape: 'ConversionTag', }, { - key: 'axis', + key: 'axisText', shape: 'BidirectionalBarAxisText', }, ]; diff --git a/packages/plots/src/core/plots/area/adaptor.ts b/packages/plots/src/core/plots/area/adaptor.ts index 3e874697f..41167f7de 100644 --- a/packages/plots/src/core/plots/area/adaptor.ts +++ b/packages/plots/src/core/plots/area/adaptor.ts @@ -10,12 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, transformOptions, mark)(params); + return flow(transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/area/type.ts b/packages/plots/src/core/plots/area/type.ts index 46cb3b7a6..939cba7f4 100644 --- a/packages/plots/src/core/plots/area/type.ts +++ b/packages/plots/src/core/plots/area/type.ts @@ -1,3 +1,3 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type AreaOptions = Options & BaseOptions; +export type AreaOptions = Options; diff --git a/packages/plots/src/core/plots/bar/adaptor.ts b/packages/plots/src/core/plots/bar/adaptor.ts index 6e9bcd42f..0dba18482 100644 --- a/packages/plots/src/core/plots/bar/adaptor.ts +++ b/packages/plots/src/core/plots/bar/adaptor.ts @@ -10,13 +10,6 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - /** * @title 背景图 * @description 通过新增 interval 实现 @@ -49,5 +42,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, background, transformOptions, mark)(params); + return flow(background, transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/bar/type.ts b/packages/plots/src/core/plots/bar/type.ts index 1508d8127..e8fcfc6cb 100644 --- a/packages/plots/src/core/plots/bar/type.ts +++ b/packages/plots/src/core/plots/bar/type.ts @@ -1,11 +1,8 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -type CommonOptions = Options & BaseOptions; - -export type BarOptions = Options & - BaseOptions & { - /** - * @title mark 背景配置 - */ - markBackground?: CommonOptions; - }; +export type BarOptions = Options & { + /** + * @title mark 背景配置 + */ + markBackground?: Options; +}; diff --git a/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts b/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts index 71f068531..ad4489228 100644 --- a/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts +++ b/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts @@ -1,6 +1,6 @@ import { mark } from '../../components'; import type { Adaptor } from '../../types'; -import { flow, transformOptions, set, isArray, omit, get } from '../../utils'; +import { flow, transformOptions, set, isString, isArray, get } from '../../utils'; import { HORIZONTAL_MARGIN, AXIS_LABEL_PADDING, VERTICAL_MARGIN } from './constants'; import type { BidirectionalBarOptions } from './type'; @@ -15,11 +15,9 @@ export function adaptor(params: Params) { const field = (params: Params) => { const { options } = params; const { yField, children } = options; - if (isArray(yField)) { - children.forEach((child, index) => { - set(child, 'yField', yField[index] || yField[0]); - }); - } + children.forEach((child, index) => { + set(child, 'yField', yField[index]); + }); return params; }; @@ -67,8 +65,13 @@ export function adaptor(params: Params) { coordinate: { transform }, paddingBottom = AXIS_LABEL_PADDING, paddingLeft = AXIS_LABEL_PADDING, + axis, } = options; - set(options, 'axis.layout', layout); + set(options, 'axisText', { + ...(axis?.x || {}), + layout, + }); + const [child1, child2] = children; if (layout === 'vertical') { set(options, 'direction', 'col'); diff --git a/packages/plots/src/core/plots/bidirectional-bar/index.ts b/packages/plots/src/core/plots/bidirectional-bar/index.ts index 3e4f872a4..7665ea5f2 100644 --- a/packages/plots/src/core/plots/bidirectional-bar/index.ts +++ b/packages/plots/src/core/plots/bidirectional-bar/index.ts @@ -22,7 +22,6 @@ export class BidirectionalBar extends Plot { axis: { y: { title: false, - labelFormatter: (item: number) => Math.abs(item), }, x: { title: false, label: false }, }, diff --git a/packages/plots/src/core/plots/bidirectional-bar/type.ts b/packages/plots/src/core/plots/bidirectional-bar/type.ts index ca0ad0a4a..0fbbb7967 100644 --- a/packages/plots/src/core/plots/bidirectional-bar/type.ts +++ b/packages/plots/src/core/plots/bidirectional-bar/type.ts @@ -1,12 +1,13 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -type CommonOptions = Options & BaseOptions; - -export type BidirectionalBarOptions = Options & - BaseOptions & { - /** - * @title 布局 - * @default "vertical" - */ - layout: 'vertical' | 'horizontal'; - }; +export type BidirectionalBarOptions = Options & { + /** + * @title y轴字段 + */ + readonly yField?: string[]; + /** + * @title 布局 + * @default "vertical" + */ + layout: 'vertical' | 'horizontal'; +}; diff --git a/packages/plots/src/core/plots/box/type.ts b/packages/plots/src/core/plots/box/type.ts index 65d698887..82ce7f16f 100644 --- a/packages/plots/src/core/plots/box/type.ts +++ b/packages/plots/src/core/plots/box/type.ts @@ -1,6 +1,6 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type BoxOptions = Options & BaseOptions & { +export type BoxOptions = Options & { // box 预处理, boxplot 非预处理 boxType: 'boxplot' | 'box'; }; diff --git a/packages/plots/src/core/plots/bullet/adaptor.ts b/packages/plots/src/core/plots/bullet/adaptor.ts index d1447eb05..39c479d99 100644 --- a/packages/plots/src/core/plots/bullet/adaptor.ts +++ b/packages/plots/src/core/plots/bullet/adaptor.ts @@ -1,5 +1,5 @@ import { coordinateLayout } from '../../components'; -import { flow, transformOptions, map, get, isArray, includes, isNumber, deepAssign } from '../../utils'; +import { flow, transformOptions, map, set, get, isArray, includes, isNumber, deepAssign } from '../../utils'; import type { Adaptor } from '../../types'; import type { BulletOptions } from './type'; @@ -133,8 +133,7 @@ export function adaptor(params: Params) { const { layout = 'horizontal' } = params.options; if (layout !== 'horizontal') { - const target = params.options.children[2]; - target.shapeField = 'hyphen'; + set(params, 'options.children[2].shapeField', 'hyphen'); } return params; diff --git a/packages/plots/src/core/plots/bullet/type.ts b/packages/plots/src/core/plots/bullet/type.ts index d70521532..7154b98d7 100644 --- a/packages/plots/src/core/plots/bullet/type.ts +++ b/packages/plots/src/core/plots/bullet/type.ts @@ -1,22 +1,22 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type BulletOptions = Options & BaseOptions & { +export type BulletOptions = Options & { color: { - ranges: string | string[], - measures: string | string[], - target: string | string[], - }, - rangeField: string, - measureField: string, - targetField: string, + ranges: string | string[]; + measures: string | string[]; + target: string | string[]; + }; + rangeField: string; + measureField: string; + targetField: string; mapField: { - ranges: string | string[], - measures: string | string[], - target: string | string[], - }, + ranges: string | string[]; + measures: string | string[]; + target: string | string[]; + }; // 竖直|水平 - layout: 'vertical' | 'horizontal', - range: BulletOptions, - measure: BulletOptions, - target: BulletOptions, + layout: 'vertical' | 'horizontal'; + range: BulletOptions; + measure: BulletOptions; + target: BulletOptions; }; diff --git a/packages/plots/src/core/plots/column/adaptor.ts b/packages/plots/src/core/plots/column/adaptor.ts index fb0b3ae2d..a37c0f128 100644 --- a/packages/plots/src/core/plots/column/adaptor.ts +++ b/packages/plots/src/core/plots/column/adaptor.ts @@ -10,12 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, transformOptions, mark)(params); + return flow(transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/column/index.ts b/packages/plots/src/core/plots/column/index.ts index d8b2240ad..c0e4c274b 100644 --- a/packages/plots/src/core/plots/column/index.ts +++ b/packages/plots/src/core/plots/column/index.ts @@ -9,10 +9,6 @@ export class Column extends Plot { /** 图表类型 */ public type = 'column'; - /** - * 获取 折线图 默认配置项 - * 供外部使用 - */ static getDefaultOptions(): Partial { return { type: 'view', @@ -41,16 +37,10 @@ export class Column extends Plot { }; } - /** - * 获取 折线图 默认配置 - */ protected getDefaultOptions() { return Column.getDefaultOptions(); } - /** - * 折线图适配器 - */ protected getSchemaAdaptor(): (params: Adaptor) => void { return adaptor; } diff --git a/packages/plots/src/core/plots/dual-axes/adaptor.ts b/packages/plots/src/core/plots/dual-axes/adaptor.ts index 251ed9f07..7eb47b5cf 100644 --- a/packages/plots/src/core/plots/dual-axes/adaptor.ts +++ b/packages/plots/src/core/plots/dual-axes/adaptor.ts @@ -10,12 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, transformOptions, mark)(params); + return flow(transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/funnel/adaptor.ts b/packages/plots/src/core/plots/funnel/adaptor.ts index b0494261e..628bd9e64 100644 --- a/packages/plots/src/core/plots/funnel/adaptor.ts +++ b/packages/plots/src/core/plots/funnel/adaptor.ts @@ -15,13 +15,10 @@ export function adaptor(params: Params) { */ const init = (params: Params) => { const { options } = params; - const { xField, colorField, labels } = options; + const { xField, colorField } = options; if (!colorField) { set(options, 'colorField', xField); } - if (labels) { - set(options, 'label', false); - } return params; }; @@ -51,6 +48,7 @@ export function adaptor(params: Params) { children.push({ type: 'interval', data: groupedData[1], + // @ts-ignore yField: (item) => -item[yField], }); delete options['compareField']; @@ -60,6 +58,7 @@ export function adaptor(params: Params) { set(options, 'type', 'spaceFlex'); set(options, 'ratio', [1, 1]); set(options, 'direction', isTransposed ? 'row' : 'col'); + // @ts-expect-error delete options['seriesField']; } diff --git a/packages/plots/src/core/plots/funnel/type.ts b/packages/plots/src/core/plots/funnel/type.ts index 3282883e9..cc42dd371 100644 --- a/packages/plots/src/core/plots/funnel/type.ts +++ b/packages/plots/src/core/plots/funnel/type.ts @@ -1,7 +1,6 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type FunnelOptions = Options & - BaseOptions & { - compareField?: string; - isTransposed?: boolean; - }; +export type FunnelOptions = Options & { + compareField?: string; + isTransposed?: boolean; +}; diff --git a/packages/plots/src/core/plots/gauge/adaptor.ts b/packages/plots/src/core/plots/gauge/adaptor.ts index 9dc37e02a..68a8e1ee5 100644 --- a/packages/plots/src/core/plots/gauge/adaptor.ts +++ b/packages/plots/src/core/plots/gauge/adaptor.ts @@ -17,8 +17,8 @@ export function adaptor(params: Params) { const { data } = params.options; params.options.data = { - value: data - } + value: data, + }; return params; }; diff --git a/packages/plots/src/core/plots/gauge/type.ts b/packages/plots/src/core/plots/gauge/type.ts index 16209fc8c..a0b57bcc9 100644 --- a/packages/plots/src/core/plots/gauge/type.ts +++ b/packages/plots/src/core/plots/gauge/type.ts @@ -1,3 +1,3 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type GaugeOptions = Options & BaseOptions; +export type GaugeOptions = Options; diff --git a/packages/plots/src/core/plots/heatmap/adaptor.ts b/packages/plots/src/core/plots/heatmap/adaptor.ts index 898146dbb..5ce997ab4 100644 --- a/packages/plots/src/core/plots/heatmap/adaptor.ts +++ b/packages/plots/src/core/plots/heatmap/adaptor.ts @@ -10,13 +10,6 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - /** * @description 添加 tooltip 默认值 */ @@ -41,5 +34,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, tooltip, transformMark, transformOptions, mark)(params); + return flow(tooltip, transformMark, transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/heatmap/index.ts b/packages/plots/src/core/plots/heatmap/index.ts index a3d24e73d..346e19e6a 100644 --- a/packages/plots/src/core/plots/heatmap/index.ts +++ b/packages/plots/src/core/plots/heatmap/index.ts @@ -9,10 +9,6 @@ export class Heatmap extends Plot { /** 图表类型 */ public type = 'heatmap'; - /** - * 获取 折线图 默认配置项 - * 供外部使用 - */ static getDefaultOptions(): Partial { return { type: 'view', @@ -43,16 +39,10 @@ export class Heatmap extends Plot { }; } - /** - * 获取 折线图 默认配置 - */ protected getDefaultOptions() { return Heatmap.getDefaultOptions(); } - /** - * 折线图适配器 - */ protected getSchemaAdaptor(): (params: Adaptor) => void { return adaptor; } diff --git a/packages/plots/src/core/plots/heatmap/type.ts b/packages/plots/src/core/plots/heatmap/type.ts index f8595756a..198da71b9 100644 --- a/packages/plots/src/core/plots/heatmap/type.ts +++ b/packages/plots/src/core/plots/heatmap/type.ts @@ -1,8 +1,7 @@ import { MarkTypes } from '@antv/g2'; -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type HeatmapOptions = Options & - BaseOptions & { - /** 热力图类型 */ - mark?: MarkTypes; - }; +export type HeatmapOptions = Options & { + /** 热力图类型 */ + mark?: MarkTypes; +}; diff --git a/packages/plots/src/core/plots/histogram/adaptor.ts b/packages/plots/src/core/plots/histogram/adaptor.ts index 8ffaa8a8e..9519aa57b 100644 --- a/packages/plots/src/core/plots/histogram/adaptor.ts +++ b/packages/plots/src/core/plots/histogram/adaptor.ts @@ -10,13 +10,6 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - const transformHistogramConfig = (params: Params) => { const { options } = params; const { data, binNumber, binWidth, children, channel = 'count' } = options; @@ -33,5 +26,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, transformHistogramConfig, transformOptions, mark)(params); + return flow(transformHistogramConfig, transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/histogram/type.ts b/packages/plots/src/core/plots/histogram/type.ts index 5b8b15a9a..ee847ccd6 100644 --- a/packages/plots/src/core/plots/histogram/type.ts +++ b/packages/plots/src/core/plots/histogram/type.ts @@ -1,8 +1,11 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type HistogramOptions = Options & - BaseOptions & { - binField: string; - binWidth: number; - binNumber: number; - }; +export type HistogramOptions = Options & { + binField: string; + binWidth: number; + binNumber: number; + /** + * @title 通道 + */ + channel?: string; +}; diff --git a/packages/plots/src/core/plots/line/adaptor.ts b/packages/plots/src/core/plots/line/adaptor.ts index 0d95bbed1..073027bec 100644 --- a/packages/plots/src/core/plots/line/adaptor.ts +++ b/packages/plots/src/core/plots/line/adaptor.ts @@ -10,12 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, transformOptions, mark)(params); + return flow(transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/line/type.ts b/packages/plots/src/core/plots/line/type.ts index 2005fc8b8..b73f2121a 100644 --- a/packages/plots/src/core/plots/line/type.ts +++ b/packages/plots/src/core/plots/line/type.ts @@ -1,3 +1,3 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type LineOptions = Options & BaseOptions; +export type LineOptions = Options; diff --git a/packages/plots/src/core/plots/liquid/type.ts b/packages/plots/src/core/plots/liquid/type.ts index b36e4e10a..b97ad708b 100644 --- a/packages/plots/src/core/plots/liquid/type.ts +++ b/packages/plots/src/core/plots/liquid/type.ts @@ -1,5 +1,6 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type LiquidOptions = Options & BaseOptions & { +export type LiquidOptions = Omit & { data: number; + percent?: boolean; }; diff --git a/packages/plots/src/core/plots/pie/adaptor.ts b/packages/plots/src/core/plots/pie/adaptor.ts index a5fc1e682..218312c91 100644 --- a/packages/plots/src/core/plots/pie/adaptor.ts +++ b/packages/plots/src/core/plots/pie/adaptor.ts @@ -11,12 +11,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, coordinate, transformOptions)(params); + return flow(coordinate, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/radar/index.ts b/packages/plots/src/core/plots/radar/index.ts index 810e4b541..71098870d 100644 --- a/packages/plots/src/core/plots/radar/index.ts +++ b/packages/plots/src/core/plots/radar/index.ts @@ -18,7 +18,7 @@ export class Radar extends Plot { return { axis: { x: { grid: true, line: true }, - y: { zIndex: 1, title: false, line: true , nice: true}, + y: { zIndex: 1, title: false, line: true, nice: true }, }, meta: { x: { padding: 0.5, align: 0 } }, interaction: { tooltip: { style: { crosshairsLineDash: [4, 4] } } }, diff --git a/packages/plots/src/core/plots/radar/type.ts b/packages/plots/src/core/plots/radar/type.ts index dae58c82f..101dd7f7d 100644 --- a/packages/plots/src/core/plots/radar/type.ts +++ b/packages/plots/src/core/plots/radar/type.ts @@ -1,5 +1,5 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type RadarOptions = Options & BaseOptions & { +export type RadarOptions = Options & { coordinateType?: 'radar' | 'polar'; }; diff --git a/packages/plots/src/core/plots/rose/adaptor.ts b/packages/plots/src/core/plots/rose/adaptor.ts index b5180a91e..e2e66b182 100644 --- a/packages/plots/src/core/plots/rose/adaptor.ts +++ b/packages/plots/src/core/plots/rose/adaptor.ts @@ -11,12 +11,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, coordinate, transformOptions)(params); + return flow(coordinate, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/rose/index.ts b/packages/plots/src/core/plots/rose/index.ts index 3e5aced61..daa73ccc8 100644 --- a/packages/plots/src/core/plots/rose/index.ts +++ b/packages/plots/src/core/plots/rose/index.ts @@ -19,7 +19,7 @@ export class Rose extends Plot { type: 'view', children: [{ type: 'interval' }], coordinate: { type: 'polar' }, - animate: { enter: { type: "waveIn" } }, + animate: { enter: { type: 'waveIn' } }, }; } diff --git a/packages/plots/src/core/plots/rose/type.ts b/packages/plots/src/core/plots/rose/type.ts index 5aaf0e69c..90062db5e 100644 --- a/packages/plots/src/core/plots/rose/type.ts +++ b/packages/plots/src/core/plots/rose/type.ts @@ -1,3 +1,3 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type RoseOptions = Options & BaseOptions; +export type RoseOptions = Options; diff --git a/packages/plots/src/core/plots/sankey/adaptor.ts b/packages/plots/src/core/plots/sankey/adaptor.ts index fa25137dd..f02a9ca9f 100644 --- a/packages/plots/src/core/plots/sankey/adaptor.ts +++ b/packages/plots/src/core/plots/sankey/adaptor.ts @@ -10,12 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, transformOptions, mark)(params); + return flow(transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/sankey/type.ts b/packages/plots/src/core/plots/sankey/type.ts index 4a1f2cb56..b72fe5504 100644 --- a/packages/plots/src/core/plots/sankey/type.ts +++ b/packages/plots/src/core/plots/sankey/type.ts @@ -1,3 +1,3 @@ import type { Options, BaseOptions } from '../../types/common'; -export type SankeyOptions = Options & BaseOptions; +export type SankeyOptions = Options; diff --git a/packages/plots/src/core/plots/scatter/adaptor.ts b/packages/plots/src/core/plots/scatter/adaptor.ts index cc44b7ff6..e89202496 100644 --- a/packages/plots/src/core/plots/scatter/adaptor.ts +++ b/packages/plots/src/core/plots/scatter/adaptor.ts @@ -11,12 +11,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, transformOptions, mark)(params); + return flow(transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/scatter/type.ts b/packages/plots/src/core/plots/scatter/type.ts index dbac70985..a31d92d30 100644 --- a/packages/plots/src/core/plots/scatter/type.ts +++ b/packages/plots/src/core/plots/scatter/type.ts @@ -1,3 +1,3 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type ScatterOptions = Options & BaseOptions; +export type ScatterOptions = Options; diff --git a/packages/plots/src/core/plots/tiny-area/adaptor.ts b/packages/plots/src/core/plots/tiny-area/adaptor.ts index c4b454d91..b0dfc9bf9 100644 --- a/packages/plots/src/core/plots/tiny-area/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-area/adaptor.ts @@ -10,12 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, transformOptions, mark)(params); + return flow(transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/tiny-area/index.ts b/packages/plots/src/core/plots/tiny-area/index.ts index 9c96a036c..8e9b72376 100644 --- a/packages/plots/src/core/plots/tiny-area/index.ts +++ b/packages/plots/src/core/plots/tiny-area/index.ts @@ -23,7 +23,7 @@ export class TinyArea extends Plot { autoFit: false, padding: 0, margin: 0, - tooltip: false + tooltip: false, }; } diff --git a/packages/plots/src/core/plots/tiny-area/type.ts b/packages/plots/src/core/plots/tiny-area/type.ts index 978cb6cf3..c38a1a33e 100644 --- a/packages/plots/src/core/plots/tiny-area/type.ts +++ b/packages/plots/src/core/plots/tiny-area/type.ts @@ -1,3 +1,3 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type TinyAreaOptions = Options & BaseOptions; +export type TinyAreaOptions = Options; diff --git a/packages/plots/src/core/plots/tiny-column/adaptor.ts b/packages/plots/src/core/plots/tiny-column/adaptor.ts index 063e9a538..f7f48ca07 100644 --- a/packages/plots/src/core/plots/tiny-column/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-column/adaptor.ts @@ -10,12 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, transformOptions, mark)(params); + return flow(transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/tiny-column/type.ts b/packages/plots/src/core/plots/tiny-column/type.ts index 5d517de1f..7e0abe163 100644 --- a/packages/plots/src/core/plots/tiny-column/type.ts +++ b/packages/plots/src/core/plots/tiny-column/type.ts @@ -1,3 +1,3 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type TinyColumnOptions = Options & BaseOptions; +export type TinyColumnOptions = Options; diff --git a/packages/plots/src/core/plots/tiny-line/adaptor.ts b/packages/plots/src/core/plots/tiny-line/adaptor.ts index e415b57ad..8fd03798e 100644 --- a/packages/plots/src/core/plots/tiny-line/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-line/adaptor.ts @@ -10,12 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, transformOptions, mark)(params); + return flow(transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/tiny-line/type.ts b/packages/plots/src/core/plots/tiny-line/type.ts index 074e66337..c00248958 100644 --- a/packages/plots/src/core/plots/tiny-line/type.ts +++ b/packages/plots/src/core/plots/tiny-line/type.ts @@ -1,3 +1,3 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type TinyLineOptions = Options & BaseOptions; +export type TinyLineOptions = Options; diff --git a/packages/plots/src/core/plots/tiny-progress/adaptor.ts b/packages/plots/src/core/plots/tiny-progress/adaptor.ts index cff121e9c..e53882707 100644 --- a/packages/plots/src/core/plots/tiny-progress/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-progress/adaptor.ts @@ -10,13 +10,6 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - /** * @description 数据转换 */ @@ -29,12 +22,12 @@ export function adaptor(params: Params) { scale: { color: { range: color.length ? color : [] }, }, - data: [1, percent] - } + data: [1, percent], + }; Object.assign(options, { ...transformOption }); - return params - } + return params; + }; - return flow(init, transformData, transformOptions, mark)(params); + return flow(transformData, transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/tiny-progress/type.ts b/packages/plots/src/core/plots/tiny-progress/type.ts index 48d3ec93d..e84b080b1 100644 --- a/packages/plots/src/core/plots/tiny-progress/type.ts +++ b/packages/plots/src/core/plots/tiny-progress/type.ts @@ -1,6 +1,6 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type TinyProgressOptions = Options & BaseOptions & { +export type TinyProgressOptions = Options & { // 进度 percent: number; // 颜色 diff --git a/packages/plots/src/core/plots/tiny-ring/type.ts b/packages/plots/src/core/plots/tiny-ring/type.ts index 29505e78a..6af1b8726 100644 --- a/packages/plots/src/core/plots/tiny-ring/type.ts +++ b/packages/plots/src/core/plots/tiny-ring/type.ts @@ -1,20 +1,19 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type TinyRingOptions = Options & - BaseOptions & { - /** - * @title 进度 - */ - percent: number; - /** - * @title 颜色 - * @description [ backgroundColor, progressColor] - */ - color?: [string, string]; - /** - * @title 内径 - * @description 0 ~ 1 - * @default 0.8 - */ - radius?: number; - }; +export type TinyRingOptions = Options & { + /** + * @title 进度 + */ + percent: number; + /** + * @title 颜色 + * @description [ backgroundColor, progressColor] + */ + color?: [string, string]; + /** + * @title 内径 + * @description 0 ~ 1 + * @default 0.8 + */ + radius?: number; +}; diff --git a/packages/plots/src/core/plots/treemap/index.ts b/packages/plots/src/core/plots/treemap/index.ts index c7c201d06..9399544f9 100644 --- a/packages/plots/src/core/plots/treemap/index.ts +++ b/packages/plots/src/core/plots/treemap/index.ts @@ -10,10 +10,6 @@ export class Treemap extends Plot { /** 图表类型 */ public type = 'treemap'; - /** - * 获取 折线图 默认配置项 - * 供外部使用 - */ static getDefaultOptions(): Partial { return { type: 'view', @@ -25,16 +21,10 @@ export class Treemap extends Plot { }; } - /** - * 获取 折线图 默认配置 - */ protected getDefaultOptions() { return Treemap.getDefaultOptions(); } - /** - * 折线图适配器 - */ protected getSchemaAdaptor(): (params: Adaptor) => void { return adaptor; } diff --git a/packages/plots/src/core/plots/treemap/type.ts b/packages/plots/src/core/plots/treemap/type.ts index ffde7429f..1044b527c 100644 --- a/packages/plots/src/core/plots/treemap/type.ts +++ b/packages/plots/src/core/plots/treemap/type.ts @@ -1,3 +1,3 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type TreemapOptions = Options & BaseOptions; +export type TreemapOptions = Options; diff --git a/packages/plots/src/core/plots/waterfall/adaptor.ts b/packages/plots/src/core/plots/waterfall/adaptor.ts index 365901d66..4de816df8 100644 --- a/packages/plots/src/core/plots/waterfall/adaptor.ts +++ b/packages/plots/src/core/plots/waterfall/adaptor.ts @@ -11,13 +11,6 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - /** * @description 数据转换 */ @@ -50,8 +43,8 @@ export function adaptor(params: Params) { const linkData = [...data]; linkData.reduce((prev, cur, index) => { if (index > 0) { - cur.x1 = prev[xField]; - cur.x2 = cur[xField]; + cur.x1 = prev[xField as string]; + cur.x2 = cur[xField as string]; cur.y1 = prev[END_KEY]; } return cur; @@ -74,5 +67,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, transformData, link, transformOptions, mark)(params); + return flow(transformData, link, transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/waterfall/index.ts b/packages/plots/src/core/plots/waterfall/index.ts index c92a6b4c9..570f663d0 100644 --- a/packages/plots/src/core/plots/waterfall/index.ts +++ b/packages/plots/src/core/plots/waterfall/index.ts @@ -10,10 +10,6 @@ export class Waterfall extends Plot { /** 图表类型 */ public type = 'waterfall'; - /** - * 获取 折线图 默认配置项 - * 供外部使用 - */ static getDefaultOptions(): Partial { return { type: 'view', @@ -45,16 +41,10 @@ export class Waterfall extends Plot { }; } - /** - * 获取 折线图 默认配置 - */ protected getDefaultOptions() { return Waterfall.getDefaultOptions(); } - /** - * 折线图适配器 - */ protected getSchemaAdaptor(): (params: Adaptor) => void { return adaptor; } diff --git a/packages/plots/src/core/plots/waterfall/type.ts b/packages/plots/src/core/plots/waterfall/type.ts index 8d79f3190..06eb8434b 100644 --- a/packages/plots/src/core/plots/waterfall/type.ts +++ b/packages/plots/src/core/plots/waterfall/type.ts @@ -1,7 +1,13 @@ -import type { BaseOptions, Options, AttrStyle } from '../../types/common'; +import type { Options, AttrStyle } from '../../types/common'; -export type WaterfallOptions = Options & - BaseOptions & { - /***/ - linkStyle: AttrStyle; - }; +export type WaterfallOptions = Omit & { + /** + * @title 连线样式 + */ + linkStyle?: AttrStyle; + /** + * @title x轴字段 + */ + xField?: string | string[]; + children?: Array; +}; diff --git a/packages/plots/src/core/plots/wordCloud/adaptor.ts b/packages/plots/src/core/plots/wordCloud/adaptor.ts index 30097e1c7..5ea4d460a 100644 --- a/packages/plots/src/core/plots/wordCloud/adaptor.ts +++ b/packages/plots/src/core/plots/wordCloud/adaptor.ts @@ -11,12 +11,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - /** - * 图表差异化处理 - */ - const init = (params: Params) => { - return params; - }; - - return flow(init, transformOptions, mark)(params); + return flow(transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/wordCloud/type.ts b/packages/plots/src/core/plots/wordCloud/type.ts index f40612865..8700cab58 100644 --- a/packages/plots/src/core/plots/wordCloud/type.ts +++ b/packages/plots/src/core/plots/wordCloud/type.ts @@ -1,3 +1,3 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type WordCloudOptions = Options & BaseOptions; +export type WordCloudOptions = Options; diff --git a/packages/plots/src/core/types/common.ts b/packages/plots/src/core/types/common.ts index b37c49f26..588402085 100644 --- a/packages/plots/src/core/types/common.ts +++ b/packages/plots/src/core/types/common.ts @@ -1,4 +1,21 @@ -import type { Chart, DodgeXTransform, G2Spec, NormalizeYTransform, SortByTransform, StackYTransform } from '@antv/g2'; +import type { + Chart, + DodgeXTransform, + NormalizeYTransform, + SortByTransform, + StackYTransform, + Mark, + Composition, + AxisComponent, + LegendComponent, +} from '@antv/g2'; + +export type Spec = (Mark | Composition | AxisComponent | Omit) & { + width?: number; + height?: number; + depth?: number; + autoFit?: boolean; +}; export type BaseOptions = { /** @@ -13,6 +30,18 @@ export type BaseOptions = { * @title 分组字段 */ readonly seriesField?: string; + /** + * @title 尺寸字段 + */ + readonly sizeField?: string; + /** + * @title 颜色字段 + */ + readonly colorField?: string; + /** + * @title 形状字段 + */ + readonly shapeField?: string; /** * @title 堆积 */ @@ -35,6 +64,11 @@ export type BaseOptions = { * @example smooth | hvh */ readonly shape?: string; + /** + * @title 标签 + * @description 待底层导出 + */ + readonly label?: false | Record; }; export type ArcBaseOptions = { @@ -56,9 +90,14 @@ export type ArcBaseOptions = { readonly innerRadius?: number; }; -export type Options = G2Spec & { - [key: string]: any; -}; +export type Options = Spec & + BaseOptions & { + /** + * @title 嵌套 view + * @description 用于 Mix 等复杂图表 + */ + children?: Options[]; + }; export type Adaptor

= { chart: Chart; diff --git a/packages/plots/src/core/types/index.ts b/packages/plots/src/core/types/index.ts index e251acdfe..d0b932366 100644 --- a/packages/plots/src/core/types/index.ts +++ b/packages/plots/src/core/types/index.ts @@ -1,3 +1 @@ -export type { G2Spec } from '@antv/g2'; - export * from './common'; diff --git a/packages/plots/src/interface.ts b/packages/plots/src/interface.ts index 1082cbe90..5377d3bb5 100644 --- a/packages/plots/src/interface.ts +++ b/packages/plots/src/interface.ts @@ -1,5 +1,5 @@ import { TooltipComponent } from '@antv/g2'; -import { Options, G2Spec } from './core'; +import { Options, Spec } from './core'; /** * @title 图表浮窗配置 @@ -98,6 +98,6 @@ export interface Common extends AttachConfig, ContainerConfig { readonly chartType?: string; } -export type CommonConfig = Common & TransformType; +export type CommonConfig = Common & TransformType; export { Options }; diff --git a/site/examples/statistics/column/demo/group-and-stack.js b/site/examples/statistics/column/demo/group-and-stack.js new file mode 100644 index 000000000..1f07709db --- /dev/null +++ b/site/examples/statistics/column/demo/group-and-stack.js @@ -0,0 +1,23 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoColumn = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antfincdn/mor%26R5yBI9/stack-group-column.json', + }, + xField: 'product_type', + yField: 'order_amt', + seriesField: 'sex', + stack: { + groupBy: ['x', 'series'], + series: false, + }, + colorField: 'product_sub_type', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index a9cb2531a..9789db354 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -60,6 +60,14 @@ }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*hTfETY0ObOsAAAAAAAAAAAAADmJ7AQ/original" }, + { + "filename": "group-and-stack.js", + "title": { + "zh": "分组堆叠柱状图", + "en": "Group and stack Column Chart" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/9ExrwrpVrA/908eff62-1132-4dbb-8c3c-9cbe8183c6d8.png" + }, { "filename": "bar-dodged.js", "title": { From 38e913675f33a2929d357819e8c4acc41e074150 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:35:52 +0800 Subject: [PATCH 090/268] docs: options (#2181) --- README.md | 66 +- packages/charts/README.md | 54 +- packages/plots/README.md | 57 +- packages/plots/src/core/plots/violin/type.ts | 6 +- packages/plots/src/core/types/common.ts | 8 +- site/.dumirc.ts | 60 +- site/docs/api/advanced-plots/facet.en.md | 283 -- site/docs/api/advanced-plots/facet.zh.md | 278 -- site/docs/api/advanced-plots/mix.en.md | 433 --- site/docs/api/advanced-plots/mix.zh.md | 431 --- site/docs/api/case.en.md | 481 --- site/docs/api/case.zh.md | 483 --- site/docs/api/components/annotations.en.md | 876 ------ site/docs/api/components/annotations.zh.md | 876 ------ site/docs/api/components/axis.en.md | 436 --- site/docs/api/components/axis.zh.md | 436 --- site/docs/api/components/conversion-tag.en.md | 63 - site/docs/api/components/conversion-tag.zh.md | 61 - site/docs/api/components/label.en.md | 115 - site/docs/api/components/label.zh.md | 115 - site/docs/api/components/legend.en.md | 496 --- site/docs/api/components/legend.zh.md | 539 ---- site/docs/api/components/scrollbar.en.md | 103 - site/docs/api/components/scrollbar.zh.md | 104 - site/docs/api/components/slider.en.md | 94 - site/docs/api/components/slider.zh.md | 94 - site/docs/api/components/statistic.en.md | 88 - site/docs/api/components/statistic.zh.md | 88 - site/docs/api/components/tooltip.en.md | 318 -- site/docs/api/components/tooltip.zh.md | 322 -- site/docs/api/graphic-style.en.md | 189 -- site/docs/api/graphic-style.zh.md | 189 -- site/docs/api/options/animation.en.md | 76 - site/docs/api/options/animation.zh.md | 76 - site/docs/api/options/events.en.md | 157 - site/docs/api/options/events.zh.md | 153 - site/docs/api/options/interactions.en.md | 131 - site/docs/api/options/interactions.zh.md | 129 - site/docs/api/options/meta.en.md | 180 -- site/docs/api/options/meta.zh.md | 180 -- site/docs/api/options/pattern.en.md | 133 - site/docs/api/options/pattern.zh.md | 132 - site/docs/api/options/theme.en.md | 116 - site/docs/api/options/theme.zh.md | 105 - site/docs/api/plots/column.en.md | 2767 ----------------- site/docs/api/plots/column.zh.md | 2751 ---------------- site/docs/common/animate-option.en.md | 27 - site/docs/common/animate-option.zh.md | 40 - site/docs/common/annotations.en.md | 787 ----- site/docs/common/annotations.zh.md | 787 ----- site/docs/common/annotations/arc.en.md | 51 - site/docs/common/annotations/arc.zh.md | 51 - .../common/annotations/base-annotation.en.md | 29 - .../common/annotations/base-annotation.zh.md | 29 - .../docs/common/annotations/data-marker.en.md | 87 - .../docs/common/annotations/data-marker.zh.md | 87 - .../docs/common/annotations/data-region.en.md | 63 - .../docs/common/annotations/data-region.zh.md | 63 - site/docs/common/annotations/html.en.md | 43 - site/docs/common/annotations/html.zh.md | 43 - site/docs/common/annotations/image.en.md | 91 - site/docs/common/annotations/image.zh.md | 91 - site/docs/common/annotations/line.en.md | 106 - site/docs/common/annotations/line.zh.md | 106 - .../common/annotations/region-filter.en.md | 93 - .../common/annotations/region-filter.zh.md | 93 - site/docs/common/annotations/region.en.md | 81 - site/docs/common/annotations/region.zh.md | 81 - site/docs/common/annotations/shape.en.md | 47 - site/docs/common/annotations/shape.zh.md | 47 - site/docs/common/annotations/text.en.md | 92 - site/docs/common/annotations/text.zh.md | 92 - site/docs/common/axis.en.md | 341 -- site/docs/common/axis.zh.md | 341 -- site/docs/common/bar-style.en.md | 94 - site/docs/common/bar-style.zh.md | 94 - site/docs/common/brush.en.md | 79 - site/docs/common/brush.zh.md | 81 - site/docs/common/chart-methods.en.md | 33 - site/docs/common/chart-methods.zh.md | 30 - site/docs/common/chart-options.en.md | 55 - site/docs/common/chart-options.zh.md | 55 - site/docs/common/chord.en.md | 418 --- site/docs/common/chord.zh.md | 367 --- site/docs/common/color.en.md | 29 - site/docs/common/color.zh.md | 29 - site/docs/common/column-style.en.md | 94 - site/docs/common/column-style.zh.md | 94 - site/docs/common/common-component.en.md | 1848 ----------- site/docs/common/common-component.zh.md | 1888 ----------- site/docs/common/common-iview.en.md | 81 - site/docs/common/common-iview.zh.md | 82 - site/docs/common/component-no-axis.en.md | 1501 --------- site/docs/common/component-no-axis.zh.md | 1539 --------- site/docs/common/component-polygon.en.md | 1098 ------- site/docs/common/component-polygon.zh.md | 1100 ------- site/docs/common/component-progress.en.md | 1273 -------- site/docs/common/component-progress.zh.md | 1152 ------- site/docs/common/component-tiny.en.md | 1620 ---------- site/docs/common/component-tiny.zh.md | 1604 ---------- site/docs/common/component.en.md | 1891 ----------- site/docs/common/component.zh.md | 1931 ------------ site/docs/common/connected-area.en.md | 18 - site/docs/common/connected-area.zh.md | 18 - site/docs/common/conversion-tag.en.md | 26 - site/docs/common/conversion-tag.zh.md | 26 - site/docs/common/crosshairs-text.en.md | 57 - site/docs/common/crosshairs-text.zh.md | 53 - site/docs/common/data.en.md | 10 - site/docs/common/data.zh.md | 10 - site/docs/common/drill-down.en.md | 22 - site/docs/common/drill-down.zh.md | 22 - site/docs/common/events.en.md | 71 - site/docs/common/events.zh.md | 67 - site/docs/common/facet-title.en.md | 8 - site/docs/common/facet-title.zh.md | 8 - site/docs/common/geometry-cfg.en.md | 110 - site/docs/common/geometry-cfg.zh.md | 108 - site/docs/common/interactions.en.md | 42 - site/docs/common/interactions.zh.md | 40 - site/docs/common/label.en.md | 42 - site/docs/common/label.zh.md | 42 - site/docs/common/legend-cfg.en.md | 380 --- site/docs/common/legend-cfg.zh.md | 419 --- site/docs/common/legend.en.md | 397 --- site/docs/common/legend.zh.md | 435 --- site/docs/common/line-style.en.md | 39 - site/docs/common/line-style.zh.md | 39 - site/docs/common/marker.en.md | 8 - site/docs/common/marker.zh.md | 17 - site/docs/common/meta.en.md | 12 - site/docs/common/meta.zh.md | 12 - site/docs/common/pattern.en.md | 94 - site/docs/common/pattern.zh.md | 93 - site/docs/common/plot-cfg.en.md | 37 - site/docs/common/plot-cfg.zh.md | 37 - site/docs/common/point-style.en.md | 7 - site/docs/common/point-style.zh.md | 7 - site/docs/common/scrollbar.en.md | 19 - site/docs/common/scrollbar.zh.md | 20 - site/docs/common/shape-style.en.md | 40 - site/docs/common/shape-style.zh.md | 40 - site/docs/common/slider.en.md | 39 - site/docs/common/slider.zh.md | 39 - site/docs/common/state-style.en.md | 19 - site/docs/common/state-style.zh.md | 19 - site/docs/common/statistic.en.md | 22 - site/docs/common/statistic.zh.md | 22 - site/docs/common/text-style.en.md | 38 - site/docs/common/text-style.zh.md | 38 - site/docs/common/theme.en.md | 105 - site/docs/common/theme.zh.md | 94 - site/docs/common/tooltip.en.md | 255 -- site/docs/common/tooltip.zh.md | 257 -- site/docs/common/xy-field.en.md | 11 - site/docs/common/xy-field.zh.md | 11 - site/docs/manual/contact.en.md | 14 +- site/docs/manual/faq.en.md | 131 +- site/docs/manual/faq.zh.md | 66 +- site/docs/manual/getting-started.en.md | 150 +- site/docs/manual/getting-started.zh.md | 41 +- site/docs/manual/introduction.en.md | 20 +- site/docs/manual/introduction.zh.md | 2 +- site/docs/manual/upgrade.zh.md | 69 +- .../docs/options/plots/animation/fadeIn.en.md | 6 + .../docs/options/plots/animation/fadeIn.zh.md | 16 + .../options/plots/animation/fadeOut.en.md | 6 + .../options/plots/animation/fadeOut.zh.md | 16 + .../options/plots/animation/growInX.en.md | 6 + .../options/plots/animation/growInX.zh.md | 16 + .../options/plots/animation/growInY.en.md | 6 + .../options/plots/animation/growInY.zh.md | 16 + .../options/plots/animation/morphing.en.md | 6 + .../options/plots/animation/morphing.zh.md | 16 + .../options/plots/animation/overview.en.md | 6 + .../options/plots/animation/overview.zh.md | 76 + .../docs/options/plots/animation/pathIn.en.md | 6 + .../docs/options/plots/animation/pathIn.zh.md | 16 + .../options/plots/animation/scaleInX.en.md | 6 + .../options/plots/animation/scaleInX.zh.md | 16 + .../options/plots/animation/scaleInY.en.md | 6 + .../options/plots/animation/scaleInY.zh.md | 16 + .../options/plots/animation/scaleOutX.en.md | 6 + .../options/plots/animation/scaleOutX.zh.md | 16 + .../options/plots/animation/scaleOutY.en.md | 6 + .../options/plots/animation/scaleOutY.zh.md | 16 + .../docs/options/plots/animation/waveIn.en.md | 6 + .../docs/options/plots/animation/waveIn.zh.md | 17 + .../docs/options/plots/animation/zoomIn.en.md | 6 + .../docs/options/plots/animation/zoomIn.zh.md | 16 + .../options/plots/animation/zoomOut.en.md | 6 + .../options/plots/animation/zoomOut.zh.md | 16 + .../options/plots/common/componentTitle.en.md | 1 + .../options/plots/common/componentTitle.zh.md | 17 + .../docs/options/plots/common/navigator.en.md | 1 + .../docs/options/plots/common/navigator.zh.md | 12 + .../docs/options/plots/common/sparkline.en.md | 1 + .../docs/options/plots/common/sparkline.zh.md | 20 + site/docs/options/plots/common/style.en.md | 1 + site/docs/options/plots/common/style.zh.md | 18 + site/docs/options/plots/component/axis.en.md | 6 + site/docs/options/plots/component/axis.zh.md | 168 + .../docs/options/plots/component/legend.en.md | 6 + .../docs/options/plots/component/legend.zh.md | 261 ++ .../options/plots/component/scrollbar.en.md | 6 + .../options/plots/component/scrollbar.zh.md | 65 + .../docs/options/plots/component/slider.en.md | 6 + .../docs/options/plots/component/slider.zh.md | 90 + site/docs/options/plots/component/title.en.md | 6 + site/docs/options/plots/component/title.zh.md | 42 + .../options/plots/component/tooltip.en.md | 6 + .../options/plots/component/tooltip.zh.md | 115 + .../interaction/brushAxisHighlight.en.md | 5 + .../interaction/brushAxisHighlight.zh.md | 56 + .../plots/interaction/brushFilter.en.md | 5 + .../plots/interaction/brushFilter.zh.md | 40 + .../plots/interaction/brushHighlight.en.md | 5 + .../plots/interaction/brushHighlight.zh.md | 203 ++ .../plots/interaction/brushXFilter.en.md | 5 + .../plots/interaction/brushXFilter.zh.md | 27 + .../plots/interaction/brushXHighlight.en.md | 5 + .../plots/interaction/brushXHighlight.zh.md | 32 + .../plots/interaction/brushYFilter.en.md | 5 + .../plots/interaction/brushYFilter.zh.md | 30 + .../plots/interaction/brushYHighlight.zh.md | 29 + .../plots/interaction/chartIndex.en.md | 5 + .../plots/interaction/chartIndex.zh.md | 32 + .../plots/interaction/elementHighlight.en.md | 5 + .../plots/interaction/elementHighlight.zh.md | 59 + .../interaction/elementHighlightByColor.en.md | 5 + .../interaction/elementHighlightByColor.zh.md | 33 + .../interaction/elementHighlightByX.en.md | 5 + .../interaction/elementHighlightByX.zh.md | 29 + .../plots/interaction/elementSelect.en.md | 3 + .../plots/interaction/elementSelect.zh.md | 60 + .../interaction/elementSelectByColor.en.md | 5 + .../interaction/elementSelectByColor.zh.md | 34 + .../plots/interaction/elementSelectByX.en.md | 6 + .../plots/interaction/elementSelectByX.zh.md | 32 + .../options/plots/interaction/fisheye.en.md | 5 + .../options/plots/interaction/fisheye.zh.md | 25 + .../plots/interaction/legendFilter.en.md | 5 + .../plots/interaction/legendFilter.zh.md | 49 + .../plots/interaction/legendHighlight.en.md | 5 + .../plots/interaction/legendHighlight.zh.md | 52 + .../options/plots/interaction/poptip.en.md | 5 + .../options/plots/interaction/poptip.zh.md | 25 + .../plots/interaction/scrollbarFilter.en.md | 5 + .../plots/interaction/scrollbarFilter.zh.md | 46 + .../plots/interaction/sliderFilter.en.md | 5 + .../plots/interaction/sliderFilter.zh.md | 48 + .../options/plots/interaction/tooltip.en.md | 5 + .../options/plots/interaction/tooltip.zh.md | 130 + .../options/plots/label/contrastReverse.en.md | 6 + .../options/plots/label/contrastReverse.zh.md | 31 + .../options/plots/label/overflowHide.en.md | 6 + .../options/plots/label/overflowHide.zh.md | 28 + .../options/plots/label/overlapDodgeY.en.md | 6 + .../options/plots/label/overlapDodgeY.zh.md | 31 + .../options/plots/label/overlapHide.en.md | 6 + .../options/plots/label/overlapHide.zh.md | 29 + site/docs/options/plots/label/overview.en.md | 6 + site/docs/options/plots/label/overview.zh.md | 113 + site/docs/options/plots/overview.en.md | 6 + site/docs/options/plots/overview.zh.md | 235 ++ site/docs/options/plots/palette.en.md | 6 + site/docs/options/plots/palette.zh.md | 320 ++ site/docs/options/plots/theme/academy.en.md | 5 + site/docs/options/plots/theme/academy.zh.md | 15 + site/docs/options/plots/theme/classic.en.md | 5 + site/docs/options/plots/theme/classic.zh.md | 15 + .../options/plots/theme/classicDark.en.md | 5 + .../options/plots/theme/classicDark.zh.md | 15 + site/docs/styles/component.md | 40 - site/docs/styles/style.md | 6 - .../statistics/column/demo/bar-dodged.js | 1 - .../examples/statistics/column/demo/meta.json | 16 +- .../statistics/column/demo/scrollbar.js | 5 - .../examples/statistics/column/demo/slider.js | 5 - .../statistics/column/demo/stacked.js | 1 - 280 files changed, 3361 insertions(+), 43780 deletions(-) delete mode 100644 site/docs/api/advanced-plots/facet.en.md delete mode 100644 site/docs/api/advanced-plots/facet.zh.md delete mode 100644 site/docs/api/advanced-plots/mix.en.md delete mode 100644 site/docs/api/advanced-plots/mix.zh.md delete mode 100644 site/docs/api/case.en.md delete mode 100644 site/docs/api/case.zh.md delete mode 100644 site/docs/api/components/annotations.en.md delete mode 100644 site/docs/api/components/annotations.zh.md delete mode 100644 site/docs/api/components/axis.en.md delete mode 100644 site/docs/api/components/axis.zh.md delete mode 100644 site/docs/api/components/conversion-tag.en.md delete mode 100644 site/docs/api/components/conversion-tag.zh.md delete mode 100644 site/docs/api/components/label.en.md delete mode 100644 site/docs/api/components/label.zh.md delete mode 100644 site/docs/api/components/legend.en.md delete mode 100644 site/docs/api/components/legend.zh.md delete mode 100644 site/docs/api/components/scrollbar.en.md delete mode 100644 site/docs/api/components/scrollbar.zh.md delete mode 100644 site/docs/api/components/slider.en.md delete mode 100644 site/docs/api/components/slider.zh.md delete mode 100644 site/docs/api/components/statistic.en.md delete mode 100644 site/docs/api/components/statistic.zh.md delete mode 100644 site/docs/api/components/tooltip.en.md delete mode 100644 site/docs/api/components/tooltip.zh.md delete mode 100644 site/docs/api/graphic-style.en.md delete mode 100644 site/docs/api/graphic-style.zh.md delete mode 100644 site/docs/api/options/animation.en.md delete mode 100644 site/docs/api/options/animation.zh.md delete mode 100644 site/docs/api/options/events.en.md delete mode 100644 site/docs/api/options/events.zh.md delete mode 100644 site/docs/api/options/interactions.en.md delete mode 100644 site/docs/api/options/interactions.zh.md delete mode 100644 site/docs/api/options/meta.en.md delete mode 100644 site/docs/api/options/meta.zh.md delete mode 100644 site/docs/api/options/pattern.en.md delete mode 100644 site/docs/api/options/pattern.zh.md delete mode 100644 site/docs/api/options/theme.en.md delete mode 100644 site/docs/api/options/theme.zh.md delete mode 100644 site/docs/api/plots/column.en.md delete mode 100644 site/docs/api/plots/column.zh.md delete mode 100644 site/docs/common/animate-option.en.md delete mode 100644 site/docs/common/animate-option.zh.md delete mode 100644 site/docs/common/annotations.en.md delete mode 100644 site/docs/common/annotations.zh.md delete mode 100644 site/docs/common/annotations/arc.en.md delete mode 100644 site/docs/common/annotations/arc.zh.md delete mode 100644 site/docs/common/annotations/base-annotation.en.md delete mode 100644 site/docs/common/annotations/base-annotation.zh.md delete mode 100644 site/docs/common/annotations/data-marker.en.md delete mode 100644 site/docs/common/annotations/data-marker.zh.md delete mode 100644 site/docs/common/annotations/data-region.en.md delete mode 100644 site/docs/common/annotations/data-region.zh.md delete mode 100644 site/docs/common/annotations/html.en.md delete mode 100644 site/docs/common/annotations/html.zh.md delete mode 100644 site/docs/common/annotations/image.en.md delete mode 100644 site/docs/common/annotations/image.zh.md delete mode 100644 site/docs/common/annotations/line.en.md delete mode 100644 site/docs/common/annotations/line.zh.md delete mode 100644 site/docs/common/annotations/region-filter.en.md delete mode 100644 site/docs/common/annotations/region-filter.zh.md delete mode 100644 site/docs/common/annotations/region.en.md delete mode 100644 site/docs/common/annotations/region.zh.md delete mode 100644 site/docs/common/annotations/shape.en.md delete mode 100644 site/docs/common/annotations/shape.zh.md delete mode 100644 site/docs/common/annotations/text.en.md delete mode 100644 site/docs/common/annotations/text.zh.md delete mode 100644 site/docs/common/axis.en.md delete mode 100644 site/docs/common/axis.zh.md delete mode 100644 site/docs/common/bar-style.en.md delete mode 100644 site/docs/common/bar-style.zh.md delete mode 100644 site/docs/common/brush.en.md delete mode 100644 site/docs/common/brush.zh.md delete mode 100644 site/docs/common/chart-methods.en.md delete mode 100644 site/docs/common/chart-methods.zh.md delete mode 100644 site/docs/common/chart-options.en.md delete mode 100644 site/docs/common/chart-options.zh.md delete mode 100644 site/docs/common/chord.en.md delete mode 100644 site/docs/common/chord.zh.md delete mode 100644 site/docs/common/color.en.md delete mode 100644 site/docs/common/color.zh.md delete mode 100644 site/docs/common/column-style.en.md delete mode 100644 site/docs/common/column-style.zh.md delete mode 100644 site/docs/common/common-component.en.md delete mode 100644 site/docs/common/common-component.zh.md delete mode 100644 site/docs/common/common-iview.en.md delete mode 100644 site/docs/common/common-iview.zh.md delete mode 100644 site/docs/common/component-no-axis.en.md delete mode 100644 site/docs/common/component-no-axis.zh.md delete mode 100644 site/docs/common/component-polygon.en.md delete mode 100644 site/docs/common/component-polygon.zh.md delete mode 100644 site/docs/common/component-progress.en.md delete mode 100644 site/docs/common/component-progress.zh.md delete mode 100644 site/docs/common/component-tiny.en.md delete mode 100644 site/docs/common/component-tiny.zh.md delete mode 100644 site/docs/common/component.en.md delete mode 100644 site/docs/common/component.zh.md delete mode 100644 site/docs/common/connected-area.en.md delete mode 100644 site/docs/common/connected-area.zh.md delete mode 100644 site/docs/common/conversion-tag.en.md delete mode 100644 site/docs/common/conversion-tag.zh.md delete mode 100644 site/docs/common/crosshairs-text.en.md delete mode 100644 site/docs/common/crosshairs-text.zh.md delete mode 100644 site/docs/common/data.en.md delete mode 100644 site/docs/common/data.zh.md delete mode 100644 site/docs/common/drill-down.en.md delete mode 100644 site/docs/common/drill-down.zh.md delete mode 100644 site/docs/common/events.en.md delete mode 100644 site/docs/common/events.zh.md delete mode 100644 site/docs/common/facet-title.en.md delete mode 100644 site/docs/common/facet-title.zh.md delete mode 100644 site/docs/common/geometry-cfg.en.md delete mode 100644 site/docs/common/geometry-cfg.zh.md delete mode 100644 site/docs/common/interactions.en.md delete mode 100644 site/docs/common/interactions.zh.md delete mode 100644 site/docs/common/label.en.md delete mode 100644 site/docs/common/label.zh.md delete mode 100644 site/docs/common/legend-cfg.en.md delete mode 100644 site/docs/common/legend-cfg.zh.md delete mode 100644 site/docs/common/legend.en.md delete mode 100644 site/docs/common/legend.zh.md delete mode 100644 site/docs/common/line-style.en.md delete mode 100644 site/docs/common/line-style.zh.md delete mode 100644 site/docs/common/marker.en.md delete mode 100644 site/docs/common/marker.zh.md delete mode 100644 site/docs/common/meta.en.md delete mode 100644 site/docs/common/meta.zh.md delete mode 100644 site/docs/common/pattern.en.md delete mode 100644 site/docs/common/pattern.zh.md delete mode 100644 site/docs/common/plot-cfg.en.md delete mode 100644 site/docs/common/plot-cfg.zh.md delete mode 100644 site/docs/common/point-style.en.md delete mode 100644 site/docs/common/point-style.zh.md delete mode 100644 site/docs/common/scrollbar.en.md delete mode 100644 site/docs/common/scrollbar.zh.md delete mode 100644 site/docs/common/shape-style.en.md delete mode 100644 site/docs/common/shape-style.zh.md delete mode 100644 site/docs/common/slider.en.md delete mode 100644 site/docs/common/slider.zh.md delete mode 100644 site/docs/common/state-style.en.md delete mode 100644 site/docs/common/state-style.zh.md delete mode 100644 site/docs/common/statistic.en.md delete mode 100644 site/docs/common/statistic.zh.md delete mode 100644 site/docs/common/text-style.en.md delete mode 100644 site/docs/common/text-style.zh.md delete mode 100644 site/docs/common/theme.en.md delete mode 100644 site/docs/common/theme.zh.md delete mode 100644 site/docs/common/tooltip.en.md delete mode 100644 site/docs/common/tooltip.zh.md delete mode 100644 site/docs/common/xy-field.en.md delete mode 100644 site/docs/common/xy-field.zh.md create mode 100644 site/docs/options/plots/animation/fadeIn.en.md create mode 100644 site/docs/options/plots/animation/fadeIn.zh.md create mode 100644 site/docs/options/plots/animation/fadeOut.en.md create mode 100644 site/docs/options/plots/animation/fadeOut.zh.md create mode 100644 site/docs/options/plots/animation/growInX.en.md create mode 100644 site/docs/options/plots/animation/growInX.zh.md create mode 100644 site/docs/options/plots/animation/growInY.en.md create mode 100644 site/docs/options/plots/animation/growInY.zh.md create mode 100644 site/docs/options/plots/animation/morphing.en.md create mode 100644 site/docs/options/plots/animation/morphing.zh.md create mode 100644 site/docs/options/plots/animation/overview.en.md create mode 100644 site/docs/options/plots/animation/overview.zh.md create mode 100644 site/docs/options/plots/animation/pathIn.en.md create mode 100644 site/docs/options/plots/animation/pathIn.zh.md create mode 100644 site/docs/options/plots/animation/scaleInX.en.md create mode 100644 site/docs/options/plots/animation/scaleInX.zh.md create mode 100644 site/docs/options/plots/animation/scaleInY.en.md create mode 100644 site/docs/options/plots/animation/scaleInY.zh.md create mode 100644 site/docs/options/plots/animation/scaleOutX.en.md create mode 100644 site/docs/options/plots/animation/scaleOutX.zh.md create mode 100644 site/docs/options/plots/animation/scaleOutY.en.md create mode 100644 site/docs/options/plots/animation/scaleOutY.zh.md create mode 100644 site/docs/options/plots/animation/waveIn.en.md create mode 100644 site/docs/options/plots/animation/waveIn.zh.md create mode 100644 site/docs/options/plots/animation/zoomIn.en.md create mode 100644 site/docs/options/plots/animation/zoomIn.zh.md create mode 100644 site/docs/options/plots/animation/zoomOut.en.md create mode 100644 site/docs/options/plots/animation/zoomOut.zh.md create mode 100644 site/docs/options/plots/common/componentTitle.en.md create mode 100644 site/docs/options/plots/common/componentTitle.zh.md create mode 100644 site/docs/options/plots/common/navigator.en.md create mode 100644 site/docs/options/plots/common/navigator.zh.md create mode 100644 site/docs/options/plots/common/sparkline.en.md create mode 100644 site/docs/options/plots/common/sparkline.zh.md create mode 100644 site/docs/options/plots/common/style.en.md create mode 100644 site/docs/options/plots/common/style.zh.md create mode 100644 site/docs/options/plots/component/axis.en.md create mode 100644 site/docs/options/plots/component/axis.zh.md create mode 100644 site/docs/options/plots/component/legend.en.md create mode 100644 site/docs/options/plots/component/legend.zh.md create mode 100644 site/docs/options/plots/component/scrollbar.en.md create mode 100644 site/docs/options/plots/component/scrollbar.zh.md create mode 100644 site/docs/options/plots/component/slider.en.md create mode 100644 site/docs/options/plots/component/slider.zh.md create mode 100644 site/docs/options/plots/component/title.en.md create mode 100644 site/docs/options/plots/component/title.zh.md create mode 100644 site/docs/options/plots/component/tooltip.en.md create mode 100644 site/docs/options/plots/component/tooltip.zh.md create mode 100644 site/docs/options/plots/interaction/brushAxisHighlight.en.md create mode 100644 site/docs/options/plots/interaction/brushAxisHighlight.zh.md create mode 100644 site/docs/options/plots/interaction/brushFilter.en.md create mode 100644 site/docs/options/plots/interaction/brushFilter.zh.md create mode 100644 site/docs/options/plots/interaction/brushHighlight.en.md create mode 100644 site/docs/options/plots/interaction/brushHighlight.zh.md create mode 100644 site/docs/options/plots/interaction/brushXFilter.en.md create mode 100644 site/docs/options/plots/interaction/brushXFilter.zh.md create mode 100644 site/docs/options/plots/interaction/brushXHighlight.en.md create mode 100644 site/docs/options/plots/interaction/brushXHighlight.zh.md create mode 100644 site/docs/options/plots/interaction/brushYFilter.en.md create mode 100644 site/docs/options/plots/interaction/brushYFilter.zh.md create mode 100644 site/docs/options/plots/interaction/brushYHighlight.zh.md create mode 100644 site/docs/options/plots/interaction/chartIndex.en.md create mode 100644 site/docs/options/plots/interaction/chartIndex.zh.md create mode 100644 site/docs/options/plots/interaction/elementHighlight.en.md create mode 100644 site/docs/options/plots/interaction/elementHighlight.zh.md create mode 100644 site/docs/options/plots/interaction/elementHighlightByColor.en.md create mode 100644 site/docs/options/plots/interaction/elementHighlightByColor.zh.md create mode 100644 site/docs/options/plots/interaction/elementHighlightByX.en.md create mode 100644 site/docs/options/plots/interaction/elementHighlightByX.zh.md create mode 100644 site/docs/options/plots/interaction/elementSelect.en.md create mode 100644 site/docs/options/plots/interaction/elementSelect.zh.md create mode 100644 site/docs/options/plots/interaction/elementSelectByColor.en.md create mode 100644 site/docs/options/plots/interaction/elementSelectByColor.zh.md create mode 100644 site/docs/options/plots/interaction/elementSelectByX.en.md create mode 100644 site/docs/options/plots/interaction/elementSelectByX.zh.md create mode 100644 site/docs/options/plots/interaction/fisheye.en.md create mode 100644 site/docs/options/plots/interaction/fisheye.zh.md create mode 100644 site/docs/options/plots/interaction/legendFilter.en.md create mode 100644 site/docs/options/plots/interaction/legendFilter.zh.md create mode 100644 site/docs/options/plots/interaction/legendHighlight.en.md create mode 100644 site/docs/options/plots/interaction/legendHighlight.zh.md create mode 100644 site/docs/options/plots/interaction/poptip.en.md create mode 100644 site/docs/options/plots/interaction/poptip.zh.md create mode 100644 site/docs/options/plots/interaction/scrollbarFilter.en.md create mode 100644 site/docs/options/plots/interaction/scrollbarFilter.zh.md create mode 100644 site/docs/options/plots/interaction/sliderFilter.en.md create mode 100644 site/docs/options/plots/interaction/sliderFilter.zh.md create mode 100644 site/docs/options/plots/interaction/tooltip.en.md create mode 100644 site/docs/options/plots/interaction/tooltip.zh.md create mode 100644 site/docs/options/plots/label/contrastReverse.en.md create mode 100644 site/docs/options/plots/label/contrastReverse.zh.md create mode 100644 site/docs/options/plots/label/overflowHide.en.md create mode 100644 site/docs/options/plots/label/overflowHide.zh.md create mode 100644 site/docs/options/plots/label/overlapDodgeY.en.md create mode 100644 site/docs/options/plots/label/overlapDodgeY.zh.md create mode 100644 site/docs/options/plots/label/overlapHide.en.md create mode 100644 site/docs/options/plots/label/overlapHide.zh.md create mode 100644 site/docs/options/plots/label/overview.en.md create mode 100644 site/docs/options/plots/label/overview.zh.md create mode 100644 site/docs/options/plots/overview.en.md create mode 100644 site/docs/options/plots/overview.zh.md create mode 100644 site/docs/options/plots/palette.en.md create mode 100644 site/docs/options/plots/palette.zh.md create mode 100644 site/docs/options/plots/theme/academy.en.md create mode 100644 site/docs/options/plots/theme/academy.zh.md create mode 100644 site/docs/options/plots/theme/classic.en.md create mode 100644 site/docs/options/plots/theme/classic.zh.md create mode 100644 site/docs/options/plots/theme/classicDark.en.md create mode 100644 site/docs/options/plots/theme/classicDark.zh.md delete mode 100644 site/docs/styles/component.md delete mode 100644 site/docs/styles/style.md diff --git a/README.md b/README.md index a2e41a730..04422eaee 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

-A React chart library, based on [G2Plot](https://github.com/antvis/G2Plot), [G6](https://github.com/antvis/G6), [XFlow](https://github.com/antvis/XFlow), [L7Plot](https://github.com/antvis/L7Plot). +A React chart library, based on [G2](https://github.com/antvis/G2), [G6](https://github.com/antvis/G6), [X6](https://github.com/antvis/X6), [L7](https://github.com/antvis/L7). ![build](https://github.com/ant-design/ant-design-charts/workflows/build/badge.svg) ![npm](https://img.shields.io/npm/v/@ant-design/charts) @@ -15,7 +15,6 @@ A React chart library, based on [G2Plot](https://github.com/antvis/G2Plot), [G6] Quick StartGalleryFAQ • - Blog

@@ -60,51 +59,13 @@ const Page: React.FC = () => { { year: '1999', value: 13 }, ]; - let chart; - const props = { - config: { - data, - width: 800, - height: 400, - autoFit: false, - xField: 'year', - yField: 'value', - point: { - size: 5, - shape: 'diamond', - }, - label: { - style: { - fill: '#aaa', - }, - }, - onReady: (chartInstance) => chart = chartInstance - } + data, + xField: 'year', + yField: 'value', }; - - // Export Image - const downloadImage = () => { - chart?.downloadImage(); - }; - - // Get chart base64 string - const toDataURL = () => { - console.log(chart?.toDataURL()); - }; - - return ( -
- - - -
- ); + return }; export default Page; ``` @@ -114,20 +75,6 @@ Preview -## 📜 Document & API - -See chart API for details. Common props: - -| Property | Description | Type | defaultValue | -| :--- | :--- | :--- | :--- | -| onReady | chart loaded callback | (chart)=> void | - | -| onEvent | chart events | (chart, event)=> void | - | -| loading | loading status | boolean | - | -| loadingTemplate | loading template | React.ReactElement | - | -| errorTemplate | custom error template | (e: Error) => React.ReactNode | - | -| className | container class | string | - | -| style | container style | React.CSSProperties | - | - ## Development Clone locally: @@ -136,8 +83,7 @@ See chart API for details. Common props: $ git clone git@github.com:ant-design/ant-design-charts.git $ cd ant-design-charts $ pnpm install -$ pnpm build:lib -$ pnpm start +$ pnpm build:lib & pnpm start ``` ## 🤝 How to Contribute diff --git a/packages/charts/README.md b/packages/charts/README.md index ab3a3cd81..dea8be701 100644 --- a/packages/charts/README.md +++ b/packages/charts/README.md @@ -2,7 +2,7 @@
-A React chart library, based on [G2Plot](https://github.com/antvis/G2Plot), [G6](https://github.com/antvis/G6), [X6](https://github.com/antvis/X6), [L7Plot](https://github.com/antvis/L7Plot). +A React chart library, based on [G2](https://github.com/antvis/G2), [G6](https://github.com/antvis/G6), [X6](https://github.com/antvis/X6), [L7](https://github.com/antvis/L7). ![build](https://github.com/ant-design/ant-design-charts/workflows/build/badge.svg) ![npm](https://img.shields.io/npm/v/@ant-design/charts) @@ -15,7 +15,6 @@ A React chart library, based on [G2Plot](https://github.com/antvis/G2Plot), [G6] Quick StartGalleryFAQ • - Blog

@@ -72,45 +71,11 @@ const Page: React.FC = () => { const config = { data, - width: 800, - height: 400, - autoFit: false, xField: 'year', yField: 'value', - point: { - size: 5, - shape: 'diamond', - }, - label: { - style: { - fill: '#aaa', - }, - }, }; - let chart; - - // Export Image - const downloadImage = () => { - chart?.downloadImage(); - }; - - // Get chart base64 string - const toDataURL = () => { - console.log(chart?.toDataURL()); - }; - - return ( -
- - - (chart = chartInstance)} /> -
- ); + return ; }; export default Page; ``` @@ -120,21 +85,6 @@ Preview -## 📜 Document & API - -See chart API for details. Common props: - -| Property | Description | Type | defaultValue | -| :--- | :--- | :--- | :--- | -| onReady | chart loaded callback | (chart)=> void | - | -| onEvent | chart events | (chart, event)=> void | - | -| loading | loading status | boolean | - | -| loadingTemplate | loading template | React.ReactElement | - | -| errorTemplate | custom error template | (e: Error) => React.ReactNode | - | -| className | container class | string | - | -| style | container style | React.CSSProperties | - | - - ## 🤝 How to Contribute Your contributions are always welcome! Please Do have a look at the [issues](https://github.com/ant-design/ant-design-charts/issues) first. diff --git a/packages/plots/README.md b/packages/plots/README.md index 6363b13f6..61c42ecb1 100644 --- a/packages/plots/README.md +++ b/packages/plots/README.md @@ -2,7 +2,7 @@
-A React chart library, based on [G2Plot](https://github.com/antvis/G2Plot). +A React chart library, based on [G2](https://github.com/antvis/G2). ![npm](https://img.shields.io/npm/v/@ant-design/plots) ![npm](https://img.shields.io/npm/dm/@ant-design/plots) [![GitHub stars](https://img.shields.io/github/stars/ant-design/ant-design-charts)](https://github.com/ant-design/ant-design-charts/stargazers) [![npm License](https://img.shields.io/npm/l/@ant-design/charts.svg)](https://www.npmjs.com/package/@ant-design/charts) @@ -11,7 +11,6 @@ A React chart library, based on [G2Plot](https://github.com/antvis/G2Plot). Quick StartGalleryFAQ • - Blog

@@ -35,8 +34,8 @@ $ npm install @ant-design/plots ## 🔨 Usage ```tsx | pure -import React from 'react'; -import { Line } from '@ant-design/charts'; +iimport React from 'react'; +import { Line } from '@ant-design/plots'; const Page: React.FC = () => { const data = [ @@ -53,45 +52,11 @@ const Page: React.FC = () => { const config = { data, - width: 800, - height: 400, - autoFit: false, xField: 'year', yField: 'value', - point: { - size: 5, - shape: 'diamond', - }, - label: { - style: { - fill: '#aaa', - }, - }, }; - let chart; - - // Export Image - const downloadImage = () => { - chart?.downloadImage(); - }; - - // Get chart base64 string - const toDataURL = () => { - console.log(chart?.toDataURL()); - }; - - return ( -
- - - (chart = chartInstance)} /> -
- ); + return ; }; export default Page; ``` @@ -100,20 +65,6 @@ Preview -## 📜 Document & API - -See chart API for details. Common props: - -| Property | Description | Type | defaultValue | -| --------------- | --------------------- | ----------------------------- | ------------ | -| onReady | chart loaded callback | (chart)=> void | - | -| onEvent | chart events | (chart, event)=> void | - | -| loading | loading status | boolean | - | -| loadingTemplate | loading template | React.ReactElement | - | -| errorTemplate | custom error template | (e: Error) => React.ReactNode | - | -| className | container class | string | - | -| style | container style | React.CSSProperties | - | - ## 🤝 How to Contribute Your contributions are always welcome! Please Do have a look at the [issues](https://github.com/ant-design/ant-design-charts/issues) first. diff --git a/packages/plots/src/core/plots/violin/type.ts b/packages/plots/src/core/plots/violin/type.ts index 934b083f5..626252bb4 100644 --- a/packages/plots/src/core/plots/violin/type.ts +++ b/packages/plots/src/core/plots/violin/type.ts @@ -1,5 +1,5 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type ViolinOptions = Options & BaseOptions & { - violinType?: 'normal' | 'density' | 'polar' +export type ViolinOptions = Options & { + violinType?: 'normal' | 'density' | 'polar'; }; diff --git a/packages/plots/src/core/types/common.ts b/packages/plots/src/core/types/common.ts index 588402085..97496c540 100644 --- a/packages/plots/src/core/types/common.ts +++ b/packages/plots/src/core/types/common.ts @@ -58,12 +58,6 @@ export type BaseOptions = { * @title 分组 */ readonly group?: boolean | DodgeXTransform; - /** - * @title 图形 - * @description interval 图形元素展示形状 - * @example smooth | hvh - */ - readonly shape?: string; /** * @title 标签 * @description 待底层导出 @@ -96,7 +90,7 @@ export type Options = Spec & * @title 嵌套 view * @description 用于 Mix 等复杂图表 */ - children?: Options[]; + children?: Array; }; export type Adaptor

= { diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 861e234de..3152a7963 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -39,34 +39,72 @@ export default defineConfig({ zh: '教程', en: 'Manual', }, - order: 3, }, { - slug: 'examples', + slug: 'docs/options/plots/overview', title: { - zh: '图表示例', - en: 'Examples', + zh: '选项', + en: 'Option', }, - order: 2, }, { - slug: 'docs/api', + slug: 'examples', title: { - zh: 'API', - en: 'API', + zh: '图表示例', + en: 'Examples', }, - order: 1, }, ], docs: [ { - slug: 'api/options', + slug: 'options/plots', title: { - zh: '通用配置-统计图表', + zh: '统计图表', en: 'Common Configuration Statistical Charts', }, order: 1, }, + { + slug: 'options/plots/component', + title: { + zh: '组件 - Component', + en: 'Component', + }, + order: 9, + }, + { + slug: 'options/plots/label', + title: { + zh: '数据标签 - Label', + en: 'Label', + }, + order: 10, + }, + + { + slug: 'options/plots/animation', + title: { + zh: '动画 - Animation', + en: 'Animation', + }, + order: 11, + }, + { + slug: 'options/plots/interaction', + title: { + zh: '交互 - Interaction', + en: 'Interaction', + }, + order: 12, + }, + { + slug: 'options/plots/theme', + title: { + zh: '主题 - Theme', + en: 'Theme', + }, + order: 16, + }, ], examples: [ { diff --git a/site/docs/api/advanced-plots/facet.en.md b/site/docs/api/advanced-plots/facet.en.md deleted file mode 100644 index 6250ebdd8..000000000 --- a/site/docs/api/advanced-plots/facet.en.md +++ /dev/null @@ -1,283 +0,0 @@ ---- -title: Facet -order: 9 ---- - ---- -title: 分面图 -order: 9 ---- - -分面(Facet)是指利用 G2 提供的 View 递归嵌套能力,将一份数据按照某个维度分隔成若干子集,然后创建一个图表的集合,将每一个数据子集绘制到图表矩阵的窗格中。 - -分面主要提供了两个功能: - -1. 按照指定的维度划分数据集; -2. 对图表进行排版和布局。 - -对于探索型数据分析来说,分面是一个强大有力的工具,能帮我们快速地分析出数据各个子集模式的异同。目前 G2 内置的分面包括六种:rect、list、circle、tree、mirror 和 matrix,具体描述如下表所示: - -| **分面类型** | **说明** | -| :----------: | :---------------------------------------------------: | -| rect | **默认类型**,指定 2 个维度作为行列,形成图表的矩阵。 | -| list | 指定一个维度,可以指定一行有几列,超出自动换行。 | -| circle | 指定一个维度,沿着圆分布。 | -| tree | 指定多个维度,每个维度作为树的一级,展开多层图表。 | -| mirror | 指定一个维度,形成镜像图表。 | -| matrix | 指定一个维度,形成矩阵分面。 | - -具体 API 如下: - -### 图表容器 - -#### width - -**optional** *number* *default:* `400` - -设置图表宽度。 - -#### height - -**optional** *number* *default:* `400` - -设置图表高度。 - -#### autoFit - -**optional** *boolean* *default:* `true` - -图表是否自适应容器宽高。当 `autoFit` 设置为 true 时,`width` 和 `height` 的设置将失效。 - -#### appendPadding - -**optional** *number\[] | number* - -额外增加的 `appendPadding` 值,在 `padding` 的基础上,设置额外的 padding 数值,可以是单个数字 `16`,或者数组 `[16, 8, 16, 8]` 代表四个方向。 - -#### renderer - -**optional** *string* *default:* `canvas` - -设置图表渲染方式为 `canvas` 或 `svg`。 - -#### pixelRatio - -**optional** *number* *default:* `window.devicePixelRatio` - -设置图表渲染的像素比,和底层的 devicePixelRatio 含义一致,一般不用设置,除非在页面有整体 scale 的情况下,可以自定义。 - -#### limitInPlot - -**optional** *boolean* - -是否对超出坐标系范围的 Geometry 进行剪切。 - -### FacetCfg - -#### FacetCfg.type - - *string* **optional** 可选项:'rect' | 'list' | 'circle' | 'tree' | 'mirror' | 'matrix'; - -分面类型。 - -| **分面类型** | **说明** | -| :----------: | :---------------------------------------------------------------------------------------------------------------------------------------------: | -| rect | **默认类型**,指定 2 个维度作为行列,形成图表的矩阵。矩形分面是 G2 的默认分面类型。支持一个或者两个维度的数据划分,按照先列后行的顺序进行配置。 | -| list | 指定一个维度,可以指定一行有几列,超出自动换行。水平列表分面可以通过设置 `cols` 属性来指定每行可显示分面的个数,超出时会自动换行。 | -| circle | 指定一个维度,沿着圆分布。 | -| tree | 指定多个维度,每个维度作为树的一级,展开多层图表。树形分面一般用于展示存在层次结构的数据,展示的是整体和部分之间的关系。 | -| mirror | 指定一个维度,形成镜像图表。 | -| matrix | 指定一个维度,形成矩阵分面。矩阵分面主要对比数据中多个字段之间的关系,例如常见的散点矩阵图。 | - -#### FacetCfg.fields - - *string\[]* **optional** - -指定数据集划分依据的字段。 - -#### FacetCfg.padding - - *number | number\[] | 'auto'* **optional** - -每个 facet 的内边距,设置方式参考 css 盒模型。 - -#### FacetCfg.showTitle - - *boolean* **optional** - -是否显示标题。 - -#### FacetCfg.title - - *FacetTitle* **optional** - -标题样式。 - -*FacetTitle* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------------------------------------- | ------ | ------------------- | -| offsetX | number | - | x 方向偏移 | -| offsetY | number | - | y 方向偏移 | -| style | [ShapeAttrs](/zh/docs/api/graphic-style) | - | 文本样式 | -| formatter | (val: any) => any | - | 回调配置 title 内容 | - - -#### FacetCfg.cols - - *number* **optional** - -指定每行可显示分面的个数,超出时会自动换行。适用于 list 分面 - -#### FacetCfg.line - - *Line* **optional** - -适用于 tree 分面 - -设置树线条的样式。*Line* 配置如下: - -| 参数名 | 类型 | 是否必选 | 默认值 | 描述 | -| ------ | ---------------------------------------- | -------- | ------ | ------------ | -| style | [ShapeAttrs](/zh/docs/api/graphic-style) | | - | 线条样式 | -| smooth | boolean | | - | 线条是否平滑 | - -#### FacetCfg.transpose - - *boolean* **optional** *default:* `false` - -是否翻转,默认为 `false`。通过配置该值为 `true`,可以将镜像分面翻转。适用于 mirror 分面 - -#### FacetCfg.columnTitle - - *FacetTitle* **optional** - -列标题的样式。适用于 rect 分面matrix 分面 - -*FacetTitle* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------------------------------------- | ------ | ------------------- | -| offsetX | number | - | x 方向偏移 | -| offsetY | number | - | y 方向偏移 | -| style | [ShapeAttrs](/zh/docs/api/graphic-style) | - | 文本样式 | -| formatter | (val: any) => any | - | 回调配置 title 内容 | - - -#### FacetCfg.rowTitle - - *FacetTitle* **optional** - -行标题的样式。适用于 rect 分面matrix 分面 - -*FacetTitle* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------------------------------------- | ------ | ------------------- | -| offsetX | number | - | x 方向偏移 | -| offsetY | number | - | y 方向偏移 | -| style | [ShapeAttrs](/zh/docs/api/graphic-style) | - | 文本样式 | -| formatter | (val: any) => any | - | 回调配置 title 内容 | - - -#### FacetCfg.eachView - - *ViewCallback* **optional** - -使用回调函数配置每个 view 中具体的绘图表现,回调函数返回参数同 mix 图表的 plots 配置 - -```sign -type ViewCallback = (innerView: View, facet?: FacetData) => IPlot; -``` - - - -其中 *FacetData* 结构如下: - -| 属性 | 类型 | 描述 | -| ------------------ | ---------- | ------------------------------------------- | -| type | string | 分面类型 | -| data | object\[] | 当前分面子 view 的数据 | -| region | *Region* | 当前分面子 view 的范围,*Region* 结构见下面 | -| padding | number | 当前分面子 view 的 padding | -| view | View | 当前 facet 对应生成的 view | -| rowField | string | 分面行字段 | -| columnField | string | 分面列字段 | -| rowValue | string | 当前行分面的枚举值 | -| columnValue | string | 当前列分面的枚举值 | -| rowIndex | number | 当前行索引 | -| columnIndex | number | 当前列索引 | -| rowValuesLength | number | 当前行字段的枚举值长度 | -| columnValuesLength | number | 当前列字段的枚举值长度 | -| children | TreeData\[] | 只有 tree 类型分面有,树 children 数据 | -| originColIndex | number | 只有 tree 类型分面有,原始数据列 index | - -### IPlot - -#### IPlot.type - -**必选** *string* - -plot 类型,通过传入指定 type 的 plot,可以在图层上渲染 G2Plot 内置的图表。 - -目前开放的图表类型有以下类型: - -* **基础图表**:`'line' | 'pie' | 'column' | 'bar' | 'area' | 'gauge' |'scatter' | 'histogram' | 'funnel'` -* **迷你图表**:`'tiny-line' | 'tiny-column' | 'tiny-area' | 'progress' | 'ring-progress'` - -#### IPlot.options - -**必选** *object\[]* - -plot 的具体配置项。每个 plot 都有自己的图层容器设置(不包括:width, height)以及数据、字段、样式等配置。 - -具体配置项见指定 plot 的 API 文档。如:type='column'时,options 对应 ColumnOptions,见文档: [Column API](/zh/docs/api/plots/column) - -

- -```ts -type IPlot = - | { - type: 'line'; - options: Omit; - } - | { - type: 'pie'; - options: Omit; - } - | { - // ... 等等 - }; -``` - -
- - - diff --git a/site/docs/api/advanced-plots/facet.zh.md b/site/docs/api/advanced-plots/facet.zh.md deleted file mode 100644 index b1346191b..000000000 --- a/site/docs/api/advanced-plots/facet.zh.md +++ /dev/null @@ -1,278 +0,0 @@ ---- -title: 分面图 -order: 9 ---- - -分面(Facet)是指利用 G2 提供的 View 递归嵌套能力,将一份数据按照某个维度分隔成若干子集,然后创建一个图表的集合,将每一个数据子集绘制到图表矩阵的窗格中。 - -分面主要提供了两个功能: - -1. 按照指定的维度划分数据集; -2. 对图表进行排版和布局。 - -对于探索型数据分析来说,分面是一个强大有力的工具,能帮我们快速地分析出数据各个子集模式的异同。目前 G2 内置的分面包括六种:rect、list、circle、tree、mirror 和 matrix,具体描述如下表所示: - -| **分面类型** | **说明** | -| :----------: | :---------------------------------------------------: | -| rect | **默认类型**,指定 2 个维度作为行列,形成图表的矩阵。 | -| list | 指定一个维度,可以指定一行有几列,超出自动换行。 | -| circle | 指定一个维度,沿着圆分布。 | -| tree | 指定多个维度,每个维度作为树的一级,展开多层图表。 | -| mirror | 指定一个维度,形成镜像图表。 | -| matrix | 指定一个维度,形成矩阵分面。 | - -具体 API 如下: - -### 图表容器 - -#### width - -**optional** *number* *default:* `400` - -设置图表宽度。 - -#### height - -**optional** *number* *default:* `400` - -设置图表高度。 - -#### autoFit - -**optional** *boolean* *default:* `true` - -图表是否自适应容器宽高。当 `autoFit` 设置为 true 时,`width` 和 `height` 的设置将失效。 - -#### appendPadding - -**optional** *number\[] | number* - -额外增加的 `appendPadding` 值,在 `padding` 的基础上,设置额外的 padding 数值,可以是单个数字 `16`,或者数组 `[16, 8, 16, 8]` 代表四个方向。 - -#### renderer - -**optional** *string* *default:* `canvas` - -设置图表渲染方式为 `canvas` 或 `svg`。 - -#### pixelRatio - -**optional** *number* *default:* `window.devicePixelRatio` - -设置图表渲染的像素比,和底层的 devicePixelRatio 含义一致,一般不用设置,除非在页面有整体 scale 的情况下,可以自定义。 - -#### limitInPlot - -**optional** *boolean* - -是否对超出坐标系范围的 Geometry 进行剪切。 - -### FacetCfg - -#### FacetCfg.type - - *string* **optional** 可选项:'rect' | 'list' | 'circle' | 'tree' | 'mirror' | 'matrix'; - -分面类型。 - -| **分面类型** | **说明** | -| :----------: | :---------------------------------------------------------------------------------------------------------------------------------------------: | -| rect | **默认类型**,指定 2 个维度作为行列,形成图表的矩阵。矩形分面是 G2 的默认分面类型。支持一个或者两个维度的数据划分,按照先列后行的顺序进行配置。 | -| list | 指定一个维度,可以指定一行有几列,超出自动换行。水平列表分面可以通过设置 `cols` 属性来指定每行可显示分面的个数,超出时会自动换行。 | -| circle | 指定一个维度,沿着圆分布。 | -| tree | 指定多个维度,每个维度作为树的一级,展开多层图表。树形分面一般用于展示存在层次结构的数据,展示的是整体和部分之间的关系。 | -| mirror | 指定一个维度,形成镜像图表。 | -| matrix | 指定一个维度,形成矩阵分面。矩阵分面主要对比数据中多个字段之间的关系,例如常见的散点矩阵图。 | - -#### FacetCfg.fields - - *string\[]* **optional** - -指定数据集划分依据的字段。 - -#### FacetCfg.padding - - *number | number\[] | 'auto'* **optional** - -每个 facet 的内边距,设置方式参考 css 盒模型。 - -#### FacetCfg.showTitle - - *boolean* **optional** - -是否显示标题。 - -#### FacetCfg.title - - *FacetTitle* **optional** - -标题样式。 - -*FacetTitle* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------------------------------------- | ------ | ------------------- | -| offsetX | number | - | x 方向偏移 | -| offsetY | number | - | y 方向偏移 | -| style | [ShapeAttrs](/zh/docs/api/graphic-style) | - | 文本样式 | -| formatter | (val: any) => any | - | 回调配置 title 内容 | - - -#### FacetCfg.cols - - *number* **optional** - -指定每行可显示分面的个数,超出时会自动换行。适用于 list 分面 - -#### FacetCfg.line - - *Line* **optional** - -适用于 tree 分面 - -设置树线条的样式。*Line* 配置如下: - -| 参数名 | 类型 | 是否必选 | 默认值 | 描述 | -| ------ | ---------------------------------------- | -------- | ------ | ------------ | -| style | [ShapeAttrs](/zh/docs/api/graphic-style) | | - | 线条样式 | -| smooth | boolean | | - | 线条是否平滑 | - -#### FacetCfg.transpose - - *boolean* **optional** *default:* `false` - -是否翻转,默认为 `false`。通过配置该值为 `true`,可以将镜像分面翻转。适用于 mirror 分面 - -#### FacetCfg.columnTitle - - *FacetTitle* **optional** - -列标题的样式。适用于 rect 分面matrix 分面 - -*FacetTitle* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------------------------------------- | ------ | ------------------- | -| offsetX | number | - | x 方向偏移 | -| offsetY | number | - | y 方向偏移 | -| style | [ShapeAttrs](/zh/docs/api/graphic-style) | - | 文本样式 | -| formatter | (val: any) => any | - | 回调配置 title 内容 | - - -#### FacetCfg.rowTitle - - *FacetTitle* **optional** - -行标题的样式。适用于 rect 分面matrix 分面 - -*FacetTitle* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------------------------------------- | ------ | ------------------- | -| offsetX | number | - | x 方向偏移 | -| offsetY | number | - | y 方向偏移 | -| style | [ShapeAttrs](/zh/docs/api/graphic-style) | - | 文本样式 | -| formatter | (val: any) => any | - | 回调配置 title 内容 | - - -#### FacetCfg.eachView - - *ViewCallback* **optional** - -使用回调函数配置每个 view 中具体的绘图表现,回调函数返回参数同 mix 图表的 plots 配置 - -```sign -type ViewCallback = (innerView: View, facet?: FacetData) => IPlot; -``` - - - -其中 *FacetData* 结构如下: - -| 属性 | 类型 | 描述 | -| ------------------ | ---------- | ------------------------------------------- | -| type | string | 分面类型 | -| data | object\[] | 当前分面子 view 的数据 | -| region | *Region* | 当前分面子 view 的范围,*Region* 结构见下面 | -| padding | number | 当前分面子 view 的 padding | -| view | View | 当前 facet 对应生成的 view | -| rowField | string | 分面行字段 | -| columnField | string | 分面列字段 | -| rowValue | string | 当前行分面的枚举值 | -| columnValue | string | 当前列分面的枚举值 | -| rowIndex | number | 当前行索引 | -| columnIndex | number | 当前列索引 | -| rowValuesLength | number | 当前行字段的枚举值长度 | -| columnValuesLength | number | 当前列字段的枚举值长度 | -| children | TreeData\[] | 只有 tree 类型分面有,树 children 数据 | -| originColIndex | number | 只有 tree 类型分面有,原始数据列 index | - -### IPlot - -#### IPlot.type - -**必选** *string* - -plot 类型,通过传入指定 type 的 plot,可以在图层上渲染 G2Plot 内置的图表。 - -目前开放的图表类型有以下类型: - -* **基础图表**:`'line' | 'pie' | 'column' | 'bar' | 'area' | 'gauge' |'scatter' | 'histogram' | 'funnel'` -* **迷你图表**:`'tiny-line' | 'tiny-column' | 'tiny-area' | 'progress' | 'ring-progress'` - -#### IPlot.options - -**必选** *object\[]* - -plot 的具体配置项。每个 plot 都有自己的图层容器设置(不包括:width, height)以及数据、字段、样式等配置。 - -具体配置项见指定 plot 的 API 文档。如:type='column'时,options 对应 ColumnOptions,见文档: [Column API](/zh/docs/api/plots/column) - -
- -```ts -type IPlot = - | { - type: 'line'; - options: Omit; - } - | { - type: 'pie'; - options: Omit; - } - | { - // ... 等等 - }; -``` - -
- - - diff --git a/site/docs/api/advanced-plots/mix.en.md b/site/docs/api/advanced-plots/mix.en.md deleted file mode 100644 index 3118d311c..000000000 --- a/site/docs/api/advanced-plots/mix.en.md +++ /dev/null @@ -1,433 +0,0 @@ ---- -title: Mix Plot -order: 8 ---- - -### Plot Container - -#### width - -**optional** *number* *default:* `400` - -Set the width of the chart. - -#### height - -**optional** *number* *default:* `400` - -Set the height of the chart. - -#### autoFit - -**optional** *boolean* *default:* `true` - -Whether the chart automatically adjusts to fit the container. If it is set to `true`, `width` and `height` configuration would fail. - -#### padding - -**optional** *number\[] | number | 'auto'* - -Set `padding` value of the canvas. You can also use `auto`. - -#### appendPadding - -**optional** *number\[] | number* - -Extra `appendPadding` value. - -#### renderer - -**optional** *string* *default:* `canvas` - -Set the render way to `canvas` or `svg`. - -#### pixelRatio - -**optional** *number* *default:* `window.devicePixelRatio` - -Set the pixel ratio of the chart. - -#### limitInPlot - -**optional** *boolean* - -Whether clip the Geometry beyond the coordinate system。 - - - -#### locale - -**optional** *string* - -Specify the locale. There are two built-in locales: 'zh-CN' and 'en-US'. Or you can use `G2Plot.registerLocale` to register a new locale. Go [src/locales/en\_US.ts](https://github.com/antvis/G2Plot/blob/master/src/locales/en\_US.ts) to see the format. - - -### View - -#### syncViewPadding ✨ - -**optional** *boolean* - -是否同步子 view 的 padding 配置。传入 boolean 值,含义是:是否需要将子 View 的 padding 同步,如果设置同步,那么可以保证子 View 在 auto padding 的情况下,所有子 View 的图形能够完全重合,避免显示上的错位。 - -#### views - -**optional** *IView\[]* - -Configuration of `views` is an array. Every view has its own data, geometries and geometry configuration. -see more: [IView](#iview) - -#### plots - -**可选** *IPlot\[]* - -每一个图层的配置,每一个 plot 也是一个图层,都包含自己的:数据、图形、图形配置. - -在 2.3.9 版本之后,我们提供了 `plots` 的配置项,你可以使用 plots 来代替 views 或者联合使用. - - - -### IView - -#### IView.region - -**optional** *object* - -The region of view, default is full of region. - -Example: - -```ts -// Set the region of view in the upper part -region: { - start: { x: 0, y: 0 }, - end: { x: 1, y: 0.5 }, -} -``` - -#### IView.data - -**required** *array object* - -Configure the data source. The data source is a collection of objects. For example: - -```ts -const data = [ - { time: '1991',value: 20 }, - { time: '1992',value: 20 }, -]; -``` - - -#### IView.geometries - -**optional** *array object* - -view 上的图形 geometry 及映射配置,具体见[Geometry Configuration](#geometryconfiguration) - - - -#### IView.meta - -**optional** *object* - -Configure the meta of each data field of the chart in global, to define the type and presentation of data. Configuration of the meta will affect the text content of all components. - -| Properties | Type | Description | -| ---------- | ---------- | -------------------------------------------------------- | -| alias | *string* | alias of the data field | -| formatter | *function* | callback function to format all values of the data field | -| values | *string\[]* | enumerate all the values of the data field | -| range | *number\[]* | mapping range of the data field, default: \[0,1] | - -See also the [Meta Options](/en/docs/api/options/meta) to learn more about configuration of `meta`. - - -#### IView.coordinate - -Configuration of coordinate, every view has its own coordinate. The geometries of the same view share the same coordinate system. - -| Properties | Type | Description | -| ------- | --------------- | -------------------------------------------------------- | -| type | *string* | `'polar' | 'theta' | 'rect' | 'cartesian' | 'helix'` | -| cfg | *CoordinateCfg* | CoordinateCfg 坐标系配置项,目前常用于极坐标 | -| actions | *array object* | 坐标系的变换配置,具体可以见 G2 坐标系[文档](https://g2.antv.vision/en/docs/api/general/coordinate) - -
- -```ts -type CoordinateCfg = { - // 用于极坐标,配置起始弧度。 - startAngle?: number; - // 用于极坐标,配置结束弧度。 - endAngle?: number; - // 用于极坐标,配置极坐标半径,0 - 1 范围的数值。 - radius?: number; - // 用于极坐标,极坐标内半径,0 -1 范围的数值。 - innerRadius?: number; -}; -``` - -
-#### IView.axes - -**optional** *object | false* - -view 上的图形坐标轴配置,key 值对应 `xField` 和 `yField`, value 具体配置见:[Axis API](/en/docs/api/components/axis) - -
- -```ts -{ - [field]: AxisOptions | false, -} -``` - -
- -#### IView.annotations - -**optional** *object\[]* - -Annotations of geometry in view, see more: [Annotations API](/en/docs/api/components/annotations) - -#### IView.interactions - -**optional** *object\[]* - -Interactions of view, see more: [Interactions API](/en/docs/api/options/interactions) - -#### IView.tooltip - -**optional** *object* - -Tooltip of view, see more: [Tooltip API](/en/docs/api/options/tooltip) - -#### IView.animation - -**optional** *object* - -Animation of view, see more: [Animation API](/en/docs/api/options/animation) - - - - -### Geometry Configuration - - - -#### IGeometry.type - -**required** *string* - -Type of geometry, includes: `'line' | 'interval' | 'point' | 'area' | 'polygon'`。 - -#### IGeometry.mapping ✨ - -**required** *object* - -Mapping rules of geometry. - -在图形语法中,数据可以通过 `color`, `shape`, `size` 等视觉属性映射到图形上,另外 G2/G2Plot 还提供了 `style` 和 `tooltip`,让图形展示更多的信息。具体类型定义见下:(其中:ShapeStyle 具体见[绘图属性](/en/docs/api/graphic-style)) - -
- -```ts -type MappingOptions = { - /** color 映射 */ - readonly color?: ColorAttr; - /** shape 映射 */ - readonly shape?: ShapeAttr; - /** 大小映射, 提供回调的方式 */ - readonly size?: SizeAttr; - /** 样式映射 */ - readonly style?: StyleAttr; - /** tooltip 映射 */ - readonly tooltip?: TooltipAttr; -} - -/** 颜色映射 */ -type ColorAttr = string | string[] | ((datum: Datum) => string); -/** 尺寸大小映射 */ -type SizeAttr = number | [number, number] | ((datum: Datum) => number); -/** 图形 shape 映射 */ -type ShapeAttr = string | string[] | ((datum: Datum) => string); -/** 图形样式 style 映射 */ -type StyleAttr = ShapeStyle | ((datum: Datum) => ShapeStyle); -/** tooltip 的回调 */ -type TooltipAttr = (datum: Datum) => { name: string; value: string | number }; -``` - -
- -#### IGeometry.xField - -**optional** *string* - -对应 x 轴字段。数据映射到几何图形 geometry 上时,最重要的通道是 `position` 通道。笛卡尔坐标系上的几何图形,通常是一维或二维的,对应位置视觉通道需要 `x`, `y` 两个(或一个)字段的值。 - -#### IGeometry.yField - -**optional** *string* - -对应 y 轴字段。数据映射到几何图形 geometry 上时,最重要的通道是 `position` 通道。笛卡尔坐标系上的几何图形,通常是一维或二维的,对应位置视觉通道需要 `x`, `y` 两个(或一个)字段的值。 - -#### IGeometry.colorField - -**optional** *string* - -The mapping field of `color`. 通过颜色视觉通道对数据进行分组。 - -#### IGeometry.shapeField - -**optional** *string* - -The mapping field of `shape`. 通过不同的形状对数据进行分组。 - -#### IGeometry.sizeField - -**optional** *string* - -The mapping field of `size`. 通过 size 字段,可以将数据按照 `sizeField` 对应的数据进行不同的大小映射。 - -#### IGeometry.styleField - -**optional** *string* - -The mapping field of `style`, - -#### IGeometry.tooltipFields - -**optional** *string\[] | false* - -The mapping fields of `tooltip`, - -#### IGeometry.label - -**optional** *object* - -The mapping of `label`, see more: [Label API](/en/docs/api/components/label) - -#### IGeometry.adjust - -Adjust of data. - -The purpose of adjusting data is to make the graphics not obscure each other and to have a clearer understanding of the data, but the correct understanding of the data must be ensured. See more: [Adjust | G2](https://g2.antv.vision/en/docs/manual/concepts/adjust) - -| Properties | Type | Description | -| ------------ | ----------- | -------- | -| type | 'stack' | 'dodge' | 'jitter' | 'symmetric' | 数据调整类型 | -| marginRatio | number | 只对 'dodge' 生效,取 0 到 1 范围的值(相对于每个柱子宽度),用于控制一个分组中柱子之间的间距 | -| dodgeBy | string | 只对 'dodge' 生效,声明以哪个数据字段为分组依据 | -| reverseOrder | boolean | 只对 'stack' 生效,用于控制是否对数据进行反序操作 | - -#### IGeometry.state - -**optional** *object* - -Style of different state. - - - - -### IPlot - -#### IPlot.region - -**optional** *object* - -plot 所在图层(view)的布局范围,默认是占满全部。 - -```ts -// 示例:设置 plot 所在图层(view)的布局位置在上半部分 -region: { - start: { x: 0, y: 0 }, - end: { x: 1, y: 0.5 }, -} -``` - -#### IPlot.type - -**required** *string* - -plot 类型,通过传入指定 type 的 plot,可以在图层上渲染 G2Plot 内置的图表。 - -目前开放的图表类型有以下类型: - -* **基础图表**:`'line' | 'pie' | 'column' | 'bar' | 'area' | 'gauge' | 'scatter' | 'histogram' | 'funnel` -* **迷你图表**:`'tiny-line' | 'tiny-column' | 'tiny-area' | 'progress' | 'ring-progress'` - -#### IPlot.options - -**required** *object\[]* - -plot 的具体配置项。每个 plot 都有自己的图层容器设置(不包括:width, height)以及数据、字段、样式等配置。 - -具体配置项见指定 plot 的 API 文档. 如:type='column'时,options 对应 ColumnOptions,见文档: [Column API](/en/docs/api/plots/column) - -
- -```ts -type IPlot = - | { - type: 'line'; - options: Omit; - } - | { - type: 'pie'; - options: Omit; - } - | { - // ... 等等 - }; -``` - -
- - -**示例**:添加一个图层,引入 column plot 和 bar plot - -```ts -plots: [ - { - type: 'column', - region: { start: { x: 0, y: 0 }, end: { x: 0.48, y: 1 } }, - options: { - data: [ - { city: '广州', sales: 1024 }, - { city: '杭州', sales: 724 }, - { city: '深圳', sales: 1256 }, - ], - xField: 'city', - yField: 'sales', - seriesField: 'city', - }, - }, - { - type: 'bar', - region: { start: { x: 0.52, y: 0 }, end: { x: 1, y: 1 } }, - options: { - data: [ - { city: '广州', sales: 1024 }, - { city: '杭州', sales: 724 }, - { city: '深圳', sales: 1256 }, - ], - yField: 'city', - xField: 'sales', - seriesField: 'city', - }, - }, -]; -``` - -### 其他 - -#### tooltip - -顶层 tooltip 配置(在 chart 层配置)。可以让所有图层共享一个 tooltip。 - -当你设置子图层的 tooltip 时,建议关闭顶层 tooltip。 - -#### legend - -顶层 legend 配置(统一在 chart 层配置)。 diff --git a/site/docs/api/advanced-plots/mix.zh.md b/site/docs/api/advanced-plots/mix.zh.md deleted file mode 100644 index 61c103e55..000000000 --- a/site/docs/api/advanced-plots/mix.zh.md +++ /dev/null @@ -1,431 +0,0 @@ ---- -title: 多图层图表 -order: 8 ---- - -### 图表容器 - -#### width - -**optional** *number* *default:* `400` - -设置图表宽度。 - -#### height - -**optional** *number* *default:* `400` - -设置图表高度。 - -#### autoFit - -**optional** *boolean* *default:* `true` - -图表是否自适应容器宽高。当 `autoFit` 设置为 true 时,`width` 和 `height` 的设置将失效。 - -#### padding - -**optional** *number\[] | number | 'auto'* - -画布的 `padding` 值,代表图表在上右下左的间距,可以为单个数字 `16`,或者数组 `[16, 8, 16, 8]` 代表四个方向,或者开启 `auto`,由底层自动计算间距。 - -#### appendPadding - -**optional** *number\[] | number* - -额外增加的 `appendPadding` 值,在 `padding` 的基础上,设置额外的 padding 数值,可以是单个数字 `16`,或者数组 `[16, 8, 16, 8]` 代表四个方向。 - -#### renderer - -**optional** *string* *default:* `canvas` - -设置图表渲染方式为 `canvas` 或 `svg`。 - -#### pixelRatio - -**optional** *number* *default:* `window.devicePixelRatio` - -设置图表渲染的像素比,和底层的 devicePixelRatio 含义一致,一般不用设置,除非在页面有整体 scale 的情况下,可以自定义。 - -#### limitInPlot - -**optional** *boolean* - -是否对超出坐标系范围的 Geometry 进行剪切。 - - - -#### locale - -**optional** *string* - -指定具体语言,目前内置 'zh-CN' and 'en-US' 两个语言,你也可以使用 `G2Plot.registerLocale` 方法注册新的语言。语言包格式参考:[src/locales/en\_US.ts](https://github.com/antvis/G2Plot/blob/master/src/locales/en\_US.ts) - - -### 图层配置 - -#### syncViewPadding ✨ - -**可选** *boolean* - -是否同步子 view 的 padding 配置。传入 boolean 值,含义是:是否需要将子 View 的 padding 同步,如果设置同步,那么可以保证子 View 在 auto padding 的情况下,所有子 View 的图形能够完全重合,避免显示上的错位。 - -#### views - -**可选** *IView\[]* - -每一个图层的配置,每个图层都包含自己的:数据、图形、图形配置。具体见 [IView](#iview) - -#### plots - -**可选** *IPlot\[]* - -每一个图层的配置,每一个 plot 也是一个图层,都包含自己的:数据、图形、图形配置。 - -在 2.3.9 版本之后,我们提供了 `plots` 的配置项,你可以使用 plots 来代替 views 或者联合使用。 - - - -### IView - -#### IView.region - -**可选** *object* - -view 的布局范围,默认是占满全部。 - -Example: - -```ts -// 设置 view 的布局位置在上半部分 -region: { - start: { x: 0, y: 0 }, - end: { x: 1, y: 0.5 }, -} -``` - -#### IView.data - -**required** *array object* - -设置图表数据源。数据源为对象集合,例如: - -```ts -const data = [ - { time: '1991',value: 20 }, - { time: '1992',value: 20 }, -]; -``` - - -#### IView.geometries - -**可选** *array object* - -view 上的图形 geometry 及映射配置,具体见[图层图形](#图层图形) - - - -#### IView.meta - -**optional** *object* - -全局化配置图表数据元信息,以字段为单位进行配置,来定义数据的类型和展示方式。在 meta 上的配置将同时影响所有组件的文本信息。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------- | ------------------------------------------- | -| alias | *string* | 字段的别名 | -| formatter | *function* | callback 方法,对该字段所有值进行格式化处理 | -| values | *string\[]* | 枚举该字段下所有值 | -| range | *number\[]* | 字段的数据映射区间,默认为\[0,1] | - -关于 `meta` 的更多配置项,请查看 [Meta Options](/zh/docs/api/options/meta) - - -#### IView.coordinate - -坐标系的配置,每一个 view 具有自己的坐标系。同一个 view 下的 geometries 共用一个坐标系。 - -| 参数名 | 类型 | 可选值 | | -| ------- | --------------- | --------------------------------------------------------------------------------------------------- | -| type | *string* | `'polar' \| 'theta' \| 'rect' \| 'cartesian' \| 'helix'` | -| cfg | *CoordinateCfg* | CoordinateCfg 坐标系配置项,目前常用于极坐标 | -| actions | *array object* | 坐标系的变换配置,具体可以见 G2 坐标系[文档](https://g2.antv.vision/zh/docs/api/general/coordinate) | - -
- -```ts -type CoordinateCfg = { - // 用于极坐标,配置起始弧度。 - startAngle?: number; - // 用于极坐标,配置结束弧度。 - endAngle?: number; - // 用于极坐标,配置极坐标半径,0 - 1 范围的数值。 - radius?: number; - // 用于极坐标,极坐标内半径,0 -1 范围的数值。 - innerRadius?: number; -}; -``` - -
- -#### IView.axes - -**可选** *object | false* - -view 上的图形坐标轴配置,key 值对应 `xField` 和 `yField`, value 具体配置见:[Axis API](/zh/docs/api/components/axis) - -
- -```ts -{ - [field]: AxisOptions | false, -} -``` - -
- -#### IView.annotations - -**可选** *object\[]* - -view 上的几何图形的图形标注配置。具体见:[Annotations API](/zh/docs/api/components/annotations) - -#### IView.interactions - -**可选** *object\[]* - -view 上的交互配置。具体见:[Interactions API](/zh/docs/api/options/interactions) - -#### IView.tooltip - -**可选** *object* - -每一个子 view 的 tooltip 配置。具体见:[Tooltip API](/zh/docs/api/options/tooltip) - -#### IView.animation - -**可选** *object* - -每一个子 view 的动画配置。具体见:[Animation API](/zh/docs/api/options/animation) - - - - -### 图层图形 - - - -#### IGeometry.type - -**required** *string* - -几何图形 geometry 类型。可选值: `'line' | 'interval' | 'point' | 'area' | 'polygon'`。 - -#### IGeometry.mapping ✨ - -**required** *object* - -图形配置规则。 -在图形语法中,数据可以通过 `color`, `shape`, `size` 等视觉属性映射到图形上,另外 G2/G2Plot 还提供了 `style` 和 `tooltip`,让图形展示更多的信息。具体类型定义见下:(其中:ShapeStyle 具体见[绘图属性](/zh/docs/api/graphic-style)) - -
- -```ts -type MappingOptions = { - /** color 映射 */ - readonly color?: ColorAttr; - /** shape 映射 */ - readonly shape?: ShapeAttr; - /** 大小映射, 提供回调的方式 */ - readonly size?: SizeAttr; - /** 样式映射 */ - readonly style?: StyleAttr; - /** tooltip 映射 */ - readonly tooltip?: TooltipAttr; -}; - -/** 颜色映射 */ -type ColorAttr = string | string[] | ((datum: Datum) => string); -/** 尺寸大小映射 */ -type SizeAttr = number | [number, number] | ((datum: Datum) => number); -/** 图形 shape 映射 */ -type ShapeAttr = string | string[] | ((datum: Datum) => string); -/** 图形样式 style 映射 */ -type StyleAttr = ShapeStyle | ((datum: Datum) => ShapeStyle); -/** tooltip 的回调 */ -type TooltipAttr = (datum: Datum) => { name: string; value: string | number }; -``` - -
- -#### IGeometry.xField - -**可选** *string* - -对应 x 轴字段。数据映射到几何图形 geometry 上时,最重要的通道是 `position` 通道。笛卡尔坐标系上的几何图形,通常是一维或二维的,对应位置视觉通道需要 `x`, `y` 两个(或一个)字段的值。 - -#### IGeometry.yField - -**可选** *string* - -对应 y 轴字段。数据映射到几何图形 geometry 上时,最重要的通道是 `position` 通道。笛卡尔坐标系上的几何图形,通常是一维或二维的,对应位置视觉通道需要 `x`, `y` 两个(或一个)字段的值。 - -#### IGeometry.colorField - -**可选** *string* - -对应颜色(color)映射字段。通过颜色视觉通道对数据进行分组。 - -#### IGeometry.shapeField - -**可选** *string* - -对应形状(shape)映射字段。通过不同的形状对数据进行分组。 - -#### IGeometry.sizeField - -**可选** *string* - -对应大小(size)映射字段。通过 size 字段,可以将数据按照 `sizeField` 对应的数据进行不同的大小映射。 - -#### IGeometry.styleField - -**可选** *string* - -style 映射字段。 - -#### IGeometry.tooltipFields - -**可选** *string\[] | false* - -tooltip 映射字段。 - -#### IGeometry.label - -**可选** *object* - -label 映射通道,具体见 [Label API](/zh/docs/api/components/label) - -#### IGeometry.adjust - -数据调整配置项。 -调整数据的目的是为了使得图形不互相遮挡,对数据的认识更加清晰,但是必须保证对数据的正确理解,更多信息可以查看 [数据调整 | G2](https://g2.antv.vision/zh/docs/manual/concepts/adjust) - -| 参数名 | 类型 | 描述 | -| ------------ | ----------- | -------- | -| type | 'stack' | 'dodge' | 'jitter' | 'symmetric' | 数据调整类型 | -| marginRatio | number | 只对 'dodge' 生效,取 0 到 1 范围的值(相对于每个柱子宽度),用于控制一个分组中柱子之间的间距 | -| dodgeBy | string | 只对 'dodge' 生效,声明以哪个数据字段为分组依据 | -| reverseOrder | boolean | 只对 'stack' 生效,用于控制是否对数据进行反序操作 | - -#### IGeometry.state - -**可选** *object* - -不同状态的样式 - - - - -### IPlot - -#### IPlot.region - -**可选** *object* - -plot 所在图层(view)的布局范围,默认是占满全部。 - -```ts -// 示例:设置 plot 所在图层(view)的布局位置在上半部分 -region: { - start: { x: 0, y: 0 }, - end: { x: 1, y: 0.5 }, -} -``` - -#### IPlot.type - -**必选** *string* - -plot 类型,通过传入指定 type 的 plot,可以在图层上渲染 G2Plot 内置的图表。 - -目前开放的图表类型有以下类型: - -* **基础图表**:`'line' | 'pie' | 'column' | 'bar' | 'area' | 'gauge' |'scatter' | 'histogram' | 'funnel'` -* **迷你图表**:`'tiny-line' | 'tiny-column' | 'tiny-area' | 'progress' | 'ring-progress'` - -#### IPlot.options - -**必选** *object\[]* - -plot 的具体配置项。每个 plot 都有自己的图层容器设置(不包括:width, height)以及数据、字段、样式等配置。 - -具体配置项见指定 plot 的 API 文档。如:type='column'时,options 对应 ColumnOptions,见文档: [Column API](/zh/docs/api/plots/column) - -
- -```ts -type IPlot = - | { - type: 'line'; - options: Omit; - } - | { - type: 'pie'; - options: Omit; - } - | { - // ... 等等 - }; -``` - -
- - -**示例**:添加一个图层,引入 column plot 和 bar plot - -```ts -plots: [ - { - type: 'column', - region: { start: { x: 0, y: 0 }, end: { x: 0.48, y: 1 } }, - options: { - data: [ - { city: '广州', sales: 1024 }, - { city: '杭州', sales: 724 }, - { city: '深圳', sales: 1256 }, - ], - xField: 'city', - yField: 'sales', - seriesField: 'city', - }, - }, - { - type: 'bar', - region: { start: { x: 0.52, y: 0 }, end: { x: 1, y: 1 } }, - options: { - data: [ - { city: '广州', sales: 1024 }, - { city: '杭州', sales: 724 }, - { city: '深圳', sales: 1256 }, - ], - yField: 'city', - xField: 'sales', - seriesField: 'city', - }, - }, -]; -``` - -### 其他 - -#### tooltip - -顶层 tooltip 配置(在 chart 层配置)。可以让所有图层共享一个 tooltip。 - -当你设置子图层的 tooltip 时,建议关闭顶层 tooltip。 - -#### legend - -顶层 legend 配置(统一在 chart 层配置)。 diff --git a/site/docs/api/case.en.md b/site/docs/api/case.en.md deleted file mode 100644 index d77c0e7d2..000000000 --- a/site/docs/api/case.en.md +++ /dev/null @@ -1,481 +0,0 @@ ---- -title: Typical cases -order: 0 -redirect_from: - - /en/docs/api ---- - -### Custom Tooltip - -```tsx -import React, { useState, useEffect, useRef } from 'react'; -import { Line } from '@ant-design/plots'; - -const DemoLine: React.FC = () => { - const data = [ - { - year: '1991', - value: 3, - }, - { - year: '1992', - value: 4, - }, - { - year: '1993', - value: 3.5, - }, - { - year: '1994', - value: 5, - }, - { - year: '1995', - value: 4.9, - }, - { - year: '1996', - value: 6, - }, - { - year: '1997', - value: 7, - }, - { - year: '1998', - value: 9, - }, - { - year: '1999', - value: 13, - }, - ]; - - const config = { - data, - yField: 'value', - xField: 'year', - tooltip: { - customContent: (title, items) => { - return ( - <> -
{title}
-
    - {items?.map((item, index) => { - const { name, value, color } = item; - return ( -
  • - - - {name}: - {value} - -
  • - ); - })} -
- - ); - }, - }, - point: { - size: 5, - shape: 'diamond', - style: { - fill: 'white', - stroke: '#2593fc', - lineWidth: 2, - }, - }, - }; - - return ; -}; - -export default DemoLine; -``` - -### Bind events - -All diagram instances in the document are available via onReady. Please open the console and click on the chart area. - -```tsx -import React from 'react'; -import { Column } from '@ant-design/plots'; - -const DemoColumn: React.FC = () => { - const data = [ - { - type: 'Furniture appliances', - sales: 38, - }, - { - type: 'Cereals, Oils and Non-staple food', - sales: 52, - }, - { - type: 'Fresh fruits', - sales: 0, - }, - { - type: 'Beauty care', - sales: 145, - }, - { - type: 'Baby products', - sales: 48, - }, - { - type: 'Imported food', - sales: 38, - }, - { - type: 'Food and drink', - sales: 38, - }, - { - type: 'Home cleaning', - sales: 38, - }, - ]; - - const config = { - data, - xField: 'type', - yField: 'sales', - label: { - position: 'middle', - style: { - fill: '#FFFFFF', - opacity: 0.6, - }, - }, - meta: { - type: { alias: 'Category' }, - sales: { alias: 'Sales' }, - }, - }; - - return ( - { - plot.on('plot:click', (evt) => { - const { x, y } = evt; - const { xField } = plot.options; - const tooltipData = plot.chart.getTooltipItems({ x, y }); - console.log(tooltipData); - }); - }} - /> - ); -}; - -export default DemoColumn; -``` - -### Get Chart instance - -Plan 1: onReady callback - -```typescript -import React from 'react'; -import { Line } from '@ant-design/plots'; - -const Page: React.FC = () => { - const data = []; - const config = {}; - return console.log(chart)} />; -}; - -export default Page; -``` - -plan 2: Mount it on ref - -```typescript -import React from 'react'; -import { Bar } from '@ant-design/plots'; - -const Page: React.FC = () => { - const data = []; - const config = {}; - const ref = React.useRef(); - React.useEffect(() => { - console.log(ref.current.getChart()); - }, []); - - return ; -}; - -export default Page; -``` - -### Custom shape - -```tsx -import React, { useState, useEffect } from 'react'; -import { Scatter, G2 } from '@ant-design/plots'; -// Subjects of registered point | interval | polygon | line , etc., detailed reference G2: https://g2.antv.vision/ -G2.registerShape('point', 'custom-shape', { - draw(cfg, group) { - const cx = cfg.x; - const cy = cfg.y; - const polygon = group.addShape('circle', { - attrs: { - x: cx, - y: cy, - ...cfg.defaultStyle, - ...cfg.style, - r: 6, - }, - }); - return polygon; - }, -}); -const DemoScatter: React.FC = () => { - const [data, setData] = useState([]); - useEffect(() => { - asyncFetch(); - }, []); - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/bmw-prod/3e4db10a-9da1-4b44-80d8-c128f42764a8.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - var config = { - appendPadding: 30, - data: data, - xField: 'xG conceded', - yField: 'Shot conceded', - shape: 'custom-shape', - pointStyle: { fillOpacity: 1, fill: 'red', stroke: '#ff0' }, - yAxis: { - nice: true, - line: { style: { stroke: '#aaa' } }, - }, - tooltip: { - showMarkers: false, - fields: ['xG conceded', 'Shot conceded'], - }, - xAxis: { - grid: { line: { style: { stroke: '#eee' } } }, - line: { style: { stroke: '#aaa' } }, - }, - }; - return ; -}; - -export default DemoScatter; -``` - -### Tooltip linkage - -```tsx -import React, { useState, useEffect } from 'react'; -import { - Line, - Area, - Column, - LineConfig, - AreaConfig, - ColumnConfig, - Plot, - PlotEvent, -} from '@ant-design/plots'; - -type Base = LineConfig | AreaConfig | ColumnConfig; - -const PlotMaps: Record> = {}; - -let PreTooltipData: { date: string; value: number }; - -const DemoLine: React.FC = () => { - const [data, setData] = useState([]); - useEffect(() => { - asyncFetch(); - }, []); - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antvdemo/assets/data/sp500.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - data, - xField: 'date', - yField: 'price', - height: 200, - }; - - const showTooltip = (date: string) => { - Object.keys(PlotMaps).forEach((plot) => { - const chartData = PlotMaps[plot].chart.getData(); - for (let i = 0; i < chartData?.length; i++) { - if (chartData[i].date === date) { - const { x, y } = PlotMaps[plot].chart.getXY(chartData[i]); - PlotMaps[plot].chart.showTooltip({ x, y }); - break; - } - } - }); - }; - - const setTooltipPosition = (evt: PlotEvent, plot: Plot) => { - const { x, y } = evt.gEvent; - const currentData = plot.chart.getTooltipItems({ x, y }); - if (currentData[0]?.data.date === PreTooltipData?.date) { - return; - } - PreTooltipData = currentData[0]?.data; - showTooltip(PreTooltipData?.date); - }; - - return ( -
- { - PlotMaps.line = plot; - plot.on('mousemove', (evt: PlotEvent) => { - setTooltipPosition(evt, plot); - }); - }} - /> - { - PlotMaps.area = plot; - plot.on('mousemove', (evt: PlotEvent) => { - setTooltipPosition(evt, plot); - }); - }} - /> - { - // @ts-ignore - PlotMaps.Column = plot; - plot.on('mousemove', (evt: PlotEvent) => { - // @ts-ignore - setTooltipPosition(evt, plot); - }); - }} - /> -
- ); -}; - -export default DemoLine; -``` - -### Download chart - -#### Function - -toDataURL([type, encoderOptions]) - -#### Params - -- type(string): A DOMString indicating the image format. The default format type is image/png. -- encoderOptions(number): A Number between 0 and 1 indicating the image quality. - -#### Function - -downloadImage(name, [type,encoderOptions]) - -#### Params - -- name(name): A name of image, eg: `a.png` -- type(string): A DOMString indicating the image format. The default format type is image/png. -- encoderOptions(number): A Number between 0 and 1 indicating the image quality. - -```tsx -import React, { useRef } from 'react'; -import { Line } from '@ant-design/plots'; - -const DemoLine: React.FC = () => { - const data = [ - { - year: '1991', - value: 3, - }, - { - year: '1992', - value: 4, - }, - { - year: '1993', - value: 3.5, - }, - { - year: '1994', - value: 5, - }, - { - year: '1995', - value: 4.9, - }, - ]; - - const config = { - data, - height: 300, - xField: 'year', - yField: 'value', - point: { - size: 5, - shape: 'diamond', - style: { - fill: 'white', - stroke: '#2593fc', - lineWidth: 2, - }, - }, - }; - const ref = useRef(); - - // export image - const downloadImage = () => { - ref.current?.downloadImage(); - }; - - // get base64 data - const toDataURL = () => { - console.log(ref.current?.toDataURL()); - }; - - return ( -
- - - { - ref.current = plot; - }} - /> -
- ); -}; - -export default DemoLine; -``` \ No newline at end of file diff --git a/site/docs/api/case.zh.md b/site/docs/api/case.zh.md deleted file mode 100644 index 41a716041..000000000 --- a/site/docs/api/case.zh.md +++ /dev/null @@ -1,483 +0,0 @@ ---- -title: 典型案例 -order: 0 -redirect_from: - - /zh/docs/api ---- - -### 自定义 Tooltip - -```tsx -import React, { useState, useEffect, useRef } from 'react'; -import { Line } from '@ant-design/plots'; - -const DemoLine: React.FC = () => { - const data = [ - { - year: '1991', - value: 3, - }, - { - year: '1992', - value: 4, - }, - { - year: '1993', - value: 3.5, - }, - { - year: '1994', - value: 5, - }, - { - year: '1995', - value: 4.9, - }, - { - year: '1996', - value: 6, - }, - { - year: '1997', - value: 7, - }, - { - year: '1998', - value: 9, - }, - { - year: '1999', - value: 13, - }, - ]; - - const config = { - data, - yField: 'value', - xField: 'year', - tooltip: { - customContent: (title, items) => { - return ( - <> -
{title}
-
    - {items?.map((item, index) => { - const { name, value, color } = item; - return ( -
  • - - - {name}: - {value} - -
  • - ); - })} -
- - ); - }, - }, - point: { - size: 5, - shape: 'diamond', - style: { - fill: 'white', - stroke: '#2593fc', - lineWidth: 2, - }, - }, - }; - - return ; -}; - -export default DemoLine; -``` - -### 事件绑定 - -文档中所有的图表实例都可通过 onReady 获取,请打开控制台点击图表区域。 - -```tsx -import React from 'react'; -import { Column } from '@ant-design/plots'; - -const DemoColumn: React.FC = () => { - const data = [ - { - type: '家具家电', - sales: 38, - }, - { - type: '粮油副食', - sales: 52, - }, - { - type: '生鲜水果', - sales: 0, - }, - { - type: '美容洗护', - sales: 145, - }, - { - type: '母婴用品', - sales: 48, - }, - { - type: '进口食品', - sales: 38, - }, - { - type: '食品饮料', - sales: 38, - }, - { - type: '家庭清洁', - sales: 38, - }, - ]; - - const config = { - data, - xField: 'type', - yField: 'sales', - label: { - position: 'middle', - style: { - fill: '#FFFFFF', - opacity: 0.6, - }, - }, - meta: { - type: { alias: '类别' }, - sales: { alias: '销售额' }, - }, - }; - - return ( - { - plot.on('plot:click', (evt) => { - const { x, y } = evt; - const { xField } = plot.options; - const tooltipData = plot.chart.getTooltipItems({ x, y }); - console.log(tooltipData); - }); - }} - /> - ); -}; - -export default DemoColumn; -``` - -### 获取 chart 实例 - -方案 1: onReady 回调 - -```typescript -import React from 'react'; -import { Line } from '@ant-design/plots'; - -const Page: React.FC = () => { - const data = []; - const config = {}; - return console.log(chart)} />; -}; - -export default Page; -``` - -方案 2: 挂载到 ref 上 - -```typescript -import React from 'react'; -import { Bar } from '@ant-design/plots'; - -const Page: React.FC = () => { - const data = []; - const config = {}; - const ref = React.useRef(); - React.useEffect(() => { - console.log(ref.current.getChart()); - }, []); - - return ; -}; - -export default Page; -``` - -### 自定义 shape - -```tsx -import React, { useState, useEffect } from 'react'; -import { Scatter, G2 } from '@ant-design/plots'; - -// 注册主体有 point | interval | polygon | line 等,详细参考 G2: https://g2.antv.vision/ -G2.registerShape('point', 'custom-shape', { - draw(cfg, group) { - const cx = cfg.x; - const cy = cfg.y; - const polygon = group.addShape('circle', { - attrs: { - x: cx, - y: cy, - ...cfg.defaultStyle, - ...cfg.style, - r: 6, - }, - }); - return polygon; - }, -}); -const DemoScatter: React.FC = () => { - const [data, setData] = useState([]); - useEffect(() => { - asyncFetch(); - }, []); - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/bmw-prod/3e4db10a-9da1-4b44-80d8-c128f42764a8.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - var config = { - appendPadding: 30, - data: data, - xField: 'xG conceded', - yField: 'Shot conceded', - shape: 'custom-shape', - pointStyle: { fillOpacity: 1, fill: 'red', stroke: '#ff0' }, - yAxis: { - nice: true, - line: { style: { stroke: '#aaa' } }, - }, - tooltip: { - showMarkers: false, - fields: ['xG conceded', 'Shot conceded'], - }, - xAxis: { - grid: { line: { style: { stroke: '#eee' } } }, - line: { style: { stroke: '#aaa' } }, - }, - }; - return ; -}; - -export default DemoScatter; -``` - -### Tooltip 联动 - -```tsx -import React, { useState, useEffect } from 'react'; -import { - Line, - Area, - Column, - LineConfig, - AreaConfig, - ColumnConfig, - Plot, - PlotEvent, -} from '@ant-design/plots'; - -type Base = LineConfig | AreaConfig | ColumnConfig; - -const PlotMaps: Record> = {}; - -let PreTooltipData: { date: string; value: number }; - -const DemoLine: React.FC = () => { - const [data, setData] = useState([]); - useEffect(() => { - asyncFetch(); - }, []); - const asyncFetch = () => { - fetch('https://gw.alipayobjects.com/os/antvdemo/assets/data/sp500.json') - .then((response) => response.json()) - .then((json) => setData(json)) - .catch((error) => { - console.log('fetch data failed', error); - }); - }; - const config = { - data, - xField: 'date', - yField: 'price', - height: 200, - }; - - const showTooltip = (date: string) => { - Object.keys(PlotMaps).forEach((plot) => { - const chartData = PlotMaps[plot].chart.getData(); - for (let i = 0; i < chartData?.length; i++) { - if (chartData[i].date === date) { - const { x, y } = PlotMaps[plot].chart.getXY(chartData[i]); - PlotMaps[plot].chart.showTooltip({ x, y }); - break; - } - } - }); - }; - - const setTooltipPosition = (evt: PlotEvent, plot: Plot) => { - const { x, y } = evt.gEvent; - const currentData = plot.chart.getTooltipItems({ x, y }); - if (currentData[0]?.data.date === PreTooltipData?.date) { - return; - } - PreTooltipData = currentData[0]?.data; - showTooltip(PreTooltipData?.date); - }; - - return ( -
- { - PlotMaps.line = plot; - plot.on('mousemove', (evt: PlotEvent) => { - setTooltipPosition(evt, plot); - }); - }} - /> - { - PlotMaps.area = plot; - plot.on('mousemove', (evt: PlotEvent) => { - setTooltipPosition(evt, plot); - }); - }} - /> - { - // @ts-ignore - PlotMaps.Column = plot; - plot.on('mousemove', (evt: PlotEvent) => { - // @ts-ignore - setTooltipPosition(evt, plot); - }); - }} - /> -
- ); -}; - -export default DemoLine; -``` - - -### 图表下载 - -#### 方法 - -toDataURL([type, encoderOptions]) - -#### 参数 - -- type(string): A DOMString indicating the image format. The default format type is image/png. -- encoderOptions(number): A Number between 0 and 1 indicating the image quality. - -#### 方法 - -downloadImage(name, [type,encoderOptions]) - -#### 参数 - -- name(name): A name of image, eg: `a.png` -- type(string): A DOMString indicating the image format. The default format type is image/png. -- encoderOptions(number): A Number between 0 and 1 indicating the image quality. - -```tsx -import React, { useRef } from 'react'; -import { Line } from '@ant-design/plots'; - -const DemoLine: React.FC = () => { - const data = [ - { - year: '1991', - value: 3, - }, - { - year: '1992', - value: 4, - }, - { - year: '1993', - value: 3.5, - }, - { - year: '1994', - value: 5, - }, - { - year: '1995', - value: 4.9, - }, - ]; - - const config = { - data, - height: 300, - xField: 'year', - yField: 'value', - point: { - size: 5, - shape: 'diamond', - style: { - fill: 'white', - stroke: '#2593fc', - lineWidth: 2, - }, - }, - }; - const ref = useRef(); - - // 导出图片 - const downloadImage = () => { - ref.current?.downloadImage(); - }; - - // 获取图表 base64 数据 - const toDataURL = () => { - console.log(ref.current?.toDataURL()); - }; - - return ( -
- - - { - ref.current = plot; - }} - /> -
- ); -}; - -export default DemoLine; -``` \ No newline at end of file diff --git a/site/docs/api/components/annotations.en.md b/site/docs/api/components/annotations.en.md deleted file mode 100644 index e0b762993..000000000 --- a/site/docs/api/components/annotations.en.md +++ /dev/null @@ -1,876 +0,0 @@ ---- -title: Annotations -order: 6 ---- - - - - - - - -🏷️ Annotation,as an auxiliary element of the chart, it is mainly used to identify additional mark notes on the plot. - -🎨 Go to [AntV 设计 | 标注 Annotation](https://www.yuque.com/mo-college/vis-design/ybatti) of 墨者学院 to learn more about **Design guide** - -### Types of annotations - -annotation - -G2Plot 提供了以下图形标注类型: - -| **类型** | **描述** | **预览** | **用法** | -| :----------: | :--------------------------: | :-----------------: | :-----------------: | -| arc | 辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*SccqSpP2hG4AAAAAAAAAAABkARQnAQ) | `{ type: 'arc' }`  | -| image | 辅助图片,在图表上添加辅助图片。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*KYTbSbvRKHQAAAAAAAAAAABkARQnAQ) | `{ type: 'image' }` | -| line | 辅助线(可带文本),例如表示平均值或者预期分布的直线。| ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*hd7PQ4z\_JS8AAAAAAAAAAABkARQnAQ) | `{ type: 'line' }` | -| text | 辅助文本,指定位置添加文本说明。| ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*PdjoSrdEhnwAAAAAAAAAAABkARQnAQ) | `{ type: 'text' }` | -| region | 辅助框,框选一段图区,设置背景、边框等。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*VEOZR5rXpqMAAAAAAAAAAABkARQnAQ) | `{ type: 'region' }` | -| regionFilter | 区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*cp2jSJfeJDYAAAAAAAAAAABkARQnAQ) | `{ type: 'regionFilter' }` | -| dataMarker | 特殊数据点标注,多用于折线图和面积图。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*h-e2TLivyI4AAAAAAAAAAABkARQnAQ) | `{ type: 'dataMarker' }` | -| dataRegion | 特殊数据区间标注,多用于折线图和面积图。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*NHbSRKacUesAAAAAAAAAAABkARQnAQ) | `{ type: 'dataRegion' }` | -| html | 自定义 HTML 标注,新增 🆕 。 | - | `{ type: 'html' }` | -| shape | 自定义 shape 标注,新增 🆕 。 | - | `{ type: 'shape' }` | - -### Usage - -`annotations` is an array type, and multiple annotations can be set. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: 'Content', - style: { - fill: 'red', - }, - }, -]; -``` - -Details of configuration: - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/api/components/annotations.zh.md b/site/docs/api/components/annotations.zh.md deleted file mode 100644 index fdc142061..000000000 --- a/site/docs/api/components/annotations.zh.md +++ /dev/null @@ -1,876 +0,0 @@ ---- -title: 图表标注 - Annotations -order: 6 ---- - - - - - - - -🏷️ 图形标注,Annotation,作为图表的辅助元素,主要用于在图表上标识额外的标记注解。 - -🎨 前往墨者学院 [AntV 设计 | 标注 Annotation](https://www.yuque.com/mo-college/vis-design/ybatti) 查看**设计指引**。 - -### 标注类型 - -annotation - -G2Plot 提供了以下图形标注类型: - -| **类型** | **描述** | **预览** | **用法** | -| :----------: | :-------------------------------: | :-----------------------: | :----------------------: | -| arc | 辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*SccqSpP2hG4AAAAAAAAAAABkARQnAQ) | `{ type: 'arc' }`  | -| image | 辅助图片,在图表上添加辅助图片。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*KYTbSbvRKHQAAAAAAAAAAABkARQnAQ) | `{ type: 'image' }` | -| line | 辅助线(可带文本),例如表示平均值或者预期分布的直线。| ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*hd7PQ4z\_JS8AAAAAAAAAAABkARQnAQ) | `{ type: 'line' }` | -| text | 辅助文本,指定位置添加文本说明。| ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*PdjoSrdEhnwAAAAAAAAAAABkARQnAQ) | `{ type: 'text' }` | -| region | 辅助框,框选一段图区,设置背景、边框等。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*VEOZR5rXpqMAAAAAAAAAAABkARQnAQ) | `{ type: 'region' }` | -| regionFilter | 区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*cp2jSJfeJDYAAAAAAAAAAABkARQnAQ) | `{ type: 'regionFilter' }` | -| dataMarker | 特殊数据点标注,多用于折线图和面积图。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*h-e2TLivyI4AAAAAAAAAAABkARQnAQ) | `{ type: 'dataMarker' }` | -| dataRegion | 特殊数据区间标注,多用于折线图和面积图。 | ![image.png](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*NHbSRKacUesAAAAAAAAAAABkARQnAQ) | `{ type: 'dataRegion' }` | -| html | 自定义 HTML 标注,新增 🆕 。 | - | `{ type: 'html' }` | -| shape | 自定义 shape 标注,新增 🆕 。 | - | `{ type: 'shape' }` | - -### 使用方式 - -标注是数组类型,可以设置多个。 - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -];s -``` - -配置详情: - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/api/components/axis.en.md b/site/docs/api/components/axis.en.md deleted file mode 100644 index 86b9360f6..000000000 --- a/site/docs/api/components/axis.en.md +++ /dev/null @@ -1,436 +0,0 @@ ---- -title: Axis -order: 1 -contributors: - [ - { - author: '新茗', - github: 'visiky', - avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg', - }, - { - author: 'BBSQQ', - github: 'BBSQQ', - avatar: 'https://avatars.githubusercontent.com/u/35586469', - }, - { - author: 'lxfu1', - github: 'lxfu1', - avatar: 'https://avatars.githubusercontent.com/u/31396322', - }, - ] ---- - - - - - - - -🏷️ Coordinate axis refers to the axis of statistical chart in two-dimensional space, which is used to define the mapping relationship between **direction** and **value of data** in coordinate system. - -🎨 Go to [AntV Design | 坐标轴 Axis](https://www.yuque.com/mo-college/vis-design/twx9oi) of 墨者学院 to learn more about **Design guide**. - -#### Axes - -![axis](https://gw.alipayobjects.com/zos/antfincdn/9%265Yc6tQuN/648d2019-aee9-4a17-8567-6bbc5910c38d.png) - -#### Usage - -There are two kinds of coordinate axes: `xAxis` and `yAxis`, which vary according to the specific `Plot`. - -There are two ways to configure axes: - -Method 1, pass in 'Boolean' to set whether to display a legend. - -```ts -xAxis: false; // hide xAxis -``` - -Method 2, pass in *AxisCfg* to configure the axis as a whole. - -```ts -xAxis: { - text: 'title of xAxis' -} -``` - -#### Properties - *AxisCfg* - -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -For Cartesian coordinates, set the position of the coordinate axes. - -##### title - -**optional** *object* - -A configuration item for the title, NULL means not to be displayed. - -| Properties | Type | Description | -| ---------- | ------------ | -------------------------------------------------------------------------- | -| text | *string* | The title of axis | -| position | *string* | Position of the axis title, default: 'center'. Options: start, center, end | -| offset | *number* | The distance of the title from the coordinate axis | -| spacing | *number* | The distance between the title and the text on the coordinate axis | -| style | *shapeStyle* | Title text configuration items | -| autoRotate | *boolean* | Whether to rotate automatically or not | - -***shapeStyle*** - - - -| Properties | Type | Description | -| ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fill | *string* | Fill color of the shape | -| r | *number* | used in `point`, means the radius of geometry | -| fillOpacity | *number* | Fill opacity of the shape | -| stroke | *string* | Stroke color of the shape | -| lineWidth | *number* | The width of the stroke of the shape | -| lineDash | \[number,number] | Configure dashed line stroke. The first parameter is the length of each segment, and the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| lineOpacity | *number* | Opacity of the stroke | -| opacity | *number* | Opacity of the shape | -| shadowColor | *string* | Shadow color of the shape | -| strokeOpacity | *number* | Stroke opacity of the shape | -| shadowBlur | *number* | Gaussian blur coefficient of the shadow | -| shadowOffsetX | *number* | Configure horizontal distance between shadow and shape | -| shadowOffsetY | *number* | Configure vertical distance between shadow and shape | -| cursor | *string* | Mouse style, same as the mouse style of CSS, default value : 'default' | - -Example: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -More documents about `ShapeStyle`, see [Graphic Style](/en/docs/api/graphic-style). - - -***label*** - -**optional** *object* - -A configuration item for the text label. NULL indicates that it is not displayed. - - - -| Properties | Type | Description | -| ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -| type | *string* | When a user uses a custom label type, need to declare the specific type, otherwise you will use the default label type rendering (pie chart label support `inner | outer | spiders`) | -| offset | *number* | label offset | -| offsetX | *number* | The offset distance of the label from the data point in the X direction | -| offsetY | *number* | The offset distance of the label from the data point in the Y direction | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | Text content that is displayed, if not declared, is displayed according to the value of the first field participating in the mapping | -| style | *ShapeAttrs* | Label text graphic property style | -| autoRotate | *string* | Whether to rotate automatically, default true | -| rotate | *number* | Text rotation Angle | -| labelLine | *null* | *boolean* | *LabelLineCfg* | Used to set the style property of the text connector. NULL indicates that it is not displayed. | -| labelEmit | *boolean* | Only applies to text in polar coordinates, indicating whether the text is radially displayed according to the Angle. True means on and false means off | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | Text layout type, support a variety of layout function combination. | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | Specifies the position of the current Label relative to the current graphic (Only works for column plot and bar plot, which geometry is interval) | -| animate | *boolean | AnimateOption* | Animation configuration. | -| formatter | *Function* | Format function | -| autoHide | *boolean* | Whether to hide it automatically, default to false | - -Types of ***LabelLineCfg*** are as follow: (Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -Example code: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - *AxisLabelCfg | null* **optional** - -Configurations related to axis label. Set this to `null` to prevent the axis label from appearing. The details of \_ AxisLabelCfg\_ are as follows: - -| Properties | Type | | -| ------------ | -------------------------------------------------------- | ------- | --------------------------------------------------------- | -| style | *[ShapeAttrs](/en/docs/api/graphic-style)* | - | Axis label text graphic property style | -| offset | *number* | - | Axis label offset | -| rotate | *number* | - | Axis label text rotation Angle | -| autoRotate | *boolean |avoidCallback* | `true` | Whether to rotate automatically, default true | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | Whether to hide it automatically, default to false | -| autoEllipsis | *boolean* | `false` | Whether to ellipsis label when overflow, default to false | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | Format function | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -Mark the direction of the label on the axis, with 1 to the left and -1 to the right (Only works in vertical axis). - -##### verticalLimitLength - -**optional** *number* - -Configuring the maximum limit length in the vertical direction of the coordinate axis has a significant impact on text adaptation. - -##### grid - -**optional** *object* - -Axis grid line configuration item. NULL means not shown. - -| Properties | Type | Description | -| -------------- | ------------------ | ------------------------------------------------------------------ | -| line | *lineStyle* | The style of the line | -| alternateColor | *string|string\[]* | The fill color between two grid lines | -| closed | *boolean* | Whether to close the grid for circle | -| alignTick | *boolean* | If the value is false, it will be displayed between the two scales | - -Then config of `grid.line` is the same as: [line](#line) - -##### line - -**optional** *object* - -Coordinate axis configuration item, NULL means not displayed. - - - -> **Attention:** The full configuration of lineStyle is `{ style: { stroke: '#ddd', ... } }`, please check it when your configuration doesn't work. - -| Properties | Type | Description | -| ------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| stroke | *string* | color of the line | -| lineWidth | *number* | width of the line | -| lineDash | *\[number,number]* | configure dashed line, the first parameter is the length of each segment, the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| opacity | *number* | opacity | -| shadowColor | *string* | shadow color | -| shadowBlur | *number* | Gaussian blur coefficient | -| shadowOffsetX | *number* | configure horizontal distance between shadow and line | -| shadowOffsetY | *number* | configure vertical distance between shadow and line | -| cursor | *string* | mouse style, same as the mouse style of CSS, default value : 'default' | - -Example (config the grid line style of xAxis): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -The configuration item of the coordinate axis scale line. NULL means not displayed. - -| Properties | Type | Description | -| ---------- | ----------- | -------------------------------------- | -| style | *lineStyle* | The style of tickLine. | -| alignTick | *boolean* | Whether aligh tickLine with tick label | -| length | *number* | The length of tickLine. | - -Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*. The params of *ShapeAttrsCallback* are as follow: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -A configuration item for a coordinate subscale. NULL indicates that it is not displayed. - -| Properties | Type | Description | -| ---------- | ---------------------------------- | -------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | The style of subTickLine. | -| count | *number* | The count of subTickLine. | -| length | *number* | The length of subTickLine. | - -Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*. The params of *ShapeAttrsCallback* are as follow: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -Whether to nice. - -##### min - -**optional** *number* *default:* `0` - -Minimum axis. - -##### max - -**optional** *number* - -Maximum axis. - -##### minLimit - -**optional** *number* - -Minimal limit. - -##### maxLimit - -**optional** *number* - -Maximum limit. - -##### tickCount - -**optional** *number* - -The expected number of axes, not the final result. - -##### tickInterval - -**optional** *number* - -Interval of axes. - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -Specify a tick calculation method, or customize a tick calculation method. Built-in tick calculations include `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -Animation switch, default true. - -##### animateOption - -**optional** *object* - -Animation parameter configuration. - -```ts -interface ComponentAnimateCfg { - /** Duration of the first animation */ - readonly duration?: number; - /** Easing method used for the first animation. */ - readonly easing?: string; - /** Delay before updating the animation */ - readonly delay?: number; -} -// Configure the reference -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` diff --git a/site/docs/api/components/axis.zh.md b/site/docs/api/components/axis.zh.md deleted file mode 100644 index b5cc5df93..000000000 --- a/site/docs/api/components/axis.zh.md +++ /dev/null @@ -1,436 +0,0 @@ ---- -title: 坐标轴 - Axis -order: 1 -contributors: - [ - { - author: '新茗', - github: 'visiky', - avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg', - }, - { - author: 'BBSQQ', - github: 'BBSQQ', - avatar: 'https://avatars.githubusercontent.com/u/35586469', - }, - { - author: 'lxfu1', - github: 'lxfu1', - avatar: 'https://avatars.githubusercontent.com/u/31396322', - }, - ] ---- - - - - - - - -🏷️ 坐标轴指二维空间中统计图表中的轴,它用来定义坐标系中数据在方向和值的映射关系的图表组件。 - -🎨 前往墨者学院 [AntV 设计 | 坐标轴 Axis](https://www.yuque.com/mo-college/vis-design/twx9oi) 查看**设计指引** - -#### 构成元素 - -![axis](https://gw.alipayobjects.com/zos/antfincdn/9%265Yc6tQuN/648d2019-aee9-4a17-8567-6bbc5910c38d.png) - -#### 使用方式 - -坐标轴通常有 `xAxis`, `yAxis` 两种,会根据具体 `Plot` 有所差异。 - -配置坐标轴有两种方式: - -第一种,传入 `false` 设置隐藏坐标轴。 - -```ts -xAxis: false; // 隐藏 x 轴 -``` - -第二种,传入 *AxisCfg* 对坐标轴进行整体配置。 - -```ts -xAxis: { - text: 'x 轴标题' -} -``` - -#### 配置属性 - *AxisCfg* - -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -适用于直角坐标系,设置坐标轴的位置。 - -##### title - -**optional** *object* - -标题的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------ | --------------------------------------------------------- | -| text | *string* | 坐标轴标题 | -| position | *string* | 轴标题的位置,默认:'center'。可选项: start, center, end | -| offset | *number* | 标题距离坐标轴的距离 | -| spacing | *number* | 标题距离坐标轴文本的距离 | -| style | *shapeStyle* | 标题文本配置项 | -| autoRotate | *boolean* | 是否自动旋转 | - -***shapeStyle*** - - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | *string* | 图形的填充色 | -| r | *number* | 用于 `point`, 代表图形的半径大小 | -| fillOpacity | *number* | 图形的填充透明度 | -| stroke | *string* | 图形的描边 | -| lineWidth | *number* | 图形描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 图形的整体透明度 | -| shadowColor | *string* | 图形阴影颜色 | -| strokeOpacity | *number* | 图形边框透明度 | -| shadowBlur | *number* | 图形阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -关于 ShapeStyle 更加详细的文档参考 [绘图属性](/zh/docs/api/graphic-style)。 - - -***label*** - -**optional** *object* - -文本标签的配置项,null 表示不展示。 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - **optional** *AxisLabelCfg | null* - -文本标签的配置项,null 表示不展示。*AxisLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------------------------------------- | ------- | ------------------------ | -| offset | *number* | - | label 的偏移量 | -| rotate | *number* | - | 文本旋转角度 | -| autoRotate | *boolean |avoidCallback* | `true` | 是否自动旋转 | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | 是否自动隐藏 | -| autoEllipsis | *boolean |avoidCallback |string* | `false` | 是否自动省略 | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | 格式化函数 | -| style | *[ShapeAttrs](/zh/docs/api/graphic-style)* | - | 坐标轴刻度线的样式配置项 | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -标记坐标轴 label 的方向,左侧为 1,右侧为 -1(仅适用于垂直方向的坐标轴) - -##### verticalLimitLength - -**optional** *number* - -配置坐标轴垂直方向的最大限制长度,对文本自适应有很大影响。 - -##### grid - -**optional** *object* - -坐标轴网格线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------------ | -------------------------------------------------------- | -| line | *lineStyle* | 线的样式, | -| alternateColor | *string|string\[]* | 两个栅格线间的填充色 | -| closed | *boolean* | 对于 circle 是否关闭 grid | -| alignTick | *boolean* | 是否同刻度线对齐,如果值为 false,则会显示在两个刻度中间 | - -网格线条样式的配置与 [line](#line) 是一致的。 - -##### line - -**optional** *object* - -坐标轴线的配置项,null 表示不展示。 - - - -> **注意:** 线条样式的完整配置是 `{ style: { stroke: '#ddd', ... } }`, 如果配置线条样式不生效的时候,请检查一下。 - -| 属性名 | 类型 | 介绍 | -| ------------- | ----------------- | ------------------------------------------------------------------------------------------------------ | -| stroke | *string* | 线的颜色 | -| lineWidth | *number* | 线宽 | -| lineDash | *\[number,number]* | 虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| opacity | *number* | 透明度 | -| shadowColor | *string* | 阴影颜色 | -| shadowBlur | *number* | 高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例(设置 x 轴的 grid 网格线条样式): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -坐标轴刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴刻度线的样式。 | -| alignTick | *boolean* | 坐标轴刻度线是否同 tick 对齐 | -| length | *number* | 坐标轴刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -坐标轴子刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴子刻度线的样式。 | -| count | *number* | 子刻度个数 | -| length | *number* | 坐标轴子刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -是否美化。 - -##### min - -**optional** *number* *default:* `0` - -坐标轴最小值。 - -##### max - -**optional** *number* - -坐标轴最大值。 - -##### minLimit - -**optional** *number* - -最小值限定。 - -##### maxLimit - -**optional** *number* - -最大值限定。 - -##### tickCount - -**optional** *number* - -期望的坐标轴刻度数量,非最终结果。 - -##### tickInterval - -**optional** *number* - -坐标轴刻度间隔。 - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -指定 tick 计算方法,或自定义计算 tick 的方法,内置 tick 计算方法包括 `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -动画开关,默认开启。 - -##### animateOption - -**optional** *object* - -动画参数配置。 - -```ts -interface ComponentAnimateCfg { - /** 动画执行时间 */ - readonly duration?: number; - /** 动画缓动函数 */ - readonly easing?: string; - /** 动画延迟时间 */ - readonly delay?: number; -} -// 配置参考 -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` diff --git a/site/docs/api/components/conversion-tag.en.md b/site/docs/api/components/conversion-tag.en.md deleted file mode 100644 index 07f1b15f4..000000000 --- a/site/docs/api/components/conversion-tag.en.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: ConversionTag -order: 8 -contributors: - [ - { - author: '新茗', - github: 'visiky', - avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg', - }, - ] ---- - -Applicable to base bar charts and base bar charts, the Conversion Rate component allows the user to focus on the rate of change in the data. - -#### *ConversionTagCfg* - -**optional** *object* | *false* - -| Properties | Type | Default | Description | -| ---------- | ------------------- | ------- | -------------------------------------------------------- | ----------------------------------------------- | -| size | *number* | - | Conversion rate Component dimensions | -| spacing | *number* | - | Component and column spacing | -| offset | *number* | - | Component and axis spacing | -| arrow | *ArrowCfg | false* | - | Arrow shape configuration, false does not display arrows | -| text | *TextCfg | false* | No | - | Text configuration, false does not display text | - -ArrowCfg configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ----------------- | -| headSize | *number* | - | Size of the arrow | -| style | *object* | - | Arrow style | - -TextCfg configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------------------------------------- | ------- | ---------------------------------- | -| headSize | *number* | - | Size of the arrow | -| style | *object* | - | Arrow style | -| formatter | *(prev:number, next:number) => string* | - | Custom conversion rate calculation | - -Please refer to the style configuration [ShapeAttrs](/en/docs/api/graphic-style) - - -#### Events and interactions - - - -转化标签的图形组成包含 `conversion-tag-arrow` 和 `conversion-tag-text`。同一个图表的转化标签组件都放置于一个 group 下,也就是 `conversion-tag-group`,我们可以通过监听 `conversion-tag-group` 事件来进行一些定制交互。 - -转化标签携带的原始数据信息包含:上一个图形元素(element)和下一个图形元素(nextElement),可通过下列方式获取: - -```ts -plot.on('conversion-tag-group:mouseenter', (evt) => { - const { element, nextElement } = evt.target?.get('origin'); - // custom by yourself. details of element API, see: https://g2.antv.vision/en/docs/api/general/element -}); -``` - -Example: - - diff --git a/site/docs/api/components/conversion-tag.zh.md b/site/docs/api/components/conversion-tag.zh.md deleted file mode 100644 index 458ca4926..000000000 --- a/site/docs/api/components/conversion-tag.zh.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: 转化标签 - ConversionTag -order: 8 -contributors: - [ - { - author: '新茗', - github: 'visiky', - avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg', - }, - ] ---- - -适用于基础柱形图和基础条形图,转化率组件可以让用户关注到数据的变化比例。 - -#### 配置项 - -**optional** *object* | *false* - -| 配置项 | 类型 | 默认值 | 功能描述 | -| ------- | ------------------- | ------ | -------------------------------- | -| size | *number* | - | 转化率组件尺寸 | -| spacing | *number* | - | 组件和柱子间距 | -| offset | *number* | - | 组件和轴线间距 | -| arrow | *ArrowCfg | false* | - | 箭头形状配置,false 时不显示箭头 | -| text | *TextCfg | false* | - | 文本配置、false 时不显示文本 | - -其中 ArrowCfg 配置如下 - -| 配置项 | 类型 | 默认值 | 功能描述 | -| -------- | -------- | ------ | -------- | -| headSize | *number* | - | 箭头尺寸 | -| style | *object* | - | 箭头样式 | - -TextCfg 配置如下 - -| 配置项 | 类型 | 默认值 | 功能描述 | -| --------- | -------------------------------------- | ------ | ---------------- | -| headSize | *number* | - | 箭头尺寸 | -| style | *object* | - | 箭头样式 | -| formatter | *(prev:number, next:number) => string* | - | 自定义转化率计算 | - -样式配置类型请参考 [绘图属性](/zh/docs/api/graphic-style) - - -#### 事件交互 - -转化标签的图形组成包含 `conversion-tag-arrow` 和 `conversion-tag-text`。同一个图表的转化标签组件都放置于一个 group 下,也就是 `conversion-tag-group`,我们可以通过监听 `conversion-tag-group` 事件来进行一些定制交互。 - -转化标签携带的原始数据信息包含:上一个图形元素(element)和下一个图形元素(nextElement),可通过下列方式获取: - -```ts -plot.on('conversion-tag-group:mouseenter', (evt) => { - const { element, nextElement } = evt.target?.get('origin'); - // 自定义业务逻辑,element 的详细 API,见:https://g2.antv.vision/zh/docs/api/general/element -}); -``` - -示例: - - diff --git a/site/docs/api/components/label.en.md b/site/docs/api/components/label.en.md deleted file mode 100644 index 6020b7ae8..000000000 --- a/site/docs/api/components/label.en.md +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Label -order: 4 ---- - - - - - - - -🏷️ Label is a content annotation of the current set of data. It includes symbol, label line, text of values and so on, which can be selected according to different chart types. - -🎨 Go to [AntV Design | 标签 Label](https://www.yuque.com/mo-college/vis-design/roy3am) of 墨者学院 to learn more about **Design guide**. - -#### Properties - *LabelCfg* - - - -| Properties | Type | Description | -| ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -| type | *string* | When a user uses a custom label type, need to declare the specific type, otherwise you will use the default label type rendering (pie chart label support `inner | outer | spiders`) | -| offset | *number* | label offset | -| offsetX | *number* | The offset distance of the label from the data point in the X direction | -| offsetY | *number* | The offset distance of the label from the data point in the Y direction | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | Text content that is displayed, if not declared, is displayed according to the value of the first field participating in the mapping | -| style | *ShapeAttrs* | Label text graphic property style | -| autoRotate | *string* | Whether to rotate automatically, default true | -| rotate | *number* | Text rotation Angle | -| labelLine | *null* | *boolean* | *LabelLineCfg* | Used to set the style property of the text connector. NULL indicates that it is not displayed. | -| labelEmit | *boolean* | Only applies to text in polar coordinates, indicating whether the text is radially displayed according to the Angle. True means on and false means off | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | Text layout type, support a variety of layout function combination. | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | Specifies the position of the current Label relative to the current graphic (Only works for column plot and bar plot, which geometry is interval) | -| animate | *boolean | AnimateOption* | Animation configuration. | -| formatter | *Function* | Format function | -| autoHide | *boolean* | Whether to hide it automatically, default to false | - -Types of ***LabelLineCfg*** are as follow: (Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -Example code: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### LabelLayout - -通过 `label.layout` 可以设置标签布局,来进行标签显示策略的处理。 - -示例: - -```ts -{ - label: { - layout: [ - // 适用于柱状图的标签遮挡处理,会对遮挡的标签进行隐藏 - { type: 'interval-hide-overlap' } - ] - } -} -``` - -详细文档梳理中 diff --git a/site/docs/api/components/label.zh.md b/site/docs/api/components/label.zh.md deleted file mode 100644 index da8d19ad7..000000000 --- a/site/docs/api/components/label.zh.md +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: 数据标签 - Label -order: 4 ---- - - - - - - - -🏷️ 在图表中,标签是对当前的一组数据进行的内容标注。包括数据点、拉线、文本数值等元素,根据不同的图表类型选择使用。 - -🎨 前往墨者学院 [AntV 设计 | 标签 Label](https://www.yuque.com/mo-college/vis-design/roy3am) 查看**设计指引** - -#### 配置属性 - *LabelCfg* - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### 标签布局 - -通过 `label.layout` 可以设置标签布局,来进行标签显示策略的处理。 - -示例: - -```ts -{ - label: { - layout: [ - // 适用于柱状图的标签遮挡处理,会对遮挡的标签进行隐藏 - { type: 'interval-hide-overlap' } - ] - } -} -``` - -详细文档梳理中 diff --git a/site/docs/api/components/legend.en.md b/site/docs/api/components/legend.en.md deleted file mode 100644 index cfd3cac17..000000000 --- a/site/docs/api/components/legend.en.md +++ /dev/null @@ -1,496 +0,0 @@ ---- -title: Legend -order: 0 -contributors: - [{ author: '新茗', github: 'visiky', avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg' }] ---- - - - - - - - -🏷️ Legend is an auxiliary component of a plot, which uses color, size, and shape mapping, to show the symbol, color, and name of different series. You can click legends to toggle displaying series in the plot. - -🎨 Go to [AntV Design | 图例 Legend](https://www.yuque.com/mo-college/vis-design/hcs9p2) of 墨者学院 to learn more about **Design guide** - -#### Elements - -![legend](https://gw.alipayobjects.com/zos/antfincdn/COyXvtsGrl/f5bb4c22-f16a-422e-bfee-a9b3d0a5b1b9.png) - -#### Usage - -There are two ways to configure legends: - -Method 1, pass in the 'false' setting to close the legend. - -```ts -legend: false; // close legend -``` - -Method 2, pass in *LegendCfg* to configure the legend as a whole. - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - - - -#### Properties - *LegendCfg* - -| Properties | Type | Description | Apply to | -| ------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -| layout | *string* | The layout of the legend is optional:*horizontal | vertical* | | -| title | *object* | Legend title configuration is not displayed by default, reference [title configuration](#title) | | -| position | *string* | Legend position, reference  [position configuration](#position) | | -| offsetX | *number* | Legends offset in the x direction. | | -| offsetY | *number* | Legends offset in the y direction. | | -| background | *object* | Background box configuration item.reference  [background configuration](#background) | | -| flipPage | *boolean* | Whether to page when there are too many legend items. | Classification legend | -| pageNavigator | *object* | Configure the style of page navigator。 | Classification legend | -| itemWidth | *number | null* | The width of the legend item, default to null (automatically computed). | Classification legend | -| itemHeight | *number | null* | The height of the legend, default to null. | Classification legend | -| itemName | *object* | Configure the legend item name text.reference  [itemName configuration](#itemname) | Classification legend | -| itemValue | *object* | Configuration item of legend item Value added value.reference  [itemValue configuration](#itemvalue)。 | Classification legend | -| itemSpacing | *number* | Controls the horizontal spacing of legend items | Classification legend | -| label | *object* | A configuration item for the text.reference [label configuration](#label) | Classification legend | -| marker | *object* | The configuration of the Marker icon of the legend item. | Classification legend | -| maxWidth | *number* | Legend item maximum width set. | Classification legend | -| maxHeight | *number* | Set the maximum height of the legend item. | Classification legend | -| rail | *object* | The style configuration item for the legend slider (background).reference  [rail configuration](#rail) | Classification legend | -| reversed | *boolean* | Whether to display legend items in reverse order. | Classification legend | -| custom | *boolean* | If it is a custom legend, the items property needs to be declared when this property is true. | | -| items | *object\[]* | The user configures the content of the legend item himself.reference [items configuration](#items) | | -| min | *number* | The minimum value of the range. | Continuous legend | -| max | *number* | Select the maximum value of the range. | Continuous legend | -| value | *number\[]* | The selected value. | Continuous legend | -| slidable | *boolean* | Whether the slider can slide. | Continuous legend | -| track | *object* | Select the color block style configuration item for the range.reference  [track  configuration](#track) | Continuous legend | -| handler | *object* | Configuration items for the slider.reference [handler configuration](#handler) | Continuous legend | -| animate | *boolean* | Whether to turn on the animation switch. | | -| animateOption | *object* | Animate parameter configuration, which takes effect if and only if the animate property is true, that is, the animation is turned on, reference [animateOption configuration](#animateOption) | | - - - -#### Details - -##### layout - -**optional** *horizontal | vertical* - -Layout of legend. - -##### title - -**optional** *G2LegendTitleCfg* - -Legend title configuration is not displayed by default. *G2LegendTitleCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ----------------------------------------------------------------------------------- | -| title | *string* | Content of legend title | -| spacing | *number* | - | The spacing between the title and the legend item | -| style | *object* | - | Text style configuration item, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -The position of legend is optional:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - - - -##### offsetX - -**optional** *number* - -Legends offset in the x direction. - -##### offsetY - -**optional** *number* - -Legends offset in the y direction. - -##### background - -**optional** *LegendBackgroundCfg* - -Background box configuration item. *LegendBackgroundCFG* is configured as follows: - -| Properties | Type | Description | -| ---------- | ------------------ | ------------------------------------------------------- | -| padding | *number | number\[]* | White space in the background | -| style | *ShapeAttr* | Background style configuration, Reference [Graphic Style](/en/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -Apply to Classification legend,whether to page when there are too many legend items. (⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -Apply to Classification legend. You can set the maximum number of rows when legend items is flip-paged, (only applicable to 'layout:' horizontal '),default: 1. - -##### pageNavigator - -**optional** *object* - -Apply to Classification legend, configure the style of page navigator, it works when legend is in flipPage. Types of *LegendPageNavigatorCfg* are as follow: - -| Properties | Type | Description | -| ------ | --------------------- | -------------- | -| marker.style | *PageNavigatorMarkerStyle* | 分页器指示箭头配置项 | -| text.style | *PageNavigatorTextStyle* | The text style of page info. | - -Types of ***PageNavigatorMarkerStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -Types of ***PageNavigatorTextStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -Example: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -Apply to Classification legend, lengend item height, default null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -Apply to Classification legend, legend item width, default null, automatic calculation. - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -Apply to Classification legend, control the horizontal spacing of legend items. - -##### marker - -**optional** *MarkerCfg* - -Apply to Classification legend, the configuration of the Marker icon of the legend item. - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -Apply to Classification legend, the maximum width of the legend item. 当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。 - -##### maxHeight - -**optional** *number* - -Apply to Classification legend, the maximum height of the legend item. 当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。 - -##### reversed - -**optional** *boolean* -Apply to Classification legend, whether to display legend items in reverse order. - -##### custom - -**optional** *boolean* - -If it is a custom legend, the items property needs to be declared when this property is true. - -##### items - -**optional** *LegendItem\[]* -Apply to Classification legend, the user configures the content of the legend item. *LegendItem* Configuration is as follows: - -| Properties | Type | Required | Description | -| ---------- | ----------- | -------- | ------------------------------------ | -| id | *string* | | Unique value for animation or lookup | -| name | *string* | required | name | -| value | any | required | value | -| marker | *MarkerCfg* | | marker | - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### min - -**optional** *number* - -Apply to Continuous legend, select the minimum value of the range. - -##### max - -**optional** *number* - -Apply to Continuous legend, select the maximum value of the range. - -##### value - -**optional** *number\[]* - -Apply to Continuous legend, 当前选中的范围. - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` -Apply to Continuous legend, whether the slider can slide. - -##### rail - -**optional** *ContinueLegendRailCfg* -Apply to Continuous legend, a style configuration item for the legend slider (background).*ContinueLegendRailCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| type | *string* | - | rail type: color and size, default: 'color' | -| size | *number* | - | The width of the slide rail | -| defaultLength | *number* | - | The default length of the slider, default: 100. When maxWidth,maxHeight is limited, this property is not used and the length is automatically calculated | -| style | *object* | - | Slide rail style, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### label - -**optional** *ContinueLegendLabelCfg* - -Apply to Continuous legend, a configuration item for the text, *ContinueLegendLabelCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| align | *string* | - | The alignment of text with the slider
- rail : Align with the slide rail, at both ends of the slide rail
- top, bottom: Legends are valid when laid out horizontally
- left, right: Legends are valid when laid out vertically | -| style | *object* | - | Text style configuration item, reference [Graphic Style](/zh/docs/api/graphic-style) | -| spacing | *number* | - | The distance between the text and the slide | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### track - -**optional** *ContinueLegendTrackCfg* -Apply to Continuous legend, select the color block style configuration item for the range. *ContinueLegendTrackCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------- | -| style | *object* | - | Selected range of styles, reference [Graphic Style](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -Apply to Continuous legend, configuration items for slider. (暂不支持自定义) - -*ContinueLegendHandlerCfg* is configured as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | --------------------------------------------------------------------------- | -| size | *number* | - | Slider size, default: 10 | -| style | *object* | - | Slider configuration, reference [Graphic Style](/zh/docs/api/graphic-style) | diff --git a/site/docs/api/components/legend.zh.md b/site/docs/api/components/legend.zh.md deleted file mode 100644 index 17bf377d6..000000000 --- a/site/docs/api/components/legend.zh.md +++ /dev/null @@ -1,539 +0,0 @@ ---- -title: 图例 - Legend -order: 0 -contributors: - [ - { - author: '新茗', - github: 'visiky', - avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg', - }, - ] ---- - - - - - - - -🏷️ 图例(legend)是图表的辅助元素,使用颜色、大小、形状区分不同的数据类型,用于图表中数据的筛选。 - -🎨 前往墨者学院 [AntV 设计 | 图例 Legend](https://www.yuque.com/mo-college/vis-design/hcs9p2) 查看**设计指引**。 - -#### 构成元素 - -![legend](https://gw.alipayobjects.com/zos/antfincdn/COyXvtsGrl/f5bb4c22-f16a-422e-bfee-a9b3d0a5b1b9.png) - -#### 使用方式 - -配置图例有两种方式: - -第一种,传入 `false` 设置关闭图例。 - -```ts -legend: false; // 关闭图例 -``` - -第二种,传入 *LegendCfg* 对图例进行整体配置。 - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - -#### 配置属性 - *LegendCfg* - -| 属性 | 类型 | 描述 | 适用于 | -| --- | --- |--- | --- | -| layout | *string* | 图例的布局方式,可选项:*horizontal | vertical* | | -| title | *object* | 图例标题配置,默认不展示。详见 [title 配置](#title) | | -| position | *string* | 图例的位置。详见 [position 配置](#position) | | -| offsetX | *number* | 图例 x 方向的偏移。 | | -| offsetY | *number* | 图例 y 方向的偏移。 | | -| background | *object* | 背景框配置项。详见 [background 配置](#background) | | -| flipPage | *boolean* | 当图例项过多时是否进行分页。 | 分类图例 | -| pageNavigator | *object* | 分页器的主题样式设置。 | 分类图例 | -| itemWidth | *number | null* | 图例项的宽度, 默认为 null(自动计算)。 | 分类图例 | -| itemHeight | *number | null* | 图例的高度, 默认为 null。 | 分类图例 | -| itemName | *object* | 图例项 name 文本的配置。详见 [itemName 配置](#itemname) | 分类图例 | -| itemValue | *object* | 图例项 value 附加值的配置项。详见 [itemValue 配置](#itemvalue)。 | 分类图例 | -| itemSpacing | *number* | 控制图例项水平方向的间距 | 分类图例 | -| marker | *object* | 图例项的 marker 图标的配置。 | 分类图例 | -| maxWidth | *number* | 图例项最大宽度设置。 | 分类图例 | -| maxHeight | *number* | 图例项最大高度设置。 | 分类图例 | -| reversed | *boolean* | 是否将图例项逆序展示。 | 分类图例 | -| custom | *boolean* | 是否为自定义图例,当该属性为 true 时,需要声明 items 属性。 |分类图例 | -| items | *object\[]* | 用户自己配置图例项的内容。详见 [items 配置](#items) | 分类图例 | -| min | *number* | 范围的最小值。 | 连续图例 | -| max | *number* | 选择范围的最大值。 | 连续图例 | -| label | *object* | 文本的配置项。详见 [label 配置](#label) | 连续图例 | -| value | *number\[]* | 选择的值。 | 连续图例 | -| slidable | *boolean* | 滑块是否可以滑动。 | 连续图例 | -| rail | *object* | 图例滑轨(背景)的样式配置项。详见 [rail 配置](#rail) | 连续图例 | -| track | *object* | 选择范围的色块样式配置项。详见 [track 配置](#track) | 连续图例 | -| handler | *object* | 滑块的配置项。详见 [handler 配置](#handler) | 连续图例 | -| animate | *boolean* | 是否开启动画开关。 | | -| animateOption | *object* | 动画参数配置,当且仅当 animate 属性为 true,即动画开启时生效,详见 [animateOption 配置](#animateOption) | | - - - -#### 详细介绍 - -##### layout - -**optional** *horizontal | vertical* - -图例布局方式。提供横向布局和纵向布局。 - -##### title - -**optional** *G2LegendTitleCfg* - -图例标题配置,默认不展示。*G2LegendTitleCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------- | ------------------------------------------------------------ | -| title | *string* | 文本显示内容 | -| spacing | *number* | 标题同图例项的间距 | -| style | *object* | 文本样式配置项,参考  [绘图属性](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -图例位置,可选项:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - -尝试一下: - - - -##### offsetX - -**optional** *number* - -图例 x 方向的偏移。 - -##### offsetY - -**optional** *number* - -图例 y 方向的偏移。 - -##### background - -**optional** *LegendBackgroundCfg* - -背景框配置项。*LegendBackgroundCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| padding | *number | number\[]* | 背景的留白 | -| style | *ShapeAttr* | 背景样式配置项, 参考[绘图属性](/zh/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -适用于 分类图例,当图例项过多时是否进行分页。(⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -适用于 分类图例,当图例项过多分页时,可以设置最大行数(仅适用于 `layout: 'horizontal'`),默认为:1。 - -##### pageNavigator - -**optional** *object* - -适用于 分类图例,图例分页导航器的主题样式设置。*LegendPageNavigatorCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------- | ------ | ----------------------- | -| marker.style | *PageNavigatorMarkerStyle* | - | 分页器指示箭头 样式配置 | -| text.style | *PageNavigatorTextStyle* | - | 分页器页面信息 样式配置 | - -***PageNavigatorMarkerStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------------- | -------- | ------ | ---------------------------------------------------------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -***PageNavigatorTextStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| -------- | -------- | ------ | ---------------------------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -示例: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -适用于 分类图例,图例的高度, 默认为 null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -适用于 分类图例,图例项的宽度, 默认为 null,自动计算。 - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -适用于 分类图例,控制图例项水平方向的间距。 - -##### label - -**optional** *ContinueLegendLabelCfg* - -适用于 连续图例,文本的配置项。*ContinueLegendLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | -------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| align | *string* | - | 文本同滑轨的对齐方式
- rail : 同滑轨对齐,在滑轨的两端
- top, bottom: 图例水平布局时有效
- left, right: 图例垂直布局时有效 | -| style | *object* | - | 文本样式配置项,详见  [绘图属性](/zh/docs/api/graphic-style) | -| spacing | *number* | - | 文本同滑轨的距离 | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### marker - -**optional** *MarkerCfg | MarkerCfgCallback* - -适用于 分类图例,图例项的 marker 图标的配置。 - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -```sign -type LegendItem = { name: string; value: string; } & MarkerCfg; - -type MarkerCfgCallback = (name: string, index: number, item: LegendItem) => MarkerCfg; -``` - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -适用于 分类图例,图例项容器最大宽度设置。当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxWidth = Math.min(maxWidth, maxWidthRatio * viewBBox.width); -``` - -##### maxHeight - -**optional** *number* - -适用于 分类图例,图例项容器最大高度设置。当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxHeight = Math.min(maxHeight, maxHeightRatio * viewBBox.height); -``` - -##### reversed - -**optional** *boolean* - -适用于 分类图例,是否将图例项逆序展示。 - -##### custom - -**optional** *boolean* - -是否为自定义图例,当该属性为 true 时,需要声明 items 属性。 - -##### items - -**optional** *LegendItem\[]* -适用于 分类图例,用户自己配置图例项的内容。*LegendItem* 配置如下: - -| 参数名 | 类型 | 是否必选 | 描述 | -| ------ | ----------- | -------- | ------------------------ | -| id | *string* | | 唯一值,用于动画或者查找 | -| name | *string* | required | 名称 | -| value | any | required | 值 | -| marker | *MarkerCfg* | | 图形标记 | - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -##### min - -**optional** *number* - -适用于 连续图例,选择范围的最小值。 - -##### max - -**optional** *number* - -适用于 连续图例,选择范围的最大值。 - -##### value - -**optional** *number\[]* - -适用于 连续图例,当前选中的范围。 - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` - -适用于 连续图例,滑块是否可以滑动。 - -##### rail - -**optional** *ContinueLegendRailCfg* - -适用于 连续图例,图例滑轨(背景)的样式配置项。*ContinueLegendRailCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------------- | -------- | -------------------------------------------------------------------------------- | -| type | *string* | rail 的类型,color, size,默认:'color' | -| size | *number* | 滑轨的宽度 | -| defaultLength | *number* | 滑轨的默认长度,默认:100。当限制了 maxWidth,maxHeight 时,不会使用这个属性会自动计算长度 | -| style | *object* | 滑轨的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### track - -**optional** *ContinueLegendTrackCfg* -适用于 连续图例,选择范围的色块样式配置项。*ContinueLegendTrackCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| style | *object* | - | 选定范围的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -适用于 连续图例,滑块的配置项。(暂不支持自定义) - -*ContinueLegendHandlerCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| size | *number* | - | 滑块的大小,默认:10 | -| style | *object* | - | 滑块的样式设置,参考 [绘图属性](/zh/docs/api/graphic-style) | diff --git a/site/docs/api/components/scrollbar.en.md b/site/docs/api/components/scrollbar.en.md deleted file mode 100644 index d232da7f5..000000000 --- a/site/docs/api/components/scrollbar.en.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Scrollbar -order: 3 -contributors: - [ - { - author: '新茗', - github: 'visiky', - avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg', - }, - ] ---- - - - - - - - -#### Properties - *ScrollbarCfg* - -Go to [ShapeAttrs](/en/docs/api/graphic-style) to learn more about ***ShapeAttrs***. - -| Properties | Type | Description | -| --------------- | ---------------- | ------------------ | -| type | *'horizontal' | 'vertical'* | Type of scrollbar | -| width | *number* | Width,works when `type = 'vertical'` | -| height | *number* | height,works when `type = 'horizontal'` | -| padding | *number | number\[]* | Padding | -| categorySize | *number* | For the horizontal scrollbar, it is the width of each category field on the x-axis; for the vertical scroll bar, it is the height of each category field on the x-axis | -| animate | *boolean* | Whether to animate when scrolling, default follows the animation configuration in view | - -Types of ***ScrollbarStyle*** are as follow: - -| Properties | Type | Description | -| --------------- | ---------------- | ------------------ | -| trackColor | *string* | Color of scrollbar track | -| thumbColor | *string* | Color of scrollbar thumb | -| thumbHighlightColor | *string* | Highlight color of scrollbar thumb, 对应主题的 hover.style.thumbColor | -| lineCap | *string* | Determines the shape used to draw the end points of scrollbar,is same as property of Canvas lineCap。 | - - -#### Theme setting - -You can also config the style of scollbar by theme. - -```ts -theme: { - components: { - scrollbar: { - // default style - default: { - style: { - trackColor: 'rgba(0,0,0,0)', - thumbColor: 'rgba(0,0,0,0.15)', - }, - }, - // config the style of thumb when hover - hover: { - style: { - thumbColor: 'rgba(0,0,0,0.2)', - }, - }, - }, - }, -} -``` diff --git a/site/docs/api/components/scrollbar.zh.md b/site/docs/api/components/scrollbar.zh.md deleted file mode 100644 index 8a44e2309..000000000 --- a/site/docs/api/components/scrollbar.zh.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: 滚动条 - Scrollbar -order: 3 -contributors: - [ - { - author: '新茗', - github: 'visiky', - avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg', - }, - ] ---- - - - - - - - -#### 配置属性 - *ScrollbarCfg* - -***ShapeAttrs*** 类型的请参考[绘图属性](/zh/docs/api/graphic-style) - -| 配置项 | 类型 | 功能描述 | -| --------------- | ---------------- | ------------------ | -| type | *'horizontal' | 'vertical'* | 滚动条类型 | -| width | *number* | 宽度,在 vertical 下生效 | -| height | *number* | 高度,在 horizontal 下生效 | -| padding | *number | number\[]* | padding | -| categorySize | *number* | 对应水平滚动条,为 x 轴每个分类字段的宽度;对于垂直滚动条,为 x 轴每个分类字段的高度 | -| style | *ScrollbarStyle* | 滚动条默认样式的设置 | -| animate | *boolean* | 滚动的时候是否开启动画,默认跟随 view 中 animate 配置 | - -***ScrollbarStyle*** 类型如下: - -| 配置项 | 类型 | 功能描述 | -| --------------- | ---------------- | ------------------ | -| trackColor | *string* | 滚动条滑道填充色 | -| thumbColor | *string* | 滚动条滑块填充色 | -| thumbHighlightColor | *string* | 滚动条滑块高亮样式,对应主题的 hover.style.thumbColor | -| lineCap | *string* | 决定滚动条末端绘制形状,同 Canvas lineCap 属性。 | - - -#### 主题设置 - -还可以通过主题来设置滚动条的样式。 - -```ts -theme: { - components: { - scrollbar: { - // 默认样式 - default: { - style: { - trackColor: 'rgba(0,0,0,0)', - thumbColor: 'rgba(0,0,0,0.15)', - }, - }, - // hover 时,可以设置滑块样式 - hover: { - style: { - thumbColor: 'rgba(0,0,0,0.2)', - }, - }, - }, - }, -} -``` diff --git a/site/docs/api/components/slider.en.md b/site/docs/api/components/slider.en.md deleted file mode 100644 index 866b9d09e..000000000 --- a/site/docs/api/components/slider.en.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Slider -order: 2 ---- - - - - - - - -🎨 Go to [AntV Design | 缩略轴 Axis Navigator](https://www.yuque.com/mo-college/vis-design/gs5ow9) of 墨者学院 to learn more about **Design guide** - -#### Slider - -slider - -#### Properties - *SliderCfg* - -> Only line plot, area plot and dual-axes plot are supported. - -| Properties | Type | Description | -| --------------- | -------------- | --------------------------------------- | -| start | *number* | Default starting position | -| end | *number* | Default ending position | -| height | *number* | Slider height | -| trendCfg | *TrendCfg* | Configuration of background trends | -| backgroundStyle | *object* | Background style, reference[Graphic Style](/en/docs/api/graphic-style) | -| foregroundStyle | *object* | Foreground style, reference[Graphic Style](/en/docs/api/graphic-style) | -| handlerStyle | *HandlerStyle* | Handler configuration | -| textStyle | *object* | Text style, reference[Graphic Style](/en/docs/api/graphic-style) | -| minLimit | *number* | Lower limit of sliding position allowed | -| maxLimit | *number* | Upper limit of sliding position allowed | -| formatter | *Function* | Slider text formatting function | - -Types of ***TrendCfg*** are as follow: - -| Properties | Type | Description | -| --------------- | ---------- | ------------------------------ | -| data | *number\[]* | Trend data | -| smooth | *boolean* | Whether smooth | -| isArea | *boolean* | Whether area | -| backgroundStyle | *object* | Background style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | -| lineStyle | *object* | Line style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | -| areaStyle | *object* | Area style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | - -Types of ***HandlerStyle*** are as follow: - -| Properties | Type | Description | -| ---------- | -------- | ------------------------ | -| width | *number* | Width of slider handler | -| height | *number* | Height of slider handler | -| fill | *string* | Fill color of handler | -| highLightFill | *string* | Highlight fill color of handler (when hovering) | -| stroke | *string* | Stroke color of handler | -| opacity | *number* | Fill opacity of handler | -| radius | *number* | Radius of handler rect | -| cursor | *string* | Style of cursor (when hovering handler) | diff --git a/site/docs/api/components/slider.zh.md b/site/docs/api/components/slider.zh.md deleted file mode 100644 index d73afd690..000000000 --- a/site/docs/api/components/slider.zh.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: 缩略轴 - Slider -order: 2 ---- - - - - - - - -🎨 前往墨者学院 [AntV 设计 | 缩略轴 Axis Navigator](https://www.yuque.com/mo-college/vis-design/gs5ow9) 查看**设计指引**。 - -#### 构成元素 - -slider - -#### 配置属性 - *SliderCfg* - -> 目前只适用于:折线图、面积图、双轴图。 - -| 配置项 | 类型 | 功能描述 | -| --------------- | -------------- | ------------------ | -| start | *number* | 默认起始位置 | -| end | *number* | 默认结束位置 | -| height | *number* | 缩略轴高度 | -| trendCfg | *TrendCfg* | 背景趋势的配置 | -| backgroundStyle | *object* | 背景配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| foregroundStyle | *object* | 前景配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| handlerStyle | *HandlerStyle* | handler 配置 | -| textStyle | *object* | 文本配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| minLimit | *number* | 允许滑动位置下限 | -| maxLimit | *number* | 允许滑动位置上限 | -| formatter | *Function* | 滑块文本格式化函数 | - -***TrendCfg*** 类型如下: - -| 配置项 | 类型 | 功能描述 | -| --------------- | ---------- | -------------- | -| data | *number\[]* | 统计文本的样式 | -| smooth | *boolean* | 是否平滑 | -| isArea | *boolean* | 是否面积图 | -| backgroundStyle | *object* | 背景样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| lineStyle | *object* | line 样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| areaStyle | *object* | area 样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | - -***HandlerStyle*** 类型如下: - -| 配置项 | 类型 | 功能描述 | -| ------ | -------- | -------------- | -| width | *number* | 缩略轴手柄宽度 | -| height | *number* | 缩略轴手柄高度 | -| fill | *string* | 缩略轴手柄填充色 | -| highLightFill | *string* | 缩略轴手柄填充高亮色(hover 状态) | -| stroke | *string* | 缩略轴手柄描边色 | -| opacity | *number* | 缩略轴手柄填充透明度 | -| radius | *number* | 缩略轴手柄背景圆角 | -| cursor | *string* | 缩略轴手柄鼠标样式 (hover 状态) | diff --git a/site/docs/api/components/statistic.en.md b/site/docs/api/components/statistic.en.md deleted file mode 100644 index 96c08f8b9..000000000 --- a/site/docs/api/components/statistic.en.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Statistic Text -order: 7 -contributors: - [ - { - author: '新茗', - github: 'visiky', - avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg', - }, - ] ---- - - - - - - - -#### Statistic - -slider - -#### Properties - *Statistic* - -| Properties | Type | Description | -| ---------- | ---------------------- | ----------- | -| title | *false | StatisticText* | title | -| content | *false | StatisticText* | content | - -StatisticText - -| Properties | Type | Description | -| ---------- | -------- | --------------------------------- | -| style | *CSSStyleDeclaration* | Styles for statistical text (css styles) | -| content | *string* | Content of the text。Priority: `customHtml` > `formatter` > `content` | -| customHtml | *CustomHtml* | custom content by using html,priority is higher than formatter | -| formatter | *Function* | The formatted content of the text | -| rotate | *number* | Rotation Angle | -| offsetX | *number* | X offset | -| offsetY | *number* | Y offset | - -Type of **CustomHtml** is as follow: - -```ts -type CustomHtml = (container: HTMLElement, view: View, datum: object, data: object[]) => string; -``` - - -Example: - - diff --git a/site/docs/api/components/statistic.zh.md b/site/docs/api/components/statistic.zh.md deleted file mode 100644 index f7228125c..000000000 --- a/site/docs/api/components/statistic.zh.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: 统计文本 - Statistic -order: 7 -contributors: - [ - { - author: '新茗', - github: 'visiky', - avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg', - }, - ] ---- - - - - - - - -#### 构成元素 - -slider - -#### 配置属性 - *Statistic* - -| 配置项 | 类型 | 描述 | -| ------- | ---------------------- | -------- | -| title | *false | StatisticText* | 标题 | -| content | *false | StatisticText* | 主体内容 | - -StatisticText - -| 配置项 | 类型 | 描述 | -| --------- | -------- | -------------------- | -| style | *CSSStyleDeclaration* | 统计文本的样式 (css 样式) | -| content | *string* | 主体文本内容。优先级: `customHtml` > `formatter` > `content` | -| customHtml | *CustomHtml* | 自定义主体文本的 html,优先级高于 formatter | -| formatter | *Function* | 主体文本的格式化内容 | -| rotate | *number* | 旋转角度 | -| offsetX | *number* | X 偏移值 | -| offsetY | *number* | Y 偏移值 | - -**CustomHtml** 类型定义如下: - -```ts -type CustomHtml = (container: HTMLElement, view: View, datum: object, data: object[]) => string; -``` - - -示例: - - diff --git a/site/docs/api/components/tooltip.en.md b/site/docs/api/components/tooltip.en.md deleted file mode 100644 index 72dd7bc6c..000000000 --- a/site/docs/api/components/tooltip.en.md +++ /dev/null @@ -1,318 +0,0 @@ ---- -title: Tooltip -order: 5 -contributors: - [ - { - author: '新茗', - github: 'visiky', - avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg', - }, - ] ---- - - - - - - - -🎨 Go to [AntV 设计 | 提示信息 Tooltip](https://www.yuque.com/mo-college/vis-design/vrxog6) of 墨者学院 to learn more about **Design guide**. - -#### Tooltip - -![tooltip](https://gw.alipayobjects.com/zos/antfincdn/Mr1Y0JPq1f/77c016b3-f51e-443d-b51a-af17564769ad.png) - -#### Properties - *TooltipCfg* - -##### fields - -**optional** *string\[]* - -Specifies the fields to be displayed in the Tooltip. By default, different charts have different default field lists. Use with the 'formatter' configuration for more effect. - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**optional** *Function* - -Formats the contents of the Tooltip Item (you can use `customContent` when content contains multiple tooltipItems). - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**optional** *boolean* *default:* `true` - -Sets whether the Tooltip content box follows the mouse. - -##### enterable - -**optional** *boolean* *default:* `false` - -Whether the tooltip allows mouse to slide in. - -##### showTitle - -**optional** *boolean* *default:* `false` - -Whether show tooltip title. - -##### title - -**optional** *string* - -Set the title content of the Tooltip: If the value is the name of the data field, the value for the field in the data is displayed, and if the field does not exist in the data, the title value is displayed directly. - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -Sets the fixed display location of the Tooltip relative to the data point. - -##### shared - -**optional** *boolean* - -True means that all data corresponding to the current point is merged and displayed, while false means that only the data content closest to the current point is displayed. - -##### showCrosshairs - -**optional** *boolean* *default:* `false` - -Whether show crosshairs。 - -##### crosshairs - -**optional** *object* - -Configure tooltip crosshairs to work if and only if 'showCrosshairs' is true. - -| Properties | Type | Description | -| -------------- | ---------------------- | --------------------------------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | Crosshairs Type: 'X' represents the auxiliary line on the X axis, 'Y' on the Y axis | -| line | *lineStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | Text configuration of crosshairs pointer, support callback | -| textBackground | *textBackgroundStyle* | Guideline text background configuration | -| follow | *boolean* | Whether the guide line follows the mouse. Default is false, that is, to locate the data point | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| Properties | Type | Description | -| ---------- | -------------------- | ------------------------------------------- | -| padding | *number | number\[]* | White space around the background of a text | -| style | *shapeStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style) | - -##### showMarkers - -**optional** *boolean* *default:* `true` - -Whether to render TooltipMarkers. - -##### marker - -**optional** *ShapeAttrs* - -TooltipMarker style configuration. - -Please refer to the style configuration [ShapeAttrs](/en/docs/api/graphic-style) - -##### showContent - -**optional** *boolean* *default:* `false` - -Whether to display the Tooltip content box. - -##### container - -**optional** *string|HTMLElement* - -Custom tooltip container. - -##### containerTpl - -**optional** *string* - -Templates used to specify the legend container must include the classes of each DOM node when customizing the template - -##### itemTpl - -**optional** *string* - -The default template for each record, which must include the classes of each DOM node when customizing the template. - -##### domStyles - -**optional** *TooltipDomStyles* - -The styles for each DOM. - -dom-styles - -```ts -/** Tooltip content box css style */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**optional** *number* - -Tooltip offset. - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems ✨ - -**optional** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - -##### customContent - -**optional** *Function* - -Support for custom templates. [Live demo](/en/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` diff --git a/site/docs/api/components/tooltip.zh.md b/site/docs/api/components/tooltip.zh.md deleted file mode 100644 index 2a5eba25c..000000000 --- a/site/docs/api/components/tooltip.zh.md +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: 悬浮提示 - Tooltip -order: 5 -contributors: - [ - { - author: '新茗', - github: 'visiky', - avatar: 'https://gw.alipayobjects.com/zos/antfincdn/KAeYPA3TV0/avatar.jpeg', - }, - ] ---- - - - - - - - -🏷️ 提示信息 Tooltip,指当鼠标悬停在图表上或者手指点按移动设备的某个数据点时,以**交互提示**信息的形式展示该点的数据,比如该点的值,数据单位等。 - -🎨 前往墨者学院 [AntV 设计 | 提示信息 Tooltip](https://www.yuque.com/mo-college/vis-design/vrxog6) 查看**设计指引**。 - -#### Tooltip 组成 - -![tooltip](https://gw.alipayobjects.com/zos/antfincdn/Mr1Y0JPq1f/77c016b3-f51e-443d-b51a-af17564769ad.png) - -#### 配置属性 - *TooltipCfg* - -##### fields - -**可选** *string\[]* - -指定 tooltip 中显示的字段,默认不同图表有不同的默认字段列表。配合 `formatter` 配置一起使用,效果更佳。 - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**可选** *Function* - -格式化 tooltip item 内容(暂时不支持多 tooltipItems 的格式化,可以使用 `customContent` 处理) - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**可选** *boolean* *default:* `true` - -设置 tooltip 内容框是否跟随鼠标移动。 - -##### enterable - -**可选** *boolean* *default:* `false` - -tooltip 是否允许鼠标滑入。 - -##### showTitle - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 标题。 - -##### title - -**可选** *string* - -设置 tooltip 的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,则直接展示 title 值。 - -##### position - -**可选** *`top` | `bottom` | `left` | `right`* - -设置 tooltip 的固定展示位置,相对于数据点。 - -##### shared - -**可选** *boolean* - -true 表示合并当前点对应的所有数据并展示,false 表示只展示离当前点最逼近的数据内容。 - -##### showCrosshairs - -**可选** *boolean* *default:* `false` - -是否展示 crosshairs。 - -##### crosshairs - -**可选** *object* - -配置 tooltip 的 crosshairs,当且仅当 `showCrosshairs` 为 true 时生效。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | --------------------- | ------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | crosshairs 的类型: `x` 表示 x 轴上的辅助线,`y` 表示 y 轴上的辅助项 | -| line | *lineStyle* | 线的配置项,详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | 辅助线文本配置,支持回调 | -| textBackground | *TextBackgroundStyle* | 辅助线文本背景配置 | -| follow | *boolean* | 辅助线是否跟随鼠标移动,默认为 false,即定位到数据点 | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | -------------------- | ------------------ | -| padding | *number | number\[]* | 文本背景周围的留白 | -| style | *shapeStyle* | 线的配置项, 详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style) | - -##### showMarkers - -**可选** *boolean* *default:* `true` - -是否渲染 tooltipMarkers。 - -##### marker - -**可选** *ShapeAttrs* - -tooltipMarker 的样式配置。 - -样式配置类型,详细可见: [ShapeAttrs](/zh/docs/api/graphic-style) - -##### showContent - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 内容框。 - -##### container - -**可选** *string|HTMLElement* - -自定义 tooltip 的容器。 - -##### containerTpl - -**可选** *string* - -用于指定图例容器的模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### itemTpl - -**可选** *string* - -每项记录的默认模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### domStyles - -**可选** *TooltipDomStyles* - -传入各个 dom 的样式。 - -dom-styles - -```ts -/** Tooltip 内容框的 css 样式定义 */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**可选** *number* - -tooltip 偏移量。 - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems - -**可选** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - - - -##### customContent - -**可选** *Function* - -支持自定义模板。[在线示例](/zh/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` diff --git a/site/docs/api/graphic-style.en.md b/site/docs/api/graphic-style.en.md deleted file mode 100644 index 5239ae197..000000000 --- a/site/docs/api/graphic-style.en.md +++ /dev/null @@ -1,189 +0,0 @@ ---- -title: Graphic Style -order: 1 ---- - -Ant Design Charts uses [G](https://github.com/antvis/g) as the drawing engine. Some graphic styles, such as the `lineStyle` of Line, the `columnStyle` of Column, and the style configuration of some components, such as `label.style`, `axis.line.style`, are all transmitted transparently through the drawing properties of G. - -In order to make it convenient for users, the common drawing attributes of G2Plot are briefly introduced here: - -## Configure graphic styles - -| Properties | Type | Description | -| ------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fill | string | The fill color of the shape | -| fillOpacity | number | The fill transparency of the shape | -| stroke | string | Stroke of the shape | -| lineWidth | number | The width of the shape stroke | -| lineDash | [number,number] | For the dashed line configuration of the stroke, the first value is the length of each segment of the dashed line, and the second value is the distance between segments. LineDash sets [0,0] to no stroke. | -| lineOpacity | number | Stroke transparency | -| opacity | number | The overall transparency of the shape | -| shadowColor | string | Shape shadow color | -| shadowBlur | number | The Gaussian blur factor of the shadow of the shape | -| shadowOffsetX | number | Sets the horizontal distance between the shadow and the shape | -| shadowOffsetY | number | Sets the vertical distance of the shadow from the shape | -| cursor | string | Mouse style. With CSS mouse styles, default 'default'. | - -Use the full graphic style `columnStyle` to configure the Column graphic style. Example: - -```ts - columnStyle: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4,5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -``` - -Result: - -Load failed - -## Configure line styles - - - -In a line plot, you can use `linestyle` directly to configure the Line graphic style. Example: - -```ts -lineStyle: { - stroke: 'black', - lineWidth: 2, - lineDash: [4,5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' -} -``` - -Result: - -Load failed - -## Configure text styles - -| Properties | Type | Description | -| ------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fontSize | number | Font size | -| fontFamily | string | Font family | -| fontWeight | number | Font weight | -| lineHeight | number | Line height | -| textAlign | string | Sets the current alignment of text content. Supported property: 'center' \| `end` \| `left` \| `right` \| `start`,默认值为`start` | -| textBaseline | string | Sets the current text baseline to be used when drawing text. Supported property: 'top' \| `middle` \| `bottom` \| `alphabetic` \| `hanging`。默认值为`bottom` | -| fill | string | Fill color for text | -| fillOpacity | number | Fill transparency of text | -| stroke | string | Stroke of text | -| lineWidth | number | The width of the text stroke | -| lineDash | [number,number] | For the dashed line configuration of the stroke, the first value is the length of each segment of the dashed line, and the second value is the distance between segments. LineDash sets [0,0] to no stroke. | -| lineOpacity | number | Stroke transparency | -| opacity | number | Overall transparency of the text | -| shadowColor | string | Text shadow color | -| shadowBlur | number | The Gaussian blur coefficient of the text shadow | -| shadowOffsetX | number | Sets the horizontal distance between the shadow and the text | -| shadowOffsetY | number | Sets the vertical distance between the shadow and the text | -| cursor | string | Mouse style. Mouse styles with CSS, default 'default'。 | - -Take the `statistic.style` of Liquid for example: - -```ts -statistic: { - style:{ - fontSize: 80, - fontWeight: 300, - textAlign: 'center', - textBaseline: 'middle', - shadowColor: 'white', - shadowBlur: 10, - } -} -``` - -Result: - -Load failed - -## Gradient - -G2Plot provides support for linear gradients and circular gradients by default. - -### Linear gradient - -Load failed - -> Note: `l` indicates the use of linear gradient, the green font is variable, filled by the user, separated by a blank. - -```ts -// Use gradient color stroke, gradient angle is 0, gradient starting point color #ffffff, midpoint gradient color #7ec2f3, ending gradient color #1890ff -stroke: 'l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff'; -``` - -Example (1): Use `areaStyle` of Area to configure the Area with gradient color. - -```ts -areaStyle: { - fill: 'l(270) 0:#ffffff 0.5:#7ec2f3 1:#1890ff', -} -``` - -Result: - -Load failed - -Example (2): Use `barStyle` of Bar to configure the Bar with gradient color. - -```ts -barStyle: { - fill: 'l(0) 0:#3e5bdb 1:#dd3121', -} -``` - -Result: - -Load failed - -### Circular gradient - -Load failed - -> Note: `r` indicates the use of a radial gradient, the green font is variable, which is filled in by the user. The xyr values ​​of the starting circle are all relative values, ranging from 0 to 1. - -```ts -// example -// Use gradient color to fill, the center coordinate of the starting circle of the gradient is the center point of the bounding box of the filled object, the radius is 0.1 times (the diagonal length of the bounding box / 2), the color of the starting point of the gradient #ffffff , The gradient color at the midpoint is #7ec2f3, and the gradient color at the end is #1890ff -fill: 'r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff'; -``` - -## Texture - -Fill the shape with a specific texture. Texture can be images or data URLs. - -Load failed - -> Note: `p` indicates the use of texture. The green font is variable, filled by the user. - -- `a`: The pattern repeats horizontally and vertically;
-- `x`: This pattern is repeated only horizontally;
-- `y`: This pattern is repeated only vertically;
-- `n`: This pattern is only displayed once (not repeated).
- -Take the `columnStyle` of Column for example: - -```ts -columnStyle: { - fill: 'p(a)https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*58XjQY1tO7gAAAAAAAAAAABkARQnAQ', -} -``` - -Result: - -Load failed diff --git a/site/docs/api/graphic-style.zh.md b/site/docs/api/graphic-style.zh.md deleted file mode 100644 index 7a11d8546..000000000 --- a/site/docs/api/graphic-style.zh.md +++ /dev/null @@ -1,189 +0,0 @@ ---- -title: 绘图属性 -order: 1 ---- - -Ant Design Charts 使用 [G](https://github.com/antvis/g) 作为绘图引擎,一些图形的样式配置,如折线图的`lineStyle`,柱状图的`columnStyle`等,还有部分组件的样式配置,如`label.style`, `axis.line.style`等,都是直接透传 G 的绘图属性。 - -为了方便用户使用,在这里对 G2Plot 常用的绘图属性进行简单的介绍: - -## 配置图形样式 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | string | 图形的填充色 | -| fillOpacity | number | 图形的填充透明度 | -| stroke | string | 图形的描边 | -| lineWidth | number | 图形描边的宽度 | -| lineDash | [number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。 | -| lineOpacity | number | 描边透明度 | -| opacity | number | 图形的整体透明度 | -| shadowColor | string | 图形阴影颜色 | -| shadowBlur | number | 图形阴影的高斯模糊系数 | -| shadowOffsetX | number | 设置阴影距图形的水平距离 | -| shadowOffsetY | number | 设置阴影距图形的垂直距离 | -| cursor | string | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码,使用全量图形样式配置 Column (基础柱状图) 的柱形图形样式 `ColumnStyle`: - -```ts - columnStyle: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4,5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -``` - -效果: - -加载失败 - -## 配置线的样式 - - - -在折线图中,你可以直接使用 `linestyle` 来配置 line 几何图形的样式。示例: - -```ts -lineStyle: { - stroke: 'black', - lineWidth: 2, - lineDash: [4,5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' -} -``` - -效果: - -加载失败 - -## 配置文字样式 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fontSize | number | 文字大小 | -| fontFamily | string | 文字字体 | -| fontWeight | number | 字体粗细 | -| lineHeight | number | 文字的行高 | -| textAlign | string | 设置文本内容的当前对齐方式, 支持的属性:`center` \| `end` \| `left` \| `right` \| `start`,默认值为`start` | -| textBaseline | string | 设置在绘制文本时使用的当前文本基线, 支持的属性:`top` \| `middle` \| `bottom` \| `alphabetic` \| `hanging`。默认值为`bottom` | -| fill | string | 文字的填充色 | -| fillOpacity | number | 文字的填充透明度 | -| stroke | string | 文字的描边 | -| lineWidth | number | 文字描边的宽度 | -| lineDash | [number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。 | -| lineOpacity | number | 描边透明度 | -| opacity | number | 文字的整体透明度 | -| shadowColor | string | 文字阴影颜色 | -| shadowBlur | number | 文字阴影的高斯模糊系数 | -| shadowOffsetX | number | 设置阴影距文字的水平距离 | -| shadowOffsetY | number | 设置阴影距文字的垂直距离 | -| cursor | string | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码,以 Liquid (水波图) 的 statistic.style 配置为例: - -```ts -statistic: { - style:{ - fontSize: 80, - fontWeight: 300, - textAlign: 'center', - textBaseline: 'middle', - shadowColor: 'white', - shadowBlur: 10, - } -} -``` - -效果: - -加载失败 - -## 配置渐变色 - -提供线性渐变,环形渐变两种形式。 - -### 线性渐变 - -加载失败 - -> 说明:`l`  表示使用线性渐变,绿色的字体为可变量,由用户自己填写。 - -```ts -// 使用渐变色描边,渐变角度为 0,渐变的起始点颜色 #ffffff,中点的渐变色为 #7ec2f3,结束的渐变色为 #1890ff -stroke: 'l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff'; -``` - -示例代码(1),通过 Area(面积图) 的 `areaStyle`,配置带渐变色的面积图。 - -```ts -areaStyle: { - fill: 'l(270) 0:#ffffff 0.5:#7ec2f3 1:#1890ff', -} -``` - -效果: - -加载失败 - -示例代码(2),通过 Bar (条形图) 的 `barStyle`, 配置带渐变色的条形图。 - -```ts -barStyle: { - fill: 'l(0) 0:#3e5bdb 1:#dd3121', -} -``` - -效果: - -加载失败 - -### 环形渐变 - -加载失败 - -> 说明:`r`  表示使用放射状渐变,绿色的字体为可变量,由用户自己填写,开始圆的 x y r 值均为相对值,0 至 1 范围。 - -```ts -// example -// 使用渐变色填充,渐变起始圆的圆心坐标为被填充物体的包围盒中心点,半径为(包围盒对角线长度 / 2) 的 0.1 倍,渐变的起始点颜色 #ffffff,中点的渐变色为 #7ec2f3,结束的渐变色为 #1890ff -fill: 'r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff'; -``` - -## 纹理 - -用特定的纹理填充图形。纹理内容可以直接是图片或者  Data URLs。 - -加载失败 - -> 说明:`p`  表示使用纹理,绿色的字体为可变量,由用户自己填写。 - -- `a`: 该模式在水平和垂直方向重复;
-- `x`: 该模式只在水平方向重复;
-- `y`: 该模式只在垂直方向重复;
-- `n`: 该模式只显示一次(不重复)。
- -示例代码,以 Column(柱状图) 的 `columnStyle` 为例: - -```ts -columnStyle: { - fill: 'p(a)https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*58XjQY1tO7gAAAAAAAAAAABkARQnAQ', -} -``` - -效果: - -加载失败 diff --git a/site/docs/api/options/animation.en.md b/site/docs/api/options/animation.en.md deleted file mode 100644 index 97fed38db..000000000 --- a/site/docs/api/options/animation.en.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Animation -order: 2 ---- - -#### Usage - -图形动画配置有两种方式: - -第一种,传入 `false` 设置关闭动画。 - -```ts -animation: false; // close animation -``` - -第二种,传入 *AnimateOption* 对进行动画参数配置。 - -```ts -animation: { - // Configuration of the first animation - appear: { - animation: 'wave-in', // Effects of the first animation - duration: 5000, // Duration of the first animation - }, -} -``` - -#### Configuration(*AnimateOption*) - -
- -*ComponentAnimateOption* 为组件各个动画类型配置。 - -```ts -interface ComponentAnimateOption { - appear?: ComponentAnimateCfg; // 图表第一次加载时的入场动画 - enter?: ComponentAnimateCfg; // 图表绘制完成,发生更新后,产生的新图形的进场动画 - update?: ComponentAnimateCfg; // 图表绘制完成,数据发生变更后,有状态变更的图形的更新动画 - leave?: ComponentAnimateCfg; // 图表绘制完成,数据发生变更后,被销毁图形的销毁动画 -} - -interface ComponentAnimateCfg { - animation?: string; // 动画效果,内置的动画效果见下表,也可以通过自定义动画的方式实现自定义效果 - duration?: number; // 动画执行时间 - easing?: string; // 动画缓动函数 - delay?: number; // 动画延迟时间 -} -``` - -其中 `animation` 传入动画函数名称,内置默认动画函数如下表,同时也可以通过 `registerAnimation` 自定义动画函数。 - -**动画效果**,前往[图表示例](/zh/examples/dynamic-plots/animation)查看效果 - -| animation | 效果 | 说明 | 不适用场景 | -| ----------------- | --- | -------------------------------- |-------- | -| 'fade-in' | ![fade-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*LTRRRL8JwfQAAAAAAAAAAABkARQnAQ) | 渐现动画。 | | -| 'fade-out' | ![fade-out.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*s4Y4S5JJ6WEAAAAAAAAAAABkARQnAQ) | 渐隐动画。 | | -| 'grow-in-x' | ![grow-in-x.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*vhRVSLxDqU8AAAAAAAAAAABkARQnAQ) | 容器沿着 x 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 | 不适用于饼图、玫瑰图等 polar、theta 坐标系下的图表以及柱、条状图 | -| 'grow-in-y' | ![grow-in-y.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*L6mkQa3aG64AAAAAAAAAAABkARQnAQ) | 容器沿着 y 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 | 不适用于饼图、玫瑰图等 polar、theta 坐标系下的图表以及柱、条状图 | -| 'grow-in-xy' | ![grow-in-xy.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*LfPrQouGwYIAAAAAAAAAAABkARQnAQ) | 容器沿着 x,y 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 || -| 'scale-in-x' | ![scale-in-x.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*oiaGTLx-dNcAAAAAAAAAAABkARQnAQ) | 单个图形沿着 x 方向的生长动画。 || -| 'scale-in-y' | ![scale-in-y.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*T6mLTY3o9OoAAAAAAAAAAABkARQnAQ) | 单个图形沿着 y 方向的生长动画。 || -| 'wave-in' | ![wave-in-p.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*W5CdQIWw-M4AAAAAAAAAAABkARQnAQ)![wave-in-r.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*z9jjQY-lHcwAAAAAAAAAAABkARQnAQ) | 划入入场动画效果,不同坐标系下效果不同。 || -| 'zoom-in' | ![zoom-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*wc4dQp4E6vkAAAAAAAAAAABkARQnAQ) | 沿着图形中心点的放大动画。 || -| 'zoom-out' | ![zoom-out.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*PZ2gTrkV29YAAAAAAAAAAABkARQnAQ) | 沿着图形中心点的缩小动画。 || -| 'path-in' | ![path-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*gxZ1RIIMtdIAAAAAAAAAAABkARQnAQ) | path 路径入场动画。 || -| 'position-update' | | 图形位置移动动画。 | 限用于图表标签 label 上 | - -
- - -#### Easing Effects - -Easing method used to control apparent motion in animation. Varied easing effects can be found at [d3-ease](https://github.com/d3/d3-ease) - - diff --git a/site/docs/api/options/animation.zh.md b/site/docs/api/options/animation.zh.md deleted file mode 100644 index fa9692f76..000000000 --- a/site/docs/api/options/animation.zh.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: 图形动画 -order: 2 ---- - -#### 使用方式 - -图形动画配置有两种方式: - -第一种,传入 `false` 设置关闭动画。 - -```ts -animation: false; // 关闭动画 -``` - -第二种,传入 *AnimateOption* 对进行动画参数配置。 - -```ts -animation: { - // 配置图表第一次加载时的入场动画 - appear: { - animation: 'wave-in', // 动画效果 - duration: 5000, // 动画执行时间 - }, -} -``` - -#### 配置项(*AnimateOption*) - -
- -*ComponentAnimateOption* 为组件各个动画类型配置。 - -```ts -interface ComponentAnimateOption { - appear?: ComponentAnimateCfg; // 图表第一次加载时的入场动画 - enter?: ComponentAnimateCfg; // 图表绘制完成,发生更新后,产生的新图形的进场动画 - update?: ComponentAnimateCfg; // 图表绘制完成,数据发生变更后,有状态变更的图形的更新动画 - leave?: ComponentAnimateCfg; // 图表绘制完成,数据发生变更后,被销毁图形的销毁动画 -} - -interface ComponentAnimateCfg { - animation?: string; // 动画效果,内置的动画效果见下表,也可以通过自定义动画的方式实现自定义效果 - duration?: number; // 动画执行时间 - easing?: string; // 动画缓动函数 - delay?: number; // 动画延迟时间 -} -``` - -其中 `animation` 传入动画函数名称,内置默认动画函数如下表,同时也可以通过 `registerAnimation` 自定义动画函数。 - -**动画效果**,前往[图表示例](/zh/examples/dynamic-plots/animation)查看效果 - -| animation | 效果 | 说明 | 不适用场景 | -| ----------------- | --- | -------------------------------- |-------- | -| 'fade-in' | ![fade-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*LTRRRL8JwfQAAAAAAAAAAABkARQnAQ) | 渐现动画。 | | -| 'fade-out' | ![fade-out.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*s4Y4S5JJ6WEAAAAAAAAAAABkARQnAQ) | 渐隐动画。 | | -| 'grow-in-x' | ![grow-in-x.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*vhRVSLxDqU8AAAAAAAAAAABkARQnAQ) | 容器沿着 x 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 | 不适用于饼图、玫瑰图等 polar、theta 坐标系下的图表以及柱、条状图 | -| 'grow-in-y' | ![grow-in-y.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*L6mkQa3aG64AAAAAAAAAAABkARQnAQ) | 容器沿着 y 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 | 不适用于饼图、玫瑰图等 polar、theta 坐标系下的图表以及柱、条状图 | -| 'grow-in-xy' | ![grow-in-xy.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*LfPrQouGwYIAAAAAAAAAAABkARQnAQ) | 容器沿着 x,y 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 || -| 'scale-in-x' | ![scale-in-x.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*oiaGTLx-dNcAAAAAAAAAAABkARQnAQ) | 单个图形沿着 x 方向的生长动画。 || -| 'scale-in-y' | ![scale-in-y.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*T6mLTY3o9OoAAAAAAAAAAABkARQnAQ) | 单个图形沿着 y 方向的生长动画。 || -| 'wave-in' | ![wave-in-p.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*W5CdQIWw-M4AAAAAAAAAAABkARQnAQ)![wave-in-r.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*z9jjQY-lHcwAAAAAAAAAAABkARQnAQ) | 划入入场动画效果,不同坐标系下效果不同。 || -| 'zoom-in' | ![zoom-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*wc4dQp4E6vkAAAAAAAAAAABkARQnAQ) | 沿着图形中心点的放大动画。 || -| 'zoom-out' | ![zoom-out.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*PZ2gTrkV29YAAAAAAAAAAABkARQnAQ) | 沿着图形中心点的缩小动画。 || -| 'path-in' | ![path-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*gxZ1RIIMtdIAAAAAAAAAAABkARQnAQ) | path 路径入场动画。 || -| 'position-update' | | 图形位置移动动画。 | 限用于图表标签 label 上 | - -
- - -#### 缓动效果 (*Easing Effects*) - -`easing` 用来控制动画中的缓动效果,更多的缓动效果可以参见 [d3-ease](https://github.com/d3/d3-ease)。 - - diff --git a/site/docs/api/options/events.en.md b/site/docs/api/options/events.en.md deleted file mode 100644 index eab9c1e32..000000000 --- a/site/docs/api/options/events.en.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Events -order: 6 ---- - -### Event Types - -In G2Plot (inherited G2 events), we divide events into several event types: - -#### 1. Basic Events - -> It mainly contains basic events of DOM. - -* **mouse event** - * mousedown - * mousemove - * mouseup - * mouseover - * mouseout - * mouseenter - * mouseleave -* **touch event (for mobile)** - * touchstart - * touchmove - * touchend - * touchcancel -* **drag event** - * dragenter - * dragover - * dragleave - * drop -* **contextmenu event** -* **dblclick event** - -#### 2. Composite Events - -In `Basic Events`, as long as these events are triggered in the canvas, they will be executed, but in most scenarios, we need to accurately locate the click of an element, such as: - -* When the column of the column plot is clicked -* When a certain item of the legend is hovered -* When the axis label is dblclicked -* and so on... - -In this case, we can use the composite event of G2. The composite event rule of G2 is: `component name: basic event name`, namely: - -```sign -${componentName}:${eventName} -``` - -For example, corresponding to the above scenarios, the event name is: - -* element:click -* legend-item:mouseover -* axis-label:dblclick -* and so on... - -> Among the built-in components of G2Plot(G2), the classification of componentName is very detailed, which can be roughly explained with the following figure. - - - -![event](https://gw.alipayobjects.com/mdn/rms\_d314dd/afts/img/A\*ZFbySLuhjPsAAAAAAAAAAAAAARQnAQ) - -It can be roughly divided into: - -* plot -* axis - * axis-line - * axis-label -* legend - * legend-item -* label -* slider -* element - * interval - * line - * area - * point - * polygon - * schema - * path - * ... - -Then combine these component names and basic event names into a permutation and composite, that is, G2Plot(G2) built-in events. - -### Event Listener - -On Plot, binding events are removed by `ON` and `OFF` method. - -```ts -// Bind event -plot.on('eventName', callback); -// Bind event, only trigger one time -plot.once('eventName', callback); -// Remove event -plot.off('eventName', callback); -``` - -Composition: `${componentName}:${eventName}` - -Element refers to the type of element to bind to, for example `element`、`legend-item`、`axis-label`、`mask`、`plot`、`legend-item-name`、`reset-button` etc. - -Events correspond to DOM common events, for example `click`、`mousedown`、`mouseup`、`dblclick`、`mouseenter`、`mouseout`、`mouseover`、`mousemove`、`mouseleave`、`contextmenu` etc. And support mobile events: `touchstart`、`touchmove`、`touchend` - -```ts -// Plot adds click events to the entire chart area -plot.on('plot:click', (...args) => { - console.log(...args); -}); - -// Element to add a click event, element represents the graphic elements, graphical elements, please see: https://g2.antv.vision/en/docs/manual/concepts/element -plot.on('element:click', (...args) => { - console.log(...args); -}); - -// Legend adds click events -plot.on('legend-item:click', (...args) => { - console.log(...args); -}); - -// Legend name adds click event -plot.on('legend-item-name:click', (...args) => { - console.log(...args); -}); - -// 给 tooltip 添加点击事件 -plot.on('tooltip:show', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:hide', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:change', (...args) => { - console.log(...args); -}); - -// Label adds click events -plot.on('label:click', (...args) => { - console.log(...args); -}); - -// Mask adds click events -plot.on('mask:click', (...args) => { - console.log(...args); -}); - -// Axis-label adds click events -plot.on('axis-label:click', (...args) => { - console.log(...args); -}); - -// Add click events to the annotation -plot.on('annotation:click', (...args) => { - console.log(...args); -}); -``` diff --git a/site/docs/api/options/events.zh.md b/site/docs/api/options/events.zh.md deleted file mode 100644 index 4293710df..000000000 --- a/site/docs/api/options/events.zh.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: 图表事件 -order: 6 ---- - -### 事件类别 - -在 G2Plot 中(继承 G2 事件),我们将事件分成为几种事件类型: - -#### 1. 基础事件 - -> 主要包含有 DOM 的基础事件。 - -* **mouse 事件** - * mousedown - * mousemove - * mouseup - * mouseover - * mouseout - * mouseenter - * mouseleave -* **touch 事件 (移动端事件)** - * touchstart - * touchmove - * touchend - * touchcancel -* **drag 事件** - * dragenter - * dragover - * dragleave - * drop -* **contextmenu 右键事件** -* **dblclick 双击事件** - -#### 2. 组合事件 - -`基础事件`中,只要画布中触发这些事件,都会执行,但是大部分场景下,我们需要精确定位到某一个元素的点击,比如: - -* 柱形图的柱子被 click 的时候 -* 图例的某一项被 hover 的时候 -* 坐标轴的标签被 dblclick 的时候 -* ... - -这种情况我们就可以使用 G2 的组合事件,G2 的组合事件规则为:`组件名:基础事件名`,即: - -```sign -${componentName}:${eventName} -``` - -例如对应上述的几个场景,事件名称为: - -* element:click -* legend-item:mouseover -* axis-label:dblclick -* ... - -> G2Plot(G2) 内置的组件中,componentName 的分类很细,可以以下面的一个图进行大概说明。 - - - -![event](https://gw.alipayobjects.com/mdn/rms\_d314dd/afts/img/A\*ZFbySLuhjPsAAAAAAAAAAAAAARQnAQ) - -也就是大致可以分成为: - -* plot -* axis - * axis-line - * axis-label -* legend - * legend-item -* label -* slider -* element - * interval - * line - * area - * point - * polygon - * schema - * path - * ... - -然后将这些组件名称和基础事件名进行一个排列组合,即为 G2Plot(G2) 内置的事件。 - -### 事件监听 - -在 Plot 上通过 `on` 绑定事件、`off` 移除绑定事件。 - -```sign -// 绑定事件 -plot.on('eventName', callback); -// 绑定事件,只触发一次 -plot.once('eventName', callback); -// 移除事件 -plot.off('eventName', callback); -``` - -组合方式: `${componentName}:${eventName}` - -```ts -// plot 添加点击事件,整个图表区域 -plot.on('plot:click', (...args) => { - console.log(...args); -}); - -// element 添加点击事件, element 代表图形元素,关于图形元素,请查看:https://g2.antv.vision/zh/docs/manual/concepts/element -plot.on('element:click', (...args) => { - console.log(...args); -}); - -// 图例添加点击事件 -plot.on('legend-item:click', (...args) => { - console.log(...args); -}); - -// 图例名称添加点击事件 -plot.on('legend-item-name:click', (...args) => { - console.log(...args); -}); - -// 给 tooltip 添加点击事件 -plot.on('tooltip:show', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:hide', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:change', (...args) => { - console.log(...args); -}); - -// label 添加点击事件 -plot.on('label:click', (...args) => { - console.log(...args); -}); - -// mask 添加点击事件 -plot.on('mask:click', (...args) => { - console.log(...args); -}); - -// axis-label 添加点击事件 -plot.on('axis-label:click', (...args) => { - console.log(...args); -}); - -// 给 annotation 添加点击事件 -plot.on('annotation:click', (...args) => { - console.log(...args); -}); -``` diff --git a/site/docs/api/options/interactions.en.md b/site/docs/api/options/interactions.en.md deleted file mode 100644 index fea3cf4b8..000000000 --- a/site/docs/api/options/interactions.en.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Interactions -order: 7 ---- - -Interaction is an important API in G2, and it is a way to load G2's built-in interactions or custom Interaction interactions based on the Interaction syntax form. G2 4.0 has made a big change in terms of interaction. All interaction code is intrusive and is organized through interaction syntax. The way to use the interaction is also very simple, you just need to set the name of the interaction. - -In G2Plot, G2's interaction syntax is passed through, as well as some built-in interactions with specific plot bindings. - -### Usage - -#### Add interactions - -Usage: - -```ts -// Enable the Active interaction when the mouse moves over a chart element (bar in a bar, dot in a dot, etc.) -interactions: [{ type: 'element-active' }]; - -// Enable multiple interactions -interactions: [{ type: 'element-active' }, { type: 'brush' }]; -``` - -#### Config interactions - -通过 `cfg` 可以对交互行为进行配置,详细参考 [G2 | 修改交互的默认交互](https://g2.antv.vision/en/docs/api/general/interaction/#修改交互的默认交互) - -```ts -// 修改 tooltip 触发事件 -interactions: [ - { - type: 'tooltip', - cfg: { start: [{ trigger: 'element:click', action: 'tooltip:show' }] } - } -] -``` - -#### Remove the interaction - -```ts -// 方式1: 关闭 tooltip 交互 -interactions: [{ type: 'tooltip', enable: false }] - -// 方式2: -plot.chart.removeInteraction('interaction-type'); -``` - -Example: - -```ts -// Removes legend filtering interaction -plot.chart.removeInteraction('legend-filter'); -``` - - -### About interactions - -#### Built-in interactions - -更多内置交互列表,见[G2 | 交互](https://g2.antv.vision/zh/docs/api/general/interaction#%E6%89%80%E6%9C%89%E7%9A%84%E4%BA%A4%E4%BA%92%E5%88%97%E8%A1%A8) - -| **Interaction name** | **Preivew** | **Comments**| -| --- | --- | --- | -| element-active | ![image](https://gw.alipayobjects.com/zos/antfincdn/UfhBYHY%26Ju/element-active.gif#align=left\&display=inline\&height=428\&margin=%5Bobject%20Object%5D\&name=\&originHeight=428\&originWidth=660\&status=done\&style=none\&width=660)| | -| element-selected | ![image](https://gw.alipayobjects.com/zos/antfincdn/Uws9%24PzRaR/element-selected.gif#align=left\&display=inline\&height=420\&margin=%5Bobject%20Object%5D\&name=\&originHeight=420\&originWidth=566\&status=done\&style=none\&width=566) | 可以同时选中多个 element | -| element-single-selected  | ![image](https://gw.alipayobjects.com/zos/antfincdn/p5jPi6yN5b/element-single-selected.gif#align=left\&display=inline\&height=428\&margin=%5Bobject%20Object%5D\&name=\&originHeight=428\&originWidth=660\&status=done\&style=none\&width=660) | | -| element-highlight | ![image](https://gw.alipayobjects.com/zos/antfincdn/Ii0m6b7GV5/element-highlight.gif#align=left\&display=inline\&height=428\&margin=%5Bobject%20Object%5D\&name=\&originHeight=428\&originWidth=660\&status=done\&style=none\&width=660) | | -| element-highlight-by-color | ![image](https://gw.alipayobjects.com/zos/antfincdn/TexNaYF8xf/element-highlight-by-color.gif#align=left\&display=inline\&height=400\&margin=%5Bobject%20Object%5D\&name=\&originHeight=400\&originWidth=558\&status=done\&style=none\&width=558)| | -| element-highlight-by-x | ![image](https://gw.alipayobjects.com/zos/antfincdn/w5PH%26bkRui/element-highlight-by-x.gif#align=left\&display=inline\&height=420\&margin=%5Bobject%20Object%5D\&name=\&originHeight=420\&originWidth=566\&status=done\&style=none\&width=566) | 相同横轴字段进行同时高亮。对于柱状图(column) ,横轴字段是 xField,对于条形图(bar) ,横轴字段是 yField。 | -| legend-highlight| ![image](https://gw.alipayobjects.com/zos/antfincdn/6cUSu7yn08/legend-highlight.gif#align=left\&display=inline\&height=300\&margin=%5Bobject%20Object%5D\&name=\&originHeight=420\&originWidth=566\&status=done\&style=none\&width=404) | 图例项高亮,对应的图表元素也高亮| -| axis-label-highlight| ![image](https://gw.alipayobjects.com/zos/antfincdn/48JwSOccLo/axis-label-highlight.gif#align=left\&display=inline\&height=420\&margin=%5Bobject%20Object%5D\&name=\&originHeight=420\&originWidth=566\&status=done\&style=none\&width=566)| | - -#### Built-in Action - -more details about action, got to see [G2 | interaction feedback](https://g2.antv.vision/zh/docs/api/general/interaction#%E4%BA%A4%E4%BA%92%E5%8F%8D%E9%A6%88-action-%E5%88%97%E8%A1%A8) - -| **Action bane** | **Description** | **Apply to** | -| --- | --- | --- | -| element-link-by-color | 用于连接相同颜色的图表元素,一般用于层叠柱状图 | Element | -| element-highlight | 用于设置和取消图表元素的 highlight,支持多个元素一起 highlight  | Element | -| element-single-highlight | 用于设置和取消图表元素的 highlight ,只允许单个元素 highlight。高亮的时候会取消当前激活元素之外的元素的高亮态 | Element | -| element-filter| 图表元素的过滤,支持来自图例(分类和连续)、坐标轴文本的触发 | Element | - -### Assembel interactions - -#### element-link (chart elements of the same colors) - -association - -使用方式: - -```typescript -G2.registerInteraction('element-link', { - start: [ - {trigger: 'interval:mouseenter', action: 'element-link-by-color:link'} - ], - end: [ - {trigger: 'interval:mouseleave', action: 'element-link-by-color:unlink'} - ] -}); - -// options -{ - // interactions: [{ type: 'element-link' }], - // 搭配高亮 - interactions: [{ type: 'element-link' }, { type: 'element-highlight-by-color' }], -} -``` - -#### Pointer cursor - -Example: - -```ts -G2.registerInteraction('hover-cursor', { - showEnable: [ - { trigger: 'element:mouseenter', action: 'cursor:pointer' }, - { trigger: 'element:mouseleave', action: 'cursor:default' }, - ], -}); - -// options -{ - // 搭配 元素高亮 - interactions: [{ type: 'element-highlight' }, { type: 'hover-cursor' }], -} -``` - -### More - -more usages about interactions, go to see [G2 | interactions](https://g2.antv.vision/en/docs/api/general/interaction) diff --git a/site/docs/api/options/interactions.zh.md b/site/docs/api/options/interactions.zh.md deleted file mode 100644 index 06afc475c..000000000 --- a/site/docs/api/options/interactions.zh.md +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: 图表交互 -order: 7 ---- - -交互(Interaction)是 G2 中的重要 API,通过这个方法可以加载 G2 内置的交互,或者基于交互语法形式自定义的 Interaction 交互。G2 4.0 在交互方面做了非常大的调整,所有的交互代码都是插入式的,通过交互语法进行组织。使用交互的方式也非常简单,仅需要设置交互的名称即可。 - -在 G2Plot 中,透传了 G2 的交互语法,同时也内置了一些与具体 plot 绑定的交互。 - -### 使用方式 - -#### 添加交互 - -```ts -// 开启「鼠标移入图表元素(柱状图的柱子、点图的点等)时触发 active」的交互 -interactions: [{ type: 'element-active' }] - -// 开启多个交互 -interactions: [{ type: 'element-active' }, { type: 'brush' }] -``` - -#### 配置交互 - -通过 `cfg` 可以对交互行为进行配置,详细参考 [G2 | 修改交互的默认交互](https://g2.antv.vision/zh/docs/api/general/interaction/#修改交互的默认交互) - -```ts -// 修改 tooltip 触发事件 -interactions: [ - { - type: 'tooltip', - cfg: { start: [{ trigger: 'element:click', action: 'tooltip:show' }] } - } -] -``` - -#### 移除交互 - -```ts -// 方式1: 关闭 tooltip 交互 -interactions: [{ type: 'tooltip', enable: false }] - -// 方式2: -plot.chart.removeInteraction('interaction-type'); -``` - -使用示例: - -```ts -// 移除 图例筛选 交互 -plot.chart.removeInteraction('legend-filter'); -``` - - -### 交互介绍 - -#### 内置交互 - -更多内置交互列表,见[G2 | 交互](https://g2.antv.vision/zh/docs/api/general/interaction#%E6%89%80%E6%9C%89%E7%9A%84%E4%BA%A4%E4%BA%92%E5%88%97%E8%A1%A8) - -| **交互名称** | **预览** | **备注** | -| --- | --- | --- | -| element-active | ![image](https://gw.alipayobjects.com/zos/antfincdn/UfhBYHY%26Ju/element-active.gif#align=left\&display=inline\&height=428\&margin=%5Bobject%20Object%5D\&name=\&originHeight=428\&originWidth=660\&status=done\&style=none\&width=660)| | -| element-selected | ![image](https://gw.alipayobjects.com/zos/antfincdn/Uws9%24PzRaR/element-selected.gif#align=left\&display=inline\&height=420\&margin=%5Bobject%20Object%5D\&name=\&originHeight=420\&originWidth=566\&status=done\&style=none\&width=566) | 可以同时选中多个 element | -| element-single-selected  | ![image](https://gw.alipayobjects.com/zos/antfincdn/p5jPi6yN5b/element-single-selected.gif#align=left\&display=inline\&height=428\&margin=%5Bobject%20Object%5D\&name=\&originHeight=428\&originWidth=660\&status=done\&style=none\&width=660) | | -| element-highlight | ![image](https://gw.alipayobjects.com/zos/antfincdn/Ii0m6b7GV5/element-highlight.gif#align=left\&display=inline\&height=428\&margin=%5Bobject%20Object%5D\&name=\&originHeight=428\&originWidth=660\&status=done\&style=none\&width=660) | | -| element-highlight-by-color | ![image](https://gw.alipayobjects.com/zos/antfincdn/TexNaYF8xf/element-highlight-by-color.gif#align=left\&display=inline\&height=400\&margin=%5Bobject%20Object%5D\&name=\&originHeight=400\&originWidth=558\&status=done\&style=none\&width=558)| | -| element-highlight-by-x | ![image](https://gw.alipayobjects.com/zos/antfincdn/w5PH%26bkRui/element-highlight-by-x.gif#align=left\&display=inline\&height=420\&margin=%5Bobject%20Object%5D\&name=\&originHeight=420\&originWidth=566\&status=done\&style=none\&width=566) | 相同横轴字段进行同时高亮。对于柱状图(column) ,横轴字段是 xField,对于条形图(bar) ,横轴字段是 yField。 | -| legend-highlight| ![image](https://gw.alipayobjects.com/zos/antfincdn/6cUSu7yn08/legend-highlight.gif#align=left\&display=inline\&height=300\&margin=%5Bobject%20Object%5D\&name=\&originHeight=420\&originWidth=566\&status=done\&style=none\&width=404) | 图例项高亮,对应的图表元素也高亮| -| axis-label-highlight| ![image](https://gw.alipayobjects.com/zos/antfincdn/48JwSOccLo/axis-label-highlight.gif#align=left\&display=inline\&height=420\&margin=%5Bobject%20Object%5D\&name=\&originHeight=420\&originWidth=566\&status=done\&style=none\&width=566)| | - -#### 内置 Action - -action 的详细说明,见 [G2 | 交互反馈](https://g2.antv.vision/zh/docs/api/general/interaction#%E4%BA%A4%E4%BA%92%E5%8F%8D%E9%A6%88-action-%E5%88%97%E8%A1%A8) - -| **Action 名称** | **说明** | **作用于** | -| --- | --- | --- | -| element-link-by-color | 用于连接相同颜色的图表元素,一般用于层叠柱状图 | Element | -| element-highlight | 用于设置和取消图表元素的 highlight,支持多个元素一起 highlight  | Element | -| element-single-highlight | 用于设置和取消图表元素的 highlight ,只允许单个元素 highlight。高亮的时候会取消当前激活元素之外的元素的高亮态 | Element | -| element-filter| 图表元素的过滤,支持来自图例(分类和连续)、坐标轴文本的触发 | Element | - -### 组装交互 - -#### 图表连接 (相同颜色的图表元素) - -association - -使用方式: - -```typescript -G2.registerInteraction('element-link', { - start: [ - {trigger: 'interval:mouseenter', action: 'element-link-by-color:link'} - ], - end: [ - {trigger: 'interval:mouseleave', action: 'element-link-by-color:unlink'} - ] -}); - -// options -{ - // interactions: [{ type: 'element-link' }], - // 搭配高亮 - interactions: [{ type: 'element-link' }, { type: 'element-highlight-by-color' }], -} -``` - -#### 鼠标手势 - -使用方式: - -```ts -G2.registerInteraction('hover-cursor', { - showEnable: [ - { trigger: 'element:mouseenter', action: 'cursor:pointer' }, - { trigger: 'element:mouseleave', action: 'cursor:default' }, - ], -}); - -// options -{ - // 搭配 元素高亮 - interactions: [{ type: 'element-highlight' }, { type: 'hover-cursor' }], -} -``` - -### 更多 - -更多关于交互的使用说明,见 [G2 文档](https://g2.antv.vision/zh/docs/api/general/interaction) diff --git a/site/docs/api/options/meta.en.md b/site/docs/api/options/meta.en.md deleted file mode 100644 index d051f5929..000000000 --- a/site/docs/api/options/meta.en.md +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: Meta -order: 1 ---- - -Through meta, you can configure the data metadata information of the chart globally, and the configuration is carried out by the unit of field. The configuration on 'meta' affects the text information of all components at the same time. - -## Configuration mode - -Pass in a configuration with field name key, *MetaOption* as value, and set meta information for multiple fields at the same time. - -```sign -{ - meta: { - [field: string]: MetaOption - } -} -``` - -Example: - -```ts -{ - meta: { - sale: { - min: 0, - max: 100, - }, - } -} -``` - -## Detail configuration item - -*MetaOption* The configuration is as follows: - -### MetaOption.type - - *string* **optional** - -Declare the measurement type: - -| Measure type | Description | -| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Classification measurement | - cat: Classification measurement
- timeCat: Time classification measurement | -| Continuous measurement | - linear: Linear measurement
- time:Continuous time measurement
- log: Log measurement
- pow: Pow measurement
- quantize:Segmentation measurement, where users can specify non-uniform segments
- quantile: Equal measurement, according to the distribution of data automatically calculate segmentation
| -| Constant measurement | - identity: Constant measurement | - -### MetaOption.alias - - *string* **optional** - -Data field display alias, scale is not internal awareness, external injection. - -### MetaOption.values - - *any\[]* **optional** - -Input field, definition field. - -### MetaOption.formatter - - *(value: any, index?: number) => any* **optional** - -The tick formatting function affects the display of data on Axis, Legend, and Tooltip. - -### MetaOption.range - - *\[number, number]* **optional** *default:* `[0, 1]` - -Output field and value field represent the range available for drawing within the drawing range. - -### MetaOption.sync - - *boolean | string* **optional** - -```ts -{ - meta: { - { - x: { sync: true }, - y: { sync: true }, - x1: { sync: 'x1' }, - x2: { sync: 'x1' }, - } - } -} -``` - -Synchronous scale. sync: `boolean` is sync: \[key], The above case `x: { sync: true }` is equivalent to `x: { sync: 'x' }`,`y: { sync: true }` is equivalent to `y: { sync: 'y' }`,Therefore, with the above configuration, the measurement operation will be synchronized for fields X and Y and fields X1 and X2 respectively. - -### MetaOption.min - - *any* **optional** - -Domain minimum value, d3 is the domain, ggplot2 is the limits, not valid under type. - -### MetaOption.max - - *any* **optional** - -The maximum value of the domain. Invalid under type. - -### MetaOption.minLimit - - *any* **optional** - -The smallest value of the domain in strict mode. Set to force ticks to start at the smallest. - -### MetaOption.maxLimit - - *any* **optional** - -The maximum value of the domain in strict mode, which forces the ticks to end at the maximum. - -### MetaOption.base - - *number* **optional** - -Log is valid. Base. - -### MetaOption.exponent - - *number* **optional** - -Pow valid, exponent. - -### MetaOption.nice - - *boolean* **optional** - -Automatically adjust min and Max. - -### MetaOption.ticks - - *any\[]* **optional** - -Use to specify tick, with the highest priority. - -### MetaOption.tickInterval - - *number* **optional** - -Tick interval, only for type and time type, takes precedence over tickCount. - -### MetaOption.minTickInterval - - *number* **optional** - -The tick interval is minimal and applies only to linear. - -### MetaOption.tickCount - - *number* **optional** *default:* `5` - -The number of tick. - -### MetaOption.maxTickCount - - *number* **optional** *default:* `10` - -Ticks maximum. - -### MetaOption.tickMethod - - *string | TickMethod* **optional** - -Algorithms for calculating ticks. - -### MetaOption.showLast - - *boolean* **optional** - -Only applies to scale of type: 'time', forcing the last date tick to be displayed. - -### MetaOption.mask - - *string* **optional** - -Time measures Time and is valid when TIMECAT. The underlying use \[fecha] (https://github.com/taylorhakes/fecha#formatting-tokens) for the date format, so for the mask strings can directly refer to their wording. diff --git a/site/docs/api/options/meta.zh.md b/site/docs/api/options/meta.zh.md deleted file mode 100644 index 4c6d0dd91..000000000 --- a/site/docs/api/options/meta.zh.md +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: Meta -order: 1 ---- - -通过 `meta` 可以全局化配置图表数据元信息,以字段为单位进行配置。在 `meta` 上的配置将同时影响所有组件的文本信息。 - -## 配置方式 - -传入以字段名为 key,*MetaOption* 为 value 的配置,同时设置多个字段的元信息。 - -```sign -{ - meta: { - [field: string]: MetaOption - } -} -``` - -Example: - -```ts -{ - meta: { - sale: { - min: 0, - max: 100, - }, - } -} -``` - -## 细分配置项 - -*MetaOption* 配置如下: - -### MetaOption.type - - *string* **optional** - -声明度量类型: - -| 度量类型 | 描述 | -| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 分类度量 | - cat: 分类度量
- timeCat: 时间分类度量 | -| 连续度量 | - linear: 线性度量
- time:连续的时间度量
- log: log 度量
- pow: pow 度量
- quantize:分段度量,用户可以指定不均匀的分段
- quantile: 等分度量,根据数据的分布自动计算分段
| -| 常量度量 | - identity: 常量度量 - -### MetaOption.alias - - *string* **optional** - -数据字段的显示别名,scale 内部不感知,外部注入。 - -### MetaOption.values - - *any\[]* **optional** - -输入域、定义域。 - -### MetaOption.formatter - - *(value: any, index?: number) => any* **optional** - -tick 格式化函数,影响数据在坐标轴 axis、图例 legend、tooltip 上的显示。 - -### MetaOption.range - - *\[number, number]* **optional** *default:* `[0, 1]` - -输出域、值域,表示在绘图范围内可用于绘制的范围。 - -### MetaOption.sync - - *boolean | string* **optional** - -```ts -{ - meta: { - { - x: { sync: true }, - y: { sync: true }, - x1: { sync: 'x1' }, - x2: { sync: 'x1' }, - } - } -} -``` - -同步 scale。sync: `boolean` 即为 sync: \[key],如上例中 `x: { sync: true }` 等同于 `x: { sync: 'x' }`,`y: { sync: true }` 等同于 `y: { sync: 'y' }`,所以,通过以上配置,会分别对 x 和 y 两个字段,x1 和 x2 两个字段进行同步度量操作。 - -### MetaOption.min - - *any* **optional** - -定义域的最小值,d3 为 domain,ggplot2 为 limits,分类型下无效。 - -### MetaOption.max - - *any* **optional** - -定义域的最大值,分类型下无效。 - -### MetaOption.minLimit - - *any* **optional** - -严格模式下的定义域最小值,设置后会强制 ticks 从最小值开始。 - -### MetaOption.maxLimit - - *any* **optional** - -严格模式下的定义域最大值,设置后会强制 ticks 以最大值结束。 - -### MetaOption.base - - *number* **optional** - -log 有效,底数。 - -### MetaOption.exponent - - *number* **optional** - -pow 有效,指数。 - -### MetaOption.nice - - *boolean* **optional** - -自动调整 min、max 。 - -### MetaOption.ticks - - *any\[]* **optional** - -用于指定 tick,优先级最高。 - -### MetaOption.tickInterval - - *number* **optional** - -tick 间隔,只对分类型和时间型适用,优先级高于 tickCount。 - -### MetaOption.minTickInterval - - *number* **optional** - -tick 最小间隔,只对 linear 适用。 - -### MetaOption.tickCount - - *number* **optional** *default:* `5` - -tick 个数。 - -### MetaOption.maxTickCount - - *number* **optional** *default:* `10` - -ticks 最大值。 - -### MetaOption.tickMethod - - *string | TickMethod* **optional** - -计算 ticks 的算法。 - -### MetaOption.showLast - - *boolean* **optional** - -只对 type: 'time' 的 scale 生效,强制显示最后的日期 tick。 - -### MetaOption.mask - - *string* **optional** - -时间度量 time, timeCat 时有效。底层使用 [fecha](https://github.com/taylorhakes/fecha#formatting-tokens) 进行日期的格式,所以对于 mask 的字符串可以直接参考其写法。 diff --git a/site/docs/api/options/pattern.en.md b/site/docs/api/options/pattern.en.md deleted file mode 100644 index 5f91d78b9..000000000 --- a/site/docs/api/options/pattern.en.md +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Pattern -order: 8 ---- - -### Introduction - -We can set patterns for geometries. - -* We provide the default, high contrast patterns: dot, line, and square. For charts with poor color differentiation, pattern can be used as an "intuitive, visual classification attribute" to distinguish each item, making it color-blind friendly. -* add grouping for color: Pattern can help to expand the classification of colors when there are not enough harmonious colors, or when the color has a small proportion, the distinction is not obvious. -* Subdivision and grouping with color: We can use pattern as a "group", and the color as sub classification in this group. -* Grouping as degree: The size of a circle or square, the thickness of a line can indicate "degree". -* Highlight key points and enrich expression: Pattern not only has a "good-looking" skin, but also can highlight a certain items for storytelling. - -### Use pattern in G2Plot - -G2Plot with built-in `'dot' | 'line' | 'square'` several patterns, the pattern inherits the current element's fill color by default. - - - -Usage for scenes: - -* [Demo1](/zh/examples/plugin/pattern#legend-marker-with-pattern): Set pattern for legend marker -* [Demo2](/zh/examples/plugin/pattern#bar-pattern): Set pattern with callback for each geometry - - - -### API - -Set the pattern style of the geometries. - -* PatternOption: consists of `type` and `cfg`, `type` includes: `dot`, `line`, `square`, `cfg` is optional. -* Features: pattern will override the `style` of geometry (such as pieStyle, columnStyle, etc.). -* Usage: You can set a uniform pattern style for all geometries of the chart by using configuration (`PatternOption`) or `CanvasPattern` object, and a `callback` is provided to set the pattern for each geometry. - In addition, we provide `getCanvasPattern` function, pass in the PatternOption to create the pattern to modify the Legend styles[Demo](/zh/examples/plugin/pattern#legend-marker-with-pattern) - -The type of pattern is defined as follows: - -```plain -PatternAttr = - | CanvasPattern - | PatternOption - | ((datum: Datum, color: string /** inherit color */) => PatternOption | CanvasPattern); -``` - -Usage: - -```ts -// set a uniform pattern style for all geometries -{ - pattern: { - type: 'dot', - cfg: { - size: 4, - padding: 4, - rotation: 0, - fill: '#FFF', - isStagger: true, - }, - }, -} -// set the pattern for each geometry -{ - pattern: ({type}, color) =>{ - if(type ==='分类一') { - return { - type: 'dot', - cfg: { - backgroundColor: color, // inherit color - } - } - } else if(type ==='分类二') { - return { - type: 'square', - cfg: { - backgroundColor: 'pink', // custom color - } - } - } else if(type ==='分类三') { - return { - type: 'line' - } - } - }, -} -``` - - - -Common configuration(cfg) for all types of pattern: - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| backgroundColor | *string* | Background color of the pattern | -| fill | *string* | Fill color of the symbol in pattern | -| fillOpacity | *number* | Transparency of the symbol in pattern | -| stroke | *string* | Stroke color of the symbol in pattern | -| strokeOpacity | *number* | Stroke opacity of the symbol in pattern | -| lineWidth | *number* | The thickness of the symbol's stroke | -| opacity | *number* | Overall transparency of the pattern | -| rotation | *number* | Rotation angle of the pattern | - -Additional configuration for dotPattern - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| size | *number* | The size of the dot, default: `6` | -| padding | *number* | The distance between dots, default: `2` | -| isStagger | *boolean* | Staggered dots. default: `true` | - -Additional configuration for linePattern - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| spacing | *number* | The distance between the two lines, default: `5` | - -Additional configuration for squarePattern - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| size | *number* | The size of the square, default: `6` | -| padding | *number* | The distance between squares, default:`1` | -| isStagger | *boolean* | Staggered squares. default:`true` | - - -### Attention - -Please note the use of pattern, which currently has some limitations. - -1. Pattern is not supported in the `svg` rendering mode. -2. Pattern inherits the fill color of element by default, but does not support gradient color for pattern fill color, i.e. when we needs gradient color for element, pattern background color cannot be inherited and needs to be specified manually. See: [Demo](/zh/examples/tiny/tiny-area#pattern) -3. Tooltip, the legend marker is still in plain color. For the legend marker, consider using a callback to set it, see:[Demo](/zh/examples/plugin/pattern#pie-pattern-callback) diff --git a/site/docs/api/options/pattern.zh.md b/site/docs/api/options/pattern.zh.md deleted file mode 100644 index a8f9d7aa5..000000000 --- a/site/docs/api/options/pattern.zh.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: 贴图图案 -order: 8 ---- - -### 介绍 - -pattern 是附着在图形上的贴图样式。 - -* 我们内置了默认的、区分度较高的三种贴图:点、线、方形。在颜色区分度不高的图表中,pattern 能够作为「直观的、视觉上的分类属性」来区分每个项目,对色盲人士友好。 -* 扩充颜色分组:pattern 还可以作为颜色的「补充项」。遇到和谐的颜色「不够用」、颜色占比小「区分不明显」等情况,pattern 可以帮助颜色扩充分类。 -* 结合颜色分组:我们可以用 pattern 作为「组」,然后用颜色在该组下进行细粒度的分类。 -* 程度分组:圆形和方形的大小、线的粗细可以用来表示「程度」。 -* 突出重点、丰富表现力:pattern 不仅有「好看」的皮囊,还可以作为讲故事的「点睛之笔」,高亮某个项目。 - -### 在 G2Plot 中使用 pattern - -G2Plot 内置了 `'dot' | 'line' | 'square'` 等若干贴图, 图案颜色默认从当前 element 继承。 - - - -一些场景使用: - -* [Demo1](/zh/examples/plugin/pattern#legend-marker-with-pattern): 图例(legend) marker 使用 pattern -* [Demo2](/zh/examples/plugin/pattern#bar-pattern): 通过回调设置不同的 pattern - - - -### API 说明 - -设置图形的贴图样式。 - -* 配置项:由`type`和`cfg`组成,`type`目前包括三种类型:`dot`、`line`、`square`,`cfg`为可选项。 -* 特点:`pattern`会覆盖当前图形设置的`style`样式(如 pieStyle、columnStyle 等)。 -* 使用方式:可通过 配置项(PatternOption) 或传入 CanvasPattern 对象 的方式给图表的所有图形设置统一的贴图样式,还提供了 callback 的方式给对应的图形设置样式。此外,提供了 getCanvasPattern 方法传入 PatternOption 配置来创建 pattern,以修改 Legend 样式[Demo](/zh/examples/plugin/pattern#legend-marker-with-pattern) - -pattern 的类型定义如下: - -```plain -PatternAttr = - | CanvasPattern - | PatternOption - | ((datum: Datum, color: string /** inherit color */) => PatternOption | CanvasPattern); -``` - -具体用法: - -```ts -// 给图形设置统一贴图 -{ - pattern: { - type: 'dot', - cfg: { - size: 4, - padding: 4, - rotation: 0, - fill: '#FFF', - isStagger: true, - }, - }, -} -// 给图形分别设置贴图 -{ - pattern: ({type}, color) =>{ - if(type ==='分类一') { - return { - type: 'dot', - cfg: { - backgroundColor: color, // 继承主题颜色 - } - } - } else if(type ==='分类二') { - return { - type: 'square', - cfg: { - backgroundColor: 'pink', // 自定义颜色 - } - } - } else if(type ==='分类三') { - return { - type: 'line' - } - } - }, -} -``` - - - -pattern 共有的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| backgroundColor | *string* | 贴图的背景色 | -| fill | *string* | 贴图元素的填充色 | -| fillOpacity | *number* | 贴图元素填充的透明度 | -| stroke | *string* | 贴图元素的描边色 | -| strokeOpacity | *number* | 贴图元素的描边透明度色 | -| lineWidth | *number* | 贴图元素的描边粗细 | -| opacity | *number* | 贴图整体的透明度 | -| rotation | *number* | 贴图整体的旋转角度 | - -dotPattern 额外的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| size | *number* | 圆点的大小,默认为`6` | -| padding | *number* | 圆点之间的间隔,默认为`2` | -| isStagger | *boolean* | 圆点之间是否交错,默认为`true` | - -linePattern 额外的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| spacing | *number* | 两条线之间的距离,默认为`5` | - -squarePattern 额外的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| size | *number* | 矩形的大小,默认为`6` | -| padding | *number* | 矩形之间的间隔,默认为`1` | -| isStagger | *boolean* | 矩形之间是否交错,默认为`true` | - - -### 注意事项 - -请注意 pattern 的使用,目前有一些限制: - -1. `svg` 的渲染方式下,暂不支持 pattern 图案填充 -2. pattern 默认继承元素(element)的填充色,但不支持 pattern 填充色为渐变色,即元素(element)为渐变色时,pattern 背景色无法继承,需要手动指定。参考:[Demo](/zh/examples/tiny/tiny-area#pattern) -3. Tooltip, Legend 的 marker 使用的是依旧是纯颜色(plain color). 对于 Legend marker 可以考虑使用回调的方式来设置,参考:[Demo](/zh/examples/plugin/pattern#pie-pattern-callback) diff --git a/site/docs/api/options/theme.en.md b/site/docs/api/options/theme.en.md deleted file mode 100644 index 9e1359259..000000000 --- a/site/docs/api/options/theme.en.md +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: Theme -order: 9 ---- - -Recommend to use 💄 [ThemeSet](https://theme-set.antv.vision) to customize your theme configurations online. - -#### Built-in Theme - -Built-in defaults: 'default' and 'dark' - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### Theme attributes - -In addition to using the built-in 'default' and 'dark' themes, you can also modify some of the theme content by setting the theme properties. - -The following table lists the specific properties on the configuration items that make up the topic: - -| **Properties** | **Type** | **Description** | -| --------------------- | ---------- | ------------------------------------------------------------------------------------------------------------- | -| defaultColor | *string* | Theme color | -| padding | *number* | number\[] | -| fontFamily | *string* | Chart font | -| colors10 | *string\[]* | Category color palette, used when the number of categories is less than 10 | -| colors20 | *string\[]* | Category color palette, used when the number of categories is greater than 10 | -| columnWidthRatio | *number* | General histogram width ratio, 0-1 range of values | -| maxColumnWidth | *number* | Maximum width of histogram, pixel value | -| minColumnWidth | *number* | Minimum width of histogram, pixel value | -| roseWidthRatio | *number* | Rose width ratio, 0-1 range of value | -| multiplePieWidthRatio | *number* | Multilayer pie and loop ratio, 0-1 range values | -| geometries | *object* | Configure the style of each shape for each Geometry, including the default style and the style for each state | -| components | *object* | Configure theme samples for axes, legends, tooltips, and annotations | -| labels | *object* | Configure the theme style of the label under Geometry | -| innerLabels | *object* | Configure Geometry to display the Labels theme style inside the graph | -| pieLabels | *object* | Configure the theme style of pie chart labels | - -usage: - -```ts -{ - theme: { - colors10: [ - '#FF6B3B', - '#626681', - '#FFC100', - '#9FB40F', - '#76523B', - '#DAD5B5', - '#0E8E89', - '#E19348', - '#F383A2', - '#247FEA', - ]; - } -} -``` - -#### Theme attributes (StyleSheet) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -usage: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir'; - } - } -} -``` - -支持的样式表属性: - -| **Properties** | **Type** | **Description** | -| ----------------------- | -------- | ------------------------------------------------- | -| `backgroundColor` | *string* | Background color | -| `brandColor` | *string* | Brand color,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | Qualitative palette,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | Qualitative palette,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | Semantic red | -| `paletteSemanticGreen` | *string* | Semantic green | -| `paletteSemanticYellow` | *string* | Semantic yellow | -| `fontFamily` | *string* | fontFamily | - -#### Update theme - -usage: - -```ts -// example 1: -plot.update({ theme: 'dark' }); - -// example 2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }); -``` - -#### Custom theme - -In addition, G2 provides a custom topic mechanism to define a new topic structure, allowing users to switch and define chart topics. Go [G2 | Custom theme](https://g2.antv.vision/en/docs/api/advanced/register-theme) for more details. - - - -🌰 Customize theme [DEMO](/zh/examples/general/theme#register-theme) - - -#### Refer - -* [G2 自定义主题](https://g2.antv.vision/en/docs/api/advanced/register-theme) -* [G2 主题配置项详解](https://g2.antv.vision/en/docs/api/advanced/dive-into-theme) diff --git a/site/docs/api/options/theme.zh.md b/site/docs/api/options/theme.zh.md deleted file mode 100644 index 34729c382..000000000 --- a/site/docs/api/options/theme.zh.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: 图表主题 -order: 9 ---- - -推荐使用 💄 [ThemeSet](https://theme-set.antv.vision) 在线自定义自己的主题配置。 - -#### 内置主题 - -目前默认的内置主要有两套:`default` 和 `dark` - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### 主题属性 - -除了使用内置的 `default` 和 `dark` 主题之外,还可以通过设置主题属性来修改部分主题内容: - -下表列出了组成主题的大配置项上的具体属性: - -| 主题属性 | 类型 | 描述 | -| --- | --- | ---| -| defaultColor | *string*| 主题色 | -| padding | *number* | number\[] | -| fontFamily | *string* | 图表字体 | -| colors10 | *string\[]* | 分类颜色色板,分类个数小于 10 时使用 | -| colors20 |*string\[]* | 分类颜色色板,分类个数大于 10 时使用 | -| columnWidthRatio | *number* | 一般柱状图宽度占比,0 - 1 范围数值 -| maxColumnWidth | *number* | 柱状图最大宽度,像素值 | -| minColumnWidth| *number* | 柱状图最小宽度,像素值 | -| roseWidthRatio | *number* | 玫瑰图占比,0 - 1 范围数值 | -| multiplePieWidthRatio | *number* | 多层饼图/环图占比,0 - 1 范围数值 | -| geometries | *object* | 配置每个 Geometry 下每个 shape 的样式,包括默认样式以及各个状态下的样式 | -| components | *object* | 配置坐标轴,图例,tooltip, annotation 的主题样式 | -| labels | *object* | 配置 Geometry 下 label 的主题样式 | -| innerLabels | *object* | 配置 Geometry 下展示在图形内部的 labels 的主题样式 | -| pieLabels | *object* | 配置饼图 labels 的主题样式 | - -使用方式: - -```ts -{ - theme: { - colors10: ['#FF6B3B', '#626681', '#FFC100', '#9FB40F', '#76523B', '#DAD5B5', '#0E8E89', '#E19348', '#F383A2', '#247FEA'] - } -} -``` - -#### 主题属性(主题样式表) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -使用方式: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir' - } - } -} -``` - -支持的样式表属性: - -| **属性** | **类型** | **描述** | -| ----------------------- | -------- | ------------- | -| `backgroundColor` | *string* | 背景色 | -| `brandColor` | *string* | 主题色,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | 分类颜色色板,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | 分类颜色色板,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | 语义红色 | -| `paletteSemanticGreen` | *string* | 语义绿色 | -| `paletteSemanticYellow` | *string* | 语义黄色 | -| `fontFamily` | *string* | 字体 | - -#### 更新主题 - -使用方式: - -```ts -// 示例1: -plot.update({ theme: 'dark' }); - -// 示例2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }) -``` - -#### 自定义注册主题 - -另外,还可以通过 G2 提供了自定义主题机制来定义全新的主题结构,以允许用户切换、定义图表主题。前往 [G2 | 自定义主题](https://g2.antv.vision/zh/docs/api/advanced/register-theme) 查看详情。 - - - -🌰 自定义主题 [DEMO](/zh/examples/general/theme#register-theme) 示例 - - -#### 参阅 - -* [G2 自定义主题](https://g2.antv.vision/zh/docs/api/advanced/register-theme) -* [G2 主题配置项详解](https://g2.antv.vision/zh/docs/api/advanced/dive-into-theme) diff --git a/site/docs/api/plots/column.en.md b/site/docs/api/plots/column.en.md deleted file mode 100644 index b10e77e45..000000000 --- a/site/docs/api/plots/column.en.md +++ /dev/null @@ -1,2767 +0,0 @@ ---- -title: Column -order: 2 ---- - -### Plot Container - -#### width - -**optional** *number* *default:* `400` - -Set the width of the chart. - -#### height - -**optional** *number* *default:* `400` - -Set the height of the chart. - -#### autoFit - -**optional** *boolean* *default:* `true` - -Whether the chart automatically adjusts to fit the container. If it is set to `true`, `width` and `height` configuration would fail. - -#### padding - -**optional** *number\[] | number | 'auto'* - -Set `padding` value of the canvas. You can also use `auto`. - -#### appendPadding - -**optional** *number\[] | number* - -Extra `appendPadding` value. - -#### renderer - -**optional** *string* *default:* `canvas` - -Set the render way to `canvas` or `svg`. - -#### pixelRatio - -**optional** *number* *default:* `window.devicePixelRatio` - -Set the pixel ratio of the chart. - -#### limitInPlot - -**optional** *boolean* - -Whether clip the Geometry beyond the coordinate system。 - - - -#### locale - -**optional** *string* - -Specify the locale. There are two built-in locales: 'zh-CN' and 'en-US'. Or you can use `G2Plot.registerLocale` to register a new locale. Go [src/locales/en\_US.ts](https://github.com/antvis/G2Plot/blob/master/src/locales/en\_US.ts) to see the format. - - -### Data Mapping - -#### data - -**required** *array object* - -Configure the data source. The data source is a collection of objects. For example:`[{ time: '1991',value: 20 }, { time: '1992',value: 20 }]`。 - -#### xField - -**required** *string* - -The name of the data field corresponding to the graph in the x direction, usually the field corresponding to the horizontal coordinate axis. For example, to see how many people are in different classes, the class field is the corresponding xField. - -#### yField - -**required** *string* - -The name of the data field corresponding to the graph in the y direction, usually the field corresponding to the vertical coordinate axis. For example, to see the number of students in different classes, the number field is the corresponding yField. - - -#### seriesField - -**optional** *string* - -Split fields, same as GroupField and ColorField under the grouping bar chart, same as StackField and ColorField under the stacking bar chart. - -#### groupField - -**optional** *string* - -Split field used to stack grouping columns. Split field has a higher priority than SeriesField. IsGroup: true will group by GroupField. - -#### isGroup - -**optional** *boolean* - -Whether to group bar charts. - -#### isStack - -**optional** *boolean* - -Whether to stack columns. - -#### isRange - -**optional** *boolean* - -Whether to range columns. - -#### isPercent - -**optional** *boolean* - -Whether to percent columns, if isPercent is true, isStack also needs to be true. - -#### meta - -**optional** *object* - -Configure the meta of each data field of the chart in global, to define the type and presentation of data. Configuration of the meta will affect the text content of all components. - -| Properties | Type | Description | -| ---------- | ---------- | -------------------------------------------------------- | -| alias | *string* | alias of the data field | -| formatter | *function* | callback function to format all values of the data field | -| values | *string\[]* | enumerate all the values of the data field | -| range | *number\[]* | mapping range of the data field, default: \[0,1] | - -See also the [Meta Options](/en/docs/api/options/meta) to learn more about configuration of `meta`. - - -### Geometry Style - -#### color - -**optional** *string | string\[] | Function* - -Configure the color. If there is no colorField configured, set one single color. Otherwise you can set a series of colors, or you can use callback function. - -Default: The color board of the theme. - -```ts -// set one single color -{ - color: '#a8ddb5' -} -// set a series of colors -{ - colorField: 'type', // or seriesField in some cases - color: ['#d62728', '#2ca02c', '#000000'], -} -// Function -{ - colorField: 'type', // or seriesField in some cases - color: ({ type }) => { - if(type === 'male'){ - return 'red'; - } - return 'yellow'; - } -} -``` - - -#### pattern ✨ - -**optional** *object | Function* - -Set the pattern style of the geometries. - -* PatternOption: consists of `type` and `cfg`, `type` includes: `dot`, `line`, `square`, `cfg` is optional. -* Features: pattern will override the `style` of geometry (such as pieStyle, columnStyle, etc.). -* Usage: You can set a uniform pattern style for all geometries of the chart by using configuration (`PatternOption`) or `CanvasPattern` object, and a `callback` is provided to set the pattern for each geometry. - In addition, we provide `getCanvasPattern` function, pass in the PatternOption to create the pattern to modify the Legend styles[Demo](/zh/examples/plugin/pattern#legend-marker-with-pattern) - -The type of pattern is defined as follows: - -```plain -PatternAttr = - | CanvasPattern - | PatternOption - | ((datum: Datum, color: string /** inherit color */) => PatternOption | CanvasPattern); -``` - -Usage: - -```ts -// set a uniform pattern style for all geometries -{ - pattern: { - type: 'dot', - cfg: { - size: 4, - padding: 4, - rotation: 0, - fill: '#FFF', - isStagger: true, - }, - }, -} -// set the pattern for each geometry -{ - pattern: ({type}, color) =>{ - if(type ==='分类一') { - return { - type: 'dot', - cfg: { - backgroundColor: color, // inherit color - } - } - } else if(type ==='分类二') { - return { - type: 'square', - cfg: { - backgroundColor: 'pink', // custom color - } - } - } else if(type ==='分类三') { - return { - type: 'line' - } - } - }, -} -``` - - - -Common configuration(cfg) for all types of pattern: - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| backgroundColor | *string* | Background color of the pattern | -| fill | *string* | Fill color of the symbol in pattern | -| fillOpacity | *number* | Transparency of the symbol in pattern | -| stroke | *string* | Stroke color of the symbol in pattern | -| strokeOpacity | *number* | Stroke opacity of the symbol in pattern | -| lineWidth | *number* | The thickness of the symbol's stroke | -| opacity | *number* | Overall transparency of the pattern | -| rotation | *number* | Rotation angle of the pattern | - -Additional configuration for dotPattern - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| size | *number* | The size of the dot, default: `6` | -| padding | *number* | The distance between dots, default: `2` | -| isStagger | *boolean* | Staggered dots. default: `true` | - -Additional configuration for linePattern - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| spacing | *number* | The distance between the two lines, default: `5` | - -Additional configuration for squarePattern - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| size | *number* | The size of the square, default: `6` | -| padding | *number* | The distance between squares, default:`1` | -| isStagger | *boolean* | Staggered squares. default:`true` | - - -#### intervalPadding - -**optional**, *number* - -Specify the padding of interval, pixel value. Used in GroupColumn plot. - - - -#### dodgePadding - -**optional**, *number* - -Specify the padding of interval on the same group, pixel value. Used in GroupColumn plot. - - - -#### minColumnWidth - -**optional**, *number* - -Specify the min width of column, pixel value. Auto adapt by default. - -#### maxColumnWidth - -**optional**, *number* - -Specify the max width of column, pixel value. Auto adapt by default. - -#### columnStyle - -**optional** *StyleAttr | Function* - -Column graphic Style. - - - -| Properties | Type | Description | -| ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fill | *string* | Fill color of the shape | -| r | *number* | used in `point`, means the radius of geometry | -| fillOpacity | *number* | Fill opacity of the shape | -| stroke | *string* | Stroke color of the shape | -| lineWidth | *number* | The width of the stroke of the shape | -| lineDash | \[number,number] | Configure dashed line stroke. The first parameter is the length of each segment, and the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| lineOpacity | *number* | Opacity of the stroke | -| opacity | *number* | Opacity of the shape | -| shadowColor | *string* | Shadow color of the shape | -| strokeOpacity | *number* | Stroke opacity of the shape | -| shadowBlur | *number* | Gaussian blur coefficient of the shadow | -| shadowOffsetX | *number* | Configure horizontal distance between shadow and shape | -| shadowOffsetY | *number* | Configure vertical distance between shadow and shape | -| cursor | *string* | Mouse style, same as the mouse style of CSS, default value : 'default' | - -Example: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -More documents about `ShapeStyle`, see [Graphic Style](/en/docs/api/graphic-style). - - -#### columnBackground.style - -**optional** *StyleAttr* - -Background style of column graphic - -Example: - -```ts -{ - columnBackground: { - style: { - fill: '#000', - fillOpacity: 0.25, - } - } -} -``` - - -#### columnWidthRatio - -**optional** *number* - -Width ratio of column \[0-1]. - -#### marginRatio - -**optional** *number* - -The spacing between columns in a grouping \[0-1] applies only to grouping columns. - -#### state - -**optional** *object* - -Set the style of the corresponding state. Now you can config four state styles: `'default' | 'active' | 'inactive' | 'selected'`. - -Example: - -```ts -{ - interactions: [{ type: 'element-active' }], - state: { - // 设置 active 激活状态的样式 - active: { - animate: { duration: 100, easing: 'easeLinear' }, - style: { - lineWidth: 2, - stroke: '#000', - }, - }, - } -}; -``` - - -### Plot Components - -#### axis - -xAxis、yAxis 配置相同。**注意**:由于 DualAxes(双轴图) 和 BidirectionalBar(对称条形图) 是双 y 轴, yAxis 类型是以 yField 中的字段作为 `key` 值的`object`。 - -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -适用于直角坐标系,设置坐标轴的位置。 - -##### title - -**optional** *object* - -标题的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------ | --------------------------------------------------------- | -| text | *string* | 坐标轴标题 | -| position | *string* | 轴标题的位置,默认:'center'。可选项: start, center, end | -| offset | *number* | 标题距离坐标轴的距离 | -| spacing | *number* | 标题距离坐标轴文本的距离 | -| style | *shapeStyle* | 标题文本配置项 | -| autoRotate | *boolean* | 是否自动旋转 | - -***shapeStyle*** - - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | *string* | 图形的填充色 | -| r | *number* | 用于 `point`, 代表图形的半径大小 | -| fillOpacity | *number* | 图形的填充透明度 | -| stroke | *string* | 图形的描边 | -| lineWidth | *number* | 图形描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 图形的整体透明度 | -| shadowColor | *string* | 图形阴影颜色 | -| strokeOpacity | *number* | 图形边框透明度 | -| shadowBlur | *number* | 图形阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -关于 ShapeStyle 更加详细的文档参考 [绘图属性](/zh/docs/api/graphic-style)。 - - -***label*** - -**optional** *object* - -文本标签的配置项,null 表示不展示。 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - **optional** *AxisLabelCfg | null* - -文本标签的配置项,null 表示不展示。*AxisLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------------------------------------- | ------- | ------------------------ | -| offset | *number* | - | label 的偏移量 | -| rotate | *number* | - | 文本旋转角度 | -| autoRotate | *boolean |avoidCallback* | `true` | 是否自动旋转 | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | 是否自动隐藏 | -| autoEllipsis | *boolean |avoidCallback |string* | `false` | 是否自动省略 | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | 格式化函数 | -| style | *[ShapeAttrs](/zh/docs/api/graphic-style)* | - | 坐标轴刻度线的样式配置项 | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -标记坐标轴 label 的方向,左侧为 1,右侧为 -1(仅适用于垂直方向的坐标轴) - -##### verticalLimitLength - -**optional** *number* - -配置坐标轴垂直方向的最大限制长度,对文本自适应有很大影响。 - -##### grid - -**optional** *object* - -坐标轴网格线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------------ | -------------------------------------------------------- | -| line | *lineStyle* | 线的样式, | -| alternateColor | *string|string\[]* | 两个栅格线间的填充色 | -| closed | *boolean* | 对于 circle 是否关闭 grid | -| alignTick | *boolean* | 是否同刻度线对齐,如果值为 false,则会显示在两个刻度中间 | - -网格线条样式的配置与 [line](#line) 是一致的。 - -##### line - -**optional** *object* - -坐标轴线的配置项,null 表示不展示。 - - - -> **注意:** 线条样式的完整配置是 `{ style: { stroke: '#ddd', ... } }`, 如果配置线条样式不生效的时候,请检查一下。 - -| 属性名 | 类型 | 介绍 | -| ------------- | ----------------- | ------------------------------------------------------------------------------------------------------ | -| stroke | *string* | 线的颜色 | -| lineWidth | *number* | 线宽 | -| lineDash | *\[number,number]* | 虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| opacity | *number* | 透明度 | -| shadowColor | *string* | 阴影颜色 | -| shadowBlur | *number* | 高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例(设置 x 轴的 grid 网格线条样式): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -坐标轴刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴刻度线的样式。 | -| alignTick | *boolean* | 坐标轴刻度线是否同 tick 对齐 | -| length | *number* | 坐标轴刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -坐标轴子刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴子刻度线的样式。 | -| count | *number* | 子刻度个数 | -| length | *number* | 坐标轴子刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -是否美化。 - -##### min - -**optional** *number* *default:* `0` - -坐标轴最小值。 - -##### max - -**optional** *number* - -坐标轴最大值。 - -##### minLimit - -**optional** *number* - -最小值限定。 - -##### maxLimit - -**optional** *number* - -最大值限定。 - -##### tickCount - -**optional** *number* - -期望的坐标轴刻度数量,非最终结果。 - -##### tickInterval - -**optional** *number* - -坐标轴刻度间隔。 - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -指定 tick 计算方法,或自定义计算 tick 的方法,内置 tick 计算方法包括 `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -动画开关,默认开启。 - -##### animateOption - -**optional** *object* - -动画参数配置。 - -```ts -interface ComponentAnimateCfg { - /** 动画执行时间 */ - readonly duration?: number; - /** 动画缓动函数 */ - readonly easing?: string; - /** 动画延迟时间 */ - readonly delay?: number; -} -// 配置参考 -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` - - -#### legend - -配置图例有两种方式 -第一种,传入 `boolean` 设置是否显示图例。 - -```ts -legend: false; // 关闭图例 -``` - -第二种,传入 *LegendCfg* 对图例进行整体配置。 - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - -##### layout - -**optional** *horizontal | vertical* - -图例布局方式。提供横向布局和纵向布局。 - -##### title - -**optional** *G2LegendTitleCfg* - -图例标题配置,默认不展示。*G2LegendTitleCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------- | ------------------------------------------------------------ | -| title | *string* | 文本显示内容 | -| spacing | *number* | 标题同图例项的间距 | -| style | *object* | 文本样式配置项,参考  [绘图属性](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -图例位置,可选项:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - -尝试一下: - - - -##### offsetX - -**optional** *number* - -图例 x 方向的偏移。 - -##### offsetY - -**optional** *number* - -图例 y 方向的偏移。 - -##### background - -**optional** *LegendBackgroundCfg* - -背景框配置项。*LegendBackgroundCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| padding | *number | number\[]* | 背景的留白 | -| style | *ShapeAttr* | 背景样式配置项, 参考[绘图属性](/zh/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -适用于 分类图例,当图例项过多时是否进行分页。(⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -适用于 分类图例,当图例项过多分页时,可以设置最大行数(仅适用于 `layout: 'horizontal'`),默认为:1。 - -##### pageNavigator - -**optional** *object* - -适用于 分类图例,图例分页导航器的主题样式设置。*LegendPageNavigatorCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------- | ------ | ----------------------- | -| marker.style | *PageNavigatorMarkerStyle* | - | 分页器指示箭头 样式配置 | -| text.style | *PageNavigatorTextStyle* | - | 分页器页面信息 样式配置 | - -***PageNavigatorMarkerStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------------- | -------- | ------ | ---------------------------------------------------------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -***PageNavigatorTextStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| -------- | -------- | ------ | ---------------------------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -示例: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -适用于 分类图例,图例的高度, 默认为 null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -适用于 分类图例,图例项的宽度, 默认为 null,自动计算。 - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -适用于 分类图例,控制图例项水平方向的间距。 - -##### label - -**optional** *ContinueLegendLabelCfg* - -适用于 连续图例,文本的配置项。*ContinueLegendLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | -------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| align | *string* | - | 文本同滑轨的对齐方式
- rail : 同滑轨对齐,在滑轨的两端
- top, bottom: 图例水平布局时有效
- left, right: 图例垂直布局时有效 | -| style | *object* | - | 文本样式配置项,详见  [绘图属性](/zh/docs/api/graphic-style) | -| spacing | *number* | - | 文本同滑轨的距离 | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### marker - -**optional** *MarkerCfg | MarkerCfgCallback* - -适用于 分类图例,图例项的 marker 图标的配置。 - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -```sign -type LegendItem = { name: string; value: string; } & MarkerCfg; - -type MarkerCfgCallback = (name: string, index: number, item: LegendItem) => MarkerCfg; -``` - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -适用于 分类图例,图例项容器最大宽度设置。当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxWidth = Math.min(maxWidth, maxWidthRatio * viewBBox.width); -``` - -##### maxHeight - -**optional** *number* - -适用于 分类图例,图例项容器最大高度设置。当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxHeight = Math.min(maxHeight, maxHeightRatio * viewBBox.height); -``` - -##### reversed - -**optional** *boolean* - -适用于 分类图例,是否将图例项逆序展示。 - -##### custom - -**optional** *boolean* - -是否为自定义图例,当该属性为 true 时,需要声明 items 属性。 - -##### items - -**optional** *LegendItem\[]* -适用于 分类图例,用户自己配置图例项的内容。*LegendItem* 配置如下: - -| 参数名 | 类型 | 是否必选 | 描述 | -| ------ | ----------- | -------- | ------------------------ | -| id | *string* | | 唯一值,用于动画或者查找 | -| name | *string* | required | 名称 | -| value | any | required | 值 | -| marker | *MarkerCfg* | | 图形标记 | - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -##### min - -**optional** *number* - -适用于 连续图例,选择范围的最小值。 - -##### max - -**optional** *number* - -适用于 连续图例,选择范围的最大值。 - -##### value - -**optional** *number\[]* - -适用于 连续图例,当前选中的范围。 - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` - -适用于 连续图例,滑块是否可以滑动。 - -##### rail - -**optional** *ContinueLegendRailCfg* - -适用于 连续图例,图例滑轨(背景)的样式配置项。*ContinueLegendRailCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------------- | -------- | -------------------------------------------------------------------------------- | -| type | *string* | rail 的类型,color, size,默认:'color' | -| size | *number* | 滑轨的宽度 | -| defaultLength | *number* | 滑轨的默认长度,默认:100。当限制了 maxWidth,maxHeight 时,不会使用这个属性会自动计算长度 | -| style | *object* | 滑轨的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### track - -**optional** *ContinueLegendTrackCfg* -适用于 连续图例,选择范围的色块样式配置项。*ContinueLegendTrackCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| style | *object* | - | 选定范围的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -适用于 连续图例,滑块的配置项。(暂不支持自定义) - -*ContinueLegendHandlerCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| size | *number* | - | 滑块的大小,默认:10 | -| style | *object* | - | 滑块的样式设置,参考 [绘图属性](/zh/docs/api/graphic-style) | - - -#### label - -> 小提琴图暂时不支持 label 展示,可以使用 annnotation 进行替代 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### tooltip - -##### fields - -**可选** *string\[]* - -指定 tooltip 中显示的字段,默认不同图表有不同的默认字段列表。配合 `formatter` 配置一起使用,效果更佳。 - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**可选** *Function* - -格式化 tooltip item 内容(暂时不支持多 tooltipItems 的格式化,可以使用 `customContent` 处理) - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**可选** *boolean* *default:* `true` - -设置 tooltip 内容框是否跟随鼠标移动。 - -##### enterable - -**可选** *boolean* *default:* `false` - -tooltip 是否允许鼠标滑入。 - -##### showTitle - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 标题。 - -##### title - -**可选** *string* - -设置 tooltip 的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,则直接展示 title 值。 - -##### position - -**可选** *`top` | `bottom` | `left` | `right`* - -设置 tooltip 的固定展示位置,相对于数据点。 - -##### shared - -**可选** *boolean* - -true 表示合并当前点对应的所有数据并展示,false 表示只展示离当前点最逼近的数据内容。 - -##### showCrosshairs - -**可选** *boolean* *default:* `false` - -是否展示 crosshairs。 - -##### crosshairs - -**可选** *object* - -配置 tooltip 的 crosshairs,当且仅当 `showCrosshairs` 为 true 时生效。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | --------------------- | ------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | crosshairs 的类型: `x` 表示 x 轴上的辅助线,`y` 表示 y 轴上的辅助项 | -| line | *lineStyle* | 线的配置项,详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | 辅助线文本配置,支持回调 | -| textBackground | *TextBackgroundStyle* | 辅助线文本背景配置 | -| follow | *boolean* | 辅助线是否跟随鼠标移动,默认为 false,即定位到数据点 | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | -------------------- | ------------------ | -| padding | *number | number\[]* | 文本背景周围的留白 | -| style | *shapeStyle* | 线的配置项, 详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style) | - -##### showMarkers - -**可选** *boolean* *default:* `true` - -是否渲染 tooltipMarkers。 - -##### marker - -**可选** *ShapeAttrs* - -tooltipMarker 的样式配置。 - -样式配置类型,详细可见: [ShapeAttrs](/zh/docs/api/graphic-style) - -##### showContent - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 内容框。 - -##### container - -**可选** *string|HTMLElement* - -自定义 tooltip 的容器。 - -##### containerTpl - -**可选** *string* - -用于指定图例容器的模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### itemTpl - -**可选** *string* - -每项记录的默认模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### domStyles - -**可选** *TooltipDomStyles* - -传入各个 dom 的样式。 - -dom-styles - -```ts -/** Tooltip 内容框的 css 样式定义 */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**可选** *number* - -tooltip 偏移量。 - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems - -**可选** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - - - -##### customContent - -**可选** *Function* - -支持自定义模板。[在线示例](/zh/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### Slider - -> Only line plot, area plot and dual-axes plot are supported. - -| Properties | Type | Description | -| --------------- | -------------- | --------------------------------------- | -| start | *number* | Default starting position | -| end | *number* | Default ending position | -| height | *number* | Slider height | -| trendCfg | *TrendCfg* | Configuration of background trends | -| backgroundStyle | *object* | Background style, reference[Graphic Style](/en/docs/api/graphic-style) | -| foregroundStyle | *object* | Foreground style, reference[Graphic Style](/en/docs/api/graphic-style) | -| handlerStyle | *HandlerStyle* | Handler configuration | -| textStyle | *object* | Text style, reference[Graphic Style](/en/docs/api/graphic-style) | -| minLimit | *number* | Lower limit of sliding position allowed | -| maxLimit | *number* | Upper limit of sliding position allowed | -| formatter | *Function* | Slider text formatting function | - -Types of ***TrendCfg*** are as follow: - -| Properties | Type | Description | -| --------------- | ---------- | ------------------------------ | -| data | *number\[]* | Trend data | -| smooth | *boolean* | Whether smooth | -| isArea | *boolean* | Whether area | -| backgroundStyle | *object* | Background style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | -| lineStyle | *object* | Line style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | -| areaStyle | *object* | Area style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | - -Types of ***HandlerStyle*** are as follow: - -| Properties | Type | Description | -| ---------- | -------- | ------------------------ | -| width | *number* | Width of slider handler | -| height | *number* | Height of slider handler | -| fill | *string* | Fill color of handler | -| highLightFill | *string* | Highlight fill color of handler (when hovering) | -| stroke | *string* | Stroke color of handler | -| opacity | *number* | Fill opacity of handler | -| radius | *number* | Radius of handler rect | -| cursor | *string* | Style of cursor (when hovering handler) | - - -#### Scrollbar - -Go to [ShapeAttrs](/en/docs/api/graphic-style) to learn more about ***ShapeAttrs***. - -| Properties | Type | Description | -| --------------- | ---------------- | ------------------ | -| type | *'horizontal' | 'vertical'* | Type of scrollbar | -| width | *number* | Width,works when `type = 'vertical'` | -| height | *number* | height,works when `type = 'horizontal'` | -| padding | *number | number\[]* | Padding | -| categorySize | *number* | For the horizontal scrollbar, it is the width of each category field on the x-axis; for the vertical scroll bar, it is the height of each category field on the x-axis | -| animate | *boolean* | Whether to animate when scrolling, default follows the animation configuration in view | - -Types of ***ScrollbarStyle*** are as follow: - -| Properties | Type | Description | -| --------------- | ---------------- | ------------------ | -| trackColor | *string* | Color of scrollbar track | -| thumbColor | *string* | Color of scrollbar thumb | -| thumbHighlightColor | *string* | Highlight color of scrollbar thumb, 对应主题的 hover.style.thumbColor | -| lineCap | *string* | Determines the shape used to draw the end points of scrollbar,is same as property of Canvas lineCap。 | - - -#### Conversion Tag - -Applicable to base bar charts and base bar charts, the Conversion Rate component allows the user to focus on the rate of change in the data. - -**optional** *object* | *false* - -| Properties | Type | Default | Description | -| ---------- | ------------------- | ------- | -------------------------------------------------------- | ----------------------------------------------- | -| size | *number* | - | Conversion rate Component dimensions | -| spacing | *number* | - | Component and column spacing | -| offset | *number* | - | Component and axis spacing | -| arrow | *ArrowCfg | false* | - | Arrow shape configuration, false does not display arrows | -| text | *TextCfg | false* | No | - | Text configuration, false does not display text | - -ArrowCfg configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ----------------- | -| headSize | *number* | - | Size of the arrow | -| style | *object* | - | Arrow style | - -TextCfg configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------------------------------------- | ------- | ---------------------------------- | -| headSize | *number* | - | Size of the arrow | -| style | *object* | - | Arrow style | -| formatter | *(prev:number, next:number) => string* | - | Custom conversion rate calculation | - -Please refer to the style configuration [ShapeAttrs](/en/docs/api/graphic-style) - - -#### Connected Area - -Applicable to stacked bar charts and stacked bar charts, the link area component provides visual assistant identification by drawing the link area of the same field, which is convenient for data comparison. (Attention:could not use with **columnBackground** ) - -**optional** *object* | *false* - -| Properties | Type | Required | Default | Description | -| ---------- | ---------------- | ------------ | ---------------------- | -| trigger | 'hover'、'click' | No |'hover' | Trigger method | -| style | *ConnectedAreaStyleCfg* | | No | | StyleCfg of connectedArea | - -Types of ***ConnectedAreaStyleCfg*** are as follows: - -```sign -type ConnectedAreaStyleCfg = ShapeAttrs | ((oldStyle: ShapeAttrs, element: Element) => ShapeAttrs); -``` - -**Examples:** - - - - -### Plot Event - -On Plot, binding events are removed by `ON` and `OFF` method. - -```ts -// Bind event -plot.on('eventName', callback); -// Bind event, only trigger one time -plot.once('eventName', callback); -// Remove event -plot.off('eventName', callback); -``` - -Composition: `${componentName}:${eventName}` - -Element refers to the type of element to bind to, for example `element`、`legend-item`、`axis-label`、`mask`、`plot`、`legend-item-name`、`reset-button` etc. - -Events correspond to DOM common events, for example `click`、`mousedown`、`mouseup`、`dblclick`、`mouseenter`、`mouseout`、`mouseover`、`mousemove`、`mouseleave`、`contextmenu` etc. And support mobile events: `touchstart`、`touchmove`、`touchend` - -```ts -// Plot adds click events to the entire chart area -plot.on('plot:click', (...args) => { - console.log(...args); -}); - -// Element to add a click event, element represents the graphic elements, graphical elements, please see: https://g2.antv.vision/en/docs/manual/concepts/element -plot.on('element:click', (...args) => { - console.log(...args); -}); - -// Legend adds click events -plot.on('legend-item:click', (...args) => { - console.log(...args); -}); - -// Legend name adds click event -plot.on('legend-item-name:click', (...args) => { - console.log(...args); -}); - -// 给 tooltip 添加点击事件 -plot.on('tooltip:show', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:hide', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:change', (...args) => { - console.log(...args); -}); - -// Label adds click events -plot.on('label:click', (...args) => { - console.log(...args); -}); - -// Mask adds click events -plot.on('mask:click', (...args) => { - console.log(...args); -}); - -// Axis-label adds click events -plot.on('axis-label:click', (...args) => { - console.log(...args); -}); - -// Add click events to the annotation -plot.on('annotation:click', (...args) => { - console.log(...args); -}); -``` - - -### Plot Method - -#### render() - -Render the chart. - -#### update() - -**optional** - -Update chart configuration and overwrite it without comparing difference. - -Example: - -```ts -plot.update({ - ...currentConfig, - legend: false, -}); -``` - - - - -### Plot Theme - -Recommend to use 💄 [ThemeSet](https://theme-set.antv.vision) to customize your theme configurations online. - -#### Built-in Theme - -Built-in defaults: 'default' and 'dark' - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### Theme attributes - -In addition to using the built-in 'default' and 'dark' themes, you can also modify some of the theme content by setting the theme properties. - -The following table lists the specific properties on the configuration items that make up the topic: - -| **Properties** | **Type** | **Description** | -| --------------------- | ---------- | ------------------------------------------------------------------------------------------------------------- | -| defaultColor | *string* | Theme color | -| padding | *number* | number\[] | -| fontFamily | *string* | Chart font | -| colors10 | *string\[]* | Category color palette, used when the number of categories is less than 10 | -| colors20 | *string\[]* | Category color palette, used when the number of categories is greater than 10 | -| columnWidthRatio | *number* | General histogram width ratio, 0-1 range of values | -| maxColumnWidth | *number* | Maximum width of histogram, pixel value | -| minColumnWidth | *number* | Minimum width of histogram, pixel value | -| roseWidthRatio | *number* | Rose width ratio, 0-1 range of value | -| multiplePieWidthRatio | *number* | Multilayer pie and loop ratio, 0-1 range values | -| geometries | *object* | Configure the style of each shape for each Geometry, including the default style and the style for each state | -| components | *object* | Configure theme samples for axes, legends, tooltips, and annotations | -| labels | *object* | Configure the theme style of the label under Geometry | -| innerLabels | *object* | Configure Geometry to display the Labels theme style inside the graph | -| pieLabels | *object* | Configure the theme style of pie chart labels | - -usage: - -```ts -{ - theme: { - colors10: [ - '#FF6B3B', - '#626681', - '#FFC100', - '#9FB40F', - '#76523B', - '#DAD5B5', - '#0E8E89', - '#E19348', - '#F383A2', - '#247FEA', - ]; - } -} -``` - -#### Theme attributes (StyleSheet) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -usage: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir'; - } - } -} -``` - -支持的样式表属性: - -| **Properties** | **Type** | **Description** | -| ----------------------- | -------- | ------------------------------------------------- | -| `backgroundColor` | *string* | Background color | -| `brandColor` | *string* | Brand color,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | Qualitative palette,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | Qualitative palette,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | Semantic red | -| `paletteSemanticGreen` | *string* | Semantic green | -| `paletteSemanticYellow` | *string* | Semantic yellow | -| `fontFamily` | *string* | fontFamily | - -#### Update theme - -usage: - -```ts -// example 1: -plot.update({ theme: 'dark' }); - -// example 2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }); -``` - -#### Custom theme - -In addition, G2 provides a custom topic mechanism to define a new topic structure, allowing users to switch and define chart topics. Go [G2 | Custom theme](https://g2.antv.vision/en/docs/api/advanced/register-theme) for more details. - - - -🌰 Customize theme [DEMO](/zh/examples/general/theme#register-theme) - - -### Plot Interactions - -Built-in interactions of scatter are as follows: - -| Interaction | Description | Configuration | -| ----------- | ---------------------------------------- | ------------------------------ | -| brush | 用于刷选交互,配置该交互后,可进行刷选。 | `brush: { enabled: true }` | - -#### brush - -**optional** *BrushCfg* - -Configuration of brush interaction. - -**Properties** - -Types of *BrushCfg* are as follows: - -| Properties | Type | Description | -| ---------- | ----------- | ------------------------------------------------------------------------------------------------ | -| enabled | *boolean* | 是否开启 brush 刷选交互,默认为:'false' | -| type | *string* | brush 类型,可选项:'rect' | 'x-rect' | 'y-rect' | 'cirlce' | 'path' (polygon). 默认: 'rect' | -| action | *string* | brush action, options: 'filter' | 'highlight'. Default: 'filter' | -| mask | *MaskCfg* | Configuration of mask. | -| button | *ButtonCfg* | Configuration of rRset Button,works when action is equal to 'filter' | - -Types of *MaskCfg* are as follows: - -| Properties | Type | Description | -| ---------- | ------------ | ----------- | -| style | *ShapeAttrs* | mask 样式 | - -Types of *ButtonCfg* are as follows: - -```ts -export type ButtonCfg = { - /** - * padding of button - */ - padding?: number | number[]; - /** - * text of button - */ - text?: string; - /** - * custom style of text - */ - textStyle?: { - default?: ShapeAttrs; - }; - /** - * custom style of button - */ - buttonStyle?: { - default?: ShapeAttrs; - active?: ShapeAttrs; - }; -}; -``` - -**Events** - -1. List of vents of `brush-filter` interaction, - -| Event Name | Description | -| -------------------------------------- | -------------------------------------------------------- | -| `G2.BRUSH_FILTER_EVENTS.BEFORE_FILTER` | Hook before brush event to trigger `filter` append | -| `G2.BRUSH_FILTER_EVENTS.AFTER_FILTER` | Hook after brush event to trigger `filter` append | -| `G2.BRUSH_FILTER_EVENTS.BEFORE_RESET` | Hook before brush event to trigger filter `reset` append | -| `G2.BRUSH_FILTER_EVENTS.AFTER_RESET` | Hook after brush event to trigger filter `reset` append | - -example: - - - -2. List of vents of `brush-highlight` interaction, - -| Event Name | Description | -| ---------------------------------------------------- | ------------------------------------------------------------------- | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.BEFORE_HIGHLIGHT` | Hook before event to trigger element-range `highlight` append | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.AFTER_HIGHLIGHT` | Hook after event to trigger element-range `highlight` append | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.BEFORE_CLEAR` | Hook before event to trigger element-range-highlight `reset` append | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.AFTER_CLEAR` | Hook after event to trigger element-range-highlight `reset` append | - -example: - - - - -#### Add interactions - -Usage: - -```ts -// Enable the Active interaction when the mouse moves over a chart element (bar in a bar, dot in a dot, etc.) -interactions: [{ type: 'element-active' }]; - -// Enable multiple interactions -interactions: [{ type: 'element-active' }, { type: 'brush' }]; -``` - -#### Config interactions - -通过 `cfg` 可以对交互行为进行配置,详细参考 [G2 | 修改交互的默认交互](https://g2.antv.vision/en/docs/api/general/interaction/#修改交互的默认交互) - -```ts -// 修改 tooltip 触发事件 -interactions: [ - { - type: 'tooltip', - cfg: { start: [{ trigger: 'element:click', action: 'tooltip:show' }] } - } -] -``` - -#### Remove the interaction - -```ts -// 方式1: 关闭 tooltip 交互 -interactions: [{ type: 'tooltip', enable: false }] - -// 方式2: -plot.chart.removeInteraction('interaction-type'); -``` - -Example: - -```ts -// Removes legend filtering interaction -plot.chart.removeInteraction('legend-filter'); -``` diff --git a/site/docs/api/plots/column.zh.md b/site/docs/api/plots/column.zh.md deleted file mode 100644 index 1bdf48e10..000000000 --- a/site/docs/api/plots/column.zh.md +++ /dev/null @@ -1,2751 +0,0 @@ ---- -title: 柱状图 -order: 2 ---- - -柱状图用于描述分类数据之间的对比,如果我们把时间周期,如周、月、年,也理解为一种分类数据 (time category),那么柱状图也可以用于描述时间周期之间的数值比较。 - -### 图表容器 - -#### width - -**optional** *number* *default:* `400` - -设置图表宽度。 - -#### height - -**optional** *number* *default:* `400` - -设置图表高度。 - -#### autoFit - -**optional** *boolean* *default:* `true` - -图表是否自适应容器宽高。当 `autoFit` 设置为 true 时,`width` 和 `height` 的设置将失效。 - -#### padding - -**optional** *number\[] | number | 'auto'* - -画布的 `padding` 值,代表图表在上右下左的间距,可以为单个数字 `16`,或者数组 `[16, 8, 16, 8]` 代表四个方向,或者开启 `auto`,由底层自动计算间距。 - -#### appendPadding - -**optional** *number\[] | number* - -额外增加的 `appendPadding` 值,在 `padding` 的基础上,设置额外的 padding 数值,可以是单个数字 `16`,或者数组 `[16, 8, 16, 8]` 代表四个方向。 - -#### renderer - -**optional** *string* *default:* `canvas` - -设置图表渲染方式为 `canvas` 或 `svg`。 - -#### pixelRatio - -**optional** *number* *default:* `window.devicePixelRatio` - -设置图表渲染的像素比,和底层的 devicePixelRatio 含义一致,一般不用设置,除非在页面有整体 scale 的情况下,可以自定义。 - -#### limitInPlot - -**optional** *boolean* - -是否对超出坐标系范围的 Geometry 进行剪切。 - - - -#### locale - -**optional** *string* - -指定具体语言,目前内置 'zh-CN' and 'en-US' 两个语言,你也可以使用 `G2Plot.registerLocale` 方法注册新的语言。语言包格式参考:[src/locales/en\_US.ts](https://github.com/antvis/G2Plot/blob/master/src/locales/en\_US.ts) - - -### 数据映射 - -#### data - -**required** *array object* - -设置图表数据源。数据源为对象集合,例如:`[{ time: '1991',value: 20 }, { time: '1992',value: 20 }]`。 - -#### xField - -**required** *string* - -图形在 x 方向对应的数据字段名,一般是横向的坐标轴对应的字段。比如:要看不同班级的人数情况,那么班级字段就是对应的 xField。 - -#### yField - -**required** *string* - -图形在 y 方向对应的数据字段名,一般是纵向的坐标轴对应的字段。比如:要看不同班级的人数情况,那么人数字段就是对应的 yField。 - - -#### seriesField - -**optional** *string* - -拆分字段,在分组柱状图下同 groupField、colorField,在堆积柱状图下同 stackField、colorField。 - -#### groupField - -**optional** *string* - -拆分字段,用于堆叠分组柱状图,拆分优先级高于 seriesField,isGroup: true 时会根据 groupField 进行分组。 - -#### isGroup - -**optional** *boolean* - -是否分组柱状图。 - -#### isStack - -**optional** *boolean* - -是否堆积柱状图。 - -#### isRange - -**optional** *boolean* - -是否区间柱状图。 - -#### isPercent - -**optional** *boolean* - -是否堆积百分比柱状图,isPercent 为 true 时,isStack 也需要为 true。 - -#### meta - -**optional** *object* - -全局化配置图表数据元信息,以字段为单位进行配置,来定义数据的类型和展示方式。在 meta 上的配置将同时影响所有组件的文本信息。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------- | ------------------------------------------- | -| alias | *string* | 字段的别名 | -| formatter | *function* | callback 方法,对该字段所有值进行格式化处理 | -| values | *string\[]* | 枚举该字段下所有值 | -| range | *number\[]* | 字段的数据映射区间,默认为\[0,1] | - -关于 `meta` 的更多配置项,请查看 [Meta Options](/zh/docs/api/options/meta) - - -### 图形样式 - -#### color - -**optional** *string | string\[] | Function* - -指定点的颜色。如没有配置 colorField,指定一个单值即可。对 colorFiled 进行了配置的情况下,即可以指定一系列色值,也可以通过回调函数的方法根据对应数值进行设置。 - -默认配置:采用 theme 中的色板。 - -```ts -// 设置单一颜色 -{ - color: '#a8ddb5' -} -// 设置多色 -{ - colorField: 'type', // 部分图表使用 seriesField - color: ['#d62728', '#2ca02c', '#000000'], -} -// Function -{ - colorField: 'type', // 部分图表使用 seriesField - color: ({ type }) => { - if(type === 'male'){ - return 'red'; - } - return 'yellow'; - } -} -``` - - -#### pattern ✨ - -**optional** *object | Function* - -设置图形的贴图样式。 - -* 配置项:由`type`和`cfg`组成,`type`目前包括三种类型:`dot`、`line`、`square`,`cfg`为可选项。 -* 特点:`pattern`会覆盖当前图形设置的`style`样式(如 pieStyle、columnStyle 等)。 -* 使用方式:可通过 配置项(PatternOption) 或传入 CanvasPattern 对象 的方式给图表的所有图形设置统一的贴图样式,还提供了 callback 的方式给对应的图形设置样式。此外,提供了 getCanvasPattern 方法传入 PatternOption 配置来创建 pattern,以修改 Legend 样式[Demo](/zh/examples/plugin/pattern#legend-marker-with-pattern) - -pattern 的类型定义如下: - -```plain -PatternAttr = - | CanvasPattern - | PatternOption - | ((datum: Datum, color: string /** inherit color */) => PatternOption | CanvasPattern); -``` - -具体用法: - -```ts -// 给图形设置统一贴图 -{ - pattern: { - type: 'dot', - cfg: { - size: 4, - padding: 4, - rotation: 0, - fill: '#FFF', - isStagger: true, - }, - }, -} -// 给图形分别设置贴图 -{ - pattern: ({type}, color) =>{ - if(type ==='分类一') { - return { - type: 'dot', - cfg: { - backgroundColor: color, // 继承主题颜色 - } - } - } else if(type ==='分类二') { - return { - type: 'square', - cfg: { - backgroundColor: 'pink', // 自定义颜色 - } - } - } else if(type ==='分类三') { - return { - type: 'line' - } - } - }, -} -``` - - - -pattern 共有的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| backgroundColor | *string* | 贴图的背景色 | -| fill | *string* | 贴图元素的填充色 | -| fillOpacity | *number* | 贴图元素填充的透明度 | -| stroke | *string* | 贴图元素的描边色 | -| strokeOpacity | *number* | 贴图元素的描边透明度色 | -| lineWidth | *number* | 贴图元素的描边粗细 | -| opacity | *number* | 贴图整体的透明度 | -| rotation | *number* | 贴图整体的旋转角度 | - -dotPattern 额外的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| size | *number* | 圆点的大小,默认为`6` | -| padding | *number* | 圆点之间的间隔,默认为`2` | -| isStagger | *boolean* | 圆点之间是否交错,默认为`true` | - -linePattern 额外的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| spacing | *number* | 两条线之间的距离,默认为`5` | - -squarePattern 额外的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| size | *number* | 矩形的大小,默认为`6` | -| padding | *number* | 矩形之间的间隔,默认为`1` | -| isStagger | *boolean* | 矩形之间是否交错,默认为`true` | - - -#### intervalPadding - -**可选**, *number* - -功能描述: 分组柱状图的组间间距调整,像素级别。 - - - -#### dodgePadding - -**可选**, *number* - -功能描述: 分组柱状图的组内柱子间距调整,像素级别。 - - - -#### minColumnWidth - -**可选**, *number* - -功能描述: 柱子的最小宽度设置。 - -#### maxColumnWidth - -**可选**, *number* - -功能描述: 柱子的最大宽度设置。 - -#### columnStyle - -**可选** *StyleAttr | Function* - -功能描述: 样式配置 。 - - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | *string* | 图形的填充色 | -| r | *number* | 用于 `point`, 代表图形的半径大小 | -| fillOpacity | *number* | 图形的填充透明度 | -| stroke | *string* | 图形的描边 | -| lineWidth | *number* | 图形描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 图形的整体透明度 | -| shadowColor | *string* | 图形阴影颜色 | -| strokeOpacity | *number* | 图形边框透明度 | -| shadowBlur | *number* | 图形阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -关于 ShapeStyle 更加详细的文档参考 [绘图属性](/zh/docs/api/graphic-style)。 - - -#### columnBackground.style - -**可选** *StyleAttr* - -功能描述:柱子的背景样式配置 。 - -Example: - -```ts -{ - columnBackground: { - style: { - fill: '#000', - fillOpacity: 0.25, - } - } -} -``` - - -#### columnWidthRatio - -**optional** *number* - -柱状图宽度占比 \[0-1]。 - -#### marginRatio - -**optional** *number* - -分组中柱子之间的间距 \[0-1],仅对分组柱状图适用。 - -#### state - -**可选** *object* - -设置对应状态的样式,开放的状态有:`'default' | 'active' | 'inactive' | 'selected'` 四种。 - -示例: - -```ts -{ - interactions: [{ type: 'element-active' }], - state: { - // 设置 active 激活状态的样式 - active: { - animate: { duration: 100, easing: 'easeLinear' }, - style: { - lineWidth: 2, - stroke: '#000', - }, - }, - } -}; -``` - - -### 图表组件 - -#### axis - -xAxis、yAxis 配置相同。**注意**:由于 DualAxes(双轴图) 和 BidirectionalBar(对称条形图) 是双 y 轴, yAxis 类型是以 yField 中的字段作为 `key` 值的`object`。 - -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -适用于直角坐标系,设置坐标轴的位置。 - -##### title - -**optional** *object* - -标题的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------ | --------------------------------------------------------- | -| text | *string* | 坐标轴标题 | -| position | *string* | 轴标题的位置,默认:'center'。可选项: start, center, end | -| offset | *number* | 标题距离坐标轴的距离 | -| spacing | *number* | 标题距离坐标轴文本的距离 | -| style | *shapeStyle* | 标题文本配置项 | -| autoRotate | *boolean* | 是否自动旋转 | - -***shapeStyle*** - - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | *string* | 图形的填充色 | -| r | *number* | 用于 `point`, 代表图形的半径大小 | -| fillOpacity | *number* | 图形的填充透明度 | -| stroke | *string* | 图形的描边 | -| lineWidth | *number* | 图形描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 图形的整体透明度 | -| shadowColor | *string* | 图形阴影颜色 | -| strokeOpacity | *number* | 图形边框透明度 | -| shadowBlur | *number* | 图形阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -关于 ShapeStyle 更加详细的文档参考 [绘图属性](/zh/docs/api/graphic-style)。 - - -***label*** - -**optional** *object* - -文本标签的配置项,null 表示不展示。 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - **optional** *AxisLabelCfg | null* - -文本标签的配置项,null 表示不展示。*AxisLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------------------------------------- | ------- | ------------------------ | -| offset | *number* | - | label 的偏移量 | -| rotate | *number* | - | 文本旋转角度 | -| autoRotate | *boolean |avoidCallback* | `true` | 是否自动旋转 | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | 是否自动隐藏 | -| autoEllipsis | *boolean |avoidCallback |string* | `false` | 是否自动省略 | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | 格式化函数 | -| style | *[ShapeAttrs](/zh/docs/api/graphic-style)* | - | 坐标轴刻度线的样式配置项 | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -标记坐标轴 label 的方向,左侧为 1,右侧为 -1(仅适用于垂直方向的坐标轴) - -##### verticalLimitLength - -**optional** *number* - -配置坐标轴垂直方向的最大限制长度,对文本自适应有很大影响。 - -##### grid - -**optional** *object* - -坐标轴网格线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------------ | -------------------------------------------------------- | -| line | *lineStyle* | 线的样式, | -| alternateColor | *string|string\[]* | 两个栅格线间的填充色 | -| closed | *boolean* | 对于 circle 是否关闭 grid | -| alignTick | *boolean* | 是否同刻度线对齐,如果值为 false,则会显示在两个刻度中间 | - -网格线条样式的配置与 [line](#line) 是一致的。 - -##### line - -**optional** *object* - -坐标轴线的配置项,null 表示不展示。 - - - -> **注意:** 线条样式的完整配置是 `{ style: { stroke: '#ddd', ... } }`, 如果配置线条样式不生效的时候,请检查一下。 - -| 属性名 | 类型 | 介绍 | -| ------------- | ----------------- | ------------------------------------------------------------------------------------------------------ | -| stroke | *string* | 线的颜色 | -| lineWidth | *number* | 线宽 | -| lineDash | *\[number,number]* | 虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| opacity | *number* | 透明度 | -| shadowColor | *string* | 阴影颜色 | -| shadowBlur | *number* | 高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例(设置 x 轴的 grid 网格线条样式): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -坐标轴刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴刻度线的样式。 | -| alignTick | *boolean* | 坐标轴刻度线是否同 tick 对齐 | -| length | *number* | 坐标轴刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -坐标轴子刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴子刻度线的样式。 | -| count | *number* | 子刻度个数 | -| length | *number* | 坐标轴子刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -是否美化。 - -##### min - -**optional** *number* *default:* `0` - -坐标轴最小值。 - -##### max - -**optional** *number* - -坐标轴最大值。 - -##### minLimit - -**optional** *number* - -最小值限定。 - -##### maxLimit - -**optional** *number* - -最大值限定。 - -##### tickCount - -**optional** *number* - -期望的坐标轴刻度数量,非最终结果。 - -##### tickInterval - -**optional** *number* - -坐标轴刻度间隔。 - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -指定 tick 计算方法,或自定义计算 tick 的方法,内置 tick 计算方法包括 `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -动画开关,默认开启。 - -##### animateOption - -**optional** *object* - -动画参数配置。 - -```ts -interface ComponentAnimateCfg { - /** 动画执行时间 */ - readonly duration?: number; - /** 动画缓动函数 */ - readonly easing?: string; - /** 动画延迟时间 */ - readonly delay?: number; -} -// 配置参考 -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` - - -#### legend - -配置图例有两种方式 -第一种,传入 `boolean` 设置是否显示图例。 - -```ts -legend: false; // 关闭图例 -``` - -第二种,传入 *LegendCfg* 对图例进行整体配置。 - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - -##### layout - -**optional** *horizontal | vertical* - -图例布局方式。提供横向布局和纵向布局。 - -##### title - -**optional** *G2LegendTitleCfg* - -图例标题配置,默认不展示。*G2LegendTitleCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------- | ------------------------------------------------------------ | -| title | *string* | 文本显示内容 | -| spacing | *number* | 标题同图例项的间距 | -| style | *object* | 文本样式配置项,参考  [绘图属性](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -图例位置,可选项:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - -尝试一下: - - - -##### offsetX - -**optional** *number* - -图例 x 方向的偏移。 - -##### offsetY - -**optional** *number* - -图例 y 方向的偏移。 - -##### background - -**optional** *LegendBackgroundCfg* - -背景框配置项。*LegendBackgroundCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| padding | *number | number\[]* | 背景的留白 | -| style | *ShapeAttr* | 背景样式配置项, 参考[绘图属性](/zh/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -适用于 分类图例,当图例项过多时是否进行分页。(⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -适用于 分类图例,当图例项过多分页时,可以设置最大行数(仅适用于 `layout: 'horizontal'`),默认为:1。 - -##### pageNavigator - -**optional** *object* - -适用于 分类图例,图例分页导航器的主题样式设置。*LegendPageNavigatorCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------- | ------ | ----------------------- | -| marker.style | *PageNavigatorMarkerStyle* | - | 分页器指示箭头 样式配置 | -| text.style | *PageNavigatorTextStyle* | - | 分页器页面信息 样式配置 | - -***PageNavigatorMarkerStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------------- | -------- | ------ | ---------------------------------------------------------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -***PageNavigatorTextStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| -------- | -------- | ------ | ---------------------------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -示例: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -适用于 分类图例,图例的高度, 默认为 null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -适用于 分类图例,图例项的宽度, 默认为 null,自动计算。 - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -适用于 分类图例,控制图例项水平方向的间距。 - -##### label - -**optional** *ContinueLegendLabelCfg* - -适用于 连续图例,文本的配置项。*ContinueLegendLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | -------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| align | *string* | - | 文本同滑轨的对齐方式
- rail : 同滑轨对齐,在滑轨的两端
- top, bottom: 图例水平布局时有效
- left, right: 图例垂直布局时有效 | -| style | *object* | - | 文本样式配置项,详见  [绘图属性](/zh/docs/api/graphic-style) | -| spacing | *number* | - | 文本同滑轨的距离 | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### marker - -**optional** *MarkerCfg | MarkerCfgCallback* - -适用于 分类图例,图例项的 marker 图标的配置。 - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -```sign -type LegendItem = { name: string; value: string; } & MarkerCfg; - -type MarkerCfgCallback = (name: string, index: number, item: LegendItem) => MarkerCfg; -``` - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -适用于 分类图例,图例项容器最大宽度设置。当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxWidth = Math.min(maxWidth, maxWidthRatio * viewBBox.width); -``` - -##### maxHeight - -**optional** *number* - -适用于 分类图例,图例项容器最大高度设置。当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxHeight = Math.min(maxHeight, maxHeightRatio * viewBBox.height); -``` - -##### reversed - -**optional** *boolean* - -适用于 分类图例,是否将图例项逆序展示。 - -##### custom - -**optional** *boolean* - -是否为自定义图例,当该属性为 true 时,需要声明 items 属性。 - -##### items - -**optional** *LegendItem\[]* -适用于 分类图例,用户自己配置图例项的内容。*LegendItem* 配置如下: - -| 参数名 | 类型 | 是否必选 | 描述 | -| ------ | ----------- | -------- | ------------------------ | -| id | *string* | | 唯一值,用于动画或者查找 | -| name | *string* | required | 名称 | -| value | any | required | 值 | -| marker | *MarkerCfg* | | 图形标记 | - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -##### min - -**optional** *number* - -适用于 连续图例,选择范围的最小值。 - -##### max - -**optional** *number* - -适用于 连续图例,选择范围的最大值。 - -##### value - -**optional** *number\[]* - -适用于 连续图例,当前选中的范围。 - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` - -适用于 连续图例,滑块是否可以滑动。 - -##### rail - -**optional** *ContinueLegendRailCfg* - -适用于 连续图例,图例滑轨(背景)的样式配置项。*ContinueLegendRailCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------------- | -------- | -------------------------------------------------------------------------------- | -| type | *string* | rail 的类型,color, size,默认:'color' | -| size | *number* | 滑轨的宽度 | -| defaultLength | *number* | 滑轨的默认长度,默认:100。当限制了 maxWidth,maxHeight 时,不会使用这个属性会自动计算长度 | -| style | *object* | 滑轨的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### track - -**optional** *ContinueLegendTrackCfg* -适用于 连续图例,选择范围的色块样式配置项。*ContinueLegendTrackCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| style | *object* | - | 选定范围的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -适用于 连续图例,滑块的配置项。(暂不支持自定义) - -*ContinueLegendHandlerCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| size | *number* | - | 滑块的大小,默认:10 | -| style | *object* | - | 滑块的样式设置,参考 [绘图属性](/zh/docs/api/graphic-style) | - - -#### label - -> 小提琴图暂时不支持 label 展示,可以使用 annnotation 进行替代 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### tooltip - -##### fields - -**可选** *string\[]* - -指定 tooltip 中显示的字段,默认不同图表有不同的默认字段列表。配合 `formatter` 配置一起使用,效果更佳。 - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**可选** *Function* - -格式化 tooltip item 内容(暂时不支持多 tooltipItems 的格式化,可以使用 `customContent` 处理) - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**可选** *boolean* *default:* `true` - -设置 tooltip 内容框是否跟随鼠标移动。 - -##### enterable - -**可选** *boolean* *default:* `false` - -tooltip 是否允许鼠标滑入。 - -##### showTitle - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 标题。 - -##### title - -**可选** *string* - -设置 tooltip 的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,则直接展示 title 值。 - -##### position - -**可选** *`top` | `bottom` | `left` | `right`* - -设置 tooltip 的固定展示位置,相对于数据点。 - -##### shared - -**可选** *boolean* - -true 表示合并当前点对应的所有数据并展示,false 表示只展示离当前点最逼近的数据内容。 - -##### showCrosshairs - -**可选** *boolean* *default:* `false` - -是否展示 crosshairs。 - -##### crosshairs - -**可选** *object* - -配置 tooltip 的 crosshairs,当且仅当 `showCrosshairs` 为 true 时生效。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | --------------------- | ------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | crosshairs 的类型: `x` 表示 x 轴上的辅助线,`y` 表示 y 轴上的辅助项 | -| line | *lineStyle* | 线的配置项,详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | 辅助线文本配置,支持回调 | -| textBackground | *TextBackgroundStyle* | 辅助线文本背景配置 | -| follow | *boolean* | 辅助线是否跟随鼠标移动,默认为 false,即定位到数据点 | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | -------------------- | ------------------ | -| padding | *number | number\[]* | 文本背景周围的留白 | -| style | *shapeStyle* | 线的配置项, 详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style) | - -##### showMarkers - -**可选** *boolean* *default:* `true` - -是否渲染 tooltipMarkers。 - -##### marker - -**可选** *ShapeAttrs* - -tooltipMarker 的样式配置。 - -样式配置类型,详细可见: [ShapeAttrs](/zh/docs/api/graphic-style) - -##### showContent - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 内容框。 - -##### container - -**可选** *string|HTMLElement* - -自定义 tooltip 的容器。 - -##### containerTpl - -**可选** *string* - -用于指定图例容器的模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### itemTpl - -**可选** *string* - -每项记录的默认模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### domStyles - -**可选** *TooltipDomStyles* - -传入各个 dom 的样式。 - -dom-styles - -```ts -/** Tooltip 内容框的 css 样式定义 */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**可选** *number* - -tooltip 偏移量。 - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems - -**可选** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - - - -##### customContent - -**可选** *Function* - -支持自定义模板。[在线示例](/zh/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 缩略轴 - -> 目前只适用于:折线图、面积图、双轴图。 - -| 配置项 | 类型 | 功能描述 | -| --------------- | -------------- | ------------------ | -| start | *number* | 默认起始位置 | -| end | *number* | 默认结束位置 | -| height | *number* | 缩略轴高度 | -| trendCfg | *TrendCfg* | 背景趋势的配置 | -| backgroundStyle | *object* | 背景配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| foregroundStyle | *object* | 前景配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| handlerStyle | *HandlerStyle* | handler 配置 | -| textStyle | *object* | 文本配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| minLimit | *number* | 允许滑动位置下限 | -| maxLimit | *number* | 允许滑动位置上限 | -| formatter | *Function* | 滑块文本格式化函数 | - -***TrendCfg*** 类型如下: - -| 配置项 | 类型 | 功能描述 | -| --------------- | ---------- | -------------- | -| data | *number\[]* | 统计文本的样式 | -| smooth | *boolean* | 是否平滑 | -| isArea | *boolean* | 是否面积图 | -| backgroundStyle | *object* | 背景样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| lineStyle | *object* | line 样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| areaStyle | *object* | area 样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | - -***HandlerStyle*** 类型如下: - -| 配置项 | 类型 | 功能描述 | -| ------ | -------- | -------------- | -| width | *number* | 缩略轴手柄宽度 | -| height | *number* | 缩略轴手柄高度 | -| fill | *string* | 缩略轴手柄填充色 | -| highLightFill | *string* | 缩略轴手柄填充高亮色(hover 状态) | -| stroke | *string* | 缩略轴手柄描边色 | -| opacity | *number* | 缩略轴手柄填充透明度 | -| radius | *number* | 缩略轴手柄背景圆角 | -| cursor | *string* | 缩略轴手柄鼠标样式 (hover 状态) | - - -#### 滚动条 - -***ShapeAttrs*** 类型的请参考[绘图属性](/zh/docs/api/graphic-style) - -| 配置项 | 类型 | 功能描述 | -| --------------- | ---------------- | ------------------ | -| type | *'horizontal' | 'vertical'* | 滚动条类型 | -| width | *number* | 宽度,在 vertical 下生效 | -| height | *number* | 高度,在 horizontal 下生效 | -| padding | *number | number\[]* | padding | -| categorySize | *number* | 对应水平滚动条,为 x 轴每个分类字段的宽度;对于垂直滚动条,为 x 轴每个分类字段的高度 | -| style | *ScrollbarStyle* | 滚动条默认样式的设置 | -| animate | *boolean* | 滚动的时候是否开启动画,默认跟随 view 中 animate 配置 | - -***ScrollbarStyle*** 类型如下: - -| 配置项 | 类型 | 功能描述 | -| --------------- | ---------------- | ------------------ | -| trackColor | *string* | 滚动条滑道填充色 | -| thumbColor | *string* | 滚动条滑块填充色 | -| thumbHighlightColor | *string* | 滚动条滑块高亮样式,对应主题的 hover.style.thumbColor | -| lineCap | *string* | 决定滚动条末端绘制形状,同 Canvas lineCap 属性。 | - - -#### 转化标签 - -适用于基础柱形图和基础条形图,转化率组件可以让用户关注到数据的变化比例。 - -**optional** *object* | *false* - -| 配置项 | 类型 | 默认值 | 功能描述 | -| ------- | ------------------- | ------ | -------------------------------- | -| size | *number* | - | 转化率组件尺寸 | -| spacing | *number* | - | 组件和柱子间距 | -| offset | *number* | - | 组件和轴线间距 | -| arrow | *ArrowCfg | false* | - | 箭头形状配置,false 时不显示箭头 | -| text | *TextCfg | false* | - | 文本配置、false 时不显示文本 | - -其中 ArrowCfg 配置如下 - -| 配置项 | 类型 | 默认值 | 功能描述 | -| -------- | -------- | ------ | -------- | -| headSize | *number* | - | 箭头尺寸 | -| style | *object* | - | 箭头样式 | - -TextCfg 配置如下 - -| 配置项 | 类型 | 默认值 | 功能描述 | -| --------- | -------------------------------------- | ------ | ---------------- | -| headSize | *number* | - | 箭头尺寸 | -| style | *object* | - | 箭头样式 | -| formatter | *(prev:number, next:number) => string* | - | 自定义转化率计算 | - -样式配置类型请参考 [绘图属性](/zh/docs/api/graphic-style) - - -#### 联通区域对比 - -适用于堆叠柱状图和堆叠条形图,联通区域组件通过绘制同一字段的联通区域提供视觉上的辅助识别,方便进行数据对比。(注意:不能和 **columnBackground** 同时使用) - -**optional** *object* | *false* - -| 配置项 | 类型 | 是否必选 | 默认值| 功能描述 | -| ------- | ---------------- | ------------ | ----------------- | -| trigger | *'hover'、'click'* | 否 |'hover' | 触发方式 | -| style | *ConnectedAreaStyleCfg* | | 否 | | 联通区域的样式配置 | - -***ConnectedAreaStyleCfg*** 类型定义如下: - -```sign -type ConnectedAreaStyleCfg = ShapeAttrs | ((oldStyle: ShapeAttrs, element: Element) => ShapeAttrs); -``` - -**图表示例:** - - - - -### 图表事件 - -在 Plot 上通过 `on` 绑定事件、`off` 移除绑定事件。 - -```sign -// 绑定事件 -plot.on('eventName', callback); -// 绑定事件,只触发一次 -plot.once('eventName', callback); -// 移除事件 -plot.off('eventName', callback); -``` - -组合方式: `${componentName}:${eventName}` - -```ts -// plot 添加点击事件,整个图表区域 -plot.on('plot:click', (...args) => { - console.log(...args); -}); - -// element 添加点击事件, element 代表图形元素,关于图形元素,请查看:https://g2.antv.vision/zh/docs/manual/concepts/element -plot.on('element:click', (...args) => { - console.log(...args); -}); - -// 图例添加点击事件 -plot.on('legend-item:click', (...args) => { - console.log(...args); -}); - -// 图例名称添加点击事件 -plot.on('legend-item-name:click', (...args) => { - console.log(...args); -}); - -// 给 tooltip 添加点击事件 -plot.on('tooltip:show', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:hide', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:change', (...args) => { - console.log(...args); -}); - -// label 添加点击事件 -plot.on('label:click', (...args) => { - console.log(...args); -}); - -// mask 添加点击事件 -plot.on('mask:click', (...args) => { - console.log(...args); -}); - -// axis-label 添加点击事件 -plot.on('axis-label:click', (...args) => { - console.log(...args); -}); - -// 给 annotation 添加点击事件 -plot.on('annotation:click', (...args) => { - console.log(...args); -}); -``` - - -### 图表方法 - -#### render() - -渲染图表。 - -#### update() - -更新图表配置项,配置覆盖,不会做差异比对。 - -使用示例: - -```ts -plot.update({ - ...currentConfig, - legend: false, -}); -``` - - - - -### 图表主题 - -推荐使用 💄 [ThemeSet](https://theme-set.antv.vision) 在线自定义自己的主题配置。 - -#### 内置主题 - -目前默认的内置主要有两套:`default` 和 `dark` - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### 主题属性 - -除了使用内置的 `default` 和 `dark` 主题之外,还可以通过设置主题属性来修改部分主题内容: - -下表列出了组成主题的大配置项上的具体属性: - -| 主题属性 | 类型 | 描述 | -| --- | --- | ---| -| defaultColor | *string*| 主题色 | -| padding | *number* | number\[] | -| fontFamily | *string* | 图表字体 | -| colors10 | *string\[]* | 分类颜色色板,分类个数小于 10 时使用 | -| colors20 |*string\[]* | 分类颜色色板,分类个数大于 10 时使用 | -| columnWidthRatio | *number* | 一般柱状图宽度占比,0 - 1 范围数值 -| maxColumnWidth | *number* | 柱状图最大宽度,像素值 | -| minColumnWidth| *number* | 柱状图最小宽度,像素值 | -| roseWidthRatio | *number* | 玫瑰图占比,0 - 1 范围数值 | -| multiplePieWidthRatio | *number* | 多层饼图/环图占比,0 - 1 范围数值 | -| geometries | *object* | 配置每个 Geometry 下每个 shape 的样式,包括默认样式以及各个状态下的样式 | -| components | *object* | 配置坐标轴,图例,tooltip, annotation 的主题样式 | -| labels | *object* | 配置 Geometry 下 label 的主题样式 | -| innerLabels | *object* | 配置 Geometry 下展示在图形内部的 labels 的主题样式 | -| pieLabels | *object* | 配置饼图 labels 的主题样式 | - -使用方式: - -```ts -{ - theme: { - colors10: ['#FF6B3B', '#626681', '#FFC100', '#9FB40F', '#76523B', '#DAD5B5', '#0E8E89', '#E19348', '#F383A2', '#247FEA'] - } -} -``` - -#### 主题属性(主题样式表) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -使用方式: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir' - } - } -} -``` - -支持的样式表属性: - -| **属性** | **类型** | **描述** | -| ----------------------- | -------- | ------------- | -| `backgroundColor` | *string* | 背景色 | -| `brandColor` | *string* | 主题色,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | 分类颜色色板,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | 分类颜色色板,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | 语义红色 | -| `paletteSemanticGreen` | *string* | 语义绿色 | -| `paletteSemanticYellow` | *string* | 语义黄色 | -| `fontFamily` | *string* | 字体 | - -#### 更新主题 - -使用方式: - -```ts -// 示例1: -plot.update({ theme: 'dark' }); - -// 示例2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }) -``` - -#### 自定义注册主题 - -另外,还可以通过 G2 提供了自定义主题机制来定义全新的主题结构,以允许用户切换、定义图表主题。前往 [G2 | 自定义主题](https://g2.antv.vision/zh/docs/api/advanced/register-theme) 查看详情。 - - - -🌰 自定义主题 [DEMO](/zh/examples/general/theme#register-theme) 示例 - - -### 图表交互 - -柱状图内置了一些交互,列表如下: - -| 交互 | 描述 | 配置 | -| ----------- | ---------------------------------------- | ------------------------------ | -| brush | 用于刷选交互,配置该交互后,可进行刷选。 | `brush: { enabled: true }` | - -#### brush - -**optional** *BrushCfg* - -刷选交互配置。 - -**配置项** - -*BrushCfg* 类型定义如下: - -| 属性 | 类型 | 描述 | -| ------- | --------- | --------------------------------------------------------------------------------------------- | -| enabled | *boolean* | 是否开启 brush 刷选交互,默认为:'false' | -| type | *string* | brush 类型,可选项:'rect' | 'x-rect' | 'y-rect' | 'cirlce' | 'path'(不规则矩形). 默认: 'rect' | -| action | *string* | brush 操作,可选项:'filter' | 'highlight'(对应 '筛选过滤' 和 '高亮强调'). 默认: 'filter'. | -| mask | *MaskCfg* | 刷选交互的蒙层 mask UI 配置 | -| button | *ButtonCfg* | 刷选交互的重置按钮配置,只在 action 为 filter 的时候,生效 | - -*MaskCfg* 类型定义如下: - -| 属性 | 类型 | 描述 | -| ----- | ------------ | --------- | -| style | *ShapeAttrs* | mask 样式 | - -*ButtonCfg* 类型定义如下: - -```ts -export type ButtonCfg = { - /** - * 文本与按钮边缘的间距 - */ - padding?: number | number[]; - /** - * 按钮文本 - */ - text?: string; - /** - * 自定义文本样式 - */ - textStyle?: { - default?: ShapeAttrs; - }; - /** - * 自定义按钮样式 - */ - buttonStyle?: { - default?: ShapeAttrs; - active?: ShapeAttrs; - }; -}; -``` - -**事件** - -brush 交互相关事件: - -1. `brush-filter`, 事件列表: - -| 事件名称 | 描述 | -| -------------------------------------- | ------------------------------------------------- | -| `G2.BRUSH_FILTER_EVENTS.BEFORE_FILTER` | Brush 事件触发 “filter” 发生之前的钩子 | -| `G2.BRUSH_FILTER_EVENTS.AFTER_FILTER` | Brush 事件触发 “filter” 发生之后的钩子 | -| `G2.BRUSH_FILTER_EVENTS.BEFORE_RESET` | Brush 事件触发筛选(filter) “reset” 发生之前的钩子 | -| `G2.BRUSH_FILTER_EVENTS.AFTER_RESET` | Brush 事件触发筛选(filter) “reset” 发生之后的钩子 | - -示例: - - - -2. `brush-highlight`, 事件列表: - -| 事件名称 | 描述 | -| ---------------------------------------------------- | --------------------------------------------------------------- | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.BEFORE_HIGHLIGHT` | 事件触发元素区间范围 (“element-range”) 发生“高亮”之前的钩子 | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.AFTER_HIGHLIGHT` | 事件触发元素区间范围 (“element-range”) 发生“高亮”之后的钩子 | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.BEFORE_CLEAR` | 事件触发元素区间范围 (“element-range”) 发生高亮“重置”之前的钩子 | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.AFTER_CLEAR` | 事件触发元素区间范围 (“element-range”) 发生高亮“重置”之后的钩子 | - -示例: - - - - -#### 添加交互 - -```ts -// 开启「鼠标移入图表元素(柱状图的柱子、点图的点等)时触发 active」的交互 -interactions: [{ type: 'element-active' }] - -// 开启多个交互 -interactions: [{ type: 'element-active' }, { type: 'brush' }] -``` - -#### 配置交互 - -通过 `cfg` 可以对交互行为进行配置,详细参考 [G2 | 修改交互的默认交互](https://g2.antv.vision/zh/docs/api/general/interaction/#修改交互的默认交互) - -```ts -// 修改 tooltip 触发事件 -interactions: [ - { - type: 'tooltip', - cfg: { start: [{ trigger: 'element:click', action: 'tooltip:show' }] } - } -] -``` - -#### 移除交互 - -```ts -// 方式1: 关闭 tooltip 交互 -interactions: [{ type: 'tooltip', enable: false }] - -// 方式2: -plot.chart.removeInteraction('interaction-type'); -``` - -使用示例: - -```ts -// 移除 图例筛选 交互 -plot.chart.removeInteraction('legend-filter'); -``` diff --git a/site/docs/common/animate-option.en.md b/site/docs/common/animate-option.en.md deleted file mode 100644 index 4d66f2ebf..000000000 --- a/site/docs/common/animate-option.en.md +++ /dev/null @@ -1,27 +0,0 @@ -
- -*ComponentAnimateOption* is configured for each component animation type. - -```ts -``` - -Where 'animation' passes in the name of the animation function, the built-in default animation function is shown in the table below, and you can also customize the animation function through 'registerAnimation'. - -**Effects of animation**, go to see [Examples](/en/examples/dynamic-plots/animation) for more information - -| Animation | Effect | Description | Not suitable | -| ----------------- | -------| --------------- |-------- | -| 'fade-in' | ![fade-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*LTRRRL8JwfQAAAAAAAAAAABkARQnAQ) | 渐现动画。 | | -| 'fade-out' | ![fade-out.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*s4Y4S5JJ6WEAAAAAAAAAAABkARQnAQ) | 渐隐动画。 | | -| 'grow-in-x' | ![grow-in-x.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*vhRVSLxDqU8AAAAAAAAAAABkARQnAQ) | 容器沿着 x 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 | 不适用于饼图、玫瑰图等 polar、theta 坐标系下的图表以及柱、条状图 | -| 'grow-in-y' | ![grow-in-y.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*L6mkQa3aG64AAAAAAAAAAABkARQnAQ) | 容器沿着 y 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 | 不适用于饼图、玫瑰图等 polar、theta 坐标系下的图表以及柱、条状图 | -| 'grow-in-xy' | ![grow-in-xy.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*LfPrQouGwYIAAAAAAAAAAABkARQnAQ) | 容器沿着 x,y 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 || -| 'scale-in-x' | ![scale-in-x.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*oiaGTLx-dNcAAAAAAAAAAABkARQnAQ) | 单个图形沿着 x 方向的生长动画。 || -| 'scale-in-y' | ![scale-in-y.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*T6mLTY3o9OoAAAAAAAAAAABkARQnAQ) | 单个图形沿着 y 方向的生长动画。 || -| 'wave-in' | ![wave-in-p.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*W5CdQIWw-M4AAAAAAAAAAABkARQnAQ)![wave-in-r.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*z9jjQY-lHcwAAAAAAAAAAABkARQnAQ) | 划入入场动画效果,不同坐标系下效果不同。 || -| 'zoom-in' | ![zoom-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*wc4dQp4E6vkAAAAAAAAAAABkARQnAQ) | 沿着图形中心点的放大动画。 || -| 'zoom-out' | ![zoom-out.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*PZ2gTrkV29YAAAAAAAAAAABkARQnAQ) | 沿着图形中心点的缩小动画。 || -| 'path-in' | ![path-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*gxZ1RIIMtdIAAAAAAAAAAABkARQnAQ) | path 路径入场动画。 || -| 'position-update' | | 图形位置移动动画。 | 限用于图表标签 label 上 | - -
diff --git a/site/docs/common/animate-option.zh.md b/site/docs/common/animate-option.zh.md deleted file mode 100644 index 58ce821d9..000000000 --- a/site/docs/common/animate-option.zh.md +++ /dev/null @@ -1,40 +0,0 @@ -
- -*ComponentAnimateOption* 为组件各个动画类型配置。 - -```ts -interface ComponentAnimateOption { - appear?: ComponentAnimateCfg; // 图表第一次加载时的入场动画 - enter?: ComponentAnimateCfg; // 图表绘制完成,发生更新后,产生的新图形的进场动画 - update?: ComponentAnimateCfg; // 图表绘制完成,数据发生变更后,有状态变更的图形的更新动画 - leave?: ComponentAnimateCfg; // 图表绘制完成,数据发生变更后,被销毁图形的销毁动画 -} - -interface ComponentAnimateCfg { - animation?: string; // 动画效果,内置的动画效果见下表,也可以通过自定义动画的方式实现自定义效果 - duration?: number; // 动画执行时间 - easing?: string; // 动画缓动函数 - delay?: number; // 动画延迟时间 -} -``` - -其中 `animation` 传入动画函数名称,内置默认动画函数如下表,同时也可以通过 `registerAnimation` 自定义动画函数。 - -**动画效果**,前往[图表示例](/zh/examples/dynamic-plots/animation)查看效果 - -| animation | 效果 | 说明 | 不适用场景 | -| ----------------- | --- | -------------------------------- |-------- | -| 'fade-in' | ![fade-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*LTRRRL8JwfQAAAAAAAAAAABkARQnAQ) | 渐现动画。 | | -| 'fade-out' | ![fade-out.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*s4Y4S5JJ6WEAAAAAAAAAAABkARQnAQ) | 渐隐动画。 | | -| 'grow-in-x' | ![grow-in-x.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*vhRVSLxDqU8AAAAAAAAAAABkARQnAQ) | 容器沿着 x 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 | 不适用于饼图、玫瑰图等 polar、theta 坐标系下的图表以及柱、条状图 | -| 'grow-in-y' | ![grow-in-y.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*L6mkQa3aG64AAAAAAAAAAABkARQnAQ) | 容器沿着 y 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 | 不适用于饼图、玫瑰图等 polar、theta 坐标系下的图表以及柱、条状图 | -| 'grow-in-xy' | ![grow-in-xy.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*LfPrQouGwYIAAAAAAAAAAABkARQnAQ) | 容器沿着 x,y 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。 || -| 'scale-in-x' | ![scale-in-x.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*oiaGTLx-dNcAAAAAAAAAAABkARQnAQ) | 单个图形沿着 x 方向的生长动画。 || -| 'scale-in-y' | ![scale-in-y.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*T6mLTY3o9OoAAAAAAAAAAABkARQnAQ) | 单个图形沿着 y 方向的生长动画。 || -| 'wave-in' | ![wave-in-p.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*W5CdQIWw-M4AAAAAAAAAAABkARQnAQ)![wave-in-r.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*z9jjQY-lHcwAAAAAAAAAAABkARQnAQ) | 划入入场动画效果,不同坐标系下效果不同。 || -| 'zoom-in' | ![zoom-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*wc4dQp4E6vkAAAAAAAAAAABkARQnAQ) | 沿着图形中心点的放大动画。 || -| 'zoom-out' | ![zoom-out.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*PZ2gTrkV29YAAAAAAAAAAABkARQnAQ) | 沿着图形中心点的缩小动画。 || -| 'path-in' | ![path-in.gif](https://gw.alipayobjects.com/mdn/rms\_f5c722/afts/img/A\*gxZ1RIIMtdIAAAAAAAAAAABkARQnAQ) | path 路径入场动画。 || -| 'position-update' | | 图形位置移动动画。 | 限用于图表标签 label 上 | - -
diff --git a/site/docs/common/annotations.en.md b/site/docs/common/annotations.en.md deleted file mode 100644 index 0daf056a1..000000000 --- a/site/docs/common/annotations.en.md +++ /dev/null @@ -1,787 +0,0 @@ -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations.zh.md b/site/docs/common/annotations.zh.md deleted file mode 100644 index 0daf056a1..000000000 --- a/site/docs/common/annotations.zh.md +++ /dev/null @@ -1,787 +0,0 @@ -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/arc.en.md b/site/docs/common/annotations/arc.en.md deleted file mode 100644 index 3465f0924..000000000 --- a/site/docs/common/annotations/arc.en.md +++ /dev/null @@ -1,51 +0,0 @@ -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) diff --git a/site/docs/common/annotations/arc.zh.md b/site/docs/common/annotations/arc.zh.md deleted file mode 100644 index 3465f0924..000000000 --- a/site/docs/common/annotations/arc.zh.md +++ /dev/null @@ -1,51 +0,0 @@ -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) diff --git a/site/docs/common/annotations/base-annotation.en.md b/site/docs/common/annotations/base-annotation.en.md deleted file mode 100644 index 6e8823692..000000000 --- a/site/docs/common/annotations/base-annotation.en.md +++ /dev/null @@ -1,29 +0,0 @@ -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/base-annotation.zh.md b/site/docs/common/annotations/base-annotation.zh.md deleted file mode 100644 index 6e8823692..000000000 --- a/site/docs/common/annotations/base-annotation.zh.md +++ /dev/null @@ -1,29 +0,0 @@ -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/data-marker.en.md b/site/docs/common/annotations/data-marker.en.md deleted file mode 100644 index 067915288..000000000 --- a/site/docs/common/annotations/data-marker.en.md +++ /dev/null @@ -1,87 +0,0 @@ -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` diff --git a/site/docs/common/annotations/data-marker.zh.md b/site/docs/common/annotations/data-marker.zh.md deleted file mode 100644 index 067915288..000000000 --- a/site/docs/common/annotations/data-marker.zh.md +++ /dev/null @@ -1,87 +0,0 @@ -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` diff --git a/site/docs/common/annotations/data-region.en.md b/site/docs/common/annotations/data-region.en.md deleted file mode 100644 index 5548daf3e..000000000 --- a/site/docs/common/annotations/data-region.en.md +++ /dev/null @@ -1,63 +0,0 @@ -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/data-region.zh.md b/site/docs/common/annotations/data-region.zh.md deleted file mode 100644 index 5548daf3e..000000000 --- a/site/docs/common/annotations/data-region.zh.md +++ /dev/null @@ -1,63 +0,0 @@ -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/html.en.md b/site/docs/common/annotations/html.en.md deleted file mode 100644 index 742ea7981..000000000 --- a/site/docs/common/annotations/html.en.md +++ /dev/null @@ -1,43 +0,0 @@ -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 diff --git a/site/docs/common/annotations/html.zh.md b/site/docs/common/annotations/html.zh.md deleted file mode 100644 index 742ea7981..000000000 --- a/site/docs/common/annotations/html.zh.md +++ /dev/null @@ -1,43 +0,0 @@ -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 diff --git a/site/docs/common/annotations/image.en.md b/site/docs/common/annotations/image.en.md deleted file mode 100644 index abe885202..000000000 --- a/site/docs/common/annotations/image.en.md +++ /dev/null @@ -1,91 +0,0 @@ -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/image.zh.md b/site/docs/common/annotations/image.zh.md deleted file mode 100644 index abe885202..000000000 --- a/site/docs/common/annotations/image.zh.md +++ /dev/null @@ -1,91 +0,0 @@ -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/line.en.md b/site/docs/common/annotations/line.en.md deleted file mode 100644 index 6116b1cb3..000000000 --- a/site/docs/common/annotations/line.en.md +++ /dev/null @@ -1,106 +0,0 @@ -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/line.zh.md b/site/docs/common/annotations/line.zh.md deleted file mode 100644 index 6116b1cb3..000000000 --- a/site/docs/common/annotations/line.zh.md +++ /dev/null @@ -1,106 +0,0 @@ -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/region-filter.en.md b/site/docs/common/annotations/region-filter.en.md deleted file mode 100644 index 77fa918ff..000000000 --- a/site/docs/common/annotations/region-filter.en.md +++ /dev/null @@ -1,93 +0,0 @@ -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/region-filter.zh.md b/site/docs/common/annotations/region-filter.zh.md deleted file mode 100644 index 77fa918ff..000000000 --- a/site/docs/common/annotations/region-filter.zh.md +++ /dev/null @@ -1,93 +0,0 @@ -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/region.en.md b/site/docs/common/annotations/region.en.md deleted file mode 100644 index 89e3c8c39..000000000 --- a/site/docs/common/annotations/region.en.md +++ /dev/null @@ -1,81 +0,0 @@ -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/region.zh.md b/site/docs/common/annotations/region.zh.md deleted file mode 100644 index 89e3c8c39..000000000 --- a/site/docs/common/annotations/region.zh.md +++ /dev/null @@ -1,81 +0,0 @@ -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/shape.en.md b/site/docs/common/annotations/shape.en.md deleted file mode 100644 index 39db5a15c..000000000 --- a/site/docs/common/annotations/shape.en.md +++ /dev/null @@ -1,47 +0,0 @@ -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/shape.zh.md b/site/docs/common/annotations/shape.zh.md deleted file mode 100644 index 39db5a15c..000000000 --- a/site/docs/common/annotations/shape.zh.md +++ /dev/null @@ -1,47 +0,0 @@ -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/annotations/text.en.md b/site/docs/common/annotations/text.en.md deleted file mode 100644 index fec592779..000000000 --- a/site/docs/common/annotations/text.en.md +++ /dev/null @@ -1,92 +0,0 @@ -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 diff --git a/site/docs/common/annotations/text.zh.md b/site/docs/common/annotations/text.zh.md deleted file mode 100644 index fec592779..000000000 --- a/site/docs/common/annotations/text.zh.md +++ /dev/null @@ -1,92 +0,0 @@ -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 diff --git a/site/docs/common/axis.en.md b/site/docs/common/axis.en.md deleted file mode 100644 index 80dab87ad..000000000 --- a/site/docs/common/axis.en.md +++ /dev/null @@ -1,341 +0,0 @@ -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -For Cartesian coordinates, set the position of the coordinate axes. - -##### title - -**optional** *object* - -A configuration item for the title, NULL means not to be displayed. - -| Properties | Type | Description | -| ---------- | ------------ | -------------------------------------------------------------------------- | -| text | *string* | The title of axis | -| position | *string* | Position of the axis title, default: 'center'. Options: start, center, end | -| offset | *number* | The distance of the title from the coordinate axis | -| spacing | *number* | The distance between the title and the text on the coordinate axis | -| style | *shapeStyle* | Title text configuration items | -| autoRotate | *boolean* | Whether to rotate automatically or not | - -***shapeStyle*** - - - -| Properties | Type | Description | -| ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fill | *string* | Fill color of the shape | -| r | *number* | used in `point`, means the radius of geometry | -| fillOpacity | *number* | Fill opacity of the shape | -| stroke | *string* | Stroke color of the shape | -| lineWidth | *number* | The width of the stroke of the shape | -| lineDash | \[number,number] | Configure dashed line stroke. The first parameter is the length of each segment, and the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| lineOpacity | *number* | Opacity of the stroke | -| opacity | *number* | Opacity of the shape | -| shadowColor | *string* | Shadow color of the shape | -| strokeOpacity | *number* | Stroke opacity of the shape | -| shadowBlur | *number* | Gaussian blur coefficient of the shadow | -| shadowOffsetX | *number* | Configure horizontal distance between shadow and shape | -| shadowOffsetY | *number* | Configure vertical distance between shadow and shape | -| cursor | *string* | Mouse style, same as the mouse style of CSS, default value : 'default' | - -Example: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -More documents about `ShapeStyle`, see [Graphic Style](/en/docs/api/graphic-style). - - -***label*** - -**optional** *object* - -A configuration item for the text label. NULL indicates that it is not displayed. - - - -| Properties | Type | Description | -| ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -| type | *string* | When a user uses a custom label type, need to declare the specific type, otherwise you will use the default label type rendering (pie chart label support `inner | outer | spiders`) | -| offset | *number* | label offset | -| offsetX | *number* | The offset distance of the label from the data point in the X direction | -| offsetY | *number* | The offset distance of the label from the data point in the Y direction | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | Text content that is displayed, if not declared, is displayed according to the value of the first field participating in the mapping | -| style | *ShapeAttrs* | Label text graphic property style | -| autoRotate | *string* | Whether to rotate automatically, default true | -| rotate | *number* | Text rotation Angle | -| labelLine | *null* | *boolean* | *LabelLineCfg* | Used to set the style property of the text connector. NULL indicates that it is not displayed. | -| labelEmit | *boolean* | Only applies to text in polar coordinates, indicating whether the text is radially displayed according to the Angle. True means on and false means off | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | Text layout type, support a variety of layout function combination. | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | Specifies the position of the current Label relative to the current graphic (Only works for column plot and bar plot, which geometry is interval) | -| animate | *boolean | AnimateOption* | Animation configuration. | -| formatter | *Function* | Format function | -| autoHide | *boolean* | Whether to hide it automatically, default to false | - -Types of ***LabelLineCfg*** are as follow: (Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -Example code: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - *AxisLabelCfg | null* **optional** - -Configurations related to axis label. Set this to `null` to prevent the axis label from appearing. The details of \_ AxisLabelCfg\_ are as follows: - -| Properties | Type | | -| ------------ | -------------------------------------------------------- | ------- | --------------------------------------------------------- | -| style | *[ShapeAttrs](/en/docs/api/graphic-style)* | - | Axis label text graphic property style | -| offset | *number* | - | Axis label offset | -| rotate | *number* | - | Axis label text rotation Angle | -| autoRotate | *boolean |avoidCallback* | `true` | Whether to rotate automatically, default true | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | Whether to hide it automatically, default to false | -| autoEllipsis | *boolean* | `false` | Whether to ellipsis label when overflow, default to false | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | Format function | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -Mark the direction of the label on the axis, with 1 to the left and -1 to the right (Only works in vertical axis). - -##### verticalLimitLength - -**optional** *number* - -Configuring the maximum limit length in the vertical direction of the coordinate axis has a significant impact on text adaptation. - -##### grid - -**optional** *object* - -Axis grid line configuration item. NULL means not shown. - -| Properties | Type | Description | -| -------------- | ------------------ | ------------------------------------------------------------------ | -| line | *lineStyle* | The style of the line | -| alternateColor | *string|string\[]* | The fill color between two grid lines | -| closed | *boolean* | Whether to close the grid for circle | -| alignTick | *boolean* | If the value is false, it will be displayed between the two scales | - -Then config of `grid.line` is the same as: [line](#line) - -##### line - -**optional** *object* - -Coordinate axis configuration item, NULL means not displayed. - - - -> **Attention:** The full configuration of lineStyle is `{ style: { stroke: '#ddd', ... } }`, please check it when your configuration doesn't work. - -| Properties | Type | Description | -| ------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| stroke | *string* | color of the line | -| lineWidth | *number* | width of the line | -| lineDash | *\[number,number]* | configure dashed line, the first parameter is the length of each segment, the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| opacity | *number* | opacity | -| shadowColor | *string* | shadow color | -| shadowBlur | *number* | Gaussian blur coefficient | -| shadowOffsetX | *number* | configure horizontal distance between shadow and line | -| shadowOffsetY | *number* | configure vertical distance between shadow and line | -| cursor | *string* | mouse style, same as the mouse style of CSS, default value : 'default' | - -Example (config the grid line style of xAxis): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -The configuration item of the coordinate axis scale line. NULL means not displayed. - -| Properties | Type | Description | -| ---------- | ----------- | -------------------------------------- | -| style | *lineStyle* | The style of tickLine. | -| alignTick | *boolean* | Whether aligh tickLine with tick label | -| length | *number* | The length of tickLine. | - -Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*. The params of *ShapeAttrsCallback* are as follow: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -A configuration item for a coordinate subscale. NULL indicates that it is not displayed. - -| Properties | Type | Description | -| ---------- | ---------------------------------- | -------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | The style of subTickLine. | -| count | *number* | The count of subTickLine. | -| length | *number* | The length of subTickLine. | - -Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*. The params of *ShapeAttrsCallback* are as follow: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -Whether to nice. - -##### min - -**optional** *number* *default:* `0` - -Minimum axis. - -##### max - -**optional** *number* - -Maximum axis. - -##### minLimit - -**optional** *number* - -Minimal limit. - -##### maxLimit - -**optional** *number* - -Maximum limit. - -##### tickCount - -**optional** *number* - -The expected number of axes, not the final result. - -##### tickInterval - -**optional** *number* - -Interval of axes. - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -Specify a tick calculation method, or customize a tick calculation method. Built-in tick calculations include `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -Animation switch, default true. - -##### animateOption - -**optional** *object* - -Animation parameter configuration. - -```ts -interface ComponentAnimateCfg { - /** Duration of the first animation */ - readonly duration?: number; - /** Easing method used for the first animation. */ - readonly easing?: string; - /** Delay before updating the animation */ - readonly delay?: number; -} -// Configure the reference -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` diff --git a/site/docs/common/axis.zh.md b/site/docs/common/axis.zh.md deleted file mode 100644 index 1d6051ab9..000000000 --- a/site/docs/common/axis.zh.md +++ /dev/null @@ -1,341 +0,0 @@ -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -适用于直角坐标系,设置坐标轴的位置。 - -##### title - -**optional** *object* - -标题的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------ | --------------------------------------------------------- | -| text | *string* | 坐标轴标题 | -| position | *string* | 轴标题的位置,默认:'center'。可选项: start, center, end | -| offset | *number* | 标题距离坐标轴的距离 | -| spacing | *number* | 标题距离坐标轴文本的距离 | -| style | *shapeStyle* | 标题文本配置项 | -| autoRotate | *boolean* | 是否自动旋转 | - -***shapeStyle*** - - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | *string* | 图形的填充色 | -| r | *number* | 用于 `point`, 代表图形的半径大小 | -| fillOpacity | *number* | 图形的填充透明度 | -| stroke | *string* | 图形的描边 | -| lineWidth | *number* | 图形描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 图形的整体透明度 | -| shadowColor | *string* | 图形阴影颜色 | -| strokeOpacity | *number* | 图形边框透明度 | -| shadowBlur | *number* | 图形阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -关于 ShapeStyle 更加详细的文档参考 [绘图属性](/zh/docs/api/graphic-style)。 - - -***label*** - -**optional** *object* - -文本标签的配置项,null 表示不展示。 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - **optional** *AxisLabelCfg | null* - -文本标签的配置项,null 表示不展示。*AxisLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------------------------------------- | ------- | ------------------------ | -| offset | *number* | - | label 的偏移量 | -| rotate | *number* | - | 文本旋转角度 | -| autoRotate | *boolean |avoidCallback* | `true` | 是否自动旋转 | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | 是否自动隐藏 | -| autoEllipsis | *boolean |avoidCallback |string* | `false` | 是否自动省略 | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | 格式化函数 | -| style | *[ShapeAttrs](/zh/docs/api/graphic-style)* | - | 坐标轴刻度线的样式配置项 | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -标记坐标轴 label 的方向,左侧为 1,右侧为 -1(仅适用于垂直方向的坐标轴) - -##### verticalLimitLength - -**optional** *number* - -配置坐标轴垂直方向的最大限制长度,对文本自适应有很大影响。 - -##### grid - -**optional** *object* - -坐标轴网格线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------------ | -------------------------------------------------------- | -| line | *lineStyle* | 线的样式, | -| alternateColor | *string|string\[]* | 两个栅格线间的填充色 | -| closed | *boolean* | 对于 circle 是否关闭 grid | -| alignTick | *boolean* | 是否同刻度线对齐,如果值为 false,则会显示在两个刻度中间 | - -网格线条样式的配置与 [line](#line) 是一致的。 - -##### line - -**optional** *object* - -坐标轴线的配置项,null 表示不展示。 - - - -> **注意:** 线条样式的完整配置是 `{ style: { stroke: '#ddd', ... } }`, 如果配置线条样式不生效的时候,请检查一下。 - -| 属性名 | 类型 | 介绍 | -| ------------- | ----------------- | ------------------------------------------------------------------------------------------------------ | -| stroke | *string* | 线的颜色 | -| lineWidth | *number* | 线宽 | -| lineDash | *\[number,number]* | 虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| opacity | *number* | 透明度 | -| shadowColor | *string* | 阴影颜色 | -| shadowBlur | *number* | 高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例(设置 x 轴的 grid 网格线条样式): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -坐标轴刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴刻度线的样式。 | -| alignTick | *boolean* | 坐标轴刻度线是否同 tick 对齐 | -| length | *number* | 坐标轴刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -坐标轴子刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴子刻度线的样式。 | -| count | *number* | 子刻度个数 | -| length | *number* | 坐标轴子刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -是否美化。 - -##### min - -**optional** *number* *default:* `0` - -坐标轴最小值。 - -##### max - -**optional** *number* - -坐标轴最大值。 - -##### minLimit - -**optional** *number* - -最小值限定。 - -##### maxLimit - -**optional** *number* - -最大值限定。 - -##### tickCount - -**optional** *number* - -期望的坐标轴刻度数量,非最终结果。 - -##### tickInterval - -**optional** *number* - -坐标轴刻度间隔。 - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -指定 tick 计算方法,或自定义计算 tick 的方法,内置 tick 计算方法包括 `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -动画开关,默认开启。 - -##### animateOption - -**optional** *object* - -动画参数配置。 - -```ts -interface ComponentAnimateCfg { - /** 动画执行时间 */ - readonly duration?: number; - /** 动画缓动函数 */ - readonly easing?: string; - /** 动画延迟时间 */ - readonly delay?: number; -} -// 配置参考 -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` diff --git a/site/docs/common/bar-style.en.md b/site/docs/common/bar-style.en.md deleted file mode 100644 index f6453d665..000000000 --- a/site/docs/common/bar-style.en.md +++ /dev/null @@ -1,94 +0,0 @@ -#### intervalPadding - -**optional**, *number* - -Specify the padding of interval, pixel value. Used in GroupColumn plot. - - - -#### dodgePadding - -**optional**, *number* - -Specify the padding of interval on the same group, pixel value. Used in GroupColumn plot. - - - -#### minBarWidth - -**optional**, *number* - -Specify the min width of bar, pixel value. Auto adapt by default. - -#### maxBarWidth - -**optional**, *number* - -Specify the max width of bar, pixel value. Auto adapt by default. - -#### barStyle - -**optional** *StyleAttr | Function* - -Bar graphic Style. - - - -| Properties | Type | Description | -| ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fill | *string* | Fill color of the shape | -| r | *number* | used in `point`, means the radius of geometry | -| fillOpacity | *number* | Fill opacity of the shape | -| stroke | *string* | Stroke color of the shape | -| lineWidth | *number* | The width of the stroke of the shape | -| lineDash | \[number,number] | Configure dashed line stroke. The first parameter is the length of each segment, and the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| lineOpacity | *number* | Opacity of the stroke | -| opacity | *number* | Opacity of the shape | -| shadowColor | *string* | Shadow color of the shape | -| strokeOpacity | *number* | Stroke opacity of the shape | -| shadowBlur | *number* | Gaussian blur coefficient of the shadow | -| shadowOffsetX | *number* | Configure horizontal distance between shadow and shape | -| shadowOffsetY | *number* | Configure vertical distance between shadow and shape | -| cursor | *string* | Mouse style, same as the mouse style of CSS, default value : 'default' | - -Example: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -More documents about `ShapeStyle`, see [Graphic Style](/en/docs/api/graphic-style). - - -#### barBackground.style - -**optional** *StyleAttr* - -Background style of bar graphic. **Attention**: It doesn't work when `type="line"` in Radial-bar plot. - -Example: - -```ts -{ - barBackground: { - style: { - fill: '#000', - fillOpacity: 0.25, - } - } -} -``` diff --git a/site/docs/common/bar-style.zh.md b/site/docs/common/bar-style.zh.md deleted file mode 100644 index f548dba73..000000000 --- a/site/docs/common/bar-style.zh.md +++ /dev/null @@ -1,94 +0,0 @@ -#### intervalPadding - -**可选**, *number* - -功能描述: 分组柱状图的组间间距调整,像素级别。 - - - -#### dodgePadding - -**可选**, *number* - -功能描述: 分组柱状图的组内柱子间距调整,像素级别。 - - - -#### minBarWidth - -**可选**, *number* - -功能描述: 柱子的最小宽度设置。 - -#### maxBarWidth - -**可选**, *number* - -功能描述: 柱子的最大宽度设置。 - -#### barStyle - -**可选** *StyleAttr | Function* - -功能描述: 样式配置 。 - - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | *string* | 图形的填充色 | -| r | *number* | 用于 `point`, 代表图形的半径大小 | -| fillOpacity | *number* | 图形的填充透明度 | -| stroke | *string* | 图形的描边 | -| lineWidth | *number* | 图形描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 图形的整体透明度 | -| shadowColor | *string* | 图形阴影颜色 | -| strokeOpacity | *number* | 图形边框透明度 | -| shadowBlur | *number* | 图形阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -关于 ShapeStyle 更加详细的文档参考 [绘图属性](/zh/docs/api/graphic-style)。 - - -#### barBackground.style - -**可选** *StyleAttr* - -功能描述:柱子的背景样式配置 。 **注意**: 当玉珏图 `type="line"` 时,柱子背景设置不起作用。 - -Example: - -```ts -{ - barBackground: { - style: { - fill: '#000', - fillOpacity: 0.25, - } - } -} -``` diff --git a/site/docs/common/brush.en.md b/site/docs/common/brush.en.md deleted file mode 100644 index 510498af2..000000000 --- a/site/docs/common/brush.en.md +++ /dev/null @@ -1,79 +0,0 @@ -#### brush - -**optional** *BrushCfg* - -Configuration of brush interaction. - -**Properties** - -Types of *BrushCfg* are as follows: - -| Properties | Type | Description | -| ---------- | ----------- | ------------------------------------------------------------------------------------------------ | -| enabled | *boolean* | 是否开启 brush 刷选交互,默认为:'false' | -| type | *string* | brush 类型,可选项:'rect' | 'x-rect' | 'y-rect' | 'cirlce' | 'path' (polygon). 默认: 'rect' | -| action | *string* | brush action, options: 'filter' | 'highlight'. Default: 'filter' | -| mask | *MaskCfg* | Configuration of mask. | -| button | *ButtonCfg* | Configuration of rRset Button,works when action is equal to 'filter' | - -Types of *MaskCfg* are as follows: - -| Properties | Type | Description | -| ---------- | ------------ | ----------- | -| style | *ShapeAttrs* | mask 样式 | - -Types of *ButtonCfg* are as follows: - -```ts -export type ButtonCfg = { - /** - * padding of button - */ - padding?: number | number[]; - /** - * text of button - */ - text?: string; - /** - * custom style of text - */ - textStyle?: { - default?: ShapeAttrs; - }; - /** - * custom style of button - */ - buttonStyle?: { - default?: ShapeAttrs; - active?: ShapeAttrs; - }; -}; -``` - -**Events** - -1. List of vents of `brush-filter` interaction, - -| Event Name | Description | -| -------------------------------------- | -------------------------------------------------------- | -| `G2.BRUSH_FILTER_EVENTS.BEFORE_FILTER` | Hook before brush event to trigger `filter` append | -| `G2.BRUSH_FILTER_EVENTS.AFTER_FILTER` | Hook after brush event to trigger `filter` append | -| `G2.BRUSH_FILTER_EVENTS.BEFORE_RESET` | Hook before brush event to trigger filter `reset` append | -| `G2.BRUSH_FILTER_EVENTS.AFTER_RESET` | Hook after brush event to trigger filter `reset` append | - -example: - - - -2. List of vents of `brush-highlight` interaction, - -| Event Name | Description | -| ---------------------------------------------------- | ------------------------------------------------------------------- | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.BEFORE_HIGHLIGHT` | Hook before event to trigger element-range `highlight` append | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.AFTER_HIGHLIGHT` | Hook after event to trigger element-range `highlight` append | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.BEFORE_CLEAR` | Hook before event to trigger element-range-highlight `reset` append | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.AFTER_CLEAR` | Hook after event to trigger element-range-highlight `reset` append | - -example: - - diff --git a/site/docs/common/brush.zh.md b/site/docs/common/brush.zh.md deleted file mode 100644 index 407b4b156..000000000 --- a/site/docs/common/brush.zh.md +++ /dev/null @@ -1,81 +0,0 @@ -#### brush - -**optional** *BrushCfg* - -刷选交互配置。 - -**配置项** - -*BrushCfg* 类型定义如下: - -| 属性 | 类型 | 描述 | -| ------- | --------- | --------------------------------------------------------------------------------------------- | -| enabled | *boolean* | 是否开启 brush 刷选交互,默认为:'false' | -| type | *string* | brush 类型,可选项:'rect' | 'x-rect' | 'y-rect' | 'cirlce' | 'path'(不规则矩形). 默认: 'rect' | -| action | *string* | brush 操作,可选项:'filter' | 'highlight'(对应 '筛选过滤' 和 '高亮强调'). 默认: 'filter'. | -| mask | *MaskCfg* | 刷选交互的蒙层 mask UI 配置 | -| button | *ButtonCfg* | 刷选交互的重置按钮配置,只在 action 为 filter 的时候,生效 | - -*MaskCfg* 类型定义如下: - -| 属性 | 类型 | 描述 | -| ----- | ------------ | --------- | -| style | *ShapeAttrs* | mask 样式 | - -*ButtonCfg* 类型定义如下: - -```ts -export type ButtonCfg = { - /** - * 文本与按钮边缘的间距 - */ - padding?: number | number[]; - /** - * 按钮文本 - */ - text?: string; - /** - * 自定义文本样式 - */ - textStyle?: { - default?: ShapeAttrs; - }; - /** - * 自定义按钮样式 - */ - buttonStyle?: { - default?: ShapeAttrs; - active?: ShapeAttrs; - }; -}; -``` - -**事件** - -brush 交互相关事件: - -1. `brush-filter`, 事件列表: - -| 事件名称 | 描述 | -| -------------------------------------- | ------------------------------------------------- | -| `G2.BRUSH_FILTER_EVENTS.BEFORE_FILTER` | Brush 事件触发 “filter” 发生之前的钩子 | -| `G2.BRUSH_FILTER_EVENTS.AFTER_FILTER` | Brush 事件触发 “filter” 发生之后的钩子 | -| `G2.BRUSH_FILTER_EVENTS.BEFORE_RESET` | Brush 事件触发筛选(filter) “reset” 发生之前的钩子 | -| `G2.BRUSH_FILTER_EVENTS.AFTER_RESET` | Brush 事件触发筛选(filter) “reset” 发生之后的钩子 | - -示例: - - - -2. `brush-highlight`, 事件列表: - -| 事件名称 | 描述 | -| ---------------------------------------------------- | --------------------------------------------------------------- | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.BEFORE_HIGHLIGHT` | 事件触发元素区间范围 (“element-range”) 发生“高亮”之前的钩子 | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.AFTER_HIGHLIGHT` | 事件触发元素区间范围 (“element-range”) 发生“高亮”之后的钩子 | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.BEFORE_CLEAR` | 事件触发元素区间范围 (“element-range”) 发生高亮“重置”之前的钩子 | -| `G2.ELEMENT_RANGE_HIGHLIGHT_EVENTS.AFTER_CLEAR` | 事件触发元素区间范围 (“element-range”) 发生高亮“重置”之后的钩子 | - -示例: - - diff --git a/site/docs/common/chart-methods.en.md b/site/docs/common/chart-methods.en.md deleted file mode 100644 index 0992a1796..000000000 --- a/site/docs/common/chart-methods.en.md +++ /dev/null @@ -1,33 +0,0 @@ -#### render() - -Render the chart. - -#### update() - -**optional** - -Update chart configuration and overwrite it without comparing difference. - -Example: - -```ts -plot.update({ - ...currentConfig, - legend: false, -}); -``` - - diff --git a/site/docs/common/chart-methods.zh.md b/site/docs/common/chart-methods.zh.md deleted file mode 100644 index d370fd9b7..000000000 --- a/site/docs/common/chart-methods.zh.md +++ /dev/null @@ -1,30 +0,0 @@ -#### render() - -渲染图表。 - -#### update() - -更新图表配置项,配置覆盖,不会做差异比对。 - -使用示例: - -```ts -plot.update({ - ...currentConfig, - legend: false, -}); -``` - - diff --git a/site/docs/common/chart-options.en.md b/site/docs/common/chart-options.en.md deleted file mode 100644 index b050a43dd..000000000 --- a/site/docs/common/chart-options.en.md +++ /dev/null @@ -1,55 +0,0 @@ -#### width - -**optional** *number* *default:* `400` - -Set the width of the chart. - -#### height - -**optional** *number* *default:* `400` - -Set the height of the chart. - -#### autoFit - -**optional** *boolean* *default:* `true` - -Whether the chart automatically adjusts to fit the container. If it is set to `true`, `width` and `height` configuration would fail. - -#### padding - -**optional** *number\[] | number | 'auto'* - -Set `padding` value of the canvas. You can also use `auto`. - -#### appendPadding - -**optional** *number\[] | number* - -Extra `appendPadding` value. - -#### renderer - -**optional** *string* *default:* `canvas` - -Set the render way to `canvas` or `svg`. - -#### pixelRatio - -**optional** *number* *default:* `window.devicePixelRatio` - -Set the pixel ratio of the chart. - -#### limitInPlot - -**optional** *boolean* - -Whether clip the Geometry beyond the coordinate system。 - - - -#### locale - -**optional** *string* - -Specify the locale. There are two built-in locales: 'zh-CN' and 'en-US'. Or you can use `G2Plot.registerLocale` to register a new locale. Go [src/locales/en\_US.ts](https://github.com/antvis/G2Plot/blob/master/src/locales/en\_US.ts) to see the format. diff --git a/site/docs/common/chart-options.zh.md b/site/docs/common/chart-options.zh.md deleted file mode 100644 index 56cf9218d..000000000 --- a/site/docs/common/chart-options.zh.md +++ /dev/null @@ -1,55 +0,0 @@ -#### width - -**optional** *number* *default:* `400` - -设置图表宽度。 - -#### height - -**optional** *number* *default:* `400` - -设置图表高度。 - -#### autoFit - -**optional** *boolean* *default:* `true` - -图表是否自适应容器宽高。当 `autoFit` 设置为 true 时,`width` 和 `height` 的设置将失效。 - -#### padding - -**optional** *number\[] | number | 'auto'* - -画布的 `padding` 值,代表图表在上右下左的间距,可以为单个数字 `16`,或者数组 `[16, 8, 16, 8]` 代表四个方向,或者开启 `auto`,由底层自动计算间距。 - -#### appendPadding - -**optional** *number\[] | number* - -额外增加的 `appendPadding` 值,在 `padding` 的基础上,设置额外的 padding 数值,可以是单个数字 `16`,或者数组 `[16, 8, 16, 8]` 代表四个方向。 - -#### renderer - -**optional** *string* *default:* `canvas` - -设置图表渲染方式为 `canvas` 或 `svg`。 - -#### pixelRatio - -**optional** *number* *default:* `window.devicePixelRatio` - -设置图表渲染的像素比,和底层的 devicePixelRatio 含义一致,一般不用设置,除非在页面有整体 scale 的情况下,可以自定义。 - -#### limitInPlot - -**optional** *boolean* - -是否对超出坐标系范围的 Geometry 进行剪切。 - - - -#### locale - -**optional** *string* - -指定具体语言,目前内置 'zh-CN' and 'en-US' 两个语言,你也可以使用 `G2Plot.registerLocale` 方法注册新的语言。语言包格式参考:[src/locales/en\_US.ts](https://github.com/antvis/G2Plot/blob/master/src/locales/en\_US.ts) diff --git a/site/docs/common/chord.en.md b/site/docs/common/chord.en.md deleted file mode 100644 index b170fa69f..000000000 --- a/site/docs/common/chord.en.md +++ /dev/null @@ -1,418 +0,0 @@ ---- -title: Chord -order: 28 ---- - -### Plot Container - -#### width - -**optional** *number* *default:* `400` - -Set the width of the chart. - -#### height - -**optional** *number* *default:* `400` - -Set the height of the chart. - -#### autoFit - -**optional** *boolean* *default:* `true` - -Whether the chart automatically adjusts to fit the container. If it is set to `true`, `width` and `height` configuration would fail. - -#### padding - -**optional** *number\[] | number | 'auto'* - -Set `padding` value of the canvas. You can also use `auto`. - -#### appendPadding - -**optional** *number\[] | number* - -Extra `appendPadding` value. - -#### renderer - -**optional** *string* *default:* `canvas` - -Set the render way to `canvas` or `svg`. - -#### pixelRatio - -**optional** *number* *default:* `window.devicePixelRatio` - -Set the pixel ratio of the chart. - -#### limitInPlot - -**optional** *boolean* - -Whether clip the Geometry beyond the coordinate system。 - - - -#### locale - -**optional** *string* - -Specify the locale. There are two built-in locales: 'zh-CN' and 'en-US'. Or you can use `G2Plot.registerLocale` to register a new locale. Go [src/locales/en\_US.ts](https://github.com/antvis/G2Plot/blob/master/src/locales/en\_US.ts) to see the format. - - -### Data Mapping - -#### data - -**required** *array object* - -Configure the chart data source. The data source is a collection of objects, for example:`[{ source: '北京', target: '天津', value: 30 }, ...]`。 - -#### sourceField - -**required** *string* - -Sets the source node data field for the chord chart. For example, for the above data, it is: `source`。 - -#### targetField - -**required** *string* - -Sets the target node data field of the chord graph. For example, for the above data, it is: `target`。 - -#### weightField - -**required** *string* - -Set the weight field information of nodes and edges. The larger the data, the larger the nodes and edges. For example, for the above data, it is: `value`。 - -### Geometry Style - -#### nodeStyle - -**optional** *StyleAttr | Function* - -Configuration of chord graph node styles. - -#### edgeStyle - -**optional** *StyleAttr | Function* - -Configuration of chord graph edge styles. - -#### color - -**optional** *string | string\[] | Function* - -Configure the color. If there is no colorField configured, set one single color. Otherwise you can set a series of colors, or you can use callback function. - -Default: The color board of the theme. - -```ts -// set one single color -{ - color: '#a8ddb5' -} -// set a series of colors -{ - colorField: 'type', // or seriesField in some cases - color: ['#d62728', '#2ca02c', '#000000'], -} -// Function -{ - colorField: 'type', // or seriesField in some cases - color: ({ type }) => { - if(type === 'male'){ - return 'red'; - } - return 'yellow'; - } -} -``` - - -#### nodeWidthRatio - -**optional** *number* - -弦图节点的宽度配置,0 ~ 1,参考画布的宽度,默认为 `0.05`。 - -#### nodePaddingRatio - -**optional** *number* - -弦图节点之间的间距,0 ~ 1,参考画布的高度,默认为 `0.1`。 - -### Plot Event - -On Plot, binding events are removed by `ON` and `OFF` method. - -```ts -// Bind event -plot.on('eventName', callback); -// Bind event, only trigger one time -plot.once('eventName', callback); -// Remove event -plot.off('eventName', callback); -``` - -Composition: `${componentName}:${eventName}` - -Element refers to the type of element to bind to, for example `element`、`legend-item`、`axis-label`、`mask`、`plot`、`legend-item-name`、`reset-button` etc. - -Events correspond to DOM common events, for example `click`、`mousedown`、`mouseup`、`dblclick`、`mouseenter`、`mouseout`、`mouseover`、`mousemove`、`mouseleave`、`contextmenu` etc. And support mobile events: `touchstart`、`touchmove`、`touchend` - -```ts -// Plot adds click events to the entire chart area -plot.on('plot:click', (...args) => { - console.log(...args); -}); - -// Element to add a click event, element represents the graphic elements, graphical elements, please see: https://g2.antv.vision/en/docs/manual/concepts/element -plot.on('element:click', (...args) => { - console.log(...args); -}); - -// Legend adds click events -plot.on('legend-item:click', (...args) => { - console.log(...args); -}); - -// Legend name adds click event -plot.on('legend-item-name:click', (...args) => { - console.log(...args); -}); - -// 给 tooltip 添加点击事件 -plot.on('tooltip:show', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:hide', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:change', (...args) => { - console.log(...args); -}); - -// Label adds click events -plot.on('label:click', (...args) => { - console.log(...args); -}); - -// Mask adds click events -plot.on('mask:click', (...args) => { - console.log(...args); -}); - -// Axis-label adds click events -plot.on('axis-label:click', (...args) => { - console.log(...args); -}); - -// Add click events to the annotation -plot.on('annotation:click', (...args) => { - console.log(...args); -}); -``` - - -### Plot Method - -#### render() - -Render the chart. - -#### update() - -**optional** - -Update chart configuration and overwrite it without comparing difference. - -Example: - -```ts -plot.update({ - ...currentConfig, - legend: false, -}); -``` - - - - -### Plot Theme - -Recommend to use 💄 [ThemeSet](https://theme-set.antv.vision) to customize your theme configurations online. - -#### Built-in Theme - -Built-in defaults: 'default' and 'dark' - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### Theme attributes - -In addition to using the built-in 'default' and 'dark' themes, you can also modify some of the theme content by setting the theme properties. - -The following table lists the specific properties on the configuration items that make up the topic: - -| **Properties** | **Type** | **Description** | -| --------------------- | ---------- | ------------------------------------------------------------------------------------------------------------- | -| defaultColor | *string* | Theme color | -| padding | *number* | number\[] | -| fontFamily | *string* | Chart font | -| colors10 | *string\[]* | Category color palette, used when the number of categories is less than 10 | -| colors20 | *string\[]* | Category color palette, used when the number of categories is greater than 10 | -| columnWidthRatio | *number* | General histogram width ratio, 0-1 range of values | -| maxColumnWidth | *number* | Maximum width of histogram, pixel value | -| minColumnWidth | *number* | Minimum width of histogram, pixel value | -| roseWidthRatio | *number* | Rose width ratio, 0-1 range of value | -| multiplePieWidthRatio | *number* | Multilayer pie and loop ratio, 0-1 range values | -| geometries | *object* | Configure the style of each shape for each Geometry, including the default style and the style for each state | -| components | *object* | Configure theme samples for axes, legends, tooltips, and annotations | -| labels | *object* | Configure the theme style of the label under Geometry | -| innerLabels | *object* | Configure Geometry to display the Labels theme style inside the graph | -| pieLabels | *object* | Configure the theme style of pie chart labels | - -usage: - -```ts -{ - theme: { - colors10: [ - '#FF6B3B', - '#626681', - '#FFC100', - '#9FB40F', - '#76523B', - '#DAD5B5', - '#0E8E89', - '#E19348', - '#F383A2', - '#247FEA', - ]; - } -} -``` - -#### Theme attributes (StyleSheet) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -usage: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir'; - } - } -} -``` - -支持的样式表属性: - -| **Properties** | **Type** | **Description** | -| ----------------------- | -------- | ------------------------------------------------- | -| `backgroundColor` | *string* | Background color | -| `brandColor` | *string* | Brand color,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | Qualitative palette,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | Qualitative palette,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | Semantic red | -| `paletteSemanticGreen` | *string* | Semantic green | -| `paletteSemanticYellow` | *string* | Semantic yellow | -| `fontFamily` | *string* | fontFamily | - -#### Update theme - -usage: - -```ts -// example 1: -plot.update({ theme: 'dark' }); - -// example 2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }); -``` - -#### Custom theme - -In addition, G2 provides a custom topic mechanism to define a new topic structure, allowing users to switch and define chart topics. Go [G2 | Custom theme](https://g2.antv.vision/en/docs/api/advanced/register-theme) for more details. - - - -🌰 Customize theme [DEMO](/zh/examples/general/theme#register-theme) - - -### Plot Interactions - -#### 默认交互 - -```plain -interactions: [{ type: 'element-active' }] -``` - -#### Add interactions - -Usage: - -```ts -// Enable the Active interaction when the mouse moves over a chart element (bar in a bar, dot in a dot, etc.) -interactions: [{ type: 'element-active' }]; - -// Enable multiple interactions -interactions: [{ type: 'element-active' }, { type: 'brush' }]; -``` - -#### Config interactions - -通过 `cfg` 可以对交互行为进行配置,详细参考 [G2 | 修改交互的默认交互](https://g2.antv.vision/en/docs/api/general/interaction/#修改交互的默认交互) - -```ts -// 修改 tooltip 触发事件 -interactions: [ - { - type: 'tooltip', - cfg: { start: [{ trigger: 'element:click', action: 'tooltip:show' }] } - } -] -``` - -#### Remove the interaction - -```ts -// 方式1: 关闭 tooltip 交互 -interactions: [{ type: 'tooltip', enable: false }] - -// 方式2: -plot.chart.removeInteraction('interaction-type'); -``` - -Example: - -```ts -// Removes legend filtering interaction -plot.chart.removeInteraction('legend-filter'); -``` diff --git a/site/docs/common/chord.zh.md b/site/docs/common/chord.zh.md deleted file mode 100644 index 4d0016d3b..000000000 --- a/site/docs/common/chord.zh.md +++ /dev/null @@ -1,367 +0,0 @@ ---- -title: 弦图 -order: 28 ---- - -### Plot Container - -#### width - -**optional** *number* *default:* `400` - -设置图表宽度。 - -#### height - -**optional** *number* *default:* `400` - -设置图表高度。 - -#### autoFit - -**optional** *boolean* *default:* `true` - -图表是否自适应容器宽高。当 `autoFit` 设置为 true 时,`width` 和 `height` 的设置将失效。 - -#### padding - -**optional** *number\[] | number | 'auto'* - -画布的 `padding` 值,代表图表在上右下左的间距,可以为单个数字 `16`,或者数组 `[16, 8, 16, 8]` 代表四个方向,或者开启 `auto`,由底层自动计算间距。 - -#### appendPadding - -**optional** *number\[] | number* - -额外增加的 `appendPadding` 值,在 `padding` 的基础上,设置额外的 padding 数值,可以是单个数字 `16`,或者数组 `[16, 8, 16, 8]` 代表四个方向。 - -#### renderer - -**optional** *string* *default:* `canvas` - -设置图表渲染方式为 `canvas` 或 `svg`。 - -#### pixelRatio - -**optional** *number* *default:* `window.devicePixelRatio` - -设置图表渲染的像素比,和底层的 devicePixelRatio 含义一致,一般不用设置,除非在页面有整体 scale 的情况下,可以自定义。 - -#### limitInPlot - -**optional** *boolean* - -是否对超出坐标系范围的 Geometry 进行剪切。 - - - -#### locale - -**optional** *string* - -指定具体语言,目前内置 'zh-CN' and 'en-US' 两个语言,你也可以使用 `G2Plot.registerLocale` 方法注册新的语言。语言包格式参考:[src/locales/en\_US.ts](https://github.com/antvis/G2Plot/blob/master/src/locales/en\_US.ts) - - -### Data Mapping - -#### data - -**required** *array object* - -设置图表数据源。数据源为对象集合,例如:`[{ source: '北京', target: '天津', value: 30 }, ...]`。 - -#### sourceField - -**required** *string* - -设置弦图的来源节点数据字段。比如针对上述数据,就是: `source`。 - -#### targetField - -**required** *string* - -设置弦图的目标节点数据字段。比如针对上述数据,就是: `target`。 - -#### weightField - -**required** *string* - -设置节点与边的权重字段信息,数据越大,节点与边越大。比如针对上述数据,就是: `value`。 - -### Geometry Style - -#### nodeStyle - -**optional** *StyleAttr | Function* - -弦图节点样式的配置。 - -#### edgeStyle - -**optional** *StyleAttr | Function* - -弦图边样式的配置。 - -#### nodeWidthRatio - -**optional** *number* - -弦图节点的宽度配置,0 ~ 1,参考画布的宽度,默认为 `0.05`。 - -#### nodePaddingRatio - -**optional** *number* - -弦图节点之间的间距,0 ~ 1,参考画布的高度,默认为 `0.1`。 - -### Plot Event - -在 Plot 上通过 `on` 绑定事件、`off` 移除绑定事件。 - -```sign -// 绑定事件 -plot.on('eventName', callback); -// 绑定事件,只触发一次 -plot.once('eventName', callback); -// 移除事件 -plot.off('eventName', callback); -``` - -组合方式: `${componentName}:${eventName}` - -```ts -// plot 添加点击事件,整个图表区域 -plot.on('plot:click', (...args) => { - console.log(...args); -}); - -// element 添加点击事件, element 代表图形元素,关于图形元素,请查看:https://g2.antv.vision/zh/docs/manual/concepts/element -plot.on('element:click', (...args) => { - console.log(...args); -}); - -// 图例添加点击事件 -plot.on('legend-item:click', (...args) => { - console.log(...args); -}); - -// 图例名称添加点击事件 -plot.on('legend-item-name:click', (...args) => { - console.log(...args); -}); - -// 给 tooltip 添加点击事件 -plot.on('tooltip:show', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:hide', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:change', (...args) => { - console.log(...args); -}); - -// label 添加点击事件 -plot.on('label:click', (...args) => { - console.log(...args); -}); - -// mask 添加点击事件 -plot.on('mask:click', (...args) => { - console.log(...args); -}); - -// axis-label 添加点击事件 -plot.on('axis-label:click', (...args) => { - console.log(...args); -}); - -// 给 annotation 添加点击事件 -plot.on('annotation:click', (...args) => { - console.log(...args); -}); -``` - - -### Plot Method - -#### render() - -渲染图表。 - -#### update() - -更新图表配置项,配置覆盖,不会做差异比对。 - -使用示例: - -```ts -plot.update({ - ...currentConfig, - legend: false, -}); -``` - - - - -### Plot Theme - -推荐使用 💄 [ThemeSet](https://theme-set.antv.vision) 在线自定义自己的主题配置。 - -#### 内置主题 - -目前默认的内置主要有两套:`default` 和 `dark` - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### 主题属性 - -除了使用内置的 `default` 和 `dark` 主题之外,还可以通过设置主题属性来修改部分主题内容: - -下表列出了组成主题的大配置项上的具体属性: - -| 主题属性 | 类型 | 描述 | -| --- | --- | ---| -| defaultColor | *string*| 主题色 | -| padding | *number* | number\[] | -| fontFamily | *string* | 图表字体 | -| colors10 | *string\[]* | 分类颜色色板,分类个数小于 10 时使用 | -| colors20 |*string\[]* | 分类颜色色板,分类个数大于 10 时使用 | -| columnWidthRatio | *number* | 一般柱状图宽度占比,0 - 1 范围数值 -| maxColumnWidth | *number* | 柱状图最大宽度,像素值 | -| minColumnWidth| *number* | 柱状图最小宽度,像素值 | -| roseWidthRatio | *number* | 玫瑰图占比,0 - 1 范围数值 | -| multiplePieWidthRatio | *number* | 多层饼图/环图占比,0 - 1 范围数值 | -| geometries | *object* | 配置每个 Geometry 下每个 shape 的样式,包括默认样式以及各个状态下的样式 | -| components | *object* | 配置坐标轴,图例,tooltip, annotation 的主题样式 | -| labels | *object* | 配置 Geometry 下 label 的主题样式 | -| innerLabels | *object* | 配置 Geometry 下展示在图形内部的 labels 的主题样式 | -| pieLabels | *object* | 配置饼图 labels 的主题样式 | - -使用方式: - -```ts -{ - theme: { - colors10: ['#FF6B3B', '#626681', '#FFC100', '#9FB40F', '#76523B', '#DAD5B5', '#0E8E89', '#E19348', '#F383A2', '#247FEA'] - } -} -``` - -#### 主题属性(主题样式表) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -使用方式: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir' - } - } -} -``` - -支持的样式表属性: - -| **属性** | **类型** | **描述** | -| ----------------------- | -------- | ------------- | -| `backgroundColor` | *string* | 背景色 | -| `brandColor` | *string* | 主题色,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | 分类颜色色板,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | 分类颜色色板,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | 语义红色 | -| `paletteSemanticGreen` | *string* | 语义绿色 | -| `paletteSemanticYellow` | *string* | 语义黄色 | -| `fontFamily` | *string* | 字体 | - -#### 更新主题 - -使用方式: - -```ts -// 示例1: -plot.update({ theme: 'dark' }); - -// 示例2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }) -``` - -#### 自定义注册主题 - -另外,还可以通过 G2 提供了自定义主题机制来定义全新的主题结构,以允许用户切换、定义图表主题。前往 [G2 | 自定义主题](https://g2.antv.vision/zh/docs/api/advanced/register-theme) 查看详情。 - - - -🌰 自定义主题 [DEMO](/zh/examples/general/theme#register-theme) 示例 - - -### Plot Interactions - -#### 默认交互 - -```plain -interactions: [{ type: 'element-active' }] -``` - -#### 添加交互 - -```ts -// 开启「鼠标移入图表元素(柱状图的柱子、点图的点等)时触发 active」的交互 -interactions: [{ type: 'element-active' }] - -// 开启多个交互 -interactions: [{ type: 'element-active' }, { type: 'brush' }] -``` - -#### 配置交互 - -通过 `cfg` 可以对交互行为进行配置,详细参考 [G2 | 修改交互的默认交互](https://g2.antv.vision/zh/docs/api/general/interaction/#修改交互的默认交互) - -```ts -// 修改 tooltip 触发事件 -interactions: [ - { - type: 'tooltip', - cfg: { start: [{ trigger: 'element:click', action: 'tooltip:show' }] } - } -] -``` - -#### 移除交互 - -```ts -// 方式1: 关闭 tooltip 交互 -interactions: [{ type: 'tooltip', enable: false }] - -// 方式2: -plot.chart.removeInteraction('interaction-type'); -``` - -使用示例: - -```ts -// 移除 图例筛选 交互 -plot.chart.removeInteraction('legend-filter'); -``` diff --git a/site/docs/common/color.en.md b/site/docs/common/color.en.md deleted file mode 100644 index bdc058c52..000000000 --- a/site/docs/common/color.en.md +++ /dev/null @@ -1,29 +0,0 @@ -#### color - -**optional** *string | string\[] | Function* - -Configure the color. If there is no colorField configured, set one single color. Otherwise you can set a series of colors, or you can use callback function. - -Default: The color board of the theme. - -```ts -// set one single color -{ - color: '#a8ddb5' -} -// set a series of colors -{ - colorField: 'type', // or seriesField in some cases - color: ['#d62728', '#2ca02c', '#000000'], -} -// Function -{ - colorField: 'type', // or seriesField in some cases - color: ({ type }) => { - if(type === 'male'){ - return 'red'; - } - return 'yellow'; - } -} -``` diff --git a/site/docs/common/color.zh.md b/site/docs/common/color.zh.md deleted file mode 100644 index 4a9160ab1..000000000 --- a/site/docs/common/color.zh.md +++ /dev/null @@ -1,29 +0,0 @@ -#### color - -**optional** *string | string\[] | Function* - -指定点的颜色。如没有配置 colorField,指定一个单值即可。对 colorFiled 进行了配置的情况下,即可以指定一系列色值,也可以通过回调函数的方法根据对应数值进行设置。 - -默认配置:采用 theme 中的色板。 - -```ts -// 设置单一颜色 -{ - color: '#a8ddb5' -} -// 设置多色 -{ - colorField: 'type', // 部分图表使用 seriesField - color: ['#d62728', '#2ca02c', '#000000'], -} -// Function -{ - colorField: 'type', // 部分图表使用 seriesField - color: ({ type }) => { - if(type === 'male'){ - return 'red'; - } - return 'yellow'; - } -} -``` diff --git a/site/docs/common/column-style.en.md b/site/docs/common/column-style.en.md deleted file mode 100644 index 7cf6717b9..000000000 --- a/site/docs/common/column-style.en.md +++ /dev/null @@ -1,94 +0,0 @@ -#### intervalPadding - -**optional**, *number* - -Specify the padding of interval, pixel value. Used in GroupColumn plot. - - - -#### dodgePadding - -**optional**, *number* - -Specify the padding of interval on the same group, pixel value. Used in GroupColumn plot. - - - -#### minColumnWidth - -**optional**, *number* - -Specify the min width of column, pixel value. Auto adapt by default. - -#### maxColumnWidth - -**optional**, *number* - -Specify the max width of column, pixel value. Auto adapt by default. - -#### columnStyle - -**optional** *StyleAttr | Function* - -Column graphic Style. - - - -| Properties | Type | Description | -| ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fill | *string* | Fill color of the shape | -| r | *number* | used in `point`, means the radius of geometry | -| fillOpacity | *number* | Fill opacity of the shape | -| stroke | *string* | Stroke color of the shape | -| lineWidth | *number* | The width of the stroke of the shape | -| lineDash | \[number,number] | Configure dashed line stroke. The first parameter is the length of each segment, and the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| lineOpacity | *number* | Opacity of the stroke | -| opacity | *number* | Opacity of the shape | -| shadowColor | *string* | Shadow color of the shape | -| strokeOpacity | *number* | Stroke opacity of the shape | -| shadowBlur | *number* | Gaussian blur coefficient of the shadow | -| shadowOffsetX | *number* | Configure horizontal distance between shadow and shape | -| shadowOffsetY | *number* | Configure vertical distance between shadow and shape | -| cursor | *string* | Mouse style, same as the mouse style of CSS, default value : 'default' | - -Example: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -More documents about `ShapeStyle`, see [Graphic Style](/en/docs/api/graphic-style). - - -#### columnBackground.style - -**optional** *StyleAttr* - -Background style of column graphic - -Example: - -```ts -{ - columnBackground: { - style: { - fill: '#000', - fillOpacity: 0.25, - } - } -} -``` diff --git a/site/docs/common/column-style.zh.md b/site/docs/common/column-style.zh.md deleted file mode 100644 index 8e2a70b6c..000000000 --- a/site/docs/common/column-style.zh.md +++ /dev/null @@ -1,94 +0,0 @@ -#### intervalPadding - -**可选**, *number* - -功能描述: 分组柱状图的组间间距调整,像素级别。 - - - -#### dodgePadding - -**可选**, *number* - -功能描述: 分组柱状图的组内柱子间距调整,像素级别。 - - - -#### minColumnWidth - -**可选**, *number* - -功能描述: 柱子的最小宽度设置。 - -#### maxColumnWidth - -**可选**, *number* - -功能描述: 柱子的最大宽度设置。 - -#### columnStyle - -**可选** *StyleAttr | Function* - -功能描述: 样式配置 。 - - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | *string* | 图形的填充色 | -| r | *number* | 用于 `point`, 代表图形的半径大小 | -| fillOpacity | *number* | 图形的填充透明度 | -| stroke | *string* | 图形的描边 | -| lineWidth | *number* | 图形描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 图形的整体透明度 | -| shadowColor | *string* | 图形阴影颜色 | -| strokeOpacity | *number* | 图形边框透明度 | -| shadowBlur | *number* | 图形阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -关于 ShapeStyle 更加详细的文档参考 [绘图属性](/zh/docs/api/graphic-style)。 - - -#### columnBackground.style - -**可选** *StyleAttr* - -功能描述:柱子的背景样式配置 。 - -Example: - -```ts -{ - columnBackground: { - style: { - fill: '#000', - fillOpacity: 0.25, - } - } -} -``` diff --git a/site/docs/common/common-component.en.md b/site/docs/common/common-component.en.md deleted file mode 100644 index 04e96fecc..000000000 --- a/site/docs/common/common-component.en.md +++ /dev/null @@ -1,1848 +0,0 @@ -#### axis - -xAxis、yAxis 配置相同。**注意**:由于 DualAxes(双轴图) 和 BidirectionalBar(对称条形图) 是双 y 轴, yAxis 类型是以 yField 中的字段作为 `key` 值的`object`。 - -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -For Cartesian coordinates, set the position of the coordinate axes. - -##### title - -**optional** *object* - -A configuration item for the title, NULL means not to be displayed. - -| Properties | Type | Description | -| ---------- | ------------ | -------------------------------------------------------------------------- | -| text | *string* | The title of axis | -| position | *string* | Position of the axis title, default: 'center'. Options: start, center, end | -| offset | *number* | The distance of the title from the coordinate axis | -| spacing | *number* | The distance between the title and the text on the coordinate axis | -| style | *shapeStyle* | Title text configuration items | -| autoRotate | *boolean* | Whether to rotate automatically or not | - -***shapeStyle*** - - - -| Properties | Type | Description | -| ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fill | *string* | Fill color of the shape | -| r | *number* | used in `point`, means the radius of geometry | -| fillOpacity | *number* | Fill opacity of the shape | -| stroke | *string* | Stroke color of the shape | -| lineWidth | *number* | The width of the stroke of the shape | -| lineDash | \[number,number] | Configure dashed line stroke. The first parameter is the length of each segment, and the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| lineOpacity | *number* | Opacity of the stroke | -| opacity | *number* | Opacity of the shape | -| shadowColor | *string* | Shadow color of the shape | -| strokeOpacity | *number* | Stroke opacity of the shape | -| shadowBlur | *number* | Gaussian blur coefficient of the shadow | -| shadowOffsetX | *number* | Configure horizontal distance between shadow and shape | -| shadowOffsetY | *number* | Configure vertical distance between shadow and shape | -| cursor | *string* | Mouse style, same as the mouse style of CSS, default value : 'default' | - -Example: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -More documents about `ShapeStyle`, see [Graphic Style](/en/docs/api/graphic-style). - - -***label*** - -**optional** *object* - -A configuration item for the text label. NULL indicates that it is not displayed. - - - -| Properties | Type | Description | -| ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -| type | *string* | When a user uses a custom label type, need to declare the specific type, otherwise you will use the default label type rendering (pie chart label support `inner | outer | spiders`) | -| offset | *number* | label offset | -| offsetX | *number* | The offset distance of the label from the data point in the X direction | -| offsetY | *number* | The offset distance of the label from the data point in the Y direction | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | Text content that is displayed, if not declared, is displayed according to the value of the first field participating in the mapping | -| style | *ShapeAttrs* | Label text graphic property style | -| autoRotate | *string* | Whether to rotate automatically, default true | -| rotate | *number* | Text rotation Angle | -| labelLine | *null* | *boolean* | *LabelLineCfg* | Used to set the style property of the text connector. NULL indicates that it is not displayed. | -| labelEmit | *boolean* | Only applies to text in polar coordinates, indicating whether the text is radially displayed according to the Angle. True means on and false means off | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | Text layout type, support a variety of layout function combination. | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | Specifies the position of the current Label relative to the current graphic (Only works for column plot and bar plot, which geometry is interval) | -| animate | *boolean | AnimateOption* | Animation configuration. | -| formatter | *Function* | Format function | -| autoHide | *boolean* | Whether to hide it automatically, default to false | - -Types of ***LabelLineCfg*** are as follow: (Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -Example code: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - *AxisLabelCfg | null* **optional** - -Configurations related to axis label. Set this to `null` to prevent the axis label from appearing. The details of \_ AxisLabelCfg\_ are as follows: - -| Properties | Type | | -| ------------ | -------------------------------------------------------- | ------- | --------------------------------------------------------- | -| style | *[ShapeAttrs](/en/docs/api/graphic-style)* | - | Axis label text graphic property style | -| offset | *number* | - | Axis label offset | -| rotate | *number* | - | Axis label text rotation Angle | -| autoRotate | *boolean |avoidCallback* | `true` | Whether to rotate automatically, default true | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | Whether to hide it automatically, default to false | -| autoEllipsis | *boolean* | `false` | Whether to ellipsis label when overflow, default to false | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | Format function | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -Mark the direction of the label on the axis, with 1 to the left and -1 to the right (Only works in vertical axis). - -##### verticalLimitLength - -**optional** *number* - -Configuring the maximum limit length in the vertical direction of the coordinate axis has a significant impact on text adaptation. - -##### grid - -**optional** *object* - -Axis grid line configuration item. NULL means not shown. - -| Properties | Type | Description | -| -------------- | ------------------ | ------------------------------------------------------------------ | -| line | *lineStyle* | The style of the line | -| alternateColor | *string|string\[]* | The fill color between two grid lines | -| closed | *boolean* | Whether to close the grid for circle | -| alignTick | *boolean* | If the value is false, it will be displayed between the two scales | - -Then config of `grid.line` is the same as: [line](#line) - -##### line - -**optional** *object* - -Coordinate axis configuration item, NULL means not displayed. - - - -> **Attention:** The full configuration of lineStyle is `{ style: { stroke: '#ddd', ... } }`, please check it when your configuration doesn't work. - -| Properties | Type | Description | -| ------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| stroke | *string* | color of the line | -| lineWidth | *number* | width of the line | -| lineDash | *\[number,number]* | configure dashed line, the first parameter is the length of each segment, the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| opacity | *number* | opacity | -| shadowColor | *string* | shadow color | -| shadowBlur | *number* | Gaussian blur coefficient | -| shadowOffsetX | *number* | configure horizontal distance between shadow and line | -| shadowOffsetY | *number* | configure vertical distance between shadow and line | -| cursor | *string* | mouse style, same as the mouse style of CSS, default value : 'default' | - -Example (config the grid line style of xAxis): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -The configuration item of the coordinate axis scale line. NULL means not displayed. - -| Properties | Type | Description | -| ---------- | ----------- | -------------------------------------- | -| style | *lineStyle* | The style of tickLine. | -| alignTick | *boolean* | Whether aligh tickLine with tick label | -| length | *number* | The length of tickLine. | - -Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*. The params of *ShapeAttrsCallback* are as follow: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -A configuration item for a coordinate subscale. NULL indicates that it is not displayed. - -| Properties | Type | Description | -| ---------- | ---------------------------------- | -------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | The style of subTickLine. | -| count | *number* | The count of subTickLine. | -| length | *number* | The length of subTickLine. | - -Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*. The params of *ShapeAttrsCallback* are as follow: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -Whether to nice. - -##### min - -**optional** *number* *default:* `0` - -Minimum axis. - -##### max - -**optional** *number* - -Maximum axis. - -##### minLimit - -**optional** *number* - -Minimal limit. - -##### maxLimit - -**optional** *number* - -Maximum limit. - -##### tickCount - -**optional** *number* - -The expected number of axes, not the final result. - -##### tickInterval - -**optional** *number* - -Interval of axes. - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -Specify a tick calculation method, or customize a tick calculation method. Built-in tick calculations include `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -Animation switch, default true. - -##### animateOption - -**optional** *object* - -Animation parameter configuration. - -```ts -interface ComponentAnimateCfg { - /** Duration of the first animation */ - readonly duration?: number; - /** Easing method used for the first animation. */ - readonly easing?: string; - /** Delay before updating the animation */ - readonly delay?: number; -} -// Configure the reference -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` - - -#### legend - -There are two ways to configure legends - -Method 1, pass in 'Boolean' to set whether to display a legend. - -```ts -legend: false; // close legend -``` - -Method 2, pass in *LegendCfg* to configure the legend as a whole. - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - -##### layout - -**optional** *horizontal | vertical* - -Layout of legend. - -##### title - -**optional** *G2LegendTitleCfg* - -Legend title configuration is not displayed by default. *G2LegendTitleCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ----------------------------------------------------------------------------------- | -| title | *string* | Content of legend title | -| spacing | *number* | - | The spacing between the title and the legend item | -| style | *object* | - | Text style configuration item, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -The position of legend is optional:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - - - -##### offsetX - -**optional** *number* - -Legends offset in the x direction. - -##### offsetY - -**optional** *number* - -Legends offset in the y direction. - -##### background - -**optional** *LegendBackgroundCfg* - -Background box configuration item. *LegendBackgroundCFG* is configured as follows: - -| Properties | Type | Description | -| ---------- | ------------------ | ------------------------------------------------------- | -| padding | *number | number\[]* | White space in the background | -| style | *ShapeAttr* | Background style configuration, Reference [Graphic Style](/en/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -Apply to Classification legend,whether to page when there are too many legend items. (⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -Apply to Classification legend. You can set the maximum number of rows when legend items is flip-paged, (only applicable to 'layout:' horizontal '),default: 1. - -##### pageNavigator - -**optional** *object* - -Apply to Classification legend, configure the style of page navigator, it works when legend is in flipPage. Types of *LegendPageNavigatorCfg* are as follow: - -| Properties | Type | Description | -| ------ | --------------------- | -------------- | -| marker.style | *PageNavigatorMarkerStyle* | 分页器指示箭头配置项 | -| text.style | *PageNavigatorTextStyle* | The text style of page info. | - -Types of ***PageNavigatorMarkerStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -Types of ***PageNavigatorTextStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -Example: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -Apply to Classification legend, lengend item height, default null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -Apply to Classification legend, legend item width, default null, automatic calculation. - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -Apply to Classification legend, control the horizontal spacing of legend items. - -##### marker - -**optional** *MarkerCfg* - -Apply to Classification legend, the configuration of the Marker icon of the legend item. - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -Apply to Classification legend, the maximum width of the legend item. 当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。 - -##### maxHeight - -**optional** *number* - -Apply to Classification legend, the maximum height of the legend item. 当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。 - -##### reversed - -**optional** *boolean* -Apply to Classification legend, whether to display legend items in reverse order. - -##### custom - -**optional** *boolean* - -If it is a custom legend, the items property needs to be declared when this property is true. - -##### items - -**optional** *LegendItem\[]* -Apply to Classification legend, the user configures the content of the legend item. *LegendItem* Configuration is as follows: - -| Properties | Type | Required | Description | -| ---------- | ----------- | -------- | ------------------------------------ | -| id | *string* | | Unique value for animation or lookup | -| name | *string* | required | name | -| value | any | required | value | -| marker | *MarkerCfg* | | marker | - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### min - -**optional** *number* - -Apply to Continuous legend, select the minimum value of the range. - -##### max - -**optional** *number* - -Apply to Continuous legend, select the maximum value of the range. - -##### value - -**optional** *number\[]* - -Apply to Continuous legend, 当前选中的范围. - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` -Apply to Continuous legend, whether the slider can slide. - -##### rail - -**optional** *ContinueLegendRailCfg* -Apply to Continuous legend, a style configuration item for the legend slider (background).*ContinueLegendRailCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| type | *string* | - | rail type: color and size, default: 'color' | -| size | *number* | - | The width of the slide rail | -| defaultLength | *number* | - | The default length of the slider, default: 100. When maxWidth,maxHeight is limited, this property is not used and the length is automatically calculated | -| style | *object* | - | Slide rail style, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### label - -**optional** *ContinueLegendLabelCfg* - -Apply to Continuous legend, a configuration item for the text, *ContinueLegendLabelCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| align | *string* | - | The alignment of text with the slider
- rail : Align with the slide rail, at both ends of the slide rail
- top, bottom: Legends are valid when laid out horizontally
- left, right: Legends are valid when laid out vertically | -| style | *object* | - | Text style configuration item, reference [Graphic Style](/zh/docs/api/graphic-style) | -| spacing | *number* | - | The distance between the text and the slide | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### track - -**optional** *ContinueLegendTrackCfg* -Apply to Continuous legend, select the color block style configuration item for the range. *ContinueLegendTrackCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------- | -| style | *object* | - | Selected range of styles, reference [Graphic Style](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -Apply to Continuous legend, configuration items for slider. (暂不支持自定义) - -*ContinueLegendHandlerCfg* is configured as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | --------------------------------------------------------------------------- | -| size | *number* | - | Slider size, default: 10 | -| style | *object* | - | Slider configuration, reference [Graphic Style](/zh/docs/api/graphic-style) | - - -#### label - -> Label configuration is not supported in violin,you can use `annnotation` to replace it. - - - -| Properties | Type | Description | -| ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -| type | *string* | When a user uses a custom label type, need to declare the specific type, otherwise you will use the default label type rendering (pie chart label support `inner | outer | spiders`) | -| offset | *number* | label offset | -| offsetX | *number* | The offset distance of the label from the data point in the X direction | -| offsetY | *number* | The offset distance of the label from the data point in the Y direction | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | Text content that is displayed, if not declared, is displayed according to the value of the first field participating in the mapping | -| style | *ShapeAttrs* | Label text graphic property style | -| autoRotate | *string* | Whether to rotate automatically, default true | -| rotate | *number* | Text rotation Angle | -| labelLine | *null* | *boolean* | *LabelLineCfg* | Used to set the style property of the text connector. NULL indicates that it is not displayed. | -| labelEmit | *boolean* | Only applies to text in polar coordinates, indicating whether the text is radially displayed according to the Angle. True means on and false means off | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | Text layout type, support a variety of layout function combination. | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | Specifies the position of the current Label relative to the current graphic (Only works for column plot and bar plot, which geometry is interval) | -| animate | *boolean | AnimateOption* | Animation configuration. | -| formatter | *Function* | Format function | -| autoHide | *boolean* | Whether to hide it automatically, default to false | - -Types of ***LabelLineCfg*** are as follow: (Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -Example code: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### tooltip - -##### fields - -**optional** *string\[]* - -Specifies the fields to be displayed in the Tooltip. By default, different charts have different default field lists. Use with the 'formatter' configuration for more effect. - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**optional** *Function* - -Formats the contents of the Tooltip Item (you can use `customContent` when content contains multiple tooltipItems). - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**optional** *boolean* *default:* `true` - -Sets whether the Tooltip content box follows the mouse. - -##### enterable - -**optional** *boolean* *default:* `false` - -Whether the tooltip allows mouse to slide in. - -##### showTitle - -**optional** *boolean* *default:* `false` - -Whether show tooltip title. - -##### title - -**optional** *string* - -Set the title content of the Tooltip: If the value is the name of the data field, the value for the field in the data is displayed, and if the field does not exist in the data, the title value is displayed directly. - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -Sets the fixed display location of the Tooltip relative to the data point. - -##### shared - -**optional** *boolean* - -True means that all data corresponding to the current point is merged and displayed, while false means that only the data content closest to the current point is displayed. - -##### showCrosshairs - -**optional** *boolean* *default:* `false` - -Whether show crosshairs。 - -##### crosshairs - -**optional** *object* - -Configure tooltip crosshairs to work if and only if 'showCrosshairs' is true. - -| Properties | Type | Description | -| -------------- | ---------------------- | --------------------------------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | Crosshairs Type: 'X' represents the auxiliary line on the X axis, 'Y' on the Y axis | -| line | *lineStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | Text configuration of crosshairs pointer, support callback | -| textBackground | *textBackgroundStyle* | Guideline text background configuration | -| follow | *boolean* | Whether the guide line follows the mouse. Default is false, that is, to locate the data point | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| Properties | Type | Description | -| ---------- | -------------------- | ------------------------------------------- | -| padding | *number | number\[]* | White space around the background of a text | -| style | *shapeStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style) | - -##### showMarkers - -**optional** *boolean* *default:* `true` - -Whether to render TooltipMarkers. - -##### marker - -**optional** *ShapeAttrs* - -TooltipMarker style configuration. - -Please refer to the style configuration [ShapeAttrs](/en/docs/api/graphic-style) - -##### showContent - -**optional** *boolean* *default:* `false` - -Whether to display the Tooltip content box. - -##### container - -**optional** *string|HTMLElement* - -Custom tooltip container. - -##### containerTpl - -**optional** *string* - -Templates used to specify the legend container must include the classes of each DOM node when customizing the template - -##### itemTpl - -**optional** *string* - -The default template for each record, which must include the classes of each DOM node when customizing the template. - -##### domStyles - -**optional** *TooltipDomStyles* - -The styles for each DOM. - -dom-styles - -```ts -/** Tooltip content box css style */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**optional** *number* - -Tooltip offset. - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems ✨ - -**optional** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - -##### customContent - -**optional** *Function* - -Support for custom templates. [Live demo](/en/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/common-component.zh.md b/site/docs/common/common-component.zh.md deleted file mode 100644 index 6f3705df7..000000000 --- a/site/docs/common/common-component.zh.md +++ /dev/null @@ -1,1888 +0,0 @@ -#### axis - -xAxis、yAxis 配置相同。**注意**:由于 DualAxes(双轴图) 和 BidirectionalBar(对称条形图) 是双 y 轴, yAxis 类型是以 yField 中的字段作为 `key` 值的`object`。 - -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -适用于直角坐标系,设置坐标轴的位置。 - -##### title - -**optional** *object* - -标题的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------ | --------------------------------------------------------- | -| text | *string* | 坐标轴标题 | -| position | *string* | 轴标题的位置,默认:'center'。可选项: start, center, end | -| offset | *number* | 标题距离坐标轴的距离 | -| spacing | *number* | 标题距离坐标轴文本的距离 | -| style | *shapeStyle* | 标题文本配置项 | -| autoRotate | *boolean* | 是否自动旋转 | - -***shapeStyle*** - - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | *string* | 图形的填充色 | -| r | *number* | 用于 `point`, 代表图形的半径大小 | -| fillOpacity | *number* | 图形的填充透明度 | -| stroke | *string* | 图形的描边 | -| lineWidth | *number* | 图形描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 图形的整体透明度 | -| shadowColor | *string* | 图形阴影颜色 | -| strokeOpacity | *number* | 图形边框透明度 | -| shadowBlur | *number* | 图形阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -关于 ShapeStyle 更加详细的文档参考 [绘图属性](/zh/docs/api/graphic-style)。 - - -***label*** - -**optional** *object* - -文本标签的配置项,null 表示不展示。 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - **optional** *AxisLabelCfg | null* - -文本标签的配置项,null 表示不展示。*AxisLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------------------------------------- | ------- | ------------------------ | -| offset | *number* | - | label 的偏移量 | -| rotate | *number* | - | 文本旋转角度 | -| autoRotate | *boolean |avoidCallback* | `true` | 是否自动旋转 | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | 是否自动隐藏 | -| autoEllipsis | *boolean |avoidCallback |string* | `false` | 是否自动省略 | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | 格式化函数 | -| style | *[ShapeAttrs](/zh/docs/api/graphic-style)* | - | 坐标轴刻度线的样式配置项 | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -标记坐标轴 label 的方向,左侧为 1,右侧为 -1(仅适用于垂直方向的坐标轴) - -##### verticalLimitLength - -**optional** *number* - -配置坐标轴垂直方向的最大限制长度,对文本自适应有很大影响。 - -##### grid - -**optional** *object* - -坐标轴网格线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------------ | -------------------------------------------------------- | -| line | *lineStyle* | 线的样式, | -| alternateColor | *string|string\[]* | 两个栅格线间的填充色 | -| closed | *boolean* | 对于 circle 是否关闭 grid | -| alignTick | *boolean* | 是否同刻度线对齐,如果值为 false,则会显示在两个刻度中间 | - -网格线条样式的配置与 [line](#line) 是一致的。 - -##### line - -**optional** *object* - -坐标轴线的配置项,null 表示不展示。 - - - -> **注意:** 线条样式的完整配置是 `{ style: { stroke: '#ddd', ... } }`, 如果配置线条样式不生效的时候,请检查一下。 - -| 属性名 | 类型 | 介绍 | -| ------------- | ----------------- | ------------------------------------------------------------------------------------------------------ | -| stroke | *string* | 线的颜色 | -| lineWidth | *number* | 线宽 | -| lineDash | *\[number,number]* | 虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| opacity | *number* | 透明度 | -| shadowColor | *string* | 阴影颜色 | -| shadowBlur | *number* | 高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例(设置 x 轴的 grid 网格线条样式): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -坐标轴刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴刻度线的样式。 | -| alignTick | *boolean* | 坐标轴刻度线是否同 tick 对齐 | -| length | *number* | 坐标轴刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -坐标轴子刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴子刻度线的样式。 | -| count | *number* | 子刻度个数 | -| length | *number* | 坐标轴子刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -是否美化。 - -##### min - -**optional** *number* *default:* `0` - -坐标轴最小值。 - -##### max - -**optional** *number* - -坐标轴最大值。 - -##### minLimit - -**optional** *number* - -最小值限定。 - -##### maxLimit - -**optional** *number* - -最大值限定。 - -##### tickCount - -**optional** *number* - -期望的坐标轴刻度数量,非最终结果。 - -##### tickInterval - -**optional** *number* - -坐标轴刻度间隔。 - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -指定 tick 计算方法,或自定义计算 tick 的方法,内置 tick 计算方法包括 `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -动画开关,默认开启。 - -##### animateOption - -**optional** *object* - -动画参数配置。 - -```ts -interface ComponentAnimateCfg { - /** 动画执行时间 */ - readonly duration?: number; - /** 动画缓动函数 */ - readonly easing?: string; - /** 动画延迟时间 */ - readonly delay?: number; -} -// 配置参考 -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` - - -#### legend - -配置图例有两种方式 -第一种,传入 `boolean` 设置是否显示图例。 - -```ts -legend: false; // 关闭图例 -``` - -第二种,传入 *LegendCfg* 对图例进行整体配置。 - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - -##### layout - -**optional** *horizontal | vertical* - -图例布局方式。提供横向布局和纵向布局。 - -##### title - -**optional** *G2LegendTitleCfg* - -图例标题配置,默认不展示。*G2LegendTitleCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------- | ------------------------------------------------------------ | -| title | *string* | 文本显示内容 | -| spacing | *number* | 标题同图例项的间距 | -| style | *object* | 文本样式配置项,参考  [绘图属性](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -图例位置,可选项:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - -尝试一下: - - - -##### offsetX - -**optional** *number* - -图例 x 方向的偏移。 - -##### offsetY - -**optional** *number* - -图例 y 方向的偏移。 - -##### background - -**optional** *LegendBackgroundCfg* - -背景框配置项。*LegendBackgroundCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| padding | *number | number\[]* | 背景的留白 | -| style | *ShapeAttr* | 背景样式配置项, 参考[绘图属性](/zh/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -适用于 分类图例,当图例项过多时是否进行分页。(⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -适用于 分类图例,当图例项过多分页时,可以设置最大行数(仅适用于 `layout: 'horizontal'`),默认为:1。 - -##### pageNavigator - -**optional** *object* - -适用于 分类图例,图例分页导航器的主题样式设置。*LegendPageNavigatorCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------- | ------ | ----------------------- | -| marker.style | *PageNavigatorMarkerStyle* | - | 分页器指示箭头 样式配置 | -| text.style | *PageNavigatorTextStyle* | - | 分页器页面信息 样式配置 | - -***PageNavigatorMarkerStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------------- | -------- | ------ | ---------------------------------------------------------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -***PageNavigatorTextStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| -------- | -------- | ------ | ---------------------------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -示例: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -适用于 分类图例,图例的高度, 默认为 null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -适用于 分类图例,图例项的宽度, 默认为 null,自动计算。 - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -适用于 分类图例,控制图例项水平方向的间距。 - -##### label - -**optional** *ContinueLegendLabelCfg* - -适用于 连续图例,文本的配置项。*ContinueLegendLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | -------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| align | *string* | - | 文本同滑轨的对齐方式
- rail : 同滑轨对齐,在滑轨的两端
- top, bottom: 图例水平布局时有效
- left, right: 图例垂直布局时有效 | -| style | *object* | - | 文本样式配置项,详见  [绘图属性](/zh/docs/api/graphic-style) | -| spacing | *number* | - | 文本同滑轨的距离 | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### marker - -**optional** *MarkerCfg | MarkerCfgCallback* - -适用于 分类图例,图例项的 marker 图标的配置。 - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -```sign -type LegendItem = { name: string; value: string; } & MarkerCfg; - -type MarkerCfgCallback = (name: string, index: number, item: LegendItem) => MarkerCfg; -``` - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -适用于 分类图例,图例项容器最大宽度设置。当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxWidth = Math.min(maxWidth, maxWidthRatio * viewBBox.width); -``` - -##### maxHeight - -**optional** *number* - -适用于 分类图例,图例项容器最大高度设置。当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxHeight = Math.min(maxHeight, maxHeightRatio * viewBBox.height); -``` - -##### reversed - -**optional** *boolean* - -适用于 分类图例,是否将图例项逆序展示。 - -##### custom - -**optional** *boolean* - -是否为自定义图例,当该属性为 true 时,需要声明 items 属性。 - -##### items - -**optional** *LegendItem\[]* -适用于 分类图例,用户自己配置图例项的内容。*LegendItem* 配置如下: - -| 参数名 | 类型 | 是否必选 | 描述 | -| ------ | ----------- | -------- | ------------------------ | -| id | *string* | | 唯一值,用于动画或者查找 | -| name | *string* | required | 名称 | -| value | any | required | 值 | -| marker | *MarkerCfg* | | 图形标记 | - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -##### min - -**optional** *number* - -适用于 连续图例,选择范围的最小值。 - -##### max - -**optional** *number* - -适用于 连续图例,选择范围的最大值。 - -##### value - -**optional** *number\[]* - -适用于 连续图例,当前选中的范围。 - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` - -适用于 连续图例,滑块是否可以滑动。 - -##### rail - -**optional** *ContinueLegendRailCfg* - -适用于 连续图例,图例滑轨(背景)的样式配置项。*ContinueLegendRailCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------------- | -------- | -------------------------------------------------------------------------------- | -| type | *string* | rail 的类型,color, size,默认:'color' | -| size | *number* | 滑轨的宽度 | -| defaultLength | *number* | 滑轨的默认长度,默认:100。当限制了 maxWidth,maxHeight 时,不会使用这个属性会自动计算长度 | -| style | *object* | 滑轨的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### track - -**optional** *ContinueLegendTrackCfg* -适用于 连续图例,选择范围的色块样式配置项。*ContinueLegendTrackCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| style | *object* | - | 选定范围的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -适用于 连续图例,滑块的配置项。(暂不支持自定义) - -*ContinueLegendHandlerCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| size | *number* | - | 滑块的大小,默认:10 | -| style | *object* | - | 滑块的样式设置,参考 [绘图属性](/zh/docs/api/graphic-style) | - - -#### label - -> 小提琴图暂时不支持 label 展示,可以使用 annnotation 进行替代 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### tooltip - -##### fields - -**可选** *string\[]* - -指定 tooltip 中显示的字段,默认不同图表有不同的默认字段列表。配合 `formatter` 配置一起使用,效果更佳。 - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**可选** *Function* - -格式化 tooltip item 内容(暂时不支持多 tooltipItems 的格式化,可以使用 `customContent` 处理) - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**可选** *boolean* *default:* `true` - -设置 tooltip 内容框是否跟随鼠标移动。 - -##### enterable - -**可选** *boolean* *default:* `false` - -tooltip 是否允许鼠标滑入。 - -##### showTitle - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 标题。 - -##### title - -**可选** *string* - -设置 tooltip 的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,则直接展示 title 值。 - -##### position - -**可选** *`top` | `bottom` | `left` | `right`* - -设置 tooltip 的固定展示位置,相对于数据点。 - -##### shared - -**可选** *boolean* - -true 表示合并当前点对应的所有数据并展示,false 表示只展示离当前点最逼近的数据内容。 - -##### showCrosshairs - -**可选** *boolean* *default:* `false` - -是否展示 crosshairs。 - -##### crosshairs - -**可选** *object* - -配置 tooltip 的 crosshairs,当且仅当 `showCrosshairs` 为 true 时生效。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | --------------------- | ------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | crosshairs 的类型: `x` 表示 x 轴上的辅助线,`y` 表示 y 轴上的辅助项 | -| line | *lineStyle* | 线的配置项,详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | 辅助线文本配置,支持回调 | -| textBackground | *TextBackgroundStyle* | 辅助线文本背景配置 | -| follow | *boolean* | 辅助线是否跟随鼠标移动,默认为 false,即定位到数据点 | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | -------------------- | ------------------ | -| padding | *number | number\[]* | 文本背景周围的留白 | -| style | *shapeStyle* | 线的配置项, 详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style) | - -##### showMarkers - -**可选** *boolean* *default:* `true` - -是否渲染 tooltipMarkers。 - -##### marker - -**可选** *ShapeAttrs* - -tooltipMarker 的样式配置。 - -样式配置类型,详细可见: [ShapeAttrs](/zh/docs/api/graphic-style) - -##### showContent - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 内容框。 - -##### container - -**可选** *string|HTMLElement* - -自定义 tooltip 的容器。 - -##### containerTpl - -**可选** *string* - -用于指定图例容器的模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### itemTpl - -**可选** *string* - -每项记录的默认模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### domStyles - -**可选** *TooltipDomStyles* - -传入各个 dom 的样式。 - -dom-styles - -```ts -/** Tooltip 内容框的 css 样式定义 */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**可选** *number* - -tooltip 偏移量。 - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems - -**可选** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - - - -##### customContent - -**可选** *Function* - -支持自定义模板。[在线示例](/zh/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/common-iview.en.md b/site/docs/common/common-iview.en.md deleted file mode 100644 index 4fce4ebd9..000000000 --- a/site/docs/common/common-iview.en.md +++ /dev/null @@ -1,81 +0,0 @@ -#### IView.meta - -**optional** *object* - -Configure the meta of each data field of the chart in global, to define the type and presentation of data. Configuration of the meta will affect the text content of all components. - -| Properties | Type | Description | -| ---------- | ---------- | -------------------------------------------------------- | -| alias | *string* | alias of the data field | -| formatter | *function* | callback function to format all values of the data field | -| values | *string\[]* | enumerate all the values of the data field | -| range | *number\[]* | mapping range of the data field, default: \[0,1] | - -See also the [Meta Options](/en/docs/api/options/meta) to learn more about configuration of `meta`. - - -#### IView.coordinate - -Configuration of coordinate, every view has its own coordinate. The geometries of the same view share the same coordinate system. - -| Properties | Type | Description | -| ------- | --------------- | -------------------------------------------------------- | -| type | *string* | `'polar' | 'theta' | 'rect' | 'cartesian' | 'helix'` | -| cfg | *CoordinateCfg* | CoordinateCfg 坐标系配置项,目前常用于极坐标 | -| actions | *array object* | 坐标系的变换配置,具体可以见 G2 坐标系[文档](https://g2.antv.vision/en/docs/api/general/coordinate) - -
- -```ts -type CoordinateCfg = { - // 用于极坐标,配置起始弧度。 - startAngle?: number; - // 用于极坐标,配置结束弧度。 - endAngle?: number; - // 用于极坐标,配置极坐标半径,0 - 1 范围的数值。 - radius?: number; - // 用于极坐标,极坐标内半径,0 -1 范围的数值。 - innerRadius?: number; -}; -``` - -
-#### IView.axes - -**optional** *object | false* - -view 上的图形坐标轴配置,key 值对应 `xField` 和 `yField`, value 具体配置见:[Axis API](/en/docs/api/components/axis) - -
- -```ts -{ - [field]: AxisOptions | false, -} -``` - -
- -#### IView.annotations - -**optional** *object\[]* - -Annotations of geometry in view, see more: [Annotations API](/en/docs/api/components/annotations) - -#### IView.interactions - -**optional** *object\[]* - -Interactions of view, see more: [Interactions API](/en/docs/api/options/interactions) - -#### IView.tooltip - -**optional** *object* - -Tooltip of view, see more: [Tooltip API](/en/docs/api/options/tooltip) - -#### IView.animation - -**optional** *object* - -Animation of view, see more: [Animation API](/en/docs/api/options/animation) diff --git a/site/docs/common/common-iview.zh.md b/site/docs/common/common-iview.zh.md deleted file mode 100644 index a3bd3d5a4..000000000 --- a/site/docs/common/common-iview.zh.md +++ /dev/null @@ -1,82 +0,0 @@ -#### IView.meta - -**optional** *object* - -全局化配置图表数据元信息,以字段为单位进行配置,来定义数据的类型和展示方式。在 meta 上的配置将同时影响所有组件的文本信息。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------- | ------------------------------------------- | -| alias | *string* | 字段的别名 | -| formatter | *function* | callback 方法,对该字段所有值进行格式化处理 | -| values | *string\[]* | 枚举该字段下所有值 | -| range | *number\[]* | 字段的数据映射区间,默认为\[0,1] | - -关于 `meta` 的更多配置项,请查看 [Meta Options](/zh/docs/api/options/meta) - - -#### IView.coordinate - -坐标系的配置,每一个 view 具有自己的坐标系。同一个 view 下的 geometries 共用一个坐标系。 - -| 参数名 | 类型 | 可选值 | | -| ------- | --------------- | --------------------------------------------------------------------------------------------------- | -| type | *string* | `'polar' \| 'theta' \| 'rect' \| 'cartesian' \| 'helix'` | -| cfg | *CoordinateCfg* | CoordinateCfg 坐标系配置项,目前常用于极坐标 | -| actions | *array object* | 坐标系的变换配置,具体可以见 G2 坐标系[文档](https://g2.antv.vision/zh/docs/api/general/coordinate) | - -
- -```ts -type CoordinateCfg = { - // 用于极坐标,配置起始弧度。 - startAngle?: number; - // 用于极坐标,配置结束弧度。 - endAngle?: number; - // 用于极坐标,配置极坐标半径,0 - 1 范围的数值。 - radius?: number; - // 用于极坐标,极坐标内半径,0 -1 范围的数值。 - innerRadius?: number; -}; -``` - -
- -#### IView.axes - -**可选** *object | false* - -view 上的图形坐标轴配置,key 值对应 `xField` 和 `yField`, value 具体配置见:[Axis API](/zh/docs/api/components/axis) - -
- -```ts -{ - [field]: AxisOptions | false, -} -``` - -
- -#### IView.annotations - -**可选** *object\[]* - -view 上的几何图形的图形标注配置。具体见:[Annotations API](/zh/docs/api/components/annotations) - -#### IView.interactions - -**可选** *object\[]* - -view 上的交互配置。具体见:[Interactions API](/zh/docs/api/options/interactions) - -#### IView.tooltip - -**可选** *object* - -每一个子 view 的 tooltip 配置。具体见:[Tooltip API](/zh/docs/api/options/tooltip) - -#### IView.animation - -**可选** *object* - -每一个子 view 的动画配置。具体见:[Animation API](/zh/docs/api/options/animation) diff --git a/site/docs/common/component-no-axis.en.md b/site/docs/common/component-no-axis.en.md deleted file mode 100644 index 07ce8a769..000000000 --- a/site/docs/common/component-no-axis.en.md +++ /dev/null @@ -1,1501 +0,0 @@ -#### tooltip - -##### fields - -**optional** *string\[]* - -Specifies the fields to be displayed in the Tooltip. By default, different charts have different default field lists. Use with the 'formatter' configuration for more effect. - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**optional** *Function* - -Formats the contents of the Tooltip Item (you can use `customContent` when content contains multiple tooltipItems). - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**optional** *boolean* *default:* `true` - -Sets whether the Tooltip content box follows the mouse. - -##### enterable - -**optional** *boolean* *default:* `false` - -Whether the tooltip allows mouse to slide in. - -##### showTitle - -**optional** *boolean* *default:* `false` - -Whether show tooltip title. - -##### title - -**optional** *string* - -Set the title content of the Tooltip: If the value is the name of the data field, the value for the field in the data is displayed, and if the field does not exist in the data, the title value is displayed directly. - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -Sets the fixed display location of the Tooltip relative to the data point. - -##### shared - -**optional** *boolean* - -True means that all data corresponding to the current point is merged and displayed, while false means that only the data content closest to the current point is displayed. - -##### showCrosshairs - -**optional** *boolean* *default:* `false` - -Whether show crosshairs。 - -##### crosshairs - -**optional** *object* - -Configure tooltip crosshairs to work if and only if 'showCrosshairs' is true. - -| Properties | Type | Description | -| -------------- | ---------------------- | --------------------------------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | Crosshairs Type: 'X' represents the auxiliary line on the X axis, 'Y' on the Y axis | -| line | *lineStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | Text configuration of crosshairs pointer, support callback | -| textBackground | *textBackgroundStyle* | Guideline text background configuration | -| follow | *boolean* | Whether the guide line follows the mouse. Default is false, that is, to locate the data point | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| Properties | Type | Description | -| ---------- | -------------------- | ------------------------------------------- | -| padding | *number | number\[]* | White space around the background of a text | -| style | *shapeStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style) | - -##### showMarkers - -**optional** *boolean* *default:* `true` - -Whether to render TooltipMarkers. - -##### marker - -**optional** *ShapeAttrs* - -TooltipMarker style configuration. - -Please refer to the style configuration [ShapeAttrs](/en/docs/api/graphic-style) - -##### showContent - -**optional** *boolean* *default:* `false` - -Whether to display the Tooltip content box. - -##### container - -**optional** *string|HTMLElement* - -Custom tooltip container. - -##### containerTpl - -**optional** *string* - -Templates used to specify the legend container must include the classes of each DOM node when customizing the template - -##### itemTpl - -**optional** *string* - -The default template for each record, which must include the classes of each DOM node when customizing the template. - -##### domStyles - -**optional** *TooltipDomStyles* - -The styles for each DOM. - -dom-styles - -```ts -/** Tooltip content box css style */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**optional** *number* - -Tooltip offset. - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems ✨ - -**optional** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - -##### customContent - -**optional** *Function* - -Support for custom templates. [Live demo](/en/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### label - -Configure label style. - - - -| Properties | Type | Description | -| ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -| type | *string* | When a user uses a custom label type, need to declare the specific type, otherwise you will use the default label type rendering (pie chart label support `inner | outer | spiders`) | -| offset | *number* | label offset | -| offsetX | *number* | The offset distance of the label from the data point in the X direction | -| offsetY | *number* | The offset distance of the label from the data point in the Y direction | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | Text content that is displayed, if not declared, is displayed according to the value of the first field participating in the mapping | -| style | *ShapeAttrs* | Label text graphic property style | -| autoRotate | *string* | Whether to rotate automatically, default true | -| rotate | *number* | Text rotation Angle | -| labelLine | *null* | *boolean* | *LabelLineCfg* | Used to set the style property of the text connector. NULL indicates that it is not displayed. | -| labelEmit | *boolean* | Only applies to text in polar coordinates, indicating whether the text is radially displayed according to the Angle. True means on and false means off | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | Text layout type, support a variety of layout function combination. | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | Specifies the position of the current Label relative to the current graphic (Only works for column plot and bar plot, which geometry is interval) | -| animate | *boolean | AnimateOption* | Animation configuration. | -| formatter | *Function* | Format function | -| autoHide | *boolean* | Whether to hide it automatically, default to false | - -Types of ***LabelLineCfg*** are as follow: (Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -Example code: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### legend - -There are two ways to configure legends - -Method 1, pass in 'Boolean' to set whether to display a legend. - -```ts -legend: false; // close legend -``` - -Method 2, pass in *LegendCfg* to configure the legend as a whole. - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - -##### layout - -**optional** *horizontal | vertical* - -Layout of legend. - -##### title - -**optional** *G2LegendTitleCfg* - -Legend title configuration is not displayed by default. *G2LegendTitleCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ----------------------------------------------------------------------------------- | -| title | *string* | Content of legend title | -| spacing | *number* | - | The spacing between the title and the legend item | -| style | *object* | - | Text style configuration item, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -The position of legend is optional:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - - - -##### offsetX - -**optional** *number* - -Legends offset in the x direction. - -##### offsetY - -**optional** *number* - -Legends offset in the y direction. - -##### background - -**optional** *LegendBackgroundCfg* - -Background box configuration item. *LegendBackgroundCFG* is configured as follows: - -| Properties | Type | Description | -| ---------- | ------------------ | ------------------------------------------------------- | -| padding | *number | number\[]* | White space in the background | -| style | *ShapeAttr* | Background style configuration, Reference [Graphic Style](/en/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -Apply to Classification legend,whether to page when there are too many legend items. (⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -Apply to Classification legend. You can set the maximum number of rows when legend items is flip-paged, (only applicable to 'layout:' horizontal '),default: 1. - -##### pageNavigator - -**optional** *object* - -Apply to Classification legend, configure the style of page navigator, it works when legend is in flipPage. Types of *LegendPageNavigatorCfg* are as follow: - -| Properties | Type | Description | -| ------ | --------------------- | -------------- | -| marker.style | *PageNavigatorMarkerStyle* | 分页器指示箭头配置项 | -| text.style | *PageNavigatorTextStyle* | The text style of page info. | - -Types of ***PageNavigatorMarkerStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -Types of ***PageNavigatorTextStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -Example: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -Apply to Classification legend, lengend item height, default null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -Apply to Classification legend, legend item width, default null, automatic calculation. - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -Apply to Classification legend, control the horizontal spacing of legend items. - -##### marker - -**optional** *MarkerCfg* - -Apply to Classification legend, the configuration of the Marker icon of the legend item. - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -Apply to Classification legend, the maximum width of the legend item. 当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。 - -##### maxHeight - -**optional** *number* - -Apply to Classification legend, the maximum height of the legend item. 当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。 - -##### reversed - -**optional** *boolean* -Apply to Classification legend, whether to display legend items in reverse order. - -##### custom - -**optional** *boolean* - -If it is a custom legend, the items property needs to be declared when this property is true. - -##### items - -**optional** *LegendItem\[]* -Apply to Classification legend, the user configures the content of the legend item. *LegendItem* Configuration is as follows: - -| Properties | Type | Required | Description | -| ---------- | ----------- | -------- | ------------------------------------ | -| id | *string* | | Unique value for animation or lookup | -| name | *string* | required | name | -| value | any | required | value | -| marker | *MarkerCfg* | | marker | - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### min - -**optional** *number* - -Apply to Continuous legend, select the minimum value of the range. - -##### max - -**optional** *number* - -Apply to Continuous legend, select the maximum value of the range. - -##### value - -**optional** *number\[]* - -Apply to Continuous legend, 当前选中的范围. - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` -Apply to Continuous legend, whether the slider can slide. - -##### rail - -**optional** *ContinueLegendRailCfg* -Apply to Continuous legend, a style configuration item for the legend slider (background).*ContinueLegendRailCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| type | *string* | - | rail type: color and size, default: 'color' | -| size | *number* | - | The width of the slide rail | -| defaultLength | *number* | - | The default length of the slider, default: 100. When maxWidth,maxHeight is limited, this property is not used and the length is automatically calculated | -| style | *object* | - | Slide rail style, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### label - -**optional** *ContinueLegendLabelCfg* - -Apply to Continuous legend, a configuration item for the text, *ContinueLegendLabelCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| align | *string* | - | The alignment of text with the slider
- rail : Align with the slide rail, at both ends of the slide rail
- top, bottom: Legends are valid when laid out horizontally
- left, right: Legends are valid when laid out vertically | -| style | *object* | - | Text style configuration item, reference [Graphic Style](/zh/docs/api/graphic-style) | -| spacing | *number* | - | The distance between the text and the slide | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### track - -**optional** *ContinueLegendTrackCfg* -Apply to Continuous legend, select the color block style configuration item for the range. *ContinueLegendTrackCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------- | -| style | *object* | - | Selected range of styles, reference [Graphic Style](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -Apply to Continuous legend, configuration items for slider. (暂不支持自定义) - -*ContinueLegendHandlerCfg* is configured as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | --------------------------------------------------------------------------- | -| size | *number* | - | Slider size, default: 10 | -| style | *object* | - | Slider configuration, reference [Graphic Style](/zh/docs/api/graphic-style) | - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/component-no-axis.zh.md b/site/docs/common/component-no-axis.zh.md deleted file mode 100644 index ee7e49d0f..000000000 --- a/site/docs/common/component-no-axis.zh.md +++ /dev/null @@ -1,1539 +0,0 @@ -#### tooltip - -##### fields - -**可选** *string\[]* - -指定 tooltip 中显示的字段,默认不同图表有不同的默认字段列表。配合 `formatter` 配置一起使用,效果更佳。 - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**可选** *Function* - -格式化 tooltip item 内容(暂时不支持多 tooltipItems 的格式化,可以使用 `customContent` 处理) - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**可选** *boolean* *default:* `true` - -设置 tooltip 内容框是否跟随鼠标移动。 - -##### enterable - -**可选** *boolean* *default:* `false` - -tooltip 是否允许鼠标滑入。 - -##### showTitle - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 标题。 - -##### title - -**可选** *string* - -设置 tooltip 的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,则直接展示 title 值。 - -##### position - -**可选** *`top` | `bottom` | `left` | `right`* - -设置 tooltip 的固定展示位置,相对于数据点。 - -##### shared - -**可选** *boolean* - -true 表示合并当前点对应的所有数据并展示,false 表示只展示离当前点最逼近的数据内容。 - -##### showCrosshairs - -**可选** *boolean* *default:* `false` - -是否展示 crosshairs。 - -##### crosshairs - -**可选** *object* - -配置 tooltip 的 crosshairs,当且仅当 `showCrosshairs` 为 true 时生效。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | --------------------- | ------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | crosshairs 的类型: `x` 表示 x 轴上的辅助线,`y` 表示 y 轴上的辅助项 | -| line | *lineStyle* | 线的配置项,详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | 辅助线文本配置,支持回调 | -| textBackground | *TextBackgroundStyle* | 辅助线文本背景配置 | -| follow | *boolean* | 辅助线是否跟随鼠标移动,默认为 false,即定位到数据点 | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | -------------------- | ------------------ | -| padding | *number | number\[]* | 文本背景周围的留白 | -| style | *shapeStyle* | 线的配置项, 详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style) | - -##### showMarkers - -**可选** *boolean* *default:* `true` - -是否渲染 tooltipMarkers。 - -##### marker - -**可选** *ShapeAttrs* - -tooltipMarker 的样式配置。 - -样式配置类型,详细可见: [ShapeAttrs](/zh/docs/api/graphic-style) - -##### showContent - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 内容框。 - -##### container - -**可选** *string|HTMLElement* - -自定义 tooltip 的容器。 - -##### containerTpl - -**可选** *string* - -用于指定图例容器的模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### itemTpl - -**可选** *string* - -每项记录的默认模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### domStyles - -**可选** *TooltipDomStyles* - -传入各个 dom 的样式。 - -dom-styles - -```ts -/** Tooltip 内容框的 css 样式定义 */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**可选** *number* - -tooltip 偏移量。 - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems - -**可选** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - - - -##### customContent - -**可选** *Function* - -支持自定义模板。[在线示例](/zh/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### 标签文本 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### 图例 - -配置图例有两种方式 -第一种,传入 `boolean` 设置是否显示图例。 - -```ts -legend: false; // 关闭图例 -``` - -第二种,传入 *LegendCfg* 对图例进行整体配置。 - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - -##### layout - -**optional** *horizontal | vertical* - -图例布局方式。提供横向布局和纵向布局。 - -##### title - -**optional** *G2LegendTitleCfg* - -图例标题配置,默认不展示。*G2LegendTitleCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------- | ------------------------------------------------------------ | -| title | *string* | 文本显示内容 | -| spacing | *number* | 标题同图例项的间距 | -| style | *object* | 文本样式配置项,参考  [绘图属性](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -图例位置,可选项:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - -尝试一下: - - - -##### offsetX - -**optional** *number* - -图例 x 方向的偏移。 - -##### offsetY - -**optional** *number* - -图例 y 方向的偏移。 - -##### background - -**optional** *LegendBackgroundCfg* - -背景框配置项。*LegendBackgroundCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| padding | *number | number\[]* | 背景的留白 | -| style | *ShapeAttr* | 背景样式配置项, 参考[绘图属性](/zh/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -适用于 分类图例,当图例项过多时是否进行分页。(⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -适用于 分类图例,当图例项过多分页时,可以设置最大行数(仅适用于 `layout: 'horizontal'`),默认为:1。 - -##### pageNavigator - -**optional** *object* - -适用于 分类图例,图例分页导航器的主题样式设置。*LegendPageNavigatorCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------- | ------ | ----------------------- | -| marker.style | *PageNavigatorMarkerStyle* | - | 分页器指示箭头 样式配置 | -| text.style | *PageNavigatorTextStyle* | - | 分页器页面信息 样式配置 | - -***PageNavigatorMarkerStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------------- | -------- | ------ | ---------------------------------------------------------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -***PageNavigatorTextStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| -------- | -------- | ------ | ---------------------------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -示例: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -适用于 分类图例,图例的高度, 默认为 null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -适用于 分类图例,图例项的宽度, 默认为 null,自动计算。 - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -适用于 分类图例,控制图例项水平方向的间距。 - -##### label - -**optional** *ContinueLegendLabelCfg* - -适用于 连续图例,文本的配置项。*ContinueLegendLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | -------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| align | *string* | - | 文本同滑轨的对齐方式
- rail : 同滑轨对齐,在滑轨的两端
- top, bottom: 图例水平布局时有效
- left, right: 图例垂直布局时有效 | -| style | *object* | - | 文本样式配置项,详见  [绘图属性](/zh/docs/api/graphic-style) | -| spacing | *number* | - | 文本同滑轨的距离 | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### marker - -**optional** *MarkerCfg | MarkerCfgCallback* - -适用于 分类图例,图例项的 marker 图标的配置。 - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -```sign -type LegendItem = { name: string; value: string; } & MarkerCfg; - -type MarkerCfgCallback = (name: string, index: number, item: LegendItem) => MarkerCfg; -``` - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -适用于 分类图例,图例项容器最大宽度设置。当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxWidth = Math.min(maxWidth, maxWidthRatio * viewBBox.width); -``` - -##### maxHeight - -**optional** *number* - -适用于 分类图例,图例项容器最大高度设置。当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxHeight = Math.min(maxHeight, maxHeightRatio * viewBBox.height); -``` - -##### reversed - -**optional** *boolean* - -适用于 分类图例,是否将图例项逆序展示。 - -##### custom - -**optional** *boolean* - -是否为自定义图例,当该属性为 true 时,需要声明 items 属性。 - -##### items - -**optional** *LegendItem\[]* -适用于 分类图例,用户自己配置图例项的内容。*LegendItem* 配置如下: - -| 参数名 | 类型 | 是否必选 | 描述 | -| ------ | ----------- | -------- | ------------------------ | -| id | *string* | | 唯一值,用于动画或者查找 | -| name | *string* | required | 名称 | -| value | any | required | 值 | -| marker | *MarkerCfg* | | 图形标记 | - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -##### min - -**optional** *number* - -适用于 连续图例,选择范围的最小值。 - -##### max - -**optional** *number* - -适用于 连续图例,选择范围的最大值。 - -##### value - -**optional** *number\[]* - -适用于 连续图例,当前选中的范围。 - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` - -适用于 连续图例,滑块是否可以滑动。 - -##### rail - -**optional** *ContinueLegendRailCfg* - -适用于 连续图例,图例滑轨(背景)的样式配置项。*ContinueLegendRailCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------------- | -------- | -------------------------------------------------------------------------------- | -| type | *string* | rail 的类型,color, size,默认:'color' | -| size | *number* | 滑轨的宽度 | -| defaultLength | *number* | 滑轨的默认长度,默认:100。当限制了 maxWidth,maxHeight 时,不会使用这个属性会自动计算长度 | -| style | *object* | 滑轨的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### track - -**optional** *ContinueLegendTrackCfg* -适用于 连续图例,选择范围的色块样式配置项。*ContinueLegendTrackCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| style | *object* | - | 选定范围的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -适用于 连续图例,滑块的配置项。(暂不支持自定义) - -*ContinueLegendHandlerCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| size | *number* | - | 滑块的大小,默认:10 | -| style | *object* | - | 滑块的样式设置,参考 [绘图属性](/zh/docs/api/graphic-style) | - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/component-polygon.en.md b/site/docs/common/component-polygon.en.md deleted file mode 100644 index 332bcbfa8..000000000 --- a/site/docs/common/component-polygon.en.md +++ /dev/null @@ -1,1098 +0,0 @@ -#### label - - - -| Properties | Type | Description | -| ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -| type | *string* | When a user uses a custom label type, need to declare the specific type, otherwise you will use the default label type rendering (pie chart label support `inner | outer | spiders`) | -| offset | *number* | label offset | -| offsetX | *number* | The offset distance of the label from the data point in the X direction | -| offsetY | *number* | The offset distance of the label from the data point in the Y direction | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | Text content that is displayed, if not declared, is displayed according to the value of the first field participating in the mapping | -| style | *ShapeAttrs* | Label text graphic property style | -| autoRotate | *string* | Whether to rotate automatically, default true | -| rotate | *number* | Text rotation Angle | -| labelLine | *null* | *boolean* | *LabelLineCfg* | Used to set the style property of the text connector. NULL indicates that it is not displayed. | -| labelEmit | *boolean* | Only applies to text in polar coordinates, indicating whether the text is radially displayed according to the Angle. True means on and false means off | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | Text layout type, support a variety of layout function combination. | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | Specifies the position of the current Label relative to the current graphic (Only works for column plot and bar plot, which geometry is interval) | -| animate | *boolean | AnimateOption* | Animation configuration. | -| formatter | *Function* | Format function | -| autoHide | *boolean* | Whether to hide it automatically, default to false | - -Types of ***LabelLineCfg*** are as follow: (Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -Example code: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### tooltip - -##### fields - -**optional** *string\[]* - -Specifies the fields to be displayed in the Tooltip. By default, different charts have different default field lists. Use with the 'formatter' configuration for more effect. - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**optional** *Function* - -Formats the contents of the Tooltip Item (you can use `customContent` when content contains multiple tooltipItems). - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**optional** *boolean* *default:* `true` - -Sets whether the Tooltip content box follows the mouse. - -##### enterable - -**optional** *boolean* *default:* `false` - -Whether the tooltip allows mouse to slide in. - -##### showTitle - -**optional** *boolean* *default:* `false` - -Whether show tooltip title. - -##### title - -**optional** *string* - -Set the title content of the Tooltip: If the value is the name of the data field, the value for the field in the data is displayed, and if the field does not exist in the data, the title value is displayed directly. - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -Sets the fixed display location of the Tooltip relative to the data point. - -##### shared - -**optional** *boolean* - -True means that all data corresponding to the current point is merged and displayed, while false means that only the data content closest to the current point is displayed. - -##### showCrosshairs - -**optional** *boolean* *default:* `false` - -Whether show crosshairs。 - -##### crosshairs - -**optional** *object* - -Configure tooltip crosshairs to work if and only if 'showCrosshairs' is true. - -| Properties | Type | Description | -| -------------- | ---------------------- | --------------------------------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | Crosshairs Type: 'X' represents the auxiliary line on the X axis, 'Y' on the Y axis | -| line | *lineStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | Text configuration of crosshairs pointer, support callback | -| textBackground | *textBackgroundStyle* | Guideline text background configuration | -| follow | *boolean* | Whether the guide line follows the mouse. Default is false, that is, to locate the data point | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| Properties | Type | Description | -| ---------- | -------------------- | ------------------------------------------- | -| padding | *number | number\[]* | White space around the background of a text | -| style | *shapeStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style) | - -##### showMarkers - -**optional** *boolean* *default:* `true` - -Whether to render TooltipMarkers. - -##### marker - -**optional** *ShapeAttrs* - -TooltipMarker style configuration. - -Please refer to the style configuration [ShapeAttrs](/en/docs/api/graphic-style) - -##### showContent - -**optional** *boolean* *default:* `false` - -Whether to display the Tooltip content box. - -##### container - -**optional** *string|HTMLElement* - -Custom tooltip container. - -##### containerTpl - -**optional** *string* - -Templates used to specify the legend container must include the classes of each DOM node when customizing the template - -##### itemTpl - -**optional** *string* - -The default template for each record, which must include the classes of each DOM node when customizing the template. - -##### domStyles - -**optional** *TooltipDomStyles* - -The styles for each DOM. - -dom-styles - -```ts -/** Tooltip content box css style */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**optional** *number* - -Tooltip offset. - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems ✨ - -**optional** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - -##### customContent - -**optional** *Function* - -Support for custom templates. [Live demo](/en/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/component-polygon.zh.md b/site/docs/common/component-polygon.zh.md deleted file mode 100644 index a65b456b6..000000000 --- a/site/docs/common/component-polygon.zh.md +++ /dev/null @@ -1,1100 +0,0 @@ -#### label - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### tooltip - -##### fields - -**可选** *string\[]* - -指定 tooltip 中显示的字段,默认不同图表有不同的默认字段列表。配合 `formatter` 配置一起使用,效果更佳。 - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**可选** *Function* - -格式化 tooltip item 内容(暂时不支持多 tooltipItems 的格式化,可以使用 `customContent` 处理) - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**可选** *boolean* *default:* `true` - -设置 tooltip 内容框是否跟随鼠标移动。 - -##### enterable - -**可选** *boolean* *default:* `false` - -tooltip 是否允许鼠标滑入。 - -##### showTitle - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 标题。 - -##### title - -**可选** *string* - -设置 tooltip 的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,则直接展示 title 值。 - -##### position - -**可选** *`top` | `bottom` | `left` | `right`* - -设置 tooltip 的固定展示位置,相对于数据点。 - -##### shared - -**可选** *boolean* - -true 表示合并当前点对应的所有数据并展示,false 表示只展示离当前点最逼近的数据内容。 - -##### showCrosshairs - -**可选** *boolean* *default:* `false` - -是否展示 crosshairs。 - -##### crosshairs - -**可选** *object* - -配置 tooltip 的 crosshairs,当且仅当 `showCrosshairs` 为 true 时生效。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | --------------------- | ------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | crosshairs 的类型: `x` 表示 x 轴上的辅助线,`y` 表示 y 轴上的辅助项 | -| line | *lineStyle* | 线的配置项,详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | 辅助线文本配置,支持回调 | -| textBackground | *TextBackgroundStyle* | 辅助线文本背景配置 | -| follow | *boolean* | 辅助线是否跟随鼠标移动,默认为 false,即定位到数据点 | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | -------------------- | ------------------ | -| padding | *number | number\[]* | 文本背景周围的留白 | -| style | *shapeStyle* | 线的配置项, 详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style) | - -##### showMarkers - -**可选** *boolean* *default:* `true` - -是否渲染 tooltipMarkers。 - -##### marker - -**可选** *ShapeAttrs* - -tooltipMarker 的样式配置。 - -样式配置类型,详细可见: [ShapeAttrs](/zh/docs/api/graphic-style) - -##### showContent - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 内容框。 - -##### container - -**可选** *string|HTMLElement* - -自定义 tooltip 的容器。 - -##### containerTpl - -**可选** *string* - -用于指定图例容器的模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### itemTpl - -**可选** *string* - -每项记录的默认模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### domStyles - -**可选** *TooltipDomStyles* - -传入各个 dom 的样式。 - -dom-styles - -```ts -/** Tooltip 内容框的 css 样式定义 */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**可选** *number* - -tooltip 偏移量。 - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems - -**可选** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - - - -##### customContent - -**可选** *Function* - -支持自定义模板。[在线示例](/zh/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) diff --git a/site/docs/common/component-progress.en.md b/site/docs/common/component-progress.en.md deleted file mode 100644 index 0e8d5e3ee..000000000 --- a/site/docs/common/component-progress.en.md +++ /dev/null @@ -1,1273 +0,0 @@ -#### tooltip - -##### fields - -**optional** *string\[]* - -Specifies the fields to be displayed in the Tooltip. By default, different charts have different default field lists. Use with the 'formatter' configuration for more effect. - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**optional** *Function* - -Formats the contents of the Tooltip Item (you can use `customContent` when content contains multiple tooltipItems). - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**optional** *boolean* *default:* `true` - -Sets whether the Tooltip content box follows the mouse. - -##### enterable - -**optional** *boolean* *default:* `false` - -Whether the tooltip allows mouse to slide in. - -##### showTitle - -**optional** *boolean* *default:* `false` - -Whether show tooltip title. - -##### title - -**optional** *string* - -Set the title content of the Tooltip: If the value is the name of the data field, the value for the field in the data is displayed, and if the field does not exist in the data, the title value is displayed directly. - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -Sets the fixed display location of the Tooltip relative to the data point. - -##### shared - -**optional** *boolean* - -True means that all data corresponding to the current point is merged and displayed, while false means that only the data content closest to the current point is displayed. - -##### showCrosshairs - -**optional** *boolean* *default:* `false` - -Whether show crosshairs。 - -##### crosshairs - -**optional** *object* - -Configure tooltip crosshairs to work if and only if 'showCrosshairs' is true. - -| Properties | Type | Description | -| -------------- | ---------------------- | --------------------------------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | Crosshairs Type: 'X' represents the auxiliary line on the X axis, 'Y' on the Y axis | -| line | *lineStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | Text configuration of crosshairs pointer, support callback | -| textBackground | *textBackgroundStyle* | Guideline text background configuration | -| follow | *boolean* | Whether the guide line follows the mouse. Default is false, that is, to locate the data point | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| Properties | Type | Description | -| ---------- | -------------------- | ------------------------------------------- | -| padding | *number | number\[]* | White space around the background of a text | -| style | *shapeStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style) | - -##### showMarkers - -**optional** *boolean* *default:* `true` - -Whether to render TooltipMarkers. - -##### marker - -**optional** *ShapeAttrs* - -TooltipMarker style configuration. - -Please refer to the style configuration [ShapeAttrs](/en/docs/api/graphic-style) - -##### showContent - -**optional** *boolean* *default:* `false` - -Whether to display the Tooltip content box. - -##### container - -**optional** *string|HTMLElement* - -Custom tooltip container. - -##### containerTpl - -**optional** *string* - -Templates used to specify the legend container must include the classes of each DOM node when customizing the template - -##### itemTpl - -**optional** *string* - -The default template for each record, which must include the classes of each DOM node when customizing the template. - -##### domStyles - -**optional** *TooltipDomStyles* - -The styles for each DOM. - -dom-styles - -```ts -/** Tooltip content box css style */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**optional** *number* - -Tooltip offset. - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems ✨ - -**optional** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - -##### customContent - -**optional** *Function* - -Support for custom templates. [Live demo](/en/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -### Plot Theme - -Recommend to use 💄 [ThemeSet](https://theme-set.antv.vision) to customize your theme configurations online. - -#### Built-in Theme - -Built-in defaults: 'default' and 'dark' - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### Theme attributes - -In addition to using the built-in 'default' and 'dark' themes, you can also modify some of the theme content by setting the theme properties. - -The following table lists the specific properties on the configuration items that make up the topic: - -| **Properties** | **Type** | **Description** | -| --------------------- | ---------- | ------------------------------------------------------------------------------------------------------------- | -| defaultColor | *string* | Theme color | -| padding | *number* | number\[] | -| fontFamily | *string* | Chart font | -| colors10 | *string\[]* | Category color palette, used when the number of categories is less than 10 | -| colors20 | *string\[]* | Category color palette, used when the number of categories is greater than 10 | -| columnWidthRatio | *number* | General histogram width ratio, 0-1 range of values | -| maxColumnWidth | *number* | Maximum width of histogram, pixel value | -| minColumnWidth | *number* | Minimum width of histogram, pixel value | -| roseWidthRatio | *number* | Rose width ratio, 0-1 range of value | -| multiplePieWidthRatio | *number* | Multilayer pie and loop ratio, 0-1 range values | -| geometries | *object* | Configure the style of each shape for each Geometry, including the default style and the style for each state | -| components | *object* | Configure theme samples for axes, legends, tooltips, and annotations | -| labels | *object* | Configure the theme style of the label under Geometry | -| innerLabels | *object* | Configure Geometry to display the Labels theme style inside the graph | -| pieLabels | *object* | Configure the theme style of pie chart labels | - -usage: - -```ts -{ - theme: { - colors10: [ - '#FF6B3B', - '#626681', - '#FFC100', - '#9FB40F', - '#76523B', - '#DAD5B5', - '#0E8E89', - '#E19348', - '#F383A2', - '#247FEA', - ]; - } -} -``` - -#### Theme attributes (StyleSheet) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -usage: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir'; - } - } -} -``` - -支持的样式表属性: - -| **Properties** | **Type** | **Description** | -| ----------------------- | -------- | ------------------------------------------------- | -| `backgroundColor` | *string* | Background color | -| `brandColor` | *string* | Brand color,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | Qualitative palette,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | Qualitative palette,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | Semantic red | -| `paletteSemanticGreen` | *string* | Semantic green | -| `paletteSemanticYellow` | *string* | Semantic yellow | -| `fontFamily` | *string* | fontFamily | - -#### Update theme - -usage: - -```ts -// example 1: -plot.update({ theme: 'dark' }); - -// example 2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }); -``` - -#### Custom theme - -In addition, G2 provides a custom topic mechanism to define a new topic structure, allowing users to switch and define chart topics. Go [G2 | Custom theme](https://g2.antv.vision/en/docs/api/advanced/register-theme) for more details. - - - -🌰 Customize theme [DEMO](/zh/examples/general/theme#register-theme) - - -### Plot Event - -On Plot, binding events are removed by `ON` and `OFF` method. - -```ts -// Bind event -plot.on('eventName', callback); -// Bind event, only trigger one time -plot.once('eventName', callback); -// Remove event -plot.off('eventName', callback); -``` - -Composition: `${componentName}:${eventName}` - -Element refers to the type of element to bind to, for example `element`、`legend-item`、`axis-label`、`mask`、`plot`、`legend-item-name`、`reset-button` etc. - -Events correspond to DOM common events, for example `click`、`mousedown`、`mouseup`、`dblclick`、`mouseenter`、`mouseout`、`mouseover`、`mousemove`、`mouseleave`、`contextmenu` etc. And support mobile events: `touchstart`、`touchmove`、`touchend` - -```ts -// Plot adds click events to the entire chart area -plot.on('plot:click', (...args) => { - console.log(...args); -}); - -// Element to add a click event, element represents the graphic elements, graphical elements, please see: https://g2.antv.vision/en/docs/manual/concepts/element -plot.on('element:click', (...args) => { - console.log(...args); -}); - -// Legend adds click events -plot.on('legend-item:click', (...args) => { - console.log(...args); -}); - -// Legend name adds click event -plot.on('legend-item-name:click', (...args) => { - console.log(...args); -}); - -// 给 tooltip 添加点击事件 -plot.on('tooltip:show', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:hide', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:change', (...args) => { - console.log(...args); -}); - -// Label adds click events -plot.on('label:click', (...args) => { - console.log(...args); -}); - -// Mask adds click events -plot.on('mask:click', (...args) => { - console.log(...args); -}); - -// Axis-label adds click events -plot.on('axis-label:click', (...args) => { - console.log(...args); -}); - -// Add click events to the annotation -plot.on('annotation:click', (...args) => { - console.log(...args); -}); -``` - - -### Plot Method - -#### render() - -Render the chart. - -#### update() - -**optional** - -Update chart configuration and overwrite it without comparing difference. - -Example: - -```ts -plot.update({ - ...currentConfig, - legend: false, -}); -``` - - diff --git a/site/docs/common/component-progress.zh.md b/site/docs/common/component-progress.zh.md deleted file mode 100644 index fb8202c24..000000000 --- a/site/docs/common/component-progress.zh.md +++ /dev/null @@ -1,1152 +0,0 @@ -#### tooltip - -##### fields - -**可选** *string\[]* - -指定 tooltip 中显示的字段,默认不同图表有不同的默认字段列表。配合 `formatter` 配置一起使用,效果更佳。 - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**可选** *Function* - -格式化 tooltip item 内容(暂时不支持多 tooltipItems 的格式化,可以使用 `customContent` 处理) - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**可选** *boolean* *default:* `true` - -设置 tooltip 内容框是否跟随鼠标移动。 - -##### enterable - -**可选** *boolean* *default:* `false` - -tooltip 是否允许鼠标滑入。 - -##### showTitle - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 标题。 - -##### title - -**可选** *string* - -设置 tooltip 的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,则直接展示 title 值。 - -##### position - -**可选** *`top` | `bottom` | `left` | `right`* - -设置 tooltip 的固定展示位置,相对于数据点。 - -##### shared - -**可选** *boolean* - -true 表示合并当前点对应的所有数据并展示,false 表示只展示离当前点最逼近的数据内容。 - -##### showCrosshairs - -**可选** *boolean* *default:* `false` - -是否展示 crosshairs。 - -##### crosshairs - -**可选** *object* - -配置 tooltip 的 crosshairs,当且仅当 `showCrosshairs` 为 true 时生效。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | --------------------- | ------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | crosshairs 的类型: `x` 表示 x 轴上的辅助线,`y` 表示 y 轴上的辅助项 | -| line | *lineStyle* | 线的配置项,详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | 辅助线文本配置,支持回调 | -| textBackground | *TextBackgroundStyle* | 辅助线文本背景配置 | -| follow | *boolean* | 辅助线是否跟随鼠标移动,默认为 false,即定位到数据点 | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | -------------------- | ------------------ | -| padding | *number | number\[]* | 文本背景周围的留白 | -| style | *shapeStyle* | 线的配置项, 详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style) | - -##### showMarkers - -**可选** *boolean* *default:* `true` - -是否渲染 tooltipMarkers。 - -##### marker - -**可选** *ShapeAttrs* - -tooltipMarker 的样式配置。 - -样式配置类型,详细可见: [ShapeAttrs](/zh/docs/api/graphic-style) - -##### showContent - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 内容框。 - -##### container - -**可选** *string|HTMLElement* - -自定义 tooltip 的容器。 - -##### containerTpl - -**可选** *string* - -用于指定图例容器的模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### itemTpl - -**可选** *string* - -每项记录的默认模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### domStyles - -**可选** *TooltipDomStyles* - -传入各个 dom 的样式。 - -dom-styles - -```ts -/** Tooltip 内容框的 css 样式定义 */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**可选** *number* - -tooltip 偏移量。 - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems - -**可选** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - - - -##### customContent - -**可选** *Function* - -支持自定义模板。[在线示例](/zh/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -### 图表主题 - -推荐使用 💄 [ThemeSet](https://theme-set.antv.vision) 在线自定义自己的主题配置。 - -#### 内置主题 - -目前默认的内置主要有两套:`default` 和 `dark` - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### 主题属性 - -除了使用内置的 `default` 和 `dark` 主题之外,还可以通过设置主题属性来修改部分主题内容: - -下表列出了组成主题的大配置项上的具体属性: - -| 主题属性 | 类型 | 描述 | -| --- | --- | ---| -| defaultColor | *string*| 主题色 | -| padding | *number* | number\[] | -| fontFamily | *string* | 图表字体 | -| colors10 | *string\[]* | 分类颜色色板,分类个数小于 10 时使用 | -| colors20 |*string\[]* | 分类颜色色板,分类个数大于 10 时使用 | -| columnWidthRatio | *number* | 一般柱状图宽度占比,0 - 1 范围数值 -| maxColumnWidth | *number* | 柱状图最大宽度,像素值 | -| minColumnWidth| *number* | 柱状图最小宽度,像素值 | -| roseWidthRatio | *number* | 玫瑰图占比,0 - 1 范围数值 | -| multiplePieWidthRatio | *number* | 多层饼图/环图占比,0 - 1 范围数值 | -| geometries | *object* | 配置每个 Geometry 下每个 shape 的样式,包括默认样式以及各个状态下的样式 | -| components | *object* | 配置坐标轴,图例,tooltip, annotation 的主题样式 | -| labels | *object* | 配置 Geometry 下 label 的主题样式 | -| innerLabels | *object* | 配置 Geometry 下展示在图形内部的 labels 的主题样式 | -| pieLabels | *object* | 配置饼图 labels 的主题样式 | - -使用方式: - -```ts -{ - theme: { - colors10: ['#FF6B3B', '#626681', '#FFC100', '#9FB40F', '#76523B', '#DAD5B5', '#0E8E89', '#E19348', '#F383A2', '#247FEA'] - } -} -``` - -#### 主题属性(主题样式表) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -使用方式: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir' - } - } -} -``` - -支持的样式表属性: - -| **属性** | **类型** | **描述** | -| ----------------------- | -------- | ------------- | -| `backgroundColor` | *string* | 背景色 | -| `brandColor` | *string* | 主题色,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | 分类颜色色板,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | 分类颜色色板,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | 语义红色 | -| `paletteSemanticGreen` | *string* | 语义绿色 | -| `paletteSemanticYellow` | *string* | 语义黄色 | -| `fontFamily` | *string* | 字体 | - -#### 更新主题 - -使用方式: - -```ts -// 示例1: -plot.update({ theme: 'dark' }); - -// 示例2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }) -``` - -#### 自定义注册主题 - -另外,还可以通过 G2 提供了自定义主题机制来定义全新的主题结构,以允许用户切换、定义图表主题。前往 [G2 | 自定义主题](https://g2.antv.vision/zh/docs/api/advanced/register-theme) 查看详情。 - - - -🌰 自定义主题 [DEMO](/zh/examples/general/theme#register-theme) 示例 diff --git a/site/docs/common/component-tiny.en.md b/site/docs/common/component-tiny.en.md deleted file mode 100644 index 578b186f3..000000000 --- a/site/docs/common/component-tiny.en.md +++ /dev/null @@ -1,1620 +0,0 @@ -#### tooltip - -##### fields - -**optional** *string\[]* - -Specifies the fields to be displayed in the Tooltip. By default, different charts have different default field lists. Use with the 'formatter' configuration for more effect. - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**optional** *Function* - -Formats the contents of the Tooltip Item (you can use `customContent` when content contains multiple tooltipItems). - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**optional** *boolean* *default:* `true` - -Sets whether the Tooltip content box follows the mouse. - -##### enterable - -**optional** *boolean* *default:* `false` - -Whether the tooltip allows mouse to slide in. - -##### showTitle - -**optional** *boolean* *default:* `false` - -Whether show tooltip title. - -##### title - -**optional** *string* - -Set the title content of the Tooltip: If the value is the name of the data field, the value for the field in the data is displayed, and if the field does not exist in the data, the title value is displayed directly. - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -Sets the fixed display location of the Tooltip relative to the data point. - -##### shared - -**optional** *boolean* - -True means that all data corresponding to the current point is merged and displayed, while false means that only the data content closest to the current point is displayed. - -##### showCrosshairs - -**optional** *boolean* *default:* `false` - -Whether show crosshairs。 - -##### crosshairs - -**optional** *object* - -Configure tooltip crosshairs to work if and only if 'showCrosshairs' is true. - -| Properties | Type | Description | -| -------------- | ---------------------- | --------------------------------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | Crosshairs Type: 'X' represents the auxiliary line on the X axis, 'Y' on the Y axis | -| line | *lineStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | Text configuration of crosshairs pointer, support callback | -| textBackground | *textBackgroundStyle* | Guideline text background configuration | -| follow | *boolean* | Whether the guide line follows the mouse. Default is false, that is, to locate the data point | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| Properties | Type | Description | -| ---------- | -------------------- | ------------------------------------------- | -| padding | *number | number\[]* | White space around the background of a text | -| style | *shapeStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style) | - -##### showMarkers - -**optional** *boolean* *default:* `true` - -Whether to render TooltipMarkers. - -##### marker - -**optional** *ShapeAttrs* - -TooltipMarker style configuration. - -Please refer to the style configuration [ShapeAttrs](/en/docs/api/graphic-style) - -##### showContent - -**optional** *boolean* *default:* `false` - -Whether to display the Tooltip content box. - -##### container - -**optional** *string|HTMLElement* - -Custom tooltip container. - -##### containerTpl - -**optional** *string* - -Templates used to specify the legend container must include the classes of each DOM node when customizing the template - -##### itemTpl - -**optional** *string* - -The default template for each record, which must include the classes of each DOM node when customizing the template. - -##### domStyles - -**optional** *TooltipDomStyles* - -The styles for each DOM. - -dom-styles - -```ts -/** Tooltip content box css style */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**optional** *number* - -Tooltip offset. - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems ✨ - -**optional** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - -##### customContent - -**optional** *Function* - -Support for custom templates. [Live demo](/en/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### axis - -Same for xAxis and yAxis. - -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -For Cartesian coordinates, set the position of the coordinate axes. - -##### title - -**optional** *object* - -A configuration item for the title, NULL means not to be displayed. - -| Properties | Type | Description | -| ---------- | ------------ | -------------------------------------------------------------------------- | -| text | *string* | The title of axis | -| position | *string* | Position of the axis title, default: 'center'. Options: start, center, end | -| offset | *number* | The distance of the title from the coordinate axis | -| spacing | *number* | The distance between the title and the text on the coordinate axis | -| style | *shapeStyle* | Title text configuration items | -| autoRotate | *boolean* | Whether to rotate automatically or not | - -***shapeStyle*** - - - -| Properties | Type | Description | -| ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fill | *string* | Fill color of the shape | -| r | *number* | used in `point`, means the radius of geometry | -| fillOpacity | *number* | Fill opacity of the shape | -| stroke | *string* | Stroke color of the shape | -| lineWidth | *number* | The width of the stroke of the shape | -| lineDash | \[number,number] | Configure dashed line stroke. The first parameter is the length of each segment, and the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| lineOpacity | *number* | Opacity of the stroke | -| opacity | *number* | Opacity of the shape | -| shadowColor | *string* | Shadow color of the shape | -| strokeOpacity | *number* | Stroke opacity of the shape | -| shadowBlur | *number* | Gaussian blur coefficient of the shadow | -| shadowOffsetX | *number* | Configure horizontal distance between shadow and shape | -| shadowOffsetY | *number* | Configure vertical distance between shadow and shape | -| cursor | *string* | Mouse style, same as the mouse style of CSS, default value : 'default' | - -Example: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -More documents about `ShapeStyle`, see [Graphic Style](/en/docs/api/graphic-style). - - -***label*** - -**optional** *object* - -A configuration item for the text label. NULL indicates that it is not displayed. - - - -| Properties | Type | Description | -| ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -| type | *string* | When a user uses a custom label type, need to declare the specific type, otherwise you will use the default label type rendering (pie chart label support `inner | outer | spiders`) | -| offset | *number* | label offset | -| offsetX | *number* | The offset distance of the label from the data point in the X direction | -| offsetY | *number* | The offset distance of the label from the data point in the Y direction | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | Text content that is displayed, if not declared, is displayed according to the value of the first field participating in the mapping | -| style | *ShapeAttrs* | Label text graphic property style | -| autoRotate | *string* | Whether to rotate automatically, default true | -| rotate | *number* | Text rotation Angle | -| labelLine | *null* | *boolean* | *LabelLineCfg* | Used to set the style property of the text connector. NULL indicates that it is not displayed. | -| labelEmit | *boolean* | Only applies to text in polar coordinates, indicating whether the text is radially displayed according to the Angle. True means on and false means off | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | Text layout type, support a variety of layout function combination. | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | Specifies the position of the current Label relative to the current graphic (Only works for column plot and bar plot, which geometry is interval) | -| animate | *boolean | AnimateOption* | Animation configuration. | -| formatter | *Function* | Format function | -| autoHide | *boolean* | Whether to hide it automatically, default to false | - -Types of ***LabelLineCfg*** are as follow: (Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -Example code: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - *AxisLabelCfg | null* **optional** - -Configurations related to axis label. Set this to `null` to prevent the axis label from appearing. The details of \_ AxisLabelCfg\_ are as follows: - -| Properties | Type | | -| ------------ | -------------------------------------------------------- | ------- | --------------------------------------------------------- | -| style | *[ShapeAttrs](/en/docs/api/graphic-style)* | - | Axis label text graphic property style | -| offset | *number* | - | Axis label offset | -| rotate | *number* | - | Axis label text rotation Angle | -| autoRotate | *boolean |avoidCallback* | `true` | Whether to rotate automatically, default true | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | Whether to hide it automatically, default to false | -| autoEllipsis | *boolean* | `false` | Whether to ellipsis label when overflow, default to false | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | Format function | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -Mark the direction of the label on the axis, with 1 to the left and -1 to the right (Only works in vertical axis). - -##### verticalLimitLength - -**optional** *number* - -Configuring the maximum limit length in the vertical direction of the coordinate axis has a significant impact on text adaptation. - -##### grid - -**optional** *object* - -Axis grid line configuration item. NULL means not shown. - -| Properties | Type | Description | -| -------------- | ------------------ | ------------------------------------------------------------------ | -| line | *lineStyle* | The style of the line | -| alternateColor | *string|string\[]* | The fill color between two grid lines | -| closed | *boolean* | Whether to close the grid for circle | -| alignTick | *boolean* | If the value is false, it will be displayed between the two scales | - -Then config of `grid.line` is the same as: [line](#line) - -##### line - -**optional** *object* - -Coordinate axis configuration item, NULL means not displayed. - - - -> **Attention:** The full configuration of lineStyle is `{ style: { stroke: '#ddd', ... } }`, please check it when your configuration doesn't work. - -| Properties | Type | Description | -| ------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| stroke | *string* | color of the line | -| lineWidth | *number* | width of the line | -| lineDash | *\[number,number]* | configure dashed line, the first parameter is the length of each segment, the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| opacity | *number* | opacity | -| shadowColor | *string* | shadow color | -| shadowBlur | *number* | Gaussian blur coefficient | -| shadowOffsetX | *number* | configure horizontal distance between shadow and line | -| shadowOffsetY | *number* | configure vertical distance between shadow and line | -| cursor | *string* | mouse style, same as the mouse style of CSS, default value : 'default' | - -Example (config the grid line style of xAxis): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -The configuration item of the coordinate axis scale line. NULL means not displayed. - -| Properties | Type | Description | -| ---------- | ----------- | -------------------------------------- | -| style | *lineStyle* | The style of tickLine. | -| alignTick | *boolean* | Whether aligh tickLine with tick label | -| length | *number* | The length of tickLine. | - -Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*. The params of *ShapeAttrsCallback* are as follow: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -A configuration item for a coordinate subscale. NULL indicates that it is not displayed. - -| Properties | Type | Description | -| ---------- | ---------------------------------- | -------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | The style of subTickLine. | -| count | *number* | The count of subTickLine. | -| length | *number* | The length of subTickLine. | - -Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*. The params of *ShapeAttrsCallback* are as follow: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -Whether to nice. - -##### min - -**optional** *number* *default:* `0` - -Minimum axis. - -##### max - -**optional** *number* - -Maximum axis. - -##### minLimit - -**optional** *number* - -Minimal limit. - -##### maxLimit - -**optional** *number* - -Maximum limit. - -##### tickCount - -**optional** *number* - -The expected number of axes, not the final result. - -##### tickInterval - -**optional** *number* - -Interval of axes. - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -Specify a tick calculation method, or customize a tick calculation method. Built-in tick calculations include `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -Animation switch, default true. - -##### animateOption - -**optional** *object* - -Animation parameter configuration. - -```ts -interface ComponentAnimateCfg { - /** Duration of the first animation */ - readonly duration?: number; - /** Easing method used for the first animation. */ - readonly easing?: string; - /** Delay before updating the animation */ - readonly delay?: number; -} -// Configure the reference -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -### Plot Theme - -Recommend to use 💄 [ThemeSet](https://theme-set.antv.vision) to customize your theme configurations online. - -#### Built-in Theme - -Built-in defaults: 'default' and 'dark' - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### Theme attributes - -In addition to using the built-in 'default' and 'dark' themes, you can also modify some of the theme content by setting the theme properties. - -The following table lists the specific properties on the configuration items that make up the topic: - -| **Properties** | **Type** | **Description** | -| --------------------- | ---------- | ------------------------------------------------------------------------------------------------------------- | -| defaultColor | *string* | Theme color | -| padding | *number* | number\[] | -| fontFamily | *string* | Chart font | -| colors10 | *string\[]* | Category color palette, used when the number of categories is less than 10 | -| colors20 | *string\[]* | Category color palette, used when the number of categories is greater than 10 | -| columnWidthRatio | *number* | General histogram width ratio, 0-1 range of values | -| maxColumnWidth | *number* | Maximum width of histogram, pixel value | -| minColumnWidth | *number* | Minimum width of histogram, pixel value | -| roseWidthRatio | *number* | Rose width ratio, 0-1 range of value | -| multiplePieWidthRatio | *number* | Multilayer pie and loop ratio, 0-1 range values | -| geometries | *object* | Configure the style of each shape for each Geometry, including the default style and the style for each state | -| components | *object* | Configure theme samples for axes, legends, tooltips, and annotations | -| labels | *object* | Configure the theme style of the label under Geometry | -| innerLabels | *object* | Configure Geometry to display the Labels theme style inside the graph | -| pieLabels | *object* | Configure the theme style of pie chart labels | - -usage: - -```ts -{ - theme: { - colors10: [ - '#FF6B3B', - '#626681', - '#FFC100', - '#9FB40F', - '#76523B', - '#DAD5B5', - '#0E8E89', - '#E19348', - '#F383A2', - '#247FEA', - ]; - } -} -``` - -#### Theme attributes (StyleSheet) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -usage: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir'; - } - } -} -``` - -支持的样式表属性: - -| **Properties** | **Type** | **Description** | -| ----------------------- | -------- | ------------------------------------------------- | -| `backgroundColor` | *string* | Background color | -| `brandColor` | *string* | Brand color,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | Qualitative palette,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | Qualitative palette,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | Semantic red | -| `paletteSemanticGreen` | *string* | Semantic green | -| `paletteSemanticYellow` | *string* | Semantic yellow | -| `fontFamily` | *string* | fontFamily | - -#### Update theme - -usage: - -```ts -// example 1: -plot.update({ theme: 'dark' }); - -// example 2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }); -``` - -#### Custom theme - -In addition, G2 provides a custom topic mechanism to define a new topic structure, allowing users to switch and define chart topics. Go [G2 | Custom theme](https://g2.antv.vision/en/docs/api/advanced/register-theme) for more details. - - - -🌰 Customize theme [DEMO](/zh/examples/general/theme#register-theme) - - -### Plot Event - -On Plot, binding events are removed by `ON` and `OFF` method. - -```ts -// Bind event -plot.on('eventName', callback); -// Bind event, only trigger one time -plot.once('eventName', callback); -// Remove event -plot.off('eventName', callback); -``` - -Composition: `${componentName}:${eventName}` - -Element refers to the type of element to bind to, for example `element`、`legend-item`、`axis-label`、`mask`、`plot`、`legend-item-name`、`reset-button` etc. - -Events correspond to DOM common events, for example `click`、`mousedown`、`mouseup`、`dblclick`、`mouseenter`、`mouseout`、`mouseover`、`mousemove`、`mouseleave`、`contextmenu` etc. And support mobile events: `touchstart`、`touchmove`、`touchend` - -```ts -// Plot adds click events to the entire chart area -plot.on('plot:click', (...args) => { - console.log(...args); -}); - -// Element to add a click event, element represents the graphic elements, graphical elements, please see: https://g2.antv.vision/en/docs/manual/concepts/element -plot.on('element:click', (...args) => { - console.log(...args); -}); - -// Legend adds click events -plot.on('legend-item:click', (...args) => { - console.log(...args); -}); - -// Legend name adds click event -plot.on('legend-item-name:click', (...args) => { - console.log(...args); -}); - -// 给 tooltip 添加点击事件 -plot.on('tooltip:show', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:hide', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:change', (...args) => { - console.log(...args); -}); - -// Label adds click events -plot.on('label:click', (...args) => { - console.log(...args); -}); - -// Mask adds click events -plot.on('mask:click', (...args) => { - console.log(...args); -}); - -// Axis-label adds click events -plot.on('axis-label:click', (...args) => { - console.log(...args); -}); - -// Add click events to the annotation -plot.on('annotation:click', (...args) => { - console.log(...args); -}); -``` - - -### Plot Method - -#### render() - -Render the chart. - -#### update() - -**optional** - -Update chart configuration and overwrite it without comparing difference. - -Example: - -```ts -plot.update({ - ...currentConfig, - legend: false, -}); -``` - - diff --git a/site/docs/common/component-tiny.zh.md b/site/docs/common/component-tiny.zh.md deleted file mode 100644 index 2520b5f1d..000000000 --- a/site/docs/common/component-tiny.zh.md +++ /dev/null @@ -1,1604 +0,0 @@ -#### tooltip - -##### fields - -**可选** *string\[]* - -指定 tooltip 中显示的字段,默认不同图表有不同的默认字段列表。配合 `formatter` 配置一起使用,效果更佳。 - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**可选** *Function* - -格式化 tooltip item 内容(暂时不支持多 tooltipItems 的格式化,可以使用 `customContent` 处理) - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**可选** *boolean* *default:* `true` - -设置 tooltip 内容框是否跟随鼠标移动。 - -##### enterable - -**可选** *boolean* *default:* `false` - -tooltip 是否允许鼠标滑入。 - -##### showTitle - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 标题。 - -##### title - -**可选** *string* - -设置 tooltip 的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,则直接展示 title 值。 - -##### position - -**可选** *`top` | `bottom` | `left` | `right`* - -设置 tooltip 的固定展示位置,相对于数据点。 - -##### shared - -**可选** *boolean* - -true 表示合并当前点对应的所有数据并展示,false 表示只展示离当前点最逼近的数据内容。 - -##### showCrosshairs - -**可选** *boolean* *default:* `false` - -是否展示 crosshairs。 - -##### crosshairs - -**可选** *object* - -配置 tooltip 的 crosshairs,当且仅当 `showCrosshairs` 为 true 时生效。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | --------------------- | ------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | crosshairs 的类型: `x` 表示 x 轴上的辅助线,`y` 表示 y 轴上的辅助项 | -| line | *lineStyle* | 线的配置项,详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | 辅助线文本配置,支持回调 | -| textBackground | *TextBackgroundStyle* | 辅助线文本背景配置 | -| follow | *boolean* | 辅助线是否跟随鼠标移动,默认为 false,即定位到数据点 | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | -------------------- | ------------------ | -| padding | *number | number\[]* | 文本背景周围的留白 | -| style | *shapeStyle* | 线的配置项, 详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style) | - -##### showMarkers - -**可选** *boolean* *default:* `true` - -是否渲染 tooltipMarkers。 - -##### marker - -**可选** *ShapeAttrs* - -tooltipMarker 的样式配置。 - -样式配置类型,详细可见: [ShapeAttrs](/zh/docs/api/graphic-style) - -##### showContent - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 内容框。 - -##### container - -**可选** *string|HTMLElement* - -自定义 tooltip 的容器。 - -##### containerTpl - -**可选** *string* - -用于指定图例容器的模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### itemTpl - -**可选** *string* - -每项记录的默认模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### domStyles - -**可选** *TooltipDomStyles* - -传入各个 dom 的样式。 - -dom-styles - -```ts -/** Tooltip 内容框的 css 样式定义 */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**可选** *number* - -tooltip 偏移量。 - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems - -**可选** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - - - -##### customContent - -**可选** *Function* - -支持自定义模板。[在线示例](/zh/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### axis - -xAxis、yAxis 配置相同。 - -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -适用于直角坐标系,设置坐标轴的位置。 - -##### title - -**optional** *object* - -标题的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------ | --------------------------------------------------------- | -| text | *string* | 坐标轴标题 | -| position | *string* | 轴标题的位置,默认:'center'。可选项: start, center, end | -| offset | *number* | 标题距离坐标轴的距离 | -| spacing | *number* | 标题距离坐标轴文本的距离 | -| style | *shapeStyle* | 标题文本配置项 | -| autoRotate | *boolean* | 是否自动旋转 | - -***shapeStyle*** - - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | *string* | 图形的填充色 | -| r | *number* | 用于 `point`, 代表图形的半径大小 | -| fillOpacity | *number* | 图形的填充透明度 | -| stroke | *string* | 图形的描边 | -| lineWidth | *number* | 图形描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 图形的整体透明度 | -| shadowColor | *string* | 图形阴影颜色 | -| strokeOpacity | *number* | 图形边框透明度 | -| shadowBlur | *number* | 图形阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -关于 ShapeStyle 更加详细的文档参考 [绘图属性](/zh/docs/api/graphic-style)。 - - -***label*** - -**optional** *object* - -文本标签的配置项,null 表示不展示。 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - **optional** *AxisLabelCfg | null* - -文本标签的配置项,null 表示不展示。*AxisLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------------------------------------- | ------- | ------------------------ | -| offset | *number* | - | label 的偏移量 | -| rotate | *number* | - | 文本旋转角度 | -| autoRotate | *boolean |avoidCallback* | `true` | 是否自动旋转 | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | 是否自动隐藏 | -| autoEllipsis | *boolean |avoidCallback |string* | `false` | 是否自动省略 | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | 格式化函数 | -| style | *[ShapeAttrs](/zh/docs/api/graphic-style)* | - | 坐标轴刻度线的样式配置项 | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -标记坐标轴 label 的方向,左侧为 1,右侧为 -1(仅适用于垂直方向的坐标轴) - -##### verticalLimitLength - -**optional** *number* - -配置坐标轴垂直方向的最大限制长度,对文本自适应有很大影响。 - -##### grid - -**optional** *object* - -坐标轴网格线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------------ | -------------------------------------------------------- | -| line | *lineStyle* | 线的样式, | -| alternateColor | *string|string\[]* | 两个栅格线间的填充色 | -| closed | *boolean* | 对于 circle 是否关闭 grid | -| alignTick | *boolean* | 是否同刻度线对齐,如果值为 false,则会显示在两个刻度中间 | - -网格线条样式的配置与 [line](#line) 是一致的。 - -##### line - -**optional** *object* - -坐标轴线的配置项,null 表示不展示。 - - - -> **注意:** 线条样式的完整配置是 `{ style: { stroke: '#ddd', ... } }`, 如果配置线条样式不生效的时候,请检查一下。 - -| 属性名 | 类型 | 介绍 | -| ------------- | ----------------- | ------------------------------------------------------------------------------------------------------ | -| stroke | *string* | 线的颜色 | -| lineWidth | *number* | 线宽 | -| lineDash | *\[number,number]* | 虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| opacity | *number* | 透明度 | -| shadowColor | *string* | 阴影颜色 | -| shadowBlur | *number* | 高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例(设置 x 轴的 grid 网格线条样式): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -坐标轴刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴刻度线的样式。 | -| alignTick | *boolean* | 坐标轴刻度线是否同 tick 对齐 | -| length | *number* | 坐标轴刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -坐标轴子刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴子刻度线的样式。 | -| count | *number* | 子刻度个数 | -| length | *number* | 坐标轴子刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -是否美化。 - -##### min - -**optional** *number* *default:* `0` - -坐标轴最小值。 - -##### max - -**optional** *number* - -坐标轴最大值。 - -##### minLimit - -**optional** *number* - -最小值限定。 - -##### maxLimit - -**optional** *number* - -最大值限定。 - -##### tickCount - -**optional** *number* - -期望的坐标轴刻度数量,非最终结果。 - -##### tickInterval - -**optional** *number* - -坐标轴刻度间隔。 - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -指定 tick 计算方法,或自定义计算 tick 的方法,内置 tick 计算方法包括 `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -动画开关,默认开启。 - -##### animateOption - -**optional** *object* - -动画参数配置。 - -```ts -interface ComponentAnimateCfg { - /** 动画执行时间 */ - readonly duration?: number; - /** 动画缓动函数 */ - readonly easing?: string; - /** 动画延迟时间 */ - readonly delay?: number; -} -// 配置参考 -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -### 图表主题 - -推荐使用 💄 [ThemeSet](https://theme-set.antv.vision) 在线自定义自己的主题配置。 - -#### 内置主题 - -目前默认的内置主要有两套:`default` 和 `dark` - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### 主题属性 - -除了使用内置的 `default` 和 `dark` 主题之外,还可以通过设置主题属性来修改部分主题内容: - -下表列出了组成主题的大配置项上的具体属性: - -| 主题属性 | 类型 | 描述 | -| --- | --- | ---| -| defaultColor | *string*| 主题色 | -| padding | *number* | number\[] | -| fontFamily | *string* | 图表字体 | -| colors10 | *string\[]* | 分类颜色色板,分类个数小于 10 时使用 | -| colors20 |*string\[]* | 分类颜色色板,分类个数大于 10 时使用 | -| columnWidthRatio | *number* | 一般柱状图宽度占比,0 - 1 范围数值 -| maxColumnWidth | *number* | 柱状图最大宽度,像素值 | -| minColumnWidth| *number* | 柱状图最小宽度,像素值 | -| roseWidthRatio | *number* | 玫瑰图占比,0 - 1 范围数值 | -| multiplePieWidthRatio | *number* | 多层饼图/环图占比,0 - 1 范围数值 | -| geometries | *object* | 配置每个 Geometry 下每个 shape 的样式,包括默认样式以及各个状态下的样式 | -| components | *object* | 配置坐标轴,图例,tooltip, annotation 的主题样式 | -| labels | *object* | 配置 Geometry 下 label 的主题样式 | -| innerLabels | *object* | 配置 Geometry 下展示在图形内部的 labels 的主题样式 | -| pieLabels | *object* | 配置饼图 labels 的主题样式 | - -使用方式: - -```ts -{ - theme: { - colors10: ['#FF6B3B', '#626681', '#FFC100', '#9FB40F', '#76523B', '#DAD5B5', '#0E8E89', '#E19348', '#F383A2', '#247FEA'] - } -} -``` - -#### 主题属性(主题样式表) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -使用方式: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir' - } - } -} -``` - -支持的样式表属性: - -| **属性** | **类型** | **描述** | -| ----------------------- | -------- | ------------- | -| `backgroundColor` | *string* | 背景色 | -| `brandColor` | *string* | 主题色,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | 分类颜色色板,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | 分类颜色色板,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | 语义红色 | -| `paletteSemanticGreen` | *string* | 语义绿色 | -| `paletteSemanticYellow` | *string* | 语义黄色 | -| `fontFamily` | *string* | 字体 | - -#### 更新主题 - -使用方式: - -```ts -// 示例1: -plot.update({ theme: 'dark' }); - -// 示例2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }) -``` - -#### 自定义注册主题 - -另外,还可以通过 G2 提供了自定义主题机制来定义全新的主题结构,以允许用户切换、定义图表主题。前往 [G2 | 自定义主题](https://g2.antv.vision/zh/docs/api/advanced/register-theme) 查看详情。 - - - -🌰 自定义主题 [DEMO](/zh/examples/general/theme#register-theme) 示例 - - -### 图表事件 - -在 Plot 上通过 `on` 绑定事件、`off` 移除绑定事件。 - -```sign -// 绑定事件 -plot.on('eventName', callback); -// 绑定事件,只触发一次 -plot.once('eventName', callback); -// 移除事件 -plot.off('eventName', callback); -``` - -组合方式: `${componentName}:${eventName}` - -```ts -// plot 添加点击事件,整个图表区域 -plot.on('plot:click', (...args) => { - console.log(...args); -}); - -// element 添加点击事件, element 代表图形元素,关于图形元素,请查看:https://g2.antv.vision/zh/docs/manual/concepts/element -plot.on('element:click', (...args) => { - console.log(...args); -}); - -// 图例添加点击事件 -plot.on('legend-item:click', (...args) => { - console.log(...args); -}); - -// 图例名称添加点击事件 -plot.on('legend-item-name:click', (...args) => { - console.log(...args); -}); - -// 给 tooltip 添加点击事件 -plot.on('tooltip:show', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:hide', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:change', (...args) => { - console.log(...args); -}); - -// label 添加点击事件 -plot.on('label:click', (...args) => { - console.log(...args); -}); - -// mask 添加点击事件 -plot.on('mask:click', (...args) => { - console.log(...args); -}); - -// axis-label 添加点击事件 -plot.on('axis-label:click', (...args) => { - console.log(...args); -}); - -// 给 annotation 添加点击事件 -plot.on('annotation:click', (...args) => { - console.log(...args); -}); -``` - - -### 图表方法 - -#### render() - -渲染图表。 - -#### update() - -更新图表配置项,配置覆盖,不会做差异比对。 - -使用示例: - -```ts -plot.update({ - ...currentConfig, - legend: false, -}); -``` - - diff --git a/site/docs/common/component.en.md b/site/docs/common/component.en.md deleted file mode 100644 index 07e2bb5ea..000000000 --- a/site/docs/common/component.en.md +++ /dev/null @@ -1,1891 +0,0 @@ -#### axis - -xAxis、yAxis 配置相同。**注意**:由于 DualAxes(双轴图) 和 BidirectionalBar(对称条形图) 是双 y 轴, yAxis 类型是以 yField 中的字段作为 `key` 值的`object`。 - -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -For Cartesian coordinates, set the position of the coordinate axes. - -##### title - -**optional** *object* - -A configuration item for the title, NULL means not to be displayed. - -| Properties | Type | Description | -| ---------- | ------------ | -------------------------------------------------------------------------- | -| text | *string* | The title of axis | -| position | *string* | Position of the axis title, default: 'center'. Options: start, center, end | -| offset | *number* | The distance of the title from the coordinate axis | -| spacing | *number* | The distance between the title and the text on the coordinate axis | -| style | *shapeStyle* | Title text configuration items | -| autoRotate | *boolean* | Whether to rotate automatically or not | - -***shapeStyle*** - - - -| Properties | Type | Description | -| ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fill | *string* | Fill color of the shape | -| r | *number* | used in `point`, means the radius of geometry | -| fillOpacity | *number* | Fill opacity of the shape | -| stroke | *string* | Stroke color of the shape | -| lineWidth | *number* | The width of the stroke of the shape | -| lineDash | \[number,number] | Configure dashed line stroke. The first parameter is the length of each segment, and the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| lineOpacity | *number* | Opacity of the stroke | -| opacity | *number* | Opacity of the shape | -| shadowColor | *string* | Shadow color of the shape | -| strokeOpacity | *number* | Stroke opacity of the shape | -| shadowBlur | *number* | Gaussian blur coefficient of the shadow | -| shadowOffsetX | *number* | Configure horizontal distance between shadow and shape | -| shadowOffsetY | *number* | Configure vertical distance between shadow and shape | -| cursor | *string* | Mouse style, same as the mouse style of CSS, default value : 'default' | - -Example: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -More documents about `ShapeStyle`, see [Graphic Style](/en/docs/api/graphic-style). - - -***label*** - -**optional** *object* - -A configuration item for the text label. NULL indicates that it is not displayed. - - - -| Properties | Type | Description | -| ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -| type | *string* | When a user uses a custom label type, need to declare the specific type, otherwise you will use the default label type rendering (pie chart label support `inner | outer | spiders`) | -| offset | *number* | label offset | -| offsetX | *number* | The offset distance of the label from the data point in the X direction | -| offsetY | *number* | The offset distance of the label from the data point in the Y direction | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | Text content that is displayed, if not declared, is displayed according to the value of the first field participating in the mapping | -| style | *ShapeAttrs* | Label text graphic property style | -| autoRotate | *string* | Whether to rotate automatically, default true | -| rotate | *number* | Text rotation Angle | -| labelLine | *null* | *boolean* | *LabelLineCfg* | Used to set the style property of the text connector. NULL indicates that it is not displayed. | -| labelEmit | *boolean* | Only applies to text in polar coordinates, indicating whether the text is radially displayed according to the Angle. True means on and false means off | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | Text layout type, support a variety of layout function combination. | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | Specifies the position of the current Label relative to the current graphic (Only works for column plot and bar plot, which geometry is interval) | -| animate | *boolean | AnimateOption* | Animation configuration. | -| formatter | *Function* | Format function | -| autoHide | *boolean* | Whether to hide it automatically, default to false | - -Types of ***LabelLineCfg*** are as follow: (Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -Example code: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - *AxisLabelCfg | null* **optional** - -Configurations related to axis label. Set this to `null` to prevent the axis label from appearing. The details of \_ AxisLabelCfg\_ are as follows: - -| Properties | Type | | -| ------------ | -------------------------------------------------------- | ------- | --------------------------------------------------------- | -| style | *[ShapeAttrs](/en/docs/api/graphic-style)* | - | Axis label text graphic property style | -| offset | *number* | - | Axis label offset | -| rotate | *number* | - | Axis label text rotation Angle | -| autoRotate | *boolean |avoidCallback* | `true` | Whether to rotate automatically, default true | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | Whether to hide it automatically, default to false | -| autoEllipsis | *boolean* | `false` | Whether to ellipsis label when overflow, default to false | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | Format function | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -Mark the direction of the label on the axis, with 1 to the left and -1 to the right (Only works in vertical axis). - -##### verticalLimitLength - -**optional** *number* - -Configuring the maximum limit length in the vertical direction of the coordinate axis has a significant impact on text adaptation. - -##### grid - -**optional** *object* - -Axis grid line configuration item. NULL means not shown. - -| Properties | Type | Description | -| -------------- | ------------------ | ------------------------------------------------------------------ | -| line | *lineStyle* | The style of the line | -| alternateColor | *string|string\[]* | The fill color between two grid lines | -| closed | *boolean* | Whether to close the grid for circle | -| alignTick | *boolean* | If the value is false, it will be displayed between the two scales | - -Then config of `grid.line` is the same as: [line](#line) - -##### line - -**optional** *object* - -Coordinate axis configuration item, NULL means not displayed. - - - -> **Attention:** The full configuration of lineStyle is `{ style: { stroke: '#ddd', ... } }`, please check it when your configuration doesn't work. - -| Properties | Type | Description | -| ------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| stroke | *string* | color of the line | -| lineWidth | *number* | width of the line | -| lineDash | *\[number,number]* | configure dashed line, the first parameter is the length of each segment, the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| opacity | *number* | opacity | -| shadowColor | *string* | shadow color | -| shadowBlur | *number* | Gaussian blur coefficient | -| shadowOffsetX | *number* | configure horizontal distance between shadow and line | -| shadowOffsetY | *number* | configure vertical distance between shadow and line | -| cursor | *string* | mouse style, same as the mouse style of CSS, default value : 'default' | - -Example (config the grid line style of xAxis): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -The configuration item of the coordinate axis scale line. NULL means not displayed. - -| Properties | Type | Description | -| ---------- | ----------- | -------------------------------------- | -| style | *lineStyle* | The style of tickLine. | -| alignTick | *boolean* | Whether aligh tickLine with tick label | -| length | *number* | The length of tickLine. | - -Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*. The params of *ShapeAttrsCallback* are as follow: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -A configuration item for a coordinate subscale. NULL indicates that it is not displayed. - -| Properties | Type | Description | -| ---------- | ---------------------------------- | -------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | The style of subTickLine. | -| count | *number* | The count of subTickLine. | -| length | *number* | The length of subTickLine. | - -Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*. The params of *ShapeAttrsCallback* are as follow: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -Whether to nice. - -##### min - -**optional** *number* *default:* `0` - -Minimum axis. - -##### max - -**optional** *number* - -Maximum axis. - -##### minLimit - -**optional** *number* - -Minimal limit. - -##### maxLimit - -**optional** *number* - -Maximum limit. - -##### tickCount - -**optional** *number* - -The expected number of axes, not the final result. - -##### tickInterval - -**optional** *number* - -Interval of axes. - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -Specify a tick calculation method, or customize a tick calculation method. Built-in tick calculations include `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -Animation switch, default true. - -##### animateOption - -**optional** *object* - -Animation parameter configuration. - -```ts -interface ComponentAnimateCfg { - /** Duration of the first animation */ - readonly duration?: number; - /** Easing method used for the first animation. */ - readonly easing?: string; - /** Delay before updating the animation */ - readonly delay?: number; -} -// Configure the reference -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` - - -#### legend - -There are two ways to configure legends - -Method 1, pass in 'Boolean' to set whether to display a legend. - -```ts -legend: false; // close legend -``` - -Method 2, pass in *LegendCfg* to configure the legend as a whole. - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - -##### layout - -**optional** *horizontal | vertical* - -Layout of legend. - -##### title - -**optional** *G2LegendTitleCfg* - -Legend title configuration is not displayed by default. *G2LegendTitleCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ----------------------------------------------------------------------------------- | -| title | *string* | Content of legend title | -| spacing | *number* | - | The spacing between the title and the legend item | -| style | *object* | - | Text style configuration item, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -The position of legend is optional:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - - - -##### offsetX - -**optional** *number* - -Legends offset in the x direction. - -##### offsetY - -**optional** *number* - -Legends offset in the y direction. - -##### background - -**optional** *LegendBackgroundCfg* - -Background box configuration item. *LegendBackgroundCFG* is configured as follows: - -| Properties | Type | Description | -| ---------- | ------------------ | ------------------------------------------------------- | -| padding | *number | number\[]* | White space in the background | -| style | *ShapeAttr* | Background style configuration, Reference [Graphic Style](/en/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -Apply to Classification legend,whether to page when there are too many legend items. (⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -Apply to Classification legend. You can set the maximum number of rows when legend items is flip-paged, (only applicable to 'layout:' horizontal '),default: 1. - -##### pageNavigator - -**optional** *object* - -Apply to Classification legend, configure the style of page navigator, it works when legend is in flipPage. Types of *LegendPageNavigatorCfg* are as follow: - -| Properties | Type | Description | -| ------ | --------------------- | -------------- | -| marker.style | *PageNavigatorMarkerStyle* | 分页器指示箭头配置项 | -| text.style | *PageNavigatorTextStyle* | The text style of page info. | - -Types of ***PageNavigatorMarkerStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -Types of ***PageNavigatorTextStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -Example: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -Apply to Classification legend, lengend item height, default null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -Apply to Classification legend, legend item width, default null, automatic calculation. - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -Apply to Classification legend, control the horizontal spacing of legend items. - -##### marker - -**optional** *MarkerCfg* - -Apply to Classification legend, the configuration of the Marker icon of the legend item. - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -Apply to Classification legend, the maximum width of the legend item. 当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。 - -##### maxHeight - -**optional** *number* - -Apply to Classification legend, the maximum height of the legend item. 当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。 - -##### reversed - -**optional** *boolean* -Apply to Classification legend, whether to display legend items in reverse order. - -##### custom - -**optional** *boolean* - -If it is a custom legend, the items property needs to be declared when this property is true. - -##### items - -**optional** *LegendItem\[]* -Apply to Classification legend, the user configures the content of the legend item. *LegendItem* Configuration is as follows: - -| Properties | Type | Required | Description | -| ---------- | ----------- | -------- | ------------------------------------ | -| id | *string* | | Unique value for animation or lookup | -| name | *string* | required | name | -| value | any | required | value | -| marker | *MarkerCfg* | | marker | - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### min - -**optional** *number* - -Apply to Continuous legend, select the minimum value of the range. - -##### max - -**optional** *number* - -Apply to Continuous legend, select the maximum value of the range. - -##### value - -**optional** *number\[]* - -Apply to Continuous legend, 当前选中的范围. - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` -Apply to Continuous legend, whether the slider can slide. - -##### rail - -**optional** *ContinueLegendRailCfg* -Apply to Continuous legend, a style configuration item for the legend slider (background).*ContinueLegendRailCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| type | *string* | - | rail type: color and size, default: 'color' | -| size | *number* | - | The width of the slide rail | -| defaultLength | *number* | - | The default length of the slider, default: 100. When maxWidth,maxHeight is limited, this property is not used and the length is automatically calculated | -| style | *object* | - | Slide rail style, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### label - -**optional** *ContinueLegendLabelCfg* - -Apply to Continuous legend, a configuration item for the text, *ContinueLegendLabelCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| align | *string* | - | The alignment of text with the slider
- rail : Align with the slide rail, at both ends of the slide rail
- top, bottom: Legends are valid when laid out horizontally
- left, right: Legends are valid when laid out vertically | -| style | *object* | - | Text style configuration item, reference [Graphic Style](/zh/docs/api/graphic-style) | -| spacing | *number* | - | The distance between the text and the slide | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### track - -**optional** *ContinueLegendTrackCfg* -Apply to Continuous legend, select the color block style configuration item for the range. *ContinueLegendTrackCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------- | -| style | *object* | - | Selected range of styles, reference [Graphic Style](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -Apply to Continuous legend, configuration items for slider. (暂不支持自定义) - -*ContinueLegendHandlerCfg* is configured as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | --------------------------------------------------------------------------- | -| size | *number* | - | Slider size, default: 10 | -| style | *object* | - | Slider configuration, reference [Graphic Style](/zh/docs/api/graphic-style) | - - -#### label - -> Label configuration is not supported in violin,you can use `annnotation` to replace it. - - - -| Properties | Type | Description | -| ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -| type | *string* | When a user uses a custom label type, need to declare the specific type, otherwise you will use the default label type rendering (pie chart label support `inner | outer | spiders`) | -| offset | *number* | label offset | -| offsetX | *number* | The offset distance of the label from the data point in the X direction | -| offsetY | *number* | The offset distance of the label from the data point in the Y direction | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | Text content that is displayed, if not declared, is displayed according to the value of the first field participating in the mapping | -| style | *ShapeAttrs* | Label text graphic property style | -| autoRotate | *string* | Whether to rotate automatically, default true | -| rotate | *number* | Text rotation Angle | -| labelLine | *null* | *boolean* | *LabelLineCfg* | Used to set the style property of the text connector. NULL indicates that it is not displayed. | -| labelEmit | *boolean* | Only applies to text in polar coordinates, indicating whether the text is radially displayed according to the Angle. True means on and false means off | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | Text layout type, support a variety of layout function combination. | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | Specifies the position of the current Label relative to the current graphic (Only works for column plot and bar plot, which geometry is interval) | -| animate | *boolean | AnimateOption* | Animation configuration. | -| formatter | *Function* | Format function | -| autoHide | *boolean* | Whether to hide it automatically, default to false | - -Types of ***LabelLineCfg*** are as follow: (Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -Example code: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### tooltip - -##### fields - -**optional** *string\[]* - -Specifies the fields to be displayed in the Tooltip. By default, different charts have different default field lists. Use with the 'formatter' configuration for more effect. - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**optional** *Function* - -Formats the contents of the Tooltip Item (you can use `customContent` when content contains multiple tooltipItems). - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**optional** *boolean* *default:* `true` - -Sets whether the Tooltip content box follows the mouse. - -##### enterable - -**optional** *boolean* *default:* `false` - -Whether the tooltip allows mouse to slide in. - -##### showTitle - -**optional** *boolean* *default:* `false` - -Whether show tooltip title. - -##### title - -**optional** *string* - -Set the title content of the Tooltip: If the value is the name of the data field, the value for the field in the data is displayed, and if the field does not exist in the data, the title value is displayed directly. - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -Sets the fixed display location of the Tooltip relative to the data point. - -##### shared - -**optional** *boolean* - -True means that all data corresponding to the current point is merged and displayed, while false means that only the data content closest to the current point is displayed. - -##### showCrosshairs - -**optional** *boolean* *default:* `false` - -Whether show crosshairs。 - -##### crosshairs - -**optional** *object* - -Configure tooltip crosshairs to work if and only if 'showCrosshairs' is true. - -| Properties | Type | Description | -| -------------- | ---------------------- | --------------------------------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | Crosshairs Type: 'X' represents the auxiliary line on the X axis, 'Y' on the Y axis | -| line | *lineStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | Text configuration of crosshairs pointer, support callback | -| textBackground | *textBackgroundStyle* | Guideline text background configuration | -| follow | *boolean* | Whether the guide line follows the mouse. Default is false, that is, to locate the data point | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| Properties | Type | Description | -| ---------- | -------------------- | ------------------------------------------- | -| padding | *number | number\[]* | White space around the background of a text | -| style | *shapeStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style) | - -##### showMarkers - -**optional** *boolean* *default:* `true` - -Whether to render TooltipMarkers. - -##### marker - -**optional** *ShapeAttrs* - -TooltipMarker style configuration. - -Please refer to the style configuration [ShapeAttrs](/en/docs/api/graphic-style) - -##### showContent - -**optional** *boolean* *default:* `false` - -Whether to display the Tooltip content box. - -##### container - -**optional** *string|HTMLElement* - -Custom tooltip container. - -##### containerTpl - -**optional** *string* - -Templates used to specify the legend container must include the classes of each DOM node when customizing the template - -##### itemTpl - -**optional** *string* - -The default template for each record, which must include the classes of each DOM node when customizing the template. - -##### domStyles - -**optional** *TooltipDomStyles* - -The styles for each DOM. - -dom-styles - -```ts -/** Tooltip content box css style */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**optional** *number* - -Tooltip offset. - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems ✨ - -**optional** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - -##### customContent - -**optional** *Function* - -Support for custom templates. [Live demo](/en/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### slider - -> Only line plot, area plot and dual-axes plot are supported. - -| Properties | Type | Description | -| --------------- | -------------- | --------------------------------------- | -| start | *number* | Default starting position | -| end | *number* | Default ending position | -| height | *number* | Slider height | -| trendCfg | *TrendCfg* | Configuration of background trends | -| backgroundStyle | *object* | Background style, reference[Graphic Style](/en/docs/api/graphic-style) | -| foregroundStyle | *object* | Foreground style, reference[Graphic Style](/en/docs/api/graphic-style) | -| handlerStyle | *HandlerStyle* | Handler configuration | -| textStyle | *object* | Text style, reference[Graphic Style](/en/docs/api/graphic-style) | -| minLimit | *number* | Lower limit of sliding position allowed | -| maxLimit | *number* | Upper limit of sliding position allowed | -| formatter | *Function* | Slider text formatting function | - -Types of ***TrendCfg*** are as follow: - -| Properties | Type | Description | -| --------------- | ---------- | ------------------------------ | -| data | *number\[]* | Trend data | -| smooth | *boolean* | Whether smooth | -| isArea | *boolean* | Whether area | -| backgroundStyle | *object* | Background style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | -| lineStyle | *object* | Line style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | -| areaStyle | *object* | Area style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | - -Types of ***HandlerStyle*** are as follow: - -| Properties | Type | Description | -| ---------- | -------- | ------------------------ | -| width | *number* | Width of slider handler | -| height | *number* | Height of slider handler | -| fill | *string* | Fill color of handler | -| highLightFill | *string* | Highlight fill color of handler (when hovering) | -| stroke | *string* | Stroke color of handler | -| opacity | *number* | Fill opacity of handler | -| radius | *number* | Radius of handler rect | -| cursor | *string* | Style of cursor (when hovering handler) | diff --git a/site/docs/common/component.zh.md b/site/docs/common/component.zh.md deleted file mode 100644 index 0ed734b17..000000000 --- a/site/docs/common/component.zh.md +++ /dev/null @@ -1,1931 +0,0 @@ -#### axis - -xAxis、yAxis 配置相同。**注意**:由于 DualAxes(双轴图) 和 BidirectionalBar(对称条形图) 是双 y 轴, yAxis 类型是以 yField 中的字段作为 `key` 值的`object`。 - -##### top - -**optional** *boolean* *default:* `false` - -是否渲染在画布顶层,防止部分图形中,需要将 axis 显示在图形上面,避免被图形遮挡。 - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -适用于直角坐标系,设置坐标轴的位置。 - -##### title - -**optional** *object* - -标题的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------ | --------------------------------------------------------- | -| text | *string* | 坐标轴标题 | -| position | *string* | 轴标题的位置,默认:'center'。可选项: start, center, end | -| offset | *number* | 标题距离坐标轴的距离 | -| spacing | *number* | 标题距离坐标轴文本的距离 | -| style | *shapeStyle* | 标题文本配置项 | -| autoRotate | *boolean* | 是否自动旋转 | - -***shapeStyle*** - - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | *string* | 图形的填充色 | -| r | *number* | 用于 `point`, 代表图形的半径大小 | -| fillOpacity | *number* | 图形的填充透明度 | -| stroke | *string* | 图形的描边 | -| lineWidth | *number* | 图形描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 图形的整体透明度 | -| shadowColor | *string* | 图形阴影颜色 | -| strokeOpacity | *number* | 图形边框透明度 | -| shadowBlur | *number* | 图形阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -关于 ShapeStyle 更加详细的文档参考 [绘图属性](/zh/docs/api/graphic-style)。 - - -***label*** - -**optional** *object* - -文本标签的配置项,null 表示不展示。 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -##### label - - **optional** *AxisLabelCfg | null* - -文本标签的配置项,null 表示不展示。*AxisLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------------------------------------- | ------- | ------------------------ | -| offset | *number* | - | label 的偏移量 | -| rotate | *number* | - | 文本旋转角度 | -| autoRotate | *boolean |avoidCallback* | `true` | 是否自动旋转 | -| autoHide | *boolean |avoidCallback | { type:string,cfg?:AxisLabelAutoHideCfg }* | `false` | 是否自动隐藏 | -| autoEllipsis | *boolean |avoidCallback |string* | `false` | 是否自动省略 | -| formatter | *`(text: string, item: ListItem, index: number) => any`* | `false` | 格式化函数 | -| style | *[ShapeAttrs](/zh/docs/api/graphic-style)* | - | 坐标轴刻度线的样式配置项 | - -***avoidCallback*** 类型定义如下: - -```ts -type avoidCallback = (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; -``` - -***AxisLabelAutoHideCfg*** 类型定义如下: - -```ts -interface AxisLabelAutoHideCfg { - /** 最小间距配置 */ - minGap?: number; -} -``` - -##### verticalFactor - -**optional** *number* - -标记坐标轴 label 的方向,左侧为 1,右侧为 -1(仅适用于垂直方向的坐标轴) - -##### verticalLimitLength - -**optional** *number* - -配置坐标轴垂直方向的最大限制长度,对文本自适应有很大影响。 - -##### grid - -**optional** *object* - -坐标轴网格线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ------------------ | -------------------------------------------------------- | -| line | *lineStyle* | 线的样式, | -| alternateColor | *string|string\[]* | 两个栅格线间的填充色 | -| closed | *boolean* | 对于 circle 是否关闭 grid | -| alignTick | *boolean* | 是否同刻度线对齐,如果值为 false,则会显示在两个刻度中间 | - -网格线条样式的配置与 [line](#line) 是一致的。 - -##### line - -**optional** *object* - -坐标轴线的配置项,null 表示不展示。 - - - -> **注意:** 线条样式的完整配置是 `{ style: { stroke: '#ddd', ... } }`, 如果配置线条样式不生效的时候,请检查一下。 - -| 属性名 | 类型 | 介绍 | -| ------------- | ----------------- | ------------------------------------------------------------------------------------------------------ | -| stroke | *string* | 线的颜色 | -| lineWidth | *number* | 线宽 | -| lineDash | *\[number,number]* | 虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| opacity | *number* | 透明度 | -| shadowColor | *string* | 阴影颜色 | -| shadowBlur | *number* | 高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例(设置 x 轴的 grid 网格线条样式): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` - - -##### tickLine - -**optional** *object* - -坐标轴刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴刻度线的样式。 | -| alignTick | *boolean* | 坐标轴刻度线是否同 tick 对齐 | -| length | *number* | 坐标轴刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### subTickLine - -**optional** *object* - -坐标轴子刻度线的配置项,null 表示不展示。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------------------------------- | ---------------------- | -| style | *ShapeAttrs | ShapeAttrsCallback* | 坐标轴子刻度线的样式。 | -| count | *number* | 子刻度个数 | -| length | *number* | 坐标轴子刻度线长度 | - -关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档。*ShapeAttrsCallback* 回调参数如下: - -```ts -type ShapeAttrsCallback = (item: any, index: number, items: any[]) => ShapeAttrs; -``` - -##### nice - -**optional** *boolean* *default:* `true` - -是否美化。 - -##### min - -**optional** *number* *default:* `0` - -坐标轴最小值。 - -##### max - -**optional** *number* - -坐标轴最大值。 - -##### minLimit - -**optional** *number* - -最小值限定。 - -##### maxLimit - -**optional** *number* - -最大值限定。 - -##### tickCount - -**optional** *number* - -期望的坐标轴刻度数量,非最终结果。 - -##### tickInterval - -**optional** *number* - -坐标轴刻度间隔。 - -##### tickMethod - -**optional** *string | Function* *default:* `false` - -指定 tick 计算方法,或自定义计算 tick 的方法,内置 tick 计算方法包括 `cat`、`time-cat`、 `wilkinson-extended`、`r-pretty`、`time`、`time-pretty`、`log`、`pow`、`quantile`、`d3-linear`。 - -##### animate - -**optional** *boolean* *default:* `true` - -动画开关,默认开启。 - -##### animateOption - -**optional** *object* - -动画参数配置。 - -```ts -interface ComponentAnimateCfg { - /** 动画执行时间 */ - readonly duration?: number; - /** 动画缓动函数 */ - readonly easing?: string; - /** 动画延迟时间 */ - readonly delay?: number; -} -// 配置参考 -{ - animateOption: { - appear: ComponentAnimateCfg; - update: ComponentAnimateCfg; - enter: ComponentAnimateCfg; - leave: ComponentAnimateCfg; - } -} -``` - - -#### legend - -配置图例有两种方式 -第一种,传入 `boolean` 设置是否显示图例。 - -```ts -legend: false; // 关闭图例 -``` - -第二种,传入 *LegendCfg* 对图例进行整体配置。 - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - -##### layout - -**optional** *horizontal | vertical* - -图例布局方式。提供横向布局和纵向布局。 - -##### title - -**optional** *G2LegendTitleCfg* - -图例标题配置,默认不展示。*G2LegendTitleCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------- | ------------------------------------------------------------ | -| title | *string* | 文本显示内容 | -| spacing | *number* | 标题同图例项的间距 | -| style | *object* | 文本样式配置项,参考  [绘图属性](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -图例位置,可选项:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - -尝试一下: - - - -##### offsetX - -**optional** *number* - -图例 x 方向的偏移。 - -##### offsetY - -**optional** *number* - -图例 y 方向的偏移。 - -##### background - -**optional** *LegendBackgroundCfg* - -背景框配置项。*LegendBackgroundCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| padding | *number | number\[]* | 背景的留白 | -| style | *ShapeAttr* | 背景样式配置项, 参考[绘图属性](/zh/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -适用于 分类图例,当图例项过多时是否进行分页。(⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -适用于 分类图例,当图例项过多分页时,可以设置最大行数(仅适用于 `layout: 'horizontal'`),默认为:1。 - -##### pageNavigator - -**optional** *object* - -适用于 分类图例,图例分页导航器的主题样式设置。*LegendPageNavigatorCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------- | ------ | ----------------------- | -| marker.style | *PageNavigatorMarkerStyle* | - | 分页器指示箭头 样式配置 | -| text.style | *PageNavigatorTextStyle* | - | 分页器页面信息 样式配置 | - -***PageNavigatorMarkerStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------------- | -------- | ------ | ---------------------------------------------------------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -***PageNavigatorTextStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| -------- | -------- | ------ | ---------------------------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -示例: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -适用于 分类图例,图例的高度, 默认为 null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -适用于 分类图例,图例项的宽度, 默认为 null,自动计算。 - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -适用于 分类图例,控制图例项水平方向的间距。 - -##### label - -**optional** *ContinueLegendLabelCfg* - -适用于 连续图例,文本的配置项。*ContinueLegendLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | -------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| align | *string* | - | 文本同滑轨的对齐方式
- rail : 同滑轨对齐,在滑轨的两端
- top, bottom: 图例水平布局时有效
- left, right: 图例垂直布局时有效 | -| style | *object* | - | 文本样式配置项,详见  [绘图属性](/zh/docs/api/graphic-style) | -| spacing | *number* | - | 文本同滑轨的距离 | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### marker - -**optional** *MarkerCfg | MarkerCfgCallback* - -适用于 分类图例,图例项的 marker 图标的配置。 - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -```sign -type LegendItem = { name: string; value: string; } & MarkerCfg; - -type MarkerCfgCallback = (name: string, index: number, item: LegendItem) => MarkerCfg; -``` - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -适用于 分类图例,图例项容器最大宽度设置。当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxWidth = Math.min(maxWidth, maxWidthRatio * viewBBox.width); -``` - -##### maxHeight - -**optional** *number* - -适用于 分类图例,图例项容器最大高度设置。当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxHeight = Math.min(maxHeight, maxHeightRatio * viewBBox.height); -``` - -##### reversed - -**optional** *boolean* - -适用于 分类图例,是否将图例项逆序展示。 - -##### custom - -**optional** *boolean* - -是否为自定义图例,当该属性为 true 时,需要声明 items 属性。 - -##### items - -**optional** *LegendItem\[]* -适用于 分类图例,用户自己配置图例项的内容。*LegendItem* 配置如下: - -| 参数名 | 类型 | 是否必选 | 描述 | -| ------ | ----------- | -------- | ------------------------ | -| id | *string* | | 唯一值,用于动画或者查找 | -| name | *string* | required | 名称 | -| value | any | required | 值 | -| marker | *MarkerCfg* | | 图形标记 | - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -##### min - -**optional** *number* - -适用于 连续图例,选择范围的最小值。 - -##### max - -**optional** *number* - -适用于 连续图例,选择范围的最大值。 - -##### value - -**optional** *number\[]* - -适用于 连续图例,当前选中的范围。 - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` - -适用于 连续图例,滑块是否可以滑动。 - -##### rail - -**optional** *ContinueLegendRailCfg* - -适用于 连续图例,图例滑轨(背景)的样式配置项。*ContinueLegendRailCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------------- | -------- | -------------------------------------------------------------------------------- | -| type | *string* | rail 的类型,color, size,默认:'color' | -| size | *number* | 滑轨的宽度 | -| defaultLength | *number* | 滑轨的默认长度,默认:100。当限制了 maxWidth,maxHeight 时,不会使用这个属性会自动计算长度 | -| style | *object* | 滑轨的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### track - -**optional** *ContinueLegendTrackCfg* -适用于 连续图例,选择范围的色块样式配置项。*ContinueLegendTrackCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| style | *object* | - | 选定范围的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -适用于 连续图例,滑块的配置项。(暂不支持自定义) - -*ContinueLegendHandlerCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| size | *number* | - | 滑块的大小,默认:10 | -| style | *object* | - | 滑块的样式设置,参考 [绘图属性](/zh/docs/api/graphic-style) | - - -#### label - -> 小提琴图暂时不支持 label 展示,可以使用 annnotation 进行替代 - - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` - - -#### tooltip - -##### fields - -**可选** *string\[]* - -指定 tooltip 中显示的字段,默认不同图表有不同的默认字段列表。配合 `formatter` 配置一起使用,效果更佳。 - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**可选** *Function* - -格式化 tooltip item 内容(暂时不支持多 tooltipItems 的格式化,可以使用 `customContent` 处理) - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**可选** *boolean* *default:* `true` - -设置 tooltip 内容框是否跟随鼠标移动。 - -##### enterable - -**可选** *boolean* *default:* `false` - -tooltip 是否允许鼠标滑入。 - -##### showTitle - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 标题。 - -##### title - -**可选** *string* - -设置 tooltip 的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,则直接展示 title 值。 - -##### position - -**可选** *`top` | `bottom` | `left` | `right`* - -设置 tooltip 的固定展示位置,相对于数据点。 - -##### shared - -**可选** *boolean* - -true 表示合并当前点对应的所有数据并展示,false 表示只展示离当前点最逼近的数据内容。 - -##### showCrosshairs - -**可选** *boolean* *default:* `false` - -是否展示 crosshairs。 - -##### crosshairs - -**可选** *object* - -配置 tooltip 的 crosshairs,当且仅当 `showCrosshairs` 为 true 时生效。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | --------------------- | ------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | crosshairs 的类型: `x` 表示 x 轴上的辅助线,`y` 表示 y 轴上的辅助项 | -| line | *lineStyle* | 线的配置项,详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | 辅助线文本配置,支持回调 | -| textBackground | *TextBackgroundStyle* | 辅助线文本背景配置 | -| follow | *boolean* | 辅助线是否跟随鼠标移动,默认为 false,即定位到数据点 | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | -------------------- | ------------------ | -| padding | *number | number\[]* | 文本背景周围的留白 | -| style | *shapeStyle* | 线的配置项, 详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style) | - -##### showMarkers - -**可选** *boolean* *default:* `true` - -是否渲染 tooltipMarkers。 - -##### marker - -**可选** *ShapeAttrs* - -tooltipMarker 的样式配置。 - -样式配置类型,详细可见: [ShapeAttrs](/zh/docs/api/graphic-style) - -##### showContent - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 内容框。 - -##### container - -**可选** *string|HTMLElement* - -自定义 tooltip 的容器。 - -##### containerTpl - -**可选** *string* - -用于指定图例容器的模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### itemTpl - -**可选** *string* - -每项记录的默认模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### domStyles - -**可选** *TooltipDomStyles* - -传入各个 dom 的样式。 - -dom-styles - -```ts -/** Tooltip 内容框的 css 样式定义 */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**可选** *number* - -tooltip 偏移量。 - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems - -**可选** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - - - -##### customContent - -**可选** *Function* - -支持自定义模板。[在线示例](/zh/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` - - -#### annotations - -详细配置见:各 Annotation 配置项说明。 - - - -Annotations are array types and can be set multiple times. - -```ts -annotations: [ - { - type: 'text', - position: ['median', 'median'], - content: '辅助文本', - style: { - fill: 'red', - }, - }, -]; -``` - -#### 💠 Text Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'text',` 标识为:辅助文本,在指定位置添加文本说明。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -文本标注位置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### x - -**optional** *number* - -文本标注位置 x,需要搭配 `y` 属性配置。不建议使用,建议使用 `position`。 - -##### y - -**optional** *number* - -文本标注位置 y,需要搭配 `x` 属性配置。不建议使用,建议使用 `position`。 - -##### content - -**optional** *string* - -Text annotations 的文本标注内容。 - -##### rotate - -**optional** *number* - -文本的旋转角度,弧度制。顺时针旋转。 - -##### offsetX - -**optional** *number* - -文本在 x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -文本在 y 轴方向的偏移量。 - -##### style - -**optional** *object* - -文本标注样式,参考[绘图属性](/zh/docs/api/graphic-style) - -##### background - -**optional** *object* - -文字包围盒样式设置。 - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| style | *object* | 文本背景的样式, 参考[绘图属性](/zh/docs/api/graphic-style) | -| padding | *number | number\[]* | 文本背景周围的留白 | - -##### maxLength - -**optional** *number* - -文文本的最大长度。 - -##### autoEllipsis - -**optional** *boolean* - -超出 maxLength 是否自动省略。 - -##### ellipsisPosition - -**optional** \_head | middle | tail \_ - -文本截断的位置。 - -##### isVertical - -**optional** *boolean* - -文本在二维坐标系的显示位置,是沿着 x 轴显示 还是沿着 y 轴显示。 - - -#### 💠 Line Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'line',` 标识为:辅助线(可带文本),例如表示平均值或者预期分布的直线。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### text - -**optional** *LineAnnotationTextCfg* - -辅助线上的文本设置。 - -***LineAnnotationTextCfg*** 类型定义如下: - -```ts -type LineAnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -[Example](/zh/examples/component/annotation#line-annotation-with-text) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Arc Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'arc',` 标识为:辅助弧线,只在**极坐标系**下生效。常用于绘制仪表盘。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - - -#### 💠 Image Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'image',` 标识为:辅助图片,在图表上添加辅助图片。 - -##### src - -**optional** *string* - -图片路径,用于 image 中。 - -##### position - -**optional** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -图片标注位置。 - -[Example](/zh/examples/component/annotation#image-annotation) - -##### start - -**optional** *AnnotationPosition* - -起始位置,需搭配 `end` 使用,也可以直接只使用 `position`。具体配置属性参考 Line Annotation `start` 配置。 - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,需搭配 `start` 使用,也可以直接只使用 `position`。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -图片标注样式,可以设置图片标注的宽度和高度,如下: - -```ts -annnotations: [{ - type: 'image', - src: 'xxx', - style: { - width: 50, - height: 50, - } -}] -``` - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'region',` 标识为:辅助框,框选一段图区,设置背景、边框等。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 DataMarker Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataMarker',` 标识为:特殊数据点标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### point - -**optional** *null | DataMarkerPointCfg* - -point 设置。当设置为:`null` 时,不展示 point 点标识。 - -***DataMarkerPointCfg*** 类型定义如下: - -```ts -// 当前只支持对 point 的样式进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; -} -``` - -##### line - -**optional** *null | DataMarkerLineCfg* - -line 设置。当设置为:`null` 时,不展示 line 标识。 - -***DataMarkerLineCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type DataMarkerPointCfg = { - style?: ShapeAttrs; - length?: number; -} -``` - -##### text - -**optional** *null | AnnotationTextCfg* - -DataMareker 辅助标记上的文本设置。当设置为:`null` 时,不展示文本标识。 - -***AnnotationTextCfg*** 类型定义如下: - -```ts -// 当前只支持对 line 的样式以及长度进行设置。 -type AnnotationTextCfg = { - /** 文本内容*/ - content?: string; - /** 自动旋转,沿着线的方向,默认 true */ - autoRotate?: boolean; - /** 文本的偏移 x */ - offsetX?: number; - /** 文本的偏移 y */ - offsetY?: number; - /** 字体样式,参考绘图属性 */ - style?: object; -}; -``` - -##### autoAdjust - -**optional** *boolean* - -文本超出绘制区域时,是否自动调节文本方向。 - -##### direction - -**optional** *upward | downward* - -朝向。 - -```plain - - -``` - - -#### 💠 DataRegion Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'dataRegion',` 标识为:特殊数据区间标注,多用于折线图和面积图。 - -##### position - -**required** *\[string, string] | Datum | ((xScale, yScales) => \[string, string])* - -DataMarker 标注位置,参考 Text Annotation 标注的 `position` 设置。 - -[Example](/zh/examples/component/annotation#text-annotation1) - -##### lineLength - - *number* **optional** *default:* `0` - -line 长度。 - -##### region - - *null | { style?: ShapeAttrs }* **optional** *default:* `0` - -标注区间的配置。点击 [ShapeAttrs](/zh/docs/api/shape/shape-attrs) 查看详细样式配置。 - -##### text - - *null | EnhancedTextCfg* **optional** *default:* `0` - -文本的配置。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Region Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'regionFilter',` 标识为:区域着色,将图表中位于矩形选区中的图形元素提取出来,重新着色。 - -##### start - -**optional** *AnnotationPosition* - -起始位置,一般用于 line、region 等。 - -***AnnotationPosition*** 类型定义如下: - -```ts -type AnnotationPositionCallback = ( - xScales: Scale[] | Record, - yScales: Scale[] | Record -) => [number | string, number | string]; - -// types of annotation -type AnnotationPosition = - | [number | string, number | string] - | Record - | AnnotationPositionCallback; -``` - -除了指定原始数据之外,还可以使用预设定数据点,如: - -* 'min': 最小值,minimum value. -* 'max': 最大值,maximum value. -* 'mean': 平均值,average value. -* 'median': 中位值,median value. -* 'start': 即 0. -* 'end': 即 1. - -[Example](/zh/examples/component/annotation#line-annotation-position) - -##### end - -**optional** *AnnotationPosition* - -结束位置,一般用于 line、region 等。具体配置属性参考: [start](#start) - -##### style - -**optional** *object* - -辅助线样式属性,参考[绘图属性](/zh/docs/api/graphic-style) - -##### color - -**optional** *string* - -染色色值,一般用于 regionFilter。 - -##### apply - -**optional** *string\[]* - -设定 regionFilter 只对特定 geometry 类型起作用,如 apply: \['area'],一般用于 regionFilter。 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### 💠 Html Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'html',`。自定义任意 HTML 类型的图形标记,通过 option 中的 html 配置来在图表中使用 HTML DOM 元素来添加图形标记。option 配置如下: - -##### container - - *string* | *HTMLElement* **optional** - -可选,自定义 HTML 图形标记的容器元素 - -##### html - - *string* | *HTMLElement* | *((container: HTMLElement, view: View) => void | string | HTMLElement)* - -自定义的图形标记的 HTML 元素,可为 HTML DOM 字符串,或 HTML 元素,或 html 回调函数 - -##### alignX - - *'left'* | *'middle'* | *'right'* **optional** *default:* 'left' - -DOM 元素在 X 方向的对齐方式 - -##### alignY - - *'top'* | *'middle'* | *'bottom'* **optional** *default:* 'top' - -DOM 元素在 Y 方向的对齐方式 - -##### offsetX - - *number* **optional** - -X 方向的偏移 - -##### offsetY - - *number* **optional** - -Y 方向的偏移 - - -#### 💠 Shape Annotation - -##### type - -**optional** *string* - -需要指定 `type: 'shape',`。自定义任意类型的图形标记,通过 option 中的 render 回调函数来在图表区域绘制自定义标记。option 配置如下: - -##### render - - *( -container: IGroup, -view: View, -helpers: { parsePosition: (position: \[string | number, string | number] | Datum) => Point } -) => void* - -自定义标记的绘制 render 函数,其他 *container* 为标记绘制的父容器, *view* 为图形实例, *helpers* 为辅助函数,其他 *parserPosition* 可以用来计算数据点对应的坐标位置 - -##### top - -**optional** *boolean* - -指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层。 - -##### offsetX - -**optional** *number* - -x 轴方向的偏移量。 - -##### offsetY - -**optional** *number* - -y 轴方向的偏移量。 - -##### animate - -**optional** *boolean* - -是否进行动画。 - -##### animateOption - -**optional** *object* - -动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。,参考[动画参数配置](/zh/docs/api/options/animation) - - -#### slider - -> 目前只适用于:折线图、面积图、双轴图。 - -| 配置项 | 类型 | 功能描述 | -| --------------- | -------------- | ------------------ | -| start | *number* | 默认起始位置 | -| end | *number* | 默认结束位置 | -| height | *number* | 缩略轴高度 | -| trendCfg | *TrendCfg* | 背景趋势的配置 | -| backgroundStyle | *object* | 背景配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| foregroundStyle | *object* | 前景配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| handlerStyle | *HandlerStyle* | handler 配置 | -| textStyle | *object* | 文本配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| minLimit | *number* | 允许滑动位置下限 | -| maxLimit | *number* | 允许滑动位置上限 | -| formatter | *Function* | 滑块文本格式化函数 | - -***TrendCfg*** 类型如下: - -| 配置项 | 类型 | 功能描述 | -| --------------- | ---------- | -------------- | -| data | *number\[]* | 统计文本的样式 | -| smooth | *boolean* | 是否平滑 | -| isArea | *boolean* | 是否面积图 | -| backgroundStyle | *object* | 背景样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| lineStyle | *object* | line 样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| areaStyle | *object* | area 样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | - -***HandlerStyle*** 类型如下: - -| 配置项 | 类型 | 功能描述 | -| ------ | -------- | -------------- | -| width | *number* | 缩略轴手柄宽度 | -| height | *number* | 缩略轴手柄高度 | -| fill | *string* | 缩略轴手柄填充色 | -| highLightFill | *string* | 缩略轴手柄填充高亮色(hover 状态) | -| stroke | *string* | 缩略轴手柄描边色 | -| opacity | *number* | 缩略轴手柄填充透明度 | -| radius | *number* | 缩略轴手柄背景圆角 | -| cursor | *string* | 缩略轴手柄鼠标样式 (hover 状态) | diff --git a/site/docs/common/connected-area.en.md b/site/docs/common/connected-area.en.md deleted file mode 100644 index 6a96c01ed..000000000 --- a/site/docs/common/connected-area.en.md +++ /dev/null @@ -1,18 +0,0 @@ -Applicable to stacked bar charts and stacked bar charts, the link area component provides visual assistant identification by drawing the link area of the same field, which is convenient for data comparison. (Attention:could not use with **columnBackground** ) - -**optional** *object* | *false* - -| Properties | Type | Required | Default | Description | -| ---------- | ---------------- | ------------ | ---------------------- | -| trigger | 'hover'、'click' | No |'hover' | Trigger method | -| style | *ConnectedAreaStyleCfg* | | No | | StyleCfg of connectedArea | - -Types of ***ConnectedAreaStyleCfg*** are as follows: - -```sign -type ConnectedAreaStyleCfg = ShapeAttrs | ((oldStyle: ShapeAttrs, element: Element) => ShapeAttrs); -``` - -**Examples:** - - diff --git a/site/docs/common/connected-area.zh.md b/site/docs/common/connected-area.zh.md deleted file mode 100644 index cb276a038..000000000 --- a/site/docs/common/connected-area.zh.md +++ /dev/null @@ -1,18 +0,0 @@ -适用于堆叠柱状图和堆叠条形图,联通区域组件通过绘制同一字段的联通区域提供视觉上的辅助识别,方便进行数据对比。(注意:不能和 **columnBackground** 同时使用) - -**optional** *object* | *false* - -| 配置项 | 类型 | 是否必选 | 默认值| 功能描述 | -| ------- | ---------------- | ------------ | ----------------- | -| trigger | *'hover'、'click'* | 否 |'hover' | 触发方式 | -| style | *ConnectedAreaStyleCfg* | | 否 | | 联通区域的样式配置 | - -***ConnectedAreaStyleCfg*** 类型定义如下: - -```sign -type ConnectedAreaStyleCfg = ShapeAttrs | ((oldStyle: ShapeAttrs, element: Element) => ShapeAttrs); -``` - -**图表示例:** - - diff --git a/site/docs/common/conversion-tag.en.md b/site/docs/common/conversion-tag.en.md deleted file mode 100644 index 63837551b..000000000 --- a/site/docs/common/conversion-tag.en.md +++ /dev/null @@ -1,26 +0,0 @@ -**optional** *object* | *false* - -| Properties | Type | Default | Description | -| ---------- | ------------------- | ------- | -------------------------------------------------------- | ----------------------------------------------- | -| size | *number* | - | Conversion rate Component dimensions | -| spacing | *number* | - | Component and column spacing | -| offset | *number* | - | Component and axis spacing | -| arrow | *ArrowCfg | false* | - | Arrow shape configuration, false does not display arrows | -| text | *TextCfg | false* | No | - | Text configuration, false does not display text | - -ArrowCfg configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ----------------- | -| headSize | *number* | - | Size of the arrow | -| style | *object* | - | Arrow style | - -TextCfg configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------------------------------------- | ------- | ---------------------------------- | -| headSize | *number* | - | Size of the arrow | -| style | *object* | - | Arrow style | -| formatter | *(prev:number, next:number) => string* | - | Custom conversion rate calculation | - -Please refer to the style configuration [ShapeAttrs](/en/docs/api/graphic-style) diff --git a/site/docs/common/conversion-tag.zh.md b/site/docs/common/conversion-tag.zh.md deleted file mode 100644 index 1d34e220e..000000000 --- a/site/docs/common/conversion-tag.zh.md +++ /dev/null @@ -1,26 +0,0 @@ -**optional** *object* | *false* - -| 配置项 | 类型 | 默认值 | 功能描述 | -| ------- | ------------------- | ------ | -------------------------------- | -| size | *number* | - | 转化率组件尺寸 | -| spacing | *number* | - | 组件和柱子间距 | -| offset | *number* | - | 组件和轴线间距 | -| arrow | *ArrowCfg | false* | - | 箭头形状配置,false 时不显示箭头 | -| text | *TextCfg | false* | - | 文本配置、false 时不显示文本 | - -其中 ArrowCfg 配置如下 - -| 配置项 | 类型 | 默认值 | 功能描述 | -| -------- | -------- | ------ | -------- | -| headSize | *number* | - | 箭头尺寸 | -| style | *object* | - | 箭头样式 | - -TextCfg 配置如下 - -| 配置项 | 类型 | 默认值 | 功能描述 | -| --------- | -------------------------------------- | ------ | ---------------- | -| headSize | *number* | - | 箭头尺寸 | -| style | *object* | - | 箭头样式 | -| formatter | *(prev:number, next:number) => string* | - | 自定义转化率计算 | - -样式配置类型请参考 [绘图属性](/zh/docs/api/graphic-style) diff --git a/site/docs/common/crosshairs-text.en.md b/site/docs/common/crosshairs-text.en.md deleted file mode 100644 index 89742deed..000000000 --- a/site/docs/common/crosshairs-text.en.md +++ /dev/null @@ -1,57 +0,0 @@ - - -Types of ***TooltipCrosshairsText*** are as follow: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * position of text, only support: 'start' | 'end' - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -}; -``` - -Details about types of ***TextStyle*** see: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -Types of ***TooltipCrosshairsTextCallback*** are as follow: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = ( - type: string, - defaultContent: any, - items: any[], - currentPoint: Point -) => TooltipCrosshairsText; -``` - - - - diff --git a/site/docs/common/crosshairs-text.zh.md b/site/docs/common/crosshairs-text.zh.md deleted file mode 100644 index 290ee8d0b..000000000 --- a/site/docs/common/crosshairs-text.zh.md +++ /dev/null @@ -1,53 +0,0 @@ - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - diff --git a/site/docs/common/data.en.md b/site/docs/common/data.en.md deleted file mode 100644 index fbb161b04..000000000 --- a/site/docs/common/data.en.md +++ /dev/null @@ -1,10 +0,0 @@ -**required** *array object* - -Configure the data source. The data source is a collection of objects. For example: - -```ts -const data = [ - { time: '1991',value: 20 }, - { time: '1992',value: 20 }, -]; -``` diff --git a/site/docs/common/data.zh.md b/site/docs/common/data.zh.md deleted file mode 100644 index 0beef14fb..000000000 --- a/site/docs/common/data.zh.md +++ /dev/null @@ -1,10 +0,0 @@ -**required** *array object* - -设置图表数据源。数据源为对象集合,例如: - -```ts -const data = [ - { time: '1991',value: 20 }, - { time: '1992',value: 20 }, -]; -``` diff --git a/site/docs/common/drill-down.en.md b/site/docs/common/drill-down.en.md deleted file mode 100644 index 0d285bc8d..000000000 --- a/site/docs/common/drill-down.en.md +++ /dev/null @@ -1,22 +0,0 @@ -#### drilldown - -**optional** *DrillDownCfg* - -Configuration of drilldown interaction. - -Types of *DrillDownCfg* are as follows: - -| Properties | Type | Description | -| ---------- | --------------- | -------------------------------- | -| enabled | *boolean* | Whether enable drilldown interaction, default: 'false' | -| breadCrumb | *BreadCrumbCfg* | UI configurations of breadCrumb. | - -Types of *BreadCrumbCfg* are as follows: - -| Properties | Type | Description | -| ----------- | ------------ | ------------------------------------- | -| position | *string* | Position of breadCrumnb. Options: 'top-left' | 'bottom-left' | -| rootText | *string* | Text content of root, default: 'Root' | -| dividerText | *string* | Divider, default: '/' | -| textStyle | *ShapeAttrs* | Style of text | -| activeStyle | *ShapeAttrs* | Style of text when active (hover) | diff --git a/site/docs/common/drill-down.zh.md b/site/docs/common/drill-down.zh.md deleted file mode 100644 index 62329f809..000000000 --- a/site/docs/common/drill-down.zh.md +++ /dev/null @@ -1,22 +0,0 @@ -#### drilldown - -**optional** *DrillDownCfg* - -下钻交互配置。 - -*DrillDownCfg* 类型定义如下: - -| 属性 | 类型 | 描述 | -| ---------- | --------------- | ------------------------ | -| enabled | *boolean* | 是否开启下钻交互,默认为:'false' | -| breadCrumb | *BreadCrumbCfg* | 下钻交互的面包屑 UI 配置 | - -*BreadCrumbCfg* 类型定义如下: - -| 属性 | 类型 | 描述 | -| ----------- | ------------ | ------------------------------------------ | -| position | *string* | 位置。可选项:'top-left' | 'bottom-left' | -| rootText | *string* | 根节点的文案,默认:'Root'(中文:'初始') | -| dividerText | *string* | 分割线,默认:'/' | -| textStyle | *ShapeAttrs* | 字体样式 | -| activeTextStyle | *ShapeAttrs* | 激活字体样式 | diff --git a/site/docs/common/events.en.md b/site/docs/common/events.en.md deleted file mode 100644 index 402b94b7b..000000000 --- a/site/docs/common/events.en.md +++ /dev/null @@ -1,71 +0,0 @@ -On Plot, binding events are removed by `ON` and `OFF` method. - -```ts -// Bind event -plot.on('eventName', callback); -// Bind event, only trigger one time -plot.once('eventName', callback); -// Remove event -plot.off('eventName', callback); -``` - -Composition: `${componentName}:${eventName}` - -Element refers to the type of element to bind to, for example `element`、`legend-item`、`axis-label`、`mask`、`plot`、`legend-item-name`、`reset-button` etc. - -Events correspond to DOM common events, for example `click`、`mousedown`、`mouseup`、`dblclick`、`mouseenter`、`mouseout`、`mouseover`、`mousemove`、`mouseleave`、`contextmenu` etc. And support mobile events: `touchstart`、`touchmove`、`touchend` - -```ts -// Plot adds click events to the entire chart area -plot.on('plot:click', (...args) => { - console.log(...args); -}); - -// Element to add a click event, element represents the graphic elements, graphical elements, please see: https://g2.antv.vision/en/docs/manual/concepts/element -plot.on('element:click', (...args) => { - console.log(...args); -}); - -// Legend adds click events -plot.on('legend-item:click', (...args) => { - console.log(...args); -}); - -// Legend name adds click event -plot.on('legend-item-name:click', (...args) => { - console.log(...args); -}); - -// 给 tooltip 添加点击事件 -plot.on('tooltip:show', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:hide', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:change', (...args) => { - console.log(...args); -}); - -// Label adds click events -plot.on('label:click', (...args) => { - console.log(...args); -}); - -// Mask adds click events -plot.on('mask:click', (...args) => { - console.log(...args); -}); - -// Axis-label adds click events -plot.on('axis-label:click', (...args) => { - console.log(...args); -}); - -// Add click events to the annotation -plot.on('annotation:click', (...args) => { - console.log(...args); -}); -``` diff --git a/site/docs/common/events.zh.md b/site/docs/common/events.zh.md deleted file mode 100644 index b0ee7b749..000000000 --- a/site/docs/common/events.zh.md +++ /dev/null @@ -1,67 +0,0 @@ -在 Plot 上通过 `on` 绑定事件、`off` 移除绑定事件。 - -```sign -// 绑定事件 -plot.on('eventName', callback); -// 绑定事件,只触发一次 -plot.once('eventName', callback); -// 移除事件 -plot.off('eventName', callback); -``` - -组合方式: `${componentName}:${eventName}` - -```ts -// plot 添加点击事件,整个图表区域 -plot.on('plot:click', (...args) => { - console.log(...args); -}); - -// element 添加点击事件, element 代表图形元素,关于图形元素,请查看:https://g2.antv.vision/zh/docs/manual/concepts/element -plot.on('element:click', (...args) => { - console.log(...args); -}); - -// 图例添加点击事件 -plot.on('legend-item:click', (...args) => { - console.log(...args); -}); - -// 图例名称添加点击事件 -plot.on('legend-item-name:click', (...args) => { - console.log(...args); -}); - -// 给 tooltip 添加点击事件 -plot.on('tooltip:show', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:hide', (...args) => { - console.log(...args); -}); - -plot.on('tooltip:change', (...args) => { - console.log(...args); -}); - -// label 添加点击事件 -plot.on('label:click', (...args) => { - console.log(...args); -}); - -// mask 添加点击事件 -plot.on('mask:click', (...args) => { - console.log(...args); -}); - -// axis-label 添加点击事件 -plot.on('axis-label:click', (...args) => { - console.log(...args); -}); - -// 给 annotation 添加点击事件 -plot.on('annotation:click', (...args) => { - console.log(...args); -}); -``` diff --git a/site/docs/common/facet-title.en.md b/site/docs/common/facet-title.en.md deleted file mode 100644 index 4aa30f490..000000000 --- a/site/docs/common/facet-title.en.md +++ /dev/null @@ -1,8 +0,0 @@ -*FacetTitle* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------------------------------------- | ------ | ------------------- | -| offsetX | number | - | x 方向偏移 | -| offsetY | number | - | y 方向偏移 | -| style | [ShapeAttrs](/zh/docs/api/graphic-style) | - | 文本样式 | -| formatter | (val: any) => any | - | 回调配置 title 内容 | diff --git a/site/docs/common/facet-title.zh.md b/site/docs/common/facet-title.zh.md deleted file mode 100644 index 4aa30f490..000000000 --- a/site/docs/common/facet-title.zh.md +++ /dev/null @@ -1,8 +0,0 @@ -*FacetTitle* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------------------------------------- | ------ | ------------------- | -| offsetX | number | - | x 方向偏移 | -| offsetY | number | - | y 方向偏移 | -| style | [ShapeAttrs](/zh/docs/api/graphic-style) | - | 文本样式 | -| formatter | (val: any) => any | - | 回调配置 title 内容 | diff --git a/site/docs/common/geometry-cfg.en.md b/site/docs/common/geometry-cfg.en.md deleted file mode 100644 index f99eca672..000000000 --- a/site/docs/common/geometry-cfg.en.md +++ /dev/null @@ -1,110 +0,0 @@ -#### IGeometry.type - -**required** *string* - -Type of geometry, includes: `'line' | 'interval' | 'point' | 'area' | 'polygon'`。 - -#### IGeometry.mapping ✨ - -**required** *object* - -Mapping rules of geometry. - -在图形语法中,数据可以通过 `color`, `shape`, `size` 等视觉属性映射到图形上,另外 G2/G2Plot 还提供了 `style` 和 `tooltip`,让图形展示更多的信息。具体类型定义见下:(其中:ShapeStyle 具体见[绘图属性](/en/docs/api/graphic-style)) - -
- -```ts -type MappingOptions = { - /** color 映射 */ - readonly color?: ColorAttr; - /** shape 映射 */ - readonly shape?: ShapeAttr; - /** 大小映射, 提供回调的方式 */ - readonly size?: SizeAttr; - /** 样式映射 */ - readonly style?: StyleAttr; - /** tooltip 映射 */ - readonly tooltip?: TooltipAttr; -} - -/** 颜色映射 */ -type ColorAttr = string | string[] | ((datum: Datum) => string); -/** 尺寸大小映射 */ -type SizeAttr = number | [number, number] | ((datum: Datum) => number); -/** 图形 shape 映射 */ -type ShapeAttr = string | string[] | ((datum: Datum) => string); -/** 图形样式 style 映射 */ -type StyleAttr = ShapeStyle | ((datum: Datum) => ShapeStyle); -/** tooltip 的回调 */ -type TooltipAttr = (datum: Datum) => { name: string; value: string | number }; -``` - -
- -#### IGeometry.xField - -**optional** *string* - -对应 x 轴字段。数据映射到几何图形 geometry 上时,最重要的通道是 `position` 通道。笛卡尔坐标系上的几何图形,通常是一维或二维的,对应位置视觉通道需要 `x`, `y` 两个(或一个)字段的值。 - -#### IGeometry.yField - -**optional** *string* - -对应 y 轴字段。数据映射到几何图形 geometry 上时,最重要的通道是 `position` 通道。笛卡尔坐标系上的几何图形,通常是一维或二维的,对应位置视觉通道需要 `x`, `y` 两个(或一个)字段的值。 - -#### IGeometry.colorField - -**optional** *string* - -The mapping field of `color`. 通过颜色视觉通道对数据进行分组。 - -#### IGeometry.shapeField - -**optional** *string* - -The mapping field of `shape`. 通过不同的形状对数据进行分组。 - -#### IGeometry.sizeField - -**optional** *string* - -The mapping field of `size`. 通过 size 字段,可以将数据按照 `sizeField` 对应的数据进行不同的大小映射。 - -#### IGeometry.styleField - -**optional** *string* - -The mapping field of `style`, - -#### IGeometry.tooltipFields - -**optional** *string\[] | false* - -The mapping fields of `tooltip`, - -#### IGeometry.label - -**optional** *object* - -The mapping of `label`, see more: [Label API](/en/docs/api/components/label) - -#### IGeometry.adjust - -Adjust of data. - -The purpose of adjusting data is to make the graphics not obscure each other and to have a clearer understanding of the data, but the correct understanding of the data must be ensured. See more: [Adjust | G2](https://g2.antv.vision/en/docs/manual/concepts/adjust) - -| Properties | Type | Description | -| ------------ | ----------- | -------- | -| type | 'stack' | 'dodge' | 'jitter' | 'symmetric' | 数据调整类型 | -| marginRatio | number | 只对 'dodge' 生效,取 0 到 1 范围的值(相对于每个柱子宽度),用于控制一个分组中柱子之间的间距 | -| dodgeBy | string | 只对 'dodge' 生效,声明以哪个数据字段为分组依据 | -| reverseOrder | boolean | 只对 'stack' 生效,用于控制是否对数据进行反序操作 | - -#### IGeometry.state - -**optional** *object* - -Style of different state. diff --git a/site/docs/common/geometry-cfg.zh.md b/site/docs/common/geometry-cfg.zh.md deleted file mode 100644 index f12ea1dca..000000000 --- a/site/docs/common/geometry-cfg.zh.md +++ /dev/null @@ -1,108 +0,0 @@ -#### IGeometry.type - -**required** *string* - -几何图形 geometry 类型。可选值: `'line' | 'interval' | 'point' | 'area' | 'polygon'`。 - -#### IGeometry.mapping ✨ - -**required** *object* - -图形配置规则。 -在图形语法中,数据可以通过 `color`, `shape`, `size` 等视觉属性映射到图形上,另外 G2/G2Plot 还提供了 `style` 和 `tooltip`,让图形展示更多的信息。具体类型定义见下:(其中:ShapeStyle 具体见[绘图属性](/zh/docs/api/graphic-style)) - -
- -```ts -type MappingOptions = { - /** color 映射 */ - readonly color?: ColorAttr; - /** shape 映射 */ - readonly shape?: ShapeAttr; - /** 大小映射, 提供回调的方式 */ - readonly size?: SizeAttr; - /** 样式映射 */ - readonly style?: StyleAttr; - /** tooltip 映射 */ - readonly tooltip?: TooltipAttr; -}; - -/** 颜色映射 */ -type ColorAttr = string | string[] | ((datum: Datum) => string); -/** 尺寸大小映射 */ -type SizeAttr = number | [number, number] | ((datum: Datum) => number); -/** 图形 shape 映射 */ -type ShapeAttr = string | string[] | ((datum: Datum) => string); -/** 图形样式 style 映射 */ -type StyleAttr = ShapeStyle | ((datum: Datum) => ShapeStyle); -/** tooltip 的回调 */ -type TooltipAttr = (datum: Datum) => { name: string; value: string | number }; -``` - -
- -#### IGeometry.xField - -**可选** *string* - -对应 x 轴字段。数据映射到几何图形 geometry 上时,最重要的通道是 `position` 通道。笛卡尔坐标系上的几何图形,通常是一维或二维的,对应位置视觉通道需要 `x`, `y` 两个(或一个)字段的值。 - -#### IGeometry.yField - -**可选** *string* - -对应 y 轴字段。数据映射到几何图形 geometry 上时,最重要的通道是 `position` 通道。笛卡尔坐标系上的几何图形,通常是一维或二维的,对应位置视觉通道需要 `x`, `y` 两个(或一个)字段的值。 - -#### IGeometry.colorField - -**可选** *string* - -对应颜色(color)映射字段。通过颜色视觉通道对数据进行分组。 - -#### IGeometry.shapeField - -**可选** *string* - -对应形状(shape)映射字段。通过不同的形状对数据进行分组。 - -#### IGeometry.sizeField - -**可选** *string* - -对应大小(size)映射字段。通过 size 字段,可以将数据按照 `sizeField` 对应的数据进行不同的大小映射。 - -#### IGeometry.styleField - -**可选** *string* - -style 映射字段。 - -#### IGeometry.tooltipFields - -**可选** *string\[] | false* - -tooltip 映射字段。 - -#### IGeometry.label - -**可选** *object* - -label 映射通道,具体见 [Label API](/zh/docs/api/components/label) - -#### IGeometry.adjust - -数据调整配置项。 -调整数据的目的是为了使得图形不互相遮挡,对数据的认识更加清晰,但是必须保证对数据的正确理解,更多信息可以查看 [数据调整 | G2](https://g2.antv.vision/zh/docs/manual/concepts/adjust) - -| 参数名 | 类型 | 描述 | -| ------------ | ----------- | -------- | -| type | 'stack' | 'dodge' | 'jitter' | 'symmetric' | 数据调整类型 | -| marginRatio | number | 只对 'dodge' 生效,取 0 到 1 范围的值(相对于每个柱子宽度),用于控制一个分组中柱子之间的间距 | -| dodgeBy | string | 只对 'dodge' 生效,声明以哪个数据字段为分组依据 | -| reverseOrder | boolean | 只对 'stack' 生效,用于控制是否对数据进行反序操作 | - -#### IGeometry.state - -**可选** *object* - -不同状态的样式 diff --git a/site/docs/common/interactions.en.md b/site/docs/common/interactions.en.md deleted file mode 100644 index 401a370e3..000000000 --- a/site/docs/common/interactions.en.md +++ /dev/null @@ -1,42 +0,0 @@ -#### Add interactions - -Usage: - -```ts -// Enable the Active interaction when the mouse moves over a chart element (bar in a bar, dot in a dot, etc.) -interactions: [{ type: 'element-active' }]; - -// Enable multiple interactions -interactions: [{ type: 'element-active' }, { type: 'brush' }]; -``` - -#### Config interactions - -通过 `cfg` 可以对交互行为进行配置,详细参考 [G2 | 修改交互的默认交互](https://g2.antv.vision/en/docs/api/general/interaction/#修改交互的默认交互) - -```ts -// 修改 tooltip 触发事件 -interactions: [ - { - type: 'tooltip', - cfg: { start: [{ trigger: 'element:click', action: 'tooltip:show' }] } - } -] -``` - -#### Remove the interaction - -```ts -// 方式1: 关闭 tooltip 交互 -interactions: [{ type: 'tooltip', enable: false }] - -// 方式2: -plot.chart.removeInteraction('interaction-type'); -``` - -Example: - -```ts -// Removes legend filtering interaction -plot.chart.removeInteraction('legend-filter'); -``` diff --git a/site/docs/common/interactions.zh.md b/site/docs/common/interactions.zh.md deleted file mode 100644 index 75b776bfd..000000000 --- a/site/docs/common/interactions.zh.md +++ /dev/null @@ -1,40 +0,0 @@ -#### 添加交互 - -```ts -// 开启「鼠标移入图表元素(柱状图的柱子、点图的点等)时触发 active」的交互 -interactions: [{ type: 'element-active' }] - -// 开启多个交互 -interactions: [{ type: 'element-active' }, { type: 'brush' }] -``` - -#### 配置交互 - -通过 `cfg` 可以对交互行为进行配置,详细参考 [G2 | 修改交互的默认交互](https://g2.antv.vision/zh/docs/api/general/interaction/#修改交互的默认交互) - -```ts -// 修改 tooltip 触发事件 -interactions: [ - { - type: 'tooltip', - cfg: { start: [{ trigger: 'element:click', action: 'tooltip:show' }] } - } -] -``` - -#### 移除交互 - -```ts -// 方式1: 关闭 tooltip 交互 -interactions: [{ type: 'tooltip', enable: false }] - -// 方式2: -plot.chart.removeInteraction('interaction-type'); -``` - -使用示例: - -```ts -// 移除 图例筛选 交互 -plot.chart.removeInteraction('legend-filter'); -``` diff --git a/site/docs/common/label.en.md b/site/docs/common/label.en.md deleted file mode 100644 index b9960930f..000000000 --- a/site/docs/common/label.en.md +++ /dev/null @@ -1,42 +0,0 @@ - - -| Properties | Type | Description | -| ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -| type | *string* | When a user uses a custom label type, need to declare the specific type, otherwise you will use the default label type rendering (pie chart label support `inner | outer | spiders`) | -| offset | *number* | label offset | -| offsetX | *number* | The offset distance of the label from the data point in the X direction | -| offsetY | *number* | The offset distance of the label from the data point in the Y direction | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | Text content that is displayed, if not declared, is displayed according to the value of the first field participating in the mapping | -| style | *ShapeAttrs* | Label text graphic property style | -| autoRotate | *string* | Whether to rotate automatically, default true | -| rotate | *number* | Text rotation Angle | -| labelLine | *null* | *boolean* | *LabelLineCfg* | Used to set the style property of the text connector. NULL indicates that it is not displayed. | -| labelEmit | *boolean* | Only applies to text in polar coordinates, indicating whether the text is radially displayed according to the Angle. True means on and false means off | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | Text layout type, support a variety of layout function combination. | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | Specifies the position of the current Label relative to the current graphic (Only works for column plot and bar plot, which geometry is interval) | -| animate | *boolean | AnimateOption* | Animation configuration. | -| formatter | *Function* | Format function | -| autoHide | *boolean* | Whether to hide it automatically, default to false | - -Types of ***LabelLineCfg*** are as follow: (Go [ShapeAttrs](/zh/docs/api/graphic-style) see more details about *ShapeAttrs*) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -Example code: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` diff --git a/site/docs/common/label.zh.md b/site/docs/common/label.zh.md deleted file mode 100644 index 4053c6c27..000000000 --- a/site/docs/common/label.zh.md +++ /dev/null @@ -1,42 +0,0 @@ - - -| 属性名 | 类型 | 介绍 | -| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| type | *string* | 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染(饼图 label 支持 `inner|outer|spider`)| -| offset | *number* | label 的偏移量 | -| offsetX | *number* | label 相对于数据点在 X 方向的偏移距离 | -| offsetY | *number* | label 相对于数据点在 Y 方向的偏移距离 | -| content | *string | IGroup | IShape | GeometryLabelContentCallback* | 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示 | -| style | *ShapeAttrs* | label 文本图形属性样式 | -| autoRotate | *string* | 是否自动旋转,默认 true | -| rotate | *number* | 文本旋转角度 | -| labelLine | *null* | *boolean* | *LabelLineCfg* | 用于设置文本连接线的样式属性,null 表示不展示。 | -| labelEmit | *boolean* | 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭 | -| layout | *'overlap' | 'fixedOverlap' | 'limitInShape'* | 文本布局类型,支持多种布局函数组合使用。 | -| position | *'top' | 'bottom' | 'middle' | 'left' | 'right'* | 指定当前 label 与当前图形的相对位置 (只对 geometry 为 interval 的 柱条形图生效) | -| animate | *boolean | AnimateOption* | 动画配置。 | -| formatter | *Function* | 格式化函数 | -| autoHide | *boolean* | 是否自动隐藏,默认 false | - -***LabelLineCfg*** 类型定义如下:(关于 *ShapeAttrs* 详细查看 [ShapeAttrs](/zh/docs/api/graphic-style) 文档) - -```plain -type LabelLineCfg = { - style?: ShapeAttrs; -} -``` - -示例代码: - -```ts -{ - label: { - style: { - fill: 'red', - opacity: 0.6, - fontSize: 24 - }, - rotate: true - } -} -``` diff --git a/site/docs/common/legend-cfg.en.md b/site/docs/common/legend-cfg.en.md deleted file mode 100644 index 999da3a73..000000000 --- a/site/docs/common/legend-cfg.en.md +++ /dev/null @@ -1,380 +0,0 @@ -##### layout - -**optional** *horizontal | vertical* - -Layout of legend. - -##### title - -**optional** *G2LegendTitleCfg* - -Legend title configuration is not displayed by default. *G2LegendTitleCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ----------------------------------------------------------------------------------- | -| title | *string* | Content of legend title | -| spacing | *number* | - | The spacing between the title and the legend item | -| style | *object* | - | Text style configuration item, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -The position of legend is optional:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - - - -##### offsetX - -**optional** *number* - -Legends offset in the x direction. - -##### offsetY - -**optional** *number* - -Legends offset in the y direction. - -##### background - -**optional** *LegendBackgroundCfg* - -Background box configuration item. *LegendBackgroundCFG* is configured as follows: - -| Properties | Type | Description | -| ---------- | ------------------ | ------------------------------------------------------- | -| padding | *number | number\[]* | White space in the background | -| style | *ShapeAttr* | Background style configuration, Reference [Graphic Style](/en/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -Apply to Classification legend,whether to page when there are too many legend items. (⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -Apply to Classification legend. You can set the maximum number of rows when legend items is flip-paged, (only applicable to 'layout:' horizontal '),default: 1. - -##### pageNavigator - -**optional** *object* - -Apply to Classification legend, configure the style of page navigator, it works when legend is in flipPage. Types of *LegendPageNavigatorCfg* are as follow: - -| Properties | Type | Description | -| ------ | --------------------- | -------------- | -| marker.style | *PageNavigatorMarkerStyle* | 分页器指示箭头配置项 | -| text.style | *PageNavigatorTextStyle* | The text style of page info. | - -Types of ***PageNavigatorMarkerStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -Types of ***PageNavigatorTextStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -Example: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -Apply to Classification legend, lengend item height, default null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -Apply to Classification legend, legend item width, default null, automatic calculation. - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -Apply to Classification legend, control the horizontal spacing of legend items. - -##### marker - -**optional** *MarkerCfg* - -Apply to Classification legend, the configuration of the Marker icon of the legend item. - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -Apply to Classification legend, the maximum width of the legend item. 当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。 - -##### maxHeight - -**optional** *number* - -Apply to Classification legend, the maximum height of the legend item. 当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。 - -##### reversed - -**optional** *boolean* -Apply to Classification legend, whether to display legend items in reverse order. - -##### custom - -**optional** *boolean* - -If it is a custom legend, the items property needs to be declared when this property is true. - -##### items - -**optional** *LegendItem\[]* -Apply to Classification legend, the user configures the content of the legend item. *LegendItem* Configuration is as follows: - -| Properties | Type | Required | Description | -| ---------- | ----------- | -------- | ------------------------------------ | -| id | *string* | | Unique value for animation or lookup | -| name | *string* | required | name | -| value | any | required | value | -| marker | *MarkerCfg* | | marker | - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### min - -**optional** *number* - -Apply to Continuous legend, select the minimum value of the range. - -##### max - -**optional** *number* - -Apply to Continuous legend, select the maximum value of the range. - -##### value - -**optional** *number\[]* - -Apply to Continuous legend, 当前选中的范围. - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` -Apply to Continuous legend, whether the slider can slide. - -##### rail - -**optional** *ContinueLegendRailCfg* -Apply to Continuous legend, a style configuration item for the legend slider (background).*ContinueLegendRailCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| type | *string* | - | rail type: color and size, default: 'color' | -| size | *number* | - | The width of the slide rail | -| defaultLength | *number* | - | The default length of the slider, default: 100. When maxWidth,maxHeight is limited, this property is not used and the length is automatically calculated | -| style | *object* | - | Slide rail style, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### label - -**optional** *ContinueLegendLabelCfg* - -Apply to Continuous legend, a configuration item for the text, *ContinueLegendLabelCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| align | *string* | - | The alignment of text with the slider
- rail : Align with the slide rail, at both ends of the slide rail
- top, bottom: Legends are valid when laid out horizontally
- left, right: Legends are valid when laid out vertically | -| style | *object* | - | Text style configuration item, reference [Graphic Style](/zh/docs/api/graphic-style) | -| spacing | *number* | - | The distance between the text and the slide | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### track - -**optional** *ContinueLegendTrackCfg* -Apply to Continuous legend, select the color block style configuration item for the range. *ContinueLegendTrackCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------- | -| style | *object* | - | Selected range of styles, reference [Graphic Style](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -Apply to Continuous legend, configuration items for slider. (暂不支持自定义) - -*ContinueLegendHandlerCfg* is configured as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | --------------------------------------------------------------------------- | -| size | *number* | - | Slider size, default: 10 | -| style | *object* | - | Slider configuration, reference [Graphic Style](/zh/docs/api/graphic-style) | diff --git a/site/docs/common/legend-cfg.zh.md b/site/docs/common/legend-cfg.zh.md deleted file mode 100644 index 49e64ce9d..000000000 --- a/site/docs/common/legend-cfg.zh.md +++ /dev/null @@ -1,419 +0,0 @@ -##### layout - -**optional** *horizontal | vertical* - -图例布局方式。提供横向布局和纵向布局。 - -##### title - -**optional** *G2LegendTitleCfg* - -图例标题配置,默认不展示。*G2LegendTitleCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------- | ------------------------------------------------------------ | -| title | *string* | 文本显示内容 | -| spacing | *number* | 标题同图例项的间距 | -| style | *object* | 文本样式配置项,参考  [绘图属性](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -图例位置,可选项:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - -尝试一下: - - - -##### offsetX - -**optional** *number* - -图例 x 方向的偏移。 - -##### offsetY - -**optional** *number* - -图例 y 方向的偏移。 - -##### background - -**optional** *LegendBackgroundCfg* - -背景框配置项。*LegendBackgroundCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| padding | *number | number\[]* | 背景的留白 | -| style | *ShapeAttr* | 背景样式配置项, 参考[绘图属性](/zh/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -适用于 分类图例,当图例项过多时是否进行分页。(⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -适用于 分类图例,当图例项过多分页时,可以设置最大行数(仅适用于 `layout: 'horizontal'`),默认为:1。 - -##### pageNavigator - -**optional** *object* - -适用于 分类图例,图例分页导航器的主题样式设置。*LegendPageNavigatorCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------- | ------ | ----------------------- | -| marker.style | *PageNavigatorMarkerStyle* | - | 分页器指示箭头 样式配置 | -| text.style | *PageNavigatorTextStyle* | - | 分页器页面信息 样式配置 | - -***PageNavigatorMarkerStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------------- | -------- | ------ | ---------------------------------------------------------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -***PageNavigatorTextStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| -------- | -------- | ------ | ---------------------------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -示例: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -适用于 分类图例,图例的高度, 默认为 null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -适用于 分类图例,图例项的宽度, 默认为 null,自动计算。 - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -适用于 分类图例,控制图例项水平方向的间距。 - -##### label - -**optional** *ContinueLegendLabelCfg* - -适用于 连续图例,文本的配置项。*ContinueLegendLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | -------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| align | *string* | - | 文本同滑轨的对齐方式
- rail : 同滑轨对齐,在滑轨的两端
- top, bottom: 图例水平布局时有效
- left, right: 图例垂直布局时有效 | -| style | *object* | - | 文本样式配置项,详见  [绘图属性](/zh/docs/api/graphic-style) | -| spacing | *number* | - | 文本同滑轨的距离 | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### marker - -**optional** *MarkerCfg | MarkerCfgCallback* - -适用于 分类图例,图例项的 marker 图标的配置。 - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -```sign -type LegendItem = { name: string; value: string; } & MarkerCfg; - -type MarkerCfgCallback = (name: string, index: number, item: LegendItem) => MarkerCfg; -``` - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -适用于 分类图例,图例项容器最大宽度设置。当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxWidth = Math.min(maxWidth, maxWidthRatio * viewBBox.width); -``` - -##### maxHeight - -**optional** *number* - -适用于 分类图例,图例项容器最大高度设置。当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxHeight = Math.min(maxHeight, maxHeightRatio * viewBBox.height); -``` - -##### reversed - -**optional** *boolean* - -适用于 分类图例,是否将图例项逆序展示。 - -##### custom - -**optional** *boolean* - -是否为自定义图例,当该属性为 true 时,需要声明 items 属性。 - -##### items - -**optional** *LegendItem\[]* -适用于 分类图例,用户自己配置图例项的内容。*LegendItem* 配置如下: - -| 参数名 | 类型 | 是否必选 | 描述 | -| ------ | ----------- | -------- | ------------------------ | -| id | *string* | | 唯一值,用于动画或者查找 | -| name | *string* | required | 名称 | -| value | any | required | 值 | -| marker | *MarkerCfg* | | 图形标记 | - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -##### min - -**optional** *number* - -适用于 连续图例,选择范围的最小值。 - -##### max - -**optional** *number* - -适用于 连续图例,选择范围的最大值。 - -##### value - -**optional** *number\[]* - -适用于 连续图例,当前选中的范围。 - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` - -适用于 连续图例,滑块是否可以滑动。 - -##### rail - -**optional** *ContinueLegendRailCfg* - -适用于 连续图例,图例滑轨(背景)的样式配置项。*ContinueLegendRailCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------------- | -------- | -------------------------------------------------------------------------------- | -| type | *string* | rail 的类型,color, size,默认:'color' | -| size | *number* | 滑轨的宽度 | -| defaultLength | *number* | 滑轨的默认长度,默认:100。当限制了 maxWidth,maxHeight 时,不会使用这个属性会自动计算长度 | -| style | *object* | 滑轨的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### track - -**optional** *ContinueLegendTrackCfg* -适用于 连续图例,选择范围的色块样式配置项。*ContinueLegendTrackCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| style | *object* | - | 选定范围的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -适用于 连续图例,滑块的配置项。(暂不支持自定义) - -*ContinueLegendHandlerCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| size | *number* | - | 滑块的大小,默认:10 | -| style | *object* | - | 滑块的样式设置,参考 [绘图属性](/zh/docs/api/graphic-style) | diff --git a/site/docs/common/legend.en.md b/site/docs/common/legend.en.md deleted file mode 100644 index 52de45d43..000000000 --- a/site/docs/common/legend.en.md +++ /dev/null @@ -1,397 +0,0 @@ -There are two ways to configure legends - -Method 1, pass in 'Boolean' to set whether to display a legend. - -```ts -legend: false; // close legend -``` - -Method 2, pass in *LegendCfg* to configure the legend as a whole. - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - -##### layout - -**optional** *horizontal | vertical* - -Layout of legend. - -##### title - -**optional** *G2LegendTitleCfg* - -Legend title configuration is not displayed by default. *G2LegendTitleCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ----------------------------------------------------------------------------------- | -| title | *string* | Content of legend title | -| spacing | *number* | - | The spacing between the title and the legend item | -| style | *object* | - | Text style configuration item, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -The position of legend is optional:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - - - -##### offsetX - -**optional** *number* - -Legends offset in the x direction. - -##### offsetY - -**optional** *number* - -Legends offset in the y direction. - -##### background - -**optional** *LegendBackgroundCfg* - -Background box configuration item. *LegendBackgroundCFG* is configured as follows: - -| Properties | Type | Description | -| ---------- | ------------------ | ------------------------------------------------------- | -| padding | *number | number\[]* | White space in the background | -| style | *ShapeAttr* | Background style configuration, Reference [Graphic Style](/en/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -Apply to Classification legend,whether to page when there are too many legend items. (⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -Apply to Classification legend. You can set the maximum number of rows when legend items is flip-paged, (only applicable to 'layout:' horizontal '),default: 1. - -##### pageNavigator - -**optional** *object* - -Apply to Classification legend, configure the style of page navigator, it works when legend is in flipPage. Types of *LegendPageNavigatorCfg* are as follow: - -| Properties | Type | Description | -| ------ | --------------------- | -------------- | -| marker.style | *PageNavigatorMarkerStyle* | 分页器指示箭头配置项 | -| text.style | *PageNavigatorTextStyle* | The text style of page info. | - -Types of ***PageNavigatorMarkerStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -Types of ***PageNavigatorTextStyle*** are as follow: - -| Properties | Type | Default | Description | -| ------ | --------------------- | ------ | -------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -Example: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -Apply to Classification legend, lengend item height, default null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -Apply to Classification legend, legend item width, default null, automatic calculation. - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -Apply to Classification legend, control the horizontal spacing of legend items. - -##### marker - -**optional** *MarkerCfg* - -Apply to Classification legend, the configuration of the Marker icon of the legend item. - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -Apply to Classification legend, the maximum width of the legend item. 当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。 - -##### maxHeight - -**optional** *number* - -Apply to Classification legend, the maximum height of the legend item. 当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。 - -##### reversed - -**optional** *boolean* -Apply to Classification legend, whether to display legend items in reverse order. - -##### custom - -**optional** *boolean* - -If it is a custom legend, the items property needs to be declared when this property is true. - -##### items - -**optional** *LegendItem\[]* -Apply to Classification legend, the user configures the content of the legend item. *LegendItem* Configuration is as follows: - -| Properties | Type | Required | Description | -| ---------- | ----------- | -------- | ------------------------------------ | -| id | *string* | | Unique value for animation or lookup | -| name | *string* | required | name | -| value | any | required | value | -| marker | *MarkerCfg* | | marker | - -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; - - -##### min - -**optional** *number* - -Apply to Continuous legend, select the minimum value of the range. - -##### max - -**optional** *number* - -Apply to Continuous legend, select the maximum value of the range. - -##### value - -**optional** *number\[]* - -Apply to Continuous legend, 当前选中的范围. - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` -Apply to Continuous legend, whether the slider can slide. - -##### rail - -**optional** *ContinueLegendRailCfg* -Apply to Continuous legend, a style configuration item for the legend slider (background).*ContinueLegendRailCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| type | *string* | - | rail type: color and size, default: 'color' | -| size | *number* | - | The width of the slide rail | -| defaultLength | *number* | - | The default length of the slider, default: 100. When maxWidth,maxHeight is limited, this property is not used and the length is automatically calculated | -| style | *object* | - | Slide rail style, refer to [Graphic Style](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### label - -**optional** *ContinueLegendLabelCfg* - -Apply to Continuous legend, a configuration item for the text, *ContinueLegendLabelCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| align | *string* | - | The alignment of text with the slider
- rail : Align with the slide rail, at both ends of the slide rail
- top, bottom: Legends are valid when laid out horizontally
- left, right: Legends are valid when laid out vertically | -| style | *object* | - | Text style configuration item, reference [Graphic Style](/zh/docs/api/graphic-style) | -| spacing | *number* | - | The distance between the text and the slide | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### track - -**optional** *ContinueLegendTrackCfg* -Apply to Continuous legend, select the color block style configuration item for the range. *ContinueLegendTrackCfg* Configuration is as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | ------------------------------------------------------------------------------- | -| style | *object* | - | Selected range of styles, reference [Graphic Style](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -Apply to Continuous legend, configuration items for slider. (暂不支持自定义) - -*ContinueLegendHandlerCfg* is configured as follows: - -| Properties | Type | Default | Description | -| ---------- | -------- | ------- | --------------------------------------------------------------------------- | -| size | *number* | - | Slider size, default: 10 | -| style | *object* | - | Slider configuration, reference [Graphic Style](/zh/docs/api/graphic-style) | diff --git a/site/docs/common/legend.zh.md b/site/docs/common/legend.zh.md deleted file mode 100644 index b4d44cc1f..000000000 --- a/site/docs/common/legend.zh.md +++ /dev/null @@ -1,435 +0,0 @@ -配置图例有两种方式 -第一种,传入 `boolean` 设置是否显示图例。 - -```ts -legend: false; // 关闭图例 -``` - -第二种,传入 *LegendCfg* 对图例进行整体配置。 - -```ts -legend: { - layout: 'horizontal', - position: 'right' -} -``` - -##### layout - -**optional** *horizontal | vertical* - -图例布局方式。提供横向布局和纵向布局。 - -##### title - -**optional** *G2LegendTitleCfg* - -图例标题配置,默认不展示。*G2LegendTitleCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------- | ------------------------------------------------------------ | -| title | *string* | 文本显示内容 | -| spacing | *number* | 标题同图例项的间距 | -| style | *object* | 文本样式配置项,参考  [绘图属性](/zh/docs/api/graphic-style) | - -##### position - -**optional** *string* - -图例位置,可选项:'top', 'top-left', 'top-right', 'left', 'left-top', 'left-bottom', 'right', 'right-top', 'right-bottom', 'bottom', 'bottom-left', 'bottom-right'。 - -尝试一下: - - - -##### offsetX - -**optional** *number* - -图例 x 方向的偏移。 - -##### offsetY - -**optional** *number* - -图例 y 方向的偏移。 - -##### background - -**optional** *LegendBackgroundCfg* - -背景框配置项。*LegendBackgroundCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------- | -------------------- | ---------------------------------------------------------- | -| padding | *number | number\[]* | 背景的留白 | -| style | *ShapeAttr* | 背景样式配置项, 参考[绘图属性](/zh/docs/api/graphic-style) | - -##### flipPage - -**optional** *boolean* - -适用于 分类图例,当图例项过多时是否进行分页。(⚠️ 暂不支持多行展示分页) - -##### maxRow - - *number* **optional** - -适用于 分类图例,当图例项过多分页时,可以设置最大行数(仅适用于 `layout: 'horizontal'`),默认为:1。 - -##### pageNavigator - -**optional** *object* - -适用于 分类图例,图例分页导航器的主题样式设置。*LegendPageNavigatorCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------------ | -------------------------- | ------ | ----------------------- | -| marker.style | *PageNavigatorMarkerStyle* | - | 分页器指示箭头 样式配置 | -| text.style | *PageNavigatorTextStyle* | - | 分页器页面信息 样式配置 | - -***PageNavigatorMarkerStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------------- | -------- | ------ | ---------------------------------------------------------------- | -| inactiveFill | *string* | - | Fill color of arrow marker when unclickable (inactive status). | -| inactiveOpacity | *number* | - | Fill opacity of arrow marker when unclickable (inactive status). | -| fill | *string* | - | Default fill color of arrow marker (active status). | -| opacity | *number* | - | Default fill opacity of arrow marker (active status). | -| size | *number* | - | Size of arrow marker. | - -***PageNavigatorTextStyle*** 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| -------- | -------- | ------ | ---------------------------------- | -| fill | *string* | - | Font color of page navigator info. | -| fontSize | *number* | - | Font size of page navigator info. | - -示例: - -```ts -pageNavigator: { - marker: { - style: { - // 非激活,不可点击态时的填充色设置 - inactiveFill: '#000', - inactiveOpacity: 0.45, - // 默认填充色设置 - fill: '#000', - opacity: 0.8, - size: 12, - }, - }, - text: { - style: { - fill: '#ccc', - fontSize: 8, - }, - }, -}, -``` - - - -##### itemHeight - -**optional** *number* *default:* `null` - -适用于 分类图例,图例的高度, 默认为 null。 - -##### itemWidth - -**optional** *number* *default:* `null` - -适用于 分类图例,图例项的宽度, 默认为 null,自动计算。 - -##### itemName - -**optional** *LegendItemNameCfg* - -适用于 分类图例,图例项 name 文本的配置。*LegendItemNameCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| --------- | ---------- | ------- | ------------------------------------------------------------------- | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | -| spacing | number | | - | 图例项 marker 同后面 name 的间距 | -| formatter | `(text: string, item: ListItem, index: number) => any;` | | | 格式化函数 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - -##### itemValue - -**optional** *LegendItemValueCfg* - -适用于 分类图例,图例项 value 附加值的配置项。*LegendItemValueCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ---------- | ---------- | ------- | ------------------------------------------------------------------- | -| alignRight | *boolean* | `false` | 是否右对齐,默认为 false,仅当设置图例项宽度时生效 | -| formatter | *function* | - | 格式化函数, `(text: string, item: ListItem, index: number) => any;` | -| style | *((item: ListItem, index: number, items: ListItem\[]) => ShapeAttrs) | ShapeAttrs* | | - | 文本样式配置项 | - -其中, `ShapeAttrs` 详细配置见:[文档](/zh/docs/api/shape/shape-attrs);`ListItem` 配置如下: - -```ts -type ListItem = { - /** - * 名称 {string} - */ - name: string; - /** - * 值 {any} - */ - value: any; - /** - * 图形标记 {object|string} - */ - marker?: Marker | string; -} - -type Marker = { - symbol? string; - style?: ShapeAttrs; - spacing?: number; -}; -``` - - - -##### itemSpacing - -**optional** *number* - -适用于 分类图例,控制图例项水平方向的间距。 - -##### label - -**optional** *ContinueLegendLabelCfg* - -适用于 连续图例,文本的配置项。*ContinueLegendLabelCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | -------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| align | *string* | - | 文本同滑轨的对齐方式
- rail : 同滑轨对齐,在滑轨的两端
- top, bottom: 图例水平布局时有效
- left, right: 图例垂直布局时有效 | -| style | *object* | - | 文本样式配置项,详见  [绘图属性](/zh/docs/api/graphic-style) | -| spacing | *number* | - | 文本同滑轨的距离 | -| formatter | *(value: any) => string* | 文本的格式化方式 | - -##### marker - -**optional** *MarkerCfg | MarkerCfgCallback* - -适用于 分类图例,图例项的 marker 图标的配置。 - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -```sign -type LegendItem = { name: string; value: string; } & MarkerCfg; - -type MarkerCfgCallback = (name: string, index: number, item: LegendItem) => MarkerCfg; -``` - -##### maxItemWidth - - *number* **optional** - -适用于 分类图例,图例项最大宽度设置。 - -##### maxWidthRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大宽度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxHeightRatio - - *number* **optional**. 取值范围:\[0, 1], 默认: 0.25 - -适用于 分类图例,图例项容器最大高度比例(以 view 的 bbox 容器大小为参照)设置,如果不需要该配置,可以设置为 `null`。 - -##### maxWidth - -**optional** *number* - -适用于 分类图例,图例项容器最大宽度设置。当 layout 等于 'horizontal' 时,生效,当图例项横向排布,超过最大宽度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxWidth = Math.min(maxWidth, maxWidthRatio * viewBBox.width); -``` - -##### maxHeight - -**optional** *number* - -适用于 分类图例,图例项容器最大高度设置。当 layout 等于 'vertical' 时,生效,当图例项纵向排布,超过最大高度时,会结合 `flipPage: true` 进行分页。实际上,图例项容器最大宽度的计算如下: - -```sign -const viewBBox = this.view.viewBBox; -const maxHeight = Math.min(maxHeight, maxHeightRatio * viewBBox.height); -``` - -##### reversed - -**optional** *boolean* - -适用于 分类图例,是否将图例项逆序展示。 - -##### custom - -**optional** *boolean* - -是否为自定义图例,当该属性为 true 时,需要声明 items 属性。 - -##### items - -**optional** *LegendItem\[]* -适用于 分类图例,用户自己配置图例项的内容。*LegendItem* 配置如下: - -| 参数名 | 类型 | 是否必选 | 描述 | -| ------ | ----------- | -------- | ------------------------ | -| id | *string* | | 唯一值,用于动画或者查找 | -| name | *string* | required | 名称 | -| value | any | required | 值 | -| marker | *MarkerCfg* | | 图形标记 | - - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - - - -##### min - -**optional** *number* - -适用于 连续图例,选择范围的最小值。 - -##### max - -**optional** *number* - -适用于 连续图例,选择范围的最大值。 - -##### value - -**optional** *number\[]* - -适用于 连续图例,当前选中的范围。 - -##### selected ✨ 🆕 - - *object* **optional** - -图例高亮状态,false 表示默认置灰,默认不设置或为 true 表示高亮,会同步进行数据的筛选展示。 - -示例: - -```ts -legend: { - selected: { - '分类一': true, - '分类二': false, - '分类三': false, - } -} -``` - - - -##### slidable - -**optional** *boolean* *default:* `true` - -适用于 连续图例,滑块是否可以滑动。 - -##### rail - -**optional** *ContinueLegendRailCfg* - -适用于 连续图例,图例滑轨(背景)的样式配置项。*ContinueLegendRailCfg* 配置如下: - -| 参数名 | 类型 | 描述 | -| ------------- | -------- | -------------------------------------------------------------------------------- | -| type | *string* | rail 的类型,color, size,默认:'color' | -| size | *number* | 滑轨的宽度 | -| defaultLength | *number* | 滑轨的默认长度,默认:100。当限制了 maxWidth,maxHeight 时,不会使用这个属性会自动计算长度 | -| style | *object* | 滑轨的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -|**rail.type='color'**| **rail.type='size** | -|---|---| -|![color](https://gw.alipayobjects.com/zos/antfincdn/jwMUDJ63aN/72957823-0148-4b24-bbf4-c756959467d3.png)|![size](https://gw.alipayobjects.com/zos/antfincdn/t%26LwpJHUA6/52de13d5-b232-4efb-aacf-6d673778d92a.png)| - -##### track - -**optional** *ContinueLegendTrackCfg* -适用于 连续图例,选择范围的色块样式配置项。*ContinueLegendTrackCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| style | *object* | - | 选定范围的样式,参考 [绘图属性](/zh/docs/api/graphic-style) | - -##### handler - -**optional** *ContinueLegendHandlerCfg* -适用于 连续图例,滑块的配置项。(暂不支持自定义) - -*ContinueLegendHandlerCfg* 配置如下: - -| 参数名 | 类型 | 默认值 | 描述 | -| ------ | -------- | ------ | ----------------------------------------------------------- | -| size | *number* | - | 滑块的大小,默认:10 | -| style | *object* | - | 滑块的样式设置,参考 [绘图属性](/zh/docs/api/graphic-style) | diff --git a/site/docs/common/line-style.en.md b/site/docs/common/line-style.en.md deleted file mode 100644 index ffec118b2..000000000 --- a/site/docs/common/line-style.en.md +++ /dev/null @@ -1,39 +0,0 @@ - - -> **Attention:** The full configuration of lineStyle is `{ style: { stroke: '#ddd', ... } }`, please check it when your configuration doesn't work. - -| Properties | Type | Description | -| ------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| stroke | *string* | color of the line | -| lineWidth | *number* | width of the line | -| lineDash | *\[number,number]* | configure dashed line, the first parameter is the length of each segment, the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| opacity | *number* | opacity | -| shadowColor | *string* | shadow color | -| shadowBlur | *number* | Gaussian blur coefficient | -| shadowOffsetX | *number* | configure horizontal distance between shadow and line | -| shadowOffsetY | *number* | configure vertical distance between shadow and line | -| cursor | *string* | mouse style, same as the mouse style of CSS, default value : 'default' | - -Example (config the grid line style of xAxis): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` diff --git a/site/docs/common/line-style.zh.md b/site/docs/common/line-style.zh.md deleted file mode 100644 index 0d03e0c32..000000000 --- a/site/docs/common/line-style.zh.md +++ /dev/null @@ -1,39 +0,0 @@ - - -> **注意:** 线条样式的完整配置是 `{ style: { stroke: '#ddd', ... } }`, 如果配置线条样式不生效的时候,请检查一下。 - -| 属性名 | 类型 | 介绍 | -| ------------- | ----------------- | ------------------------------------------------------------------------------------------------------ | -| stroke | *string* | 线的颜色 | -| lineWidth | *number* | 线宽 | -| lineDash | *\[number,number]* | 虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| opacity | *number* | 透明度 | -| shadowColor | *string* | 阴影颜色 | -| shadowBlur | *number* | 高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例(设置 x 轴的 grid 网格线条样式): - -```ts -{ - xAxis: { - grid: { - line: { - style: { - stroke: 'black', - lineWidth: 2, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } - } - } - } -} -``` diff --git a/site/docs/common/marker.en.md b/site/docs/common/marker.en.md deleted file mode 100644 index cc802ac67..000000000 --- a/site/docs/common/marker.en.md +++ /dev/null @@ -1,8 +0,0 @@ -| Properties | Type | Default | Description | -| ---------- | ---------------------------- | ------- | ------------------------------------------------------------- | -| symbol | *Marker* | *MarkerCallback* | - | The symbol shape of a legend marker is configured | -| style | ShapeAttrs | - | The configuration item of legend item Marker | -| spacing | number | - | The spacing between legend item marker and the following name | - -*Marker* The supported tag types are: *circle | square | line | diamond | triangle | triangle-down | hexagon | bowtie | cross | tick | plus | hyphen*; -*MarkerCallback* is `(x: number, y: number, r: number) => PathCommand`; diff --git a/site/docs/common/marker.zh.md b/site/docs/common/marker.zh.md deleted file mode 100644 index 7055f3bb2..000000000 --- a/site/docs/common/marker.zh.md +++ /dev/null @@ -1,17 +0,0 @@ - - -| 参数名 | 类型 | 默认值 | 描述 | -| ------- | --------------------- | ------ | ------------------------------------------------------------------------ | -| symbol | *string | MarkerSymbolCallback*  | - | 配置图例 marker 的 symbol 形状 | -| style | *ShapeAttrs | ((style: ShapeAttrs) => ShapeAttrs)* | - | 图例项 marker 的配置项 | -| spacing | number | - | 图例项 marker 同后面 name 的间距 | - -***MarkerSymbolCallback*** 类型定义如下: - -除了内置一些 symbol 类型,可以指定具体的标记类型,也可以通过回调的方式返回 symbol 绘制的 path 命令 - -内置支持的标记类型有:`"circle" | "square" | "line" | "diamond" | "triangle" | "triangle-down" | "hexagon" | "bowtie" | "cross" | "tick" | "plus" | "hyphen"` - -回调的方式为:`(x: number, y: number, r: number) => PathCommand`; - - diff --git a/site/docs/common/meta.en.md b/site/docs/common/meta.en.md deleted file mode 100644 index f5233eccd..000000000 --- a/site/docs/common/meta.en.md +++ /dev/null @@ -1,12 +0,0 @@ -**optional** *object* - -Configure the meta of each data field of the chart in global, to define the type and presentation of data. Configuration of the meta will affect the text content of all components. - -| Properties | Type | Description | -| ---------- | ---------- | -------------------------------------------------------- | -| alias | *string* | alias of the data field | -| formatter | *function* | callback function to format all values of the data field | -| values | *string\[]* | enumerate all the values of the data field | -| range | *number\[]* | mapping range of the data field, default: \[0,1] | - -See also the [Meta Options](/en/docs/api/options/meta) to learn more about configuration of `meta`. diff --git a/site/docs/common/meta.zh.md b/site/docs/common/meta.zh.md deleted file mode 100644 index 90573940a..000000000 --- a/site/docs/common/meta.zh.md +++ /dev/null @@ -1,12 +0,0 @@ -**optional** *object* - -全局化配置图表数据元信息,以字段为单位进行配置,来定义数据的类型和展示方式。在 meta 上的配置将同时影响所有组件的文本信息。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | ---------- | ------------------------------------------- | -| alias | *string* | 字段的别名 | -| formatter | *function* | callback 方法,对该字段所有值进行格式化处理 | -| values | *string\[]* | 枚举该字段下所有值 | -| range | *number\[]* | 字段的数据映射区间,默认为\[0,1] | - -关于 `meta` 的更多配置项,请查看 [Meta Options](/zh/docs/api/options/meta) diff --git a/site/docs/common/pattern.en.md b/site/docs/common/pattern.en.md deleted file mode 100644 index e5161cdff..000000000 --- a/site/docs/common/pattern.en.md +++ /dev/null @@ -1,94 +0,0 @@ -Set the pattern style of the geometries. - -* PatternOption: consists of `type` and `cfg`, `type` includes: `dot`, `line`, `square`, `cfg` is optional. -* Features: pattern will override the `style` of geometry (such as pieStyle, columnStyle, etc.). -* Usage: You can set a uniform pattern style for all geometries of the chart by using configuration (`PatternOption`) or `CanvasPattern` object, and a `callback` is provided to set the pattern for each geometry. - In addition, we provide `getCanvasPattern` function, pass in the PatternOption to create the pattern to modify the Legend styles[Demo](/zh/examples/plugin/pattern#legend-marker-with-pattern) - -The type of pattern is defined as follows: - -```plain -PatternAttr = - | CanvasPattern - | PatternOption - | ((datum: Datum, color: string /** inherit color */) => PatternOption | CanvasPattern); -``` - -Usage: - -```ts -// set a uniform pattern style for all geometries -{ - pattern: { - type: 'dot', - cfg: { - size: 4, - padding: 4, - rotation: 0, - fill: '#FFF', - isStagger: true, - }, - }, -} -// set the pattern for each geometry -{ - pattern: ({type}, color) =>{ - if(type ==='分类一') { - return { - type: 'dot', - cfg: { - backgroundColor: color, // inherit color - } - } - } else if(type ==='分类二') { - return { - type: 'square', - cfg: { - backgroundColor: 'pink', // custom color - } - } - } else if(type ==='分类三') { - return { - type: 'line' - } - } - }, -} -``` - - - -Common configuration(cfg) for all types of pattern: - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| backgroundColor | *string* | Background color of the pattern | -| fill | *string* | Fill color of the symbol in pattern | -| fillOpacity | *number* | Transparency of the symbol in pattern | -| stroke | *string* | Stroke color of the symbol in pattern | -| strokeOpacity | *number* | Stroke opacity of the symbol in pattern | -| lineWidth | *number* | The thickness of the symbol's stroke | -| opacity | *number* | Overall transparency of the pattern | -| rotation | *number* | Rotation angle of the pattern | - -Additional configuration for dotPattern - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| size | *number* | The size of the dot, default: `6` | -| padding | *number* | The distance between dots, default: `2` | -| isStagger | *boolean* | Staggered dots. default: `true` | - -Additional configuration for linePattern - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| spacing | *number* | The distance between the two lines, default: `5` | - -Additional configuration for squarePattern - -| Attribute | Type | Description | -| ------------- | --------------- | ---------------- | -| size | *number* | The size of the square, default: `6` | -| padding | *number* | The distance between squares, default:`1` | -| isStagger | *boolean* | Staggered squares. default:`true` | diff --git a/site/docs/common/pattern.zh.md b/site/docs/common/pattern.zh.md deleted file mode 100644 index 871a3fc7d..000000000 --- a/site/docs/common/pattern.zh.md +++ /dev/null @@ -1,93 +0,0 @@ -设置图形的贴图样式。 - -* 配置项:由`type`和`cfg`组成,`type`目前包括三种类型:`dot`、`line`、`square`,`cfg`为可选项。 -* 特点:`pattern`会覆盖当前图形设置的`style`样式(如 pieStyle、columnStyle 等)。 -* 使用方式:可通过 配置项(PatternOption) 或传入 CanvasPattern 对象 的方式给图表的所有图形设置统一的贴图样式,还提供了 callback 的方式给对应的图形设置样式。此外,提供了 getCanvasPattern 方法传入 PatternOption 配置来创建 pattern,以修改 Legend 样式[Demo](/zh/examples/plugin/pattern#legend-marker-with-pattern) - -pattern 的类型定义如下: - -```plain -PatternAttr = - | CanvasPattern - | PatternOption - | ((datum: Datum, color: string /** inherit color */) => PatternOption | CanvasPattern); -``` - -具体用法: - -```ts -// 给图形设置统一贴图 -{ - pattern: { - type: 'dot', - cfg: { - size: 4, - padding: 4, - rotation: 0, - fill: '#FFF', - isStagger: true, - }, - }, -} -// 给图形分别设置贴图 -{ - pattern: ({type}, color) =>{ - if(type ==='分类一') { - return { - type: 'dot', - cfg: { - backgroundColor: color, // 继承主题颜色 - } - } - } else if(type ==='分类二') { - return { - type: 'square', - cfg: { - backgroundColor: 'pink', // 自定义颜色 - } - } - } else if(type ==='分类三') { - return { - type: 'line' - } - } - }, -} -``` - - - -pattern 共有的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| backgroundColor | *string* | 贴图的背景色 | -| fill | *string* | 贴图元素的填充色 | -| fillOpacity | *number* | 贴图元素填充的透明度 | -| stroke | *string* | 贴图元素的描边色 | -| strokeOpacity | *number* | 贴图元素的描边透明度色 | -| lineWidth | *number* | 贴图元素的描边粗细 | -| opacity | *number* | 贴图整体的透明度 | -| rotation | *number* | 贴图整体的旋转角度 | - -dotPattern 额外的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| size | *number* | 圆点的大小,默认为`6` | -| padding | *number* | 圆点之间的间隔,默认为`2` | -| isStagger | *boolean* | 圆点之间是否交错,默认为`true` | - -linePattern 额外的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| spacing | *number* | 两条线之间的距离,默认为`5` | - -squarePattern 额外的 cfg 配置项 - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ---------------- | -| size | *number* | 矩形的大小,默认为`6` | -| padding | *number* | 矩形之间的间隔,默认为`1` | -| isStagger | *boolean* | 矩形之间是否交错,默认为`true` | diff --git a/site/docs/common/plot-cfg.en.md b/site/docs/common/plot-cfg.en.md deleted file mode 100644 index 99ee831c5..000000000 --- a/site/docs/common/plot-cfg.en.md +++ /dev/null @@ -1,37 +0,0 @@ -#### IPlot.type - -**required** *string* - -plot 类型,通过传入指定 type 的 plot,可以在图层上渲染 G2Plot 内置的图表。 - -目前开放的图表类型有以下类型: - -* **基础图表**:`'line' | 'pie' | 'column' | 'bar' | 'area' | 'gauge' | 'scatter' | 'histogram' | 'funnel` -* **迷你图表**:`'tiny-line' | 'tiny-column' | 'tiny-area' | 'progress' | 'ring-progress'` - -#### IPlot.options - -**required** *object\[]* - -plot 的具体配置项。每个 plot 都有自己的图层容器设置(不包括:width, height)以及数据、字段、样式等配置。 - -具体配置项见指定 plot 的 API 文档. 如:type='column'时,options 对应 ColumnOptions,见文档: [Column API](/en/docs/api/plots/column) - -
- -```ts -type IPlot = - | { - type: 'line'; - options: Omit; - } - | { - type: 'pie'; - options: Omit; - } - | { - // ... 等等 - }; -``` - -
diff --git a/site/docs/common/plot-cfg.zh.md b/site/docs/common/plot-cfg.zh.md deleted file mode 100644 index d89a60e06..000000000 --- a/site/docs/common/plot-cfg.zh.md +++ /dev/null @@ -1,37 +0,0 @@ -#### IPlot.type - -**必选** *string* - -plot 类型,通过传入指定 type 的 plot,可以在图层上渲染 G2Plot 内置的图表。 - -目前开放的图表类型有以下类型: - -* **基础图表**:`'line' | 'pie' | 'column' | 'bar' | 'area' | 'gauge' |'scatter' | 'histogram' | 'funnel'` -* **迷你图表**:`'tiny-line' | 'tiny-column' | 'tiny-area' | 'progress' | 'ring-progress'` - -#### IPlot.options - -**必选** *object\[]* - -plot 的具体配置项。每个 plot 都有自己的图层容器设置(不包括:width, height)以及数据、字段、样式等配置。 - -具体配置项见指定 plot 的 API 文档。如:type='column'时,options 对应 ColumnOptions,见文档: [Column API](/zh/docs/api/plots/column) - -
- -```ts -type IPlot = - | { - type: 'line'; - options: Omit; - } - | { - type: 'pie'; - options: Omit; - } - | { - // ... 等等 - }; -``` - -
diff --git a/site/docs/common/point-style.en.md b/site/docs/common/point-style.en.md deleted file mode 100644 index 51562c3e4..000000000 --- a/site/docs/common/point-style.en.md +++ /dev/null @@ -1,7 +0,0 @@ -| Properties | Type | Description | -| ---------- | -------------------------------- | --------------------------------------------------------------------------------------------- | -| color | *string | string\[] | Function* | The color of the data point, support callback way, example: `color: (x, y, series) => string` | -| shape | \_string | Function\_ | The shape of the data point, support callback way, example: `shape: (x, y, series) => string` | -| size | *number | Function* | The size of the data point, support callback way, example: `size: (x, y, series) => number` | -| style | *object | Function* | Data point style, support callback way, example: `style: (x, y, series) => object` | -| state | *object* | State styles of point, setting style of specify state。Refer to [*state*](#state) | diff --git a/site/docs/common/point-style.zh.md b/site/docs/common/point-style.zh.md deleted file mode 100644 index 0ddfde80a..000000000 --- a/site/docs/common/point-style.zh.md +++ /dev/null @@ -1,7 +0,0 @@ -| 细分配置 | 类型 | 功能描述 | -| -------- | -------- | ---------- | -| color | *string | string\[] | Function* | 数据点颜色,也可以支持回调的方式设置,回调参数为 `color: (x, y, series) => string` | -| shape | *string | Function* | 数据点形状,也可以支持回调的方式设置,回调参数为 `shape: (x, y, series) => string` | -| size | *number | Function* | 数据点大小,也可以支持回调的方式设置,回调参数为 `size: (x, y, series) => number` | -| style | *object | Function* | 数据点样式,也可以支持回调的方式设置,回调参数为 `style: (x, y, series) => object` | -| state | *object* | 数据点状态样式,设置对应状态的样式。详细参考 [*state*](#state) | diff --git a/site/docs/common/scrollbar.en.md b/site/docs/common/scrollbar.en.md deleted file mode 100644 index 4e4aeb27d..000000000 --- a/site/docs/common/scrollbar.en.md +++ /dev/null @@ -1,19 +0,0 @@ -Go to [ShapeAttrs](/en/docs/api/graphic-style) to learn more about ***ShapeAttrs***. - -| Properties | Type | Description | -| --------------- | ---------------- | ------------------ | -| type | *'horizontal' | 'vertical'* | Type of scrollbar | -| width | *number* | Width,works when `type = 'vertical'` | -| height | *number* | height,works when `type = 'horizontal'` | -| padding | *number | number\[]* | Padding | -| categorySize | *number* | For the horizontal scrollbar, it is the width of each category field on the x-axis; for the vertical scroll bar, it is the height of each category field on the x-axis | -| animate | *boolean* | Whether to animate when scrolling, default follows the animation configuration in view | - -Types of ***ScrollbarStyle*** are as follow: - -| Properties | Type | Description | -| --------------- | ---------------- | ------------------ | -| trackColor | *string* | Color of scrollbar track | -| thumbColor | *string* | Color of scrollbar thumb | -| thumbHighlightColor | *string* | Highlight color of scrollbar thumb, 对应主题的 hover.style.thumbColor | -| lineCap | *string* | Determines the shape used to draw the end points of scrollbar,is same as property of Canvas lineCap。 | diff --git a/site/docs/common/scrollbar.zh.md b/site/docs/common/scrollbar.zh.md deleted file mode 100644 index 4ade231f6..000000000 --- a/site/docs/common/scrollbar.zh.md +++ /dev/null @@ -1,20 +0,0 @@ -***ShapeAttrs*** 类型的请参考[绘图属性](/zh/docs/api/graphic-style) - -| 配置项 | 类型 | 功能描述 | -| --------------- | ---------------- | ------------------ | -| type | *'horizontal' | 'vertical'* | 滚动条类型 | -| width | *number* | 宽度,在 vertical 下生效 | -| height | *number* | 高度,在 horizontal 下生效 | -| padding | *number | number\[]* | padding | -| categorySize | *number* | 对应水平滚动条,为 x 轴每个分类字段的宽度;对于垂直滚动条,为 x 轴每个分类字段的高度 | -| style | *ScrollbarStyle* | 滚动条默认样式的设置 | -| animate | *boolean* | 滚动的时候是否开启动画,默认跟随 view 中 animate 配置 | - -***ScrollbarStyle*** 类型如下: - -| 配置项 | 类型 | 功能描述 | -| --------------- | ---------------- | ------------------ | -| trackColor | *string* | 滚动条滑道填充色 | -| thumbColor | *string* | 滚动条滑块填充色 | -| thumbHighlightColor | *string* | 滚动条滑块高亮样式,对应主题的 hover.style.thumbColor | -| lineCap | *string* | 决定滚动条末端绘制形状,同 Canvas lineCap 属性。 | diff --git a/site/docs/common/shape-style.en.md b/site/docs/common/shape-style.en.md deleted file mode 100644 index 340372a1d..000000000 --- a/site/docs/common/shape-style.en.md +++ /dev/null @@ -1,40 +0,0 @@ - - -| Properties | Type | Description | -| ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fill | *string* | Fill color of the shape | -| r | *number* | used in `point`, means the radius of geometry | -| fillOpacity | *number* | Fill opacity of the shape | -| stroke | *string* | Stroke color of the shape | -| lineWidth | *number* | The width of the stroke of the shape | -| lineDash | \[number,number] | Configure dashed line stroke. The first parameter is the length of each segment, and the second parameter is the gap between segment. When lineDash is set to \[0,0], there is no effect. | -| lineOpacity | *number* | Opacity of the stroke | -| opacity | *number* | Opacity of the shape | -| shadowColor | *string* | Shadow color of the shape | -| strokeOpacity | *number* | Stroke opacity of the shape | -| shadowBlur | *number* | Gaussian blur coefficient of the shadow | -| shadowOffsetX | *number* | Configure horizontal distance between shadow and shape | -| shadowOffsetY | *number* | Configure vertical distance between shadow and shape | -| cursor | *string* | Mouse style, same as the mouse style of CSS, default value : 'default' | - -Example: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -More documents about `ShapeStyle`, see [Graphic Style](/en/docs/api/graphic-style). diff --git a/site/docs/common/shape-style.zh.md b/site/docs/common/shape-style.zh.md deleted file mode 100644 index faa0eb907..000000000 --- a/site/docs/common/shape-style.zh.md +++ /dev/null @@ -1,40 +0,0 @@ - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fill | *string* | 图形的填充色 | -| r | *number* | 用于 `point`, 代表图形的半径大小 | -| fillOpacity | *number* | 图形的填充透明度 | -| stroke | *string* | 图形的描边 | -| lineWidth | *number* | 图形描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 图形的整体透明度 | -| shadowColor | *string* | 图形阴影颜色 | -| strokeOpacity | *number* | 图形边框透明度 | -| shadowBlur | *number* | 图形阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距图形的水平距离 | -| shadowOffsetY | *number* | 设置阴影距图形的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码: - -```ts -{ - style: { - fill: 'red', - fillOpacity: 0.5, - stroke: 'black', - lineWidth: 1, - lineDash: [4, 5], - strokeOpacity: 0.7, - shadowColor: 'black', - shadowBlur: 10, - shadowOffsetX: 5, - shadowOffsetY: 5, - cursor: 'pointer' - } -} -``` - -关于 ShapeStyle 更加详细的文档参考 [绘图属性](/zh/docs/api/graphic-style)。 diff --git a/site/docs/common/slider.en.md b/site/docs/common/slider.en.md deleted file mode 100644 index a05494567..000000000 --- a/site/docs/common/slider.en.md +++ /dev/null @@ -1,39 +0,0 @@ -> Only line plot, area plot and dual-axes plot are supported. - -| Properties | Type | Description | -| --------------- | -------------- | --------------------------------------- | -| start | *number* | Default starting position | -| end | *number* | Default ending position | -| height | *number* | Slider height | -| trendCfg | *TrendCfg* | Configuration of background trends | -| backgroundStyle | *object* | Background style, reference[Graphic Style](/en/docs/api/graphic-style) | -| foregroundStyle | *object* | Foreground style, reference[Graphic Style](/en/docs/api/graphic-style) | -| handlerStyle | *HandlerStyle* | Handler configuration | -| textStyle | *object* | Text style, reference[Graphic Style](/en/docs/api/graphic-style) | -| minLimit | *number* | Lower limit of sliding position allowed | -| maxLimit | *number* | Upper limit of sliding position allowed | -| formatter | *Function* | Slider text formatting function | - -Types of ***TrendCfg*** are as follow: - -| Properties | Type | Description | -| --------------- | ---------- | ------------------------------ | -| data | *number\[]* | Trend data | -| smooth | *boolean* | Whether smooth | -| isArea | *boolean* | Whether area | -| backgroundStyle | *object* | Background style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | -| lineStyle | *object* | Line style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | -| areaStyle | *object* | Area style configuration, reference[Graphic Style](/en/docs/api/graphic-style) | - -Types of ***HandlerStyle*** are as follow: - -| Properties | Type | Description | -| ---------- | -------- | ------------------------ | -| width | *number* | Width of slider handler | -| height | *number* | Height of slider handler | -| fill | *string* | Fill color of handler | -| highLightFill | *string* | Highlight fill color of handler (when hovering) | -| stroke | *string* | Stroke color of handler | -| opacity | *number* | Fill opacity of handler | -| radius | *number* | Radius of handler rect | -| cursor | *string* | Style of cursor (when hovering handler) | diff --git a/site/docs/common/slider.zh.md b/site/docs/common/slider.zh.md deleted file mode 100644 index 24fa87e40..000000000 --- a/site/docs/common/slider.zh.md +++ /dev/null @@ -1,39 +0,0 @@ -> 目前只适用于:折线图、面积图、双轴图。 - -| 配置项 | 类型 | 功能描述 | -| --------------- | -------------- | ------------------ | -| start | *number* | 默认起始位置 | -| end | *number* | 默认结束位置 | -| height | *number* | 缩略轴高度 | -| trendCfg | *TrendCfg* | 背景趋势的配置 | -| backgroundStyle | *object* | 背景配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| foregroundStyle | *object* | 前景配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| handlerStyle | *HandlerStyle* | handler 配置 | -| textStyle | *object* | 文本配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| minLimit | *number* | 允许滑动位置下限 | -| maxLimit | *number* | 允许滑动位置上限 | -| formatter | *Function* | 滑块文本格式化函数 | - -***TrendCfg*** 类型如下: - -| 配置项 | 类型 | 功能描述 | -| --------------- | ---------- | -------------- | -| data | *number\[]* | 统计文本的样式 | -| smooth | *boolean* | 是否平滑 | -| isArea | *boolean* | 是否面积图 | -| backgroundStyle | *object* | 背景样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| lineStyle | *object* | line 样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | -| areaStyle | *object* | area 样式配置,参考[绘图属性](/zh/docs/api/graphic-style) | - -***HandlerStyle*** 类型如下: - -| 配置项 | 类型 | 功能描述 | -| ------ | -------- | -------------- | -| width | *number* | 缩略轴手柄宽度 | -| height | *number* | 缩略轴手柄高度 | -| fill | *string* | 缩略轴手柄填充色 | -| highLightFill | *string* | 缩略轴手柄填充高亮色(hover 状态) | -| stroke | *string* | 缩略轴手柄描边色 | -| opacity | *number* | 缩略轴手柄填充透明度 | -| radius | *number* | 缩略轴手柄背景圆角 | -| cursor | *string* | 缩略轴手柄鼠标样式 (hover 状态) | diff --git a/site/docs/common/state-style.en.md b/site/docs/common/state-style.en.md deleted file mode 100644 index ee81baceb..000000000 --- a/site/docs/common/state-style.en.md +++ /dev/null @@ -1,19 +0,0 @@ -Set the style of the corresponding state. Now you can config four state styles: `'default' | 'active' | 'inactive' | 'selected'`. - -Example: - -```ts -{ - interactions: [{ type: 'element-active' }], - state: { - // 设置 active 激活状态的样式 - active: { - animate: { duration: 100, easing: 'easeLinear' }, - style: { - lineWidth: 2, - stroke: '#000', - }, - }, - } -}; -``` diff --git a/site/docs/common/state-style.zh.md b/site/docs/common/state-style.zh.md deleted file mode 100644 index 939fde714..000000000 --- a/site/docs/common/state-style.zh.md +++ /dev/null @@ -1,19 +0,0 @@ -设置对应状态的样式,开放的状态有:`'default' | 'active' | 'inactive' | 'selected'` 四种。 - -示例: - -```ts -{ - interactions: [{ type: 'element-active' }], - state: { - // 设置 active 激活状态的样式 - active: { - animate: { duration: 100, easing: 'easeLinear' }, - style: { - lineWidth: 2, - stroke: '#000', - }, - }, - } -}; -``` diff --git a/site/docs/common/statistic.en.md b/site/docs/common/statistic.en.md deleted file mode 100644 index a8bea4849..000000000 --- a/site/docs/common/statistic.en.md +++ /dev/null @@ -1,22 +0,0 @@ -| Properties | Type | Description | -| ---------- | ---------------------- | ----------- | -| title | *false | StatisticText* | title | -| content | *false | StatisticText* | content | - -StatisticText - -| Properties | Type | Description | -| ---------- | -------- | --------------------------------- | -| style | *CSSStyleDeclaration* | Styles for statistical text (css styles) | -| content | *string* | Content of the text。Priority: `customHtml` > `formatter` > `content` | -| customHtml | *CustomHtml* | custom content by using html,priority is higher than formatter | -| formatter | *Function* | The formatted content of the text | -| rotate | *number* | Rotation Angle | -| offsetX | *number* | X offset | -| offsetY | *number* | Y offset | - -Type of **CustomHtml** is as follow: - -```ts -type CustomHtml = (container: HTMLElement, view: View, datum: object, data: object[]) => string; -``` diff --git a/site/docs/common/statistic.zh.md b/site/docs/common/statistic.zh.md deleted file mode 100644 index 306d1b995..000000000 --- a/site/docs/common/statistic.zh.md +++ /dev/null @@ -1,22 +0,0 @@ -| 配置项 | 类型 | 描述 | -| ------- | ---------------------- | -------- | -| title | *false | StatisticText* | 标题 | -| content | *false | StatisticText* | 主体内容 | - -StatisticText - -| 配置项 | 类型 | 描述 | -| --------- | -------- | -------------------- | -| style | *CSSStyleDeclaration* | 统计文本的样式 (css 样式) | -| content | *string* | 主体文本内容。优先级: `customHtml` > `formatter` > `content` | -| customHtml | *CustomHtml* | 自定义主体文本的 html,优先级高于 formatter | -| formatter | *Function* | 主体文本的格式化内容 | -| rotate | *number* | 旋转角度 | -| offsetX | *number* | X 偏移值 | -| offsetY | *number* | Y 偏移值 | - -**CustomHtml** 类型定义如下: - -```ts -type CustomHtml = (container: HTMLElement, view: View, datum: object, data: object[]) => string; -``` diff --git a/site/docs/common/text-style.en.md b/site/docs/common/text-style.en.md deleted file mode 100644 index a20596595..000000000 --- a/site/docs/common/text-style.en.md +++ /dev/null @@ -1,38 +0,0 @@ - - -| Properties | Type | Description | -| ------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| fontSize | *number* | Font size | -| fontFamily | *string* | Font family | -| fontWeight | *number* | Font weight | -| lineHeight | *number* | Line height | -| textAlign | *string* | Text align, supported `center` | `end` | `left` | `right` | `start`, default `start` | -| fill | *string* | Fill color for text | -| fillOpacity | *number* | Fill transparency for text | -| stroke | *string* | Stroke text | -| lineWidth | *number* | The width of the text stroke | -| lineDash | \[number,number] | For the dashed line configuration of the stroke, the first value is the length of each segment of the dashed line, and the second value is the distance between segments. LineDash sets \[0,0] to no stroke. | -| lineOpacity | *number* | Stroke transparency | -| opacity | *number* | Overall transparency of the text | -| shadowColor | *string* | Shadow color | -| shadowBlur | *number* | Shadow blur | -| shadowOffsetX | *number* | Sets the horizontal distance between the shadow and the text | -| shadowOffsetY | *number* | Sets the vertical distance between the shadow and the text | -| cursor | *string* | Mouse style. With CSS mouse styles, default 'default'. | - -Example code, using label.style configuration: - -```ts -{ - label: { - style:{ - fontSize: 80, - fontWeight: 300, - textAlign: 'center', - textBaseline: 'middle', - shadowColor: 'white', - shadowBlur: 10, - } - } -} -``` diff --git a/site/docs/common/text-style.zh.md b/site/docs/common/text-style.zh.md deleted file mode 100644 index 0e6a1748d..000000000 --- a/site/docs/common/text-style.zh.md +++ /dev/null @@ -1,38 +0,0 @@ - - -| 属性名 | 类型 | 介绍 | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ | -| fontSize | *number* | 文字大小 | -| fontFamily | *string* | 文字字体 | -| fontWeight | *number* | 字体粗细 | -| lineHeight | *number* | 文字的行高 | -| textAlign | *string* | 设置文本内容的当前对齐方式, 支持的属性:`center` | `end` | `left` | `right` | `start`,默认值为`start` | -| fill | *string* | 文字的填充色 | -| fillOpacity | *number* | 文字的填充透明度 | -| stroke | *string* | 文字的描边 | -| lineWidth | *number* | 文字描边的宽度 | -| lineDash | \[number,number] | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为\[0,0]的效果为没有描边。 | -| lineOpacity | *number* | 描边透明度 | -| opacity | *number* | 文字的整体透明度 | -| shadowColor | *string* | 文字阴影颜色 | -| shadowBlur | *number* | 文字阴影的高斯模糊系数 | -| shadowOffsetX | *number* | 设置阴影距文字的水平距离 | -| shadowOffsetY | *number* | 设置阴影距文字的垂直距离 | -| cursor | *string* | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | - -示例代码,以 label.style 配置为例: - -```ts -{ - label: { - style:{ - fontSize: 80, - fontWeight: 300, - textAlign: 'center', - textBaseline: 'middle', - shadowColor: 'white', - shadowBlur: 10, - } - } -} -``` diff --git a/site/docs/common/theme.en.md b/site/docs/common/theme.en.md deleted file mode 100644 index 4c6485a51..000000000 --- a/site/docs/common/theme.en.md +++ /dev/null @@ -1,105 +0,0 @@ -Recommend to use 💄 [ThemeSet](https://theme-set.antv.vision) to customize your theme configurations online. - -#### Built-in Theme - -Built-in defaults: 'default' and 'dark' - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### Theme attributes - -In addition to using the built-in 'default' and 'dark' themes, you can also modify some of the theme content by setting the theme properties. - -The following table lists the specific properties on the configuration items that make up the topic: - -| **Properties** | **Type** | **Description** | -| --------------------- | ---------- | ------------------------------------------------------------------------------------------------------------- | -| defaultColor | *string* | Theme color | -| padding | *number* | number\[] | -| fontFamily | *string* | Chart font | -| colors10 | *string\[]* | Category color palette, used when the number of categories is less than 10 | -| colors20 | *string\[]* | Category color palette, used when the number of categories is greater than 10 | -| columnWidthRatio | *number* | General histogram width ratio, 0-1 range of values | -| maxColumnWidth | *number* | Maximum width of histogram, pixel value | -| minColumnWidth | *number* | Minimum width of histogram, pixel value | -| roseWidthRatio | *number* | Rose width ratio, 0-1 range of value | -| multiplePieWidthRatio | *number* | Multilayer pie and loop ratio, 0-1 range values | -| geometries | *object* | Configure the style of each shape for each Geometry, including the default style and the style for each state | -| components | *object* | Configure theme samples for axes, legends, tooltips, and annotations | -| labels | *object* | Configure the theme style of the label under Geometry | -| innerLabels | *object* | Configure Geometry to display the Labels theme style inside the graph | -| pieLabels | *object* | Configure the theme style of pie chart labels | - -usage: - -```ts -{ - theme: { - colors10: [ - '#FF6B3B', - '#626681', - '#FFC100', - '#9FB40F', - '#76523B', - '#DAD5B5', - '#0E8E89', - '#E19348', - '#F383A2', - '#247FEA', - ]; - } -} -``` - -#### Theme attributes (StyleSheet) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -usage: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir'; - } - } -} -``` - -支持的样式表属性: - -| **Properties** | **Type** | **Description** | -| ----------------------- | -------- | ------------------------------------------------- | -| `backgroundColor` | *string* | Background color | -| `brandColor` | *string* | Brand color,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | Qualitative palette,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | Qualitative palette,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | Semantic red | -| `paletteSemanticGreen` | *string* | Semantic green | -| `paletteSemanticYellow` | *string* | Semantic yellow | -| `fontFamily` | *string* | fontFamily | - -#### Update theme - -usage: - -```ts -// example 1: -plot.update({ theme: 'dark' }); - -// example 2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }); -``` - -#### Custom theme - -In addition, G2 provides a custom topic mechanism to define a new topic structure, allowing users to switch and define chart topics. Go [G2 | Custom theme](https://g2.antv.vision/en/docs/api/advanced/register-theme) for more details. - - - -🌰 Customize theme [DEMO](/zh/examples/general/theme#register-theme) diff --git a/site/docs/common/theme.zh.md b/site/docs/common/theme.zh.md deleted file mode 100644 index 2eb6db9a9..000000000 --- a/site/docs/common/theme.zh.md +++ /dev/null @@ -1,94 +0,0 @@ -推荐使用 💄 [ThemeSet](https://theme-set.antv.vision) 在线自定义自己的主题配置。 - -#### 内置主题 - -目前默认的内置主要有两套:`default` 和 `dark` - -```ts -{ - theme: 'default', // 'dark', -} -``` - -#### 主题属性 - -除了使用内置的 `default` 和 `dark` 主题之外,还可以通过设置主题属性来修改部分主题内容: - -下表列出了组成主题的大配置项上的具体属性: - -| 主题属性 | 类型 | 描述 | -| --- | --- | ---| -| defaultColor | *string*| 主题色 | -| padding | *number* | number\[] | -| fontFamily | *string* | 图表字体 | -| colors10 | *string\[]* | 分类颜色色板,分类个数小于 10 时使用 | -| colors20 |*string\[]* | 分类颜色色板,分类个数大于 10 时使用 | -| columnWidthRatio | *number* | 一般柱状图宽度占比,0 - 1 范围数值 -| maxColumnWidth | *number* | 柱状图最大宽度,像素值 | -| minColumnWidth| *number* | 柱状图最小宽度,像素值 | -| roseWidthRatio | *number* | 玫瑰图占比,0 - 1 范围数值 | -| multiplePieWidthRatio | *number* | 多层饼图/环图占比,0 - 1 范围数值 | -| geometries | *object* | 配置每个 Geometry 下每个 shape 的样式,包括默认样式以及各个状态下的样式 | -| components | *object* | 配置坐标轴,图例,tooltip, annotation 的主题样式 | -| labels | *object* | 配置 Geometry 下 label 的主题样式 | -| innerLabels | *object* | 配置 Geometry 下展示在图形内部的 labels 的主题样式 | -| pieLabels | *object* | 配置饼图 labels 的主题样式 | - -使用方式: - -```ts -{ - theme: { - colors10: ['#FF6B3B', '#626681', '#FFC100', '#9FB40F', '#76523B', '#DAD5B5', '#0E8E89', '#E19348', '#F383A2', '#247FEA'] - } -} -``` - -#### 主题属性(主题样式表) - -除了以上介绍的主题属性之外,还可以传入主题样式表来自定义主题。如果你需要对全局主题进行配置的话,对样式风格进行切换,比如更改颜色、字体大小、边框粗细等 - -使用方式: - -```ts -{ - theme: { - styleSheet: { - fontFamily: 'Avenir' - } - } -} -``` - -支持的样式表属性: - -| **属性** | **类型** | **描述** | -| ----------------------- | -------- | ------------- | -| `backgroundColor` | *string* | 背景色 | -| `brandColor` | *string* | 主题色,默认取 10 色分类颜色色板的第一个颜色 | -| `paletteQualitative10` | *string* | 分类颜色色板,分类个数小于 10 时使用 | -| `paletteQualitative20` | *string* | 分类颜色色板,分类个数大于 10 时使用 | -| `paletteSemanticRed` | *string* | 语义红色 | -| `paletteSemanticGreen` | *string* | 语义绿色 | -| `paletteSemanticYellow` | *string* | 语义黄色 | -| `fontFamily` | *string* | 字体 | - -#### 更新主题 - -使用方式: - -```ts -// 示例1: -plot.update({ theme: 'dark' }); - -// 示例2: -plot.update({ theme: { defaultColor: '#FF6B3B' } }) -``` - -#### 自定义注册主题 - -另外,还可以通过 G2 提供了自定义主题机制来定义全新的主题结构,以允许用户切换、定义图表主题。前往 [G2 | 自定义主题](https://g2.antv.vision/zh/docs/api/advanced/register-theme) 查看详情。 - - - -🌰 自定义主题 [DEMO](/zh/examples/general/theme#register-theme) 示例 diff --git a/site/docs/common/tooltip.en.md b/site/docs/common/tooltip.en.md deleted file mode 100644 index 551f3f3b1..000000000 --- a/site/docs/common/tooltip.en.md +++ /dev/null @@ -1,255 +0,0 @@ -##### fields - -**optional** *string\[]* - -Specifies the fields to be displayed in the Tooltip. By default, different charts have different default field lists. Use with the 'formatter' configuration for more effect. - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**optional** *Function* - -Formats the contents of the Tooltip Item (you can use `customContent` when content contains multiple tooltipItems). - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**optional** *boolean* *default:* `true` - -Sets whether the Tooltip content box follows the mouse. - -##### enterable - -**optional** *boolean* *default:* `false` - -Whether the tooltip allows mouse to slide in. - -##### showTitle - -**optional** *boolean* *default:* `false` - -Whether show tooltip title. - -##### title - -**optional** *string* - -Set the title content of the Tooltip: If the value is the name of the data field, the value for the field in the data is displayed, and if the field does not exist in the data, the title value is displayed directly. - -##### position - -**optional** *`top` | `bottom` | `left` | `right`* - -Sets the fixed display location of the Tooltip relative to the data point. - -##### shared - -**optional** *boolean* - -True means that all data corresponding to the current point is merged and displayed, while false means that only the data content closest to the current point is displayed. - -##### showCrosshairs - -**optional** *boolean* *default:* `false` - -Whether show crosshairs。 - -##### crosshairs - -**optional** *object* - -Configure tooltip crosshairs to work if and only if 'showCrosshairs' is true. - -| Properties | Type | Description | -| -------------- | ---------------------- | --------------------------------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | Crosshairs Type: 'X' represents the auxiliary line on the X axis, 'Y' on the Y axis | -| line | *lineStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | Text configuration of crosshairs pointer, support callback | -| textBackground | *textBackgroundStyle* | Guideline text background configuration | -| follow | *boolean* | Whether the guide line follows the mouse. Default is false, that is, to locate the data point | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| Properties | Type | Description | -| ---------- | -------------------- | ------------------------------------------- | -| padding | *number | number\[]* | White space around the background of a text | -| style | *shapeStyle* | The configuration item for line, see more [*ShapeAttrs*](/en/docs/api/graphic-style) | - -##### showMarkers - -**optional** *boolean* *default:* `true` - -Whether to render TooltipMarkers. - -##### marker - -**optional** *ShapeAttrs* - -TooltipMarker style configuration. - -Please refer to the style configuration [ShapeAttrs](/en/docs/api/graphic-style) - -##### showContent - -**optional** *boolean* *default:* `false` - -Whether to display the Tooltip content box. - -##### container - -**optional** *string|HTMLElement* - -Custom tooltip container. - -##### containerTpl - -**optional** *string* - -Templates used to specify the legend container must include the classes of each DOM node when customizing the template - -##### itemTpl - -**optional** *string* - -The default template for each record, which must include the classes of each DOM node when customizing the template. - -##### domStyles - -**optional** *TooltipDomStyles* - -The styles for each DOM. - -dom-styles - -```ts -/** Tooltip content box css style */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**optional** *number* - -Tooltip offset. - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems ✨ - -**optional** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - -##### customContent - -**optional** *Function* - -Support for custom templates. [Live demo](/en/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` diff --git a/site/docs/common/tooltip.zh.md b/site/docs/common/tooltip.zh.md deleted file mode 100644 index 792a8c759..000000000 --- a/site/docs/common/tooltip.zh.md +++ /dev/null @@ -1,257 +0,0 @@ -##### fields - -**可选** *string\[]* - -指定 tooltip 中显示的字段,默认不同图表有不同的默认字段列表。配合 `formatter` 配置一起使用,效果更佳。 - -```ts -tooltip: { - fields: ['x', 'y'], -} -``` - -##### formatter - -**可选** *Function* - -格式化 tooltip item 内容(暂时不支持多 tooltipItems 的格式化,可以使用 `customContent` 处理) - -```ts -tooltip: { - formatter: (datum: Datum) => { - return { name: datum.x, value: datum.y + '%' }; - }, -} -``` - -##### follow - -**可选** *boolean* *default:* `true` - -设置 tooltip 内容框是否跟随鼠标移动。 - -##### enterable - -**可选** *boolean* *default:* `false` - -tooltip 是否允许鼠标滑入。 - -##### showTitle - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 标题。 - -##### title - -**可选** *string* - -设置 tooltip 的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,则直接展示 title 值。 - -##### position - -**可选** *`top` | `bottom` | `left` | `right`* - -设置 tooltip 的固定展示位置,相对于数据点。 - -##### shared - -**可选** *boolean* - -true 表示合并当前点对应的所有数据并展示,false 表示只展示离当前点最逼近的数据内容。 - -##### showCrosshairs - -**可选** *boolean* *default:* `false` - -是否展示 crosshairs。 - -##### crosshairs - -**可选** *object* - -配置 tooltip 的 crosshairs,当且仅当 `showCrosshairs` 为 true 时生效。 - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | --------------------- | ------------------------------------------------------------------- | -| type | *'x' | 'y' | 'xy'* | crosshairs 的类型: `x` 表示 x 轴上的辅助线,`y` 表示 y 轴上的辅助项 | -| line | *lineStyle* | 线的配置项,详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style#configure-line-styles) | -| text | *TooltipCrosshairsText | TooltipCrosshairsTextCallback* | 辅助线文本配置,支持回调 | -| textBackground | *TextBackgroundStyle* | 辅助线文本背景配置 | -| follow | *boolean* | 辅助线是否跟随鼠标移动,默认为 false,即定位到数据点 | - - - -***TooltipCrosshairsText*** 类型定义如下: - -```ts -/** 辅助线文本配置 */ -type TooltipCrosshairsText = { - /** - * 文本位置,只支持 start, end - * @type {string} - */ - position?: string; - /** - * 文本内容 - */ - content?: string; - /** - * 距离线的距离 - * @type {number} - */ - offset?: number; - /** - * 是否自动旋转 - * @type {boolean} - */ - autoRotate?: boolean; - /** - * 文本的配置项 - * @type {ShapeAttrs} - */ - style?: TextStyle; -} -``` - -其中,***TextStyle*** 类型定义详见: [通用文本样式](/zh/docs/api/graphic-style#%E9%85%8D%E7%BD%AE%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F) - -***TooltipCrosshairsTextCallback*** 类型定义如下: - -```ts -/** - * 辅助线文本回调函数 - * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y' - * @param defaultContent 对应当前 crosshairs 默认的文本内容 - * @param items 对应当前 tooltip 内容框中的数据 - * @param currentPoint 对应当前坐标点 - * @returns 返回当前 crosshairs 对应的辅助线文本配置 - */ -type TooltipCrosshairsTextCallback = (type: string, defaultContent: any, items: any[], currentPoint: Point) => TooltipCrosshairsText; -``` - - - - - - -***TextBackgroundStyle*** - -| 细分配置项名称 | 类型 | 功能描述 | -| -------------- | -------------------- | ------------------ | -| padding | *number | number\[]* | 文本背景周围的留白 | -| style | *shapeStyle* | 线的配置项, 详细可见 [*ShapeAttrs*](/zh/docs/api/graphic-style) | - -##### showMarkers - -**可选** *boolean* *default:* `true` - -是否渲染 tooltipMarkers。 - -##### marker - -**可选** *ShapeAttrs* - -tooltipMarker 的样式配置。 - -样式配置类型,详细可见: [ShapeAttrs](/zh/docs/api/graphic-style) - -##### showContent - -**可选** *boolean* *default:* `false` - -是否展示 tooltip 内容框。 - -##### container - -**可选** *string|HTMLElement* - -自定义 tooltip 的容器。 - -##### containerTpl - -**可选** *string* - -用于指定图例容器的模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### itemTpl - -**可选** *string* - -每项记录的默认模板,自定义模板时必须包含各个 dom 节点的 class。 - -##### domStyles - -**可选** *TooltipDomStyles* - -传入各个 dom 的样式。 - -dom-styles - -```ts -/** Tooltip 内容框的 css 样式定义 */ -{ - domStyles: { - 'g2-tooltip'?: CSSProperties; - 'g2-tooltip-title'?: CSSProperties; - 'g2-tooltip-list'?: CSSProperties; - 'g2-tooltip-list-item'?: CSSProperties; - 'g2-tooltip-marker'?: CSSProperties; - 'g2-tooltip-value'?: CSSProperties; - 'g2-tooltip-name'?: CSSProperties; - } -} -``` - -##### offset - -**可选** *number* - -tooltip 偏移量。 - -##### reversed - -**optional** *boolean* - -是否将 tooltip items 逆序. - -##### showNil - -**optional** *boolean* - -是否显示空值的 tooltip 项 - -##### customItems - -**可选** *Function* - -在 tooltip 渲染之前,对最终的 items 进行自定义处理(比如排序、过滤、格式化等)。 - -```ts -{ - tooltip: { - customItems: (originalItems: TooltipItem[]) => { - // process originalItems, - return originalItems; - }; - } -} -``` - - - -##### customContent - -**可选** *Function* - -支持自定义模板。[在线示例](/zh/examples/case/customize#customize-tooltip) - -```ts -{ - tooltip: { - customContent: (title, data) => { - return `
${title}
`; - }; - } -} -``` diff --git a/site/docs/common/xy-field.en.md b/site/docs/common/xy-field.en.md deleted file mode 100644 index fa9c202ee..000000000 --- a/site/docs/common/xy-field.en.md +++ /dev/null @@ -1,11 +0,0 @@ -#### xField - -**required** *string* - -The name of the data field corresponding to the graph in the x direction, usually the field corresponding to the horizontal coordinate axis. For example, to see how many people are in different classes, the class field is the corresponding xField. - -#### yField - -**required** *string* - -The name of the data field corresponding to the graph in the y direction, usually the field corresponding to the vertical coordinate axis. For example, to see the number of students in different classes, the number field is the corresponding yField. diff --git a/site/docs/common/xy-field.zh.md b/site/docs/common/xy-field.zh.md deleted file mode 100644 index 44a6aeee9..000000000 --- a/site/docs/common/xy-field.zh.md +++ /dev/null @@ -1,11 +0,0 @@ -#### xField - -**required** *string* - -图形在 x 方向对应的数据字段名,一般是横向的坐标轴对应的字段。比如:要看不同班级的人数情况,那么班级字段就是对应的 xField。 - -#### yField - -**required** *string* - -图形在 y 方向对应的数据字段名,一般是纵向的坐标轴对应的字段。比如:要看不同班级的人数情况,那么人数字段就是对应的 yField。 diff --git a/site/docs/manual/contact.en.md b/site/docs/manual/contact.en.md index 3b1ae55e7..58e5ef13d 100644 --- a/site/docs/manual/contact.en.md +++ b/site/docs/manual/contact.en.md @@ -3,16 +3,4 @@ title: Contact Us order: 9 --- -If you have any questions, suggestions, feedback or willingness to communicate, please contact us: - -* Recommanded: [GitHub issues](https://github.com/ant-design/ant-design-charts/issues) - -* Email:antv@antfin.com - -* Yuque:https://www.yuque.com/antv - -* Zhihu:https://zhuanlan.zhihu.com/aiux-antv - -* DingTalk Group Number: 35686967 - - + diff --git a/site/docs/manual/faq.en.md b/site/docs/manual/faq.en.md index 79c793705..bd59dd62e 100644 --- a/site/docs/manual/faq.en.md +++ b/site/docs/manual/faq.en.md @@ -3,133 +3,4 @@ title: FAQ order: 8 --- -## FAQ - -Here is a roundup of some common questions and official responses from the Ant Design Charts community. - -### 1、 What is the relationship between G2, G2Plot and Ant Design Charts? - -- Same team development. -- G2Plot based on G2, which uses grammar of graphics and is relatively expensive to use and powerful. -- G2Plot is an overlay wrapper over G2, replacing the graph syntax with configuration items. -- Ant Design Charts is the React version of G2Plot, which synchronizes functionality with G2Plot and has built-in graph-related Charts such as flowcharts, organizational Charts, etc -- Some of the other charts were implemented by students on other teams based on G2 or G2Plot - -### 2、Object(...) is not a function - -example - -Possible reasons: - -- React version is too low and does not support hooks. Upgrade to 16.8.4 or the latest version. -- The 2.x version of Ant-Design-Pro is used, resulting in underlying dependency conflict. It is recommended to upgrade Pro to the latest version. -- The BizCharts is used, resulting in underlying dependency conflict. - -### 3、How to binding event and get current data. - -```tsx | pure - { - plot.chart.on('plot:click', (evt) => { - const { x, y } = evt; - console.log(plot.chart.getTooltipItems({ x, y })); - }); - }} -/> -``` - -### 4、How do I set the horizontal axis to start at 0 - -faq - -Horizontal axis is configurable, which can be configured in meta. The optional range is 0~1. - -```ts -meta: { - [xField]: { - range: [0, 1] - } -} -``` - -### 5、How to share a Y axis in DaulAxes plot - -You can use `scale.sync` and hide one of the y-axis. - -```ts -// Apply to DualAxes plot -{ - yFields: ['y1', 'y2'], - meta: { - y1: { sync: 'y2' }, - y2: { sync: true }, - }, - yAxis: { - y2: false - } -} -``` - -### 6、Package file is too large, how to load on demand - -Method 1: Import from es - -Import from the subpackage - -```ts -// Statistical charts -import Line from '@ant-design/plots/es/components/line'; -// Relation graph -import DecompositionTreeGraph from '@ant-design/graphs/es/components/decomposition-tree-graph'; -// Geographic visualization -import AreaMap from '@ant-design/maps/es/components/area-map'; -``` - -Method 2: Use sideEffects - -Enable webpack sideEffcets configuration, webpack 4+ should be enabled by default. - -```ts -{ - optimization: { - sideEffects: true, - } -} -``` - -Method 3: Use [babel-plugin-import](https://github.com/ant-design/babel-plugin-import) - -```ts - // install - npm install babel-plugin-import -D - - // config .babelrc file - { - "plugins": [ - ["import", { - "libraryName": "@ant-design/plots", - "libraryDirectory": "es" - }], - ["import", { - "libraryName": "@ant-design/graphs", - "libraryDirectory": "es" - }], - ["import", { - "libraryName": "@ant-design/maps", - "libraryDirectory": "es" - }] - ] - } -``` - -### 7、Why do charts keep being redrawn - -Due to the React mechanism, by default, whenever the parent component has a state update, the child component is rerendered, causing the chart to be redrawn again. Refer to [example](https://codesandbox.io/s/pedantic-lucy-tylzl?file=/App.tsx) - -### 8、IE Compatibility - -Refer to [ChartsIE](https://github.com/lxfu1/charts-ie) - -### More problems - -Please go to [GitHub Issues](https://github.com/ant-design/ant-design-charts/issues) to find out if there are similar problems. We will respond and improve this document as soon as possible. + diff --git a/site/docs/manual/faq.zh.md b/site/docs/manual/faq.zh.md index cb0115be2..16557021f 100644 --- a/site/docs/manual/faq.zh.md +++ b/site/docs/manual/faq.zh.md @@ -7,15 +7,7 @@ order: 8 以下整理了一些 Ant Design Charts 社区常见的问题和官方答复。 -### 1、 G2、G2Plot、Ant Design Charts 什么关系? - -- 同一团队开发。 -- G2 是 G2Plot 的底层依赖,使用了图形语法,使用成本相对较高,功能强大。 -- G2Plot 是 G2 的上层封装,把图形语法装换成了配置项。 -- Ant Design Charts 是 G2Plot 的 React 版本,功能和 G2Plot 同步,并内置了一些图相关的图表,例如流程图、组织架构图等。 -- 其它一些图表是其它团队的同学基于 G2 或 G2Plot 实现。 - -### 2、Object(...) is not a function +### 1、Object(...) is not a function 示例 @@ -25,52 +17,8 @@ order: 8 - 使用了 2.x 版本的 ant-design-pro ,导致底层依赖冲突,建议升级 pro 到最新版本。 - 使用了 BizCharts 依赖冲突。 -### 3、如何监听事件并获取当前值 - -```tsx | pure - { - plot.chart.on('plot:click', (evt) => { - const { x, y } = evt; - console.log(plot.chart.getTooltipItems({ x, y })); - }); - }} -/> -``` - -### 4、怎么设置横轴从 0 开始 - -faq - -横轴的范范是可配置的,在 meta 里面配置即可,range 可选范围是 0~1。 - -```ts -meta: { - [xField]: { - range: [0, 1] - } -} -``` - -### 5、双轴图如何共用一个 Y 轴 - -可以通过开启 scale 同步, 然后隐藏其中一个 y 轴坐标。 - -```ts -// 适用于 DualAxes plot -{ - yFields: ['y1', 'y2'], - meta: { - y1: { sync: 'y2' }, - y2: { sync: true }, - }, - yAxis: { - y2: false - } -} -``` -### 6、打包文件过大,如何按需加载 +### 2、打包文件过大,如何按需加载 方案 1:从 es 引入 @@ -79,10 +27,6 @@ meta: { ```ts // 统计图表 import Line from '@ant-design/plots/es/components/line'; -// 关系图 -import DecompositionTreeGraph from '@ant-design/graphs/es/components/decomposition-tree-graph'; -// 地理可视化 -import AreaMap from '@ant-design/maps/es/components/area-map'; ``` 方案 2: 开启 sideEffects @@ -122,14 +66,14 @@ import AreaMap from '@ant-design/maps/es/components/area-map'; } ``` -### 7、为什么图表一直重绘 +### 3、为什么图表一直重绘 由于 react 机制,默认情况下只要父组件有状态更新,子组件都会重新渲染,导致图表再次重绘。可参考[示例](https://codesandbox.io/s/pedantic-lucy-tylzl?file=/App.tsx) -### 8、IE 兼容 +### 4、IE 兼容 参考 [ChartsIE](https://github.com/lxfu1/charts-ie) ### 更多问题 -请到 [GitHub issues](https://github.com/ant-design/ant-design-charts/issues) 进行反馈,搜索是否有类似问题。我们会尽快响应和相应改进这篇文档。 \ No newline at end of file +请到 [GitHub issues](https://github.com/ant-design/ant-design-charts/issues) 进行反馈,搜索是否有类似问题。我们会尽快响应和相应改进这篇文档。 diff --git a/site/docs/manual/getting-started.en.md b/site/docs/manual/getting-started.en.md index 7fe462a3a..0f710af8e 100644 --- a/site/docs/manual/getting-started.en.md +++ b/site/docs/manual/getting-started.en.md @@ -3,152 +3,4 @@ title: Quick Start order: 1 --- -## Installation -### Import by NPM - -We provide `Ant Design Charts` npm package: - -```bash -// Recommended usage -npm install @ant-design/charts --save -``` - -You can use `import` or `require` to start. - -```ts -import { Line } from '@ant-design/charts'; -``` - -Related subpackages -- Plots: `@ant-design/plots` -- Maps: `@ant-design/maps` -- Flowchart: `@ant-design/flowchart` -- Relation Graphs: `@ant-design/graphs` - - -In addition to 'react' and 'react-dom', the flowchart also relies on 'antd', '@ant-design/icons' and 'lodash'. Ensure that it has been installed when using it. At the same time, remember to import the style file `import "@ant - design/flowchart/dist/index.css"; ` - -```ts -"peerDependencies": { - "@ant-design/icons": "^4.6.0", - "antd": "^4.6.3", - "lodash": "^4.17.20", - "react": ">=16.8.4", - "react-dom": ">=16.8.4" - } -``` - -### Import by CDN in browser - -You can download the script locally or import it directly from online resources. - -```ts -// Plots - -// Flowchart - -// Maps - -// Graphs - -``` - -Because the @ant-design/ Charts page externals 'react' and 'react-dom', you need to do the same thing in your project when using this method. By using CDN, introduce 'react' and 'react-dom' before 'Charts.min.js'. - -```ts -// webpack.config.js -externals: { - react: 'React', - 'react-dom': 'ReactDOM', -} -// public/index.html - - -// According to the need to introduce - -``` - -Usage: - -```ts -// Line chart, similar to other charts -const { Line } = window.charts; -``` - - -```html - - - -``` - -## Quick to use - -Once the Ant Design Charts page is introduced, we are ready to create our first chart, so let's start with a basic line chart example. Most demos use the parent container width, make sure the parent container width or manually set the chart width. - -```tsx | pure -import React from 'react'; -import { Line } from '@ant-design/charts'; - -const Page: React.FC = () => { - const data = [ - { year: '1991', value: 3 }, - { year: '1992', value: 4 }, - { year: '1993', value: 3.5 }, - { year: '1994', value: 5 }, - { year: '1995', value: 4.9 }, - { year: '1996', value: 6 }, - { year: '1997', value: 7 }, - { year: '1998', value: 9 }, - { year: '1999', value: 13 }, - ]; - - const config = { - data, - height: 400, - xField: 'year', - yField: 'value', - point: { - size: 5, - shape: 'diamond', - }, - }; - return ; -}; -export default Page; -``` - -Result: - -```tsx -import React from 'react'; -import { Line } from '@ant-design/charts'; - -const Page: React.FC = () => { - const data = [ - { year: '1991', value: 3 }, - { year: '1992', value: 4 }, - { year: '1993', value: 3.5 }, - { year: '1994', value: 5 }, - { year: '1995', value: 4.9 }, - { year: '1996', value: 6 }, - { year: '1997', value: 7 }, - { year: '1998', value: 9 }, - { year: '1999', value: 13 }, - ]; - - const config = { - data, - xField: 'year', - yField: 'value', - point: { - size: 5, - shape: 'diamond', - }, - }; - return ; -}; -export default Page; -``` \ No newline at end of file + diff --git a/site/docs/manual/getting-started.zh.md b/site/docs/manual/getting-started.zh.md index e17352c91..1b935bca8 100644 --- a/site/docs/manual/getting-started.zh.md +++ b/site/docs/manual/getting-started.zh.md @@ -30,9 +30,7 @@ import { Line } from '@ant-design/charts'; ```ts "peerDependencies": { - "@ant-design/icons": "^4.6.0", - "antd": "^4.6.3", - "lodash": "^4.17.20", + "lodash-es": "^4.17.20", "react": ">=16.8.4", "react-dom": ">=16.8.4" } @@ -111,45 +109,8 @@ const Page: React.FC = () => { height: 400, xField: 'year', yField: 'value', - point: { - size: 5, - shape: 'diamond', - }, }; return ; }; export default Page; ``` - -最终效果: - -```tsx -import React from 'react'; -import { Line } from '@ant-design/charts'; - -const Page: React.FC = () => { - const data = [ - { year: '1991', value: 3 }, - { year: '1992', value: 4 }, - { year: '1993', value: 3.5 }, - { year: '1994', value: 5 }, - { year: '1995', value: 4.9 }, - { year: '1996', value: 6 }, - { year: '1997', value: 7 }, - { year: '1998', value: 9 }, - { year: '1999', value: 13 }, - ]; - - const config = { - data, - xField: 'year', - yField: 'value', - point: { - size: 5, - shape: 'diamond', - }, - }; - return ; -}; -export default Page; -``` \ No newline at end of file diff --git a/site/docs/manual/introduction.en.md b/site/docs/manual/introduction.en.md index 971f1a1a8..7854e5547 100644 --- a/site/docs/manual/introduction.en.md +++ b/site/docs/manual/introduction.en.md @@ -5,22 +5,4 @@ redirect_from: - /en/docs/manual --- -### Ant Design Charts - -[Ant Design Charts](https://github.com/ant-design/ant-design-charts) is the React version of [AntV](https://antv.vision), and is more friendly to students of the React technology stackSame team development. - -- Out of the box: Presents high quality charts by default, and precipitates research into the development experience and user experience into the default configuration of the charts - -- Easy configuration: users can easily adjust chart details according to specific business needs - -- Experience well: Visual and interactive experiences focus on how to display and discover information at the root of the chart function - -
Just like using components to generate charts, out of the box, you don't even need to modify any configuration items can meet the requirements, the true default is easy to use, there is no feeling tempted to try. - -
![image.png](https://gw.alipayobjects.com/zos/antfincdn/TcUwTMuNxI/0a9ac684-e862-4889-b783-e0a75a0e3138.png#align=left&display=inline&height=951&name=image.png&originHeight=1901&originWidth=2000&size=968667&status=done&style=none&width=1000) - -### Framework - -Ant Design Charts has integrated a large number of visualization components, and other components are also being further improved. - -
![image.png](https://gw.alipayobjects.com/zos/antfincdn/UFTUFpcy89/94efa67a-8a33-4e34-a337-93d558ee8b17.png) \ No newline at end of file + diff --git a/site/docs/manual/introduction.zh.md b/site/docs/manual/introduction.zh.md index 49cef965e..cc452cacd 100644 --- a/site/docs/manual/introduction.zh.md +++ b/site/docs/manual/introduction.zh.md @@ -23,4 +23,4 @@ redirect_from: Ant Design Charts 目前已经集成了大量可视化组件,其它组件也在进一步完善中。 -
![image.png](https://gw.alipayobjects.com/zos/antfincdn/UFTUFpcy89/94efa67a-8a33-4e34-a337-93d558ee8b17.png) \ No newline at end of file +
![image.png](https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*THSzQoAZvz0AAAAAAAAAAAAADmJ7AQ/original) diff --git a/site/docs/manual/upgrade.zh.md b/site/docs/manual/upgrade.zh.md index d3f193611..a2086bacf 100644 --- a/site/docs/manual/upgrade.zh.md +++ b/site/docs/manual/upgrade.zh.md @@ -5,75 +5,8 @@ order: 7 ## 概述 -0.x 版本由于底层库架构不统一,BUG 修复成本较高,1.0 我们对底层架构进行了重构,功能和 [G2Plot 2.0](https://g2plot.antv.vision/zh) 保持同步。 +文章持续更新中,详见[语雀文档](https://www.yuque.com/antv/charts/yzp26a6px89iamau) -## 图表变更 - -### 删除 - -| 图表名称 | 描述 | 示例 | -| --- | --- | --- | -| Bubble | 改用 Scatter 实现, 修改图表名称即可。 | [Scatter](/demos/scatter) | -| StackedColumn | 改用 Column 实现。
删除 stackField 配置,改为 seriesField,需要指定 `isStack: true` 。 | [Column](/demos/column) | -| GroupedColumn | 改用 Column 实现。
删除 groupField 配置,改为 seriesField,需要指定 `isGroup: true` 。 | [Column](/demos/column) | -| PercentStackedColumn | 改用 Column 实现。
删除 stackField 配置,改为 seriesField,需要指定 `isStack: true`、`isPercent: true` 。 | [Column](/demos/column) | -| RangeColumn | 改用 Column 实现。
删除 stackField 配置,改为 seriesField,需要指定 `isRange: true` 。
label 不再支持 topStyle、bottomStyle,详细配置请参考 [API](/demos/column?type=api) 文档。 | [Column](/demos/column) | -| StackedBar | 改用 Bar 实现。
删除 groupField 配置,改为 seriesField,需要指定 `isStack: true` 。 | [Bar](/demos/bar) | -| PercentStackedBar | 改用 Bar 实现。
删除 stackField 配置,改为 seriesField,需要指定 `isStack: true`、`isPercent: true` 。 | [Bar](/demos/bar) | -| RangeBar | 改用 Bar 实现。
删除 stackField 配置,改为 seriesField,需要指定 `isRange: true` 。
label 不再支持 topStyle、bottomStyle,详细配置请参考 [API](/demos/bar?type=api) 文档 | [Bar](/demos/bar) | -| Donut | 改用 Pie 实现,修改图表名称即可 。 | [Pie](/demos/pie/donut) | -| DualLine | 改用 DualAxes 实现。 | [Demos](/demos/dual-axes/dual-line) | -| ColumnLine | 改用 DualAxes 实现。 | [Demos](/demos/dual-axes/column-line) | -| StackedColumnLine | 改用 DualAxes 实现。 | [Demos](/demos/dual-axes-column-line) | -| GroupedColumnLine | 改用 DualAxes 实现 。 | [Demos](/demos/dual-axes-column-line) | -| StackedArea | 改用 Area 实现。
去掉 stackField ,改用 seriesField 。 | [Area](/demos/area) | -| PercentStackedArea | 改用 Area 实现。去掉 stackField ,改用 seriesField ,需要指定 `isPercent: true` 。 | [Area](/demos/area) | -| StepLine | 改用 Line 实现,需要指定 stepType。
1.0 版版本可以使用默认 step ,2.0 版本必须手动指定 stepType(hv, vh, hvh, vhv), | [Line](/demos/line) | - -### 配置变更 - -Ant Design Charts 1.0 兼容大部分的 0.x 版本图表功能和配置项,详情如下: - -#### 通用配置 - -| 属性名 | 描述 | 示例 | -| --- | --- | --- | -| memoData | 删除,内部判断 | - | -| onlyChangeData | 删除,内部判断 | - | -| title | 不再支持 | - | -| description | 不再支持 | - | -| forceFit | 不再支持,改用 autoFit | - | -| responsive | 不再支持,内置 | - | -| guideLine | 不再支持,改用 [anniotations](/demos/general) 实现。 | - | -| label | label.type 会有兼容性问题,如果报错修改 type 配置或者去掉 | - | -| slider | 写法变更 | 示例 | -| scrollbar | 写法变更 | 示例 | -| events | 写法变更 | 示例 | -| visible | 写法变更 | 示例 | -| animation | 写法变更 | 示例 | - -#### 私有配置 - -更多请参考各图表 API. - -| 图表名称 | 描述 | 示例 | -| --- | --- | --- | -| Scatter | pointSize: 不再支持,改用 size 。
shape: 去掉默认类型 circle,需要显性设置。 | - | -| Rose | categoryField: 不再支持,改用 xField 。
radiusField: 不再支持,改用 yField 。
colorField: 不再支持,改用 seriesField 。 | - | -| Bullet | 改动较大,详细参考 [Bullet](/demos/bullet) | - | -| WordCloud | maskImage: 不再支持, 改用 imageMask。
wordStyle 选项中的 gridSize 改为 padding。 | - | -| TinyArea、TinyColumn、 TinyLine | 删除 xField 、yField。
data 类型由 object[] 变为 number[]。 | - | -| Gauge | 删除 color 、 min 、 max。
删除 value , 改用 percent 。
删除 pivot 改用 indicator。
更新 range ,详细参考[Gauge](/demos/gauge) | 示例 | -| Radar | 删除 radiusAxis ,改用 yAxis 。
删除 angleField , 改用 xField 。
删除 radiusField , 改用 yField 。 | - | -| Liquid | 删除 min 、max。
删除 value ,改用 percent。
更新 statistic 。 | 示例 | - -## 常见问题 - -### ScaleCtor is not a constructor - -示例 - -类型不兼容,请检查是否有相关的 type 配置,去掉或者查看最新的实现方式。 ## 遇到问题 diff --git a/site/docs/options/plots/animation/fadeIn.en.md b/site/docs/options/plots/animation/fadeIn.en.md new file mode 100644 index 000000000..5d155fe11 --- /dev/null +++ b/site/docs/options/plots/animation/fadeIn.en.md @@ -0,0 +1,6 @@ +--- +title: fadeIn +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/fadeIn.zh.md b/site/docs/options/plots/animation/fadeIn.zh.md new file mode 100644 index 000000000..fb745162f --- /dev/null +++ b/site/docs/options/plots/animation/fadeIn.zh.md @@ -0,0 +1,16 @@ +--- +title: fadeIn +order: 1 +--- + +`fadeIn` 是渐现动画,影响 `opacity` 透明度属性。 + +## 开始使用 + +fadeIn + +```ts + const config = { + animate: { enter: { type: 'fadeIn' } } + } +``` diff --git a/site/docs/options/plots/animation/fadeOut.en.md b/site/docs/options/plots/animation/fadeOut.en.md new file mode 100644 index 000000000..8b94338d4 --- /dev/null +++ b/site/docs/options/plots/animation/fadeOut.en.md @@ -0,0 +1,6 @@ +--- +title: fadeOut +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/fadeOut.zh.md b/site/docs/options/plots/animation/fadeOut.zh.md new file mode 100644 index 000000000..a9a9868ce --- /dev/null +++ b/site/docs/options/plots/animation/fadeOut.zh.md @@ -0,0 +1,16 @@ +--- +title: fadeOut +order: 1 +--- + +`fadeOut` 是渐现动画,影响 `opacity` 透明度属性。 + +## 开始使用 + +fadeOut + +```ts + const config = { + animate: { enter: { type: 'fadeOut' } } + } +``` diff --git a/site/docs/options/plots/animation/growInX.en.md b/site/docs/options/plots/animation/growInX.en.md new file mode 100644 index 000000000..887b71ae2 --- /dev/null +++ b/site/docs/options/plots/animation/growInX.en.md @@ -0,0 +1,6 @@ +--- +title: growInX +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/growInX.zh.md b/site/docs/options/plots/animation/growInX.zh.md new file mode 100644 index 000000000..6c605c9a0 --- /dev/null +++ b/site/docs/options/plots/animation/growInX.zh.md @@ -0,0 +1,16 @@ +--- +title: growInX +order: 1 +--- + +`growInX` 是容器沿着 x 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。影响图形的 `transform.scale` 属性。 + +## 开始使用 + +growInX + +```ts + const config = { + animate: { enter: { type: 'growInX' } } + } +``` diff --git a/site/docs/options/plots/animation/growInY.en.md b/site/docs/options/plots/animation/growInY.en.md new file mode 100644 index 000000000..dededd911 --- /dev/null +++ b/site/docs/options/plots/animation/growInY.en.md @@ -0,0 +1,6 @@ +--- +title: growInY +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/growInY.zh.md b/site/docs/options/plots/animation/growInY.zh.md new file mode 100644 index 000000000..a40010d47 --- /dev/null +++ b/site/docs/options/plots/animation/growInY.zh.md @@ -0,0 +1,16 @@ +--- +title: growInY +order: 1 +--- + +`growInY` 是容器沿着 y 方向放大的矩阵动画,多用于 G.Group 容器类进行动画。影响图形的 `transform.scale` 属性。 + +## 开始使用 + +growInY + +```ts + const config = { + animate: { enter: { type: 'growInY' } } + } +``` diff --git a/site/docs/options/plots/animation/morphing.en.md b/site/docs/options/plots/animation/morphing.en.md new file mode 100644 index 000000000..2bf1ef672 --- /dev/null +++ b/site/docs/options/plots/animation/morphing.en.md @@ -0,0 +1,6 @@ +--- +title: morphing +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/morphing.zh.md b/site/docs/options/plots/animation/morphing.zh.md new file mode 100644 index 000000000..d1875def6 --- /dev/null +++ b/site/docs/options/plots/animation/morphing.zh.md @@ -0,0 +1,16 @@ +--- +title: morphing +order: 1 +--- + +`morphing` 图形之间的形变动画,通过 SVG Path 之间的过渡形成的动画。 + +## 开始使用 + +morphing + +```ts + const config = { + animate: { enter: { type: 'morphing' } } + } +``` diff --git a/site/docs/options/plots/animation/overview.en.md b/site/docs/options/plots/animation/overview.en.md new file mode 100644 index 000000000..7bfc049e3 --- /dev/null +++ b/site/docs/options/plots/animation/overview.en.md @@ -0,0 +1,6 @@ +--- +title: Overview +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/overview.zh.md b/site/docs/options/plots/animation/overview.zh.md new file mode 100644 index 000000000..421f02ef4 --- /dev/null +++ b/site/docs/options/plots/animation/overview.zh.md @@ -0,0 +1,76 @@ +--- +title: 概览 +order: 1 +--- + +动画的过程本质是视觉属性在时间上的变化,带来视觉上的动画效果。在 G2 中,提供了三种动画场景类型: + +- `enter` - 元素第一次出现的出场动画; +- `update` - 数据更新的时候,元素更新的动画; +- `exit` - 数据更新的时候,元素被销毁退出画布的动画; + +利用这 3 种动画场景,结合 G2 动画语法使用数据驱动动画的方式,可以配制出各种各样需要的动画效果。 + +## 开始使用 + +```ts + const config = { + animate: { enter: { type: 'growInX' } } + } +``` + +## 选项 + +关于 `animate` API 的参数,有以下,主要 3 种动画场景(enter、update、exit)和 动画 5 个属性(type、duration、delay、easing、fill)的组合。 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----------------| ----------| +| enterType | 动画类型 | `Type` | | +| enterDuration | 动画持续时间 (ms) | `number` | | +| enterDelay | 延迟执行时间 (ms) | `number` | | +| enterEasing | 动画的缓动函数 | `Easing` | | +| enterFill | 动画处于非运行状态时的展示效果 | `Fill` | | +| updateType | 动画类型 | `Type` | | +| updateDuration | 动画持续时间 (ms) | `number` | | +| updateDelay | 延迟执行时间 (ms) | `number` | | +| updateEasing | 动画的缓动函数 | `Easing` | | +| updateFill | 动画处于非运行状态时的展示效果 | `Fill` | | +| exitType | 动画类型 | `Type` | | +| exitDuration | 动画持续时间 (ms) | `number` | | +| exitDelay | 延迟执行时间 (ms) | `number` | | +| exitEasing | 动画的缓动函数 | `Easing` | | +| exitFill | 动画处于非运行状态时的展示效果 | `Fill` | | + +### 动画类型 Type + +动画类型 `Type` 本质是设置动画的方式,会影响的视觉属性。这里具体可以看对应的文档 [Animation](/api/overview#animation)。当然也可以设置为 `null`,`undefined`,`false`,代表关闭动画。 + +### 缓动函数 Easing + +缓动函数指定的是动画过程中,视觉属性变化的插值函数。支持以下内置缓动函数,来自 [easings](https://easings.net/),也可以上这个网站预览动画缓动的效果。 + +| constant | accelerate | decelerate | accelerate-decelerate | decelerate-accelerate | +| ---------- | ------------------ | -------------- | --------------------- | --------------------- | +| linear | ease-in / in | ease-out / out | ease-in-out / in-out | ease-out-in / out-in | +| ease | in-sine | out-sine | in-out-sine | out-in-sine | +| steps | in-quad | out-quad | in-out-quad | out-in-quad | +| step-start | in-cubic | out-cubic | in-out-cubic | out-in-cubic | +| step-end | in-quart | out-quart | in-out-quart | out-in-quart | +| | in-quint | out-quint | in-out-quint | out-in-quint | +| | in-expo | out-expo | in-out-expo | out-in-expo | +| | in-circ | out-circ | in-out-circ | out-in-circ | +| | in-back | out-back | in-out-back | out-in-back | +| | in-bounce | out-bounce | in-out-bounce | out-in-bounce | +| | in-elastic | out-elastic | in-out-elastic | out-in-elastic | +| | spring / spring-in | spring-out | spring-in-out | spring-out-in | + +除此之外,还可以通过 `cubic-bezier(, , , )` 自定义形如三次贝塞尔曲线的函数。以上部分内置函数也是通过它定义完成的,例如 `ease-in-sine = cubic-bezier(0.47, 0, 0.745, 0.715)`。 + +### 动画填充 Fill + +该属性规定了图形在动画处于非运行状态(例如动画开始前,结束后)时的展示效果,可以参考 [WebAPI](https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming/fill) 规范。支持以下值: + +- `auto/none` - 默认值,这意味着动画在第一帧开始前和最后一帧结束后都不会影响到图形的展示效果。例如在动画完成后图形会恢复到动画前状态,如果设置了 delay 在延迟期间也不会应用第一帧的效果。 +- `forwards` - 动画完成后停住,不恢复到初始状态 +- `backwards` - 动画开始前应用第一帧效果 +- `both` - 为 forwards 和 backwards 的组合效果 diff --git a/site/docs/options/plots/animation/pathIn.en.md b/site/docs/options/plots/animation/pathIn.en.md new file mode 100644 index 000000000..31c6bfe49 --- /dev/null +++ b/site/docs/options/plots/animation/pathIn.en.md @@ -0,0 +1,6 @@ +--- +title: pathIn +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/pathIn.zh.md b/site/docs/options/plots/animation/pathIn.zh.md new file mode 100644 index 000000000..9a81131e7 --- /dev/null +++ b/site/docs/options/plots/animation/pathIn.zh.md @@ -0,0 +1,16 @@ +--- +title: pathIn +order: 1 +--- + +`pathIn` 是 SVG Path 路径入场动画。通过影响 `lineDash` 属性来实现。 + +## 开始使用 + +pathIn + +```ts + const config = { + animate: { enter: { type: 'pathIn' } } + } +``` diff --git a/site/docs/options/plots/animation/scaleInX.en.md b/site/docs/options/plots/animation/scaleInX.en.md new file mode 100644 index 000000000..64f3bc228 --- /dev/null +++ b/site/docs/options/plots/animation/scaleInX.en.md @@ -0,0 +1,6 @@ +--- +title: scaleInX +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/scaleInX.zh.md b/site/docs/options/plots/animation/scaleInX.zh.md new file mode 100644 index 000000000..72cd77f53 --- /dev/null +++ b/site/docs/options/plots/animation/scaleInX.zh.md @@ -0,0 +1,16 @@ +--- +title: scaleInX +order: 1 +--- + +`scaleInX` 单个图形沿着 x 方向的生长动画。影响 `transform.scale` 属性。 + +## 开始使用 + +scaleInX + +```ts + const config = { + animate: { enter: { type: 'scaleInX' } } + } +``` diff --git a/site/docs/options/plots/animation/scaleInY.en.md b/site/docs/options/plots/animation/scaleInY.en.md new file mode 100644 index 000000000..b8630efc7 --- /dev/null +++ b/site/docs/options/plots/animation/scaleInY.en.md @@ -0,0 +1,6 @@ +--- +title: scaleInY +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/scaleInY.zh.md b/site/docs/options/plots/animation/scaleInY.zh.md new file mode 100644 index 000000000..9b1e5003e --- /dev/null +++ b/site/docs/options/plots/animation/scaleInY.zh.md @@ -0,0 +1,16 @@ +--- +title: scaleInY +order: 1 +--- + +`scaleInY` 单个图形沿着 y 方向的生长动画。影响 `transform.scale` 属性。 + +## 开始使用 + +scaleInY + +```ts + const config = { + animate: { enter: { type: 'scaleInY' } } + } +``` diff --git a/site/docs/options/plots/animation/scaleOutX.en.md b/site/docs/options/plots/animation/scaleOutX.en.md new file mode 100644 index 000000000..8fa4cf0f3 --- /dev/null +++ b/site/docs/options/plots/animation/scaleOutX.en.md @@ -0,0 +1,6 @@ +--- +title: scaleOutX +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/scaleOutX.zh.md b/site/docs/options/plots/animation/scaleOutX.zh.md new file mode 100644 index 000000000..6774c5586 --- /dev/null +++ b/site/docs/options/plots/animation/scaleOutX.zh.md @@ -0,0 +1,16 @@ +--- +title: scaleOutX +order: 1 +--- + +`scaleOutX` 单个图形沿着 x 方向的消失动画。影响 `transform.scale` 属性。 + +## 开始使用 + +scaleOutX + +```ts + const config = { + animate: { enter: { type: 'scaleOutX' } } + } +``` diff --git a/site/docs/options/plots/animation/scaleOutY.en.md b/site/docs/options/plots/animation/scaleOutY.en.md new file mode 100644 index 000000000..18136c7f8 --- /dev/null +++ b/site/docs/options/plots/animation/scaleOutY.en.md @@ -0,0 +1,6 @@ +--- +title: scaleOutY +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/scaleOutY.zh.md b/site/docs/options/plots/animation/scaleOutY.zh.md new file mode 100644 index 000000000..0b576000a --- /dev/null +++ b/site/docs/options/plots/animation/scaleOutY.zh.md @@ -0,0 +1,16 @@ +--- +title: scaleOutY +order: 1 +--- + +`scaleOutY` 单个图形沿着 y 方向的消失动画。影响 `transform.scale` 属性。 + +## 开始使用 + +scaleOutY + +```ts + const config = { + animate: { enter: { type: 'scaleOutY' } } + } +``` diff --git a/site/docs/options/plots/animation/waveIn.en.md b/site/docs/options/plots/animation/waveIn.en.md new file mode 100644 index 000000000..2b633eb6d --- /dev/null +++ b/site/docs/options/plots/animation/waveIn.en.md @@ -0,0 +1,6 @@ +--- +title: waveIn +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/waveIn.zh.md b/site/docs/options/plots/animation/waveIn.zh.md new file mode 100644 index 000000000..ff9f85d68 --- /dev/null +++ b/site/docs/options/plots/animation/waveIn.zh.md @@ -0,0 +1,17 @@ +--- +title: waveIn +order: 1 +--- + +`waveIn` 划入入场动画效果,不同坐标系下效果不同。在直角坐标系下,影响 `transform.scale` 属性,在 polar 坐标系下,影响圆弧的 Path 属性。 + +## 开始使用 + +waveIn +waveIn + +```ts + const config = { + animate: { enter: { type: 'waveIn' } } + } +``` diff --git a/site/docs/options/plots/animation/zoomIn.en.md b/site/docs/options/plots/animation/zoomIn.en.md new file mode 100644 index 000000000..c51e124fc --- /dev/null +++ b/site/docs/options/plots/animation/zoomIn.en.md @@ -0,0 +1,6 @@ +--- +title: zoomIn +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/zoomIn.zh.md b/site/docs/options/plots/animation/zoomIn.zh.md new file mode 100644 index 000000000..5d5492c28 --- /dev/null +++ b/site/docs/options/plots/animation/zoomIn.zh.md @@ -0,0 +1,16 @@ +--- +title: zoomIn +order: 1 +--- + +`zoomIn` 沿着图形中心点的放大动画。影响 `transform.scale` 属性。 + +## 开始使用 + +zoomIn + +```ts + const config = { + animate: { enter: { type: 'zoomIn' } } + } +``` diff --git a/site/docs/options/plots/animation/zoomOut.en.md b/site/docs/options/plots/animation/zoomOut.en.md new file mode 100644 index 000000000..d38db0e85 --- /dev/null +++ b/site/docs/options/plots/animation/zoomOut.en.md @@ -0,0 +1,6 @@ +--- +title: zoomOut +order: 1 +--- + + diff --git a/site/docs/options/plots/animation/zoomOut.zh.md b/site/docs/options/plots/animation/zoomOut.zh.md new file mode 100644 index 000000000..2ae4c7318 --- /dev/null +++ b/site/docs/options/plots/animation/zoomOut.zh.md @@ -0,0 +1,16 @@ +--- +title: zoomOut +order: 1 +--- + +`zoomOut` 沿着图形中心点的缩小动画。影响 `transform.scale` 属性。 + +## 开始使用 + +zoomOut + +```ts + const config = { + animate: { enter: { type: 'zoomOut' } } + } +``` diff --git a/site/docs/options/plots/common/componentTitle.en.md b/site/docs/options/plots/common/componentTitle.en.md new file mode 100644 index 000000000..4548af408 --- /dev/null +++ b/site/docs/options/plots/common/componentTitle.en.md @@ -0,0 +1 @@ + diff --git a/site/docs/options/plots/common/componentTitle.zh.md b/site/docs/options/plots/common/componentTitle.zh.md new file mode 100644 index 000000000..1ddbe142e --- /dev/null +++ b/site/docs/options/plots/common/componentTitle.zh.md @@ -0,0 +1,17 @@ +--- +desc: 组件标题选项 +--- + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------ | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------ | +| title | 关闭标题或设置标题内容 | `false`\|`string` | true | +| titleSpacing | 标题到内容区域的间距 | `number` \| `number[]` | 0 | +| titleInset | 标题文本内边距 | `number` \| `number[]` | 0 | +| titlePosition | 标题所处位置。可采用简写形式,如`'i'` 表示`'inner'` | `'top'` \| `'bottom'` \|`'left'` \|`'right'` \|`'left-top'` \|`'left-bottom'` \|`'right-top'` \|`'right-bottom'` \|`'inner'` \| `'lt'` | - | +| titleFontSize | 标题文字大小 | `number` | - | +| titleFontFamily | 标题文字字体 | `string` | - | +| titleFontWeight | 标题字体粗细 | `number` | - | +| titleFill | 标题字体颜色 | `string` | +| titleFillOpacity | 标题字体颜色透明度 | `number` | +| titleStroke | 标题字体描边颜色 | `string` | - | +| titleStrokeOpacity | 标题字体描边颜色透明度 | `number` | - | diff --git a/site/docs/options/plots/common/navigator.en.md b/site/docs/options/plots/common/navigator.en.md new file mode 100644 index 000000000..0cfb9efad --- /dev/null +++ b/site/docs/options/plots/common/navigator.en.md @@ -0,0 +1 @@ + diff --git a/site/docs/options/plots/common/navigator.zh.md b/site/docs/options/plots/common/navigator.zh.md new file mode 100644 index 000000000..3378f658b --- /dev/null +++ b/site/docs/options/plots/common/navigator.zh.md @@ -0,0 +1,12 @@ +--- +desc: 分页器属性选项 +--- + +| 属性 | 描述 | 类型 | 默认值 | +| ------------ | -------------------------------------------------------------- | -------------------------------------------------------------------------- | ------------ | +| navEffect | 翻页显示效果 | 参见 [Web Animations API](https://g-next.antv.vision/api/animation/waapi/) | linear | +| navDuration | 单次翻页动效时长 | `number` | 200 | +| navOrient | 翻页滚动方向
- 横向`'horizontal'`
- 纵向`'vertical'` | `'horizontal'`\|`'vertical'` | 'horizontal' | +| navInitPage | 默认展示页数 | `number` | 0 | +| navLoop | 是否启用循环翻页 | `boolean` | false | +| navFormatter | 页码文本格式化 | `(current: number, total: number) => string;` | - | diff --git a/site/docs/options/plots/common/sparkline.en.md b/site/docs/options/plots/common/sparkline.en.md new file mode 100644 index 000000000..6454c013a --- /dev/null +++ b/site/docs/options/plots/common/sparkline.en.md @@ -0,0 +1 @@ + diff --git a/site/docs/options/plots/common/sparkline.zh.md b/site/docs/options/plots/common/sparkline.zh.md new file mode 100644 index 000000000..af353d097 --- /dev/null +++ b/site/docs/options/plots/common/sparkline.zh.md @@ -0,0 +1,20 @@ +--- +desc: 迷你图属性选项 +--- + +| 属性 | 描述 | 类型 | 默认值 | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ------ | +| sparklineType | 迷你图类型:折线图、直方图 | `line` \| `column` | line | +| sparklineIsStack | 是否对数据进行堆叠 | `boolean` | false | +| sparklineRange | 指定值范围,未指定时将使用 data 的最小值和最大值 | `[number, number]` | - | +| sparklineColor | 指定颜色 | `string` \| `string[]` \| `(index: number)=>string` | - | +| sparklineSmooth | 适用于折线图,平滑曲线 | `boolean` | false | +| sparklineLineStroke | 适用于折线图,线条颜色 | `string` | - | +| sparklineLineStrokeOpacity | 适用于折线图,线条透明度 | `number` | - | +| sparklineLineLineDash | 适用于折线图,线条的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` | - | +| sparklineAreaFill | 适用于折线图,填充区域颜色 | `string` | - | +| sparklineAreaFillOpacity | 适用于折线图,填充区域透明度 | `number` | - | +| sparklineColumnFill | 适用于直方图,条形颜色 | `string` | - | +| sparklineColumnFillOpacity | 适用于直方图,条形透明度 | `number` | - | +| sparklineIsGroup | 适用于直方图,是否分组显示 | `boolean` | false | +| sparklineSpacing | 适用于直方图,分组直方的间距 | `number` | 0 | diff --git a/site/docs/options/plots/common/style.en.md b/site/docs/options/plots/common/style.en.md new file mode 100644 index 000000000..2adcdaaa7 --- /dev/null +++ b/site/docs/options/plots/common/style.en.md @@ -0,0 +1 @@ + diff --git a/site/docs/options/plots/common/style.zh.md b/site/docs/options/plots/common/style.zh.md new file mode 100644 index 000000000..e7ee061e0 --- /dev/null +++ b/site/docs/options/plots/common/style.zh.md @@ -0,0 +1,18 @@ +--- +desc: 通用的 G shape 属性样式 +--- + +| 属性 | 描述 | 类型 | 默认值 | +|----------------|------------------------------------------------|---------------------|------------| +| fill | 图形的填充色 | `string` \| `Function` | - | +| fillOpacity | 图形的填充透明度 | `number` \| `Function` | - | +| stroke | 图形的描边 | `string` \| `Function` | - | +| lineWidth | 图形描边的宽度 | `number` \| `Function` | - | +| lineDash | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` \| `Function<[number, number]>` | - | +| strokeOpacity | 描边透明度 | `number` \| `Function` | - | +| opacity | 图形的整体透明度 | `number` \| `Function` | - | +| shadowColor | 图形阴影颜色 | `string` \| `Function` | - | +| shadowBlur | 图形阴影的高斯模糊系数 | `number` \| `Function` | - | +| shadowOffsetX | 设置阴影距图形的水平距离 | `number` \| `Function` | - | +| shadowOffsetY | 设置阴影距图形的垂直距离 | `number` \| `Function` | - | +| cursor | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | `string` \| `Function` | 'default' | diff --git a/site/docs/options/plots/component/axis.en.md b/site/docs/options/plots/component/axis.en.md new file mode 100644 index 000000000..292165ded --- /dev/null +++ b/site/docs/options/plots/component/axis.en.md @@ -0,0 +1,6 @@ +--- +title: axis +order: 1 +--- + + diff --git a/site/docs/options/plots/component/axis.zh.md b/site/docs/options/plots/component/axis.zh.md new file mode 100644 index 000000000..cb39f8f42 --- /dev/null +++ b/site/docs/options/plots/component/axis.zh.md @@ -0,0 +1,168 @@ +--- +title: axis +order: 1 +--- + +绘制坐标轴,目前支持直角坐标系坐标轴与极坐标系坐标轴。 + +```js +const config = { + axis: { + x: {}, + y: {}, + }, +} +``` + +## 选项 + +### 标题 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------ | -------------------------------------------------------------- | ------------------------------------------------------------ | ------ | +| title | 关闭标题或设置标题内容 | `false`|`string` | `number` | `DisplayObject` | - | +| titleSpacing | 标题到坐标轴的距离 | `number` | 10 | +| titlePosition | 标题相对坐标轴的位置,支持首字母简写形式,如`'top'`简写为`'t'` | `'top'`|`'bottom'`|`'left'`|`'right'` | `'lb'` | +| titleFontSize | 标题文字大小 | `number` | - | +| titleFontFamily | 标题文字字体 | `string` | - | +| titleFontWeight | 标题字体粗细 | `number` | - | +| titleStroke | 标题字体颜色 | `string` | - | +| titleStrokeOpacity | 标题透明度 | `number` | - | + +### 轴线 + +| 属性 | 描述 | 类型 | 默认值 | +| ----------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------ | ------ | +| line | 是否显示轴线 | `boolean` | true | +| arrow | 是否显示箭头 | `boolean` | true | +| lineExtension | 轴线两侧的延长线 | `[number, number]` | - | +| lineArrow | 定义轴线箭头形状,默认为箭头形状 | `DisplayObject` | - | +| lineArrowOffset | 箭头偏移长度 | `number` | 15 | +| lineArrowSize | 箭头尺寸 | `number` | - | +| lineLineWidth | 轴线宽度 | `number` | - | +| lineLineDash | 轴线描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` | - | +| lineStroke | 轴线描边色 | `string` | - | +| lineStrokeOpacity | 轴线描边色透明度 | `number` | - | + +### 刻度 + +| 属性 | 描述 | 类型 | 默认值 | +| ----------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ---------- | +| tick | 是否显示刻度 | `boolean` | true | +| tickFilter | 刻度线过滤 | `(datum, index, data)=>boolean` | - | +| tickFormatter | 刻度线格式化,可用于自定义刻度样式,回调函数中会额外返回该刻度的方向 | `DisplayObject` | `(datum, index, data, Vector)=> DisplayObject` | - | +| tickDirection | 刻度朝向,为 `positive` 时,位于侧轴方向(即主轴顺时针 90 度方向), 为 `negative` 时,刻度位于侧轴负方向 | `'positive'` | `'negative'` | 'positive' | +| tickLength | 轴线长度 | `number`|`(datum, index, data)=>number` | 15 | +| tickLineWidth | 刻度线宽度 | `number` | `(datum, index, data, Vector)=>number` | - | +| tickLineDash | 刻度线描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` | `(datum, index, data, Vector)=>[number,number]` | - | +| tickStroke | 刻度线颜色 | `string` | `(datum, index, data, Vector)=>string` | - | +| tickStrokeOpacity | 刻度线透明度 | `number` | `(datum, index, data, Vector)=>number` | - | + +### 刻度值 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------ | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ---------- | +| label | 是否显示刻度值 | `boolean` | - | +| labelFilter | 刻度值过滤 | `(datum, index, data)=> boolean` | - | +| labelFormatter | 刻度值线格式化 | `DisplayObject` | `(datum, index, data, Vector)=> DisplayObject` | - | +| transform | 刻度值转换,避免文本之间发生重叠。当前支持超长文本缩略、重叠刻度值隐藏、自动旋转 | `Transform[]` | - | +| labelAutoHide | 自动隐藏重叠的刻度值,设置 size 值的时候生效 | `boolean` | `HideOverlapCfg` | - | +| labelAutoRotate | 自动旋转刻度,设置 size 值的时候生效值 | `boolean` | `RotateOverlapCfg` | - | +| labelAutoEllipsis | 自动缩略刻度值,设置 size 值的时候生效 | `boolean` | `EllipsisOverlapCfg` | - | +| labelAutoWrap | 自动换行刻度值,设置 size 值的时候是生效 | `boolean` | `WrapOverlapCfg` | - | +| labelAlign | 刻度值对齐方式
- 'horizontal' 始终保持水平
- 'parallel' 平行于坐标轴
- 'perpendicular' 垂直于坐标轴 | `'horizontal'` | `'parallel'` | `'perpendicular'` | 'parallel' | +| labelDirection | 刻度值位于轴线的位置,参考`tickDirection` | `'positive'` | `'negative'` | 'positive' | +| labelSpacing | 刻度值到其对应刻度的间距 | `number` | 0 | +| labelLineWidth | 刻度值宽度 | `number` |`(datum, index, data)=>number` | - | +| labelLineDash | 刻度值描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` | `(datum, index, data)=>[number, number]` | - | +| labelFontSize | 刻度值文字大小 | `number` | `(datum, index, data)=>number` | - | +| labelFontFamily | 刻度值文字字体 | `string` | `(datum, index, data)=>string` | - | +| labelFontWeight | 刻度值字体粗细 | `number` |`(datum, index, data)=>number` | - | +| labelFill | 刻度值字体颜色 | `string` | `(datum, index, data)=>string` | - | +| labelFillOpacity | 刻度值文本透明度 | `number` | `(datum, index, data)=>number` | - | +| labelStroke | 刻度值文本描边颜色 | `string` | `(datum, index, data)=>string` | - | +| labelStrokeOpacity | 刻度值文本描边透明度 | `number` | `(datum, index, data)=>number` | - | + +```ts +export interface Transform { + /** 避免刻度值重叠时的额外边距 */ + margin?: number[]; +} + +export interface EllipsisOverlapCfg extends Transform { + type: 'ellipsis'; + /** 缩略替换字符,默认为 ... */ + suffix?: string; + /** 文本短于该长度时不再缩略 */ + minLength: string | number; + /** 文本短于该长度时一定会进行缩略 */ + maxLength?: string | number; + /** 每次缩略执行步长 */ + step?: string | number; +} + +export interface RotateOverlapCfg extends Transform { + type: 'rotate'; + /** 可选的旋转角度值 */ + optionalAngles: number[]; + /** 当旋转无法避免重叠时,是否恢复为默认旋转角度 */ + recoverWhenFailed?: boolean; +} + +export interface HideOverlapCfg extends Transform { + type: 'hide'; + /** 保证第一个刻度值不被隐藏 */ + keepHeader?: boolean; + /** 保证最后一个刻度值不被隐藏 */ + keepTail?: boolean; +} + +export interface WrapOverlapCfg extends Transform { + type: 'wrap'; + /** 单行最大宽度 */ + wordWrapWidth?: number; + /** 最大行数 */ + maxLines?: number; + recoverWhenFailed?: boolean; +} +``` + +### 网格线 + +在不同坐标系下网格线会具有不同的样式 + +| 场景标签 | 样式 | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `直角坐标系` | linear-grid | +| `极坐标系` | circle-grid | +| `极坐标系` | polar-grid | +| `极坐标系` `雷达图` | polygon-grid | + +| 属性 | 描述 | 类型 | 默认值 | +| ----------------- | ------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------ | +| grid | 是否显示网格线 | `boolean` | false | +| gridFilter | 网格线过滤 | `(datum, index, data)=> boolean` | - | +| gridLength | 网格线长度。一般情况下,不需要用户配置。 | `number` | `(datum, index, data)=> number` | 0 | +| gridAreaFill | 网格线区域颜色 | `string` | `string[]`| `(datum, index, data)=> string` | - | +| gridLineWidth | 网格线宽度 | `number` | - | +| gridLineDash | 网格线描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` | - | +| gridStroke | 网格线颜色 | `string` | - | +| gridStrokeOpacity | 网格线透明度 | `number` | - | + +### 动画 + +支持设置更新时的动画效果 + +| 属性 | 描述 | 类型 | 默认值 | +| ------- | ------------ | ------------------------------- | ------ | +| animate | 是否开启动画 | `boolean` | `EffectTiming` | - | + +EffectTiming 支持配置的属性如下: + +| 属性 | 描述 | 类型 | 默认值 | +| -------- | ------------------------------ | -------- | ------ | +| delay | 延迟执行时间 (ms) | `number` | - | +| duration | 动画持续时间 (ms) | `number` | - | +| easing | 动画的缓动函数 | `Easing` | - | +| endDelay | 延迟执行时间 (ms) | `number` | - | +| fill | 动画处于非运行状态时的展示效果 | `Fill` | - | diff --git a/site/docs/options/plots/component/legend.en.md b/site/docs/options/plots/component/legend.en.md new file mode 100644 index 000000000..245de2a87 --- /dev/null +++ b/site/docs/options/plots/component/legend.en.md @@ -0,0 +1,6 @@ +--- +title: legend +order: 1 +--- + + diff --git a/site/docs/options/plots/component/legend.zh.md b/site/docs/options/plots/component/legend.zh.md new file mode 100644 index 000000000..c0f8f6503 --- /dev/null +++ b/site/docs/options/plots/component/legend.zh.md @@ -0,0 +1,261 @@ +--- +title: legend +order: 1 +--- + +绘制图例,G2 提供了两种图例类型:分类图例(Category Legend)和连续图例(Continuous Legend),分别用于展示分类数据和连续数据。 + +```js +const config = { + legend: { + color: {}, + size: {}, + }, +} +``` + +## 分类图例 + +### 图例项 + +图例项通常由图标、标签和值三部分构成,在部分场景下也可能仅包含图标及标签。 + +item + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------------- | ------------------------------ | -------------------------------------------------------- | --------- | +| itemMarker | 图例项图标 | `DisplayObject` \| `(datum, index, data)=>DisplayObject` | 'circle' | +| itemMarkerFill | 图例项图标填充色 | `string` \| `(datum, index, data)=>string` | - | +| itemMarkerFillOpacity | 图例项图标填充色透明度 | `number` \| `(datum, index, data)=>number` | - | +| itemMarkerStroke | 图例项图标描边色 | `string` \| `(datum, index, data)=>string` | - | +| itemMarkerStrokeOpacity | 图例项图标描边色透明度 | `number` \| `(datum, index, data)=>number` | - | +| itemLabelText | 图例项标签 | `string` \| `(datum, index, data)=>string` | - | +| itemLabelFontSize | 图例项标签文字大小 | `number` \| `(datum, index, data)=>number` | - | +| itemLabelFontFamily | 图例项标签文字字体 | `string` \| `(datum, index, data)=>string` | - | +| itemLabelFontWeight | 图例项标签字体粗细 | `number` \| `(datum, index, data)=>number` | - | +| itemLabelFill | 图例项标签字体颜色 | `string` \| `(datum, index, data)=>string` | - | +| itemLabelFillOpacity | 图例项标签字体透明度 | `number` \| `(datum, index, data)=>number` | - | +| itemLabelStroke | 图例项标签描边色 | `string` \| `(datum, index, data)=>string` | - | +| itemLabelStrokeOpacity | 图例项标签描边色透明度 | `number` \| `(datum, index, data)=>number` | - | +| itemValueText | 图例项值 | `string` \| `(datum, index, data)=>string` | - | +| itemValueFontSize | 图例项值文字大小 | `number` \| `(datum, index, data)=>number` | - | +| itemValueFontFamily | 图例项值文字字体 | `string` \| `(datum, index, data)=>string` | - | +| itemValueFontWeight | 图例项值字体粗细 | `number` \| `(datum, index, data)=>number` | - | +| itemValueFill | 图例项值字体颜色 | `string` \| `(datum, index, data)=>string` | - | +| itemValueFillOpacity | 图例项值字体透明度 | `number` \| `(datum, index, data)=>number` | - | +| itemValueStroke | 图例项值描边色 | `string` \| `(datum, index, data)=>string` | - | +| itemValueStrokeOpacity | 图例项值描边色透明度 | `number` \| `(datum, index, data)=>number` | - | +| itemSpan | 图例项图标、标签和值的空间划分 | `number` \| `number[]` | [1, 1, 1] | +| itemSpacing | 图例项图标、标签和值之间的间距 | `number` \| `number[]` | - | +| itemBackgroundFill | 背景颜色 | `string` | - | +| itemBackgroundFillOpacity | 背景透明度 | `number` | - | + +### 布局 + +默认采用**流式布局**。 + +flow layout + +当指定 `cols` 之后会采用**网格布局**。 + +grid layout 1 + +grid layout 2 + +| 属性 | 描述 | 类型 | 默认值 | +| ---------- | ------------------------------------------------ | ------------------ | ------ | +| layout | 图例项布局方式,网格布局、流式布局 | `'flex'`\|`'grid'` | 'flex' | +| cols | 指定每列显示的图例项数量,为空时表示列数不受限制 | `number` | - | +| colPadding | 图例项之间的横向间隔 | `number` | 0 | +| rowPadding | 图例项之间的纵向间隔 | `number` | 0 | +| maxRows | 最多多少行 | `number` | 3 | +| maxCols | 最多多少列 | `number` | 3 | + +### 分页显示 + +图例项分页显示时能够控制分页器的行为。 + + + +### 事件 + +| 事件类型 | 描述 | 类型 | +| ---------- | -------------------- | ------------------------- | +| click | 点击图例项时触发 | `(item:Selection)=>void` | +| mouseenter | 鼠标移入图例项时触发 | `(item: Selection)=>void` | +| mouseleave | 鼠标移出图例项时触发 | `(item:Selection)=>void` | + +## 连续图例 + +使用离散数据绘制视图时采用的图例类型。 + +continuous + +```ts +const config = { + legend: { + y: { + ribbonLen: 200, + ribbonSize: 30, + labelFormatter: (datum, index, data) => datum.people.toLocaleString(), + type: 'size', + color: [ + '#d0e3fa', + '#acc7f6', + '#8daaf2', + '#6d8eea', + '#4d73cd', + '#325bb1', + '#5a3e75', + '#8c3c79', + '#e23455', + '#e7655b', + ], + }, + }, +} + +``` + +### 背景色带 + +连续数据的图例具有 4 种样式,分别为: + +- 连续表示 `默认` + + ribbon-color + +- 范围表示 `block=true` + + ribbon-color + +- 尺寸表示 `type='size'` + + ribbon-color + +- 尺寸、范围表示 `type='size'` `block=true` + + ribbon-color + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------- | -------------------------------- | --------------------------- | ------- | +| color | 色带颜色,为数组时会从中按序取色 | `string[]` \| `interpolate` | - | +| block | 是否按区间显示 | `boolean` | false | +| type | 连续图例类型 | `'size'` \| `'color'` | 'color' | +| ribbonSize | 色带尺寸 | `number` | - | +| ribbonFill | 色带颜色 | `string` | - | +| ribbonFillOpacity | 色带透明度 | `number` | - | +| ribbonStroke | 色带描边色 | `string` | - | +| ribbonStrokeOpacity | 色带描边色透明度 | `number` | - | + +> color 插值器参考 [d3-interpolate](https://github.com/d3/d3-interpolate) + +### 滑动窗口 + +滑动窗口标记了当前的值选取范围,通过与滑动窗口交互能够对视图中的值范围进行选择。 + + slider-window + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------------- | -------------------- | ------------------------------ | ---------- | +| handle | 是否显示滑动手柄 | `boolean` | true | +| handleLabel | 是否显示手柄文本 | `boolean` | true | +| handleFormatter | 手柄文本格式化 | `(datum)=>string` | - | +| slidable | 窗口是否可以滑动 | `boolean` | true | +| range | 默认选择范围 | `[number, number]` | [min, max] | +| step | 单次滑动步长 | `number` | 1 | +| handleMarkerFill | 手柄图标颜色 | `string` | - | +| handleMarkerFillOpacity | 手柄图标色透明度 | `number` | - | +| handleMarkerStroke | 手柄图标描边色 | `string` | - | +| handleMarkerStrokeOpacity | 手柄图标描边色透明度 | `number` | - | +| handleLabelFontSize | 手柄文字大小 | `number` \| `Function` | - | +| handleLabelFontFamily | 手柄文字字体 | `string` \| `Function` | - | +| handleLabelFontWeight | 手柄字体粗细 | `number` \|`Function` | - | +| handleLabelFill | 手柄字体颜色 | `string` | - | +| handleLabelFillOpacity | 手柄文本透明度 | `number` | - | +| handleLabelStroke | 手柄文本描边色 | `string` | - | +| handleLabelStrokeOpacity | 手柄文本描边色透明度 | `number` | - | + +### 刻度值 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------ | --------------------------------------------------------------------- | ------------------------------- | ---------- | +| label | 是否显示刻度值 | `boolean` | true` | +| labelFormatter | 刻度值格式化 | `(datum, index, data)=>string` | - | +| labelFilter | 刻度值过滤 | `(datum, index, data)=>boolean` | - | +| labelDirection | 刻度值位于色带的位置,参考 axis `direction` | `'positive'` \| `'negative'` | 'positive' | +| labelSpacing | 刻度值到色带的间距 | `number` | 5 | +| labelAlign | 刻度值对齐位置
- `'value'` 对齐到刻度
- `'range'` 对齐到范围 | `'value'`\|`'range'` | 'value' | +| labelFontSize | 刻度值文字大小 | `number` \| `Function` | - | +| labelFontFamily | 刻度值文字字体 | `string` \| `Function` | - | +| labelFontWeight | 刻度值字体粗细 | `number` \| `Function` | - | +| labelStroke | 刻度值字体颜色 | `string` | - | +| labelStrokeOpacity | 刻度值文本透明度 | `number` | - | + +刻度值对齐方式 + +- 对齐到刻度 + + align-tick + +- 对齐到范围 + + align-range + +### 指示器 + +指示器是在与连续图例交互过程中指示当前所在位置所表示值大小的提示组件。 + +indicator + +| 属性 | 描述 | 类型 | 默认值 | +| -------------------------------- | ------------------------ | ---------------------------------- | ------ | +| indicator | 是否显示值指示器 | `boolean` | true | +| indicatorFormatter | 值指示器格式化 | `(datum)=>string \| DisplayObject` | - | +| indicatorLabelFontSize | 值指示器文本文字大小 | `number` \| `Function` | - | +| indicatorLabelFontFamily | 值指示器文本文字字体 | `string` \| `Function` | - | +| indicatorLabelFontWeight | 值指示器文本字体粗细 | `number` \|`Function` | - | +| indicatorLabelStroke | 值指示器字体颜色 | `string` | - | +| indicatorLabelStrokeOpacity | 值指示器文本透明度 | `number` | - | +| indicatorBackgroundFill | 值指示器背景颜色 | `string` | - | +| indicatorBackgroundFillOpacity | 值指示器背景透明度 | `number` | - | +| indicatorBackgroundStroke | 值指示器背景描边色 | `string` | - | +| indicatorBackgroundStrokeOpacity | 值指示器背景描边色透明度 | `number` | - | + +### 事件 + +| 事件类型 | 描述 | 类型 | +| ----------- | -------------------------- | ------------------------------------------------ | +| valuechange | 滑动窗口选取范围改变时触发 | `(range: [number, number])=>void` | +| indicate | 指示器值改变时触发 | `(value: number, range: [number, number])=>void` | + +## 通用选项 + +### 标题 + + + +### 布局 + +Legend 组件支持调整其在画布中的位置,通过 `layout` 属性来设置。 +目前支持基本的 Flex 布局方式,支持的属性包括: `justifyContent`, `alignItems`, `flexDirection`。 + +| 属性 | 描述 | 类型 | 默认值 | +| -------------- | ------------ | -------------------------------------------- | -------------- | +| justifyContent | 主轴对齐方式 | `'flex-start'` \| `'flex-end'` \| `'center'` | `'flex-start'` | +| alignItems | 交叉轴对齐 | `'flex-start'` \| `'flex-end'` \| `'center'` | `'flex-start'` | +| flexDirection | 主轴方向 | `'row'` \| `'column'` | `'row'` | + +```ts +const config = { + legend: { + color: { + layout: { + justifyContent: 'center', + alignItems: 'center', + flexDirection: 'column', + }, + }, + }, +} +``` diff --git a/site/docs/options/plots/component/scrollbar.en.md b/site/docs/options/plots/component/scrollbar.en.md new file mode 100644 index 000000000..c60377003 --- /dev/null +++ b/site/docs/options/plots/component/scrollbar.en.md @@ -0,0 +1,6 @@ +--- +title: scrollbar +order: 1 +--- + + diff --git a/site/docs/options/plots/component/scrollbar.zh.md b/site/docs/options/plots/component/scrollbar.zh.md new file mode 100644 index 000000000..8da9f4a97 --- /dev/null +++ b/site/docs/options/plots/component/scrollbar.zh.md @@ -0,0 +1,65 @@ +--- +title: scrollbar +order: 1 +--- + +滚动条(scrollbar)是一个交互组件,当显示区域大小不足以容纳全部信息时,可以将超出部分隐藏,并通过滚动条的垂直或横向滑动来显示出被隐藏部分。 + +## 何时使用 + +内容是否超出显示区域取决于内容的多少以及显示区域的尺寸,当需要显示的内容在纵向方向上超过显示区域的大小时,应当使用垂直滚动条以控制显示的部分,横向滚动条同理。 + +## 开始使用 + +scrollbar + +```ts +const config = { + scrollbar: { + x: {} + } +} +``` + +## 选项 + +### 基本 + +| 属性 | 描述 | 类型 | 默认值 | +| -------------------------- | ---------------------- | ---------------------- | ------ | +| ratio | 滚动条的比例 | `number` | 0.5 | +| value | 滚动条的起始位置 | `[0, 1]` | 0 | +| slidable | 是否可以拖动 | `boolean` | true | +| scrollable | 是否支持滚轮滚动 | `boolean` | true | +| `style.`isRound | 滚动条样式是否为圆角 | `boolean` | false | +| `style.`padding | 滚动条轨道内边距 | `number` \| `number[]` | 2 | +| `style.`thumbFill | 滚动条滑块填充色 | `string` | – | +| `style.`thumbFillOpacity | 滚动条滑块填充色透明度 | `number` | – | +| `style.`thumbStroke | 滚动条滑块描边色 | `string` | – | +| `style.`thumbStrokeOpacity | 滚动条滑块描边色透明度 | `number` | – | +| `style.`trackSize | 滚动条的轨道宽度 | `number` | 10 | +| `style.`trackFill | 滚动条轨道填充色 | `string` | - | +| `style.`trackFillOpacity | 滚动条轨道填充色透明度 | `number` | - | +| `style.`trackStroke | 滚动条轨道描边色 | `string` | – | +| `style.`trackStrokeOpacity | 滚动条轨道描边色透明度 | `number` | – | + +### 事件 + +| 属性 | 描述 | 类型 | +| ----------- | -------------------------------- | ------------- | +| valuechange | 发生滚动变化时触发,通过事件监听 | `function(e)` | + +```ts +const config = { + scrollbar: { + x: {} + }, + onReady: (chart) => { + const { canvas } = chart.getContext(); + const { document } = canvas; + document.querySelector('.g2-scrollbar').addEventListener('valuechange', (evt) => { + console.info(evt.detail); + }); + } +} +``` diff --git a/site/docs/options/plots/component/slider.en.md b/site/docs/options/plots/component/slider.en.md new file mode 100644 index 000000000..d1971aed6 --- /dev/null +++ b/site/docs/options/plots/component/slider.en.md @@ -0,0 +1,6 @@ +--- +title: slider +order: 1 +--- + + diff --git a/site/docs/options/plots/component/slider.zh.md b/site/docs/options/plots/component/slider.zh.md new file mode 100644 index 000000000..92b510e4b --- /dev/null +++ b/site/docs/options/plots/component/slider.zh.md @@ -0,0 +1,90 @@ +--- +title: slider +order: 1 +--- + +缩略轴(slider)是一种辅助看数据的组件,它将大量数据浓缩到一个轴上,既可以缩小宏观看数据全貌,又可以放大微观看数据的片段,同时还可以拖拽观察数据在一定区间内的演变。 + +## 何时使用 + +缩略轴是值域数据的浓缩,它跟位置通道 `x`, `y` 对应的比例尺的类型息息相关。一般来说时间类型上使用缩略轴的频率高,连续轴使用缩略轴频次低、分类轴几乎不会使用到缩略轴。 + +slider + +- 时间轴,数据跨度非常大,【高频使用】,比如一组时序数据跨度 10 年,需观察这期间数据变化趋势时,建议开启缩略轴; +- 时间轴,数据密度很高,【高频使用】,比如分钟级更新的实时数据,当需要查看一天内的数据走势时,建议开启缩略轴; +- 连续轴,数据密度很高,【低频使用】比如查看 1-100 岁平均身高分布,开启缩略轴可以全局查看身高分布; +- 分类轴【不建议使用】。 + +## 开始使用 + +slider + +```js +const config = { + slider: { + x: {} + } +} +``` + +## 选项 + +### 基本 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------------------ | ------------------------------ | ---------------------- | ------ | +| values | 初始选区范围,位于 0 ~ 1 区间 | `[number, number]` | - | +| slidable | 是否允许拖动选取和手柄 | `boolean` | true | +| brushable | 是否启用刷选 | `boolean` | true | +| `style.`padding | 迷你图的内边距 | `number` \| `number[]` | 0 | +| `style.`selectionFill | 缩略轴选区填充色 | `string` | - | +| `style.`selectionFillOpacity | 缩略轴选区填充色透明度 | `number` | - | +| `style.`selectionStroke | 缩略轴选区描边色 | `string` | – | +| `style.`selectionStrokeOpacity | 缩略轴选区描边色透明度 | `number` | – | +| `style.`trackFill | 缩略轴滑轨填充色 | `string` | – | +| `style.`trackFillOpacity | 缩略轴滑轨填充色透明度 | `number` | – | +| `style.`trackStroke | 缩略轴滑轨描边色 | `string` | – | +| `style.`trackStrokeOpacity | 缩略轴滑轨描边色透明度 | `number` | – | + +### 拖动手柄 + +| 属性 | 描述 | 类型 | 默认值 | +| -------------------------------- | ------------------------ | ------------------------- | ------ | +| handle | 是否显示拖动手柄 | `boolean` | true | +| label | 是否显示拖动手柄文本 | `boolean` | true | +| formatter | 拖动手柄标签格式化 | `(value: number)=>string` | - | +| `style.`handleIconSize | 缩略轴手柄大小 | `number` | 10 | +| `style.`handleIconFill | 缩略轴手柄填充色 | `string` | - | +| `style.`handleIconFillOpacity | 缩略轴手柄填充色透明度 | `number` | - | +| `style.`handleIconStroke | 缩略轴手柄描边色 | `string` | - | +| `style.`handleIconStrokeOpacity | 缩略轴手柄描边色透明度 | `number` | - | +| `style.`handleLabelFontSize | 缩略轴手柄标签字体大小 | `number` | - | +| `style.`handleLabelFontWeight | 缩略轴手柄标签字体权重高 | `number` \| `string` | - | +| `style.`handleLabelStroke | 缩略轴手柄标签字体颜色 | `string` | - | +| `style.`handleLabelStrokeOpacity | 缩略轴手柄标签字体透明度 | `number` | - | + +### 迷你图 + + + +### 事件 + +| 属性 | 描述 | 类型 | +| ----------- | -------------------------------- | ------------- | +| valuechange | 选区发生变化时触发,通过事件监听 | `function(e)` | + +```ts +const config = { + slider: { + x: {} + }, + onReady: (chart) => { + const { canvas } = chart.getContext(); + const { document } = canvas; + document.querySelector('.slider').addEventListener('valuechange', (evt) => { + console.info(evt.detail); + }); + } +} +``` diff --git a/site/docs/options/plots/component/title.en.md b/site/docs/options/plots/component/title.en.md new file mode 100644 index 000000000..460a979b5 --- /dev/null +++ b/site/docs/options/plots/component/title.en.md @@ -0,0 +1,6 @@ +--- +title: title +order: 1 +--- + + diff --git a/site/docs/options/plots/component/title.zh.md b/site/docs/options/plots/component/title.zh.md new file mode 100644 index 000000000..617aa5e5f --- /dev/null +++ b/site/docs/options/plots/component/title.zh.md @@ -0,0 +1,42 @@ +--- +title: title +order: 1 +--- + +用于一句话概要说明图表要展示的数据,图表的标题是比较常用的组件,支持标题和副标题,以及他们的样式和位置设置。 + +## 开始使用 + +title + +```ts +const config = { + title: 'This is the title of chart.', +} +``` + +标题 title 的设置,最简单的设置方式,就是直接指定一个字符串作为标题,这个时候使用默认的样式和位置。当然也可以使用完整的配置项去做一些灵活的自定义。 + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ----------------------------- | ---------------------------- | ----------------------------- | ------ | +| size | 标题的高度 | `number` | `36` | +| title | 标题文本 | `string` | - | +| subtitle | 副标题文本 | `string` | - | +| `style.`align | 标题的对齐方式 | `left` \| `center` \| `right` | `left` | +| `style.`spacing | 主标题、副标题之间的上下间距 | `number` | `2` | +| `style.`titleFontSize | 标题文字大小 | `number` | - | +| `style.`titleFontFamily | 标题文字字体 | `string` | - | +| `style.`titleFontWeight | 标题字体粗细 | `number` | - | +| `style.`titleFill | 标题字体颜色 | `string` | +| `style.`titleFillOpacity | 标题字体颜色透明度 | `number` | +| `style.`titleStroke | 标题字体描边颜色 | `string` | - | +| `style.`titleStrokeOpacity | 标题字体描边颜色透明度 | `number` | - | +| `style.`subtitleFontSize | 标题文字大小 | `number` | - | +| `style.`subtitleFontFamily | 标题文字字体 | `string` | - | +| `style.`subtitleFontWeight | 标题字体粗细 | `number` | - | +| `style.`subtitleFill | 标题字体颜色 | `string` | +| `style.`subtitleFillOpacity | 标题字体颜色透明度 | `number` | +| `style.`subtitleStroke | 标题字体描边颜色 | `string` | - | +| `style.`subtitleStrokeOpacity | 标题字体描边颜色透明度 | `number` | - | diff --git a/site/docs/options/plots/component/tooltip.en.md b/site/docs/options/plots/component/tooltip.en.md new file mode 100644 index 000000000..998c400a7 --- /dev/null +++ b/site/docs/options/plots/component/tooltip.en.md @@ -0,0 +1,6 @@ +--- +title: tooltip +order: 1 +--- + + diff --git a/site/docs/options/plots/component/tooltip.zh.md b/site/docs/options/plots/component/tooltip.zh.md new file mode 100644 index 000000000..bade960f1 --- /dev/null +++ b/site/docs/options/plots/component/tooltip.zh.md @@ -0,0 +1,115 @@ +--- +title: tooltip +order: 1 +--- + +提示(Tooltip)可以提供关于数据点的额外信息,帮助用户更好地理解和解释可视化。 + +## 开始使用 + +built-in-tooltip + +```js +const config = { + tooltip: { + title: 'Date', + items: [{ channel: 'y' }], + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ----- | ------------------------------------- | ------------- | ------ | +| title | 标题,支持一段文本或 innerHTML 字符串 | `TooltipItem` | \- | +| items | 定义每一个提示项的配置 | `TooltipItem` | \- | + +```ts +type TooltipItem = + | string + | false + | { + name?: string; + color?: string; + channel?: string; + field?: string; + value?: string; + // 格式化 tooltip item 的值(支持 d3-format 对应的字符串) + valueFormatter?: string | ((d: any) => string); + }; +``` + +## 案例 + +### title + +```js +const config = { + tooltip: { + title: (d) => (d.value > 100 ? d.name : d.age), // transform + } +} +``` + +### item + +```js +// 单个字段 +const config = { + tooltip: { + field: 'a' + } +} + +// 单个通道 +const config = { + tooltip: { + channel: 'y' + } +} + +// 格式化 +const config = { + tooltip: { channel: 'y', valueFormatter: (d) => d.toFixed(1) } +} + +// d3-format 支持的字符 +// https://github.com/d3/d3-format +const config = { + tooltip: { channel: 'y', valueFormatter: '~s' } +} + +// 完整信息 +const config = { + tooltip: { name: 'name', color: 'red', value: 'color' } +} + +// 回调 +const config = { + tooltip: ( + d, // 每一个数据项 + index, // 索引 + data, // 完整数据 + column, // 通道 + ) => ({ + value: `${column.y.value[index]} - ${column.y1.value[index]}`, + }) +} + +// 多个 item +const config = { + tooltip: { items: [{ channel: 'y' }, { channel: 'x' }] } +} +``` + +### title + item + +```js +const config = { + tooltip: { + title: 'a', + items: [{ channel: 'x' }, { channel: 'y' }], + } +} +``` diff --git a/site/docs/options/plots/interaction/brushAxisHighlight.en.md b/site/docs/options/plots/interaction/brushAxisHighlight.en.md new file mode 100644 index 000000000..528fba16c --- /dev/null +++ b/site/docs/options/plots/interaction/brushAxisHighlight.en.md @@ -0,0 +1,5 @@ +--- +title: brushAxisHighlight +--- + + diff --git a/site/docs/options/plots/interaction/brushAxisHighlight.zh.md b/site/docs/options/plots/interaction/brushAxisHighlight.zh.md new file mode 100644 index 000000000..bd03f38f1 --- /dev/null +++ b/site/docs/options/plots/interaction/brushAxisHighlight.zh.md @@ -0,0 +1,56 @@ +--- +title: brushAxisHighlight +--- + +框选坐标轴高亮,常常用于平行坐标系。 + +## 开始使用 + +example + +```js +/** + * A recreation of this demo: https://observablehq.com/@d3/parallel-coordinates + */ +{ + interaction: { brushAxisHighlight: true, tooltip: false }, +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------- | -------------- | ------------------------------ | ------ | +| reverse | brush 是否反转 | `boolean` | false | +| `mask${StyleAttrs}` | brush 的样式 | `number \| string` | - | + +## 案例 + +### 获得数据 + +```js +let chart; +const config = { + onReady: (c) => chart = c +} + +chart.on('brushAxis:highlight', (event) => { + const { data, nativeEvent } = event; + if (nativeEvent) console.log('brushAxis:highlight', data); +}); + +chart.on('brushAxis:remove', (event) => { + const { data, nativeEvent } = event; + if (nativeEvent) console.log('brushAxis:remove', data); +}); +``` + +### 触发交互 + +```js +chart.emit('brushAxis:highlight', { + data: { selection: [[20, 30], undefined, [100, 300]] }, +}); + +chart.emit('brushAxis:remove', {}); +``` diff --git a/site/docs/options/plots/interaction/brushFilter.en.md b/site/docs/options/plots/interaction/brushFilter.en.md new file mode 100644 index 000000000..66e087dfa --- /dev/null +++ b/site/docs/options/plots/interaction/brushFilter.en.md @@ -0,0 +1,5 @@ +--- +title: brushFilter +--- + + diff --git a/site/docs/options/plots/interaction/brushFilter.zh.md b/site/docs/options/plots/interaction/brushFilter.zh.md new file mode 100644 index 000000000..13921070d --- /dev/null +++ b/site/docs/options/plots/interaction/brushFilter.zh.md @@ -0,0 +1,40 @@ +--- +title: brushFilter +--- + +框选筛选元素。 + +## 开始使用 + +example + +```ts +{ + interaction: { brushFilter: true }, +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------- | -------------- | ------------------------------ | ------ | +| reverse | brush 是否反转 | `boolean` | false | +| `mask${StyleAttrs}` | brush 的样式 | `number \| string` | - | + +## 案例 + +获得当前筛选数据,会在每次筛选和重置的时候触发以下事件: + +```js +let chart; +const config = { + onReady: (c) => chart = c +} +chart.on('brush:filter', (event) => { + const { selection } = event.data; + const [domainX, domainY] = selection; + const [minX, maxX] = domainX; + const [minY, maxY] = domainY; + console.log(minX, maxX, minY, maxY); +}); +``` diff --git a/site/docs/options/plots/interaction/brushHighlight.en.md b/site/docs/options/plots/interaction/brushHighlight.en.md new file mode 100644 index 000000000..ef9907b85 --- /dev/null +++ b/site/docs/options/plots/interaction/brushHighlight.en.md @@ -0,0 +1,5 @@ +--- +title: brushHighlight +--- + + diff --git a/site/docs/options/plots/interaction/brushHighlight.zh.md b/site/docs/options/plots/interaction/brushHighlight.zh.md new file mode 100644 index 000000000..d80f393a8 --- /dev/null +++ b/site/docs/options/plots/interaction/brushHighlight.zh.md @@ -0,0 +1,203 @@ +--- +title: brushHighlight +--- + +框选高亮元素。 + +## 开始使用 + +example + +```ts +{ + interaction: { brushHighlight: true }, +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------- | -------------- | ----------------- | ------ | +| reverse | brush 是否反转 | `boolean` | false | +| series | 是否是系列元素 | `boolean` | false | +| facet | 是否跨分面 | `boolean` | false | +| `mask${StyleAttrs}` | brush 的样式 | `number\| string` | - | + +# Brush + +支持八个方向的 resize 和自定义对应的 handle。 + +## 案例 + +### 设置样式 + +八个方向的 handle 的名字分别如下(按照东南西北命名),按照 `mask[handleName][styleAttribute]` 格式设置对应的属性,也可以通过 `maskHandleSize` 设置宽度。 + +custom-style + +```js +{ + state: { + inactive: { stroke: 'gray', opacity: 0.5 }, + }, + interaction: { + brushHighlight: { + maskHandleNFill: 'blue', + maskHandleEFill: 'red', + maskHandleSFill: 'green', + maskHandleWFill: 'yellow', + maskHandleNWFill: 'black', + maskHandleNEFill: 'steelblue', + maskHandleSEFill: 'pink', + maskHandleSWFill: 'orange', + }, + }, +} +``` + +### 自定义 Handle + +可以通过 `mask[handleName]Render` 指定 handle 的渲染函数,用于渲染自定义的 handle。其中该函数签名如下。 + +```js +function render( + g, // 挂载容器 + options, // 样式属性,通过 mask[handleName][styleAttribute] 设置 + document, // 画布 document,用于创建自图形 +) { + // 需要返回创建的图形 +} +``` + +下面是一个创建 path handle 的例子: + +```js +function renderPath(group, options, document) { + // 创建逻辑 + // 如果是第一次渲染,就创建并且挂在图形 + if (!group.handle) { + // 通过 document.createElement 去新建图形 + const path = document.createElement('path'); + group.handle = path; + group.appendChild(group.handle); + } + + // 更新逻辑 + const { handle } = group; + const { width, height, ...rest } = options; + if (width === undefined || height === undefined) return handle; + handle.attr(rest); + + // 返回对应的 shape + return handle; +} +``` + +custom-brush + +```js +function createPathRender(path) { + return (group, options, document) => { + if (!group.handle) { + const path = document.createElement('path'); + group.handle = path; + group.appendChild(group.handle); + } + const { handle } = group; + const { width, height, ...rest } = options; + if (width === undefined || height === undefined) return handle; + handle.style.d = path(width, height); + handle.attr(rest); + return handle; + }; +} + +// conifg +{ + state: { + inactive: { stroke: 'gray', opacity: 0.5 }, + }, + interaction: { + brushHighlight: { + maskHandleSize: 30, + maskHandleNRender: createPathRender( + (width, height) => + `M0,${height / 2}L${width / 2},${-height / 2}L${width},${ + height / 2 + },Z`, + ), + maskHandleERender: createPathRender( + (width, height) => + `M${width / 2},0L${(width * 3) / 2},${height / 2}L${ + width / 2 + },${height},Z`, + ), + maskHandleSRender: createPathRender( + (width, height) => + `M0,${height / 2}L${width / 2},${(height / 2) * 3}L${width},${ + height / 2 + },Z`, + ), + maskHandleWRender: createPathRender( + (width, height) => + `M${width / 2},0L${-width},${height / 2}L${width / 2},${height},Z`, + ), + maskHandleNWRender: createPathRender( + (width, height) => + `M0,0L${width},${height / 2}L${width / 2},${height},Z`, + ), + maskHandleNERender: createPathRender( + (width, height) => + `M0,${height / 2}L${width},0L${width / 2},${height},Z`, + ), + maskHandleSERender: createPathRender( + (width, height) => + `M${width / 2},0L${width},${height}L0,${height / 2},Z`, + ), + maskHandleSWRender: createPathRender( + (width, height) => + `M${width / 2},0L${width},${height / 2}L0,${height},Z`, + ), + maskHandleNFill: 'blue', + maskHandleEFill: 'red', + maskHandleSFill: 'green', + maskHandleWFill: 'yellow', + maskHandleNWFill: 'black', + maskHandleNEFill: 'steelblue', + maskHandleSEFill: 'pink', + maskHandleSWFill: 'orange', + }, + } +} +``` + +### 监听事件 + +支持以下的事件: + +- `brush:start` - 开始创建 brush 的时候触发 +- `brush:end` - brush 更新大小和位置完成时候触发 +- `brush:remove` - brush 移除的时候触发 +- `brush:highlight` - brush 改变大小和位置时触发 + +```js +let chart; +const config = { + onReady: (c) => chart = c +} +chart.on('brush:highlight', (e) => { + console.log(e.data.selection); + console.log(e.nativeEvent); +}); +``` + +### 触发交互 + +支持以下的事件: + +- `brush:highlight` - 高亮数据 +- `brush:remove` - 移除 brush + +```js +chart.emit('brush:remove'); +``` diff --git a/site/docs/options/plots/interaction/brushXFilter.en.md b/site/docs/options/plots/interaction/brushXFilter.en.md new file mode 100644 index 000000000..323e3a143 --- /dev/null +++ b/site/docs/options/plots/interaction/brushXFilter.en.md @@ -0,0 +1,5 @@ +--- +title: brushXFilter +--- + + diff --git a/site/docs/options/plots/interaction/brushXFilter.zh.md b/site/docs/options/plots/interaction/brushXFilter.zh.md new file mode 100644 index 000000000..ca0051650 --- /dev/null +++ b/site/docs/options/plots/interaction/brushXFilter.zh.md @@ -0,0 +1,27 @@ +--- +title: brushXFilter +--- + +x 方向框选筛选元素。 + +## 开始使用 + +example + +```ts +{ + state: { + 'inactive': { stroke: 'gray' } + }, + interaction: { + brushXFilter: true, + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------- | -------------- | ------------------------------ | ------ | +| reverse | brush 是否反转 | `boolean` | false | +| `mask${StyleAttrs}` | brush 的样式 | `number \| string` | - | diff --git a/site/docs/options/plots/interaction/brushXHighlight.en.md b/site/docs/options/plots/interaction/brushXHighlight.en.md new file mode 100644 index 000000000..f6cc6ad5c --- /dev/null +++ b/site/docs/options/plots/interaction/brushXHighlight.en.md @@ -0,0 +1,5 @@ +--- +title: brushXHighlight +--- + + diff --git a/site/docs/options/plots/interaction/brushXHighlight.zh.md b/site/docs/options/plots/interaction/brushXHighlight.zh.md new file mode 100644 index 000000000..a033976fe --- /dev/null +++ b/site/docs/options/plots/interaction/brushXHighlight.zh.md @@ -0,0 +1,32 @@ +--- +title: brushXHighlight +--- + +x 方向框选高亮元素。 + +## 开始使用 + +example + +```ts +{ + state: { + 'inactive': { stroke: 'gray' } + }, + interaction: { + brushXHighlight: { + maskFill: 'red', + maskOpacity: 0.5, + }, + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------- | -------------- | ----------------- | ------ | +| reverse | brush 是否反转 | `boolean` | false | +| series | 是否是系列元素 | `boolean` | false | +| facet | 是否跨分面 | `boolean` | false | +| `mask${StyleAttrs}` | brush 的样式 | `number\| string` | - | diff --git a/site/docs/options/plots/interaction/brushYFilter.en.md b/site/docs/options/plots/interaction/brushYFilter.en.md new file mode 100644 index 000000000..18838b919 --- /dev/null +++ b/site/docs/options/plots/interaction/brushYFilter.en.md @@ -0,0 +1,5 @@ +--- +title: brushYFilter +--- + + diff --git a/site/docs/options/plots/interaction/brushYFilter.zh.md b/site/docs/options/plots/interaction/brushYFilter.zh.md new file mode 100644 index 000000000..b0331c0a2 --- /dev/null +++ b/site/docs/options/plots/interaction/brushYFilter.zh.md @@ -0,0 +1,30 @@ +--- +title: brushYFilter +--- + +y 方向筛选高亮元素。 + +## 开始使用 + +example + +```ts +{ + state: { + inactive: { stroke: 'gray' } + }, + interaction: { + brushXHighlight: { + maskFill: 'red', + maskOpacity: 0.5, + }, + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------- | -------------- | ------------------------------ | ------ | +| reverse | brush 是否反转 | `boolean` | false | +| `mask${StyleAttrs}` | brush 的样式 | `number \| string` | - | diff --git a/site/docs/options/plots/interaction/brushYHighlight.zh.md b/site/docs/options/plots/interaction/brushYHighlight.zh.md new file mode 100644 index 000000000..65a42ad26 --- /dev/null +++ b/site/docs/options/plots/interaction/brushYHighlight.zh.md @@ -0,0 +1,29 @@ +--- +title: brushYHighlight +--- + +y 方向框选高亮元素。 + +## 开始使用 + +example + +```ts +{ + state: { + inactive: { stroke: 'gray' } + }, + interaction: { + brushYHighlight: true, + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------- | -------------- | ----------------- | ------ | +| reverse | brush 是否反转 | `boolean` | false | +| series | 是否是系列元素 | `boolean` | false | +| facet | 是否跨分面 | `boolean` | false | +| `mask${StyleAttrs}` | brush 的样式 | `number\| string` | - | diff --git a/site/docs/options/plots/interaction/chartIndex.en.md b/site/docs/options/plots/interaction/chartIndex.en.md new file mode 100644 index 000000000..e140e7852 --- /dev/null +++ b/site/docs/options/plots/interaction/chartIndex.en.md @@ -0,0 +1,5 @@ +--- +title: chartIndex +--- + + diff --git a/site/docs/options/plots/interaction/chartIndex.zh.md b/site/docs/options/plots/interaction/chartIndex.zh.md new file mode 100644 index 000000000..982fc46b0 --- /dev/null +++ b/site/docs/options/plots/interaction/chartIndex.zh.md @@ -0,0 +1,32 @@ +--- +title: chartIndex +--- + +查看折线图相对于某个时间点的相对趋势。 + +## 开始使用 + +example + +```ts +{ + interaction: { + chartIndex: { + ruleStroke: '#aaa', + labelDx: 5, + labelTextAlign: 'center', + labelStroke: '#fff', + labelLineWidth: 5, + labelFormatter: (d) => `${d.toLocaleDateString()}`, + } + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| -------------------- | ------------ | ------------------------------ | ------ | +| labelFormatter | 格式化日期 | `FormatterFunction` | - | +| `rule${StyleAttrs}` | 指示线的样式 | `number \| string` | - | +| `label${StyleAttrs}` | 文本的样式 | `number \| string` | - | diff --git a/site/docs/options/plots/interaction/elementHighlight.en.md b/site/docs/options/plots/interaction/elementHighlight.en.md new file mode 100644 index 000000000..465b9e399 --- /dev/null +++ b/site/docs/options/plots/interaction/elementHighlight.en.md @@ -0,0 +1,5 @@ +--- +title: elementHighlight +--- + + diff --git a/site/docs/options/plots/interaction/elementHighlight.zh.md b/site/docs/options/plots/interaction/elementHighlight.zh.md new file mode 100644 index 000000000..130dbeef7 --- /dev/null +++ b/site/docs/options/plots/interaction/elementHighlight.zh.md @@ -0,0 +1,59 @@ +--- +title: elementHighlight +--- + +高亮鼠标悬浮的元素。 + +## 开始使用 + +example + +```ts +{ + state: { + inactive: { opacity: 0.5 } + }, + interaction: { + elementHighlight: true + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------------- | -------------- | ------------ | ------ | +| background | 是否高亮背景 | `boolean` | false | +| offset | 主方向的偏移量 | `number` | 0 | +| `background${StyleAttrs}` | 背景的样式 | `StyleAttrs` | - | + +## 案例 + +### 触发事件 + +```js +let chart; +const config = { + onReady: (c) => chart = c +} + +chart.emit('element:highlight', { + data: { data: { population: 5038433 } }, +}); + +chart.emit('element:unhighlight', {}); +``` + +### 获得数据 + +```js +chart.on('element:highlight', (event) => { + const { data, nativeEvent } = event; + if (nativeEvent) console.log('element:highlight', data); +}); + +chart.on('element:unhighlight', (event) => { + const { nativeEvent } = event; + if (nativeEvent) console.log('reset'); +}); +``` diff --git a/site/docs/options/plots/interaction/elementHighlightByColor.en.md b/site/docs/options/plots/interaction/elementHighlightByColor.en.md new file mode 100644 index 000000000..8edcd8260 --- /dev/null +++ b/site/docs/options/plots/interaction/elementHighlightByColor.en.md @@ -0,0 +1,5 @@ +--- +title: elementHighlightByColor +--- + + diff --git a/site/docs/options/plots/interaction/elementHighlightByColor.zh.md b/site/docs/options/plots/interaction/elementHighlightByColor.zh.md new file mode 100644 index 000000000..7e2e260a1 --- /dev/null +++ b/site/docs/options/plots/interaction/elementHighlightByColor.zh.md @@ -0,0 +1,33 @@ +--- +title: elementHighlightByColor +--- + +高亮和鼠标悬浮的元素拥有相同 color 通道值的元素。 + +## 开始使用 + +example + +```ts +{ + state: { + inactive: { opacity: 0.5 }, + active: { fill: 'red', linkFillOpacity: 0.5 } + }, + interaction: { + elementHighlightByColor: { + link: true + } + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------------- | -------------- | ------------ | ------ | +| link | 是否展示连接线 | `boolean` | false | +| background | 是否高亮背景 | `boolean` | false | +| offset | 主方向的偏移量 | `number` | 0 | +| `link${StyleAttrs}` | 连接线样式 | `StyleAttrs` | - | +| `background${StyleAttrs}` | 背景的样式 | `StyleAttrs` | - | diff --git a/site/docs/options/plots/interaction/elementHighlightByX.en.md b/site/docs/options/plots/interaction/elementHighlightByX.en.md new file mode 100644 index 000000000..63f6b7397 --- /dev/null +++ b/site/docs/options/plots/interaction/elementHighlightByX.en.md @@ -0,0 +1,5 @@ +--- +title: elementHighlightByX +--- + + diff --git a/site/docs/options/plots/interaction/elementHighlightByX.zh.md b/site/docs/options/plots/interaction/elementHighlightByX.zh.md new file mode 100644 index 000000000..0095639e3 --- /dev/null +++ b/site/docs/options/plots/interaction/elementHighlightByX.zh.md @@ -0,0 +1,29 @@ +--- +title: elementHighlightByX +--- + +高亮和鼠标悬浮的元素拥有相同 x 通道值的元素。 + +## 开始使用 + +example + +```ts +{ + state: { + inactive: { opacity: 0.5 }, + active: { fill: 'red' } + }, + interaction: { + elementHighlightByX: true + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------------- | -------------- | ------------ | ------ | +| background | 是否高亮背景 | `boolean` | false | +| offset | 主方向的偏移量 | `number` | 0 | +| `background${StyleAttrs}` | 背景的样式 | `StyleAttrs` | - | diff --git a/site/docs/options/plots/interaction/elementSelect.en.md b/site/docs/options/plots/interaction/elementSelect.en.md new file mode 100644 index 000000000..fcf9c18e1 --- /dev/null +++ b/site/docs/options/plots/interaction/elementSelect.en.md @@ -0,0 +1,3 @@ +--- +title: elementSelect +--- \ No newline at end of file diff --git a/site/docs/options/plots/interaction/elementSelect.zh.md b/site/docs/options/plots/interaction/elementSelect.zh.md new file mode 100644 index 000000000..4be2a27e2 --- /dev/null +++ b/site/docs/options/plots/interaction/elementSelect.zh.md @@ -0,0 +1,60 @@ +--- +title: elementSelect +--- + +选择点击的元素。 + +## 开始使用 + +example + +```ts +{ + state: { + unselected: { opacity: 0.5 }, + selected: { fill: 'orange' } + }, + interaction: { + elementSelect: true + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------------- | -------------- | ------------ | ------ | +| background | 是否高亮背景 | `boolean` | false | +| offset | 主方向的偏移量 | `number` | 0 | +| `background${StyleAttrs}` | 背景的样式 | `StyleAttrs` | - | +| single | 是否单选 | `boolean` | false | + +## 案例 + +### 获得数据 + +```js +let chart; +const config = { + onReady: (c) => chart = c +} +chart.on('element:select', (event) => { + const { data, nativeEvent } = event; + if (nativeEvent) console.log('element:select', data); +}); + +chart.on('element:unselect', (event) => { + const { nativeEvent } = event; + if (nativeEvent) console.log('reset'); +}); +``` + +### 触发交互 + +```js +chart.emit('element:select', { + data: { data: [{ population: 5038433 }, { population: 3983091 }] }, +}); + +chart.emit('element:unselect', {}); +``` diff --git a/site/docs/options/plots/interaction/elementSelectByColor.en.md b/site/docs/options/plots/interaction/elementSelectByColor.en.md new file mode 100644 index 000000000..cdd43f537 --- /dev/null +++ b/site/docs/options/plots/interaction/elementSelectByColor.en.md @@ -0,0 +1,5 @@ +--- +title: elementSelectByColor +--- + + diff --git a/site/docs/options/plots/interaction/elementSelectByColor.zh.md b/site/docs/options/plots/interaction/elementSelectByColor.zh.md new file mode 100644 index 000000000..d79da8f07 --- /dev/null +++ b/site/docs/options/plots/interaction/elementSelectByColor.zh.md @@ -0,0 +1,34 @@ +--- +title: elementSelectByColor +--- + +选择和鼠标点击的元素拥有相同 color 通道值的元素。 + +## 开始使用 + +example + +```ts +{ + state: { + unselected: { opacity: 0.5 }, + selected: { fill: 'red', linkFillOpacity: 0.5 } + }, + interaction: { + elementSelectByColor: { + link: true + } + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------------- | -------------- | ------------ | ------ | +| link | 是否展示连接线 | `boolean` | false | +| background | 是否高亮背景 | `boolean` | false | +| offset | 主方向的偏移量 | `number` | 0 | +| `link${StyleAttrs}` | 连接线样式 | `StyleAttrs` | - | +| `background${StyleAttrs}` | 背景的样式 | `StyleAttrs` | - | +| link | 是否展示连接带 | `boolean` | false | diff --git a/site/docs/options/plots/interaction/elementSelectByX.en.md b/site/docs/options/plots/interaction/elementSelectByX.en.md new file mode 100644 index 000000000..e9dea0374 --- /dev/null +++ b/site/docs/options/plots/interaction/elementSelectByX.en.md @@ -0,0 +1,6 @@ +--- +title: elementSelectByX +--- + + + diff --git a/site/docs/options/plots/interaction/elementSelectByX.zh.md b/site/docs/options/plots/interaction/elementSelectByX.zh.md new file mode 100644 index 000000000..5b6f4d6a0 --- /dev/null +++ b/site/docs/options/plots/interaction/elementSelectByX.zh.md @@ -0,0 +1,32 @@ +--- +title: elementSelectByX +--- + +选择和鼠标点击的元素拥有相同 x 通道值的元素。 + +## 开始使用 + +example + +```ts +{ + state: { + unselected: { opacity: 0.5 }, + selected: { fill: 'red' } + }, + interaction: { + elementSelectByX: true + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------------- | -------------- | ------------ | ------ | +| link | 是否展示连接线 | `boolean` | false | +| background | 是否高亮背景 | `boolean` | false | +| offset | 主方向的偏移量 | `number` | 0 | +| `link${StyleAttrs}` | 连接线样式 | `StyleAttrs` | - | +| `background${StyleAttrs}` | 背景的样式 | `StyleAttrs` | - | +| single | 是否单选 | `boolean` | false | diff --git a/site/docs/options/plots/interaction/fisheye.en.md b/site/docs/options/plots/interaction/fisheye.en.md new file mode 100644 index 000000000..6bef19352 --- /dev/null +++ b/site/docs/options/plots/interaction/fisheye.en.md @@ -0,0 +1,5 @@ +--- +title: fisheye +--- + + diff --git a/site/docs/options/plots/interaction/fisheye.zh.md b/site/docs/options/plots/interaction/fisheye.zh.md new file mode 100644 index 000000000..1be0b27f9 --- /dev/null +++ b/site/docs/options/plots/interaction/fisheye.zh.md @@ -0,0 +1,25 @@ +--- +title: fisheye +--- + +鱼眼交互,用于聚焦于局部数据。 + +## 开始使用 + +example + +```ts +{ + interaction: { + fisheye: true + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| -------- | -------------------------------- | --------- | ------ | +| wait | 鱼眼更新的时间间隔,单位为毫秒 | `number` | 30 | +| leading | 是否在时间间隔开始的时候更新鱼眼 | `boolean` | true | +| trailing | 是否在时间间隔结束的时候更新鱼眼 | `boolean` | false | diff --git a/site/docs/options/plots/interaction/legendFilter.en.md b/site/docs/options/plots/interaction/legendFilter.en.md new file mode 100644 index 000000000..87d22b53d --- /dev/null +++ b/site/docs/options/plots/interaction/legendFilter.en.md @@ -0,0 +1,5 @@ +--- +title: legendFilter +--- + + diff --git a/site/docs/options/plots/interaction/legendFilter.zh.md b/site/docs/options/plots/interaction/legendFilter.zh.md new file mode 100644 index 000000000..06809bb41 --- /dev/null +++ b/site/docs/options/plots/interaction/legendFilter.zh.md @@ -0,0 +1,49 @@ +--- +title: legendFilter +--- + +图例筛选元素。 + +## 开始使用 + +example + +```ts +{ + interaction: { + legendFilter: true + } +} +``` + +## 案例 + +### 触发交互 + +```js +let chart; +const config = { + onReady: (c) => chart = c +} +chart.emit('legend:filter', { + data: { channel: 'color', values: ['Sports', 'Strategy'] }, +}); + +chart.emit('legend:reset', {}); +``` + +### 获得数据 + +```js +chart.on('legend:filter', (e) => { + const { nativeEvent, data } = e; + if (!nativeEvent) return; + console.log(data); +}); + +chart.on('legend:reset', (e) => { + const { nativeEvent } = e; + if (!nativeEvent) return; + console.log('end'); +}); +``` diff --git a/site/docs/options/plots/interaction/legendHighlight.en.md b/site/docs/options/plots/interaction/legendHighlight.en.md new file mode 100644 index 000000000..5507bcea7 --- /dev/null +++ b/site/docs/options/plots/interaction/legendHighlight.en.md @@ -0,0 +1,5 @@ +--- +title: legendHighlight +--- + + diff --git a/site/docs/options/plots/interaction/legendHighlight.zh.md b/site/docs/options/plots/interaction/legendHighlight.zh.md new file mode 100644 index 000000000..cff0a097e --- /dev/null +++ b/site/docs/options/plots/interaction/legendHighlight.zh.md @@ -0,0 +1,52 @@ +--- +title: legendHighlight +--- + +图例高亮元素。 + +## 开始使用 + +example + +```ts +{ + state: { + inactive: { opacity: 0.5 }, + }, + interaction: { + legendHighlight: true + } +} +``` + +## 案例 + +### 获得数据 + +```js +let chart; +const config = { + onReady: (c) => chart = c +} +chart.on('legend:highlight', (e) => { + const { nativeEvent, data } = e; + if (!nativeEvent) return; + console.log(data); +}); + +chart.on('legend:unhighlight', (e) => { + const { nativeEvent } = e; + if (!nativeEvent) return; + console.log('unhighlight'); +}); +``` + +### 触发交互 + +```js +chart.emit('legend:highlight', { + data: { channel: 'color', value: 'Increase' }, +}); + +chart.emit('legend:unhighlight', {}); +``` diff --git a/site/docs/options/plots/interaction/poptip.en.md b/site/docs/options/plots/interaction/poptip.en.md new file mode 100644 index 000000000..5bc451ac1 --- /dev/null +++ b/site/docs/options/plots/interaction/poptip.en.md @@ -0,0 +1,5 @@ +--- +title: poptip +--- + + diff --git a/site/docs/options/plots/interaction/poptip.zh.md b/site/docs/options/plots/interaction/poptip.zh.md new file mode 100644 index 000000000..27a528c78 --- /dev/null +++ b/site/docs/options/plots/interaction/poptip.zh.md @@ -0,0 +1,25 @@ +--- +title: poptip +--- + +提示缩略文本。 + +## 开始使用 + +example + +```ts +{ + interaction: { + poptip: true + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------ | ------------ | ------------ | ------ | +| offsetX | x 方向偏移量 | `number` | 8 | +| offsetY | y 方向偏移量 | `number` | 8 | +| `tip${StyleAttrs}` | poptip 样式 | `StyleAttrs` | - | diff --git a/site/docs/options/plots/interaction/scrollbarFilter.en.md b/site/docs/options/plots/interaction/scrollbarFilter.en.md new file mode 100644 index 000000000..de358bbab --- /dev/null +++ b/site/docs/options/plots/interaction/scrollbarFilter.en.md @@ -0,0 +1,5 @@ +--- +title: scrollbarFilter +--- + + diff --git a/site/docs/options/plots/interaction/scrollbarFilter.zh.md b/site/docs/options/plots/interaction/scrollbarFilter.zh.md new file mode 100644 index 000000000..627d14b70 --- /dev/null +++ b/site/docs/options/plots/interaction/scrollbarFilter.zh.md @@ -0,0 +1,46 @@ +--- +title: scrollbarFilter +order: 1 +--- + +滚动条筛选是一个默认交互,当设置了 scrollbar 默认就会有这个交互。关于 scrollbar 组件的配置,见文档 [component/scrollbar](/spec/component/scrollbar)。 + +## 开始使用 + +```js +{ + scrollbar: { y: { ratio: 0.3 }, x: { ratio: 0.5 } }, +} +``` + +## 案例 + +### 触发事件 + +```js +let chart; +const config = { + onReady: (c) => chart = c +} +chart.emit('scrollbarX:filter', { + data: { selection: [['2001-03'], undefined] }, +}); + +chart.emit('scrollbarY:filter', { + data: { selection: [undefined, [50, 550]] }, +}); +``` + +### 监听数据 + +```js +chart.on('scrollbarX:filter', (event) => { + const { data, nativeEvent } = event; + if (nativeEvent) console.log('scrollbarX:filter', data.selection); +}); + +chart.on('scrollbarY:filter', (event) => { + const { data, nativeEvent } = event; + if (nativeEvent) console.log('scrollbarY:filter', data.selection); +}); +``` diff --git a/site/docs/options/plots/interaction/sliderFilter.en.md b/site/docs/options/plots/interaction/sliderFilter.en.md new file mode 100644 index 000000000..f99081ee3 --- /dev/null +++ b/site/docs/options/plots/interaction/sliderFilter.en.md @@ -0,0 +1,5 @@ +--- +title: sliderFilter +--- + + diff --git a/site/docs/options/plots/interaction/sliderFilter.zh.md b/site/docs/options/plots/interaction/sliderFilter.zh.md new file mode 100644 index 000000000..c43802f59 --- /dev/null +++ b/site/docs/options/plots/interaction/sliderFilter.zh.md @@ -0,0 +1,48 @@ +--- +title: sliderFilter +order: 1 +--- + +缩略轴筛选是一个默认交互,当设置了 slider 默认就会有这个交互。 + +## 开始使用 + +slider + +```js +{ + slider: { y: true, x: true }, +} +``` + +## 案例 + +### 触发事件 + +```js +let chart; +const config = { + onReady: (c) => chart = c +} +chart.emit('sliderX:filter', { + data: { selection: [['2001-01', '2001-03'], undefined] }, +}); + +chart.emit('sliderY:filter', { + data: { selection: [undefined, [50, 550]] }, +}); +``` + +### 监听数据 + +```js +chart.on('sliderX:filter', (event) => { + const { data, nativeEvent } = event; + if (nativeEvent) console.log('sliderX:filter', data.selection); +}); + +chart.on('sliderY:filter', (event) => { + const { data, nativeEvent } = event; + if (nativeEvent) console.log('sliderY:filter', data.selection); +}); +``` diff --git a/site/docs/options/plots/interaction/tooltip.en.md b/site/docs/options/plots/interaction/tooltip.en.md new file mode 100644 index 000000000..2a53473be --- /dev/null +++ b/site/docs/options/plots/interaction/tooltip.en.md @@ -0,0 +1,5 @@ +--- +title: tooltip +--- + + diff --git a/site/docs/options/plots/interaction/tooltip.zh.md b/site/docs/options/plots/interaction/tooltip.zh.md new file mode 100644 index 000000000..57856b6d6 --- /dev/null +++ b/site/docs/options/plots/interaction/tooltip.zh.md @@ -0,0 +1,130 @@ +--- +title: tooltip +--- + +展示提示信息。 + +## 开始使用 + +example + +```ts +{ + interaction: { tooltip: true }, +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------------- | ----------------------------------------------------------------- | ------------------------------------------- | --------------------- | +| wait | 提示信息更新的时间间隔,单位为毫秒 | `number` | 50 | +| leading | 是否在时间间隔开始的时候更新提示信息 | `boolean` | true | +| trailing | 是否在时间间隔结束的时候更新提示信息 | `boolean` | false | +| shared | 相同 x 的元素是否共享 tooltip | `boolean` | false | +| series | 是否是系列元素的 tooltip | `boolean` | - | +| body | 是否展示 tooltip | `boolean` | true | +| marker | 是否展示 marker | `boolean` | true | +| groupName | 是否使用 groupName | `boolean` | true | +| position | tooltip 位置 | `TooltipPosition` | - | +| mount | tooltip 渲染的 dom 节点 | `string` \| `HTMLElement` | 图表容器 | +| bounding | tooltip 渲染的限制区域,超出会自动调整位置 | `BBox` | 图表区域大小 | +| crosshairs | 是否暂时指示线 | `boolean` | - | +| `crosshairs${StyleAttrs}` | 指示线的样式 | `number \| string` | - | +| `marker${StyleAttrs}` | marker 的样式 | `number \| string` | - | +| render | 自定义 tooltip 渲染函数 | `(event, options) => HTMLElement \| string` | - | +| sort | item 排序器 | `(d: TooltipItemValue) => any` | - | +| filter | item 筛选器 | `(d: TooltipItemValue) => any` | - | +| disableNative | 是否响应原生事件(pointerover 和 pointerout) | true | `boolean` | +| css | 设置容器的 [css](/examples/component/tooltip/#tooltip-style) 样式 | - | `Record` | + +```ts +type TooltipPosition = + | 'top' + | 'bottom' + | 'left' + | 'right' + | 'top-left' + | 'top-right' + | 'bottom-left' + | 'bottom-right'; + +type BBox = { x: number; y: number; width: number; height: number }; +``` + +## 案例 + +### 自定义 Tooltip + +custom-tooltip + +```tsx +{ + interaction: { + tooltip: { + render: (event, { title, items }) =>
Your custom render content here.
, + }, + }, +} +``` + +### 获得提示数据 + +```js +let chart; +const config = { + onReady: (c) => chart = c +} +chart.on('tooltip:show', (event) => { + console.log(event.data.data); +}); + +chart.on('tooltip:hide', () => { + console.log('hide'); +}); +``` + +### 手动控制展示/隐藏 + +对于 Interval、Point 等非系列 Mark,控制展示的方式如下: + +```js +// 条形图、点图等 +{ + onReady: chart => { + chart.emit('tooltip:show', { + data: { + // 会找从原始数据里面找到匹配的数据 + data: { genre: 'Sports' }, + }, + }) + } +} +``` + +对于 Line、Area 等系列 Mark,控制展示的方式如下: + +```js +{ + onReady: chart => { + chart.emit('tooltip:show', { + data: { + data: { x: new Date('2010-11-16') }, + }, + }) + } +} +``` + +隐藏的方式如下: + +```js +chart.emit('tooltip:hide'); +``` + +### 开始/禁止交互 + +```js +chart.emit('tooltip:disable'); // 禁用 tooltip +chart.emit('tooltip:enable'); // 启用交互 +``` diff --git a/site/docs/options/plots/label/contrastReverse.en.md b/site/docs/options/plots/label/contrastReverse.en.md new file mode 100644 index 000000000..a319e3f5f --- /dev/null +++ b/site/docs/options/plots/label/contrastReverse.en.md @@ -0,0 +1,6 @@ +--- +title: contrastReverse +order: 1 +--- + + diff --git a/site/docs/options/plots/label/contrastReverse.zh.md b/site/docs/options/plots/label/contrastReverse.zh.md new file mode 100644 index 000000000..6bef7bc9f --- /dev/null +++ b/site/docs/options/plots/label/contrastReverse.zh.md @@ -0,0 +1,31 @@ +--- +title: contrastReverse +order: 1 +--- + +`contrastReverse` 标签颜色在图形背景上[颜色对比度](https://webaim.org/resources/contrastchecker/)低的情况下,从指定色板选择一个对比度最优的颜色。 + +## 开始使用 + +contrastReverse + +```ts +const config = { + label: { + text: 'frequency', + position: 'inside', + transform: [ + { + type: 'contrastReverse', + }, + ], + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----------------| ---------------------| +| threshold | 标签和背景图形的颜色对比度阈值,超过阈值才会推荐颜色提升对比度 | `Type` | `4.5` | +| palette | 对比度提升算法中,备选的颜色色板 | `Type` | `['#000', '#fff']` | diff --git a/site/docs/options/plots/label/overflowHide.en.md b/site/docs/options/plots/label/overflowHide.en.md new file mode 100644 index 000000000..c7a5a5352 --- /dev/null +++ b/site/docs/options/plots/label/overflowHide.en.md @@ -0,0 +1,6 @@ +--- +title: overflowHide +order: 1 +--- + + diff --git a/site/docs/options/plots/label/overflowHide.zh.md b/site/docs/options/plots/label/overflowHide.zh.md new file mode 100644 index 000000000..241f8b769 --- /dev/null +++ b/site/docs/options/plots/label/overflowHide.zh.md @@ -0,0 +1,28 @@ +--- +title: overflowHide +order: 1 +--- + +`overflowHide` 对于标签在图形上放置不下的时候,隐藏标签。 + +## 开始使用 + +overflowHide + +```ts +const config = { + label: { + text: 'frequency', + position: 'inside', + transform: [ + { + type: 'overflowHide', + }, + ], + } +} +``` + +## 选项 + +暂无。 diff --git a/site/docs/options/plots/label/overlapDodgeY.en.md b/site/docs/options/plots/label/overlapDodgeY.en.md new file mode 100644 index 000000000..0632071eb --- /dev/null +++ b/site/docs/options/plots/label/overlapDodgeY.en.md @@ -0,0 +1,6 @@ +--- +title: overlapDodgeY +order: 1 +--- + + diff --git a/site/docs/options/plots/label/overlapDodgeY.zh.md b/site/docs/options/plots/label/overlapDodgeY.zh.md new file mode 100644 index 000000000..29f566c91 --- /dev/null +++ b/site/docs/options/plots/label/overlapDodgeY.zh.md @@ -0,0 +1,31 @@ +--- +title: overlapDodgeY +order: 1 +--- + +`overlapDodgeY` 位置碰撞的标签在 y 方向上进行调整,防止标签重叠。 + +## 开始使用 + +overlapDodgeY + +```ts +const config = { + label: { + text: 'frequency', + transform: [ + { + type: 'overlapDodgeY', + }, + ], + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| --------------| ----------------------------------------------------------- | -----------------| ---------------------| +| maxIterations | 位置调整的最大迭代次数。 | `number` | `10` | +| padding | 期望调整之后,标签和标签之间的间距 | `number` | `1` | +| maxError | 最大误差,指实际间距和期望间距 `padding` 之间的误差 | `number` | `0.1` | diff --git a/site/docs/options/plots/label/overlapHide.en.md b/site/docs/options/plots/label/overlapHide.en.md new file mode 100644 index 000000000..f540e014c --- /dev/null +++ b/site/docs/options/plots/label/overlapHide.en.md @@ -0,0 +1,6 @@ +--- +title: overlapHide +order: 1 +--- + + diff --git a/site/docs/options/plots/label/overlapHide.zh.md b/site/docs/options/plots/label/overlapHide.zh.md new file mode 100644 index 000000000..019e5ccbe --- /dev/null +++ b/site/docs/options/plots/label/overlapHide.zh.md @@ -0,0 +1,29 @@ +--- +title: overlapHide +order: 1 +--- + +`overlapHide` 对位置碰撞的标签进行隐藏。算法逻辑是碰撞的两个标签,保留前一个,隐藏后一个。 + +## 开始使用 + +overlapHide + +```ts +const config = { + label: { + text: 'frequency', + transform: [ + { + type: 'overlapHide', + }, + ], + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| --------------| ----------------------------------------------------------- | --------------------| ------------------| +| priority | 标签排序的优先级,通过设置一个排序比较器,实现优先级 | `(a, b) => number` | - | diff --git a/site/docs/options/plots/label/overview.en.md b/site/docs/options/plots/label/overview.en.md new file mode 100644 index 000000000..93862b4ce --- /dev/null +++ b/site/docs/options/plots/label/overview.en.md @@ -0,0 +1,6 @@ +--- +title: Overview +order: 1 +--- + + diff --git a/site/docs/options/plots/label/overview.zh.md b/site/docs/options/plots/label/overview.zh.md new file mode 100644 index 000000000..bf92f1930 --- /dev/null +++ b/site/docs/options/plots/label/overview.zh.md @@ -0,0 +1,113 @@ +--- +title: 概览 +order: 1 +--- + +Label 是将图形的一些数据信息,比如值,名称等映射到图形的文本上的方法。使用方式如下: + + +## 开始使用 + +label + +```ts +const config = { + label: { + text: 'people', + position: 'outside', + transform: [{ type: 'overlapDodgeY' }], + } +} +``` + +## 选项(options) + +Label 继承 G Text 所有属性样式配置,此外还有 `position`, `selector`, `connector`, `background` 和 `transform` 等更多配置。 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | --------- | +| fontSize | 文字大小 | `number` \| `Function` | - | +| fontFamily | 文字字体 | `string` \| `Function` | - | +| fontWeight | 字体粗细 | `number` \| `Function` | - | +| lineHeight | 文字的行高 | `number` \| `Function` | - | +| textAlign | 设置文本内容的当前对齐方式, 支持的属性:`center` \| `end` \| `left` \| `right` \| `start`,默认值为`start` | `string` \| `Function` | - | +| textBaseline | 设置在绘制文本时使用的当前文本基线, 支持的属性:`top` \| `middle` \| `bottom` \| `alphabetic` \| `hanging`。默认值为`bottom` | `string` \| `Function` | - | +| fill | 图形的填充色 | `string` \| `Function` | - | +| fillOpacity | 图形的填充透明度 | `number` \| `Function` | - | +| stroke | 图形的描边 | `string` \| `Function` | - | +| strokeOpacity | 描边透明度 | `number` \| `Function` | - | +| lineWidth | 图形描边的宽度 | `number` \| `Function` | - | +| lineDash | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` \| `Function<[number, number]>` | - | +| opacity | 图形的整体透明度 | `number` \| `Function` | - | +| shadowColor | 图形阴影颜色 | `string` \| `Function` | - | +| shadowBlur | 图形阴影的高斯模糊系数 | `number` \| `Function` | - | +| shadowOffsetX | 设置阴影距图形的水平距离 | `number` \| `Function` | - | +| shadowOffsetY | 设置阴影距图形的垂直距离 | `number` \| `Function` | - | +| cursor | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | `string` \| `Function` | 'default' | +| position | 标签位置配置 | `string` | - | +| selector | 标签选择器。mark 通过指定的通道分组,通过指定选择器可以针对序列进行过滤索引,从序列中提取单个或多个值。分组的默认通道是系列。 | `string\|function` | - | +| connector | 是否展示文本和目标点之间的连接线,默认不展示 | `boolean` | - | +| background | 是否展示文本背景框,默认不展示 | `boolean` | - | +| transform | 标签转换,主要用于调整标签 `(x,y)` 位置,标签偏移、对齐等属性以实现想要的标签效果,内置多种标签布局,同时也支持回调的方式处理 | `array\|function` | - | +| formatter | 标签文本格式化 | `type Formatter = (text:string, datum: Datum, index:number, data: Data) => string` | - | + +标签**连接线样式**配置,格式为: `connector${style}`, 如: `connectorStroke` 代表连接线描边色。 + +| 参数 | 说明 | 类型 | 默认值 | +| ------------------- | ------------------------------------------------ | -------- | ------ | +| connectorStroke | 连接线描边色 | `string` | - | +| connectorLineWidth | 连接线描边线宽 | `number` | - | +| `connector${style}` | 更多连接线样式配置,参考 `PathStyleProps` 属性值 | - | - | + +标签**文本背景框样式**配置,格式为: `background${style}`, 如: `backgroundFill` 代表背景框填充色。 + +| 参数 | 说明 | 类型 | 默认值 | +| -------------------- | ------------------------------------------------ | ---------- | ------ | +| backgroundFill | 背景框填充色 | `string` | - | +| backgroundRadius | 背景框圆角半径 | `number` | - | +| backgroundPadding | 背景框内间距 | `number[]` | - | +| `background${style}` | 更多背景框样式配置,参考 `RectStyleProps` 属性值 | - | - | + +数据标签支持使用 HTML 自定义标签,具体配置为: + +| 参数 | 说明 | 类型 | 默认值 | +| -------------------- | ------------------------------------------------ | ---------- | ------ | +| render | 返回 HTML string 或者 HTMElement,使用 HTML 自定义复杂标签 | `RenderFunc` | - | + +```ts +type RenderFunc = (text: string, datum: object, index: number) => String | HTMLElement; +``` + +## FAQ + +### 支持哪些 position? + +在笛卡尔坐标系下,支持 9 种位置:`'top'`, `'left'`, `'right'`, `'bottom'`, `'top-left'`, `'top-right'`, `'bottom-left'`, `'bottom-right'`, `'inside'`。非笛卡尔坐标系下,支持 `'outside'`, `'inside'` 两种。 + +此外,针对面积图提供特殊 `area`,见 [面积图特殊标签](/zh/examples/general/area/#label)。针对 radial 类型的图标,增加了 `spider`、`surround` 两种类型。 + +| position | 用途 | 使用前 | 使用后 | +| ---------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `spider` | 调整标签沿坐标轴边沿两端对齐,适用于 polar 坐标系 | ![without-spider](https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*zadTTJI2nOEAAAAAAAAAAAAADmJ7AQ/original) | ![spider](https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*gC20SLxWVicAAAAAAAAAAAAADmJ7AQ/original) | +| `surround` | 调整标签环形环绕做坐标系,适用于 polar 坐标系下的玫瑰图 | ![without-surround](https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Cx8zT7vT5bUAAAAAAAAAAAAADmJ7AQ/original) | ![surround](https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*lRJqTLldgRYAAAAAAAAAAAAADmJ7AQ/original) | +| `area` | 将面积图的标签显示在面积区域中心,并设置一定的旋转角度 | | ![area](https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ZIamS4KwErEAAAAAAAAAAAAADmJ7AQ/original) | + +### selector 如何使用? + +selector 选择器可以对系列数据进行过滤索引。 + +通常适用于折线图、面积图等一个几何图形会对应一组数据的 mark + +内置选择器有:`'last'`, `'first'`,同时也支持 `function` 回调的方式自定义,如下: + +```ts +{ + selector: (data) => { + if (data.length) { + // 对于每个系列的数据,只保留索引等于 2 的标签 + return data.filter((d, index) => index === 2); + } + return data; + }; +} +``` diff --git a/site/docs/options/plots/overview.en.md b/site/docs/options/plots/overview.en.md new file mode 100644 index 000000000..f8dcceba6 --- /dev/null +++ b/site/docs/options/plots/overview.en.md @@ -0,0 +1,6 @@ +--- +title: Overview +order: 1 +--- + + diff --git a/site/docs/options/plots/overview.zh.md b/site/docs/options/plots/overview.zh.md new file mode 100644 index 000000000..ddebf20ae --- /dev/null +++ b/site/docs/options/plots/overview.zh.md @@ -0,0 +1,235 @@ +--- +title: 概览 +order: 1 +--- + +### 图表容器 + +#### width + +**optional** *number* *default:* `400` + +设置图表宽度。 + +#### height + +**optional** *number* *default:* `400` + +设置图表高度。 + +#### autoFit + +**optional** *boolean* *default:* `true` + +图表是否自适应容器宽高。当 `autoFit` 设置为 true 时,`width` 和 `height` 的设置将失效。 + + +#### renderer + +**optional** *string* *default:* `canvas` + +设置图表渲染方式为 `canvas` 或 `svg`。 + + +### 视图模型 + +G2 中的视图模型定义了一个视图的划分方式,划分得到的不同区域会绘制不同的东西,也通过不同的选项去设置。现在可以简单的把视图理解为一个图表。G2 的视图模型如下: + + + +- **视图区域(View Area)**:上图中蓝色 + 橙色 + 红色 + 青色部分,其中蓝色部分被称为**外边距区域**,主要用于固定组件(坐标轴、图例等)到边界的距离。 +- **绘制区域(Plot Area)**:上图中橙色 + 红色 + 青色部分,橙色部分被称为**内边距区域**,该区域用于绘制组件。 +- **主区域(Main Area)**:上图中红色 + 青色部分,其中红色部分被称为**呼吸区域**,用于制造组件和标记(图形元素)的间距,从而防止重叠,对于散点图尤其有用。 +- **内容区域(Content Area)**:上图中青色部分,主要用于绘制标记(图形元素)。 + +可以通过如下的配置设置各个区域的大小: + +- **margin** - 设置外边距四个方向的值,优先级别比分别设置低 +- **marginLeft** - 设置左外边距 +- **marginTop** - 设置上外边距 +- **marginRight** - 设置右外边距值 +- **marginBottom** - 设置下外边距值 +- **padding** - 设置内边距四个方向的值,优先级别比分别设置低 +- **paddingLeft** - 设置左内边距 +- **paddingTop** - 设置上内边距 +- **paddingRight** - 设置右内边距 +- **paddingBottom** - 设置下内边距 +- **inset** - 设置呼吸区域四个方向的值,优先级别比分别设置低 +- **insetLeft** - 设置左呼吸区域 +- **insetTop** - 设置上呼吸区域 +- **insetRight** - 设置右呼吸区域 +- **insetBottom** - 设置下呼吸区域 + +其中内容区域的大小由以下的公式得到: + +```js +const contentWidth = + width - + paddingLeft - + paddingRight - + marginLeft - + marginRight - + insetLeft - + insetRight; + +const contentHeight = + height - + paddingTop - + paddingBottom - + marginTop - + marginBottom - + insetTop - + insetBottom; +``` + +### 数据映射 + +#### data + +**required** *array object* + +设置图表数据源。数据源为对象集合,例如:`[{ time: '1991',value: 20 }, { time: '1992',value: 20 }]`。 + +#### xField + +**required** *string* + +图形在 x 方向对应的数据字段名,一般是横向的坐标轴对应的字段。比如:要看不同班级的人数情况,那么班级字段就是对应的 xField。 + +#### yField + +**required** *string* + +图形在 y 方向对应的数据字段名,一般是纵向的坐标轴对应的字段。比如:要看不同班级的人数情况,那么人数字段就是对应的 yField。 + + +#### seriesField + +**optional** *string* + +分组字段。比如:我们需要分析不同`省份`的交易额趋势,那么`省份字段`就是分组字段。 + + +### 图形样式 + +#### shapeField + +**optional** *string* + +指定 line 是否平滑,点图形状等 + +#### colorField + +**optional** *string* + +指定颜色通道字段 + + +#### sizeField + +**optional** *string* + +指定尺寸通道字段 + +#### stack + +**optional** *boolean | StackYTransform* + +是否堆积 + +```ts +type StackYTransform = { + groupBy?: string | string[]; + reverse?: boolean; + orderBy?: TransformOrder; + y?: 'y' | 'y1'; + y1?: 'y' | 'y1'; + series?: boolean; +}; +``` + +#### normalize + +**optional** *boolean | NormalizeYTransform* + +数值归一化 + +```ts +type NormalizeYTransform = { + series?: boolean; + groupBy?: string | string[]; + basis?: 'deviation' | 'first' | 'last' | 'max' | 'mean' | 'median' | 'min' | 'sum'; +}; +``` + +#### sort + +**optional** *boolean | SortByTransform* + +排序 + +```ts +type SortByTransform = { + /** type: [field, order]; order: true => ascend, false => descend */ + fields?: (string | [string, boolean?])[]; +}; +``` + +#### group + +**optional** *boolean | DodgeXTransform* + +分组 + +```ts +type DodgeXTransform = { + groupBy?: string | string[]; + reverse?: boolean; + orderBy?: TransformOrder; + padding?: number; +}; +``` + +#### percent + +**optional** *boolean* *default:* `true` + +是否百分比面积图,百分比时默认开启 isStack。 + + + +#### line + +**optional** *Line* + +线条,一般用于面积图中添加线条 + +#### point + +**optional** *Point* + +点图形样式,一般用于 Line 中添加对应 Mark + + + +### 状态 + +**可选** *object* + +设置 Mark 对应状态的样式,常配合 Interaction 一起使用,有:`'default' | 'active' | 'inactive' | 'selected' | 'unselected'` 等状态。 + +示例: + +```ts +{ + state: { + inactive: { opacity: 0.5 }, + active: { fill: 'red', linkFillOpacity: 0.5 } + }, + interaction: { + elementHighlightByColor: { + link: true + } + } +} +``` diff --git a/site/docs/options/plots/palette.en.md b/site/docs/options/plots/palette.en.md new file mode 100644 index 000000000..ed2e4f1b0 --- /dev/null +++ b/site/docs/options/plots/palette.en.md @@ -0,0 +1,6 @@ +--- +title: Palette +order: 15 +--- + + diff --git a/site/docs/options/plots/palette.zh.md b/site/docs/options/plots/palette.zh.md new file mode 100644 index 000000000..c3c6b6345 --- /dev/null +++ b/site/docs/options/plots/palette.zh.md @@ -0,0 +1,320 @@ +--- +title: 色板 - Palette +order: 15 +--- + +G2 提供了一些内置的色板,可以直接使用,并支持 [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic)的色板。 + +## 开始使用 + +color scale palette + +```js +{ + scale: { color: { palette: "tableau10" } }, +} +``` + +## 离散色板 + +### accent + +
+ +### blues + +
+ +### brBG + +
+ +### buGn + +
+ +### buPu + +
+ +### category10 + +
+ +### dark2 + +
+ +### gnBu + +
+ +### greens + +
+ +### greys + +
+ +### oranges + +
+ +### orRd + +
+ +### paired + +
+ +### pastel1 + +
+ +### pastel2 + +
+ +### piYG + +
+ +### pRGn + +
+ +### puBu + +
+ +### puBuGn + +
+ +### puOr + +
+ +### puRd + +
+ +### purples + +
+ +### rdBu + +
+ +### rdGy + +
+ +### rdPu + +
+ +### rdYlBu + +
+ +### rdYlGn + +
+ +### reds + +
+ +### set1 + +
+ +### set2 + +
+ +### set3 + +
+ +### spectral + +
+ +### tableau10 + +
+ +### ylGn + +
+ +### ylGnBu + +
+ +### ylOrBr + +
+ +### ylOrRd + +
+ +## 连续色板 + +### blues + +
+ +### brBG + +
+ +### buGn + +
+ +### buPu + +
+ +### cividis + +
+ +### cool + +
+ +### cubehelixDefault + +
+ +### gnBu + +
+ +### greens + +
+ +### greys + +
+ +### inferno + +
+ +### magma + +
+ +### oranges + +
+ +### orRd + +
+ +### piYG + +
+ +### plasma + +
+ +### pRGn + +
+ +### puBu + +
+ +### puBuGn + +
+ +### puOr + +
+ +### puRd + +
+ +### purples + +
+ +### rainbow + +
+ +### rdBu + +
+ +### rdGy + +
+ +### rdPu + +
+ +### rdYlBu + +
+ +### rdYlGn + +
+ +### reds + +
+ +### sinebow + +
+ +### spectral + +
+ +### turbo + +
+ +### viridis + +
+ +### warm + +
+ +### ylGn + +
+ +### ylGnBu + +
+ +### ylOrBr + +
+ +### ylOrRd + +
diff --git a/site/docs/options/plots/theme/academy.en.md b/site/docs/options/plots/theme/academy.en.md new file mode 100644 index 000000000..26242396e --- /dev/null +++ b/site/docs/options/plots/theme/academy.en.md @@ -0,0 +1,5 @@ +--- +title: Academy +--- + + diff --git a/site/docs/options/plots/theme/academy.zh.md b/site/docs/options/plots/theme/academy.zh.md new file mode 100644 index 000000000..fe43101a8 --- /dev/null +++ b/site/docs/options/plots/theme/academy.zh.md @@ -0,0 +1,15 @@ +--- +title: academy +--- + +学术风格的主题。 + +## 开始使用 + +academy + +```js +const config = { + theme: "academy", +} +``` diff --git a/site/docs/options/plots/theme/classic.en.md b/site/docs/options/plots/theme/classic.en.md new file mode 100644 index 000000000..170c97ee4 --- /dev/null +++ b/site/docs/options/plots/theme/classic.en.md @@ -0,0 +1,5 @@ +--- +title: classic +--- + + diff --git a/site/docs/options/plots/theme/classic.zh.md b/site/docs/options/plots/theme/classic.zh.md new file mode 100644 index 000000000..055e35556 --- /dev/null +++ b/site/docs/options/plots/theme/classic.zh.md @@ -0,0 +1,15 @@ +--- +title: classic +--- + +经典主题。 + +## 开始使用 + +classic + +```js +const config = { + theme: "classic", +} +``` diff --git a/site/docs/options/plots/theme/classicDark.en.md b/site/docs/options/plots/theme/classicDark.en.md new file mode 100644 index 000000000..c03f2eb00 --- /dev/null +++ b/site/docs/options/plots/theme/classicDark.en.md @@ -0,0 +1,5 @@ +--- +title: classicDark +--- + + diff --git a/site/docs/options/plots/theme/classicDark.zh.md b/site/docs/options/plots/theme/classicDark.zh.md new file mode 100644 index 000000000..76f209501 --- /dev/null +++ b/site/docs/options/plots/theme/classicDark.zh.md @@ -0,0 +1,15 @@ +--- +title: classicDark +--- + +经典暗黑主题。 + +## 开始使用 + +classicDark + +```js +const config = { + theme: "classicDark", +} +``` diff --git a/site/docs/styles/component.md b/site/docs/styles/component.md deleted file mode 100644 index 5ef021e8b..000000000 --- a/site/docs/styles/component.md +++ /dev/null @@ -1,40 +0,0 @@ - - - - diff --git a/site/docs/styles/style.md b/site/docs/styles/style.md deleted file mode 100644 index 80c20323f..000000000 --- a/site/docs/styles/style.md +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/site/examples/statistics/column/demo/bar-dodged.js b/site/examples/statistics/column/demo/bar-dodged.js index fe416cbd8..461a11dd4 100644 --- a/site/examples/statistics/column/demo/bar-dodged.js +++ b/site/examples/statistics/column/demo/bar-dodged.js @@ -15,7 +15,6 @@ const DemoColumn = () => { group: true, sort: { reverse: true, - slice: 6, by: 'y', }, axis: { diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index 9789db354..842b5357b 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -10,7 +10,7 @@ "zh": "柱形图", "en": "Column Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*vhCKQJ9UJX4AAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*5u8UTb6iifcAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "color.js", @@ -18,7 +18,7 @@ "zh": "自定义柱状图颜色", "en": "Column plot color" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*dr27SafKNzIAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*yrKvQZUMaVoAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "column-maxwidth.js", @@ -26,7 +26,7 @@ "zh": "限制宽度的柱形图", "en": "Column with maxWidth" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*fu-BSYg7U_kAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*j1LdS6KxxsAAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "slider.js", @@ -42,7 +42,7 @@ "zh": "带滚动条柱状图", "en": "Column plot with scrollbar" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*IkdWTaXf4vAAAAAAAAAAAABkARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*9TgiRbYJBUsAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "region-annotation.js", @@ -66,7 +66,7 @@ "zh": "分组堆叠柱状图", "en": "Group and stack Column Chart" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/9ExrwrpVrA/908eff62-1132-4dbb-8c3c-9cbe8183c6d8.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*vc_STL5MmhIAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "bar-dodged.js", @@ -90,7 +90,7 @@ "zh": "自定义联通区域样式柱状图", "en": "Stacked column plot with connectedArea" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/KLJB0t7S9W/93ca0482-9d1d-42e9-b99c-c70d87517888.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*_f0VT6nfCE4AAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "annotation-label.js", @@ -98,7 +98,7 @@ "zh": "借助图形标注展示总计 label", "en": "Show total label with annotations" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/h5ZnxOZaVR/f4495644-e5b3-4130-8a8f-686cf6241267.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ZdrbR4mdg9sAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "dodge-padding.js", @@ -122,7 +122,7 @@ "zh": "带转化率柱状图", "en": "Column plot with conversion tag" }, - "screenshot": "https://gw.alicdn.com/tfs/TB1u3.cvUY1gK0jSZFMXXaWcVXa-1638-1228.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*YHpIRrooM4AAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "percent.js", diff --git a/site/examples/statistics/column/demo/scrollbar.js b/site/examples/statistics/column/demo/scrollbar.js index 278385754..2057499e4 100644 --- a/site/examples/statistics/column/demo/scrollbar.js +++ b/site/examples/statistics/column/demo/scrollbar.js @@ -10,11 +10,6 @@ const DemoColumn = () => { }, xField: '城市', yField: '销售额', - xAxis: { - label: { - autoRotate: false, - }, - }, scrollbar: { x: { ratio: 0.05, diff --git a/site/examples/statistics/column/demo/slider.js b/site/examples/statistics/column/demo/slider.js index 12f7eccca..ccd686f55 100644 --- a/site/examples/statistics/column/demo/slider.js +++ b/site/examples/statistics/column/demo/slider.js @@ -16,11 +16,6 @@ const DemoColumn = () => { }, xField: '城市', yField: '销售额', - xAxis: { - label: { - autoRotate: false, - }, - }, slider: { x: {}, }, diff --git a/site/examples/statistics/column/demo/stacked.js b/site/examples/statistics/column/demo/stacked.js index 1cdc91a49..d917f6bae 100644 --- a/site/examples/statistics/column/demo/stacked.js +++ b/site/examples/statistics/column/demo/stacked.js @@ -15,7 +15,6 @@ const DemoColumn = () => { stack: true, sort: { reverse: true, - slice: 6, by: 'y', }, axis: { From 6ba8222fddf5a212aabc48996d40f037f59f2f25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E6=B5=B7?= <43226029+dongxifan@users.noreply.github.com> Date: Mon, 20 Nov 2023 09:53:06 +0800 Subject: [PATCH 091/268] =?UTF-8?q?feat=EF=BC=9A=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=89=93=E5=8C=85=E5=9B=BEcircle=20packing=20(#2178)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat:添加打包图circle packing * fix:删除仓库地址 * fix:删除已内置的baseOptions --------- Co-authored-by: xifandong.dxf Co-authored-by: Joel Alan <31396322+lxfu1@users.noreply.github.com> --- .../src/components/circlePacking/index.tsx | 10 +++++ packages/plots/src/components/index.ts | 3 ++ packages/plots/src/core/index.ts | 3 ++ .../src/core/plots/circlePacking/adaptor.ts | 14 +++++++ .../src/core/plots/circlePacking/index.ts | 40 +++++++++++++++++++ .../src/core/plots/circlePacking/type.ts | 3 ++ site/.dumi/global.ts | 1 + .../statistics/treemap/demo/circlePacking.js | 27 +++++++++++++ .../statistics/treemap/demo/meta.json | 8 ++++ site/package.json | 1 + 10 files changed, 110 insertions(+) create mode 100644 packages/plots/src/components/circlePacking/index.tsx create mode 100644 packages/plots/src/core/plots/circlePacking/adaptor.ts create mode 100644 packages/plots/src/core/plots/circlePacking/index.ts create mode 100644 packages/plots/src/core/plots/circlePacking/type.ts create mode 100644 site/examples/statistics/treemap/demo/circlePacking.js diff --git a/packages/plots/src/components/circlePacking/index.tsx b/packages/plots/src/components/circlePacking/index.tsx new file mode 100644 index 000000000..df17ad323 --- /dev/null +++ b/packages/plots/src/components/circlePacking/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { CirclePackingOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type CirclePackingConfig = CommonConfig; + +const CirclePackingChart = (props: CirclePackingConfig) => ; + +export default CirclePackingChart; diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 1044a9f7d..da27b2638 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -20,6 +20,7 @@ import Gauge from './gauge'; import Liquid from './liquid'; import WordCloud from './wordCloud'; import Treemap from './treemap'; +import CirclePacking from './circlePacking'; import Violin from './violin'; import BidirectionalBar from './bidirectional-bar'; @@ -44,6 +45,7 @@ export type { GaugeConfig } from './gauge'; export type { LiquidConfig } from './liquid'; export type { WordCloudConfig } from './wordCloud'; export type { TreemapConfig } from './treemap'; +export type { CirclePackingConfig } from './circlePacking'; export type { ViolinConfig } from './violin'; export type { BidirectionalBarConfig } from './bidirectional-bar'; @@ -70,6 +72,7 @@ export { Liquid, WordCloud, Treemap, + CirclePacking, Violin, BidirectionalBar, }; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 514ce3f7e..b4190c9b3 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -24,6 +24,7 @@ export type { GaugeOptions } from './plots/gauge'; export type { LiquidOptions } from './plots/liquid'; export type { WordCloudOptions } from './plots/wordCloud'; export type { TreemapOptions } from './plots/treemap'; +export type { CirclePackingOptions } from './plots/circlePacking'; export type { ViolinOptions } from './plots/violin'; export type { BidirectionalBarOptions } from './plots/bidirectional-bar'; export * from './types'; @@ -54,6 +55,7 @@ import { Gauge } from './plots/gauge'; import { Liquid } from './plots/liquid'; import { WordCloud } from './plots/wordCloud'; import { Treemap } from './plots/treemap'; +import { CirclePacking } from './plots/circlePacking'; import { Violin } from './plots/violin'; import { BidirectionalBar } from './plots/bidirectional-bar'; @@ -84,6 +86,7 @@ export const Plots = { Liquid, WordCloud, Treemap, + CirclePacking, Violin, BidirectionalBar, }; diff --git a/packages/plots/src/core/plots/circlePacking/adaptor.ts b/packages/plots/src/core/plots/circlePacking/adaptor.ts new file mode 100644 index 000000000..595fb64b8 --- /dev/null +++ b/packages/plots/src/core/plots/circlePacking/adaptor.ts @@ -0,0 +1,14 @@ +import { flow, transformOptions } from '../../utils'; +import type { Adaptor } from '../../types'; +import type { CirclePackingOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + + return flow(transformOptions)(params); +} diff --git a/packages/plots/src/core/plots/circlePacking/index.ts b/packages/plots/src/core/plots/circlePacking/index.ts new file mode 100644 index 000000000..92154a1b7 --- /dev/null +++ b/packages/plots/src/core/plots/circlePacking/index.ts @@ -0,0 +1,40 @@ +import { Plot } from '../../base'; +import { adaptor } from './adaptor'; + +import type { CirclePackingOptions } from './type'; +import type { Adaptor } from '../../types'; + +export type { CirclePackingOptions }; + +export class CirclePacking extends Plot { + /** 图表类型 */ + public type = 'CirclePacking'; + + /** + * 获取 circle packing 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + legend: false, + type: "view", + children: [{ + type: "pack" + }] + }; + } + + /** + * 获取 打包图 默认配置 + */ + protected getDefaultOptions() { + return CirclePacking.getDefaultOptions(); + } + + /** + * 打包图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/circlePacking/type.ts b/packages/plots/src/core/plots/circlePacking/type.ts new file mode 100644 index 000000000..7a29f24c5 --- /dev/null +++ b/packages/plots/src/core/plots/circlePacking/type.ts @@ -0,0 +1,3 @@ +import type { Options } from '../../types/common'; + +export type CirclePackingOptions = Options; diff --git a/site/.dumi/global.ts b/site/.dumi/global.ts index 53902de50..69bdd49ad 100644 --- a/site/.dumi/global.ts +++ b/site/.dumi/global.ts @@ -7,4 +7,5 @@ if (window) { (window as any).lodashEs = require('lodash-es'); /** 不要使用 link, react-dom 冲突 */ (window as any).plots = require('@ant-design/plots'); + (window as any).d3Interpolate = require('d3-interpolate'); } diff --git a/site/examples/statistics/treemap/demo/circlePacking.js b/site/examples/statistics/treemap/demo/circlePacking.js new file mode 100644 index 000000000..47731f9aa --- /dev/null +++ b/site/examples/statistics/treemap/demo/circlePacking.js @@ -0,0 +1,27 @@ + + +import { CirclePacking } from '@ant-design/plots'; +import { interpolateHcl } from 'd3-interpolate'; +import React from 'react'; +import ReactDOM from 'react-dom'; +const DemoCirclePacking = () => { + + const config = { + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/flare.json", + }, + valueField: "value", + colorField: "depth", + scale: { + color: { + domain: [0, 5], + range: ["hsl(152,80%,80%)", "hsl(228,30%,40%)"], + interpolate: interpolateHcl + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/treemap/demo/meta.json b/site/examples/statistics/treemap/demo/meta.json index a28a2138b..838928791 100644 --- a/site/examples/statistics/treemap/demo/meta.json +++ b/site/examples/statistics/treemap/demo/meta.json @@ -11,6 +11,14 @@ "en": "Treemap Chart" }, "screenshot": "https://gw.alipayobjects.com/mdn/rms_f5c722/afts/img/A*Ob1jSbCUl8cAAAAAAAAAAABkARQnAQ" + }, + { + "filename": "circlePacking.js", + "title": { + "zh": "Circle packing", + "en": "CirclePacking Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*epG0TaxEVTsAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/package.json b/site/package.json index 0d816d8fd..84a69a29d 100644 --- a/site/package.json +++ b/site/package.json @@ -32,6 +32,7 @@ "@types/react": "^16.14.8", "@types/react-dom": "^16.9.13", "cross-env": "^7.0.3", + "d3-interpolate": "^3.0.1", "dumi": "^2.1.14", "fecha": "^4.2.3", "gh-pages": "^2.1.1", From b8618809d451681d5778159472c8b405cd66a74a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=83=E9=B1=BC?= <48511770+leffy-yan@users.noreply.github.com> Date: Mon, 20 Nov 2023 15:18:31 +0800 Subject: [PATCH 092/268] csv to json (#2187) * feat: change json * feat: update json * feat: update csv to json * feat: finish csv to json * feat: change color * feat: change back * fix: point-jitter * fix: examples of strip and jitter --------- Co-authored-by: zy371123 --- packages/plots/src/core/plots/line/index.ts | 7 ++++--- site/examples/statistics/bar/demo/bar.js | 3 +-- .../statistics/bar/demo/normalized-stacked.js | 3 +-- site/examples/statistics/bar/demo/stacked.js | 3 +-- site/examples/statistics/base/demo/space-layer.js | 3 +-- site/examples/statistics/column/demo/bar-dodged.js | 3 +-- site/examples/statistics/column/demo/column.js | 2 +- site/examples/statistics/column/demo/stacked.js | 3 +-- site/examples/statistics/line/demo/connect-nulls.js | 7 +++---- site/examples/statistics/line/demo/series.js | 4 ++-- site/examples/statistics/line/demo/slider.js | 4 ++-- site/examples/statistics/pie/demo/doughnut.js | 2 +- site/examples/statistics/rose/demo/rose-label.js | 2 +- site/examples/statistics/rose/demo/rose.js | 2 +- site/examples/statistics/rose/demo/stacked-rose.js | 2 +- .../statistics/scatter/demo/point-bubble.js | 2 +- site/examples/statistics/scatter/demo/point-dot.js | 2 +- .../statistics/scatter/demo/point-jitter.js | 13 +++++++------ .../examples/statistics/scatter/demo/point-label.js | 2 +- .../statistics/scatter/demo/point-sequential.js | 4 ++-- .../examples/statistics/scatter/demo/point-shape.js | 2 +- .../examples/statistics/scatter/demo/point-strip.js | 12 +++++------- 22 files changed, 40 insertions(+), 47 deletions(-) diff --git a/packages/plots/src/core/plots/line/index.ts b/packages/plots/src/core/plots/line/index.ts index 1a8628d37..9902518b6 100644 --- a/packages/plots/src/core/plots/line/index.ts +++ b/packages/plots/src/core/plots/line/index.ts @@ -28,9 +28,10 @@ export class Line extends Plot { y: { title: false }, x: { title: false }, }, - animate: { - enter: { type: 'growInX' }, - }, + // 使用该动画,会导致线形图-连接空值 一进入页面渲染不出来,必须要更改窗口尺寸触发重新渲染。建议动画暂时使用默认 + // animate: { + // enter: { type: 'growInX' }, + // }, children: [{ type: 'line' }], }; } diff --git a/site/examples/statistics/bar/demo/bar.js b/site/examples/statistics/bar/demo/bar.js index b64aeae4e..263584882 100644 --- a/site/examples/statistics/bar/demo/bar.js +++ b/site/examples/statistics/bar/demo/bar.js @@ -6,8 +6,7 @@ const DemoBar = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv', - format: 'csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/bar-bar.json', }, xField: 'letter', yField: 'frequency', diff --git a/site/examples/statistics/bar/demo/normalized-stacked.js b/site/examples/statistics/bar/demo/normalized-stacked.js index 1b7f6a126..5cf3f4960 100644 --- a/site/examples/statistics/bar/demo/normalized-stacked.js +++ b/site/examples/statistics/bar/demo/normalized-stacked.js @@ -6,8 +6,7 @@ const DemoBar = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/f129b517-158d-41a9-83a3-3294d639b39e.csv', - format: 'csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/bar-normalized-stacked.json', }, xField: 'state', yField: 'population', diff --git a/site/examples/statistics/bar/demo/stacked.js b/site/examples/statistics/bar/demo/stacked.js index c0f54f6e6..83b7702c9 100644 --- a/site/examples/statistics/bar/demo/stacked.js +++ b/site/examples/statistics/bar/demo/stacked.js @@ -6,8 +6,7 @@ const DemoBar = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/f129b517-158d-41a9-83a3-3294d639b39e.csv', - format: 'csv', + value: 'https://site-dataa-s09001742540-site.dev.alipay.net/antd-charts/bar-stacked.json', }, xField: 'state', yField: 'population', diff --git a/site/examples/statistics/base/demo/space-layer.js b/site/examples/statistics/base/demo/space-layer.js index d60ca695c..164e06e15 100644 --- a/site/examples/statistics/base/demo/space-layer.js +++ b/site/examples/statistics/base/demo/space-layer.js @@ -8,8 +8,7 @@ const Demobase = () => { data: { type: "fetch", value: - "https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv", - format: "csv", + "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/base-space-layer.json", }, children: [ { diff --git a/site/examples/statistics/column/demo/bar-dodged.js b/site/examples/statistics/column/demo/bar-dodged.js index 461a11dd4..bc90a50c6 100644 --- a/site/examples/statistics/column/demo/bar-dodged.js +++ b/site/examples/statistics/column/demo/bar-dodged.js @@ -6,8 +6,7 @@ const DemoColumn = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/f129b517-158d-41a9-83a3-3294d639b39e.csv', - format: 'csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/column-bar-dodged.json', }, xField: 'state', yField: 'population', diff --git a/site/examples/statistics/column/demo/column.js b/site/examples/statistics/column/demo/column.js index e6e174166..9a580bb45 100644 --- a/site/examples/statistics/column/demo/column.js +++ b/site/examples/statistics/column/demo/column.js @@ -6,7 +6,7 @@ const DemoColumn = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/column-column.json', }, xField: 'letter', yField: 'frequency', diff --git a/site/examples/statistics/column/demo/stacked.js b/site/examples/statistics/column/demo/stacked.js index d917f6bae..24d9ce406 100644 --- a/site/examples/statistics/column/demo/stacked.js +++ b/site/examples/statistics/column/demo/stacked.js @@ -6,8 +6,7 @@ const DemoColumn = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/f129b517-158d-41a9-83a3-3294d639b39e.csv', - format: 'csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/column-stacked.json', }, xField: 'state', yField: 'population', diff --git a/site/examples/statistics/line/demo/connect-nulls.js b/site/examples/statistics/line/demo/connect-nulls.js index 9ec63c585..fd579160f 100644 --- a/site/examples/statistics/line/demo/connect-nulls.js +++ b/site/examples/statistics/line/demo/connect-nulls.js @@ -6,19 +6,18 @@ const DemoLine = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/551d80c6-a6be-4f3c-a82a-abd739e12977.csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/line-connect-nulls.json', transform: [ - // Mock missing data. { type: 'map', callback: (d) => ({ ...d, - close: d.date.getUTCMonth() < 3 ? NaN : d.close, + close: new Date(d.date).getUTCMonth() < 3 ? NaN : d.close, }), }, ], }, - xField: 'date', + xField: (d) => new Date(d.date), yField: 'close', connectNulls: { connect: true, diff --git a/site/examples/statistics/line/demo/series.js b/site/examples/statistics/line/demo/series.js index 0eb649849..4b06c04ae 100644 --- a/site/examples/statistics/line/demo/series.js +++ b/site/examples/statistics/line/demo/series.js @@ -6,9 +6,9 @@ const DemoLine = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/728a4bdc-9d0b-49e0-a92f-6320a6cddeed.csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/line-series.json', }, - xField: 'date', + xField: (d) => new Date(d.date), yField: 'unemployment', colorField: 'steelblue', seriesField: 'division', diff --git a/site/examples/statistics/line/demo/slider.js b/site/examples/statistics/line/demo/slider.js index 4dba5c75f..536609642 100644 --- a/site/examples/statistics/line/demo/slider.js +++ b/site/examples/statistics/line/demo/slider.js @@ -7,9 +7,9 @@ const DemoLine = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/551d80c6-a6be-4f3c-a82a-abd739e12977.csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/line-slider.json', }, - xField: 'date', + xField: (d) => new Date(d.date), yField: 'close', axis: { x: { title: false, size: 40 }, y: { title: false, size: 36 } }, slider: { diff --git a/site/examples/statistics/pie/demo/doughnut.js b/site/examples/statistics/pie/demo/doughnut.js index 0ad744436..6e75b7f22 100644 --- a/site/examples/statistics/pie/demo/doughnut.js +++ b/site/examples/statistics/pie/demo/doughnut.js @@ -6,7 +6,7 @@ const DemoPie = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/79fd9317-d2af-4bc4-90fa-9d07357398fd.csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/pie-doughnut.json', }, angleField: 'value', colorField: 'name', diff --git a/site/examples/statistics/rose/demo/rose-label.js b/site/examples/statistics/rose/demo/rose-label.js index a8dd48e1c..c06629d0d 100644 --- a/site/examples/statistics/rose/demo/rose-label.js +++ b/site/examples/statistics/rose/demo/rose-label.js @@ -11,7 +11,7 @@ const DemoRose = () => { data: { type: "fetch", value: - "https://gw.alipayobjects.com/os/bmw-prod/87b2ff47-2a33-4509-869c-dae4cdd81163.csv", + "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/rose-rose-label.json", }, xField: 'year', yField: 'people', diff --git a/site/examples/statistics/rose/demo/rose.js b/site/examples/statistics/rose/demo/rose.js index ac71acc4b..3a9efe6d8 100644 --- a/site/examples/statistics/rose/demo/rose.js +++ b/site/examples/statistics/rose/demo/rose.js @@ -10,7 +10,7 @@ const DemoRose = () => { data: { type: "fetch", value: - "https://gw.alipayobjects.com/os/bmw-prod/87b2ff47-2a33-4509-869c-dae4cdd81163.csv", + "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/rose-rose.json", }, xField: 'year', yField: 'people', diff --git a/site/examples/statistics/rose/demo/stacked-rose.js b/site/examples/statistics/rose/demo/stacked-rose.js index 410cbef1a..5cd4b2fd9 100644 --- a/site/examples/statistics/rose/demo/stacked-rose.js +++ b/site/examples/statistics/rose/demo/stacked-rose.js @@ -22,7 +22,7 @@ const DemoRose = () => { data: { type: "fetch", value: - "https://gw.alipayobjects.com/os/bmw-prod/d582a447-2057-4a74-97ed-1d73a5459ea4.csv", + "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/rose-stacked-rose.json", transform: [ { type: "fold", diff --git a/site/examples/statistics/scatter/demo/point-bubble.js b/site/examples/statistics/scatter/demo/point-bubble.js index a949e0142..ceacc3745 100644 --- a/site/examples/statistics/scatter/demo/point-bubble.js +++ b/site/examples/statistics/scatter/demo/point-bubble.js @@ -6,7 +6,7 @@ const DemoScatter = () => { const config = { data: { type: "fetch", - value: "https://gw.alipayobjects.com/os/bmw-prod/2b48887c-56fb-437e-a91c-6f48e80e5a91.csv", + value: "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-bubble.json", transform: [{ type: 'filter', callback: (d) => d.Entity !== 'All natural disasters', diff --git a/site/examples/statistics/scatter/demo/point-dot.js b/site/examples/statistics/scatter/demo/point-dot.js index 849638ac2..cedbaedb5 100644 --- a/site/examples/statistics/scatter/demo/point-dot.js +++ b/site/examples/statistics/scatter/demo/point-dot.js @@ -7,7 +7,7 @@ const DemoScatter = () => { data: { type: "fetch", value: - "https://gw.alipayobjects.com/os/bmw-prod/b6f2ff26-b232-447d-a613-0df5e30104a0.csv", + "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-dot.json", }, width: 800, height: 1200, diff --git a/site/examples/statistics/scatter/demo/point-jitter.js b/site/examples/statistics/scatter/demo/point-jitter.js index 8fd25a96a..cb0d4f182 100644 --- a/site/examples/statistics/scatter/demo/point-jitter.js +++ b/site/examples/statistics/scatter/demo/point-jitter.js @@ -6,17 +6,18 @@ const DemoScatter = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/2c813e2d-2276-40b9-a9af-cf0a0fb7e942.csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-jitter.json', }, - transform: [{ type: 'sortX', channel: 'x' }, { type: 'jitterX' }], + transform: [{ type: 'jitterX'}, { type: 'sortX', channel: 'x' }], xField: 'Cylinders', yField: 'Horsepower', colorField: 'Cylinders', shapeField: 'hollow', - meta: { - x: { type: 'point' }, - color: { type: 'ordinal' }, - }, + scale: { + x: { type: 'point'}, + y: { domain: [0, 200] }, + color: { type: 'ordinal' } + } }; return ; }; diff --git a/site/examples/statistics/scatter/demo/point-label.js b/site/examples/statistics/scatter/demo/point-label.js index 18a9867df..fd633c3aa 100644 --- a/site/examples/statistics/scatter/demo/point-label.js +++ b/site/examples/statistics/scatter/demo/point-label.js @@ -7,7 +7,7 @@ const DemoScatter = () => { data: { type: "fetch", value: - "https://gw.alipayobjects.com/os/bmw-prod/474e51c8-b47b-4bb6-b3ed-87813a960df2.csv", + "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-label.json", }, xField: 'mpg', yField: 'hp', diff --git a/site/examples/statistics/scatter/demo/point-sequential.js b/site/examples/statistics/scatter/demo/point-sequential.js index ad1e06fab..953ae36be 100644 --- a/site/examples/statistics/scatter/demo/point-sequential.js +++ b/site/examples/statistics/scatter/demo/point-sequential.js @@ -8,9 +8,9 @@ const DemoScatter = () => { data: { type: "fetch", value: - "https://gw.alipayobjects.com/os/bmw-prod/56b6b137-e04e-4757-8af5-d75bafaef886.csv", + "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-sequential.json", }, - xField: 'date', + xField: (d) => new Date(d.date), yField: 'value', colorField: 'value', shapeField: 'point', diff --git a/site/examples/statistics/scatter/demo/point-shape.js b/site/examples/statistics/scatter/demo/point-shape.js index c7d895da2..261eaf1f4 100644 --- a/site/examples/statistics/scatter/demo/point-shape.js +++ b/site/examples/statistics/scatter/demo/point-shape.js @@ -6,7 +6,7 @@ const DemoScatter = () => { const config = { data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/bd73a175-4417-4749-8b88-bc04d955e899.csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-shape.json', }, xField: 'x', yField: 'y', diff --git a/site/examples/statistics/scatter/demo/point-strip.js b/site/examples/statistics/scatter/demo/point-strip.js index 22c42100e..99077f6b6 100644 --- a/site/examples/statistics/scatter/demo/point-strip.js +++ b/site/examples/statistics/scatter/demo/point-strip.js @@ -8,19 +8,17 @@ const DemoScatter = () => { height: 300, data: { type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/2c813e2d-2276-40b9-a9af-cf0a0fb7e942.csv', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-strip.json', }, - transform: [{ type: 'sortX', channel: 'x' }], coordinate: { transform: [{ type: 'transpose' }] }, xField: 'Cylinders', yField: 'Horsepower', sizeField: 20, - meta: { - x: { type: 'point' }, - y: { zero: true }, - color: { type: 'ordinal' }, - }, shapeField: 'line', + scale: { + y: { type: 'linear', zero: true }, + x: { domain: [0, 10] } + } }; return ; }; From 4981a63b2ce85eac8a3bdf76998e5bdc5b01d89f Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 20 Nov 2023 15:19:26 +0800 Subject: [PATCH 093/268] docs: remove default theme (#2188) --- packages/plots/src/core/base/index.ts | 2 +- site/.dumirc.ts | 61 ++++++++------------------- 2 files changed, 19 insertions(+), 44 deletions(-) diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 1525b4431..ab1ee5ea7 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -84,7 +84,7 @@ export abstract class Plot extends EE { } private getBaseOptions(): Partial { - return { theme: 'classic' }; + return { type: 'view' }; } /** diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 3152a7963..bb832e8c5 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -22,7 +22,8 @@ export default defineConfig({ showChartResize: true, // 是否在 demo 页展示图表视图切换 showAPIDoc: true, versions: { - [version]: 'https://charts.ant.design', + [version]: 'https://ant-design-charts-next.antgroup.com', + '1.x': 'https://ant-design-charts.antgroup.com', '0.x': 'https://v0-charts.ant.design/', }, docsearchOptions: { @@ -144,32 +145,6 @@ export default defineConfig({ }, ], }, - news: [ - { - type: { - zh: '论坛', - en: 'Forum', - }, - title: { - zh: 'AntV 芒种日 图新物:GraphInsight 发布', - en: 'AntV Seeds Day Graph New: GraphInsight Released', - }, - date: '2022.06.06', - link: 'https://github.com/antvis/GraphInsight', - }, - { - type: { - zh: '论坛', - en: 'Forum', - }, - title: { - zh: 'SEE Conf 2022 支付宝体验科技大会', - en: 'SEE Conf 2022 Alipay Experience Technology Conference', - }, - date: '2022.01.08', - link: 'https://seeconf.antfin.com/', - }, - ], features: [ { icon: 'https://gw.alipayobjects.com/zos/basement_prod/eae0ee4e-acbf-4486-88eb-ea17f441a0d5.svg', @@ -189,8 +164,8 @@ export default defineConfig({ en: 'Variety of charts', }, description: { - zh: '支持全量的 G2Plot 图表,以及关系图、流程图、地理可视化,几乎做到同步更新', - en: 'Support full G2Plot charts, as well as relation graphs, flow charts, geographical visualization, almost synchronous update.', + zh: '涵盖统计图表、关系图、流程图以及地理可视化,种类齐全', + en: 'Covering statistical charts, relational diagrams, flowcharts, and geographic visualization, with a wide range of types.', }, }, { @@ -206,20 +181,20 @@ export default defineConfig({ }, ], cases: [ - { - logo: 'https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*Uh1MSpdcj-kAAAAAAAAAAABkARQnAQ', - title: { - zh: '图编辑', - en: 'Advanced Features', - }, - description: { - zh: '来这里尝试一下我们正在开发中的流程图功能', - en: `Try out the flowchart feature we're developing here`, - }, - link: `/examples/flowchart/basic#basic`, - image: 'https://gw.alipayobjects.com/zos/antfincdn/5b5C1FvWLE/08c299c3-b3f8-4071-afc1-9aa5e1a9cb3a.png', - isAppLogo: true, - }, + // { + // logo: 'https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*Uh1MSpdcj-kAAAAAAAAAAABkARQnAQ', + // title: { + // zh: '图编辑', + // en: 'Advanced Features', + // }, + // description: { + // zh: '来这里尝试一下我们正在开发中的流程图功能', + // en: `Try out the flowchart feature we're developing here`, + // }, + // link: `/examples/flowchart/basic#basic`, + // image: 'https://gw.alipayobjects.com/zos/antfincdn/5b5C1FvWLE/08c299c3-b3f8-4071-afc1-9aa5e1a9cb3a.png', + // isAppLogo: true, + // }, ], /** 首页合作公司 */ companies: [ From a36c807fddc4cd88a5b91f62a04b6a98727fe556 Mon Sep 17 00:00:00 2001 From: Canight <37735381+Canight@users.noreply.github.com> Date: Mon, 20 Nov 2023 15:30:37 +0800 Subject: [PATCH 094/268] feat: add venn plots (#2179) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add venn plots * feat: 调整入参形式 --------- Co-authored-by: yelinlei.yll --- packages/plots/src/components/index.ts | 5 ++ packages/plots/src/components/venn/index.tsx | 10 ++++ packages/plots/src/core/index.ts | 4 ++ packages/plots/src/core/plots/venn/adaptor.ts | 39 ++++++++++++++ packages/plots/src/core/plots/venn/index.ts | 40 +++++++++++++++ packages/plots/src/core/plots/venn/type.ts | 8 +++ site/examples/statistics/venn/demo/basic.js | 35 +++++++++++++ .../statistics/venn/demo/custom-color.js | 42 +++++++++++++++ site/examples/statistics/venn/demo/custom.js | 51 +++++++++++++++++++ .../statistics/venn/demo/interaction.js | 49 ++++++++++++++++++ site/examples/statistics/venn/demo/label.js | 28 ++++++++++ site/examples/statistics/venn/demo/meta.json | 48 +++++++++++++++++ site/examples/statistics/venn/index.en.md | 4 ++ site/examples/statistics/venn/index.zh.md | 6 +++ 14 files changed, 369 insertions(+) create mode 100644 packages/plots/src/components/venn/index.tsx create mode 100644 packages/plots/src/core/plots/venn/adaptor.ts create mode 100644 packages/plots/src/core/plots/venn/index.ts create mode 100644 packages/plots/src/core/plots/venn/type.ts create mode 100644 site/examples/statistics/venn/demo/basic.js create mode 100644 site/examples/statistics/venn/demo/custom-color.js create mode 100644 site/examples/statistics/venn/demo/custom.js create mode 100644 site/examples/statistics/venn/demo/interaction.js create mode 100644 site/examples/statistics/venn/demo/label.js create mode 100644 site/examples/statistics/venn/demo/meta.json create mode 100644 site/examples/statistics/venn/index.en.md create mode 100644 site/examples/statistics/venn/index.zh.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index da27b2638..11b5c081b 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -23,6 +23,8 @@ import Treemap from './treemap'; import CirclePacking from './circlePacking'; import Violin from './violin'; import BidirectionalBar from './bidirectional-bar'; +import Venn from './venn'; + export type { AreaConfig } from './area'; export type { BarConfig } from './bar'; @@ -48,6 +50,8 @@ export type { TreemapConfig } from './treemap'; export type { CirclePackingConfig } from './circlePacking'; export type { ViolinConfig } from './violin'; export type { BidirectionalBarConfig } from './bidirectional-bar'; +export type { VennConfig } from './venn'; + export { Base, @@ -75,4 +79,5 @@ export { CirclePacking, Violin, BidirectionalBar, + Venn }; diff --git a/packages/plots/src/components/venn/index.tsx b/packages/plots/src/components/venn/index.tsx new file mode 100644 index 000000000..3bf2e9e04 --- /dev/null +++ b/packages/plots/src/components/venn/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { VennOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type VennConfig = CommonConfig; + +const VennChart = (props: VennConfig) => ; + +export default VennChart; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index b4190c9b3..0d4a5fe13 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -27,6 +27,8 @@ export type { TreemapOptions } from './plots/treemap'; export type { CirclePackingOptions } from './plots/circlePacking'; export type { ViolinOptions } from './plots/violin'; export type { BidirectionalBarOptions } from './plots/bidirectional-bar'; +export type { VennOptions } from './plots/venn'; + export * from './types'; import { Base } from './plots/base'; @@ -58,6 +60,7 @@ import { Treemap } from './plots/treemap'; import { CirclePacking } from './plots/circlePacking'; import { Violin } from './plots/violin'; import { BidirectionalBar } from './plots/bidirectional-bar'; +import { Venn } from './plots/venn'; export const Plots = { Base, @@ -89,4 +92,5 @@ export const Plots = { CirclePacking, Violin, BidirectionalBar, + Venn, }; diff --git a/packages/plots/src/core/plots/venn/adaptor.ts b/packages/plots/src/core/plots/venn/adaptor.ts new file mode 100644 index 000000000..2c07cbb3b --- /dev/null +++ b/packages/plots/src/core/plots/venn/adaptor.ts @@ -0,0 +1,39 @@ +import { flow, isArray, omit, remove, set, transformOptions } from '../../utils'; +import type { Adaptor } from '../../types'; +import { DefaultTransformKey, type VennOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + const { options } = params; + const { data, setsField, sizeField } = options; + if (isArray(data)) { + set(options, 'data', { + type: 'inline', + value: data, + transform: [ + { + type: 'venn', + sets: setsField, + size: sizeField, + as: [DefaultTransformKey.color, DefaultTransformKey.d], + }, + ], + }); + set(options, 'colorField', setsField); + set(options, ['children', '0', 'encode', 'd'], DefaultTransformKey.d); + } + set(params, 'options', omit(options, ['sizeField', 'setsField'])); + return params; + }; + + return flow(init, transformOptions)(params); +} diff --git a/packages/plots/src/core/plots/venn/index.ts b/packages/plots/src/core/plots/venn/index.ts new file mode 100644 index 000000000..62c75dbd3 --- /dev/null +++ b/packages/plots/src/core/plots/venn/index.ts @@ -0,0 +1,40 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { DefaultTransformKey, VennOptions } from './type'; + +export type { VennOptions }; + +export class Venn extends Plot { + /** 图表类型 */ + public type = 'venn'; + + /** + * 获取 韦恩图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + children: [{ type: 'path' }], + legend: { + color: { itemMarker: 'circle' }, + }, + encode: { color: DefaultTransformKey.color, d: DefaultTransformKey.d }, + }; + } + + /** + * 获取 韦恩图 默认配置 + */ + protected getDefaultOptions() { + return Venn.getDefaultOptions(); + } + + /** + * 韦恩图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/venn/type.ts b/packages/plots/src/core/plots/venn/type.ts new file mode 100644 index 000000000..002c6a72d --- /dev/null +++ b/packages/plots/src/core/plots/venn/type.ts @@ -0,0 +1,8 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type VennOptions = Options & BaseOptions; + +export enum DefaultTransformKey { + color = 'key', + d = 'path', +} diff --git a/site/examples/statistics/venn/demo/basic.js b/site/examples/statistics/venn/demo/basic.js new file mode 100644 index 000000000..8ecc54e14 --- /dev/null +++ b/site/examples/statistics/venn/demo/basic.js @@ -0,0 +1,35 @@ +import { Venn } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoVenn = () => { + const config = { + data: [ + { sets: ['A'], size: 12, label: 'A' }, + { sets: ['B'], size: 12, label: 'B' }, + { sets: ['C'], size: 12, label: 'C' }, + { sets: ['A', 'B'], size: 2, label: 'A&B' }, + { sets: ['A', 'C'], size: 2, label: 'A&C' }, + { sets: ['B', 'C'], size: 2, label: 'B&C' }, + { sets: ['A', 'B', 'C'], size: 1 }, + ], + setsField: 'sets', + sizeField: 'size', + style: { fillOpacity: 0.85 }, + label: { + position: 'inside', + text: (d) => d.label || '', + }, + tooltip: { + title: false, + items: [ + (d) => { + return { name: d.key, value: d.size }; + }, + ], + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/venn/demo/custom-color.js b/site/examples/statistics/venn/demo/custom-color.js new file mode 100644 index 000000000..ad08273c1 --- /dev/null +++ b/site/examples/statistics/venn/demo/custom-color.js @@ -0,0 +1,42 @@ +import { Venn } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoVenn = () => { + const config = { + data: [ + { sets: ['A'], size: 12, label: 'A' }, + { sets: ['B'], size: 12, label: 'B' }, + { sets: ['C'], size: 12, label: 'C' }, + { sets: ['A', 'B'], size: 2, label: 'A&B' }, + { sets: ['A', 'C'], size: 2, label: 'A&C' }, + { sets: ['B', 'C'], size: 2, label: 'B&C' }, + { sets: ['A', 'B', 'C'], size: 1 }, + ], + setsField: 'sets', + sizeField: 'size', + label: { + position: 'inside', + text: (d) => d.label || '', + }, + tooltip: { + title: false, + items: [ + (d) => { + return { name: d.key, value: d.size }; + }, + ], + }, + style: { + fillOpacity: 0.85, + fill: (datum, index, data) => { + console.log(data); + const { size } = datum; + if (size <= 2) return '#f4bb51'; + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/venn/demo/custom.js b/site/examples/statistics/venn/demo/custom.js new file mode 100644 index 000000000..3c26ec335 --- /dev/null +++ b/site/examples/statistics/venn/demo/custom.js @@ -0,0 +1,51 @@ +import { Venn } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoVenn = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/c4c17fe9-0a93-4255-bc1e-1ff84966d24a.json', + transform: [ + { + type: 'venn', + sets: 'sets', + size: 'size', + as: ['key', 'path'], + }, + ], + }, + setsField: 'sets', + sizeField: 'size', + style: { fillOpacity: 0.85 }, + scale: { + color: { + range: ['#9DF5CA', '#61DDAA', '#42C090'], + }, + }, + label: { + position: 'inside', + style: { + lineHeight: 20, + }, + text: (datum) => { + return `${datum.size}`; + }, + }, + interaction: { + tooltip: { + // render 回调方法返回一个innerHTML 或者 DOM + render: (event, { title, items }) => { + return `
+

title:${title}

+
    ${items.map((d) => `
  • ${d.name} ${d.value}
  • `)}
+
`; + }, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/venn/demo/interaction.js b/site/examples/statistics/venn/demo/interaction.js new file mode 100644 index 000000000..3561aecda --- /dev/null +++ b/site/examples/statistics/venn/demo/interaction.js @@ -0,0 +1,49 @@ +import { Venn } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoVenn = () => { + const config = { + data: [ + { sets: ['A'], size: 12, label: 'A' }, + { sets: ['B'], size: 12, label: 'B' }, + { sets: ['C'], size: 12, label: 'C' }, + { sets: ['A', 'B'], size: 2, label: 'A&B' }, + { sets: ['A', 'C'], size: 2, label: 'A&C' }, + { sets: ['B', 'C'], size: 2, label: 'B&C' }, + { sets: ['A', 'B', 'C'], size: 1 }, + ], + setsField: 'sets', + sizeField: 'size', + style: { fillOpacity: 0.85 }, + label: { + position: 'inside', + text: (d) => d.label || '', + }, + tooltip: { + title: false, + items: [ + (d) => { + return { name: d.key, value: d.size }; + }, + ], + }, + state: { + active: { + fillOpacity: 0.8, + stroke: 'red', + lineWidth: 1, + }, + inactive: { + fillOpacity: 0.2, + lineWidth: 0, + }, + }, + interaction: { + elementHighlight: true, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/venn/demo/label.js b/site/examples/statistics/venn/demo/label.js new file mode 100644 index 000000000..ba7b1f106 --- /dev/null +++ b/site/examples/statistics/venn/demo/label.js @@ -0,0 +1,28 @@ +import { Venn } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoVenn = () => { + const config = { + data: [ + { sets: ['A'], size: 12, label: 'A' }, + { sets: ['B'], size: 12, label: 'B' }, + { sets: ['C'], size: 12, label: 'C' }, + { sets: ['A', 'B'], size: 2, label: 'A&B' }, + { sets: ['A', 'C'], size: 2, label: 'A&C' }, + { sets: ['B', 'C'], size: 2, label: 'B&C' }, + { sets: ['A', 'B', 'C'], size: 1 }, + ], + setsField: 'sets', + sizeField: 'size', + style: { fillOpacity: 0.85 }, + label: { + position: 'inside', + text: (d) => d.label || '', + transform: [{ type: 'contrastReverse' }], + } + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/venn/demo/meta.json b/site/examples/statistics/venn/demo/meta.json new file mode 100644 index 000000000..4c2eff801 --- /dev/null +++ b/site/examples/statistics/venn/demo/meta.json @@ -0,0 +1,48 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "基础韦恩图", + "en": "Basic venn plot" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/BJw8fy6uxU/009dd50e-c2a4-48dc-a79a-dc417123889f.png" + }, + { + "filename": "custom-color.js", + "title": { + "zh": "自定义颜色", + "en": "Custom color" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_lwk8lu/afts/img/A*zLutTqj3As0AAAAAAAAAAAAADma_AQ/original" + }, + { + "filename": "label.js", + "title": { + "zh": "设置label", + "en": "Label setting" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/BJw8fy6uxU/009dd50e-c2a4-48dc-a79a-dc417123889f.png" + }, + { + "filename": "custom.js", + "title": { + "zh": "自定义韦恩图", + "en": "Customize venn plot" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/T6cgHx5BHB/f2137e3b-5784-4626-a986-109fc8cb5feb.png" + }, + { + "filename": "interaction.js", + "title": { + "zh": "韦恩图-元素交互", + "en": "venn plot - with element action" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/BJw8fy6uxU/009dd50e-c2a4-48dc-a79a-dc417123889f.png" + } + ] +} diff --git a/site/examples/statistics/venn/index.en.md b/site/examples/statistics/venn/index.en.md new file mode 100644 index 000000000..811ec7aab --- /dev/null +++ b/site/examples/statistics/venn/index.en.md @@ -0,0 +1,4 @@ +--- +title: Venn +order: 3 +--- diff --git a/site/examples/statistics/venn/index.zh.md b/site/examples/statistics/venn/index.zh.md new file mode 100644 index 000000000..584b58f51 --- /dev/null +++ b/site/examples/statistics/venn/index.zh.md @@ -0,0 +1,6 @@ +--- +title: 韦恩图 +order: 3 +--- + + From a6f25716cb4a0809907dbbb6cbfd92466db88d00 Mon Sep 17 00:00:00 2001 From: HuangShengPu <60083015+hsp-sz@users.noreply.github.com> Date: Mon, 20 Nov 2023 18:36:13 +0800 Subject: [PATCH 095/268] feat: add radial-bar (#2189) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add radial-bar * feat: 新增健身数据 * feat(radial-bar): change type name * feat(radial-bar): add startAngle * feat(radial-bar): add background and line --------- Co-authored-by: shengzheng Co-authored-by: Joel Alan <31396322+lxfu1@users.noreply.github.com> --- packages/plots/src/components/index.ts | 2 + .../plots/src/components/radial-bar/index.tsx | 10 ++ packages/plots/src/core/index.ts | 3 + .../src/core/plots/radial-bar/adaptor.ts | 88 ++++++++++++++ .../plots/src/core/plots/radial-bar/index.ts | 51 ++++++++ .../plots/src/core/plots/radial-bar/type.ts | 3 + .../radial-bar/demo/apple-watch-activity.js | 59 ++++++++++ .../statistics/radial-bar/demo/background.js | 54 +++++++++ .../statistics/radial-bar/demo/basic.js | 32 +++++ .../statistics/radial-bar/demo/color.js | 42 +++++++ .../statistics/radial-bar/demo/grouped.js | 111 ++++++++++++++++++ .../statistics/radial-bar/demo/line.js | 37 ++++++ .../statistics/radial-bar/demo/meta.json | 66 +++++++++++ .../radial-bar/demo/round-corner.js | 35 ++++++ .../statistics/radial-bar/demo/stacked.js | 111 ++++++++++++++++++ .../statistics/radial-bar/index.en.md | 4 + .../statistics/radial-bar/index.zh.md | 4 + 17 files changed, 712 insertions(+) create mode 100644 packages/plots/src/components/radial-bar/index.tsx create mode 100644 packages/plots/src/core/plots/radial-bar/adaptor.ts create mode 100644 packages/plots/src/core/plots/radial-bar/index.ts create mode 100644 packages/plots/src/core/plots/radial-bar/type.ts create mode 100644 site/examples/statistics/radial-bar/demo/apple-watch-activity.js create mode 100644 site/examples/statistics/radial-bar/demo/background.js create mode 100644 site/examples/statistics/radial-bar/demo/basic.js create mode 100644 site/examples/statistics/radial-bar/demo/color.js create mode 100644 site/examples/statistics/radial-bar/demo/grouped.js create mode 100644 site/examples/statistics/radial-bar/demo/line.js create mode 100644 site/examples/statistics/radial-bar/demo/meta.json create mode 100644 site/examples/statistics/radial-bar/demo/round-corner.js create mode 100644 site/examples/statistics/radial-bar/demo/stacked.js create mode 100644 site/examples/statistics/radial-bar/index.en.md create mode 100644 site/examples/statistics/radial-bar/index.zh.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 11b5c081b..da5c13eb8 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -20,6 +20,7 @@ import Gauge from './gauge'; import Liquid from './liquid'; import WordCloud from './wordCloud'; import Treemap from './treemap'; +import RadialBar from './radial-bar'; import CirclePacking from './circlePacking'; import Violin from './violin'; import BidirectionalBar from './bidirectional-bar'; @@ -76,6 +77,7 @@ export { Liquid, WordCloud, Treemap, + RadialBar, CirclePacking, Violin, BidirectionalBar, diff --git a/packages/plots/src/components/radial-bar/index.tsx b/packages/plots/src/components/radial-bar/index.tsx new file mode 100644 index 000000000..d59440388 --- /dev/null +++ b/packages/plots/src/components/radial-bar/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { RadialBarOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type RadialBarConfig = CommonConfig; + +const RadialBar = (props: RadialBarConfig) => ; + +export default RadialBar; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 0d4a5fe13..4c4c4e1c6 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -24,6 +24,7 @@ export type { GaugeOptions } from './plots/gauge'; export type { LiquidOptions } from './plots/liquid'; export type { WordCloudOptions } from './plots/wordCloud'; export type { TreemapOptions } from './plots/treemap'; +export type { RadialBarOptions } from './plots/radial-bar'; export type { CirclePackingOptions } from './plots/circlePacking'; export type { ViolinOptions } from './plots/violin'; export type { BidirectionalBarOptions } from './plots/bidirectional-bar'; @@ -57,6 +58,7 @@ import { Gauge } from './plots/gauge'; import { Liquid } from './plots/liquid'; import { WordCloud } from './plots/wordCloud'; import { Treemap } from './plots/treemap'; +import { RadialBar } from './plots/radial-bar'; import { CirclePacking } from './plots/circlePacking'; import { Violin } from './plots/violin'; import { BidirectionalBar } from './plots/bidirectional-bar'; @@ -89,6 +91,7 @@ export const Plots = { Liquid, WordCloud, Treemap, + RadialBar, CirclePacking, Violin, BidirectionalBar, diff --git a/packages/plots/src/core/plots/radial-bar/adaptor.ts b/packages/plots/src/core/plots/radial-bar/adaptor.ts new file mode 100644 index 000000000..aebdf866a --- /dev/null +++ b/packages/plots/src/core/plots/radial-bar/adaptor.ts @@ -0,0 +1,88 @@ +import { flow, set, pick, transformOptions, isNumber, get } from '../../utils'; +import { COORDIANTE_OPTIONS, mark } from '../../components'; +import type { Adaptor } from '../../types'; +import type { RadialBarOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * coordinate 配置 + * @param params + */ + const coordinate = (params: Params) => { + const { options } = params; + const { startAngle, maxAngle, coordinate, radius, innerRadius } = options; + // 默认开始角度是-90度 + const start = isNumber(startAngle) ? (startAngle / (2 * Math.PI)) * 360 : -90; + // 结束角度通过maxAngle来计算 + const end = isNumber(maxAngle) ? ((Number(maxAngle) + start) / 180) * Math.PI : Math.PI; + set(params, ['options', 'coordinate'], { + ...coordinate, + ...pick(options.coordinate, COORDIANTE_OPTIONS), + endAngle: end, + outerRadius: radius, + innerRadius, + startAngle: startAngle ?? -Math.PI / 2, + }); + + return params; + }; + + /** + * tooltip 配置 + * @param params + */ + const tooltip = (params) => { + const { options } = params; + const { tooltip, xField, yField } = options; + if (!tooltip) { + set(options, 'tooltip', { + title: false, + items: [ + (d) => { + return { name: d[xField], value: d[yField] }; + }, + ], + }); + } + return params; + }; + + /** + * background 配置 + * @param params + */ + const background = (params) => { + const { options } = params; + const { markBackground, children, scale, coordinate, xField } = options; + const domain = get(scale, 'y.domain', []); + if (markBackground) { + children.unshift({ + type: 'interval', + xField: xField, + yField: domain[domain.length - 1], + colorField: markBackground.color, + scale: { color: { type: 'identity' } }, + style: { + fillOpacity: markBackground.opacity, + fill: markBackground.color ? undefined : '#e0e4ee', // 默认用fill填满灰色背景 + }, + // 背景图需要填满整个圆 + coordinate: { + ...coordinate, + startAngle: -Math.PI / 2, + endAngle: (3 / 2) * Math.PI, + }, + animate: false, + }); + } + return params; + }; + + return flow(coordinate, tooltip, background, transformOptions, mark)(params); +} diff --git a/packages/plots/src/core/plots/radial-bar/index.ts b/packages/plots/src/core/plots/radial-bar/index.ts new file mode 100644 index 000000000..82368f71b --- /dev/null +++ b/packages/plots/src/core/plots/radial-bar/index.ts @@ -0,0 +1,51 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { RadialBarOptions } from './type'; + +export type { RadialBarOptions }; + +export class RadialBar extends Plot { + /** 图表类型 */ + public type = 'radial'; + + /** + * 获取 玉珏图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + children: [{ type: 'interval' }], + coordinate: { type: 'radial', innerRadius: 0.1, outerRadius: 1, endAngle: Math.PI }, + animate: { enter: { type: 'waveIn', duration: 800 } }, + axis: { + y: { + nice: true, + labelAutoHide: true, + labelAutoRotate: false, + }, + x: { + title: false, + nice: true, + labelAutoRotate: false, + labelAutoHide: { type: 'equidistance', cfg: { minGap: 6 } }, + }, + }, + }; + } + + /** + * 获取 玉珏图 默认配置 + */ + protected getDefaultOptions() { + return RadialBar.getDefaultOptions(); + } + + /** + * 玉珏图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/radial-bar/type.ts b/packages/plots/src/core/plots/radial-bar/type.ts new file mode 100644 index 000000000..2696e755d --- /dev/null +++ b/packages/plots/src/core/plots/radial-bar/type.ts @@ -0,0 +1,3 @@ +import type { BaseOptions, Options } from '../../types/common'; + +export type RadialBarOptions = Options & BaseOptions; diff --git a/site/examples/statistics/radial-bar/demo/apple-watch-activity.js b/site/examples/statistics/radial-bar/demo/apple-watch-activity.js new file mode 100644 index 000000000..f841ee822 --- /dev/null +++ b/site/examples/statistics/radial-bar/demo/apple-watch-activity.js @@ -0,0 +1,59 @@ +import { RadialBar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { + name: 'activity1', + percent: 2370, + color: '#1ad5de', + icon: 'https://gw.alipayobjects.com/zos/antfincdn/ck11Y6aRrz/shangjiantou.png', + }, + { + name: 'activity2', + percent: 800, + color: '#a0ff03', + icon: 'https://gw.alipayobjects.com/zos/antfincdn/zY2JB7hhrO/shuangjiantou.png', + }, + { + name: 'activity3', + percent: 650, + color: '#e90b3a', + icon: 'https://gw.alipayobjects.com/zos/antfincdn/%24qBxSxdK05/jiantou.png', + }, +]; + +const DemoRadialBar = () => { + const config = { + data, + xField: 'name', + yField: 'percent', + width: 400, + height: 244, + autoFit: false, + appendPadding: [50, 0, 50, 0], + // maxAngle: 90, //最大旋转角度, + radius: 1, + innerRadius: 0.2, + style: { + radius: 26, // 圆角 + }, + theme: 'dark', + colorField: 'name', + colorKey: 'color', + legend: false, + axis: { x: false, y: false }, + markBackground: { + opacity: 0.25, + color: 'color', + }, + scale: { + y: { + domain: [0, 12000], // 设定范围用于背景图的渲染获取最大值 + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radial-bar/demo/background.js b/site/examples/statistics/radial-bar/demo/background.js new file mode 100644 index 000000000..9031591d2 --- /dev/null +++ b/site/examples/statistics/radial-bar/demo/background.js @@ -0,0 +1,54 @@ +import { RadialBar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { name: 'X6', star: 297 }, + { name: 'G', star: 506 }, + { name: 'AVA', star: 805 }, + { name: 'G2Plot', star: 1478 }, + { name: 'L7', star: 2029 }, + { name: 'G6', star: 7100 }, + { name: 'F2', star: 7346 }, + { name: 'G2', star: 10178 }, +]; + +const DemoRadialBar = () => { + const config = { + data, + xField: 'name', + yField: 'star', + maxAngle: 350, + radius: 1, + innerRadius: 0.2, + tooltip: { + items: ['star'], + }, + legend:false, + axis: { + y: false, + }, + markBackground: { + opacity: 0.25, + }, + scale:{ + y: { + domain: [0, 12000], // 设定范围用于背景图的渲染获取最大值 + }, + }, + style: { + radius: 180, + fill: ({ star }) => { + if (star > 10000) { + return '#6349ec'; + } else if (star > 1000) { + return '#ff9300'; + } + return '#ff93a7'; + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radial-bar/demo/basic.js b/site/examples/statistics/radial-bar/demo/basic.js new file mode 100644 index 000000000..bbe518615 --- /dev/null +++ b/site/examples/statistics/radial-bar/demo/basic.js @@ -0,0 +1,32 @@ +import { RadialBar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + + +const data = [ + { name: 'X6', star: 297 }, + { name: 'G', star: 506 }, + { name: 'AVA', star: 805 }, + { name: 'G2Plot', star: 1478 }, + { name: 'L7', star: 2029 }, + { name: 'G6', star: 7100 }, + { name: 'F2', star: 7346 }, + { name: 'G2', star: 10178 }, +]; + +const DemoRadialBar = () => { + const config = { + data, + xField: 'name', + yField: 'star', + // maxAngle: 90, //最大旋转角度, + radius: 1, + innerRadius: 0.2, + tooltip: { + items:['star'] + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radial-bar/demo/color.js b/site/examples/statistics/radial-bar/demo/color.js new file mode 100644 index 000000000..38eacbbec --- /dev/null +++ b/site/examples/statistics/radial-bar/demo/color.js @@ -0,0 +1,42 @@ +import { RadialBar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { name: 'X6', star: 297 }, + { name: 'G', star: 506 }, + { name: 'AVA', star: 805 }, + { name: 'G2Plot', star: 1478 }, + { name: 'L7', star: 2029 }, + { name: 'G6', star: 7100 }, + { name: 'F2', star: 7346 }, + { name: 'G2', star: 10178 }, +]; + +const DemoRadialBar = () => { + const config = { + data, + xField: 'name', + yField: 'star', + maxAngle: 270, + radius: 0.8, + innerRadius: 0.2, + tooltip: { + items: ['star'], + }, + // colorField: 'star', // 会默认给颜色 + style: { + fill: ({ star }) => { + if (star > 10000) { + return '#36c361'; + } else if (star > 1000) { + return '#2194ff'; + } + return '#ff4d4f'; + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radial-bar/demo/grouped.js b/site/examples/statistics/radial-bar/demo/grouped.js new file mode 100644 index 000000000..a9bc549ad --- /dev/null +++ b/site/examples/statistics/radial-bar/demo/grouped.js @@ -0,0 +1,111 @@ +import { RadialBar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + + +const data = [ + { + "year": "1991", + "value": 3, + "type": "Lon" + }, + { + "year": "1992", + "value": 4, + "type": "Lon" + }, + { + "year": "1993", + "value": 3.5, + "type": "Lon" + }, + { + "year": "1994", + "value": 5, + "type": "Lon" + }, + { + "year": "1995", + "value": 4.9, + "type": "Lon" + }, + { + "year": "1996", + "value": 6, + "type": "Lon" + }, + { + "year": "1997", + "value": 7, + "type": "Lon" + }, + { + "year": "1998", + "value": 9, + "type": "Lon" + }, + { + "year": "1999", + "value": 13, + "type": "Lon" + }, + { + "year": "1991", + "value": 3, + "type": "Bor" + }, + { + "year": "1992", + "value": 4, + "type": "Bor" + }, + { + "year": "1993", + "value": 3.5, + "type": "Bor" + }, + { + "year": "1994", + "value": 5, + "type": "Bor" + }, + { + "year": "1995", + "value": 4.9, + "type": "Bor" + }, + { + "year": "1996", + "value": 6, + "type": "Bor" + }, + { + "year": "1997", + "value": 7, + "type": "Bor" + }, + { + "year": "1998", + "value": 9, + "type": "Bor" + }, + { + "year": "1999", + "value": 13, + "type": "Bor" + } +]; + +const DemoRadialBar = () => { + const config = { + data, + xField: 'year', + yField: 'value', + group: true, + maxAngle: 270, + colorField: 'type', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radial-bar/demo/line.js b/site/examples/statistics/radial-bar/demo/line.js new file mode 100644 index 000000000..5164492ad --- /dev/null +++ b/site/examples/statistics/radial-bar/demo/line.js @@ -0,0 +1,37 @@ +import { RadialBar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { term: 'Zombieland', count: 9 }, + { term: 'Wieners', count: 8 }, + { term: 'Toy Story', count: 8 }, + { term: 'trashkannon', count: 7 }, + { term: 'the GROWLERS', count: 6 }, + { term: 'mudweiser', count: 6 }, + { term: 'ThunderCats', count: 4 }, + { term: 'The Taqwacores - Motion Picture', count: 4 }, + { term: 'The Shawshank Redemption', count: 2 }, + { term: 'The Olivia Experiment', count: 1 }, +]; + +const DemoRadialBar = () => { + const config = { + data, + xField: 'term', + yField: 'count', + startAngle: Math.PI * 0.5, + maxAngle: 270, //最大旋转角度, + radius: 1, + innerRadius: 0.2, + legend: false, + axis: { y: false }, + tooltip: { + items: ['count'], + }, + sizeField: 10, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radial-bar/demo/meta.json b/site/examples/statistics/radial-bar/demo/meta.json new file mode 100644 index 000000000..fab7457b9 --- /dev/null +++ b/site/examples/statistics/radial-bar/demo/meta.json @@ -0,0 +1,66 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "玉珏图", + "en": "Radial-Bar plot" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*-1GkR6WftskAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "round-corner.js", + "title": { + "zh": "带圆角的玉珏图", + "en": "Radial-Bar plot with rounded corner" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*FmTOT68Ai_EAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "color.js", + "title": { + "zh": "带自定义颜色的玉珏图", + "en": "Radial-Bar plot with custom color" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/l6uP5%26MiT7/385e3f80-52ec-49e9-9dfe-bd447e63203f.png" + }, + { + "filename": "stacked.js", + "title": { + "zh": "堆叠玉珏图", + "en": "Stacked Radial-Bar plot" + }, + + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/tft60hEBvN/594d5cfc-8da0-441b-89dd-81eb4f5657b6.png" + }, + { + "filename": "grouped.js", + "title": { + "zh": "分组玉珏图", + "en": "Grouped Radial-Bar plot" + }, + + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/M2EJJVBmHE/8984eee5-da51-4afb-8e81-34a8aaab47c0.png" + }, + { + "filename": "background.js", + "title": { + "zh": "带柱子背景的玉珏图", + "en": "Radial-Bar plot with background" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/A2Ik7iu%26YW/519113a4-f42e-48b2-a75d-1021add83c30.png" + }, + { + "filename": "line.js", + "title": { + "zh": "线形玉珏图", + "en": "Radial-line plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_f5c722/afts/img/A*GC6wT4GQ-oMAAAAAAAAAAABkARQnAQ" + } + ] +} diff --git a/site/examples/statistics/radial-bar/demo/round-corner.js b/site/examples/statistics/radial-bar/demo/round-corner.js new file mode 100644 index 000000000..37cbff543 --- /dev/null +++ b/site/examples/statistics/radial-bar/demo/round-corner.js @@ -0,0 +1,35 @@ +import { RadialBar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + + +const data = [ + { name: 'X6', star: 297 }, + { name: 'G', star: 506 }, + { name: 'AVA', star: 805 }, + { name: 'G2Plot', star: 1478 }, + { name: 'L7', star: 2029 }, + { name: 'G6', star: 7100 }, + { name: 'F2', star: 7346 }, + { name: 'G2', star: 10178 }, +]; + +const DemoRadialBar = () => { + const config = { + data, + xField: 'name', + yField: 'star', + maxAngle: 90, + radius: 1, + innerRadius: 0.2, + style: { + radius:26, // 圆角 + }, + meta: { + y: { nice: true }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radial-bar/demo/stacked.js b/site/examples/statistics/radial-bar/demo/stacked.js new file mode 100644 index 000000000..2d76fb6ec --- /dev/null +++ b/site/examples/statistics/radial-bar/demo/stacked.js @@ -0,0 +1,111 @@ +import { RadialBar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + + +const data = [ + { + "year": "1991", + "value": 3, + "type": "Lon" + }, + { + "year": "1992", + "value": 4, + "type": "Lon" + }, + { + "year": "1993", + "value": 3.5, + "type": "Lon" + }, + { + "year": "1994", + "value": 5, + "type": "Lon" + }, + { + "year": "1995", + "value": 4.9, + "type": "Lon" + }, + { + "year": "1996", + "value": 6, + "type": "Lon" + }, + { + "year": "1997", + "value": 7, + "type": "Lon" + }, + { + "year": "1998", + "value": 9, + "type": "Lon" + }, + { + "year": "1999", + "value": 13, + "type": "Lon" + }, + { + "year": "1991", + "value": 3, + "type": "Bor" + }, + { + "year": "1992", + "value": 4, + "type": "Bor" + }, + { + "year": "1993", + "value": 3.5, + "type": "Bor" + }, + { + "year": "1994", + "value": 5, + "type": "Bor" + }, + { + "year": "1995", + "value": 4.9, + "type": "Bor" + }, + { + "year": "1996", + "value": 6, + "type": "Bor" + }, + { + "year": "1997", + "value": 7, + "type": "Bor" + }, + { + "year": "1998", + "value": 9, + "type": "Bor" + }, + { + "year": "1999", + "value": 13, + "type": "Bor" + } +]; + +const DemoRadialBar = () => { + const config = { + data, + xField: 'year', + yField: 'value', + stack: true, + maxAngle: 270, + colorField: 'type', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/radial-bar/index.en.md b/site/examples/statistics/radial-bar/index.en.md new file mode 100644 index 000000000..2e6859450 --- /dev/null +++ b/site/examples/statistics/radial-bar/index.en.md @@ -0,0 +1,4 @@ +--- +title: RadialBar +order: 21 +--- diff --git a/site/examples/statistics/radial-bar/index.zh.md b/site/examples/statistics/radial-bar/index.zh.md new file mode 100644 index 000000000..69c374d3c --- /dev/null +++ b/site/examples/statistics/radial-bar/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 玉珏图 +order: 21 +--- From cd80c884dc99d778f26c432ddf7fc249de57655d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8A=98=E6=9C=A8?= <1076849402@qq.com> Date: Mon, 20 Nov 2023 19:33:24 +0800 Subject: [PATCH 096/268] =?UTF-8?q?feat:=20=E5=9F=BA=E7=A1=80=E8=82=A1?= =?UTF-8?q?=E7=A5=A8=E5=9B=BE=20(#2192)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: basic stock * fix: remove default xField\yField * fix: type fix --- packages/plots/src/components/index.ts | 3 + packages/plots/src/components/stock/index.tsx | 10 +++ packages/plots/src/core/index.ts | 3 + .../plots/src/core/plots/stock/adaptor.ts | 82 +++++++++++++++++++ packages/plots/src/core/plots/stock/index.ts | 67 +++++++++++++++ packages/plots/src/core/plots/stock/type.ts | 17 ++++ site/examples/statistics/stock/demo/basic.js | 30 +++++++ .../statistics/stock/demo/custom-color.js | 33 ++++++++ site/examples/statistics/stock/demo/meta.json | 24 ++++++ site/examples/statistics/stock/index.en.md | 4 + site/examples/statistics/stock/index.zh.md | 4 + 11 files changed, 277 insertions(+) create mode 100644 packages/plots/src/components/stock/index.tsx create mode 100644 packages/plots/src/core/plots/stock/adaptor.ts create mode 100644 packages/plots/src/core/plots/stock/index.ts create mode 100644 packages/plots/src/core/plots/stock/type.ts create mode 100644 site/examples/statistics/stock/demo/basic.js create mode 100644 site/examples/statistics/stock/demo/custom-color.js create mode 100644 site/examples/statistics/stock/demo/meta.json create mode 100644 site/examples/statistics/stock/index.en.md create mode 100644 site/examples/statistics/stock/index.zh.md diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index da5c13eb8..72d995604 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -15,6 +15,7 @@ import Histogram from './histogram'; import Heatmap from './heatmap'; import Box from './box'; import Sankey from './sankey'; +import Stock from './stock'; import Bullet from './bullet'; import Gauge from './gauge'; import Liquid from './liquid'; @@ -38,6 +39,7 @@ export type { ScatterConfig } from './scatter'; export type { RadarConfig } from './radar'; export type { TinyLineConfig, TinyAreaConfig, TinyColumnConfig, TinyProgressConfig } from './tiny'; export type { RoseConfig } from './rose'; +export type { StockConfig } from './stock'; export type { WaterfallConfig } from './waterfall'; export type { HistogramConfig } from './histogram'; export type { HeatmapConfig } from './heatmap'; @@ -66,6 +68,7 @@ export { Scatter, Radar, Rose, + Stock, Tiny, Histogram, Waterfall, diff --git a/packages/plots/src/components/stock/index.tsx b/packages/plots/src/components/stock/index.tsx new file mode 100644 index 000000000..139e2ead3 --- /dev/null +++ b/packages/plots/src/components/stock/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { StockOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type StockConfig = CommonConfig; + +const StockChart = (props: StockConfig) => ; + +export default StockChart; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 4c4c4e1c6..7b074e1fa 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -8,6 +8,7 @@ export type { LineOptions } from './plots/line'; export type { PieOptions } from './plots/pie'; export type { ScatterOptions } from './plots/scatter'; export type { RadarOptions } from './plots/radar'; +export type { StockOptions } from './plots/stock'; export type { TinyLineOptions } from './plots/tiny-line'; export type { TinyAreaOptions } from './plots/tiny-area'; export type { TinyColumnOptions } from './plots/tiny-column'; @@ -42,6 +43,7 @@ import { Line } from './plots/line'; import { Pie } from './plots/pie'; import { Scatter } from './plots/scatter'; import { Radar } from './plots/radar'; +import { Stock } from './plots/stock'; import { TinyLine } from './plots/tiny-line'; import { TinyArea } from './plots/tiny-area'; import { TinyColumn } from './plots/tiny-column'; @@ -76,6 +78,7 @@ export const Plots = { Scatter, Radar, Rose, + Stock, TinyLine, TinyArea, TinyColumn, diff --git a/packages/plots/src/core/plots/stock/adaptor.ts b/packages/plots/src/core/plots/stock/adaptor.ts new file mode 100644 index 000000000..eecbfc08a --- /dev/null +++ b/packages/plots/src/core/plots/stock/adaptor.ts @@ -0,0 +1,82 @@ +import { set, flow, map, transformOptions } from '../../utils'; +import type { Adaptor } from '../../types'; +import type { StockOptions } from './type'; + +type Params = Adaptor; + +export const Y_FIELD_KEY = '__stock-range__'; + +export const TREND_FIELD = 'trend'; +export const TREND_UP = 'up'; +export const TREND_DOWN = 'down'; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + const transformData = (params: Params) => { + const { data, yField } = params.options; + + params.options.data = map(data, (item) => { + const obj = item && { ...item }; + if (Array.isArray(yField) && obj) { + const [open, close, high, low] = yField; + obj[TREND_FIELD] = obj[open] <= obj[close] ? TREND_UP : TREND_DOWN; + obj[Y_FIELD_KEY] = [obj[open], obj[close], obj[high], obj[low]]; + } + return obj; + }); + + return params; + }; + + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + const { options } = params; + const { xField, yField, fallingFill, risingFill } = options; + + const [open, close, high, low] = yField; + + params.options.children = map(params.options.children, (child, index) => { + const isShadow = index === 0; + + return { + ...child, + tooltip: { + title: (d) => (d[xField] instanceof Date ? d[xField].toLocaleString() : d[xField]), + items: [{ field: high }, { field: low }, { field: open }, { field: close }], + }, + encode: { + ...(child.encode || {}), + y: isShadow ? [high, low] : [open, close], + color: (d) => Math.sign(d[close] - d[open]), + }, + style: { + ...(child.style || {}), + lineWidth: isShadow ? 1 : 10, + }, + }; + }); + + delete options['yField']; + + params.options.legend = { + color: false, + }; + + if (fallingFill) { + set(params, 'options.scale.color.range[0]', fallingFill); + } + + if (risingFill) { + set(params, 'options.scale.color.range[2]', risingFill); + } + + return params; + }; + + return flow(transformData, init, transformOptions)(params); +} diff --git a/packages/plots/src/core/plots/stock/index.ts b/packages/plots/src/core/plots/stock/index.ts new file mode 100644 index 000000000..eb8f5e6c0 --- /dev/null +++ b/packages/plots/src/core/plots/stock/index.ts @@ -0,0 +1,67 @@ +import { Plot } from '../../base'; +import type { Adaptor } from '../../types'; +import { adaptor } from './adaptor'; +import { StockOptions } from './type'; + +export const DEFAULT_COLORS = ['#26a69a', '#999999', '#ef5350']; + +export type { StockOptions }; + +export class Stock extends Plot { + /** 图表类型 */ + public type = 'stock'; + + /** + * 获取 股票图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { + type: 'view', + scale: { + color: { + domain: [-1, 0, 1], + range: DEFAULT_COLORS, + }, + y: { nice: true }, + }, + children: [ + // shadow + { + type: 'link', + }, + // real body + { + type: 'link', + }, + ], + axis: { + x: { title: false, grid: false }, + y: { title: false, grid: true, gridLineDash: null }, + }, + animate: { enter: { type: 'scaleInY' } }, + interaction: { + tooltip: { + shared: true, + marker: false, + groupName: false, + crosshairs: true, + }, + }, + }; + } + + /** + * 获取 股票图 默认配置 + */ + protected getDefaultOptions() { + return Stock.getDefaultOptions(); + } + + /** + * 股票图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => Adaptor { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/stock/type.ts b/packages/plots/src/core/plots/stock/type.ts new file mode 100644 index 000000000..8de0a9cf4 --- /dev/null +++ b/packages/plots/src/core/plots/stock/type.ts @@ -0,0 +1,17 @@ +import type { Options } from '../../types/common'; + +export type StockOptions = Options & { + /** + * @title y 轴映射 + * @description range 【开盘价/收盘价/最高价/最低价】,设置一个指定 [open, close, high, low]【开盘价/收盘价/最高价/最低价】字段的数组 + */ + yField: [string, string, string, string]; + /** + * @title 上涨色 + */ + readonly risingFill?: string; + /** + * @title 下跌色 + */ + readonly fallingFill?: string; +}; diff --git a/site/examples/statistics/stock/demo/basic.js b/site/examples/statistics/stock/demo/basic.js new file mode 100644 index 000000000..4b2268a0a --- /dev/null +++ b/site/examples/statistics/stock/demo/basic.js @@ -0,0 +1,30 @@ +import React, { useState, useEffect } from 'react'; +import ReactDOM from 'react-dom'; +import { Stock } from '@ant-design/plots'; + +const DemoStock = () => { + const [data, setData] = useState([]); + + useEffect(() => { + asyncFetch(); + }, []); + + const asyncFetch = () => { + fetch('https://gw.alipayobjects.com/os/antfincdn/qtQ9nYfYJe/stock-data.json') + .then((response) => response.json()) + .then((json) => setData(json)) + .catch((error) => { + console.log('fetch data failed', error); + }); + }; + + const config = { + xField: 'date', + yField: ['open', 'close', 'high', 'low'], + data: data.map((i) => ({ ...i, date: new Date(i.trade_date) })), + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/stock/demo/custom-color.js b/site/examples/statistics/stock/demo/custom-color.js new file mode 100644 index 000000000..77bee3f36 --- /dev/null +++ b/site/examples/statistics/stock/demo/custom-color.js @@ -0,0 +1,33 @@ +import React, { useState, useEffect } from 'react'; +import ReactDOM from 'react-dom'; +import { Stock } from '@ant-design/plots'; + +const DemoStock = () => { + const [data, setData] = useState([]); + + useEffect(() => { + asyncFetch(); + }, []); + + const asyncFetch = () => { + fetch('https://gw.alipayobjects.com/os/antfincdn/qtQ9nYfYJe/stock-data.json') + .then((response) => response.json()) + .then((json) => setData(json)) + .catch((error) => { + console.log('fetch data failed', error); + }); + }; + + const config = { + xField: 'date', + yField: ['open', 'close', 'high', 'low'], + // 绿涨红跌 + fallingFill: '#ef5350', + risingFill: '#26a69a', + data: data.map((i) => ({ ...i, date: new Date(i.trade_date) })), + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/stock/demo/meta.json b/site/examples/statistics/stock/demo/meta.json new file mode 100644 index 000000000..99d47201c --- /dev/null +++ b/site/examples/statistics/stock/demo/meta.json @@ -0,0 +1,24 @@ +{ + "title": { + "zh": "股票图", + "en": "Stock" + }, + "demos": [ + { + "filename": "basic.js", + "title": { + "zh": "基础蜡烛图", + "en": "Basic candlestick plot" + }, + "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*-HIwQbCnfFUAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "custom-color.js", + "title": { + "zh": "自定义颜色:绿涨红跌", + "en": "Custom stock color" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/4EtM9REqIP/8edb0a9e-293e-4b87-bc61-d814e958acbd.png" + } + ] +} diff --git a/site/examples/statistics/stock/index.en.md b/site/examples/statistics/stock/index.en.md new file mode 100644 index 000000000..c0587d930 --- /dev/null +++ b/site/examples/statistics/stock/index.en.md @@ -0,0 +1,4 @@ +--- +title: Stock +order: 1 +--- diff --git a/site/examples/statistics/stock/index.zh.md b/site/examples/statistics/stock/index.zh.md new file mode 100644 index 000000000..3b185dfbf --- /dev/null +++ b/site/examples/statistics/stock/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 股票图 +order: 1 +--- From 9963be786a0c542033ba9b6c423d4a0990f396ce Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Mon, 20 Nov 2023 19:35:27 +0800 Subject: [PATCH 097/268] =?UTF-8?q?docs:=20=E4=BF=AE=E6=94=B9=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=E5=9C=B0=E5=9D=80=20(#2190)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: lkd01632719 --- site/examples/statistics/area/demo/meta.json | 8 ++++---- site/examples/statistics/bar/demo/meta.json | 2 +- site/examples/statistics/base/demo/meta.json | 6 +++--- site/examples/statistics/bidirectional-bar/demo/meta.json | 2 +- site/examples/statistics/column/demo/meta.json | 4 ++-- site/examples/statistics/dual-axes/demo/meta.json | 8 ++++---- site/examples/statistics/funnel/demo/meta.json | 4 ++-- site/examples/statistics/heatmap/demo/meta.json | 6 +++--- site/examples/statistics/histogram/demo/meta.json | 4 ++-- site/examples/statistics/line/demo/meta.json | 6 +++--- site/examples/statistics/pie/demo/meta.json | 6 +++--- site/examples/statistics/radar/demo/meta.json | 4 ++-- site/examples/statistics/scatter/demo/meta.json | 2 +- site/examples/statistics/tiny/demo/basic-progress.js | 2 +- site/examples/statistics/tiny/demo/meta.json | 6 +++--- site/examples/statistics/treemap/demo/meta.json | 2 +- 16 files changed, 36 insertions(+), 36 deletions(-) diff --git a/site/examples/statistics/area/demo/meta.json b/site/examples/statistics/area/demo/meta.json index 0af1ede60..e9dad0b2c 100644 --- a/site/examples/statistics/area/demo/meta.json +++ b/site/examples/statistics/area/demo/meta.json @@ -26,7 +26,7 @@ "zh": "堆叠面积图", "en": "Stacked Area Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*O3TaRpybBCgAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*vymgT7mCD2YAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "percentage-area.js", @@ -58,7 +58,7 @@ "zh": "彩条图", "en": "Stripe Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*HZ1BR6GS6U4AAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*2YiAT6WCb3oAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "streamgraph.js", @@ -66,7 +66,7 @@ "zh": "河流图", "en": "Streamgraph" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Vf-FQZH-5FMAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*bFN4S7PCH9gAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "range-spline-area.js", @@ -90,7 +90,7 @@ "zh": "差分面积图", "en": "Area Difference" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*CJn4T4_Rf98AAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ynkRQoVt2VAAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/bar/demo/meta.json b/site/examples/statistics/bar/demo/meta.json index 786dd6952..155894980 100644 --- a/site/examples/statistics/bar/demo/meta.json +++ b/site/examples/statistics/bar/demo/meta.json @@ -18,7 +18,7 @@ "zh": "自定义条形图 shape", "en": "Csutomize shape of bar plot" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/ZTl%26D3SI7D/fa6b9790-658e-4d7e-982e-57d9db8a12b8.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Cv1WRaNg5AEAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "stacked.js", diff --git a/site/examples/statistics/base/demo/meta.json b/site/examples/statistics/base/demo/meta.json index 69c4fbdba..13130df29 100644 --- a/site/examples/statistics/base/demo/meta.json +++ b/site/examples/statistics/base/demo/meta.json @@ -26,7 +26,7 @@ "zh": "矩行分面", "en": "Rect facet" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*xDR0QKhMLHQAAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*gfDVQ7anJCMAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "circle.js", @@ -34,7 +34,7 @@ "zh": "圆形分面", "en": "Facet Circle" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*Tsx5RJVrVtsAAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Mp6ET7Ctw3UAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "matrix-col.js", @@ -50,7 +50,7 @@ "zh": "重复矩阵", "en": "Repeat Matrix" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*We0gRJIdGYUAAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*nUQ-TK4x8AgAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/bidirectional-bar/demo/meta.json b/site/examples/statistics/bidirectional-bar/demo/meta.json index 11ca371c0..47a4feafe 100644 --- a/site/examples/statistics/bidirectional-bar/demo/meta.json +++ b/site/examples/statistics/bidirectional-bar/demo/meta.json @@ -10,7 +10,7 @@ "zh": "对称条形图", "en": "Bidirectional Bar Chart" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*9wdPQIJyXdoAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*19M9So-1OpoAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "layout.js", diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index 842b5357b..7fd4fcebc 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -74,7 +74,7 @@ "zh": "分组条形图", "en": "Dodged Bar Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*FrshQpaS4f0AAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*uNxwQrz8Bh4AAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "stacked.js", @@ -130,7 +130,7 @@ "zh": "百分比柱状图", "en": "Percent Column plot" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*fFEqTrpsNQQAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*3FTARIxIDHMAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/dual-axes/demo/meta.json b/site/examples/statistics/dual-axes/demo/meta.json index 319b183d9..fa064fafb 100644 --- a/site/examples/statistics/dual-axes/demo/meta.json +++ b/site/examples/statistics/dual-axes/demo/meta.json @@ -114,7 +114,7 @@ "zh": "堆叠柱线图表", "en": "Stacked column line" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*R2j7SIpYvDsAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*q42bQKI2imQAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "custom-stacked-column-line.js", @@ -122,7 +122,7 @@ "zh": "堆叠柱线图表-自定义样式", "en": "Custom stacked column line" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*RCl4Tr-4TqwAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*QPdnRqb4QH8AAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "stacked-percent-column-line.js", @@ -130,7 +130,7 @@ "zh": "百分比堆叠柱线图表", "en": "stacked-percent-column-line" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*w_VfQ5sDvS0AAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*0mcySZJTJ5sAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "stacked-column-multi-line.js", @@ -138,7 +138,7 @@ "zh": "堆叠柱线图表-显示多折线", "en": "Stacked column multi line" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*I_bmR6CZJScAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*1UmPSZbc-XAAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "grouped-column-line.js", diff --git a/site/examples/statistics/funnel/demo/meta.json b/site/examples/statistics/funnel/demo/meta.json index 001d4442a..658433753 100644 --- a/site/examples/statistics/funnel/demo/meta.json +++ b/site/examples/statistics/funnel/demo/meta.json @@ -26,7 +26,7 @@ "zh": "对比漏斗图", "en": "Mirror Funnel" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ejYqRJVJ12gAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*kITtSp7xbroAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "transpose.js", @@ -34,7 +34,7 @@ "zh": "转化漏斗图-转置", "en": "Annotation Funnel transpose" }, - "screenshot": "https://gw.alicdn.com/tfs/TB1EgtsuuT2gK0jSZFvXXXnFXXa-958-591.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*q59UR6L1gMQAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/heatmap/demo/meta.json b/site/examples/statistics/heatmap/demo/meta.json index 0013883f2..c47f35ff1 100644 --- a/site/examples/statistics/heatmap/demo/meta.json +++ b/site/examples/statistics/heatmap/demo/meta.json @@ -10,7 +10,7 @@ "zh": "热力形状大小映射", "en": "Heatmap plot shape size mapping" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*H1vrQbPFskMAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*oaJCT5yVPRsAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "shape.js", @@ -18,7 +18,7 @@ "zh": "热力形状图", "en": "Shape heatmap plot" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*ZG36SowgMVYAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ztgPRrmeh84AAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "cell-aggregated.js", @@ -26,7 +26,7 @@ "zh": "聚合热力图", "en": "Aggregated Heatmap" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*Wk4zR40uQesAAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ru0HSZ6RiCsAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/histogram/demo/meta.json b/site/examples/statistics/histogram/demo/meta.json index d23c253f5..43eedc408 100644 --- a/site/examples/statistics/histogram/demo/meta.json +++ b/site/examples/statistics/histogram/demo/meta.json @@ -10,7 +10,7 @@ "zh": "直方图", "en": "Histogram" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*sE4kQYzbhS8AAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*yTCIRruhfOoAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "binx-color.js", @@ -26,7 +26,7 @@ "zh": "直方图范围刻度", "en": "Bin histogram plot" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*WTP6S6bzkpsAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*3Q40QKcUIfIAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/line/demo/meta.json b/site/examples/statistics/line/demo/meta.json index 8a06e8cd8..69194fcff 100644 --- a/site/examples/statistics/line/demo/meta.json +++ b/site/examples/statistics/line/demo/meta.json @@ -10,7 +10,7 @@ "zh": "基础折线图", "en": "Basic line plot" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/aiERL4ey%24U/08d95f7b-46cb-4bfd-89b2-be36343d44a1.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*N1NWR7N-BDsAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "line-var-size.js", @@ -18,7 +18,7 @@ "zh": "变宽折线图", "en": "Var Size Line Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*pWrERLZIMyQAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Y6_5RoRIM3kAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "connect-nulls.js", @@ -66,7 +66,7 @@ "zh": "文本标记的折线图", "en": "Line, Text Annotation" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*pQq2S7Ns2MUAAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*QQesT7AIqVgAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "slider.js", diff --git a/site/examples/statistics/pie/demo/meta.json b/site/examples/statistics/pie/demo/meta.json index 68cf58dd9..313a7d360 100644 --- a/site/examples/statistics/pie/demo/meta.json +++ b/site/examples/statistics/pie/demo/meta.json @@ -10,7 +10,7 @@ "zh": "基础饼图", "en": "Basic pie plot" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*wmldRZZj9lIAAAAAAAAAAABkARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*5GMIRJsMVKYAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "outer-label.js", @@ -18,7 +18,7 @@ "zh": "饼图 - 外部图形标签", "en": "Pie plot - outer label" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*ZztJQa4RLwoAAAAAAAAAAABkARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*1PBjT7ScyuwAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "spider-label.js", @@ -26,7 +26,7 @@ "zh": "饼图 - 蜘蛛布局标签", "en": "Pie plot - spider label" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*QyXPRK-URmUAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*nMd3TYVB3_wAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "custom-label.js", diff --git a/site/examples/statistics/radar/demo/meta.json b/site/examples/statistics/radar/demo/meta.json index bc2e8699e..6f842cca9 100644 --- a/site/examples/statistics/radar/demo/meta.json +++ b/site/examples/statistics/radar/demo/meta.json @@ -10,7 +10,7 @@ "zh": "基础雷达图", "en": "Basic Radar" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*W-b2QoNhip0AAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*okGTT7D7fBEAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "radar.js", @@ -18,7 +18,7 @@ "zh": "雷达图(一般极坐标 polar)", "en": "Radar (coordinate polar)" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*-xcxS7E8sKcAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*6QupRa5exboAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "parallel-radar.js", diff --git a/site/examples/statistics/scatter/demo/meta.json b/site/examples/statistics/scatter/demo/meta.json index ce121448b..3d3b4107b 100644 --- a/site/examples/statistics/scatter/demo/meta.json +++ b/site/examples/statistics/scatter/demo/meta.json @@ -89,7 +89,7 @@ "zh": "聚合气泡图", "en": "Aggregated Bubble Chart" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*49cUTYAB3HcAAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*TXB6R7tfCOUAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "point-dot.js", diff --git a/site/examples/statistics/tiny/demo/basic-progress.js b/site/examples/statistics/tiny/demo/basic-progress.js index f26222295..a4ceef975 100644 --- a/site/examples/statistics/tiny/demo/basic-progress.js +++ b/site/examples/statistics/tiny/demo/basic-progress.js @@ -10,7 +10,7 @@ const DemoProgress = () => { height: 60, autoFit: false, percent: progress, - color: ['#f3cbb1', '#a0ff03'], + color: ['#0f0f0f', '#85f231'], annotations: [ { type: 'text', diff --git a/site/examples/statistics/tiny/demo/meta.json b/site/examples/statistics/tiny/demo/meta.json index 2462f529b..b27003a08 100644 --- a/site/examples/statistics/tiny/demo/meta.json +++ b/site/examples/statistics/tiny/demo/meta.json @@ -18,7 +18,7 @@ "zh": "带辅助信息的迷你面积图", "en": "Tiny area plot with annotations" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*0zwrR62OaHQAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*4DlNQrsCYZAAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "filled-area.js", @@ -34,7 +34,7 @@ "zh": "迷你柱形图", "en": "tiny column plot" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*tLNqQpXbZWgAAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*AHtKS7goLgkAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "column-annotation.js", @@ -42,7 +42,7 @@ "zh": "带辅助线的迷你柱形图", "en": "Tiny column plot with annotation" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*mVxXQZLTI8UAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*SucISYgPzscAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "basic-line.js", diff --git a/site/examples/statistics/treemap/demo/meta.json b/site/examples/statistics/treemap/demo/meta.json index 838928791..ac07c5713 100644 --- a/site/examples/statistics/treemap/demo/meta.json +++ b/site/examples/statistics/treemap/demo/meta.json @@ -10,7 +10,7 @@ "zh": "矩阵树图", "en": "Treemap Chart" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_f5c722/afts/img/A*Ob1jSbCUl8cAAAAAAAAAAABkARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*T2zHS6J1cGMAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "circlePacking.js", From 884bad691e04b3cb7205026db39002228d3c307a Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:25:13 +0800 Subject: [PATCH 098/268] docs: special plot (#2193) --- packages/plots/src/core/plots/liquid/type.ts | 1 - .../plots/src/core/plots/radar/adaptor.ts | 4 +- packages/plots/src/core/plots/sankey/type.ts | 2 +- packages/plots/src/core/plots/venn/type.ts | 4 +- packages/plots/src/core/types/common.ts | 4 -- site/.dumirc.ts | 20 ++++-- site/docs/options/plots/component/axis.zh.md | 2 + site/docs/options/plots/palette.en.md | 2 +- site/docs/options/plots/palette.zh.md | 2 +- site/docs/options/plots/special/bar.en.md | 6 ++ site/docs/options/plots/special/bar.zh.md | 29 +++++++++ .../plots/special/bidirectional-bar.en.md | 6 ++ .../plots/special/bidirectional-bar.zh.md | 17 ++++++ site/docs/options/plots/special/box.en.md | 6 ++ site/docs/options/plots/special/box.zh.md | 41 +++++++++++++ site/docs/options/plots/special/bullet.en.md | 6 ++ site/docs/options/plots/special/bullet.zh.md | 61 +++++++++++++++++++ site/docs/options/plots/special/column.en.md | 6 ++ site/docs/options/plots/special/column.zh.md | 30 +++++++++ site/docs/options/plots/special/funnel.en.md | 6 ++ site/docs/options/plots/special/funnel.zh.md | 16 +++++ site/docs/options/plots/special/heatmap.en.md | 6 ++ site/docs/options/plots/special/heatmap.zh.md | 10 +++ .../options/plots/special/histogram.en.md | 6 ++ .../options/plots/special/histogram.zh.md | 22 +++++++ site/docs/options/plots/special/liquid.en.md | 6 ++ site/docs/options/plots/special/liquid.zh.md | 10 +++ site/docs/options/plots/special/pie.en.md | 6 ++ site/docs/options/plots/special/pie.zh.md | 23 +++++++ site/docs/options/plots/special/radar.en.md | 6 ++ site/docs/options/plots/special/radar.zh.md | 10 +++ .../options/plots/special/tiny-progress.en.md | 6 ++ .../options/plots/special/tiny-progress.zh.md | 17 ++++++ .../options/plots/special/tiny-ring.en.md | 6 ++ .../options/plots/special/tiny-ring.zh.md | 23 +++++++ site/docs/options/plots/special/violin.en.md | 6 ++ site/docs/options/plots/special/violin.zh.md | 10 +++ .../options/plots/special/waterfall.en.md | 6 ++ .../options/plots/special/waterfall.zh.md | 16 +++++ site/examples/statistics/column/demo/color.js | 14 ++--- 40 files changed, 455 insertions(+), 25 deletions(-) create mode 100644 site/docs/options/plots/special/bar.en.md create mode 100644 site/docs/options/plots/special/bar.zh.md create mode 100644 site/docs/options/plots/special/bidirectional-bar.en.md create mode 100644 site/docs/options/plots/special/bidirectional-bar.zh.md create mode 100644 site/docs/options/plots/special/box.en.md create mode 100644 site/docs/options/plots/special/box.zh.md create mode 100644 site/docs/options/plots/special/bullet.en.md create mode 100644 site/docs/options/plots/special/bullet.zh.md create mode 100644 site/docs/options/plots/special/column.en.md create mode 100644 site/docs/options/plots/special/column.zh.md create mode 100644 site/docs/options/plots/special/funnel.en.md create mode 100644 site/docs/options/plots/special/funnel.zh.md create mode 100644 site/docs/options/plots/special/heatmap.en.md create mode 100644 site/docs/options/plots/special/heatmap.zh.md create mode 100644 site/docs/options/plots/special/histogram.en.md create mode 100644 site/docs/options/plots/special/histogram.zh.md create mode 100644 site/docs/options/plots/special/liquid.en.md create mode 100644 site/docs/options/plots/special/liquid.zh.md create mode 100644 site/docs/options/plots/special/pie.en.md create mode 100644 site/docs/options/plots/special/pie.zh.md create mode 100644 site/docs/options/plots/special/radar.en.md create mode 100644 site/docs/options/plots/special/radar.zh.md create mode 100644 site/docs/options/plots/special/tiny-progress.en.md create mode 100644 site/docs/options/plots/special/tiny-progress.zh.md create mode 100644 site/docs/options/plots/special/tiny-ring.en.md create mode 100644 site/docs/options/plots/special/tiny-ring.zh.md create mode 100644 site/docs/options/plots/special/violin.en.md create mode 100644 site/docs/options/plots/special/violin.zh.md create mode 100644 site/docs/options/plots/special/waterfall.en.md create mode 100644 site/docs/options/plots/special/waterfall.zh.md diff --git a/packages/plots/src/core/plots/liquid/type.ts b/packages/plots/src/core/plots/liquid/type.ts index b97ad708b..b78792d18 100644 --- a/packages/plots/src/core/plots/liquid/type.ts +++ b/packages/plots/src/core/plots/liquid/type.ts @@ -1,6 +1,5 @@ import type { Options } from '../../types/common'; export type LiquidOptions = Omit & { - data: number; percent?: boolean; }; diff --git a/packages/plots/src/core/plots/radar/adaptor.ts b/packages/plots/src/core/plots/radar/adaptor.ts index c0ce28ed5..a0b4ffb25 100644 --- a/packages/plots/src/core/plots/radar/adaptor.ts +++ b/packages/plots/src/core/plots/radar/adaptor.ts @@ -1,4 +1,4 @@ -import { flow, transformOptions, get } from '../../utils'; +import { flow, transformOptions, get, set } from '../../utils'; import { coordinate } from '../../components'; import type { Adaptor } from '../../types'; @@ -15,7 +15,7 @@ export function adaptor(params: Params) { * 图表差异化处理 */ const init = (params: Params) => { - params.options.coordinate = { type: get(params, 'options.coordinateType', 'polar') }; + set(params, 'options.coordinate', { type: get(params, 'options.coordinateType', 'polar') }); return params; }; diff --git a/packages/plots/src/core/plots/sankey/type.ts b/packages/plots/src/core/plots/sankey/type.ts index b72fe5504..638c1e161 100644 --- a/packages/plots/src/core/plots/sankey/type.ts +++ b/packages/plots/src/core/plots/sankey/type.ts @@ -1,3 +1,3 @@ -import type { Options, BaseOptions } from '../../types/common'; +import type { Options } from '../../types/common'; export type SankeyOptions = Options; diff --git a/packages/plots/src/core/plots/venn/type.ts b/packages/plots/src/core/plots/venn/type.ts index 002c6a72d..795baa430 100644 --- a/packages/plots/src/core/plots/venn/type.ts +++ b/packages/plots/src/core/plots/venn/type.ts @@ -1,6 +1,6 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type VennOptions = Options & BaseOptions; +export type VennOptions = Options; export enum DefaultTransformKey { color = 'key', diff --git a/packages/plots/src/core/types/common.ts b/packages/plots/src/core/types/common.ts index 97496c540..c3596bcd3 100644 --- a/packages/plots/src/core/types/common.ts +++ b/packages/plots/src/core/types/common.ts @@ -70,10 +70,6 @@ export type ArcBaseOptions = { * @title 角度映射字段 */ readonly angleField: string; - /** - * @title 颜色映射字段 - */ - readonly colorField: string; /** * @title 饼图半径 */ diff --git a/site/.dumirc.ts b/site/.dumirc.ts index bb832e8c5..21460f89b 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -68,10 +68,10 @@ export default defineConfig({ { slug: 'options/plots/component', title: { - zh: '组件 - Component', + zh: '图表组件 - Component', en: 'Component', }, - order: 9, + order: 2, }, { slug: 'options/plots/label', @@ -79,7 +79,7 @@ export default defineConfig({ zh: '数据标签 - Label', en: 'Label', }, - order: 10, + order: 3, }, { @@ -88,7 +88,7 @@ export default defineConfig({ zh: '动画 - Animation', en: 'Animation', }, - order: 11, + order: 4, }, { slug: 'options/plots/interaction', @@ -96,7 +96,7 @@ export default defineConfig({ zh: '交互 - Interaction', en: 'Interaction', }, - order: 12, + order: 5, }, { slug: 'options/plots/theme', @@ -104,7 +104,15 @@ export default defineConfig({ zh: '主题 - Theme', en: 'Theme', }, - order: 16, + order: 6, + }, + { + slug: 'options/plots/special', + title: { + zh: '专有配置 - Specal Plot', + en: 'Specal Plot', + }, + order: 10, }, ], examples: [ diff --git a/site/docs/options/plots/component/axis.zh.md b/site/docs/options/plots/component/axis.zh.md index cb39f8f42..9b44c735f 100644 --- a/site/docs/options/plots/component/axis.zh.md +++ b/site/docs/options/plots/component/axis.zh.md @@ -16,6 +16,8 @@ const config = { ## 选项 +item + ### 标题 | 属性 | 描述 | 类型 | 默认值 | diff --git a/site/docs/options/plots/palette.en.md b/site/docs/options/plots/palette.en.md index ed2e4f1b0..d02625fef 100644 --- a/site/docs/options/plots/palette.en.md +++ b/site/docs/options/plots/palette.en.md @@ -1,6 +1,6 @@ --- title: Palette -order: 15 +order: 8 --- diff --git a/site/docs/options/plots/palette.zh.md b/site/docs/options/plots/palette.zh.md index c3c6b6345..c574c9255 100644 --- a/site/docs/options/plots/palette.zh.md +++ b/site/docs/options/plots/palette.zh.md @@ -1,6 +1,6 @@ --- title: 色板 - Palette -order: 15 +order: 8 --- G2 提供了一些内置的色板,可以直接使用,并支持 [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic)的色板。 diff --git a/site/docs/options/plots/special/bar.en.md b/site/docs/options/plots/special/bar.en.md new file mode 100644 index 000000000..248b363a8 --- /dev/null +++ b/site/docs/options/plots/special/bar.en.md @@ -0,0 +1,6 @@ +--- +title: Bar +order: 0 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/bar.zh.md b/site/docs/options/plots/special/bar.zh.md new file mode 100644 index 000000000..cf97f80ba --- /dev/null +++ b/site/docs/options/plots/special/bar.zh.md @@ -0,0 +1,29 @@ +--- +title: Bar +order: 0 +--- + +#### markBackground + +**optional** *BarOptions* + +mark 背景配置 + +```ts +{ + scale: { + y: { + domain: [0, 200] + } + }, + markBackground: { + style: { + fill: '#eee' + } + }, +} +``` + +示例: + + diff --git a/site/docs/options/plots/special/bidirectional-bar.en.md b/site/docs/options/plots/special/bidirectional-bar.en.md new file mode 100644 index 000000000..0ce46eb6b --- /dev/null +++ b/site/docs/options/plots/special/bidirectional-bar.en.md @@ -0,0 +1,6 @@ +--- +title: BidirectionalBar +order: 3 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/bidirectional-bar.zh.md b/site/docs/options/plots/special/bidirectional-bar.zh.md new file mode 100644 index 000000000..16eef1797 --- /dev/null +++ b/site/docs/options/plots/special/bidirectional-bar.zh.md @@ -0,0 +1,17 @@ +--- +title: BidirectionalBar +order: 3 +--- + +#### yField + +**optional** *string[]* + +Y 轴字段 + + +#### layout + +**optional** *vertical | horizontal* **default** *vertical* + +布局 diff --git a/site/docs/options/plots/special/box.en.md b/site/docs/options/plots/special/box.en.md new file mode 100644 index 000000000..5600d1c24 --- /dev/null +++ b/site/docs/options/plots/special/box.en.md @@ -0,0 +1,6 @@ +--- +title: Box +order: 4 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/box.zh.md b/site/docs/options/plots/special/box.zh.md new file mode 100644 index 000000000..bfcace88c --- /dev/null +++ b/site/docs/options/plots/special/box.zh.md @@ -0,0 +1,41 @@ +--- +title: Box +order: 4 +--- + +#### boxType + +**optional** *boxplot | box* **default** *box* + + +Box` 图形是用来绘制箱线图(boxplot)又叫盒须图、盒式图,通常用来展示一组数据分布情况的统计图,一般包括几种数据:`最小值`、`下四分位数`、`中位数`、`上四分位数`、`最大值`,另外可以结合 `point` mark 绘制异常点数据。 + +box + +Box 特殊的一点在于 `y` 通道对应的数据是一组统计数据的数组,最后会将数据映射为箱线图所需求的 14 个点集合。 + +```text +/** + * + * p0 p2 p1 + * ──────────┬────────── + * │ + * │ + * │ + * │ p3 + * p4 ┌─────────┴──────────┐ p5 + * │ │ + * │ │ + * p8 ├────────────────────┤ p9 + * │ │ + * │ p10 │ + * p7 └─────────┬──────────┘ p6 + * │ + * │ + * │ + * ───────────┴─────────── + * p12 p11 p13 + */ +``` + +更多的案例,可以查看[图表示例](/examples)页面。 diff --git a/site/docs/options/plots/special/bullet.en.md b/site/docs/options/plots/special/bullet.en.md new file mode 100644 index 000000000..eeb947613 --- /dev/null +++ b/site/docs/options/plots/special/bullet.en.md @@ -0,0 +1,6 @@ +--- +title: Bullet +order: 5 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/bullet.zh.md b/site/docs/options/plots/special/bullet.zh.md new file mode 100644 index 000000000..45af2eb1b --- /dev/null +++ b/site/docs/options/plots/special/bullet.zh.md @@ -0,0 +1,61 @@ +--- +title: Bullet +order: 5 +--- + +#### measureField + +**required** _string_ + +使用数据条的长度,实际数值的设置字段,表示实际数值。 + +#### rangeField + +**required** _string_ + +使用背景色条的长度的设置字段,表示区间范围。 + +#### targetField + +**required** _string_ + +使用测量标记的刻度轴位置的设置字段,表示目标值。 + +#### layout + +**optional** _'horizontal' | 'vertical'_ _default:_ 'horizontal' + +表示子弹图方向。 + + +#### color + +**optional** _object_ + +设置子弹图各图形 color 属性。 + +| 细分配置 | 类型 | 功能描述 | 默认配置 | +| -------- | ----------- | ------------ | -------- | +| ranges | _string\|string[]_ | 区间背景颜色 | 无 | +| measures | _string\|string[]_ | 实际值颜色 | 无 | +| target | _string\|string[]_ | 目标值颜色 | 无 | + + +#### range + +**required** _BulletOptions_ + +range 配置 + +#### measure + +**required** _BulletOptions_ + +measure 配置 + + +#### target + +**required** _BulletOptions_ + +target 配置 diff --git a/site/docs/options/plots/special/column.en.md b/site/docs/options/plots/special/column.en.md new file mode 100644 index 000000000..808fceb74 --- /dev/null +++ b/site/docs/options/plots/special/column.en.md @@ -0,0 +1,6 @@ +--- +title: Column +order: 1 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/column.zh.md b/site/docs/options/plots/special/column.zh.md new file mode 100644 index 000000000..2d41f06d9 --- /dev/null +++ b/site/docs/options/plots/special/column.zh.md @@ -0,0 +1,30 @@ +--- +title: Column +order: 1 +--- + + +#### markBackground + +**optional** *ColumnOptions* + +mark 背景配置 + +```ts +{ + scale: { + y: { + domain: [0, 0.5] + } + }, + markBackground: { + style: { + fill: '#eee' + } + }, +} +``` + +示例: + + diff --git a/site/docs/options/plots/special/funnel.en.md b/site/docs/options/plots/special/funnel.en.md new file mode 100644 index 000000000..96fb3a328 --- /dev/null +++ b/site/docs/options/plots/special/funnel.en.md @@ -0,0 +1,6 @@ +--- +title: Funnel +order: 6 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/funnel.zh.md b/site/docs/options/plots/special/funnel.zh.md new file mode 100644 index 000000000..07d481c10 --- /dev/null +++ b/site/docs/options/plots/special/funnel.zh.md @@ -0,0 +1,16 @@ +--- +title: Funnel +order: 6 +--- + +#### compareField + +**optional** _string_ + +对比字段。声明此字段时会自动渲染为对比漏斗图 + +#### isTransposed + +**optional** _boolean_ _default:_ `false` + +是否转置。 diff --git a/site/docs/options/plots/special/heatmap.en.md b/site/docs/options/plots/special/heatmap.en.md new file mode 100644 index 000000000..fd754a95c --- /dev/null +++ b/site/docs/options/plots/special/heatmap.en.md @@ -0,0 +1,6 @@ +--- +title: Heatmap +order: 7 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/heatmap.zh.md b/site/docs/options/plots/special/heatmap.zh.md new file mode 100644 index 000000000..f7bb46d03 --- /dev/null +++ b/site/docs/options/plots/special/heatmap.zh.md @@ -0,0 +1,10 @@ +--- +title: Heatmap +order: 7 +--- + +#### mark + +**optional** _string_ + +热力图类型,'point' | 'cell' diff --git a/site/docs/options/plots/special/histogram.en.md b/site/docs/options/plots/special/histogram.en.md new file mode 100644 index 000000000..aec32c3f5 --- /dev/null +++ b/site/docs/options/plots/special/histogram.en.md @@ -0,0 +1,6 @@ +--- +title: Histogram +order: 8 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/histogram.zh.md b/site/docs/options/plots/special/histogram.zh.md new file mode 100644 index 000000000..9f5809755 --- /dev/null +++ b/site/docs/options/plots/special/histogram.zh.md @@ -0,0 +1,22 @@ +--- +title: Histogram +order: 8 +--- + +#### binField + +**required** _string_ + +设置直方图绘制 (进行分箱) 的字段。 + +#### binWidth + +**optional** _string_ + +设置直方图的分箱宽度,binWidth 影响直方图分成多少箱, 不能与 binNumber 一起使用。 + +#### binNumber + +**optional** _number_ + +设置直方图的分箱数量,binNumber 影响直方图分箱后每个柱子的宽度。 diff --git a/site/docs/options/plots/special/liquid.en.md b/site/docs/options/plots/special/liquid.en.md new file mode 100644 index 000000000..4d582d5a4 --- /dev/null +++ b/site/docs/options/plots/special/liquid.en.md @@ -0,0 +1,6 @@ +--- +title: Liquid +order: 9 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/liquid.zh.md b/site/docs/options/plots/special/liquid.zh.md new file mode 100644 index 000000000..14e5e6148 --- /dev/null +++ b/site/docs/options/plots/special/liquid.zh.md @@ -0,0 +1,10 @@ +--- +title: Liquid +order: 9 +--- + +#### percent + +**required** _number_ + +指标比例数据 [0-1]。 diff --git a/site/docs/options/plots/special/pie.en.md b/site/docs/options/plots/special/pie.en.md new file mode 100644 index 000000000..4f99140bf --- /dev/null +++ b/site/docs/options/plots/special/pie.en.md @@ -0,0 +1,6 @@ +--- +title: Pie +order: 2 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/pie.zh.md b/site/docs/options/plots/special/pie.zh.md new file mode 100644 index 000000000..a7e3b60d7 --- /dev/null +++ b/site/docs/options/plots/special/pie.zh.md @@ -0,0 +1,23 @@ +--- +title: Pie +order: 2 +--- + +#### angleField + +**optional** *string* + +角度映射字段 + + +#### radius + +**optional** *number* **default** *1* + +饼图半径[0~1] + +#### innerRadius + +**optional** *number* + +饼图内半径 diff --git a/site/docs/options/plots/special/radar.en.md b/site/docs/options/plots/special/radar.en.md new file mode 100644 index 000000000..5ac040aec --- /dev/null +++ b/site/docs/options/plots/special/radar.en.md @@ -0,0 +1,6 @@ +--- +title: Radar +order: 10 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/radar.zh.md b/site/docs/options/plots/special/radar.zh.md new file mode 100644 index 000000000..a68af8e79 --- /dev/null +++ b/site/docs/options/plots/special/radar.zh.md @@ -0,0 +1,10 @@ +--- +title: Radar +order: 10 +--- + +#### coordinateType + +**required** _radar | polar_ + +坐标系类型 diff --git a/site/docs/options/plots/special/tiny-progress.en.md b/site/docs/options/plots/special/tiny-progress.en.md new file mode 100644 index 000000000..d750563bf --- /dev/null +++ b/site/docs/options/plots/special/tiny-progress.en.md @@ -0,0 +1,6 @@ +--- +title: TinyProgress +order: 11 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/tiny-progress.zh.md b/site/docs/options/plots/special/tiny-progress.zh.md new file mode 100644 index 000000000..eb091e9be --- /dev/null +++ b/site/docs/options/plots/special/tiny-progress.zh.md @@ -0,0 +1,17 @@ +--- +title: TinyProgress +order: 11 +--- + +#### percent + +**required** _number_ + +进度 + + +#### color + +**required** _string[]_ + +配色 diff --git a/site/docs/options/plots/special/tiny-ring.en.md b/site/docs/options/plots/special/tiny-ring.en.md new file mode 100644 index 000000000..1d5539811 --- /dev/null +++ b/site/docs/options/plots/special/tiny-ring.en.md @@ -0,0 +1,6 @@ +--- +title: TinyRing +order: 12 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/tiny-ring.zh.md b/site/docs/options/plots/special/tiny-ring.zh.md new file mode 100644 index 000000000..7b2df923d --- /dev/null +++ b/site/docs/options/plots/special/tiny-ring.zh.md @@ -0,0 +1,23 @@ +--- +title: TinyRing +order: 12 +--- + +#### percent + +**required** _number_ + +进度 + + +#### color + +**required** _string[]_ + +配色 + +#### radius + +**required** _number_ **default** _0.8_ + +内径[0~1] diff --git a/site/docs/options/plots/special/violin.en.md b/site/docs/options/plots/special/violin.en.md new file mode 100644 index 000000000..20fea11c0 --- /dev/null +++ b/site/docs/options/plots/special/violin.en.md @@ -0,0 +1,6 @@ +--- +title: Violin +order: 13 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/violin.zh.md b/site/docs/options/plots/special/violin.zh.md new file mode 100644 index 000000000..e0bcd6b9f --- /dev/null +++ b/site/docs/options/plots/special/violin.zh.md @@ -0,0 +1,10 @@ +--- +title: Violin +order: 13 +--- + +#### violinType + +**required** _normal | density | polar_ + +小提琴类型 diff --git a/site/docs/options/plots/special/waterfall.en.md b/site/docs/options/plots/special/waterfall.en.md new file mode 100644 index 000000000..7298cde5a --- /dev/null +++ b/site/docs/options/plots/special/waterfall.en.md @@ -0,0 +1,6 @@ +--- +title: Waterfall +order: 14 +--- + + \ No newline at end of file diff --git a/site/docs/options/plots/special/waterfall.zh.md b/site/docs/options/plots/special/waterfall.zh.md new file mode 100644 index 000000000..bdc33d6f3 --- /dev/null +++ b/site/docs/options/plots/special/waterfall.zh.md @@ -0,0 +1,16 @@ +--- +title: Waterfall +order: 14 +--- + +#### linkStyle + +**required** _attrStyle_ + +连线样式 + +#### xField + +**required** _string | string[]_ + +x轴字段 diff --git a/site/examples/statistics/column/demo/color.js b/site/examples/statistics/column/demo/color.js index 174d0609c..ac1079aa7 100644 --- a/site/examples/statistics/column/demo/color.js +++ b/site/examples/statistics/column/demo/color.js @@ -12,19 +12,19 @@ const data = [ { type: '10-30分', value: 0.01 }, { type: '30+分', value: 0.015 }, ]; -const paletteSemanticRed = '#F4664A'; -const brandColor = '#5B8FF9'; const DemoColumn = () => { const config = { data, xField: 'type', yField: 'value', - colorField: ({ type }) => { - if (type === '10-30分' || type === '30+分') { - return paletteSemanticRed; - } - return brandColor; + style: { + fill: ({ type }) => { + if (type === '10-30分' || type === '30+分') { + return '#22CBCC'; + } + return '#2989FF'; + }, }, label: { text: (originData) => { From 4c788fb6262b97816fc3866b40b31fe4b29a52b9 Mon Sep 17 00:00:00 2001 From: Canight <37735381+Canight@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:27:47 +0800 Subject: [PATCH 099/268] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20venn=20?= =?UTF-8?q?=E5=9B=BE=E7=B1=BB=E5=9E=8B=20(#2191)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: yelinlei.yll Co-authored-by: Joel Alan <31396322+lxfu1@users.noreply.github.com> --- packages/plots/src/core/plots/venn/type.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/plots/src/core/plots/venn/type.ts b/packages/plots/src/core/plots/venn/type.ts index 795baa430..b7716836a 100644 --- a/packages/plots/src/core/plots/venn/type.ts +++ b/packages/plots/src/core/plots/venn/type.ts @@ -1,6 +1,15 @@ import type { Options } from '../../types/common'; -export type VennOptions = Options; +export type VennOptions = Options & { + /** + * @title 集合空间键名 + */ + setsField: string; + /** + * @title 集合大小键名 + */ + sizeField: string; + }; export enum DefaultTransformKey { color = 'key', From aa7a762c7ccdd3eac2edb285acc181b135fd35cc Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:34:17 +0800 Subject: [PATCH 100/268] chore: update dumi-theme-antv (#2194) --- site/.dumirc.ts | 9 +++++++-- site/package.json | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 21460f89b..a93dd61a5 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -12,6 +12,7 @@ export default defineConfig({ defaultLanguage: 'zh', siteUrl: 'https://charts.ant.design', showChinaMirror: false, + footerTheme: 'light', // 白色 底部主题 githubUrl: repository.url, showSearch: true, // 是否显示搜索框 showGithubCorner: true, // 是否显示头部的 GitHub icon @@ -126,9 +127,13 @@ export default defineConfig({ }, ], detail: { + engine:{ + zh: 'AntV react', + en: 'AntV react', + }, title: { - zh: 'AntV react 可视化组件库', - en: 'AntV react component library', + zh: 'AntV react·可视化组件库', + en: 'AntV react·component library', }, description: { zh: '简单好用的 React 图表库。', diff --git a/site/package.json b/site/package.json index 84a69a29d..285a3956c 100644 --- a/site/package.json +++ b/site/package.json @@ -28,7 +28,7 @@ "start": "cross-env NODE_OPTIONS=--max_old_space_size=8192 pnpm run develop" }, "devDependencies": { - "@antv/dumi-theme-antv": "0.3.18", + "@antv/dumi-theme-antv": "^0.4.1", "@types/react": "^16.14.8", "@types/react-dom": "^16.9.13", "cross-env": "^7.0.3", From c1cd077d5d385e1c7bd9b50d2ea13f45696a28f3 Mon Sep 17 00:00:00 2001 From: HuangShengPu <60083015+hsp-sz@users.noreply.github.com> Date: Tue, 21 Nov 2023 10:09:27 +0800 Subject: [PATCH 101/268] feat: add type (#2196) * feat(Radial-bar): add type * docs: add radial-bar docs * feat(radial-bar): update type and en docs --- .../src/core/plots/radial-bar/adaptor.ts | 5 ++- .../plots/src/core/plots/radial-bar/type.ts | 35 ++++++++++++++- .../options/plots/special/radial-bar.en.md | 6 +++ .../options/plots/special/radial-bar.zh.md | 43 +++++++++++++++++++ 4 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 site/docs/options/plots/special/radial-bar.en.md create mode 100644 site/docs/options/plots/special/radial-bar.zh.md diff --git a/packages/plots/src/core/plots/radial-bar/adaptor.ts b/packages/plots/src/core/plots/radial-bar/adaptor.ts index aebdf866a..b9d139ce3 100644 --- a/packages/plots/src/core/plots/radial-bar/adaptor.ts +++ b/packages/plots/src/core/plots/radial-bar/adaptor.ts @@ -37,7 +37,7 @@ export function adaptor(params: Params) { * tooltip 配置 * @param params */ - const tooltip = (params) => { + const tooltip = (params: Params) => { const { options } = params; const { tooltip, xField, yField } = options; if (!tooltip) { @@ -57,7 +57,7 @@ export function adaptor(params: Params) { * background 配置 * @param params */ - const background = (params) => { + const background = (params: Params) => { const { options } = params; const { markBackground, children, scale, coordinate, xField } = options; const domain = get(scale, 'y.domain', []); @@ -79,6 +79,7 @@ export function adaptor(params: Params) { endAngle: (3 / 2) * Math.PI, }, animate: false, + ...markBackground, }); } return params; diff --git a/packages/plots/src/core/plots/radial-bar/type.ts b/packages/plots/src/core/plots/radial-bar/type.ts index 2696e755d..c6865a00e 100644 --- a/packages/plots/src/core/plots/radial-bar/type.ts +++ b/packages/plots/src/core/plots/radial-bar/type.ts @@ -1,3 +1,34 @@ -import type { BaseOptions, Options } from '../../types/common'; +import type { Options } from '../../types/common'; -export type RadialBarOptions = Options & BaseOptions; +export type RadialBarOptions = Options & { + /** + * @title 开始角度 + * @default -Math.PI / 2 + * @description 起始角度,默认从+y轴开始 + */ + startAngle: number; + /** + * @title 最大角度 + * @default 270(Math.PI * 3 / 2) + * @description 从开始角度旋转到最大角度,默认最大角度到-x轴 + */ + maxAngle: number; + /** + * @title 指标比例数据 + * @default 1 + * @description 范围[0-1] + */ + radius: number; + /** + * @title 外环的半径 + * @default 1 + * @description 范围[0-1],相对于画布宽高的最小值来计算的。 + */ + innerRadius: number; + /** + * @title 背景配置 + * @default null + * @description 通过配置color指定颜色参数,必须配合scale.y.domain 指定背景轴的范围区间 + */ + markBackground: Record; +}; diff --git a/site/docs/options/plots/special/radial-bar.en.md b/site/docs/options/plots/special/radial-bar.en.md new file mode 100644 index 000000000..f3aa7f059 --- /dev/null +++ b/site/docs/options/plots/special/radial-bar.en.md @@ -0,0 +1,6 @@ +--- +title: RadialBar +order: 21 +--- + + diff --git a/site/docs/options/plots/special/radial-bar.zh.md b/site/docs/options/plots/special/radial-bar.zh.md new file mode 100644 index 000000000..cda852a6c --- /dev/null +++ b/site/docs/options/plots/special/radial-bar.zh.md @@ -0,0 +1,43 @@ +--- +title: RadialBar +order: 21 +--- + +#### markBackground + +**optional** *BarOptions* + +data参数 +```ts +const data = [ + { name: 'X6', star: 297 , color:'pink'}, + { name: 'G', star: 506 , color:'pink'}, + { name: 'AVA', star: 805 , color:'pink'}, + { name: 'G2Plot', star: 1478, color:'orange' }, + { name: 'L7', star: 2029, color:'orange' }, + { name: 'G6', star: 7100, color:'orange' }, + { name: 'F2', star: 7346, color:'orange' }, + { name: 'G2', star: 10178 , color:'blue'}, +]; +``` + +mark 背景配置 + +```ts +{ + scale: { + y: { + domain: [0, 200] + } + }, + /** 不配置任何参数,默认开启背景颜色 '#e0e4ee' */ + // markBackground:{} + markBackground: { + color: 'color'; // 指定color的参数,即根据color字段进行颜色映射 + }, +} +``` + +示例: + + From 83634bebc625b53f2f3d78d1dee0f4a503044a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8A=98=E6=9C=A8?= <1076849402@qq.com> Date: Tue, 21 Nov 2023 10:10:27 +0800 Subject: [PATCH 102/268] doc: stock doc (#2197) --- site/docs/options/plots/special/stock.en.md | 6 ++++++ site/docs/options/plots/special/stock.zh.md | 24 +++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 site/docs/options/plots/special/stock.en.md create mode 100644 site/docs/options/plots/special/stock.zh.md diff --git a/site/docs/options/plots/special/stock.en.md b/site/docs/options/plots/special/stock.en.md new file mode 100644 index 000000000..e01287091 --- /dev/null +++ b/site/docs/options/plots/special/stock.en.md @@ -0,0 +1,6 @@ +--- +title: Stock +order: 10 +--- + + diff --git a/site/docs/options/plots/special/stock.zh.md b/site/docs/options/plots/special/stock.zh.md new file mode 100644 index 000000000..cfc4a775b --- /dev/null +++ b/site/docs/options/plots/special/stock.zh.md @@ -0,0 +1,24 @@ +--- +title: Stock +order: 10 +--- + + +#### yField + +**required** *string[]* + +设置一个指定 [开盘价, 收盘价, 最高价, 最低价] 字段的数组 + +#### risingFill + +**optional** *string* + +上涨色 + +#### fallingFill + +**optional** *string* + +下跌色 + From ac668bb5f5d84e843f329351a1082218528cf9ea Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Tue, 21 Nov 2023 11:20:28 +0800 Subject: [PATCH 103/268] fix: buttons unify (#2198) --- site/.dumirc.ts | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/site/.dumirc.ts b/site/.dumirc.ts index a93dd61a5..eadfeea5a 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -139,22 +139,27 @@ export default defineConfig({ zh: '简单好用的 React 图表库。', en: 'Simple and easy to use React chart library.', }, - image: 'https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*f_gcSbpq-6kAAAAAAAAAAABkARQnAQ', + image: 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*5bIcTaxarjoAAAAAAAAAAAAADmJ7AQ/original', + imageStyle: { + transform: 'scale(0.5)', + marginLeft: '150px', + marginTop: '-80px', + }, buttons: [ { text: { - zh: '图表示例', - en: 'Examples', + zh: '开始使用', + en: 'Getting Started', }, - link: `/examples/`, - type: 'primary', + link: `/manual/introduction`, }, { text: { - zh: '开始使用', - en: 'Getting Started', + zh: '图表示例', + en: 'Examples', }, - link: `/manual/introduction`, + link: `/examples/`, + type: 'primary', }, ], }, From 4a593c390fc6f68a539edda5b71a3f99a4a90e4b Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 21 Nov 2023 15:51:55 +0800 Subject: [PATCH 104/268] docs: examples review (#2199) --- packages/plots/src/core/plots/area/type.ts | 7 ++- .../plots/src/core/plots/dual-axes/index.ts | 2 +- site/.dumirc.ts | 4 +- .../statistics/area/demo/area-difference.js | 2 +- .../statistics/area/demo/orderly-area.js | 3 - .../statistics/area/demo/range-spline-area.js | 2 +- .../statistics/box/demo/box-tooltip.js | 30 ++++----- site/examples/statistics/box/demo/box.js | 18 +++--- .../statistics/box/demo/grouped-box.js | 2 +- .../examples/statistics/box/demo/polar-box.js | 6 +- .../statistics/column/demo/column-maxwidth.js | 2 +- .../column/demo/region-annotation.js | 2 +- .../statistics/dual-axes/demo/basic.js | 18 +----- .../statistics/dual-axes/demo/column-line.js | 3 +- .../dual-axes/demo/column-multi-line.js | 6 +- .../dual-axes/demo/custom-column-line.js | 9 ++- .../dual-axes/demo/custom-dual-line.js | 2 +- .../demo/custom-grouped-column-line.js | 9 ++- .../demo/custom-stacked-column-line.js | 13 ++-- .../demo/dual-aggregated-line-area.js | 38 ++++++------ .../statistics/dual-axes/demo/dual-line.js | 2 +- .../dual-axes/demo/dual-step-line.js | 2 +- .../dual-axes/demo/grouped-column-line.js | 8 +-- .../demo/grouped-column-multi-line.js | 8 +-- .../statistics/dual-axes/demo/multi-line.js | 6 +- .../statistics/dual-axes/demo/pareto.js | 46 +++++++------- .../dual-axes/demo/pattern-with-callback.js | 9 ++- .../dual-axes/demo/range-column-line.js | 13 ++-- .../dual-axes/demo/slider-column-line.js | 62 +++++++++---------- .../dual-axes/demo/stacked-column-line.js | 11 ++-- .../demo/stacked-column-multi-line.js | 17 +++-- .../demo/stacked-percent-column-line.js | 8 +-- .../statistics/gauge/demo/gauge-color.js | 16 ++--- .../statistics/histogram/demo/binWidth.js | 2 +- site/examples/statistics/line/demo/basic.js | 51 +++++++-------- site/examples/statistics/line/demo/color.js | 3 +- .../statistics/line/demo/line-threshold.js | 2 +- .../statistics/line/demo/line-var-size.js | 3 +- site/examples/statistics/line/demo/meta.json | 2 +- .../statistics/line/demo/normalize.js | 2 +- .../statistics/pie/demo/quarter-circle.js | 1 - .../statistics/pie/demo/spider-label.js | 8 +-- .../statistics/radar/demo/area-radial.js | 31 +++++----- site/examples/statistics/radar/demo/basic.js | 6 +- .../statistics/radar/demo/parallel-radar.js | 22 +++---- site/examples/statistics/radar/demo/radar.js | 2 +- .../radial-bar/demo/round-corner.js | 7 +-- .../statistics/rose/demo/rose-label.js | 21 +++---- site/examples/statistics/rose/demo/rose.js | 15 +++-- .../statistics/rose/demo/stacked-rose.js | 48 ++++++-------- .../scatter/demo/point-aggregated.js | 19 +++--- .../statistics/scatter/demo/point-dot.js | 25 ++++---- .../statistics/scatter/demo/point-label.js | 9 ++- .../statistics/scatter/demo/point-log.js | 9 ++- .../scatter/demo/point-sequential.js | 14 ++--- .../statistics/scatter/demo/point-shape.js | 2 +- .../statistics/scatter/demo/point-stacked.js | 19 +++--- .../statistics/tiny/demo/area-annotation.js | 2 +- .../statistics/tiny/demo/basic-area.js | 2 +- .../statistics/tiny/demo/filled-area.js | 2 +- site/package.json | 2 +- 61 files changed, 328 insertions(+), 389 deletions(-) diff --git a/packages/plots/src/core/plots/area/type.ts b/packages/plots/src/core/plots/area/type.ts index 939cba7f4..5edb9890c 100644 --- a/packages/plots/src/core/plots/area/type.ts +++ b/packages/plots/src/core/plots/area/type.ts @@ -1,3 +1,8 @@ import type { Options } from '../../types/common'; -export type AreaOptions = Options; +export type AreaOptions = Omit & { + /** + * @title y轴字段 + */ + readonly yField?: string | string[]; +}; diff --git a/packages/plots/src/core/plots/dual-axes/index.ts b/packages/plots/src/core/plots/dual-axes/index.ts index a5c0e9d83..42f1b6900 100644 --- a/packages/plots/src/core/plots/dual-axes/index.ts +++ b/packages/plots/src/core/plots/dual-axes/index.ts @@ -17,7 +17,7 @@ export class DualAxes extends Plot { return { type: 'view', axis: { - y: { title: false }, + y: { title: false, tick: false }, x: { title: false }, }, }; diff --git a/site/.dumirc.ts b/site/.dumirc.ts index eadfeea5a..ce3480980 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -10,7 +10,7 @@ export default defineConfig({ title: 'Ant Design Charts', description: 'AntV react component library', defaultLanguage: 'zh', - siteUrl: 'https://charts.ant.design', + siteUrl: 'https://ant-design-charts.antgroup.com', showChinaMirror: false, footerTheme: 'light', // 白色 底部主题 githubUrl: repository.url, @@ -127,7 +127,7 @@ export default defineConfig({ }, ], detail: { - engine:{ + engine: { zh: 'AntV react', en: 'AntV react', }, diff --git a/site/examples/statistics/area/demo/area-difference.js b/site/examples/statistics/area/demo/area-difference.js index 67b350544..81d8ab63a 100644 --- a/site/examples/statistics/area/demo/area-difference.js +++ b/site/examples/statistics/area/demo/area-difference.js @@ -21,7 +21,7 @@ const DemoArea = () => { colorField: 'city', shapeField: 'hvh', diff: true, - meta: { + scale: { color: { range: ['#67a9cf', '#ef8a62'] }, }, line: { diff --git a/site/examples/statistics/area/demo/orderly-area.js b/site/examples/statistics/area/demo/orderly-area.js index 8c6e25e04..202c0ebc5 100644 --- a/site/examples/statistics/area/demo/orderly-area.js +++ b/site/examples/statistics/area/demo/orderly-area.js @@ -12,9 +12,6 @@ const DemoArea = () => { yField: 'unemployed', colorField: 'industry', shapeField: 'smooth', - meta: { - x: { utc: true }, - }, axis: { x: { title: 'Date' }, y: { labelFormatter: '~s' }, diff --git a/site/examples/statistics/area/demo/range-spline-area.js b/site/examples/statistics/area/demo/range-spline-area.js index 88709b4d8..ed9bac337 100644 --- a/site/examples/statistics/area/demo/range-spline-area.js +++ b/site/examples/statistics/area/demo/range-spline-area.js @@ -25,7 +25,7 @@ const DemoArea = () => { axis: { y: { title: false }, }, - meta: { + scale: { x: { type: 'linear', tickCount: 10 }, }, point: { diff --git a/site/examples/statistics/box/demo/box-tooltip.js b/site/examples/statistics/box/demo/box-tooltip.js index 4423f0880..38c5eafda 100644 --- a/site/examples/statistics/box/demo/box-tooltip.js +++ b/site/examples/statistics/box/demo/box-tooltip.js @@ -4,30 +4,30 @@ import { Box } from '@ant-design/plots'; const DemoBox = () => { const data = [ - { x: 'Oceania', y: [ 1, 9, 16, 22, 24 ]}, - { x: 'East Europe', y: [ 1, 5, 8, 12, 16 ]}, - { x: 'Australia', y: [ 1, 8, 12, 19, 26 ]}, - { x: 'South America', y: [ 2, 8, 12, 21, 28 ]}, - { x: 'North Africa', y: [ 1, 8, 14, 18, 24 ]}, - { x: 'North America', y: [ 3, 10, 17, 28, 30 ]}, - { x: 'West Europe', y: [ 1, 7, 10, 17, 22 ]}, - { x: 'West Africa', y: [ 1, 6, 8, 13, 16 ]}, + { x: 'Oceania', y: [1, 9, 16, 22, 24] }, + { x: 'East Europe', y: [1, 5, 8, 12, 16] }, + { x: 'Australia', y: [1, 8, 12, 19, 26] }, + { x: 'South America', y: [2, 8, 12, 21, 28] }, + { x: 'North Africa', y: [1, 8, 14, 18, 24] }, + { x: 'North America', y: [3, 10, 17, 28, 30] }, + { x: 'West Europe', y: [1, 7, 10, 17, 22] }, + { x: 'West Africa', y: [1, 6, 8, 13, 16] }, ]; const config = { data: { - value: data, + value: data, }, xField: 'x', yField: 'y', - meta: { x: { paddingInner: 0.6, paddingOuter: 0.3 }, y: { zero: true } }, + scale: { x: { paddingInner: 0.6, paddingOuter: 0.3 }, y: { zero: true } }, tooltip: { items: [ - { name: "最低值", channel: "y" }, - { name: "下四分位数", channel: "y1" }, - { name: "最低值", channel: "y2" }, - { name: "上四分位数", channel: "y3" }, - { name: "最高值", channel: "y4" }, + { name: '最低值', channel: 'y' }, + { name: '下四分位数', channel: 'y1' }, + { name: '最低值', channel: 'y2' }, + { name: '上四分位数', channel: 'y3' }, + { name: '最高值', channel: 'y4' }, ], }, }; diff --git a/site/examples/statistics/box/demo/box.js b/site/examples/statistics/box/demo/box.js index e7f96867e..4039f9dcc 100644 --- a/site/examples/statistics/box/demo/box.js +++ b/site/examples/statistics/box/demo/box.js @@ -4,14 +4,14 @@ import { Box } from '@ant-design/plots'; const DemoBox = () => { const data = [ - { x: 'Oceania', y: [ 1, 9, 16, 22, 24 ]}, - { x: 'East Europe', y: [ 1, 5, 8, 12, 16 ]}, - { x: 'Australia', y: [ 1, 8, 12, 19, 26 ]}, - { x: 'South America', y: [ 2, 8, 12, 21, 28 ]}, - { x: 'North Africa', y: [ 1, 8, 14, 18, 24 ]}, - { x: 'North America', y: [ 3, 10, 17, 28, 30 ]}, - { x: 'West Europe', y: [ 1, 7, 10, 17, 22 ]}, - { x: 'West Africa', y: [ 1, 6, 8, 13, 16 ]}, + { x: 'Oceania', y: [1, 9, 16, 22, 24] }, + { x: 'East Europe', y: [1, 5, 8, 12, 16] }, + { x: 'Australia', y: [1, 8, 12, 19, 26] }, + { x: 'South America', y: [2, 8, 12, 21, 28] }, + { x: 'North Africa', y: [1, 8, 14, 18, 24] }, + { x: 'North America', y: [3, 10, 17, 28, 30] }, + { x: 'West Europe', y: [1, 7, 10, 17, 22] }, + { x: 'West Africa', y: [1, 6, 8, 13, 16] }, ]; const config = { @@ -27,7 +27,7 @@ const DemoBox = () => { style: { stroke: 'black', }, - meta: { + scale: { x: { paddingInner: 0.6, paddingOuter: 0.3 }, y: { zero: true }, }, diff --git a/site/examples/statistics/box/demo/grouped-box.js b/site/examples/statistics/box/demo/grouped-box.js index dc23f62ec..5fc3caaa8 100644 --- a/site/examples/statistics/box/demo/grouped-box.js +++ b/site/examples/statistics/box/demo/grouped-box.js @@ -89,7 +89,7 @@ const DemoBox = () => { style: { stroke: 'black', }, - meta: { + scale: { x: { paddingInner: 0.2, paddingOuter: 0.1 }, y: { zero: true }, series: { paddingInner: 0.3, paddingOuter: 0.1 }, diff --git a/site/examples/statistics/box/demo/polar-box.js b/site/examples/statistics/box/demo/polar-box.js index 526a5b8cc..6cc908d8d 100644 --- a/site/examples/statistics/box/demo/polar-box.js +++ b/site/examples/statistics/box/demo/polar-box.js @@ -21,9 +21,9 @@ const DemoBox = () => { xField: 'x', yField: 'y', colorField: 'x', - meta: { x: { paddingInner: 0.6, paddingOuter: 0.3 }, y: { zero: true } }, - coordinate: { type: "polar", innerRadius: 0.2 }, - style: { stroke: "black" }, + scale: { x: { paddingInner: 0.6, paddingOuter: 0.3 }, y: { zero: true } }, + coordinate: { type: 'polar', innerRadius: 0.2 }, + style: { stroke: 'black' }, axis: { y: { tickCount: 5 } }, legend: false, }; diff --git a/site/examples/statistics/column/demo/column-maxwidth.js b/site/examples/statistics/column/demo/column-maxwidth.js index 0799203d3..4c3d18b31 100644 --- a/site/examples/statistics/column/demo/column-maxwidth.js +++ b/site/examples/statistics/column/demo/column-maxwidth.js @@ -7,7 +7,7 @@ const DemoColumn = () => { data: [{ letter: 'A', frequency: 120 }], xField: 'letter', yField: 'frequency', - meta: { + scale: { x: { padding: 0.5 }, }, style: { diff --git a/site/examples/statistics/column/demo/region-annotation.js b/site/examples/statistics/column/demo/region-annotation.js index 268063388..4267cd473 100644 --- a/site/examples/statistics/column/demo/region-annotation.js +++ b/site/examples/statistics/column/demo/region-annotation.js @@ -22,7 +22,7 @@ const DemoColumn = () => { data, xField: 'month', yField: 'value', - meta: { + scale: { y: { domainMax: 2000, domainMin: -1000, diff --git a/site/examples/statistics/dual-axes/demo/basic.js b/site/examples/statistics/dual-axes/demo/basic.js index 78988493a..aa6cfa49b 100644 --- a/site/examples/statistics/dual-axes/demo/basic.js +++ b/site/examples/statistics/dual-axes/demo/basic.js @@ -18,13 +18,6 @@ const DemoDualAxes = () => { type: 'interval', xField: 'time', yField: 'waiting', - axis: { - y: { title: 'Waiting', style: { titleFill: '#5B8FF9' } }, - }, - label: { - text: 'waiting', - position: 'inside', - }, }, { type: 'line', @@ -35,10 +28,7 @@ const DemoDualAxes = () => { stroke: '#fdae6b', lineWidth: 2, }, - label: { - text: 'people', - }, - meta: { + scale: { y: { independent: true, }, @@ -46,11 +36,7 @@ const DemoDualAxes = () => { axis: { y: { position: 'right', - grid: null, - title: 'People', - style: { - titleFill: '#fdae6b', - }, + // grid: null, }, }, }, diff --git a/site/examples/statistics/dual-axes/demo/column-line.js b/site/examples/statistics/dual-axes/demo/column-line.js index 53313ac5a..287e3fa0f 100644 --- a/site/examples/statistics/dual-axes/demo/column-line.js +++ b/site/examples/statistics/dual-axes/demo/column-line.js @@ -14,7 +14,6 @@ const DemoDualAxes = () => { const config = { data, xField: 'time', - axis: { y: { title: null } }, children: [ { type: 'interval', @@ -28,7 +27,7 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, }, ], diff --git a/site/examples/statistics/dual-axes/demo/column-multi-line.js b/site/examples/statistics/dual-axes/demo/column-multi-line.js index c932d42aa..5931a638d 100644 --- a/site/examples/statistics/dual-axes/demo/column-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/column-multi-line.js @@ -5,8 +5,8 @@ import ReactDOM from 'react-dom'; const lineColor = { a: 'rgb(90, 216, 166)', b: 'rgb(93, 112, 146)', - c: 'rgb(246, 189, 22)' -} + c: 'rgb(246, 189, 22)', +}; const DemoDualAxes = () => { const uvData = [ @@ -54,7 +54,7 @@ const DemoDualAxes = () => { lineWidth: 2, stroke: (d) => lineColor[d[0].name], }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, }, ], diff --git a/site/examples/statistics/dual-axes/demo/custom-column-line.js b/site/examples/statistics/dual-axes/demo/custom-column-line.js index 6ed947350..1c30bbd72 100644 --- a/site/examples/statistics/dual-axes/demo/custom-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-column-line.js @@ -14,7 +14,6 @@ const DemoDualAxes = () => { const config = { data, xField: 'time', - axis: { y: { title: null } }, children: [ { type: 'interval', @@ -23,7 +22,7 @@ const DemoDualAxes = () => { label: { position: 'inside' }, interaction: { elementHighlight: true, - elementHighlightByColor: { background: true } + elementHighlightByColor: { background: true }, }, }, { @@ -34,14 +33,14 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, interaction: { tooltip: { crosshairs: false, marker: false, - } - } + }, + }, }, ], annotations: [ diff --git a/site/examples/statistics/dual-axes/demo/custom-dual-line.js b/site/examples/statistics/dual-axes/demo/custom-dual-line.js index 2cf0d5ff7..d340b1b9a 100644 --- a/site/examples/statistics/dual-axes/demo/custom-dual-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-dual-line.js @@ -34,7 +34,7 @@ const DemoDualAxes = () => { textAnchor: 'middle', }, }, - meta: { + scale: { y: { independent: true }, }, axis: { diff --git a/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js index eb9791439..d36502128 100644 --- a/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js @@ -1,4 +1,3 @@ - import { DualAxes } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; @@ -43,7 +42,7 @@ const DemoDualAxes = () => { style: { maxWidth: 50 }, label: { position: 'inside' }, scale: { color: { range: ['#5B8FF9', '#5D7092'] } }, - interaction: { elementHighlightByColor: { background: true, } }, + interaction: { elementHighlightByColor: { background: true } }, }, { data: transformData, @@ -53,14 +52,14 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, interaction: { tooltip: { crosshairs: false, marker: false, - } - } + }, + }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js b/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js index 74007f905..640964804 100644 --- a/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js @@ -30,10 +30,9 @@ const DemoDualAxes = () => { color: { itemMarker: 'round', itemMarkerSize: 14, - position: 'right' + position: 'right', }, }, - axis: { y: { title: null } }, children: [ { data: uvBillData, @@ -43,10 +42,10 @@ const DemoDualAxes = () => { colorField: 'type', style: { maxWidth: 80 }, label: { position: 'inside' }, - meta: { y: { domainMax: 1200 } }, + scale: { y: { domainMax: 1200 } }, interaction: { elementHighlight: true, - elementHighlightByColor: { background: true } + elementHighlightByColor: { background: true }, }, }, { @@ -55,14 +54,14 @@ const DemoDualAxes = () => { yField: 'count', colorField: () => 'count', style: { lineWidth: 2 }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, interaction: { tooltip: { crosshairs: false, marker: false, - } - } + }, + }, }, ], theme: { category10: ['#F4A49E', '#FACDAA', '#EE7B91', '#E85285', '#BE408C', '#BE408C'] }, diff --git a/site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js b/site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js index b3adfbfe2..2fc97615e 100644 --- a/site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js +++ b/site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js @@ -5,43 +5,43 @@ import ReactDOM from 'react-dom'; const DemoDualAxes = () => { const config = { data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/weather.json", - transform: [{ type: "filter", callback: (d) => d.location === "Seattle" }], + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/weather.json', + transform: [{ type: 'filter', callback: (d) => d.location === 'Seattle' }], }, children: [ { - type: "area", + type: 'area', xField: (d) => new Date(d.date).getUTCMonth(), - yField: ["temp_max", "temp_min"], - transform: [{ type: "groupX", y: "mean", y1: "mean" }], - meta: { y: { nice: true } }, - style: { fill: "#85c5A6", fillOpacity: 0.3 }, - axis: { y: { title: "Avg. Temperature (°C)", titleFill: "#85C5A6" } }, + yField: ['temp_max', 'temp_min'], + transform: [{ type: 'groupX', y: 'mean', y1: 'mean' }], + scale: { y: { nice: true } }, + style: { fill: '#85c5A6', fillOpacity: 0.3 }, + axis: { y: { title: 'Avg. Temperature (°C)', titleFill: '#85C5A6' } }, tooltip: { items: [ - { channel: "y", valueFormatter: ".1f" }, - { channel: "y1", valueFormatter: ".1f" }, + { channel: 'y', valueFormatter: '.1f' }, + { channel: 'y1', valueFormatter: '.1f' }, ], }, }, { - type: "line", + type: 'line', xField: (d) => new Date(d.date).getMonth(), yField: 'precipitation', shapeField: 'smooth', - transform: [{ type: "groupX", y: "mean" }], - meta: { y: { independent: true } }, - style: { stroke: "steelblue" }, + transform: [{ type: 'groupX', y: 'mean' }], + scale: { y: { independent: true } }, + style: { stroke: 'steelblue' }, axis: { y: { - position: "right", + position: 'right', grid: null, - title: "Precipitation (inches)", - titleFill: "steelblue", + title: 'Precipitation (inches)', + titleFill: 'steelblue', }, }, - tooltip: { items: [{ channel: "y", valueFormatter: ".1f" }] }, + tooltip: { items: [{ channel: 'y', valueFormatter: '.1f' }] }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/dual-line.js b/site/examples/statistics/dual-axes/demo/dual-line.js index d6d52a64b..dac7c9c4c 100644 --- a/site/examples/statistics/dual-axes/demo/dual-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-line.js @@ -40,7 +40,7 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right', diff --git a/site/examples/statistics/dual-axes/demo/dual-step-line.js b/site/examples/statistics/dual-axes/demo/dual-step-line.js index a4bea526d..9a70b5cfd 100644 --- a/site/examples/statistics/dual-axes/demo/dual-step-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-step-line.js @@ -27,7 +27,7 @@ const DemoDualAxes = () => { stroke: '#29cae4', lineWidth: 2, }, - meta: { + scale: { y: { independent: true }, }, }, diff --git a/site/examples/statistics/dual-axes/demo/grouped-column-line.js b/site/examples/statistics/dual-axes/demo/grouped-column-line.js index c7cd6f66c..71aee3344 100644 --- a/site/examples/statistics/dual-axes/demo/grouped-column-line.js +++ b/site/examples/statistics/dual-axes/demo/grouped-column-line.js @@ -33,7 +33,7 @@ const DemoDualAxes = () => { yField: 'value', colorField: 'type', group: true, - interaction: { elementHighlightByColor: { background: true, } }, + interaction: { elementHighlightByColor: { background: true } }, }, { data: transformData, @@ -43,14 +43,14 @@ const DemoDualAxes = () => { stroke: '#5D7092', lineWidth: 2, }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, interaction: { tooltip: { crosshairs: false, marker: false, - } - } + }, + }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js b/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js index 47d6158d1..793d7fb23 100644 --- a/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js @@ -44,7 +44,7 @@ const DemoDualAxes = () => { colorField: 'type', group: true, style: { maxWidth: 80 }, - interaction: { elementHighlightByColor: { background: true, } }, + interaction: { elementHighlightByColor: { background: true } }, }, { data: transformData, @@ -52,14 +52,14 @@ const DemoDualAxes = () => { yField: 'count', colorField: 'name', style: { lineWidth: 2 }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, interaction: { tooltip: { crosshairs: false, marker: false, - } - } + }, + }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/multi-line.js b/site/examples/statistics/dual-axes/demo/multi-line.js index 56226682f..5c1d4ff3c 100644 --- a/site/examples/statistics/dual-axes/demo/multi-line.js +++ b/site/examples/statistics/dual-axes/demo/multi-line.js @@ -87,7 +87,7 @@ const DemoDualAxes = () => { yField: 'Temperature', shapeField: 'smooth', colorField: '#EE6666', - meta: { + scale: { y: { independent: true, domainMax: 30 }, }, axis: { @@ -104,7 +104,7 @@ const DemoDualAxes = () => { type: 'interval', yField: 'Evaporation', colorField: '#5470C6', - meta: { + scale: { y: { independent: true, domainMax: 200 }, }, style: { @@ -125,7 +125,7 @@ const DemoDualAxes = () => { yField: 'Precipitation', shapeField: 'smooth', colorField: '#91CC75', - meta: { + scale: { y: { independent: true }, }, style: { diff --git a/site/examples/statistics/dual-axes/demo/pareto.js b/site/examples/statistics/dual-axes/demo/pareto.js index 64a1bd727..fa86c4ddf 100644 --- a/site/examples/statistics/dual-axes/demo/pareto.js +++ b/site/examples/statistics/dual-axes/demo/pareto.js @@ -5,19 +5,19 @@ import ReactDOM from 'react-dom'; const DemoDualAxes = () => { const config = { data: { - type: "inline", + type: 'inline', value: [ - { x: "Parking Difficult", value: 95 }, - { x: "Sales Rep was Rude", value: 60 }, - { x: "Poor Lighting", value: 45 }, - { x: "Layout Confusing", value: 37 }, - { x: "Sizes Limited", value: 30 }, - { x: "Clothing Faded", value: 27 }, - { x: "Clothing Shrank", value: 18 }, + { x: 'Parking Difficult', value: 95 }, + { x: 'Sales Rep was Rude', value: 60 }, + { x: 'Poor Lighting', value: 45 }, + { x: 'Layout Confusing', value: 37 }, + { x: 'Sizes Limited', value: 30 }, + { x: 'Clothing Faded', value: 27 }, + { x: 'Clothing Shrank', value: 18 }, ], transform: [ { - type: "custom", + type: 'custom', callback: (data) => { const sum = data.reduce((r, curr) => r + curr.value, 0); return data @@ -41,46 +41,44 @@ const DemoDualAxes = () => { xField: 'x', children: [ { - type: "interval", + type: 'interval', yField: 'value', - meta: { x: { padding: 0.5 }, y: { domainMax: 312, tickCount: 5 } }, - style: { fill: (d) => (d.percentage < 0.1 ? "#E24B26" : "#78B3F0") }, - axis: { x: { title: null }, y: { title: "Defect frequency" } }, + scale: { x: { padding: 0.5 }, y: { domainMax: 312, tickCount: 5 } }, + style: { fill: (d) => (d.percentage < 0.1 ? '#E24B26' : '#78B3F0') }, + axis: { x: { title: null }, y: { title: 'Defect frequency' } }, labels: [ { text: (d) => `${(d.percentage * 100).toFixed(1)}%`, - textBaseline: "bottom", + textBaseline: 'bottom', }, ], }, { - type: "line", + type: 'line', yField: 'accumulate', - meta: { y: { independent: true, domainMin: 0, tickCount: 5 } }, + scale: { y: { independent: true, domainMin: 0, tickCount: 5 } }, axis: { y: { - position: "right", - title: "Cumulative Percentage", + position: 'right', + title: 'Cumulative Percentage', grid: null, labelFormatter: (d) => `${(d * 100).toFixed(0)}%`, }, }, tooltip: { - items: [ - { channel: "y", valueFormatter: (d) => `${(d * 100).toFixed(2)}%` }, - ], + items: [{ channel: 'y', valueFormatter: (d) => `${(d * 100).toFixed(2)}%` }], }, }, { - type: "point", + type: 'point', yField: 'accumulate', shapeField: 'diamond', - meta: { y: { independent: true, domainMin: 0 } }, + scale: { y: { independent: true, domainMin: 0 } }, axis: { y: null }, tooltip: null, }, ], - title: "Pareto Chart of Customer Complaints", + title: 'Pareto Chart of Customer Complaints', }; return ; }; diff --git a/site/examples/statistics/dual-axes/demo/pattern-with-callback.js b/site/examples/statistics/dual-axes/demo/pattern-with-callback.js index cf9dd1647..c6c77e346 100644 --- a/site/examples/statistics/dual-axes/demo/pattern-with-callback.js +++ b/site/examples/statistics/dual-axes/demo/pattern-with-callback.js @@ -1,4 +1,3 @@ - import { DualAxes } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; @@ -42,7 +41,7 @@ const DemoDualAxes = () => { group: true, label: { position: 'inside' }, scale: { color: { range: ['#5B8FF9', '#5D7092'] } }, - interaction: { elementHighlightByColor: { background: true, } }, + interaction: { elementHighlightByColor: { background: true } }, }, { data: transformData, @@ -52,14 +51,14 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, interaction: { tooltip: { crosshairs: false, marker: false, - } - } + }, + }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/range-column-line.js b/site/examples/statistics/dual-axes/demo/range-column-line.js index 9942067ed..0a6634437 100644 --- a/site/examples/statistics/dual-axes/demo/range-column-line.js +++ b/site/examples/statistics/dual-axes/demo/range-column-line.js @@ -4,11 +4,11 @@ import ReactDOM from 'react-dom'; const DemoDualAxes = () => { const data = [ - { time: '2019-03', value: [200, 350], count: 800, }, - { time: '2019-04', value: [400, 650], count: 600, }, - { time: '2019-05', value: [150, 350], count: 400, }, - { time: '2019-06', value: [100, 450], count: 380, }, - { time: '2019-07', value: [500, 550], count: 220, }, + { time: '2019-03', value: [200, 350], count: 800 }, + { time: '2019-04', value: [400, 650], count: 600 }, + { time: '2019-05', value: [150, 350], count: 400 }, + { time: '2019-06', value: [100, 450], count: 380 }, + { time: '2019-07', value: [500, 550], count: 220 }, ]; const config = { @@ -22,7 +22,6 @@ const DemoDualAxes = () => { stroke: '#5B8FF9', maxWidth: 100, }, - axis: { y: { style: { titleFill: '#5B8FF9' }, }, }, }, { type: 'line', @@ -31,7 +30,7 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right', diff --git a/site/examples/statistics/dual-axes/demo/slider-column-line.js b/site/examples/statistics/dual-axes/demo/slider-column-line.js index 10197c15d..93cb8da65 100644 --- a/site/examples/statistics/dual-axes/demo/slider-column-line.js +++ b/site/examples/statistics/dual-axes/demo/slider-column-line.js @@ -4,36 +4,36 @@ import ReactDOM from 'react-dom'; const DemoDualAxes = () => { const data = [ - { time: '2020-08-20', consumeTime: 10868, completeTime: 649.483, }, - { time: '2020-08-21', consumeTime: 8786, completeTime: 1053.7, }, - { time: '2020-08-22', consumeTime: 10824, completeTime: 679.817, }, - { time: '2020-08-23', consumeTime: 7860, completeTime: 638.117, }, - { time: '2020-08-24', consumeTime: 13253, completeTime: 843.3, }, - { time: '2020-08-25', consumeTime: 17015, completeTime: 1092.983, }, - { time: '2020-08-26', consumeTime: 19298, completeTime: 1036.317, }, - { time: '2020-08-27', consumeTime: 13937, completeTime: 1031.9, }, - { time: '2020-08-28', consumeTime: 11541, completeTime: 803.467, }, - { time: '2020-08-29', consumeTime: 15244, completeTime: 830.733, }, - { time: '2020-08-30', consumeTime: 14247, completeTime: 709.867, }, - { time: '2020-08-31', consumeTime: 9402, completeTime: 665.233, }, - { time: '2020-09-01', consumeTime: 10440, completeTime: 696.367, }, - { time: '2020-09-02', consumeTime: 9345, completeTime: 692.867, }, - { time: '2020-09-03', consumeTime: 18459, completeTime: 936.017, }, - { time: '2020-09-04', consumeTime: 9763, completeTime: 782.867, }, - { time: '2020-09-05', consumeTime: 11074, completeTime: 653.8, }, - { time: '2020-09-06', consumeTime: 11770, completeTime: 856.683, }, - { time: '2020-09-07', consumeTime: 12206, completeTime: 777.15, }, - { time: '2020-09-08', consumeTime: 11434, completeTime: 773.283, }, - { time: '2020-09-09', consumeTime: 16218, completeTime: 833.3, }, - { time: '2020-09-10', consumeTime: 11914, completeTime: 793.517, }, - { time: '2020-09-11', consumeTime: 16781, completeTime: 894.45, }, - { time: '2020-09-12', consumeTime: 10555, completeTime: 725.55, }, - { time: '2020-09-13', consumeTime: 10899, completeTime: 709.967, }, - { time: '2020-09-14', consumeTime: 10713, completeTime: 787.6, }, - { time: '2020-09-15', consumeTime: 0, completeTime: 644.183, }, - { time: '2020-09-16', consumeTime: 0, completeTime: 1066.65, }, - { time: '2020-09-17', consumeTime: 20357, completeTime: 932.45, }, - { time: '2020-09-18', consumeTime: 10424, completeTime: 753.583, }, + { time: '2020-08-20', consumeTime: 10868, completeTime: 649.483 }, + { time: '2020-08-21', consumeTime: 8786, completeTime: 1053.7 }, + { time: '2020-08-22', consumeTime: 10824, completeTime: 679.817 }, + { time: '2020-08-23', consumeTime: 7860, completeTime: 638.117 }, + { time: '2020-08-24', consumeTime: 13253, completeTime: 843.3 }, + { time: '2020-08-25', consumeTime: 17015, completeTime: 1092.983 }, + { time: '2020-08-26', consumeTime: 19298, completeTime: 1036.317 }, + { time: '2020-08-27', consumeTime: 13937, completeTime: 1031.9 }, + { time: '2020-08-28', consumeTime: 11541, completeTime: 803.467 }, + { time: '2020-08-29', consumeTime: 15244, completeTime: 830.733 }, + { time: '2020-08-30', consumeTime: 14247, completeTime: 709.867 }, + { time: '2020-08-31', consumeTime: 9402, completeTime: 665.233 }, + { time: '2020-09-01', consumeTime: 10440, completeTime: 696.367 }, + { time: '2020-09-02', consumeTime: 9345, completeTime: 692.867 }, + { time: '2020-09-03', consumeTime: 18459, completeTime: 936.017 }, + { time: '2020-09-04', consumeTime: 9763, completeTime: 782.867 }, + { time: '2020-09-05', consumeTime: 11074, completeTime: 653.8 }, + { time: '2020-09-06', consumeTime: 11770, completeTime: 856.683 }, + { time: '2020-09-07', consumeTime: 12206, completeTime: 777.15 }, + { time: '2020-09-08', consumeTime: 11434, completeTime: 773.283 }, + { time: '2020-09-09', consumeTime: 16218, completeTime: 833.3 }, + { time: '2020-09-10', consumeTime: 11914, completeTime: 793.517 }, + { time: '2020-09-11', consumeTime: 16781, completeTime: 894.45 }, + { time: '2020-09-12', consumeTime: 10555, completeTime: 725.55 }, + { time: '2020-09-13', consumeTime: 10899, completeTime: 709.967 }, + { time: '2020-09-14', consumeTime: 10713, completeTime: 787.6 }, + { time: '2020-09-15', consumeTime: 0, completeTime: 644.183 }, + { time: '2020-09-16', consumeTime: 0, completeTime: 1066.65 }, + { time: '2020-09-17', consumeTime: 20357, completeTime: 932.45 }, + { time: '2020-09-18', consumeTime: 10424, completeTime: 753.583 }, ]; const config = { @@ -51,7 +51,7 @@ const DemoDualAxes = () => { type: 'line', yField: 'completeTime', style: { stroke: '#5AD8A6', lineWidth: 2 }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, }, ], diff --git a/site/examples/statistics/dual-axes/demo/stacked-column-line.js b/site/examples/statistics/dual-axes/demo/stacked-column-line.js index 1f7750438..7c87965ca 100644 --- a/site/examples/statistics/dual-axes/demo/stacked-column-line.js +++ b/site/examples/statistics/dual-axes/demo/stacked-column-line.js @@ -26,7 +26,6 @@ const DemoDualAxes = () => { const config = { xField: 'time', - axis: { y: { title: null } }, children: [ { data: uvBillData, @@ -35,8 +34,8 @@ const DemoDualAxes = () => { stack: true, colorField: 'type', style: { maxWidth: 80 }, - meta: { y: { domainMax: 1200 } }, - interaction: { elementHighlightByColor: { background: true, } }, + scale: { y: { domainMax: 1200 } }, + interaction: { elementHighlightByColor: { background: true } }, }, { data: transformData, @@ -45,13 +44,13 @@ const DemoDualAxes = () => { colorField: () => 'count', style: { lineWidth: 2 }, axis: { y: { position: 'right' } }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, interaction: { tooltip: { crosshairs: false, marker: false, - } - } + }, + }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js b/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js index 619345174..0f0631062 100644 --- a/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js @@ -36,7 +36,6 @@ const DemoDualAxes = () => { const config = { xField: 'time', - axis: { y: { title: null } }, interaction: { tooltip: { sort: (d) => ['uv', 'bill', 'a', 'b', 'c'].indexOf(d.name) } }, children: [ { @@ -46,8 +45,8 @@ const DemoDualAxes = () => { colorField: 'type', stack: true, style: { maxWidth: 80 }, - meta: { y: { domainMax: 1200 } }, - interaction: { elementHighlightByColor: { background: true, } }, + scale: { y: { domainMax: 1200 } }, + interaction: { elementHighlightByColor: { background: true } }, }, { data: transformData, @@ -58,24 +57,24 @@ const DemoDualAxes = () => { lineWidth: 2, opacity: (d) => { if (d[0].name === 'a') { - return 1 + return 1; } - return 0.5 + return 0.5; }, lineDash: (d) => { if (d[0].name === 'a') { - return [1, 4] + return [1, 4]; } }, }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, interaction: { tooltip: { crosshairs: false, marker: false, - } - } + }, + }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js b/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js index a9119dfea..592e8f53e 100644 --- a/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js +++ b/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js @@ -37,7 +37,7 @@ const DemoDualAxes = () => { style: { maxWidth: 80 }, tooltip: { channel: 'y0', valueFormatter: '.0%' }, axis: { y: { title: 'value', style: { titleFill: '#5B8FF9' } } }, - interaction: { elementHighlightByColor: { background: true, } }, + interaction: { elementHighlightByColor: { background: true } }, }, { data: transformData, @@ -45,7 +45,7 @@ const DemoDualAxes = () => { yField: 'count', colorField: () => 'count', style: { lineWidth: 2 }, - meta: { y: { independent: true } }, + scale: { y: { independent: true } }, axis: { y: { position: 'right', @@ -56,8 +56,8 @@ const DemoDualAxes = () => { tooltip: { crosshairs: false, marker: false, - } - } + }, + }, }, ], }; diff --git a/site/examples/statistics/gauge/demo/gauge-color.js b/site/examples/statistics/gauge/demo/gauge-color.js index 842a741b0..86b0d8b0c 100644 --- a/site/examples/statistics/gauge/demo/gauge-color.js +++ b/site/examples/statistics/gauge/demo/gauge-color.js @@ -8,20 +8,20 @@ const DemoGauge = () => { height: 720, autoFit: true, data: { - target: 159, - total: 400, - name: 'score', - thresholds: [100, 200, 400], + target: 159, + total: 400, + name: 'score', + thresholds: [100, 200, 400], }, legend: false, - meta: { + scale: { color: { - range: ['#F4664A', '#FAAD14', 'green'] + range: ['#F4664A', '#FAAD14', 'green'], }, }, style: { - textContent:(target, total) => `得分:${target}\n占比:${(target / total) * 100}%`, - } + textContent: (target, total) => `得分:${target}\n占比:${(target / total) * 100}%`, + }, }; return ; }; diff --git a/site/examples/statistics/histogram/demo/binWidth.js b/site/examples/statistics/histogram/demo/binWidth.js index cd57558c9..8318a46bf 100644 --- a/site/examples/statistics/histogram/demo/binWidth.js +++ b/site/examples/statistics/histogram/demo/binWidth.js @@ -68,7 +68,7 @@ const DemoHistogram = () => { binField: 'value', channel: 'count', binWidth: 4, - meta: { + scale: { x: { domainMin: 0, tickCount: 10 }, y: { domainMax: 15, diff --git a/site/examples/statistics/line/demo/basic.js b/site/examples/statistics/line/demo/basic.js index 1ecde7310..ec475abc2 100644 --- a/site/examples/statistics/line/demo/basic.js +++ b/site/examples/statistics/line/demo/basic.js @@ -3,40 +3,33 @@ import React from 'react'; import ReactDOM from 'react-dom'; const DemoLine = () => { + const data = [ + { year: '1991', value: 3 }, + { year: '1992', value: 4 }, + { year: '1993', value: 3.5 }, + { year: '1994', value: 5 }, + { year: '1995', value: 4.9 }, + { year: '1996', value: 6 }, + { year: '1997', value: 7 }, + { year: '1998', value: 9 }, + { year: '1999', value: 13 }, + ]; const config = { - data: { - type: 'fetch', - value: 'https://gw.alipayobjects.com/os/bmw-prod/1d565782-dde4-4bb6-8946-ea6a38ccf184.json', + data, + xField: 'year', + yField: 'value', + point: { + shapeField: 'square', + sizeField: 4, + }, + interaction: { + tooltip: { + marker: false, + }, }, - xField: 'Date', - yField: 'scales', - shapeField: 'smooth', style: { lineWidth: 2, }, - annotations: [ - { - type: 'text', - data: ['2014-03', 1834], - style: { - text: '2014-03, 受比特币影响,blockchain 1834', - wordWrap: true, - wordWrapWidth: 164, - dx: -174, - dy: 30, - fill: '#2C3542', - fillOpacity: 0.65, - fontSize: 10, - background: true, - backgroundRadius: 2, - connector: true, - startMarker: true, - startMarkerFill: '#2C3542', - startMarkerFillOpacity: 0.65, - }, - tooltip: false, - }, - ], }; return ; }; diff --git a/site/examples/statistics/line/demo/color.js b/site/examples/statistics/line/demo/color.js index 12353236f..64b5eec70 100644 --- a/site/examples/statistics/line/demo/color.js +++ b/site/examples/statistics/line/demo/color.js @@ -11,13 +11,12 @@ const DemoLine = () => { xField: (d) => new Date(d.date), yField: 'value', colorField: 'condition', - seriesField: () => 'a', shapeField: 'hvh', style: { gradient: 'x', lineWidth: 2, }, - meta: { + scale: { y: { nice: true }, color: { domain: ['CLR', 'FEW', 'SCT', 'BKN', 'OVC', 'VV '], diff --git a/site/examples/statistics/line/demo/line-threshold.js b/site/examples/statistics/line/demo/line-threshold.js index 002f4db81..7422c8ebb 100644 --- a/site/examples/statistics/line/demo/line-threshold.js +++ b/site/examples/statistics/line/demo/line-threshold.js @@ -20,7 +20,7 @@ const DemoLine = () => { lineWidth: 1.5, lineJoin: 'round', }, - meta: { + scale: { x: { utc: true }, y: { nice: true }, color: { type: 'threshold', domain: [55], range: ['black', 'red'] }, diff --git a/site/examples/statistics/line/demo/line-var-size.js b/site/examples/statistics/line/demo/line-var-size.js index 88b25d239..79c79a3ca 100644 --- a/site/examples/statistics/line/demo/line-var-size.js +++ b/site/examples/statistics/line/demo/line-var-size.js @@ -8,10 +8,9 @@ const DemoLine = () => { type: 'fetch', value: 'https://gw.alipayobjects.com/os/bmw-prod/55424a73-7cb8-4f79-b60d-3ab627ac5698.json', }, - xField: 'year', + xField: (d) => new Date(d.year), yField: 'value', sizeField: 'value', - stack: true, shapeField: 'trail', legend: { size: false }, colorField: 'category', diff --git a/site/examples/statistics/line/demo/meta.json b/site/examples/statistics/line/demo/meta.json index 69194fcff..e00061cdb 100644 --- a/site/examples/statistics/line/demo/meta.json +++ b/site/examples/statistics/line/demo/meta.json @@ -10,7 +10,7 @@ "zh": "基础折线图", "en": "Basic line plot" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*N1NWR7N-BDsAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*EH-dTLnE4bcAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "line-var-size.js", diff --git a/site/examples/statistics/line/demo/normalize.js b/site/examples/statistics/line/demo/normalize.js index 26cc1037f..9fcd8c1dd 100644 --- a/site/examples/statistics/line/demo/normalize.js +++ b/site/examples/statistics/line/demo/normalize.js @@ -12,7 +12,7 @@ const DemoLine = () => { yField: 'Close', colorField: 'Symbol', normalize: { basis: 'first', groupBy: 'color' }, - meta: { + scale: { y: { type: 'log' }, }, axis: { diff --git a/site/examples/statistics/pie/demo/quarter-circle.js b/site/examples/statistics/pie/demo/quarter-circle.js index 0a810f994..cea7e0763 100644 --- a/site/examples/statistics/pie/demo/quarter-circle.js +++ b/site/examples/statistics/pie/demo/quarter-circle.js @@ -12,7 +12,6 @@ const DemoPie = () => { { type: '分类五', value: 10 }, { type: '其他', value: 5 }, ], - appendPadding: 10, angleField: 'value', colorField: 'type', startAngle: Math.PI, diff --git a/site/examples/statistics/pie/demo/spider-label.js b/site/examples/statistics/pie/demo/spider-label.js index 70809ea49..cf234b122 100644 --- a/site/examples/statistics/pie/demo/spider-label.js +++ b/site/examples/statistics/pie/demo/spider-label.js @@ -15,16 +15,10 @@ const DemoPie = () => { data, angleField: 'value', colorField: 'type', - inset: 5, - paddingRight: 80, + radius: 0.8, label: { text: (d) => `${d.type}\n ${d.value}`, position: 'spider', - transform: [ - { - type: 'overlapDodgeY', - }, - ], }, legend: { color: { diff --git a/site/examples/statistics/radar/demo/area-radial.js b/site/examples/statistics/radar/demo/area-radial.js index 4a16d6adf..895d46f85 100644 --- a/site/examples/statistics/radar/demo/area-radial.js +++ b/site/examples/statistics/radar/demo/area-radial.js @@ -22,33 +22,32 @@ const DemoRadar = () => { }, xField: 'date', yField: 'avg', - meta: { x: { utc: true } }, - style: { stroke: "steelblue", strokeWidth: 1.5 }, - tooltip: { items: [{ channel: "y", valueFormatter: ".1f" }] }, + scale: { x: { utc: true } }, + style: { stroke: 'steelblue', strokeWidth: 1.5 }, + tooltip: { items: [{ channel: 'y', valueFormatter: '.1f' }] }, innerRadius: 0.4, axis: { y: { zIndex: 1, - direction: "center", + direction: 'center', title: null, - labelFormatter: (d, i, array) => - i === array.length - 1 ? `${d}°F` : `${d}`, - style: { labelStroke: "#fff", labelStrokeWidth: 5 }, + labelFormatter: (d, i, array) => (i === array.length - 1 ? `${d}°F` : `${d}`), + style: { labelStroke: '#fff', labelStrokeWidth: 5 }, }, - x: { grid: true, position: "inner" }, + x: { grid: true, position: 'inner' }, }, annotations: [ { - type: "area", - xField: "date", - yField: ["minmin", "maxmax"], - style: { fill: "lightsteelblue", fillOpacity: 0.2 }, + type: 'area', + xField: 'date', + yField: ['minmin', 'maxmax'], + style: { fill: 'lightsteelblue', fillOpacity: 0.2 }, }, { - type: "area", - xField: "date", - yField: ["min", "max"], - style: { fill: "steelblue", fillOpacity: 0.2 }, + type: 'area', + xField: 'date', + yField: ['min', 'max'], + style: { fill: 'steelblue', fillOpacity: 0.2 }, }, ], }; diff --git a/site/examples/statistics/radar/demo/basic.js b/site/examples/statistics/radar/demo/basic.js index 6076e5e84..5d371c5e4 100644 --- a/site/examples/statistics/radar/demo/basic.js +++ b/site/examples/statistics/radar/demo/basic.js @@ -20,16 +20,16 @@ const DemoRadar = () => { area: { style: { fillOpacity: 0.2, - } + }, }, - meta: { + scale: { x: { padding: 0.5, align: 0, }, y: { nice: true, - } + }, }, axis: { x: { diff --git a/site/examples/statistics/radar/demo/parallel-radar.js b/site/examples/statistics/radar/demo/parallel-radar.js index eee0b2335..325bdd018 100644 --- a/site/examples/statistics/radar/demo/parallel-radar.js +++ b/site/examples/statistics/radar/demo/parallel-radar.js @@ -28,13 +28,13 @@ const DemoRadar = () => { colorField: 'weight (lb)', coordinateType: 'radar', positionField: [ - "economy (mpg)", - "cylinders", - "displacement (cc)", - "power (hp)", - "weight (lb)", - "0-60 mph (s)", - "year", + 'economy (mpg)', + 'cylinders', + 'displacement (cc)', + 'power (hp)', + 'weight (lb)', + '0-60 mph (s)', + 'year', ], axis: { position: axis, @@ -48,15 +48,15 @@ const DemoRadar = () => { }, legend: { color: { - position: "bottom", - labelFormatter: "~s", + position: 'bottom', + labelFormatter: '~s', length: 200, - layout: { justifyContent: "center" }, + layout: { justifyContent: 'center' }, }, }, style: { strokeWidth: 1.5, strokeOpacity: 0.4 }, interaction: { tooltip: { series: false } }, - meta: { color: { palette: "brBG", offset: (t) => 1 - t } }, + scale: { color: { palette: 'brBG', offset: (t) => 1 - t } }, }; return ; }; diff --git a/site/examples/statistics/radar/demo/radar.js b/site/examples/statistics/radar/demo/radar.js index 96f20b469..7cc6c79b6 100644 --- a/site/examples/statistics/radar/demo/radar.js +++ b/site/examples/statistics/radar/demo/radar.js @@ -37,7 +37,7 @@ const DemoRadar = () => { fillOpacity: 0.5, }, }, - meta: { x: { padding: 0.5, align: 0 }, y: { tickCount: 5, domainMax: 80 } }, + scale: { x: { padding: 0.5, align: 0 }, y: { tickCount: 5, domainMax: 80 } }, axis: { x: { grid: true }, y: { zIndex: 1, title: false } }, interaction: { tooltip: { style: { crosshairsLineDash: [4, 4] } } }, style: { diff --git a/site/examples/statistics/radial-bar/demo/round-corner.js b/site/examples/statistics/radial-bar/demo/round-corner.js index 37cbff543..0089e8392 100644 --- a/site/examples/statistics/radial-bar/demo/round-corner.js +++ b/site/examples/statistics/radial-bar/demo/round-corner.js @@ -2,7 +2,6 @@ import { RadialBar } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; - const data = [ { name: 'X6', star: 297 }, { name: 'G', star: 506 }, @@ -19,13 +18,13 @@ const DemoRadialBar = () => { data, xField: 'name', yField: 'star', - maxAngle: 90, + maxAngle: 90, radius: 1, innerRadius: 0.2, style: { - radius:26, // 圆角 + radius: 26, // 圆角 }, - meta: { + scale: { y: { nice: true }, }, }; diff --git a/site/examples/statistics/rose/demo/rose-label.js b/site/examples/statistics/rose/demo/rose-label.js index c06629d0d..179905379 100644 --- a/site/examples/statistics/rose/demo/rose-label.js +++ b/site/examples/statistics/rose/demo/rose-label.js @@ -9,26 +9,25 @@ const DemoRose = () => { autoFit: false, radius: 0.85, data: { - type: "fetch", - value: - "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/rose-rose-label.json", + type: 'fetch', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/rose-rose-label.json', }, xField: 'year', yField: 'people', colorField: 'year', - transform: [{ type: "groupX", y: "sum" }], - meta: { y: { type: "sqrt" }, x: { padding: 0 } }, + transform: [{ type: 'groupX', y: 'sum' }], + scale: { y: { type: 'sqrt' }, x: { padding: 0 } }, axis: false, - legend: { color: { length: 400, layout: { justifyContent: "center" } } }, + legend: { color: { length: 400, layout: { justifyContent: 'center' } } }, labels: [ { - text: "people", - position: "outside", - formatter: "~s", - transform: [{ type: "overlapDodgeY" }], + text: 'people', + position: 'outside', + formatter: '~s', + transform: [{ type: 'overlapDodgeY' }], }, ], - tooltip: { items: [{ channel: "y", valueFormatter: "~s" }] }, + tooltip: { items: [{ channel: 'y', valueFormatter: '~s' }] }, }; return ; }; diff --git a/site/examples/statistics/rose/demo/rose.js b/site/examples/statistics/rose/demo/rose.js index 3a9efe6d8..3aa9d38a0 100644 --- a/site/examples/statistics/rose/demo/rose.js +++ b/site/examples/statistics/rose/demo/rose.js @@ -8,24 +8,23 @@ const DemoRose = () => { height: 720, autoFit: false, data: { - type: "fetch", - value: - "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/rose-rose.json", + type: 'fetch', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/rose-rose.json', }, xField: 'year', yField: 'people', - meta: { y: { type: "sqrt" } }, - transform: [{ type: "groupX", y: "sum" }], + scale: { y: { type: 'sqrt' } }, + transform: [{ type: 'groupX', y: 'sum' }], axis: { y: { title: 'sum of people', - labelFormatter: "~s", + labelFormatter: '~s', tickCount: 5, tickFilter: (d, i) => i !== 0, - direction: "right", + direction: 'right', }, }, - tooltip: { items: [{ channel: "y", valueFormatter: "~s" }] }, + tooltip: { items: [{ channel: 'y', valueFormatter: '~s' }] }, }; return ; }; diff --git a/site/examples/statistics/rose/demo/stacked-rose.js b/site/examples/statistics/rose/demo/stacked-rose.js index 5cd4b2fd9..9d52f1451 100644 --- a/site/examples/statistics/rose/demo/stacked-rose.js +++ b/site/examples/statistics/rose/demo/stacked-rose.js @@ -3,16 +3,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; const DemoRose = () => { - - const colors = [ - '#98abc5', - '#8a89a6', - '#7b6888', - '#6b486b', - '#a05d56', - '#d0743c', - '#ff8c00', - ]; + const colors = ['#98abc5', '#8a89a6', '#7b6888', '#6b486b', '#a05d56', '#d0743c', '#ff8c00']; const config = { width: 800, @@ -20,23 +11,22 @@ const DemoRose = () => { autoFit: false, innerRadius: 0.4, data: { - type: "fetch", - value: - "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/rose-stacked-rose.json", + type: 'fetch', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/rose-stacked-rose.json', transform: [ { - type: "fold", + type: 'fold', fields: [ - "Under 5 Years", - "5 to 13 Years", - "14 to 17 Years", - "18 to 24 Years", - "25 to 44 Years", - "45 to 64 Years", - "65 Years and Over", + 'Under 5 Years', + '5 to 13 Years', + '14 to 17 Years', + '18 to 24 Years', + '25 to 44 Years', + '45 to 64 Years', + '65 Years and Over', ], - key: "Age", - value: "Population", + key: 'Age', + value: 'Population', }, ], }, @@ -44,21 +34,21 @@ const DemoRose = () => { yField: 'Population', colorField: 'Age', stack: true, - meta: { - y: { type: "sqrt" }, + scale: { + y: { type: 'sqrt' }, color: { range: colors, }, }, axis: { - x: { position: "inner" }, + x: { position: 'inner' }, y: { - labelFormatter: "~s", + labelFormatter: '~s', tickFilter: (_, i) => i !== 0, - direction: "center", + direction: 'center', }, }, - legend: { color: { position: "center", display: "grid", gridCol: 1 } }, + legend: { color: { position: 'center', display: 'grid', gridCol: 1 } }, }; return ; }; diff --git a/site/examples/statistics/scatter/demo/point-aggregated.js b/site/examples/statistics/scatter/demo/point-aggregated.js index ea4ed0bca..afa63f746 100644 --- a/site/examples/statistics/scatter/demo/point-aggregated.js +++ b/site/examples/statistics/scatter/demo/point-aggregated.js @@ -8,20 +8,19 @@ const DemoScatter = () => { height: 240, inset: 10, data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/commits.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/commits.json', }, - style: { mainStroke: "black" }, xField: (d) => new Date(d.time).getUTCHours(), yField: (d) => new Date(d.time).getUTCDay(), - sizeField: "count", - colorField: "count", - shapeField: "point", - transform: [{ type: "group", size: "sum" }, { type: "sortY" }], - meta: { y: { type: "point" } }, + sizeField: 'count', + colorField: 'count', + shapeField: 'point', + transform: [{ type: 'group', size: 'sum' }, { type: 'sortY' }], + scale: { y: { type: 'point' } }, axis: { - x: { title: "time (hours)", tickCount: 24 }, - y: { title: "time (day)", grid: true }, + x: { title: 'time (hours)', tickCount: 24 }, + y: { title: 'time (day)', grid: true }, }, }; return ; diff --git a/site/examples/statistics/scatter/demo/point-dot.js b/site/examples/statistics/scatter/demo/point-dot.js index cedbaedb5..234f9c677 100644 --- a/site/examples/statistics/scatter/demo/point-dot.js +++ b/site/examples/statistics/scatter/demo/point-dot.js @@ -5,29 +5,28 @@ import ReactDOM from 'react-dom'; const DemoScatter = () => { const config = { data: { - type: "fetch", - value: - "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-dot.json", + type: 'fetch', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-dot.json', }, width: 800, height: 1200, autoFit: false, - coordinate: { transform: [{ type: "transpose" }] }, + coordinate: { transform: [{ type: 'transpose' }] }, interaction: { tooltip: { shared: true } }, xField: 'state', yField: 'population', colorField: 'age', - shapeField: "point", - meta: { color: { palette: "spectral" } }, - tooltip: { title: "state", items: ["population"] }, + shapeField: 'point', + scale: { color: { palette: 'spectral' } }, + tooltip: { title: 'state', items: ['population'] }, annotations: [ { - type: "link", - xField: "state", - yField: "population", - transform: [{ type: "groupX", y: "min", y1: "max" }], - meta: { y: { labelFormatter: ".0%" } }, - style: { stroke: "#000" }, + type: 'link', + xField: 'state', + yField: 'population', + transform: [{ type: 'groupX', y: 'min', y1: 'max' }], + scale: { y: { labelFormatter: '.0%' } }, + style: { stroke: '#000' }, tooltip: false, }, ], diff --git a/site/examples/statistics/scatter/demo/point-label.js b/site/examples/statistics/scatter/demo/point-label.js index fd633c3aa..23dd89726 100644 --- a/site/examples/statistics/scatter/demo/point-label.js +++ b/site/examples/statistics/scatter/demo/point-label.js @@ -5,18 +5,17 @@ import ReactDOM from 'react-dom'; const DemoScatter = () => { const config = { data: { - type: "fetch", - value: - "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-label.json", + type: 'fetch', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-label.json', }, xField: 'mpg', yField: 'hp', colorField: 'steelblue', - meta: { + scale: { x: { nice: true, domainMax: 38 }, y: { nice: true }, }, - label: { + label: { text: 'name', style: { stroke: '#fff', diff --git a/site/examples/statistics/scatter/demo/point-log.js b/site/examples/statistics/scatter/demo/point-log.js index c621bcb84..01242c120 100644 --- a/site/examples/statistics/scatter/demo/point-log.js +++ b/site/examples/statistics/scatter/demo/point-log.js @@ -5,17 +5,16 @@ import ReactDOM from 'react-dom'; const DemoScatter = () => { const config = { data: { - type: "fetch", - value: - "https://gw.alipayobjects.com/os/antvdemo/assets/data/bubble.json", + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antvdemo/assets/data/bubble.json', }, xField: 'GDP', yField: 'LifeExpectancy', sizeField: 'Population', colorField: 'continent', shapeField: 'point', - meta: { - size: { type: "log", range: [4, 20] }, + scale: { + size: { type: 'log', range: [4, 20] }, }, style: { fillOpacity: 0.3, lineWidth: 1 }, }; diff --git a/site/examples/statistics/scatter/demo/point-sequential.js b/site/examples/statistics/scatter/demo/point-sequential.js index 953ae36be..f54879d12 100644 --- a/site/examples/statistics/scatter/demo/point-sequential.js +++ b/site/examples/statistics/scatter/demo/point-sequential.js @@ -6,9 +6,8 @@ const DemoScatter = () => { const config = { paddingLeft: 60, data: { - type: "fetch", - value: - "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-sequential.json", + type: 'fetch', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-sequential.json', }, xField: (d) => new Date(d.date), yField: 'value', @@ -18,17 +17,14 @@ const DemoScatter = () => { stroke: '#000', strokeOpacity: 0.2, }, - meta: { + scale: { color: { palette: 'rdBu', offset: (t) => 1 - t, }, }, - tooltip: [ - { channel: 'x', name: 'year', valueFormatter: (d) => d.getFullYear() }, - { channel: 'y' }, - ], - annotations: [{ type: "lineY", data: [0], style: { stroke: "#000", strokeOpacity: 0.2 } }] + tooltip: [{ channel: 'x', name: 'year', valueFormatter: (d) => d.getFullYear() }, { channel: 'y' }], + annotations: [{ type: 'lineY', data: [0], style: { stroke: '#000', strokeOpacity: 0.2 } }], }; return ; }; diff --git a/site/examples/statistics/scatter/demo/point-shape.js b/site/examples/statistics/scatter/demo/point-shape.js index 261eaf1f4..8354f5f6c 100644 --- a/site/examples/statistics/scatter/demo/point-shape.js +++ b/site/examples/statistics/scatter/demo/point-shape.js @@ -13,7 +13,7 @@ const DemoScatter = () => { colorField: 'category', sizeField: 5, shapeField: 'category', - meta: { + scale: { shape: { range: ['point', 'plus', 'diamond'] }, }, }; diff --git a/site/examples/statistics/scatter/demo/point-stacked.js b/site/examples/statistics/scatter/demo/point-stacked.js index a3d8dc01d..aa51ac97f 100644 --- a/site/examples/statistics/scatter/demo/point-stacked.js +++ b/site/examples/statistics/scatter/demo/point-stacked.js @@ -5,32 +5,31 @@ import ReactDOM from 'react-dom'; const DemoScatter = () => { const config = { data: { - type: "fetch", - value: - "https://gw.alipayobjects.com/os/bmw-prod/88c601cd-c1ff-4c9b-90d5-740d0b710b7e.json", + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/88c601cd-c1ff-4c9b-90d5-740d0b710b7e.json', }, height: 360, autoFit: false, stack: { - y1: 'y' + y1: 'y', }, xField: (d) => 2021 - d.birth, yField: (d) => (d.gender === 'M' ? 1 : -1), colorField: 'gender', shapeField: 'point', - meta: { + scale: { x: { nice: true }, }, axis: { y: { - title: "← Women · Men →", + title: '← Women · Men →', labelFormatter: (d) => `${Math.abs(+d)}`, }, - x: { title: "Age →" }, + x: { title: 'Age →' }, }, - legend: { color: { title: "Gender" } }, - tooltip: { items: [{ channel: "x", name: "age" }] }, - annotations: [{ type: "lineY", data: [0], style: { stroke: "black" } }], + legend: { color: { title: 'Gender' } }, + tooltip: { items: [{ channel: 'x', name: 'age' }] }, + annotations: [{ type: 'lineY', data: [0], style: { stroke: 'black' } }], }; return ; }; diff --git a/site/examples/statistics/tiny/demo/area-annotation.js b/site/examples/statistics/tiny/demo/area-annotation.js index b5a22044e..ebaa21123 100644 --- a/site/examples/statistics/tiny/demo/area-annotation.js +++ b/site/examples/statistics/tiny/demo/area-annotation.js @@ -15,7 +15,7 @@ const DemoArea = () => { shapeField: 'smooth', xField: (_, idx) => idx, yField: (d) => d, - meta: { + scale: { y: { zero: true }, }, style: { diff --git a/site/examples/statistics/tiny/demo/basic-area.js b/site/examples/statistics/tiny/demo/basic-area.js index 140677c3d..eeeec8f05 100644 --- a/site/examples/statistics/tiny/demo/basic-area.js +++ b/site/examples/statistics/tiny/demo/basic-area.js @@ -13,7 +13,7 @@ const DemoArea = () => { shapeField: 'smooth', xField: (_, idx) => idx, yField: (d) => d, - meta: { + scale: { y: { zero: true }, }, style: { diff --git a/site/examples/statistics/tiny/demo/filled-area.js b/site/examples/statistics/tiny/demo/filled-area.js index 95817f546..5a52a4a1c 100644 --- a/site/examples/statistics/tiny/demo/filled-area.js +++ b/site/examples/statistics/tiny/demo/filled-area.js @@ -13,7 +13,7 @@ const DemoArea = () => { shapeField: 'smooth', xField: (_, idx) => idx, yField: (d) => d, - meta: { + scale: { y: { zero: true }, }, style: { diff --git a/site/package.json b/site/package.json index 285a3956c..a67170528 100644 --- a/site/package.json +++ b/site/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@ant-design/charts-site", - "version": "2.0.0-beta.2", + "version": "2.0.0", "description": "React Visual component library", "keywords": [ "antv", From 1b044556fa8d9818837b27d651e05b61e0b518c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=83=E9=B1=BC?= <48511770+leffy-yan@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:01:28 +0800 Subject: [PATCH 105/268] fix: bar-stacked json (#2202) Co-authored-by: zy371123 --- site/examples/statistics/bar/demo/stacked.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/examples/statistics/bar/demo/stacked.js b/site/examples/statistics/bar/demo/stacked.js index 83b7702c9..152b7c53a 100644 --- a/site/examples/statistics/bar/demo/stacked.js +++ b/site/examples/statistics/bar/demo/stacked.js @@ -6,7 +6,7 @@ const DemoBar = () => { const config = { data: { type: 'fetch', - value: 'https://site-dataa-s09001742540-site.dev.alipay.net/antd-charts/bar-stacked.json', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/bar-stacked.json', }, xField: 'state', yField: 'population', From 41722f2f42d40c0ff7d0557e876b80a699ce2460 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Tue, 21 Nov 2023 17:25:38 +0800 Subject: [PATCH 106/268] docs: image position (#2205) --- site/.dumirc.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/site/.dumirc.ts b/site/.dumirc.ts index ce3480980..373160e4a 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -139,11 +139,12 @@ export default defineConfig({ zh: '简单好用的 React 图表库。', en: 'Simple and easy to use React chart library.', }, - image: 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*5bIcTaxarjoAAAAAAAAAAAAADmJ7AQ/original', + image: + 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*wi05Q7Za5ZIAAAAAAAAAAAAADmJ7AQ/original', imageStyle: { - transform: 'scale(0.5)', - marginLeft: '150px', - marginTop: '-80px', + marginLeft: '80px', + magrinTop: '30px', + transform: 'scale(1.4)', }, buttons: [ { From df9d659907213dfef2e10e647635ad272819a946 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Tue, 21 Nov 2023 17:31:54 +0800 Subject: [PATCH 107/268] docs: image position (#2206) --- site/.dumirc.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 373160e4a..47eab99fc 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -143,7 +143,7 @@ export default defineConfig({ 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*wi05Q7Za5ZIAAAAAAAAAAAAADmJ7AQ/original', imageStyle: { marginLeft: '80px', - magrinTop: '30px', + marginTop: '30px', transform: 'scale(1.4)', }, buttons: [ From e127d642760e3ce8c72ab85f4baddc28b05d7512 Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Tue, 21 Nov 2023 18:01:55 +0800 Subject: [PATCH 108/268] =?UTF-8?q?docs:=20=E4=BF=AE=E6=94=B9=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=E5=9C=B0=E5=9D=80=20(#2207)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: lkd01632719 --- site/examples/statistics/area/demo/meta.json | 10 +++++----- site/examples/statistics/bar/demo/meta.json | 6 +++--- site/examples/statistics/base/demo/meta.json | 2 +- site/examples/statistics/box/demo/meta.json | 8 ++++---- site/examples/statistics/column/demo/meta.json | 10 +++++----- site/examples/statistics/funnel/demo/meta.json | 8 ++++---- site/examples/statistics/line/demo/meta.json | 4 ++-- site/examples/statistics/pie/demo/meta.json | 8 ++++---- site/examples/statistics/scatter/demo/meta.json | 8 ++++---- site/examples/statistics/treemap/demo/meta.json | 4 ++-- site/examples/statistics/venn/demo/meta.json | 10 +++++----- site/examples/statistics/violin/demo/meta.json | 6 +++--- site/examples/statistics/wordCloud/demo/meta.json | 4 ++-- 13 files changed, 44 insertions(+), 44 deletions(-) diff --git a/site/examples/statistics/area/demo/meta.json b/site/examples/statistics/area/demo/meta.json index e9dad0b2c..b62bfd63d 100644 --- a/site/examples/statistics/area/demo/meta.json +++ b/site/examples/statistics/area/demo/meta.json @@ -26,7 +26,7 @@ "zh": "堆叠面积图", "en": "Stacked Area Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*vymgT7mCD2YAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*z1rZToSDbZcAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "percentage-area.js", @@ -34,7 +34,7 @@ "zh": "归一化堆积面积图", "en": "Normalized Area, MaxIndex" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*WZe_T5tyWgoAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*pC8lSIAE9g0AAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "step-area.js", @@ -58,7 +58,7 @@ "zh": "彩条图", "en": "Stripe Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*2YiAT6WCb3oAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*jyBQQo9Dr84AAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "streamgraph.js", @@ -66,7 +66,7 @@ "zh": "河流图", "en": "Streamgraph" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*bFN4S7PCH9gAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*q6vQRZf60uEAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "range-spline-area.js", @@ -82,7 +82,7 @@ "zh": "出现顺序堆叠面积图", "en": "Stacked Area" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*3JKERLor91gAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*eLO6QLNTEAQAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "area-difference.js", diff --git a/site/examples/statistics/bar/demo/meta.json b/site/examples/statistics/bar/demo/meta.json index 155894980..8efabe64b 100644 --- a/site/examples/statistics/bar/demo/meta.json +++ b/site/examples/statistics/bar/demo/meta.json @@ -18,7 +18,7 @@ "zh": "自定义条形图 shape", "en": "Csutomize shape of bar plot" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Cv1WRaNg5AEAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*hB17Sq7hyuMAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "stacked.js", @@ -26,7 +26,7 @@ "zh": "堆叠条形图", "en": "Stacked Bar Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*RJvHRpHoFmYAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*LJi6RaswKdkAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "normalized-stacked.js", @@ -34,7 +34,7 @@ "zh": "归一化条形图", "en": "Normalized Bar Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*m6vKSptL6qkAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*K_YBQ7TmxkQAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "background.js", diff --git a/site/examples/statistics/base/demo/meta.json b/site/examples/statistics/base/demo/meta.json index 13130df29..bd6c1f06c 100644 --- a/site/examples/statistics/base/demo/meta.json +++ b/site/examples/statistics/base/demo/meta.json @@ -10,7 +10,7 @@ "zh": "层叠容器", "en": "Space Layer" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*sS5PRrp_lj0AAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*PuiQQZJXxNsAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "space-flex.js", diff --git a/site/examples/statistics/box/demo/meta.json b/site/examples/statistics/box/demo/meta.json index 565f6f2df..da4aee695 100644 --- a/site/examples/statistics/box/demo/meta.json +++ b/site/examples/statistics/box/demo/meta.json @@ -18,7 +18,7 @@ "zh": "预处理箱线图", "en": "Boxplot" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*pU-NQa1PgxQAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*A746SrYUxbsAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "grouped-box.js", @@ -26,7 +26,7 @@ "zh": "预处理分组箱线图", "en": "Grouped Boxplot" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*5E47Qa9nQaQAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*90B8R433zSAAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "boxplot-no-outlier.js", @@ -50,7 +50,7 @@ "zh": "带异常点分组箱线图", "en": "grouped Boxplot with Outlier" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ex7XR4hQTOYAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*w565TbseqlMAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "boxplot-one-dimension.js", @@ -66,7 +66,7 @@ "zh": "径向箱线图", "en": "Polar Boxplot" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*cCMOQ7YsuFkAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*G2DrSK5xIzsAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "box-tooltip.js", diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index 7fd4fcebc..1e1dce141 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -58,7 +58,7 @@ "zh": "区间柱形图", "en": "Range Column Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*hTfETY0ObOsAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*OAr7RpZGGtwAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "group-and-stack.js", @@ -66,7 +66,7 @@ "zh": "分组堆叠柱状图", "en": "Group and stack Column Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*vc_STL5MmhIAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*PflbQJXr-WQAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "bar-dodged.js", @@ -74,7 +74,7 @@ "zh": "分组条形图", "en": "Dodged Bar Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*uNxwQrz8Bh4AAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*3-WvRqW_iPUAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "stacked.js", @@ -82,7 +82,7 @@ "zh": "堆叠柱形图", "en": "Stacked Column Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*GwDUQbVt9XYAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*MMRnQbTjazcAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "connect-area.js", @@ -130,7 +130,7 @@ "zh": "百分比柱状图", "en": "Percent Column plot" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*3FTARIxIDHMAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*KXo2RaFUtQcAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/funnel/demo/meta.json b/site/examples/statistics/funnel/demo/meta.json index 658433753..c76aa7fc1 100644 --- a/site/examples/statistics/funnel/demo/meta.json +++ b/site/examples/statistics/funnel/demo/meta.json @@ -10,7 +10,7 @@ "zh": "漏斗图", "en": "Funnel" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*6syuS6eMD1AAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*VHVOTK8LhxkAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "pyramid.js", @@ -18,7 +18,7 @@ "zh": "金字塔图", "en": "Pyramid" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*8SagQbsQk6gAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*GqpjQLFLh0QAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "mirror-funnel.js", @@ -26,7 +26,7 @@ "zh": "对比漏斗图", "en": "Mirror Funnel" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*kITtSp7xbroAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*TCTrRaKsv78AAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "transpose.js", @@ -34,7 +34,7 @@ "zh": "转化漏斗图-转置", "en": "Annotation Funnel transpose" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*q59UR6L1gMQAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Ov19Tqg60toAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/line/demo/meta.json b/site/examples/statistics/line/demo/meta.json index e00061cdb..4d30e4c48 100644 --- a/site/examples/statistics/line/demo/meta.json +++ b/site/examples/statistics/line/demo/meta.json @@ -18,7 +18,7 @@ "zh": "变宽折线图", "en": "Var Size Line Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Y6_5RoRIM3kAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*2G1GRr60VI0AAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "connect-nulls.js", @@ -42,7 +42,7 @@ "zh": "归一化折线图", "en": "Normalize Line plot" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*MzXYRqHjHQEAAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*S3FFTaw_HTUAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "color.js", diff --git a/site/examples/statistics/pie/demo/meta.json b/site/examples/statistics/pie/demo/meta.json index 313a7d360..073ee4871 100644 --- a/site/examples/statistics/pie/demo/meta.json +++ b/site/examples/statistics/pie/demo/meta.json @@ -10,7 +10,7 @@ "zh": "基础饼图", "en": "Basic pie plot" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*5GMIRJsMVKYAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*DSItR6amdjMAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "outer-label.js", @@ -18,7 +18,7 @@ "zh": "饼图 - 外部图形标签", "en": "Pie plot - outer label" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*1PBjT7ScyuwAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*00hCQp7bMgsAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "spider-label.js", @@ -26,7 +26,7 @@ "zh": "饼图 - 蜘蛛布局标签", "en": "Pie plot - spider label" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*nMd3TYVB3_wAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Nln-QqYVb80AAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "custom-label.js", @@ -34,7 +34,7 @@ "zh": "饼图 - 自定义标签", "en": "Pie plot - custom label" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/2SfPlGTkFv/0d1d3e53-59f3-4ecb-a0ec-e0b9609e864c.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ZAK6RoTfHsAAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "quarter-circle.js", diff --git a/site/examples/statistics/scatter/demo/meta.json b/site/examples/statistics/scatter/demo/meta.json index 3d3b4107b..eabe8adac 100644 --- a/site/examples/statistics/scatter/demo/meta.json +++ b/site/examples/statistics/scatter/demo/meta.json @@ -41,7 +41,7 @@ "zh": "多形状散点图", "en": "Multi-Shape Scatterplot" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*eZdTSrbFVdgAAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*-OV3RJzmT1MAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "point-sequential.js", @@ -57,7 +57,7 @@ "zh": "扰动散点图", "en": "Jitter Scatterplot" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*0BaMRpu8tN8AAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*PowVRZQkoZUAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "point-stacked.js", @@ -73,7 +73,7 @@ "zh": "气泡图", "en": "Bubble Chart" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*TE7xQLXpdUUAAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*OUogR5lReacAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "point-log.js", @@ -81,7 +81,7 @@ "zh": "对数气泡图", "en": "Log Scatterplot" }, - "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*T8Y-T5BlUTgAAAAAAAAAAAAADmJ7AQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*y5UsRqFxILMAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "point-aggregated.js", diff --git a/site/examples/statistics/treemap/demo/meta.json b/site/examples/statistics/treemap/demo/meta.json index ac07c5713..e3376eef8 100644 --- a/site/examples/statistics/treemap/demo/meta.json +++ b/site/examples/statistics/treemap/demo/meta.json @@ -10,7 +10,7 @@ "zh": "矩阵树图", "en": "Treemap Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*T2zHS6J1cGMAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*q-YQTLCnkM4AAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "circlePacking.js", @@ -18,7 +18,7 @@ "zh": "Circle packing", "en": "CirclePacking Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*epG0TaxEVTsAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*dG9RRo27vwoAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/venn/demo/meta.json b/site/examples/statistics/venn/demo/meta.json index 4c2eff801..fb8d7fc00 100644 --- a/site/examples/statistics/venn/demo/meta.json +++ b/site/examples/statistics/venn/demo/meta.json @@ -10,7 +10,7 @@ "zh": "基础韦恩图", "en": "Basic venn plot" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/BJw8fy6uxU/009dd50e-c2a4-48dc-a79a-dc417123889f.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*I7XlS4ps7IcAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "custom-color.js", @@ -18,7 +18,7 @@ "zh": "自定义颜色", "en": "Custom color" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_lwk8lu/afts/img/A*zLutTqj3As0AAAAAAAAAAAAADma_AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*STtHQ6brAMAAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "label.js", @@ -26,7 +26,7 @@ "zh": "设置label", "en": "Label setting" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/BJw8fy6uxU/009dd50e-c2a4-48dc-a79a-dc417123889f.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*h7FaRLXj2kgAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "custom.js", @@ -34,7 +34,7 @@ "zh": "自定义韦恩图", "en": "Customize venn plot" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/T6cgHx5BHB/f2137e3b-5784-4626-a986-109fc8cb5feb.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*7qg4S4iOrnkAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "interaction.js", @@ -42,7 +42,7 @@ "zh": "韦恩图-元素交互", "en": "venn plot - with element action" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/BJw8fy6uxU/009dd50e-c2a4-48dc-a79a-dc417123889f.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Y5IuSo4u7PEAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/violin/demo/meta.json b/site/examples/statistics/violin/demo/meta.json index 13159b858..33737187f 100644 --- a/site/examples/statistics/violin/demo/meta.json +++ b/site/examples/statistics/violin/demo/meta.json @@ -10,7 +10,7 @@ "zh": "和密度图", "en": "Density plot" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_lwk8lu/afts/img/A*pctXQbGFiBIAAAAAAAAAAAAADma_AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*LKFOT6UA11QAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "basic.js", @@ -18,7 +18,7 @@ "zh": "基础小提琴图", "en": "Basic violin plot" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_lwk8lu/afts/img/A*vKc6SJjPY40AAAAAAAAAAAAADma_AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*lU62ToCw4_AAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "polar.js", @@ -26,7 +26,7 @@ "zh": "极坐标小提琴图", "en": "Polar violin plot" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_lwk8lu/afts/img/A*LLm1S5RBXGIAAAAAAAAAAAAADma_AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*5-6LTohbpFsAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/wordCloud/demo/meta.json b/site/examples/statistics/wordCloud/demo/meta.json index 8fc982c00..6c08a485b 100644 --- a/site/examples/statistics/wordCloud/demo/meta.json +++ b/site/examples/statistics/wordCloud/demo/meta.json @@ -10,7 +10,7 @@ "zh": "词云图", "en": "WordCloud Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*2uvpTI0lHiYAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*hC4uR6yuBa4AAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "wordCloud-image.js", @@ -18,7 +18,7 @@ "zh": "带图片遮罩的词云图", "en": "WordCloud with image mask" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*zDm0SJEQSHwAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*xgP6QJlzghYAAAAAAAAAAAAADmJ7AQ/original" } ] } From 1d9bcddeb79049a1b59cba8e56fde7cb591d88d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E6=B5=B7?= <43226029+dongxifan@users.noreply.github.com> Date: Tue, 21 Nov 2023 18:39:29 +0800 Subject: [PATCH 109/268] =?UTF-8?q?feat=EF=BC=9A=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=89=93=E5=8C=85=E5=9B=BEcirclePacking=E6=BC=94=E7=A4=BAdemo?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E5=B1=95=E7=A4=BA=20(#2204)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat:更新打包图circlePacking演示demo文本展示 * feat:删除打包图冗余注释 --------- Co-authored-by: xifandong.dxf --- .../examples/statistics/treemap/demo/circlePacking.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/site/examples/statistics/treemap/demo/circlePacking.js b/site/examples/statistics/treemap/demo/circlePacking.js index 47731f9aa..d7cb37e63 100644 --- a/site/examples/statistics/treemap/demo/circlePacking.js +++ b/site/examples/statistics/treemap/demo/circlePacking.js @@ -20,6 +20,17 @@ const DemoCirclePacking = () => { interpolate: interpolateHcl }, }, + label: { + text: (d) => { + return (d.height === 0 ? `${d.data.name}` : "") + }, + position: 'inside', + transform: [ + { + type: 'overflowHide', + }, + ], + }, }; return ; }; From 149efc05d4789ace0ee81594694e34239d113c86 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 21 Nov 2023 19:41:55 +0800 Subject: [PATCH 110/268] docs: improve the example (#2209) --- .../column/demo/annotation-label.js | 1 + .../statistics/column/demo/label-text.js | 65 +++++++++++++++++++ .../examples/statistics/column/demo/meta.json | 18 ++++- .../statistics/column/demo/tooltip.js | 53 +++++++++++++++ 4 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 site/examples/statistics/column/demo/label-text.js create mode 100644 site/examples/statistics/column/demo/tooltip.js diff --git a/site/examples/statistics/column/demo/annotation-label.js b/site/examples/statistics/column/demo/annotation-label.js index f475170b1..ea443cff2 100644 --- a/site/examples/statistics/column/demo/annotation-label.js +++ b/site/examples/statistics/column/demo/annotation-label.js @@ -38,6 +38,7 @@ const DemoColumn = () => { position: 'top', textAlign: 'center', }, + tooltip: false, }); }); diff --git a/site/examples/statistics/column/demo/label-text.js b/site/examples/statistics/column/demo/label-text.js new file mode 100644 index 000000000..559b424f7 --- /dev/null +++ b/site/examples/statistics/column/demo/label-text.js @@ -0,0 +1,65 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { type: '1-3秒', value: 0.36 }, + { type: '4-10秒', value: 0.25 }, + { type: '11-30秒', value: 0.24 }, + { type: '31-60秒', value: 0.19 }, + { type: '1-3分', value: 0.12 }, + { type: '3-10分', value: 0.15 }, + { type: '10-30分', value: 0.16 }, + { type: '30+分', value: 0.1 }, +]; + +const DemoColumn = () => { + const chartRef = React.useRef(null); + + const medal = (datum, ranking) => { + if (ranking > 2) return datum; + const { chart } = chartRef.current; + const { document } = chart.getContext().canvas; + const group = document?.createElement('g', {}); + + const size = ranking === 0 ? 20 : 15; + const icon = document.createElement('image', { + style: { + src: 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*1NiMRKb2sfMAAAAAAAAAAAAADmJ7AQ/original', + width: size, + height: size, + anchor: '0.5 0.5', + }, + }); + const text = ['冠军🏆', '亚军🥈', '季军🥉'][ranking]; + const label = document.createElement('text', { + style: { + text, + fill: 'gray', + textAlign: 'center', + transform: `translate(0, 25)`, + }, + }); + + group.appendChild(icon); + group.appendChild(label); + return group; + }; + + const config = { + data, + xField: 'type', + yField: 'value', + colorField: 'type', + axis: { + x: { + size: 40, + labelFormatter: (datum, index) => medal(datum, index), + }, + }, + onReady: (plot) => (chartRef.current = plot), + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index 1e1dce141..309783109 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -130,7 +130,23 @@ "zh": "百分比柱状图", "en": "Percent Column plot" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*KXo2RaFUtQcAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*3FTARIxIDHMAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "label-text.js", + "title": { + "zh": "自定义坐标轴标签", + "en": "Customize axis labels" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*X_B0Q7Co9xEAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "tooltip.js", + "title": { + "zh": "自定义提示", + "en": "Customize tooltip" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*lZu1Q5vMEewAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/column/demo/tooltip.js b/site/examples/statistics/column/demo/tooltip.js new file mode 100644 index 000000000..5d405200b --- /dev/null +++ b/site/examples/statistics/column/demo/tooltip.js @@ -0,0 +1,53 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoColumn = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antfincdn/8elHX%26irfq/stack-column-data.json', + }, + xField: 'year', + yField: 'value', + colorField: 'type', + stack: true, + interaction: { + tooltip: { + render: (e, { title, items }) => { + return ( +
+

{title}

+ {items.map((item) => { + const { name, value, color } = item; + return ( +
+
+
+ + {name} +
+ {value} +
+
+ ); + })} +
+ ); + }, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 1ceba1b10c305b718d6266555521d7a78a0e7410 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 21 Nov 2023 20:48:11 +0800 Subject: [PATCH 111/268] fix: tiny examples (#2210) * fix: tiny examples * fix: site title * fix: version --- site/.dumirc.ts | 13 ++++--------- site/examples/statistics/radar/demo/radar.js | 1 - .../statistics/tiny/demo/area-annotation.js | 14 ++++---------- site/examples/statistics/tiny/demo/basic-area.js | 16 ++++++---------- .../statistics/tiny/demo/basic-column.js | 12 ++++++------ site/examples/statistics/tiny/demo/basic-line.js | 15 +++++++-------- .../statistics/tiny/demo/column-annotation.js | 12 ++++++------ .../examples/statistics/tiny/demo/filled-area.js | 16 ++++++---------- .../statistics/tiny/demo/line-annotation.js | 12 ++++-------- site/examples/statistics/tiny/demo/ring.js | 7 +++++-- site/package.json | 2 +- 11 files changed, 49 insertions(+), 71 deletions(-) diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 47eab99fc..762df4da7 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -127,20 +127,15 @@ export default defineConfig({ }, ], detail: { - engine: { - zh: 'AntV react', - en: 'AntV react', - }, title: { - zh: 'AntV react·可视化组件库', - en: 'AntV react·component library', + zh: 'AntV React·可视化组件库', + en: 'AntV React·Component Library', }, description: { zh: '简单好用的 React 图表库。', en: 'Simple and easy to use React chart library.', }, - image: - 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*wi05Q7Za5ZIAAAAAAAAAAAAADmJ7AQ/original', + image: 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*wi05Q7Za5ZIAAAAAAAAAAAAADmJ7AQ/original', imageStyle: { marginLeft: '80px', marginTop: '30px', @@ -194,7 +189,7 @@ export default defineConfig({ en: 'Professional and reliable', }, description: { - zh: 'AntV 团队支持,简单易容、专业可靠、无限可能"', + zh: 'AntV 团队支持,简单易容、专业可靠、无限可能', en: 'AntV team support, easy to accommodate, professional and reliable, unlimited possibilities.', }, }, diff --git a/site/examples/statistics/radar/demo/radar.js b/site/examples/statistics/radar/demo/radar.js index 7cc6c79b6..0a3f96e3b 100644 --- a/site/examples/statistics/radar/demo/radar.js +++ b/site/examples/statistics/radar/demo/radar.js @@ -39,7 +39,6 @@ const DemoRadar = () => { }, scale: { x: { padding: 0.5, align: 0 }, y: { tickCount: 5, domainMax: 80 } }, axis: { x: { grid: true }, y: { zIndex: 1, title: false } }, - interaction: { tooltip: { style: { crosshairsLineDash: [4, 4] } } }, style: { lineWidth: 2, }, diff --git a/site/examples/statistics/tiny/demo/area-annotation.js b/site/examples/statistics/tiny/demo/area-annotation.js index ebaa21123..295b3135f 100644 --- a/site/examples/statistics/tiny/demo/area-annotation.js +++ b/site/examples/statistics/tiny/demo/area-annotation.js @@ -4,8 +4,7 @@ import ReactDOM from 'react-dom'; const data = [ 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, -]; - +].map((value, index) => ({ value, index })); const DemoArea = () => { const config = { data, @@ -13,21 +12,16 @@ const DemoArea = () => { height: 80, padding: 8, shapeField: 'smooth', - xField: (_, idx) => idx, - yField: (d) => d, - scale: { - y: { zero: true }, - }, + xField: 'index', + yField: 'value', style: { fill: 'linear-gradient(-90deg, white 0%, darkgreen 100%)', fillOpacity: 0.6, }, - animate: { enter: { type: 'fadeIn' } }, - interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, annotations: [ { type: 'lineY', - data: [data.reduce((acc, cur) => acc + cur, 0) / data.length], + data: [data.reduce((acc, cur) => acc + cur.value, 0) / data.length], label: { text: '平均值', position: 'left', diff --git a/site/examples/statistics/tiny/demo/basic-area.js b/site/examples/statistics/tiny/demo/basic-area.js index eeeec8f05..7580b02e6 100644 --- a/site/examples/statistics/tiny/demo/basic-area.js +++ b/site/examples/statistics/tiny/demo/basic-area.js @@ -3,25 +3,21 @@ import React from 'react'; import ReactDOM from 'react-dom'; const DemoArea = () => { + const data = [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, + ].map((value, index) => ({ value, index })); const config = { - data: [ - 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, - ], + data, width: 480, height: 80, padding: 8, shapeField: 'smooth', - xField: (_, idx) => idx, - yField: (d) => d, - scale: { - y: { zero: true }, - }, + xField: 'index', + yField: 'value', style: { fill: 'linear-gradient(-90deg, white 0%, darkgreen 100%)', fillOpacity: 0.6, }, - animate: { enter: { type: 'fadeIn' } }, - interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, }; return ; }; diff --git a/site/examples/statistics/tiny/demo/basic-column.js b/site/examples/statistics/tiny/demo/basic-column.js index 5d257cc6e..a1abb2bbc 100644 --- a/site/examples/statistics/tiny/demo/basic-column.js +++ b/site/examples/statistics/tiny/demo/basic-column.js @@ -3,16 +3,16 @@ import React from 'react'; import ReactDOM from 'react-dom'; const DemoLine = () => { + const data = [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, + ].map((value, index) => ({ value, index })); const config = { - data: [ - 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, - ], + data, width: 480, height: 80, padding: 8, - xField: (_, idx) => idx, - yField: (d) => d, - interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, + xField: 'index', + yField: 'value', }; return ; }; diff --git a/site/examples/statistics/tiny/demo/basic-line.js b/site/examples/statistics/tiny/demo/basic-line.js index 2bb5a5129..fc564d2f8 100644 --- a/site/examples/statistics/tiny/demo/basic-line.js +++ b/site/examples/statistics/tiny/demo/basic-line.js @@ -3,18 +3,19 @@ import React from 'react'; import ReactDOM from 'react-dom'; const DemoLine = () => { + const data = [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, + ].map((value, index) => ({ value, index })); const config = { - data: [ - 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, - ], + data, width: 480, height: 120, shapeField: 'smooth', - xField: (_, idx) => idx, - yField: (d) => d, + xField: 'index', + yField: 'value', label: { selector: 'last', - text: (d) => d, + text: (d) => d.value, textAlign: 'right', textBaseline: 'bottom', dx: -10, @@ -22,8 +23,6 @@ const DemoLine = () => { connector: true, style: { fontSize: 10 }, }, - animate: { enter: { type: 'fadeIn' } }, - interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, }; return ; }; diff --git a/site/examples/statistics/tiny/demo/column-annotation.js b/site/examples/statistics/tiny/demo/column-annotation.js index 2d54dc5e6..96dd84d99 100644 --- a/site/examples/statistics/tiny/demo/column-annotation.js +++ b/site/examples/statistics/tiny/demo/column-annotation.js @@ -3,16 +3,16 @@ import React from 'react'; import ReactDOM from 'react-dom'; const DemoLine = () => { + const data = [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, + ].map((value, index) => ({ value, index })); const config = { - data: [ - 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, - ], + data, width: 480, height: 80, padding: 8, - xField: (_, idx) => idx, - yField: (d) => d, - interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, + xField: 'index', + yField: 'value', annotations: [ { type: 'lineY', diff --git a/site/examples/statistics/tiny/demo/filled-area.js b/site/examples/statistics/tiny/demo/filled-area.js index 5a52a4a1c..22a1eaf78 100644 --- a/site/examples/statistics/tiny/demo/filled-area.js +++ b/site/examples/statistics/tiny/demo/filled-area.js @@ -3,25 +3,21 @@ import React from 'react'; import ReactDOM from 'react-dom'; const DemoArea = () => { + const data = [ + 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, + ].map((value, index) => ({ value, index })); const config = { - data: [ - 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, - ], + data, width: 480, height: 80, padding: 8, shapeField: 'smooth', - xField: (_, idx) => idx, - yField: (d) => d, - scale: { - y: { zero: true }, - }, + xField: 'index', + yField: 'value', style: { fill: '#d6e3fd', fillOpacity: 0.6, }, - animate: { enter: { type: 'fadeIn' } }, - interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, }; return ; }; diff --git a/site/examples/statistics/tiny/demo/line-annotation.js b/site/examples/statistics/tiny/demo/line-annotation.js index f304ad70e..06d3844d3 100644 --- a/site/examples/statistics/tiny/demo/line-annotation.js +++ b/site/examples/statistics/tiny/demo/line-annotation.js @@ -3,25 +3,22 @@ import React from 'react'; import ReactDOM from 'react-dom'; const data = [ 264, 417, 438, 887, 309, 397, 550, 575, 563, 430, 525, 592, 492, 467, 513, 546, 983, 340, 539, 243, 226, 192, -]; +].map((value, index) => ({ value, index })); const DemoLine = () => { const config = { data, width: 480, height: 120, shapeField: 'smooth', - xField: (_, idx) => idx, - yField: (d) => d, - animate: { enter: { type: 'fadeIn' } }, - interaction: { tooltip: { render: (e, { title, items }) => items[0].value } }, + xField: 'index', + yField: 'value', annotations: [ { type: 'lineY', - data: [data.reduce((acc, cur) => acc + cur, 0) / data.length], + data: [data.reduce((acc, cur) => acc + cur.value, 0) / data.length], label: { text: '平均值', position: 'left', - dx: -10, style: { textBaseline: 'bottom' }, }, style: { stroke: 'rgba(0, 0, 0)' }, @@ -32,7 +29,6 @@ const DemoLine = () => { label: { text: '目标值', position: 'left', - dx: -10, style: { textBaseline: 'bottom' }, }, style: { stroke: 'rgba(0, 0, 0)' }, diff --git a/site/examples/statistics/tiny/demo/ring.js b/site/examples/statistics/tiny/demo/ring.js index 7a3a2da54..39e041eb5 100644 --- a/site/examples/statistics/tiny/demo/ring.js +++ b/site/examples/statistics/tiny/demo/ring.js @@ -3,14 +3,17 @@ import React from 'react'; import ReactDOM from 'react-dom'; const DemoRing = () => { + const percent = 0.7; const config = { - percent: 0.7, + percent, + width: 120, + height: 120, color: ['#E8EFF5', '#66AFF4'], annotations: [ { type: 'text', style: { - text: `${progress * 100}%`, + text: `${percent * 100}%`, x: '50%', y: '50%', textAlign: 'center', diff --git a/site/package.json b/site/package.json index a67170528..256970c76 100644 --- a/site/package.json +++ b/site/package.json @@ -28,7 +28,7 @@ "start": "cross-env NODE_OPTIONS=--max_old_space_size=8192 pnpm run develop" }, "devDependencies": { - "@antv/dumi-theme-antv": "^0.4.1", + "@antv/dumi-theme-antv": "^0.4.2", "@types/react": "^16.14.8", "@types/react-dom": "^16.9.13", "cross-env": "^7.0.3", From af845e03a0cc185e65db451ca96e31e384f2b050 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 21 Nov 2023 20:59:38 +0800 Subject: [PATCH 112/268] fix: site engine (#2211) --- site/.dumirc.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 762df4da7..67983dc81 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -127,9 +127,13 @@ export default defineConfig({ }, ], detail: { + engine: { + zh: 'AntV React', + en: 'AntV React', + }, title: { - zh: 'AntV React·可视化组件库', - en: 'AntV React·Component Library', + zh: '·可视化组件库', + en: '·Component Library', }, description: { zh: '简单好用的 React 图表库。', From d4a024231907564ff7f26b6bf725547ddf0a8b21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E6=B5=B7?= <43226029+dongxifan@users.noreply.github.com> Date: Tue, 21 Nov 2023 22:23:04 +0800 Subject: [PATCH 113/268] =?UTF-8?q?docs=EF=BC=9A=E6=9B=B4=E6=96=B0circlePa?= =?UTF-8?q?cking=E4=B8=AD=E6=96=87=E5=90=8D=E4=B8=BA=E6=8D=86=E7=BB=91?= =?UTF-8?q?=E5=9B=BE=EF=BC=8C=E5=B9=B6=E4=BF=AE=E6=94=B9=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=20(#2213)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Revert "feat:更新打包图circlePacking演示demo文本展示 (#2204)" This reverts commit 1d9bcddeb79049a1b59cba8e56fde7cb591d88d8. * docs:更新circlePacking名称为捆绑图,并修改路径 --------- Co-authored-by: xifandong.dxf --- .../demo/circlePacking.js | 11 ----------- .../statistics/circle-packing/demo/meta.json | 16 ++++++++++++++++ .../statistics/circle-packing/index.en.md | 4 ++++ .../statistics/circle-packing/index.zh.md | 4 ++++ site/examples/statistics/treemap/demo/meta.json | 10 +--------- 5 files changed, 25 insertions(+), 20 deletions(-) rename site/examples/statistics/{treemap => circle-packing}/demo/circlePacking.js (75%) create mode 100644 site/examples/statistics/circle-packing/demo/meta.json create mode 100644 site/examples/statistics/circle-packing/index.en.md create mode 100644 site/examples/statistics/circle-packing/index.zh.md diff --git a/site/examples/statistics/treemap/demo/circlePacking.js b/site/examples/statistics/circle-packing/demo/circlePacking.js similarity index 75% rename from site/examples/statistics/treemap/demo/circlePacking.js rename to site/examples/statistics/circle-packing/demo/circlePacking.js index d7cb37e63..47731f9aa 100644 --- a/site/examples/statistics/treemap/demo/circlePacking.js +++ b/site/examples/statistics/circle-packing/demo/circlePacking.js @@ -20,17 +20,6 @@ const DemoCirclePacking = () => { interpolate: interpolateHcl }, }, - label: { - text: (d) => { - return (d.height === 0 ? `${d.data.name}` : "") - }, - position: 'inside', - transform: [ - { - type: 'overflowHide', - }, - ], - }, }; return ; }; diff --git a/site/examples/statistics/circle-packing/demo/meta.json b/site/examples/statistics/circle-packing/demo/meta.json new file mode 100644 index 000000000..f5fd20c67 --- /dev/null +++ b/site/examples/statistics/circle-packing/demo/meta.json @@ -0,0 +1,16 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "circlePacking.js", + "title": { + "zh": "捆绑图", + "en": "CirclePacking Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*epG0TaxEVTsAAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/site/examples/statistics/circle-packing/index.en.md b/site/examples/statistics/circle-packing/index.en.md new file mode 100644 index 000000000..a55544128 --- /dev/null +++ b/site/examples/statistics/circle-packing/index.en.md @@ -0,0 +1,4 @@ +--- +title: Circle Packing +order: 13 +--- diff --git a/site/examples/statistics/circle-packing/index.zh.md b/site/examples/statistics/circle-packing/index.zh.md new file mode 100644 index 000000000..2765811fb --- /dev/null +++ b/site/examples/statistics/circle-packing/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 捆绑图 +order: 13 +--- diff --git a/site/examples/statistics/treemap/demo/meta.json b/site/examples/statistics/treemap/demo/meta.json index e3376eef8..9cf03d8fd 100644 --- a/site/examples/statistics/treemap/demo/meta.json +++ b/site/examples/statistics/treemap/demo/meta.json @@ -10,15 +10,7 @@ "zh": "矩阵树图", "en": "Treemap Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*q-YQTLCnkM4AAAAAAAAAAAAADmJ7AQ/original" - }, - { - "filename": "circlePacking.js", - "title": { - "zh": "Circle packing", - "en": "CirclePacking Chart" - }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*dG9RRo27vwoAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*T2zHS6J1cGMAAAAAAAAAAAAADmJ7AQ/original" } ] } From 37defd42332e795a5f75f7835763e0d7b057d377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E6=B5=B7?= <43226029+dongxifan@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:35:03 +0800 Subject: [PATCH 114/268] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0label?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=20(#2216)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statistics/circle-packing/demo/circlePacking.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/site/examples/statistics/circle-packing/demo/circlePacking.js b/site/examples/statistics/circle-packing/demo/circlePacking.js index 47731f9aa..790b80c0b 100644 --- a/site/examples/statistics/circle-packing/demo/circlePacking.js +++ b/site/examples/statistics/circle-packing/demo/circlePacking.js @@ -20,6 +20,15 @@ const DemoCirclePacking = () => { interpolate: interpolateHcl }, }, + label: { + text: (d) => d.height === 0 ? d.data.name : '', + position: 'inside', + transform: [ + { + type: 'overflowHide' + }, + ] + } }; return ; }; From f47ef199b60124efa533af2c62177ce6d104c40a Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 22 Nov 2023 12:19:39 +0800 Subject: [PATCH 115/268] docs: manual (#2218) --- site/docs/manual/contact.zh.md | 4 ++-- site/docs/manual/introduction.zh.md | 2 +- site/docs/manual/upgrade.en.md | 7 ++++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/site/docs/manual/contact.zh.md b/site/docs/manual/contact.zh.md index fe4b1bf77..6bb9f2d7d 100644 --- a/site/docs/manual/contact.zh.md +++ b/site/docs/manual/contact.zh.md @@ -13,6 +13,6 @@ order: 9 * 知乎专栏:https://zhuanlan.zhihu.com/aiux-antv -* 钉钉群组号码: 35686967 +* 钉钉群组号码: 44788198 - + diff --git a/site/docs/manual/introduction.zh.md b/site/docs/manual/introduction.zh.md index cc452cacd..168247b9d 100644 --- a/site/docs/manual/introduction.zh.md +++ b/site/docs/manual/introduction.zh.md @@ -13,7 +13,7 @@ redirect_from: - 易于配置:用户能够根据具体业务需要较为轻松的调整图表细节 -- 体验良好:视觉和交互体验聚焦于如何能够**展示和发现信息**"这一图表本源的职能上 +- 体验良好:视觉和交互体验聚焦于如何能够**展示和发现信息**这一图表本源的职能上
像使用组件一样生成图表,开箱即用,你甚至不需要修改任何配置项就可以满足需求,真正的默认好用,有没有心动想试试的感觉。 diff --git a/site/docs/manual/upgrade.en.md b/site/docs/manual/upgrade.en.md index 6dd90efd2..d55c7d767 100644 --- a/site/docs/manual/upgrade.en.md +++ b/site/docs/manual/upgrade.en.md @@ -1 +1,6 @@ - \ No newline at end of file +--- +title: Upgrade +order: 7 +--- + + From c490e64aae295de15be252c827e7e885a45c7fdd Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 22 Nov 2023 14:13:22 +0800 Subject: [PATCH 116/268] chore: version update (#2219) --- config/webpack.js | 6 ++++- packages/charts/package.json | 2 +- packages/charts/src/index.ts | 2 -- packages/plots/package.json | 2 +- site/docs/manual/getting-started.zh.md | 34 ++++++++++---------------- 5 files changed, 20 insertions(+), 26 deletions(-) diff --git a/config/webpack.js b/config/webpack.js index 68cbec048..e30864c23 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -34,10 +34,14 @@ const getWebpackConfig = (name, library) => { }, 'react-dom': { root: 'ReactDOM', - commonjs2: 'react-dom', commonjs: 'react-dom', amd: 'react-dom', }, + 'lodash-es': { + root: '_', + commonjs: 'lodash', + amd: 'lodash', + }, }, module: { rules: [ diff --git a/packages/charts/package.json b/packages/charts/package.json index 87beb3f62..8a0e31776 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@ant-design/charts", - "version": "2.0.0-beta.0", + "version": "2.0.0", "description": "AntV upper level visual component library", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/charts/src/index.ts b/packages/charts/src/index.ts index ea5519eaa..0e4bbaf74 100644 --- a/packages/charts/src/index.ts +++ b/packages/charts/src/index.ts @@ -1,3 +1 @@ export * from '@ant-design/plots'; - -export const version = '2.0.0-beta.0'; diff --git a/packages/plots/package.json b/packages/plots/package.json index 541794ebe..14cb42a97 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@antv/event-emitter": "^0.1.3", - "@antv/g2": "^5.1.8", + "@antv/g2": "^5.1.9", "size-sensor": "^1.0.1", "@ant-design/charts-util": "workspace:*" }, diff --git a/site/docs/manual/getting-started.zh.md b/site/docs/manual/getting-started.zh.md index 1b935bca8..316ff27fd 100644 --- a/site/docs/manual/getting-started.zh.md +++ b/site/docs/manual/getting-started.zh.md @@ -4,12 +4,11 @@ order: 1 --- ## 安装 -### 通过 npm 安装 +### 方式一:通过 npm 安装 我们提供了 Ant Design 的 npm 包,通过下面的命令即可完成安装: ```bash -// 推荐用法 npm install @ant-design/charts --save ``` @@ -19,15 +18,6 @@ npm install @ant-design/charts --save import { Line } from '@ant-design/charts'; ``` -也可仅引入相关子包 -- 统计图表:`@ant-design/plots` -- 地图:`@ant-design/maps` -- 流程图:`@ant-design/flowchart` -- 关系图:`@ant-design/graphs` - - -流程图除 `react`、`react-dom` 外,还依赖 `antd`、`@ant-design/icons`、`lodash`,使用时确保已经安装,同时记得引入样式文件 `import "@ant-design/flowchart/dist/index.css";` - ```ts "peerDependencies": { "lodash-es": "^4.17.20", @@ -36,33 +26,35 @@ import { Line } from '@ant-design/charts'; } ``` -### 浏览器引入 +在需求明确的情况下,也可仅引入相关子包 + +```bash +# 统计图表 +npm install @ant-design/plots --save +``` + +### 方式二:浏览器引入 既可以通过将脚本下载到本地也可以直接引入在线资源。 ```ts // Plots 相关的图表 -// Flowchart 相关的图表 - -// Maps 相关的图表 - -// Graphs 相关的图表 - ``` -由于 @ant-design/charts 里面 externals 了 `react` 和 `react-dom`,该方式使用时需要在项目里面做同样的操作,通过 CDN 的方式在 `charts.min.js` 之前引入 `react` 和 `react-dom`,不同图表 externals 会有差别。 - - +由于 @ant-design/charts 里面 externals 了 `react` 、`react-dom` 和 `lodash-es`,使用时需要通过 CDN 的方式在 `charts.min.js` 之前引入对应包的 CDN 地址。 + ```ts // webpack.config.js externals: { react: 'React', 'react-dom': 'ReactDOM', + 'lodash-es': 'lodash' } // public/index.html + // 按需引入 ``` From e2136ee238a04361b20330795405afe307e22d18 Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Wed, 22 Nov 2023 14:43:44 +0800 Subject: [PATCH 117/268] chore: version --- config/webpack.js | 2 ++ packages/charts/package.json | 2 +- packages/plots/package.json | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/config/webpack.js b/config/webpack.js index e30864c23..2c86c0b01 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -34,11 +34,13 @@ const getWebpackConfig = (name, library) => { }, 'react-dom': { root: 'ReactDOM', + commonjs2: 'react-dom', commonjs: 'react-dom', amd: 'react-dom', }, 'lodash-es': { root: '_', + commonjs2: 'lodash', commonjs: 'lodash', amd: 'lodash', }, diff --git a/packages/charts/package.json b/packages/charts/package.json index 8a0e31776..2d83e0590 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@ant-design/charts", - "version": "2.0.0", + "version": "2.0.1", "description": "AntV upper level visual component library", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/package.json b/packages/plots/package.json index 14cb42a97..c8a57db80 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.0-beta.2", + "version": "2.0.0", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From 176f160beb092813184fab47cfa70bee29d4823a Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 23 Nov 2023 09:19:24 +0800 Subject: [PATCH 118/268] fix: type annotations (#2221) --- packages/plots/src/core/types/common.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/plots/src/core/types/common.ts b/packages/plots/src/core/types/common.ts index c3596bcd3..4bfb89308 100644 --- a/packages/plots/src/core/types/common.ts +++ b/packages/plots/src/core/types/common.ts @@ -82,6 +82,10 @@ export type ArcBaseOptions = { export type Options = Spec & BaseOptions & { + /** + * @title 标注 + */ + annotations?: Array; /** * @title 嵌套 view * @description 用于 Mix 等复杂图表 From 02836835859acea02fef50090b82c019b760345a Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 23 Nov 2023 20:29:14 +0800 Subject: [PATCH 119/268] fix: resize (#2229) * fix: resize * chore: remove excessive logic --- packages/plots/package.json | 3 +- .../annotation/bidirectional-bar-axis-text.ts | 17 ++++++++-- packages/plots/src/core/base/index.ts | 33 +------------------ packages/plots/src/core/module.d.ts | 1 - .../core/plots/bidirectional-bar/adaptor.ts | 3 +- .../src/core/plots/bidirectional-bar/index.ts | 9 ++--- packages/plots/src/core/utils/index.ts | 1 + 7 files changed, 22 insertions(+), 45 deletions(-) delete mode 100644 packages/plots/src/core/module.d.ts diff --git a/packages/plots/package.json b/packages/plots/package.json index c8a57db80..f90b73595 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.0", + "version": "2.0.1", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" @@ -38,7 +38,6 @@ "dependencies": { "@antv/event-emitter": "^0.1.3", "@antv/g2": "^5.1.9", - "size-sensor": "^1.0.1", "@ant-design/charts-util": "workspace:*" }, "peerDependencies": { diff --git a/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts b/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts index 40410a439..6369923be 100644 --- a/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts +++ b/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts @@ -2,7 +2,7 @@ import { Text, Polygon, canvas as GCanvas } from '@antv/g'; // @ts-expect-error import { Chart, AxisComponent, G2ViewDescriptor } from '@antv/g2'; -import { get, isFunction, uniqBy } from '../utils'; +import { get, isFunction, uniqBy, groupBy } from '../utils'; import { VERTICAL_MARGIN } from '../plots/bidirectional-bar/constants'; export type BidirectionalBarAxisTextOptions = AxisComponent; @@ -45,7 +45,7 @@ export class BidirectionalBarAxisText { const isVertical = layout === 'vertical'; const elementsLayout = this.getElementsLayout(); const textPath = ['title']; - const textLayout = []; + let textLayout = []; const { width: viewWidth, height: viewHeight } = get(this.views, [0, 'layout']); elementsLayout.forEach((element) => { const { x, y, height, width, data } = element; @@ -65,6 +65,19 @@ export class BidirectionalBarAxisText { } }); + /** 分组情况需要特殊处理 */ + if (uniqBy(textLayout, 'text').length !== textLayout.length) { + textLayout = Object.values(groupBy(textLayout, 'text')).map((items: Array<{ x: number; y: number }>) => { + const sum = items.reduce((pre, cur) => { + return pre + (isVertical ? cur.x : cur.y); + }, 0); + return { + ...items[0], + [isVertical ? 'x' : 'y']: sum / items.length, + }; + }); + } + return textLayout; } public init() { diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index ab1ee5ea7..adf1397b2 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -1,6 +1,5 @@ import EE from '@antv/event-emitter'; import { Chart, ChartEvent } from '@antv/g2'; -import { bind } from 'size-sensor'; import { CHART_OPTIONS, ANNOTATION_LIST, SKIP_DEL_CUSTOM_SIGN } from '../constants'; import { merge, omit, pick, deleteCustomKeys, deleteChartOptionKeys } from '../utils'; import { Annotaion } from '../annotation'; @@ -21,8 +20,6 @@ export abstract class Plot extends EE { public options: O; /** G2 chart 实例 */ public chart: Chart; - /** resizer unbind */ - private unbind: () => void; constructor(container: string | HTMLElement, options: O) { super(); @@ -36,14 +33,10 @@ export abstract class Plot extends EE { * new Chart 所需配置 */ private getChartOptions() { - const { clientWidth, clientHeight } = this.container; - // 逻辑简化:如果存在 width 或 height,则直接使用,否则使用容器大小 - const { width = clientWidth || 640, height = clientHeight || 480, autoFit = true } = this.options; + const { autoFit = true } = this.options; return { ...pick(this.options, CHART_OPTIONS), container: this.container, - width, - height, autoFit, }; } @@ -164,8 +157,6 @@ export abstract class Plot extends EE { * 销毁 */ public destroy() { - // 取消 size-sensor 的绑定 - this.unbindSizeSensor(); // G2 的销毁 this.chart.destroy(); // 清空已经绑定的事件 @@ -203,33 +194,11 @@ export abstract class Plot extends EE { * 绑定 dom 容器大小变化的事件 */ private bindSizeSensor() { - if (this.unbind) { - return; - } const { autoFit = true } = this.options; if (autoFit) { this.chart.on(ChartEvent.AFTER_CHANGE_SIZE, () => { this.annotations(); }); - this.unbind = bind(this.container, () => { - // 获取最新的宽高信息 - const { clientHeight, clientWidth } = this.container; - const { width, height } = this.chart.options(); - // 主要是防止绑定的时候触发 resize 回调 - if (clientHeight !== width || clientWidth !== height) { - this.triggerResize(); - } - }); - } - } - - /** - * 取消绑定 - */ - private unbindSizeSensor() { - if (this.unbind) { - this.unbind(); - this.unbind = undefined; } } } diff --git a/packages/plots/src/core/module.d.ts b/packages/plots/src/core/module.d.ts deleted file mode 100644 index 29ba14892..000000000 --- a/packages/plots/src/core/module.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'size-sensor'; diff --git a/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts b/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts index ad4489228..18926d959 100644 --- a/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts +++ b/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts @@ -1,6 +1,6 @@ import { mark } from '../../components'; import type { Adaptor } from '../../types'; -import { flow, transformOptions, set, isString, isArray, get } from '../../utils'; +import { flow, transformOptions, set, isArray, get, isPlainObject } from '../../utils'; import { HORIZONTAL_MARGIN, AXIS_LABEL_PADDING, VERTICAL_MARGIN } from './constants'; import type { BidirectionalBarOptions } from './type'; @@ -25,6 +25,7 @@ export function adaptor(params: Params) { const data = (params: Params) => { const { options } = params; const { yField, children, data } = options; + if (isPlainObject(data)) return params; const transformData = isArray(get(data, [0])) ? data : [data, data]; children.forEach((child, index) => { set(child, 'data', [...transformData[index].map((item) => ({ groupKey: yField[index], ...item }))]); diff --git a/packages/plots/src/core/plots/bidirectional-bar/index.ts b/packages/plots/src/core/plots/bidirectional-bar/index.ts index 7665ea5f2..68142701f 100644 --- a/packages/plots/src/core/plots/bidirectional-bar/index.ts +++ b/packages/plots/src/core/plots/bidirectional-bar/index.ts @@ -16,21 +16,16 @@ export class BidirectionalBar extends Plot { scale: { y: { nice: true }, }, - xAxisLabelText: true, direction: 'row', layout: 'horizontal', + legend: false, axis: { y: { title: false, }, x: { title: false, label: false }, }, - children: [ - { - type: 'interval', - }, - { type: 'interval' }, - ], + children: [{ type: 'interval' }, { type: 'interval' }], }; } diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index a3be99eb1..fe16086cc 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -22,6 +22,7 @@ export { maxBy, isObject, uniqBy, + isPlainObject, } from 'lodash-es'; export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; From eb5dab7f432c5dea07ee5479dde4c442fb056f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E6=B5=B7?= <43226029+dongxifan@users.noreply.github.com> Date: Thu, 23 Nov 2023 20:29:50 +0800 Subject: [PATCH 120/268] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E6=8D=86?= =?UTF-8?q?=E7=BB=91=E5=9B=BElabel=E6=98=BE=E7=A4=BA=E5=9B=BE=E4=BE=8B=20(?= =?UTF-8?q?#2228)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circle-packing/demo/circlePacking.js | 9 ----- .../circle-packing/demo/circlePackingLabel.js | 36 +++++++++++++++++++ .../statistics/circle-packing/demo/meta.json | 10 +++++- 3 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 site/examples/statistics/circle-packing/demo/circlePackingLabel.js diff --git a/site/examples/statistics/circle-packing/demo/circlePacking.js b/site/examples/statistics/circle-packing/demo/circlePacking.js index 790b80c0b..47731f9aa 100644 --- a/site/examples/statistics/circle-packing/demo/circlePacking.js +++ b/site/examples/statistics/circle-packing/demo/circlePacking.js @@ -20,15 +20,6 @@ const DemoCirclePacking = () => { interpolate: interpolateHcl }, }, - label: { - text: (d) => d.height === 0 ? d.data.name : '', - position: 'inside', - transform: [ - { - type: 'overflowHide' - }, - ] - } }; return ; }; diff --git a/site/examples/statistics/circle-packing/demo/circlePackingLabel.js b/site/examples/statistics/circle-packing/demo/circlePackingLabel.js new file mode 100644 index 000000000..a049f7986 --- /dev/null +++ b/site/examples/statistics/circle-packing/demo/circlePackingLabel.js @@ -0,0 +1,36 @@ + + +import { CirclePacking } from '@ant-design/plots'; +import { interpolateHcl } from 'd3-interpolate'; +import React from 'react'; +import ReactDOM from 'react-dom'; +const DemoCirclePackingLabel = () => { + + const config = { + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/flare.json", + }, + valueField: "value", + colorField: "depth", + scale: { + color: { + domain: [0, 5], + range: ["hsl(152,80%,80%)", "hsl(228,30%,40%)"], + interpolate: interpolateHcl + }, + }, + label: { + text: (d) => d.height === 0 ? d.data.name : '', + position: 'inside', + transform: [ + { + type: 'overflowHide' + }, + ] + } + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/circle-packing/demo/meta.json b/site/examples/statistics/circle-packing/demo/meta.json index f5fd20c67..318284943 100644 --- a/site/examples/statistics/circle-packing/demo/meta.json +++ b/site/examples/statistics/circle-packing/demo/meta.json @@ -7,9 +7,17 @@ { "filename": "circlePacking.js", "title": { - "zh": "捆绑图", + "zh": "基础捆绑图", "en": "CirclePacking Chart" }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ZMEHT7WqQmIAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "circlePackingLabel.js", + "title": { + "zh": "捆绑图 - 显示Label", + "en": "CirclePacking Chart With Label" + }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*epG0TaxEVTsAAAAAAAAAAAAADmJ7AQ/original" } ] From 19cda1205fde3244877ff44c88c7693c5dcc78e6 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 24 Nov 2023 12:12:19 +0800 Subject: [PATCH 121/268] feat: mix (#2232) --- packages/plots/package.json | 2 +- packages/plots/src/components/index.ts | 7 ++++--- packages/plots/src/components/mix/index.tsx | 10 ++++++++++ packages/plots/src/core/index.ts | 3 +++ packages/plots/src/core/plots/mix/index.ts | 4 ++++ 5 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 packages/plots/src/components/mix/index.tsx create mode 100644 packages/plots/src/core/plots/mix/index.ts diff --git a/packages/plots/package.json b/packages/plots/package.json index f90b73595..bab76e5ab 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.1", + "version": "2.0.2", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 72d995604..2c124e1ca 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -26,7 +26,7 @@ import CirclePacking from './circlePacking'; import Violin from './violin'; import BidirectionalBar from './bidirectional-bar'; import Venn from './venn'; - +import Mix from './mix'; export type { AreaConfig } from './area'; export type { BarConfig } from './bar'; @@ -54,7 +54,7 @@ export type { CirclePackingConfig } from './circlePacking'; export type { ViolinConfig } from './violin'; export type { BidirectionalBarConfig } from './bidirectional-bar'; export type { VennConfig } from './venn'; - +export type { MixConfig } from './mix'; export { Base, @@ -84,5 +84,6 @@ export { CirclePacking, Violin, BidirectionalBar, - Venn + Venn, + Mix, }; diff --git a/packages/plots/src/components/mix/index.tsx b/packages/plots/src/components/mix/index.tsx new file mode 100644 index 000000000..a8147f4d2 --- /dev/null +++ b/packages/plots/src/components/mix/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { MixOptions } from '../../core'; +import { CommonConfig } from '../../interface'; +import { BaseChart } from '../base'; + +export type MixConfig = CommonConfig; + +const MixChart = (props: MixConfig) => ; + +export default MixChart; diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 7b074e1fa..72cede4b2 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -3,6 +3,7 @@ export type { AreaOptions } from './plots/area'; export type { BarOptions } from './plots/bar'; export type { ColumnOptions } from './plots/column'; export type { DualAxesOptions } from './plots/dual-axes'; +export type { MixOptions } from './plots/mix'; export type { FunnelOptions } from './plots/funnel'; export type { LineOptions } from './plots/line'; export type { PieOptions } from './plots/pie'; @@ -65,6 +66,7 @@ import { CirclePacking } from './plots/circlePacking'; import { Violin } from './plots/violin'; import { BidirectionalBar } from './plots/bidirectional-bar'; import { Venn } from './plots/venn'; +import { Mix } from './plots/mix'; export const Plots = { Base, @@ -99,4 +101,5 @@ export const Plots = { Violin, BidirectionalBar, Venn, + Mix, }; diff --git a/packages/plots/src/core/plots/mix/index.ts b/packages/plots/src/core/plots/mix/index.ts new file mode 100644 index 000000000..9cf965e6b --- /dev/null +++ b/packages/plots/src/core/plots/mix/index.ts @@ -0,0 +1,4 @@ +import type { DualAxesOptions } from '../dual-axes'; +export { DualAxes as Mix } from '../dual-axes'; + +export type MixOptions = DualAxesOptions; From 79006dd58996854ff7f1487a0648741cbdc75c3f Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 24 Nov 2023 21:20:43 +0800 Subject: [PATCH 122/268] fix: CDN unavailable (#2236) --- config/webpack.js | 10 ++++++---- package.json | 1 + packages/charts/package.json | 2 +- packages/plots/package.json | 2 +- site/docs/manual/getting-started.zh.md | 7 ++++--- tsconfig.json | 3 ++- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/config/webpack.js b/config/webpack.js index 2c86c0b01..683384da2 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -15,8 +15,10 @@ const getWebpackConfig = (name, library) => { }, output: { filename: '[name].min.js', - library: library, - libraryTarget: 'umd', + library: { + name: library, + type: 'umd', + }, path: resolveApp('dist/'), }, resolve: { @@ -143,8 +145,8 @@ const getWebpackConfig = (name, library) => { }, }, optimization: { - runtimeChunk: 'single', - moduleIds: 'deterministic', + // runtimeChunk: true, + // moduleIds: 'deterministic', }, }; }; diff --git a/package.json b/package.json index 67a1998e9..9966a8858 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "test": "pnpm -r --stream --filter=./packages/* run test", "lint": "pnpm -r --stream --filter=./packages/* run lint", "build": "pnpm -r --stream --filter=!./site run build", + "build:site": "pnpm -r --stream --filter=./site run build", "build:lib": "pnpm -r --stream --filter=!./site run build:lib", "profile": "webpack --config webpack.config.js --mode production --profile --json > stats.json", "prettier": "prettier --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", diff --git a/packages/charts/package.json b/packages/charts/package.json index 2d83e0590..9c3ae6d7c 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@ant-design/charts", - "version": "2.0.1", + "version": "2.0.2", "description": "AntV upper level visual component library", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/package.json b/packages/plots/package.json index bab76e5ab..189f13e70 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.2", + "version": "2.0.3", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/site/docs/manual/getting-started.zh.md b/site/docs/manual/getting-started.zh.md index 316ff27fd..d405ff58a 100644 --- a/site/docs/manual/getting-started.zh.md +++ b/site/docs/manual/getting-started.zh.md @@ -52,9 +52,10 @@ externals: { 'lodash-es': 'lodash' } // public/index.html - - - + + + + // 按需引入 ``` diff --git a/tsconfig.json b/tsconfig.json index 84e843566..376d175ef 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,7 +20,8 @@ "declaration": true, "noUnusedLocals": false, "noImplicitAny": false, - "noFallthroughCasesInSwitch": true + "noFallthroughCasesInSwitch": true, + "preserveSymlinks": true }, "exclude": [ "node_modules", From e4ae8690ce690d2336db862e8be612eced5b112a Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 27 Nov 2023 19:28:07 +0800 Subject: [PATCH 123/268] docs: annotations and events (#2239) --- packages/plots/src/core/constants/index.ts | 1 + site/.dumirc.ts | 17 +- .../docs/options/plots/annotation/image.en.md | 6 + .../docs/options/plots/annotation/image.zh.md | 67 +++++++ .../docs/options/plots/annotation/lineX.en.md | 6 + .../docs/options/plots/annotation/lineX.zh.md | 49 +++++ .../docs/options/plots/annotation/lineY.en.md | 6 + .../docs/options/plots/annotation/lineY.zh.md | 48 +++++ .../docs/options/plots/annotation/range.en.md | 6 + .../docs/options/plots/annotation/range.zh.md | 60 +++++++ .../options/plots/annotation/rangeX.en.md | 6 + .../options/plots/annotation/rangeX.zh.md | 60 +++++++ .../options/plots/annotation/rangeY.en.md | 6 + .../options/plots/annotation/rangeY.zh.md | 45 +++++ site/docs/options/plots/annotation/text.en.md | 6 + site/docs/options/plots/annotation/text.zh.md | 109 ++++++++++++ site/docs/options/plots/events/overview.en.md | 6 + site/docs/options/plots/events/overview.zh.md | 168 ++++++++++++++++++ 18 files changed, 671 insertions(+), 1 deletion(-) create mode 100644 site/docs/options/plots/annotation/image.en.md create mode 100644 site/docs/options/plots/annotation/image.zh.md create mode 100644 site/docs/options/plots/annotation/lineX.en.md create mode 100644 site/docs/options/plots/annotation/lineX.zh.md create mode 100644 site/docs/options/plots/annotation/lineY.en.md create mode 100644 site/docs/options/plots/annotation/lineY.zh.md create mode 100644 site/docs/options/plots/annotation/range.en.md create mode 100644 site/docs/options/plots/annotation/range.zh.md create mode 100644 site/docs/options/plots/annotation/rangeX.en.md create mode 100644 site/docs/options/plots/annotation/rangeX.zh.md create mode 100644 site/docs/options/plots/annotation/rangeY.en.md create mode 100644 site/docs/options/plots/annotation/rangeY.zh.md create mode 100644 site/docs/options/plots/annotation/text.en.md create mode 100644 site/docs/options/plots/annotation/text.zh.md create mode 100644 site/docs/options/plots/events/overview.en.md create mode 100644 site/docs/options/plots/events/overview.zh.md diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 37d45a524..5e7ac7a0f 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -68,6 +68,7 @@ export const TRANSFORM_OPTION_KEY = { textField: 'text', valueField: 'value', binField: 'x', + srcField: 'src', }, transform: { /** diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 67983dc81..8c396d4d8 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -82,7 +82,22 @@ export default defineConfig({ }, order: 3, }, - + { + slug: 'options/plots/annotaion', + title: { + zh: '标记 - Annotations', + en: 'Annotations', + }, + order: 3, + }, + { + slug: 'options/plots/events', + title: { + zh: '事件 - Events', + en: 'Events', + }, + order: 4, + }, { slug: 'options/plots/animation', title: { diff --git a/site/docs/options/plots/annotation/image.en.md b/site/docs/options/plots/annotation/image.en.md new file mode 100644 index 000000000..862bf1259 --- /dev/null +++ b/site/docs/options/plots/annotation/image.en.md @@ -0,0 +1,6 @@ +--- +title: image +order: 1 +--- + + diff --git a/site/docs/options/plots/annotation/image.zh.md b/site/docs/options/plots/annotation/image.zh.md new file mode 100644 index 000000000..9e1b9832e --- /dev/null +++ b/site/docs/options/plots/annotation/image.zh.md @@ -0,0 +1,67 @@ +--- +title: image +order: 1 +--- + +`Image` 标记和 [Point](/spec/mark/point) 标记很类似,都是以 `x`,`y` 数据通道作为位置居中定位,区别在于 `Image` 提供一个特殊的 `src` 数据通道,来指定图片的远程地址或者 base64。 + +## 开始使用 + +这里有一个简单的浏览器占比数据,我们对它进行可视化,便于看到不同浏览器的占比对比。 + +image + +```ts +{ + annotations: [ + { + data: [ + { + name: "Internet Explorer", + value: 26, + url: "https://gw.alipayobjects.com/zos/rmsportal/eOYRaLPOmkieVvjyjTzM.png", + }, + { + name: "Chrome", + value: 40, + url: "https://gw.alipayobjects.com/zos/rmsportal/dWJWRLWfpOEbwCyxmZwu.png", + }, + ], + type: "image", + xField: 'name', + yField: 'value', + srcField: 'url', + scale: { x: { type: "band" }, y: { domain: [0, 50] } }, + }, + ] +} +``` + +更多的案例,可以查看[图表示例](/examples)页面。 + +## 选项 + +目前仅有一种同名的图形 `image`,下面描述一下所有的 `style` 配置项。 + +### image + +| 属性 | 描述 | 类型 | 默认值 | +|----------------|------------------------------------------------|---------------------|------------| +| fill | 图形的填充色 | `string` \| `Function` | - | +| fillOpacity | 图形的填充透明度 | `number` \| `Function` | - | +| stroke | 图形的描边 | `string` \| `Function` | - | +| strokeOpacity | 描边透明度 | `number` \| `Function` | - | +| lineWidth | 图形描边的宽度 | `number` \| `Function` | - | +| lineDash | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` \| `Function<[number, number]>` | - | +| opacity | 图形的整体透明度 | `number` \| `Function` | - | +| shadowColor | 图形阴影颜色 | `string` \| `Function` | - | +| shadowBlur | 图形阴影的高斯模糊系数 | `number` \| `Function` | - | +| shadowOffsetX | 设置阴影距图形的水平距离 | `number` \| `Function` | - | +| shadowOffsetY | 设置阴影距图形的垂直距离 | `number` \| `Function` | - | +| cursor | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | `string` \| `Function` | 'default' | + +## FAQ + +- 图片的 src 通道支持哪些数据类型? + +最终的绘制都是调用 G 去渲染,所以支持的数据类型和 G 的原子 Image 图形保持一致,支持:`远程地址`、`base64`、`blob`、`file`。 diff --git a/site/docs/options/plots/annotation/lineX.en.md b/site/docs/options/plots/annotation/lineX.en.md new file mode 100644 index 000000000..ec56ef745 --- /dev/null +++ b/site/docs/options/plots/annotation/lineX.en.md @@ -0,0 +1,6 @@ +--- +title: lineX +order: 1 +--- + + diff --git a/site/docs/options/plots/annotation/lineX.zh.md b/site/docs/options/plots/annotation/lineX.zh.md new file mode 100644 index 000000000..fa9bc8737 --- /dev/null +++ b/site/docs/options/plots/annotation/lineX.zh.md @@ -0,0 +1,49 @@ +--- +title: lineX +order: 1 +--- + +指定 `x` 通道来绘制垂直于 x 轴的辅助线,常用于绘制平均值或其他聚合数据辅助线。 + +## 开始使用 + +lineX + +```ts +/** + * A recreation of this demo: https://vega.github.io/vega-lite/examples/layer_histogram_global_mean.html + */ +{ + annotations: [ + { + type: "lineX", + xField: '2023', + style: { stroke: "#F4664A", strokeOpacity: 1, lineWidth: 5 }, + }, + ] +} + +``` + +更多的案例,可以查看[图表示例](/examples)页面。 + +## 选项 + +目前 lineX 只有一种 `line` 的 shape 图形。 + +### line + +| 属性 | 描述 | 类型 | 默认值 | +| -------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | ------------------------------ | +| fill | 图形的填充色 | `string` \| `Function` | - | +| fillOpacity | 图形的填充透明度 | `number` \| `Function` | - | +| stroke | 图形的描边 | `string` \| `Function` | - | +| strokeOpacity | 描边透明度 | `number` \| `Function` | - | +| lineWidth | 图形描边的宽度 | `number` \| `Function` | - | +| lineDash | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` \| `Function<[number, number]>` | - | +| opacity | 图形的整体透明度 | `number` \| `Function` | - | +| shadowColor | 图形阴影颜色 | `string` \| `Function` | - | +| shadowBlur | 图形阴影的高斯模糊系数 | `number` \| `Function` | - | +| shadowOffsetX | 设置阴影距图形的水平距离 | `number` \| `Function` | - | +| shadowOffsetY | 设置阴影距图形的垂直距离 | `number` \| `Function` | - | +| cursor | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | `string` \| `Function` | 'default' | diff --git a/site/docs/options/plots/annotation/lineY.en.md b/site/docs/options/plots/annotation/lineY.en.md new file mode 100644 index 000000000..1ec62e420 --- /dev/null +++ b/site/docs/options/plots/annotation/lineY.en.md @@ -0,0 +1,6 @@ +--- +title: lineY +order: 1 +--- + + diff --git a/site/docs/options/plots/annotation/lineY.zh.md b/site/docs/options/plots/annotation/lineY.zh.md new file mode 100644 index 000000000..ec05d6c3c --- /dev/null +++ b/site/docs/options/plots/annotation/lineY.zh.md @@ -0,0 +1,48 @@ +--- +title: lineY +order: 1 +--- + + 指定 `y` 通道来绘制垂直于 y 轴的辅助线,常用于绘制平均值或其他聚合数据辅助线。 + +## 开始使用 + +lineY + +```ts +/** + * A recreation of this demo: https://vega.github.io/vega-lite/examples/layer_precipitation_mean.html + */ +{ + annotations: [ + { + type: "lineY", + yField: 5, + style: { stroke: "#F4664A", strokeOpacity: 1, lineWidth: 5 }, + }, + ] +} +``` + +更多的案例,可以查看[图表示例](/examples)页面。 + +## 选项 + +目前 lineY 只有一种 `line` 的 shape 图形。 + +### line + +| 属性 | 描述 | 类型 | 默认值 | +| -------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | ------------------------------ | +| fill | 图形的填充色 | `string` \| `Function` | - | +| fillOpacity | 图形的填充透明度 | `number` \| `Function` | - | +| stroke | 图形的描边 | `string` \| `Function` | - | +| strokeOpacity | 描边透明度 | `number` \| `Function` | - | +| lineWidth | 图形描边的宽度 | `number` \| `Function` | - | +| lineDash | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` \| `Function<[number, number]>` | - | +| opacity | 图形的整体透明度 | `number` \| `Function` | - | +| shadowColor | 图形阴影颜色 | `string` \| `Function` | - | +| shadowBlur | 图形阴影的高斯模糊系数 | `number` \| `Function` | - | +| shadowOffsetX | 设置阴影距图形的水平距离 | `number` \| `Function` | - | +| shadowOffsetY | 设置阴影距图形的垂直距离 | `number` \| `Function` | - | +| cursor | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | `string` \| `Function` | 'default' | diff --git a/site/docs/options/plots/annotation/range.en.md b/site/docs/options/plots/annotation/range.en.md new file mode 100644 index 000000000..61bff1b8b --- /dev/null +++ b/site/docs/options/plots/annotation/range.en.md @@ -0,0 +1,6 @@ +--- +title: range +order: 1 +--- + + diff --git a/site/docs/options/plots/annotation/range.zh.md b/site/docs/options/plots/annotation/range.zh.md new file mode 100644 index 000000000..50349bcf3 --- /dev/null +++ b/site/docs/options/plots/annotation/range.zh.md @@ -0,0 +1,60 @@ +--- +title: range +order: 1 +--- + +使用一组 `x`(x1, x2) 和一组 `y`(y1, y2) 来定位一个矩形区域,常用于绘制辅助背景区域。 + +## 开始使用 + +range + +```ts +{ + annotations: [ + { + type: "range", + yField: 'y', + xField: 'x', + colorField: 'region', + data: [ + { x: [-25, 0], y: [-30, 0], region: "1" }, + { x: [-25, 0], y: [0, 20], region: "2" }, + { x: [0, 5], y: [-30, 0], region: "2" }, + { x: [0, 5], y: [0, 20], region: "1" }, + ], + scale: { + color: { + range: ["#d8d0c0", "#a3dda1"], + independent: true, + guide: null, + }, + }, + style: { fillOpacity: 0.2 }, + } + ] +} +``` + +更多的案例,可以查看[图表示例](/examples)页面。 + +## 选项 + +目前 range 只有一种同名的 shape 图形。 + +### range + +| 属性 | 描述 | 类型 | 默认值 | +|----------------|------------------------------------------------|---------------------|------------| +| fill | 图形的填充色 | `string` \| `Function` | - | +| fillOpacity | 图形的填充透明度 | `number` \| `Function` | - | +| stroke | 图形的描边 | `string` \| `Function` | - | +| strokeOpacity | 描边透明度 | `number` \| `Function` | - | +| lineWidth | 图形描边的宽度 | `number` \| `Function` | - | +| lineDash | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` \| `Function<[number, number]>` | - | +| opacity | 图形的整体透明度 | `number` \| `Function` | - | +| shadowColor | 图形阴影颜色 | `string` \| `Function` | - | +| shadowBlur | 图形阴影的高斯模糊系数 | `number` \| `Function` | - | +| shadowOffsetX | 设置阴影距图形的水平距离 | `number` \| `Function` | - | +| shadowOffsetY | 设置阴影距图形的垂直距离 | `number` \| `Function` | - | +| cursor | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | `string` \| `Function` | 'default' | diff --git a/site/docs/options/plots/annotation/rangeX.en.md b/site/docs/options/plots/annotation/rangeX.en.md new file mode 100644 index 000000000..282a0cefc --- /dev/null +++ b/site/docs/options/plots/annotation/rangeX.en.md @@ -0,0 +1,6 @@ +--- +title: rangeX +order: 1 +--- + + diff --git a/site/docs/options/plots/annotation/rangeX.zh.md b/site/docs/options/plots/annotation/rangeX.zh.md new file mode 100644 index 000000000..790d79986 --- /dev/null +++ b/site/docs/options/plots/annotation/rangeX.zh.md @@ -0,0 +1,60 @@ +--- +title: rangeX +order: 1 +--- + +使用一组 `x`(x1, x2) 来定位一个绘制于 x 轴的矩形区域,常用于对特定区域进行高亮显示。 + +## 开始使用 + +rangeX + +```ts +/** + * A recreation of this demo: https://vega.github.io/vega-lite/examples/layer_falkensee.html + */ +{ + annotations: [ + { + type: "rangeX", + data: [ + { + year: ["1933-01-01T00:00:00.000Z", "1945-01-01T00:00:00.000Z"], + event: "Nazi Rule", + }, + { + year: ["1948-01-01T00:00:00.000Z", "1989-01-01T00:00:00.000Z"], + event: "GDR (East Germany)", + }, + ], + xField: 'year', + yField: 'event', + scale: { color: { independent: true, range: ["#FAAD14", "#30BF78"] } }, + style: { fillOpacity: 0.75 }, + } + ] +} +``` + +更多的案例,可以查看[图表示例](/examples)页面。 + +## 选项 + +目前 rangeX 只有 range 一种 shape 图形。 + +### range + +| 属性 | 描述 | 类型 | 默认值 | +| ------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | --------- | +| fill | 图形的填充色 | `string` \| `Function` | - | +| fillOpacity | 图形的填充透明度 | `number` \| `Function` | - | +| stroke | 图形的描边 | `string` \| `Function` | - | +| strokeOpacity | 描边透明度 | `number` \| `Function` | - | +| lineWidth | 图形描边的宽度 | `number` \| `Function` | - | +| lineDash | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` \| `Function<[number, number]>` | - | +| opacity | 图形的整体透明度 | `number` \| `Function` | - | +| shadowColor | 图形阴影颜色 | `string` \| `Function` | - | +| shadowBlur | 图形阴影的高斯模糊系数 | `number` \| `Function` | - | +| shadowOffsetX | 设置阴影距图形的水平距离 | `number` \| `Function` | - | +| shadowOffsetY | 设置阴影距图形的垂直距离 | `number` \| `Function` | - | +| cursor | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | `string` \| `Function` | 'default' | diff --git a/site/docs/options/plots/annotation/rangeY.en.md b/site/docs/options/plots/annotation/rangeY.en.md new file mode 100644 index 000000000..a0ff6b744 --- /dev/null +++ b/site/docs/options/plots/annotation/rangeY.en.md @@ -0,0 +1,6 @@ +--- +title: rangeY +order: 1 +--- + + diff --git a/site/docs/options/plots/annotation/rangeY.zh.md b/site/docs/options/plots/annotation/rangeY.zh.md new file mode 100644 index 000000000..84d83163c --- /dev/null +++ b/site/docs/options/plots/annotation/rangeY.zh.md @@ -0,0 +1,45 @@ +--- +title: rangeY +order: 1 +--- + +使用一组 `y`(y1, y2) 来定位一个绘制于 y 轴的矩形区域,常用于对特定区域进行高亮显示。 + +## 开始使用 + +rangeY + +```ts +{ + annotations: [ + { + type: "rangeY", + data: [{ y: [54, 72] }], + yField: 'y', + } + ] +} +``` + +更多的案例,可以查看[图表示例](/examples)页面。 + +## 选项 + +目前 rangeY 只有 range 一种 shape 图形。 + +### range + +| 属性 | 描述 | 类型 | 默认值 | +| ------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | --------- | +| fill | 图形的填充色 | `string` \| `Function` | - | +| fillOpacity | 图形的填充透明度 | `number` \| `Function` | - | +| stroke | 图形的描边 | `string` \| `Function` | - | +| strokeOpacity | 描边透明度 | `number` \| `Function` | - | +| lineWidth | 图形描边的宽度 | `number` \| `Function` | - | +| lineDash | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` \| `Function<[number, number]>` | - | +| opacity | 图形的整体透明度 | `number` \| `Function` | - | +| shadowColor | 图形阴影颜色 | `string` \| `Function` | - | +| shadowBlur | 图形阴影的高斯模糊系数 | `number` \| `Function` | - | +| shadowOffsetX | 设置阴影距图形的水平距离 | `number` \| `Function` | - | +| shadowOffsetY | 设置阴影距图形的垂直距离 | `number` \| `Function` | - | +| cursor | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | `string` \| `Function` | 'default' | diff --git a/site/docs/options/plots/annotation/text.en.md b/site/docs/options/plots/annotation/text.en.md new file mode 100644 index 000000000..8fecbb4c5 --- /dev/null +++ b/site/docs/options/plots/annotation/text.en.md @@ -0,0 +1,6 @@ +--- +title: text +order: 1 +--- + + diff --git a/site/docs/options/plots/annotation/text.zh.md b/site/docs/options/plots/annotation/text.zh.md new file mode 100644 index 000000000..625f0bf57 --- /dev/null +++ b/site/docs/options/plots/annotation/text.zh.md @@ -0,0 +1,109 @@ +--- +title: text +order: 1 +--- + +文字是传达信息最传统的方式,`Text` 标记具备有大量的视觉映射通道:`x`,`y`,`color`,`fontSize`,`rotate` 等,除此之外,还有大量的文本样式相关的配置,可以通过可视化映射的方式,让文本可视化具备有更强的表达性。一般用于几个场景: + +- 文本可视化 +- 数据的标注和辅助 + +## 开始使用 + +绘制一个简单的柱形图,然后使用 `Text` 标记去绘制数据标签,辅助看数。 + +link + +```ts +/** + * A recreation of this demo: https://observablehq.com/@d3/bar-chart + */ +// single +{ + annotations: [ + { + type: "text", + data: ["N", 0.08], + encode: { text: "frequency" }, + style: { fill: "black", textAlign: "center", dy: -5 }, + } + ] +} +// multi +{ + annotations: [ + { + type: "text", + // Position mapping + xField: '', + yField: '', + // content mapping + text: '', + style: { fill: "black", textAlign: "center", dy: -5 }, + } + ] +} +``` + +更多的案例,可以查看[图表示例](/examples)页面。 + +## 选项 + +目前 area 有以下几个内置的 shape 图形,默认为 text。 + +| 图形 | 描述 | 示例 | +| ----- | -------------------------------- | ---- | +| text | 绘制文本 | | +| badge | 绘制带有标记的文本,形如一个气球 | | + +### text + +| 属性 | 描述 | 类型 | 默认值 | +| ------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | --------- | +| fontSize | 文字大小 | `number` \| `Function` | - | +| fontFamily | 文字字体 | `string` \| `Function` | - | +| fontWeight | 字体粗细 | `number` \| `Function` | - | +| lineHeight | 文字的行高 | `number` \| `Function` | - | +| textAlign | 设置文本内容的当前对齐方式, 支持的属性:`center` \| `end` \| `left` \| `right` \| `start`,默认值为`start` | `string` \| `Function` | - | +| textBaseline | 设置在绘制文本时使用的当前文本基线, 支持的属性:`top` \| `middle` \| `bottom` \| `alphabetic` \| `hanging`。默认值为`bottom` | `string` \| `Function` | - | +| fill | 图形的填充色 | `string` \| `Function` | - | +| fillOpacity | 图形的填充透明度 | `number` \| `Function` | - | +| stroke | 图形的描边 | `string` \| `Function` | - | +| strokeOpacity | 描边透明度 | `number` \| `Function` | - | +| lineWidth | 图形描边的宽度 | `number` \| `Function` | - | +| lineDash | 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 | `[number,number]` \| `Function<[number, number]>` | - | +| opacity | 图形的整体透明度 | `number` \| `Function` | - | +| shadowColor | 图形阴影颜色 | `string` \| `Function` | - | +| shadowBlur | 图形阴影的高斯模糊系数 | `number` \| `Function` | - | +| shadowOffsetX | 设置阴影距图形的水平距离 | `number` \| `Function` | - | +| shadowOffsetY | 设置阴影距图形的垂直距离 | `number` \| `Function` | - | +| cursor | 鼠标样式。同 css 的鼠标样式,默认 'default'。 | `string` \| `Function` | 'default' | + +### badge + +除了 `text` 的配置之外,还有以下配置。 + +| 属性 | 描述 | 类型 | 默认值 | +| ------------------- | ----------------- | -------- | ------ | +| markerSize | 标记大小 | `number` | 24 | +| markerFill | 标记填充色 | `string` | | +| markerFillOpacity | 标记填充色透明度 | `number` | | +| markerStroke | 标记描边色 | `string` | | +| markerStrokeOpacity | 标记描边色 透明度 | `number` | | + +## FAQ + +- 怎么指定箭头图标的长度? + +有两种指定箭头图标长度的方式,一种是通过填写像素值,比如 `40`,来指定为固定长度;另外一种是通过指定一个百分比,比如 `30%`,来指定参考箭头长度的相对长度。默认值为 `40%`。如下示例: + +```ts +chart + .vector() + // ... + .shape('vector') + .style({ + arrowSize: 40, + // arrowSize: '30%', + }); +``` diff --git a/site/docs/options/plots/events/overview.en.md b/site/docs/options/plots/events/overview.en.md new file mode 100644 index 000000000..fc814e50f --- /dev/null +++ b/site/docs/options/plots/events/overview.en.md @@ -0,0 +1,6 @@ +--- +title: Overview +order: 6 +--- + + diff --git a/site/docs/options/plots/events/overview.zh.md b/site/docs/options/plots/events/overview.zh.md new file mode 100644 index 000000000..3dc25a085 --- /dev/null +++ b/site/docs/options/plots/events/overview.zh.md @@ -0,0 +1,168 @@ +--- +title: 图表事件 +order: 6 +--- + +## 交互事件 +```ts +{ + onReady: ({ chart })=> { + // Do something + } +} +``` + +如果你想要获取图表的交互信息,可以通过下面的方式: + +- 监听全局 `element` 事件 + +```js +chart.on(`element:${ChartEvent.EventType}`, (ev) => { + console.log(ev); +}); +``` + +- 监听指定 `element` 事件 + +```js +chart.on(`${markType}:${ChartEvent.EventType}`, (ev) => { + console.log(ev); +}); + +// 如,监听柱状图中的柱子的点击事件 +chart.on(`interval:click`, (ev) => { + console.log(ev); +}); +``` + +- 监听 plot 区域事件 + +```js +chart.on('plot:click', (event) => console.log(event)); +``` + +- 监听全局 component 事件 + +```js +chart.on('component:click', (event) => console.log(event)); +``` + + +- 监听全局 interval 事件 + +```js +chart.on('interval:click', (event) => console.log(event)); +``` + +```ts +export type MarkTypes = + | 'interval' + | 'rect' + | 'line' + | 'point' + | 'text' + | 'cell' + | 'area' + | 'node' + | 'edge' + | 'link' + | 'image' + | 'polygon' + | 'box' + | 'vector' + | 'lineX' + | 'lineY' + | 'connector' + | 'range' + | 'rangeX' + | 'rangeY' + | 'sankey' + | 'chord' + | 'path' + | 'treemap' + | 'pack' + | 'boxplot' + | 'shape' + | 'forceGraph' + | 'tree' + | 'wordCloud' + | 'gauge' + | 'density' + | 'heatmap' + | 'liquid' + +exports.ChartEvent = { + CLICK: 'click', + DBLCLICK: 'dblclick', + BEFORE_PAINT: 'beforepaint', + AFTER_PAINT: 'afterpaint', + BEFORE_CHANGE_DATA: 'beforechangedata', + AFTER_CHANGE_DATA: 'afterchangedata', + BEFORE_CLEAR: 'beforeclear', + AFTER_CLEAR: 'afterclear', + BEFORE_DESTROY: 'beforedestroy', + AFTER_DESTROY: 'afterdestroy', + BEFORE_CHANGE_SIZE: 'beforechangesize', + AFTER_CHANGE_SIZE: 'afterchangesize', + POINTER_TAP: 'pointertap', + POINTER_DOWN: 'pointerdown', + POINTER_UP: 'pointerup', + POINTER_OVER: 'pointerover', + POINTER_OUT: 'pointerout', + POINTER_MOVE: 'pointermove', + POINTER_ENTER: 'pointerenter', + POINTER_LEAVE: 'pointerleave', + POINTER_UPOUTSIDE: 'pointerupoutside', + DRAG_START: 'dragstart', + DRAG: 'drag', + DRAG_END: 'dragend', + DRAG_ENTER: 'dragenter', + DRAG_LEAVE: 'dragleave', + DRAG_OVER: 'dragover', + DROP: 'DROP', +}; +``` + +### 点击事件 + +| 事件名 | 说明 | 回调参数 | +| --------------------- | ---- | -------- | +| `ChartEvent.`CLICK | 点击 | `Event` | +| `ChartEvent.`DBLCLICK | 双击 | `Event` | + +### 指针事件 + +| 事件名 | 说明 | 回调参数 | +| ------------------------------ | ------------------------------ | -------- | +| `ChartEvent.`POINTER_TAP | | `Event` | +| `ChartEvent.`POINTER_DOWN | 当指针按下时 | `Event` | +| `ChartEvent.`POINTER_UP | 当指针松开时 | `Event` | +| `ChartEvent.`POINTER_OVER | 当指针进入目标元素时 | `Event` | +| `ChartEvent.`POINTER_OUT | 当指针离开目标元素时 | `Event` | +| `ChartEvent.`POINTER_MOVE | 当指针改变坐标时 | `Event` | +| `ChartEvent.`POINTER_ENTER | 当指针进入目标元素或其子元素时 | `Event` | +| `ChartEvent.`POINTER_LEAVE | 当指针离开目标元素或其子元素时 | `Event` | +| `ChartEvent.`POINTER_UPOUTSIDE | | `Event` | + +### 拖拽事件 + +如果希望监听拖拽事件,需要设置 draggable 和 droppable 属性 + +```js +{ + style: { + draggable: true, + droppable, true + } +} +``` + +| 事件名 | 说明 | 回调参数 | +| ----------------------- | ---------------------------- | -------- | +| `ChartEvent.`DRAG_START | 开始拖拽时 | `Event` | +| `ChartEvent.`DRAG | 拖拽过程中 | `Event` | +| `ChartEvent.`DRAG_END | 拖拽完成时 | `Event` | +| `ChartEvent.`DRAG_ENTER | 元素被拖拽进入目标元素内时 | `Event` | +| `ChartEvent.`DRAG_LEAVE | 元素被拖拽离开目标元素时 | `Event` | +| `ChartEvent.`DRAG_OVER | 元素被拖拽悬停在目标元素内时 | `Event` | +| `ChartEvent.`DROP | 元素被放置到目标元素内时 | `Event` | From 2cda0df877f58fb3902f7e06cd18c9d816893bd8 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 28 Nov 2023 12:12:28 +0800 Subject: [PATCH 124/268] fix: spelling mistake (#2240) --- site/.dumirc.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 8c396d4d8..d016c79cc 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -83,7 +83,7 @@ export default defineConfig({ order: 3, }, { - slug: 'options/plots/annotaion', + slug: 'options/plots/annotation', title: { zh: '标记 - Annotations', en: 'Annotations', From 3069c03379ab7f83020f14d7107cb706e3236475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E6=B5=B7?= <43226029+dongxifan@users.noreply.github.com> Date: Tue, 28 Nov 2023 14:04:26 +0800 Subject: [PATCH 125/268] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89Padding=E8=B7=9D=E7=A6=BB=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=8D=86=E7=BB=91=E5=9B=BE=20(#2243)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/circlePackingPadding.js | 39 +++++++++++++++++++ .../statistics/circle-packing/demo/meta.json | 8 ++++ 2 files changed, 47 insertions(+) create mode 100644 site/examples/statistics/circle-packing/demo/circlePackingPadding.js diff --git a/site/examples/statistics/circle-packing/demo/circlePackingPadding.js b/site/examples/statistics/circle-packing/demo/circlePackingPadding.js new file mode 100644 index 000000000..14568ce3c --- /dev/null +++ b/site/examples/statistics/circle-packing/demo/circlePackingPadding.js @@ -0,0 +1,39 @@ + + +import { CirclePacking } from '@ant-design/plots'; +import { interpolateHcl } from 'd3-interpolate'; +import React from 'react'; +import ReactDOM from 'react-dom'; +const DemoCirclePackingPadding = () => { + + const config = { + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/flare.json", + }, + valueField: "value", + colorField: "depth", + scale: { + color: { + domain: [0, 5], + range: ["hsl(152,80%,80%)", "hsl(228,30%,40%)"], + interpolate: interpolateHcl + }, + }, + layout: { + padding: 5, + }, + label: { + text: (d) => d.height === 0 ? d.data.name : '', + position: 'inside', + transform: [ + { + type: 'overflowHide' + }, + ] + } + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/circle-packing/demo/meta.json b/site/examples/statistics/circle-packing/demo/meta.json index 318284943..3fad2ae47 100644 --- a/site/examples/statistics/circle-packing/demo/meta.json +++ b/site/examples/statistics/circle-packing/demo/meta.json @@ -19,6 +19,14 @@ "en": "CirclePacking Chart With Label" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*epG0TaxEVTsAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "circlePackingPadding.js", + "title": { + "zh": "捆绑图 - 自定义padding距离", + "en": "Custom Padding Distance For CirclePacking Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*epG0TaxEVTsAAAAAAAAAAAAADmJ7AQ/original" } ] } From 6ada53ee9a3ba308f797ac2668ded705339a9520 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Tue, 28 Nov 2023 14:14:29 +0800 Subject: [PATCH 126/268] fix(liquid): ts issue fix (#2245) * fix(liquid): ts issue fix * fix(liquid): ts issue fix --- packages/plots/src/core/plots/liquid/type.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/plots/src/core/plots/liquid/type.ts b/packages/plots/src/core/plots/liquid/type.ts index b78792d18..edd3299cc 100644 --- a/packages/plots/src/core/plots/liquid/type.ts +++ b/packages/plots/src/core/plots/liquid/type.ts @@ -1,5 +1,9 @@ import type { Options } from '../../types/common'; export type LiquidOptions = Omit & { - percent?: boolean; + /** + * @title 进度 + * @description [0-1] + */ + percent?: number; }; From 772b7f0b5008a1de2a9d99a1b905d8d84e7d6b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E6=B5=B7?= <43226029+dongxifan@users.noreply.github.com> Date: Tue, 28 Nov 2023 18:11:20 +0800 Subject: [PATCH 127/268] =?UTF-8?q?style=EF=BC=9A=E5=85=A8=E5=B1=80prettie?= =?UTF-8?q?r=20(#2247)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plots/src/components/violin/index.tsx | 4 +- .../src/core/plots/circlePacking/adaptor.ts | 1 - .../src/core/plots/circlePacking/index.ts | 10 +- packages/plots/src/core/plots/venn/type.ts | 18 +-- .../plots/src/core/plots/violin/adaptor.ts | 45 +++---- packages/plots/src/hooks/useChart.ts | 1 - site/examples/statistics/base/demo/circle.js | 104 ++++++++-------- .../statistics/base/demo/facet-rect.js | 30 ++--- .../statistics/base/demo/matrix-col.js | 18 +-- site/examples/statistics/base/demo/matrix.js | 17 +-- .../statistics/base/demo/space-flex.js | 38 +++--- .../statistics/base/demo/space-layer.js | 25 ++-- site/examples/statistics/box/demo/basic.js | 16 +-- .../statistics/box/demo/boxplot-no-outlier.js | 4 +- .../box/demo/boxplot-one-dimension.js | 10 +- .../statistics/box/demo/boxplot-outlier.js | 4 +- .../statistics/box/demo/boxplot-tooltip.js | 14 +-- .../box/demo/grouped-boxplot-outlier.js | 6 +- .../statistics/bullet/demo/bullet-more-cfg.js | 14 ++- .../statistics/bullet/demo/bullet-vertical.js | 16 +-- .../examples/statistics/bullet/demo/bullet.js | 16 +-- .../statistics/bullet/demo/bullets-group.js | 5 +- .../statistics/bullet/demo/bullets.js | 2 +- .../examples/statistics/bullet/demo/meta.json | 3 +- .../circle-packing/demo/circlePacking.js | 15 +-- .../circle-packing/demo/circlePackingLabel.js | 23 ++-- .../demo/circlePackingPadding.js | 23 ++-- .../statistics/column/demo/percent.js | 5 +- site/examples/statistics/gauge/demo/gauge.js | 8 +- .../liquid/demo/liquid-background.js | 2 +- .../statistics/radial-bar/demo/background.js | 4 +- .../statistics/radial-bar/demo/basic.js | 3 +- .../statistics/radial-bar/demo/grouped.js | 111 +++++++++--------- .../statistics/radial-bar/demo/meta.json | 4 +- .../statistics/radial-bar/demo/stacked.js | 111 +++++++++--------- site/examples/statistics/rose/demo/basic.js | 5 +- site/examples/statistics/sankey/demo/basic.js | 32 ++--- .../examples/statistics/scatter/demo/basic.js | 5 +- .../statistics/scatter/demo/meta.json | 3 +- .../statistics/scatter/demo/point-bubble.js | 22 ++-- .../statistics/scatter/demo/point-jitter.js | 8 +- .../scatter/demo/point-one-dimension.js | 5 +- .../statistics/scatter/demo/point-strip.js | 4 +- .../statistics/tiny/demo/basic-progress.js | 6 +- site/examples/statistics/venn/demo/label.js | 2 +- site/examples/statistics/violin/demo/basic.js | 2 +- .../statistics/violin/demo/density.js | 4 +- site/examples/statistics/violin/demo/polar.js | 2 +- .../wordCloud/demo/wordCloud-image.js | 8 +- .../statistics/wordCloud/demo/wordCloud.js | 6 +- 50 files changed, 415 insertions(+), 429 deletions(-) diff --git a/packages/plots/src/components/violin/index.tsx b/packages/plots/src/components/violin/index.tsx index 2cca323f2..f2854ac9d 100644 --- a/packages/plots/src/components/violin/index.tsx +++ b/packages/plots/src/components/violin/index.tsx @@ -7,6 +7,6 @@ export type ViolinConfig = CommonConfig; const ViolinChart = (props: ViolinConfig) => { return ; -} +}; -export default ViolinChart; \ No newline at end of file +export default ViolinChart; diff --git a/packages/plots/src/core/plots/circlePacking/adaptor.ts b/packages/plots/src/core/plots/circlePacking/adaptor.ts index 595fb64b8..41322b434 100644 --- a/packages/plots/src/core/plots/circlePacking/adaptor.ts +++ b/packages/plots/src/core/plots/circlePacking/adaptor.ts @@ -9,6 +9,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(transformOptions)(params); } diff --git a/packages/plots/src/core/plots/circlePacking/index.ts b/packages/plots/src/core/plots/circlePacking/index.ts index 92154a1b7..77c61b48e 100644 --- a/packages/plots/src/core/plots/circlePacking/index.ts +++ b/packages/plots/src/core/plots/circlePacking/index.ts @@ -17,10 +17,12 @@ export class CirclePacking extends Plot { static getDefaultOptions(): Partial { return { legend: false, - type: "view", - children: [{ - type: "pack" - }] + type: 'view', + children: [ + { + type: 'pack', + }, + ], }; } diff --git a/packages/plots/src/core/plots/venn/type.ts b/packages/plots/src/core/plots/venn/type.ts index b7716836a..58210d386 100644 --- a/packages/plots/src/core/plots/venn/type.ts +++ b/packages/plots/src/core/plots/venn/type.ts @@ -1,15 +1,15 @@ import type { Options } from '../../types/common'; export type VennOptions = Options & { - /** - * @title 集合空间键名 - */ - setsField: string; - /** - * @title 集合大小键名 - */ - sizeField: string; - }; + /** + * @title 集合空间键名 + */ + setsField: string; + /** + * @title 集合大小键名 + */ + sizeField: string; +}; export enum DefaultTransformKey { color = 'key', diff --git a/packages/plots/src/core/plots/violin/adaptor.ts b/packages/plots/src/core/plots/violin/adaptor.ts index b928232f5..c84168d45 100644 --- a/packages/plots/src/core/plots/violin/adaptor.ts +++ b/packages/plots/src/core/plots/violin/adaptor.ts @@ -17,33 +17,38 @@ export function adaptor(params: Params) { const { options } = params; const { xField, yField, seriesField, children } = options; - const newChildren = children?.map((item) => { - return { - ...item, - xField, - yField, - seriesField, - colorField: seriesField, - data: item.type === 'density' ? { - transform: [ - { - type: 'kde', - field: yField, - groupBy: [xField, seriesField], - }, - ], - } : item.data, - } - }).filter((item) => options.violinType !== 'density' || item.type === 'density'); + const newChildren = children + ?.map((item) => { + return { + ...item, + xField, + yField, + seriesField, + colorField: seriesField, + data: + item.type === 'density' + ? { + transform: [ + { + type: 'kde', + field: yField, + groupBy: [xField, seriesField], + }, + ], + } + : item.data, + }; + }) + .filter((item) => options.violinType !== 'density' || item.type === 'density'); set(options, 'children', newChildren); // 默认‘normal’类型数据格式 if (options.violinType === 'polar') { - set(options, 'coordinate', { type: 'polar'}) + set(options, 'coordinate', { type: 'polar' }); } // 底层不消费violinType字段。 set(options, 'violinType', undefined); return params; - } + }; return flow(customTransform, transformOptions, mark)(params); } diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 395ae5b96..2fb6c4e88 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -114,7 +114,6 @@ export default function useChart(ChartC }; }, []); - return { chart, container, diff --git a/site/examples/statistics/base/demo/circle.js b/site/examples/statistics/base/demo/circle.js index 96107016b..87ca69400 100644 --- a/site/examples/statistics/base/demo/circle.js +++ b/site/examples/statistics/base/demo/circle.js @@ -4,64 +4,62 @@ import { Base } from '@ant-design/plots'; const Demobase = () => { const config = { - type: "facetCircle", + type: 'facetCircle', width: 480, height: 480, autoFit: false, data: [ - { month: "Jan.", name: "A", value: 0.6326436603187056 }, - { month: "Jan.", name: "B", value: 0.9059036864077081 }, - { month: "Jan.", name: "C", value: 0.22780841416561715 }, - { month: "Jan.", name: "D", value: 0.1579683971505692 }, - { month: "Feb.", name: "A", value: 0.33301714406421823 }, - { month: "Feb.", name: "B", value: 0.03205686296291077 }, - { month: "Feb.", name: "C", value: 0.38611653432027015 }, - { month: "Feb.", name: "D", value: 0.7234835419120198 }, - { month: "Mar.", name: "A", value: 0.904928473886162 }, - { month: "Mar.", name: "B", value: 0.4484199491941676 }, - { month: "Mar.", name: "C", value: 0.2824508981652456 }, - { month: "Mar.", name: "D", value: 0.9685413602116679 }, - { month: "Apr.", name: "A", value: 0.041723574080341 }, - { month: "Apr.", name: "B", value: 0.8030787933582404 }, - { month: "Apr.", name: "C", value: 0.41748710621502005 }, - { month: "Apr.", name: "D", value: 0.5281546266115444 }, - { month: "May", name: "A", value: 0.8729036090146685 }, - { month: "May", name: "B", value: 0.28988839055401217 }, - { month: "May", name: "C", value: 0.33189556082639227 }, - { month: "May", name: "D", value: 0.21876873390293805 }, - { month: "Jun.", name: "A", value: 0.619594448441904 }, - { month: "Jun.", name: "B", value: 0.420356249903558 }, - { month: "Jun.", name: "C", value: 0.8796166275555974 }, - { month: "Jun.", name: "D", value: 0.6400454237168027 }, - { month: "Jul.", name: "A", value: 0.6908402378581739 }, - { month: "Jul.", name: "B", value: 0.12152124015288734 }, - { month: "Jul.", name: "C", value: 0.6033258688205794 }, - { month: "Jul.", name: "D", value: 0.5584958845688628 }, - { month: "Aug.", name: "A", value: 0.391095929118485 }, - { month: "Aug.", name: "B", value: 0.494137952382379 }, - { month: "Aug.", name: "C", value: 0.6116254958078564 }, - { month: "Aug.", name: "D", value: 0.5803641632635503 }, - { month: "Sept.", name: "A", value: 0.6506347276994731 }, - { month: "Sept.", name: "B", value: 0.8165757521460599 }, - { month: "Sept.", name: "C", value: 0.2279107933218536 }, - { month: "Sept.", name: "D", value: 0.37419172590345484 }, - { month: "Oct.", name: "A", value: 0.17980507555487946 }, - { month: "Oct.", name: "B", value: 0.8701220373856862 }, - { month: "Oct.", name: "C", value: 0.4737963124883502 }, - { month: "Oct.", name: "D", value: 0.7383798484457005 }, - { month: "Nov.", name: "A", value: 0.26679319143326663 }, - { month: "Nov.", name: "B", value: 0.15200589580375534 }, - { month: "Nov.", name: "C", value: 0.6648648719163961 }, - { month: "Nov.", name: "D", value: 0.5341976900165717 }, - { month: "Dec.", name: "A", value: 0.5889497642361026 }, - { month: "Dec.", name: "B", value: 0.7152071786469567 }, - { month: "Dec.", name: "C", value: 0.8096766390742625 }, - { month: "Dec.", name: "D", value: 0.8703522265977728 }, - ], - encode: { position: "month" }, - children: [ - { type: "interval", encode: { x: "name", y: "value", color: "name" } }, + { month: 'Jan.', name: 'A', value: 0.6326436603187056 }, + { month: 'Jan.', name: 'B', value: 0.9059036864077081 }, + { month: 'Jan.', name: 'C', value: 0.22780841416561715 }, + { month: 'Jan.', name: 'D', value: 0.1579683971505692 }, + { month: 'Feb.', name: 'A', value: 0.33301714406421823 }, + { month: 'Feb.', name: 'B', value: 0.03205686296291077 }, + { month: 'Feb.', name: 'C', value: 0.38611653432027015 }, + { month: 'Feb.', name: 'D', value: 0.7234835419120198 }, + { month: 'Mar.', name: 'A', value: 0.904928473886162 }, + { month: 'Mar.', name: 'B', value: 0.4484199491941676 }, + { month: 'Mar.', name: 'C', value: 0.2824508981652456 }, + { month: 'Mar.', name: 'D', value: 0.9685413602116679 }, + { month: 'Apr.', name: 'A', value: 0.041723574080341 }, + { month: 'Apr.', name: 'B', value: 0.8030787933582404 }, + { month: 'Apr.', name: 'C', value: 0.41748710621502005 }, + { month: 'Apr.', name: 'D', value: 0.5281546266115444 }, + { month: 'May', name: 'A', value: 0.8729036090146685 }, + { month: 'May', name: 'B', value: 0.28988839055401217 }, + { month: 'May', name: 'C', value: 0.33189556082639227 }, + { month: 'May', name: 'D', value: 0.21876873390293805 }, + { month: 'Jun.', name: 'A', value: 0.619594448441904 }, + { month: 'Jun.', name: 'B', value: 0.420356249903558 }, + { month: 'Jun.', name: 'C', value: 0.8796166275555974 }, + { month: 'Jun.', name: 'D', value: 0.6400454237168027 }, + { month: 'Jul.', name: 'A', value: 0.6908402378581739 }, + { month: 'Jul.', name: 'B', value: 0.12152124015288734 }, + { month: 'Jul.', name: 'C', value: 0.6033258688205794 }, + { month: 'Jul.', name: 'D', value: 0.5584958845688628 }, + { month: 'Aug.', name: 'A', value: 0.391095929118485 }, + { month: 'Aug.', name: 'B', value: 0.494137952382379 }, + { month: 'Aug.', name: 'C', value: 0.6116254958078564 }, + { month: 'Aug.', name: 'D', value: 0.5803641632635503 }, + { month: 'Sept.', name: 'A', value: 0.6506347276994731 }, + { month: 'Sept.', name: 'B', value: 0.8165757521460599 }, + { month: 'Sept.', name: 'C', value: 0.2279107933218536 }, + { month: 'Sept.', name: 'D', value: 0.37419172590345484 }, + { month: 'Oct.', name: 'A', value: 0.17980507555487946 }, + { month: 'Oct.', name: 'B', value: 0.8701220373856862 }, + { month: 'Oct.', name: 'C', value: 0.4737963124883502 }, + { month: 'Oct.', name: 'D', value: 0.7383798484457005 }, + { month: 'Nov.', name: 'A', value: 0.26679319143326663 }, + { month: 'Nov.', name: 'B', value: 0.15200589580375534 }, + { month: 'Nov.', name: 'C', value: 0.6648648719163961 }, + { month: 'Nov.', name: 'D', value: 0.5341976900165717 }, + { month: 'Dec.', name: 'A', value: 0.5889497642361026 }, + { month: 'Dec.', name: 'B', value: 0.7152071786469567 }, + { month: 'Dec.', name: 'C', value: 0.8096766390742625 }, + { month: 'Dec.', name: 'D', value: 0.8703522265977728 }, ], + encode: { position: 'month' }, + children: [{ type: 'interval', encode: { x: 'name', y: 'value', color: 'name' } }], }; return ; }; diff --git a/site/examples/statistics/base/demo/facet-rect.js b/site/examples/statistics/base/demo/facet-rect.js index 2cddd4e79..ee677d83a 100644 --- a/site/examples/statistics/base/demo/facet-rect.js +++ b/site/examples/statistics/base/demo/facet-rect.js @@ -4,41 +4,37 @@ import { Base } from '@ant-design/plots'; const Demobase = () => { const config = { - type: "facetRect", + type: 'facetRect', height: 640, autoFit: false, paddingLeft: 60, paddingBottom: 60, data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/penguins.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/penguins.json', transform: [ { - type: "map", - callback: ({ - culmen_depth_mm: depth, - culmen_length_mm: length, - ...d - }) => ({ + type: 'map', + callback: ({ culmen_depth_mm: depth, culmen_length_mm: length, ...d }) => ({ ...d, - culmen_depth_mm: depth === "NaN" ? NaN : depth, - culmen_length_mm: length === "NaN" ? NaN : length, + culmen_depth_mm: depth === 'NaN' ? NaN : depth, + culmen_length_mm: length === 'NaN' ? NaN : length, }), }, ], }, - encode: { x: "sex", y: "species" }, + encode: { x: 'sex', y: 'species' }, children: [ { - type: "point", + type: 'point', frame: false, - encode: { x: "culmen_depth_mm", y: "culmen_length_mm" }, - style: { fill: "#ddd", strokeWidth: 0 }, + encode: { x: 'culmen_depth_mm', y: 'culmen_length_mm' }, + style: { fill: '#ddd', strokeWidth: 0 }, facet: false, }, { - type: "point", - encode: { x: "culmen_depth_mm", y: "culmen_length_mm", color: "island" }, + type: 'point', + encode: { x: 'culmen_depth_mm', y: 'culmen_length_mm', color: 'island' }, }, ], }; diff --git a/site/examples/statistics/base/demo/matrix-col.js b/site/examples/statistics/base/demo/matrix-col.js index 34eaecebc..5e7ca5fcb 100644 --- a/site/examples/statistics/base/demo/matrix-col.js +++ b/site/examples/statistics/base/demo/matrix-col.js @@ -4,31 +4,31 @@ import { Base } from '@ant-design/plots'; const Demobase = () => { const config = { - type: "repeatMatrix", + type: 'repeatMatrix', width: 300, height: 720, autoFit: false, paddingLeft: 60, paddingBottom: 60, data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/weather.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/weather.json', transform: [ { - type: "map", + type: 'map', callback: ({ date, ...d }) => ({ ...d, - date: new Date(date).getMonth() + "", + date: new Date(date).getMonth() + '', }), }, ], }, - encode: { y: ["temp_max", "precipitation", "wind"], x: "date" }, + encode: { y: ['temp_max', 'precipitation', 'wind'], x: 'date' }, children: [ { - type: "line", - encode: { color: "location" }, - transform: [{ type: "groupX", y: "mean" }], + type: 'line', + encode: { color: 'location' }, + transform: [{ type: 'groupX', y: 'mean' }], scale: { y: { zero: true } }, }, ], diff --git a/site/examples/statistics/base/demo/matrix.js b/site/examples/statistics/base/demo/matrix.js index 3f9e3cdaa..7d1466c70 100644 --- a/site/examples/statistics/base/demo/matrix.js +++ b/site/examples/statistics/base/demo/matrix.js @@ -5,18 +5,18 @@ import { Base } from '@ant-design/plots'; const Demobase = () => { const toNaN = (d) => (d === 'NaN' ? NaN : d); const config = { - type: "repeatMatrix", + type: 'repeatMatrix', width: 800, height: 800, autoFit: false, paddingLeft: 70, paddingBottom: 70, data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/penguins.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/penguins.json', transform: [ { - type: "map", + type: 'map', callback: ({ culmen_depth_mm: cdepth, culmen_length_mm: clength, @@ -34,14 +34,9 @@ const Demobase = () => { ], }, encode: { - position: [ - "culmen_length_mm", - "culmen_depth_mm", - "flipper_length_mm", - "body_mass_g", - ], + position: ['culmen_length_mm', 'culmen_depth_mm', 'flipper_length_mm', 'body_mass_g'], }, - children: [{ type: "point", encode: { color: "species" } }], + children: [{ type: 'point', encode: { color: 'species' } }], }; return ; }; diff --git a/site/examples/statistics/base/demo/space-flex.js b/site/examples/statistics/base/demo/space-flex.js index d4eea4cf9..a4573e9e9 100644 --- a/site/examples/statistics/base/demo/space-flex.js +++ b/site/examples/statistics/base/demo/space-flex.js @@ -4,57 +4,57 @@ import { Base } from '@ant-design/plots'; const Demobase = () => { const config = { - type: "spaceFlex", + type: 'spaceFlex', width: 900, autoFit: false, ratio: [1, 2], - direction: "col", + direction: 'col', data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/seattle-weather.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/seattle-weather.json', }, children: [ { - type: "interval", + type: 'interval', paddingBottom: 0, paddingRight: 300, encode: { x: (d) => new Date(d.date).getUTCDate(), - y: "temp_max", - color: "steelblue", + y: 'temp_max', + color: 'steelblue', }, - transform: [{ type: "groupX", y: "max" }], + transform: [{ type: 'groupX', y: 'max' }], axis: { x: false }, }, { - type: "spaceFlex", + type: 'spaceFlex', paddingBottom: 60, ratio: [2, 1], children: [ { - type: "cell", + type: 'cell', paddingBottom: 60, paddingRight: 0, encode: { x: (d) => new Date(d.date).getUTCDate(), y: (d) => new Date(d.date).getUTCMonth(), - color: "temp_max", + color: 'temp_max', }, - transform: [{ type: "group", color: "max" }], - scale: { color: { palette: "gnBu" } }, + transform: [{ type: 'group', color: 'max' }], + scale: { color: { palette: 'gnBu' } }, style: { inset: 0.5 }, - axis: { x: { title: "Date" }, y: { title: "Month" } }, + axis: { x: { title: 'Date' }, y: { title: 'Month' } }, legend: { color: false }, }, { - type: "interval", + type: 'interval', encode: { x: (d) => new Date(d.date).getUTCMonth(), - y: "temp_max", - color: "steelblue", + y: 'temp_max', + color: 'steelblue', }, - transform: [{ type: "groupX", y: "max" }], - coordinate: { transform: [{ type: "transpose" }] }, + transform: [{ type: 'groupX', y: 'max' }], + coordinate: { transform: [{ type: 'transpose' }] }, axis: { x: false }, }, ], diff --git a/site/examples/statistics/base/demo/space-layer.js b/site/examples/statistics/base/demo/space-layer.js index 164e06e15..9408b4c68 100644 --- a/site/examples/statistics/base/demo/space-layer.js +++ b/site/examples/statistics/base/demo/space-layer.js @@ -4,29 +4,28 @@ import { Base } from '@ant-design/plots'; const Demobase = () => { const config = { - type: "spaceLayer", + type: 'spaceLayer', data: { - type: "fetch", - value: - "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/base-space-layer.json", + type: 'fetch', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/base-space-layer.json', }, children: [ { - type: "interval", - encode: { x: "letter", y: "frequency", color: "letter" }, - transform: [{ type: "sortX", reverse: true, by: "y" }], - scale: { color: { palette: "cool", offset: (t) => t * 0.8 + 0.1 } }, + type: 'interval', + encode: { x: 'letter', y: 'frequency', color: 'letter' }, + transform: [{ type: 'sortX', reverse: true, by: 'y' }], + scale: { color: { palette: 'cool', offset: (t) => t * 0.8 + 0.1 } }, }, { - type: "interval", + type: 'interval', x: 300, y: 50, width: 300, height: 300, - encode: { y: "frequency", color: "letter" }, - transform: [{ type: "stackY" }], - scale: { color: { palette: "cool", offset: (t) => t * 0.8 + 0.1 } }, - coordinate: { type: "theta" }, + encode: { y: 'frequency', color: 'letter' }, + transform: [{ type: 'stackY' }], + scale: { color: { palette: 'cool', offset: (t) => t * 0.8 + 0.1 } }, + coordinate: { type: 'theta' }, legend: false, }, ], diff --git a/site/examples/statistics/box/demo/basic.js b/site/examples/statistics/box/demo/basic.js index 3c78dcc81..edb655dd5 100644 --- a/site/examples/statistics/box/demo/basic.js +++ b/site/examples/statistics/box/demo/basic.js @@ -4,14 +4,14 @@ import { Box } from '@ant-design/plots'; const DemoBox = () => { const data = [ - { x: 'Oceania', y: [ 1, 9, 16, 22, 24 ]}, - { x: 'East Europe', y: [ 1, 5, 8, 12, 16 ]}, - { x: 'Australia', y: [ 1, 8, 12, 19, 26 ]}, - { x: 'South America', y: [ 2, 8, 12, 21, 28 ]}, - { x: 'North Africa', y: [ 1, 8, 14, 18, 24 ]}, - { x: 'North America', y: [ 3, 10, 17, 28, 30 ]}, - { x: 'West Europe', y: [ 1, 7, 10, 17, 22 ]}, - { x: 'West Africa', y: [ 1, 6, 8, 13, 16 ]}, + { x: 'Oceania', y: [1, 9, 16, 22, 24] }, + { x: 'East Europe', y: [1, 5, 8, 12, 16] }, + { x: 'Australia', y: [1, 8, 12, 19, 26] }, + { x: 'South America', y: [2, 8, 12, 21, 28] }, + { x: 'North Africa', y: [1, 8, 14, 18, 24] }, + { x: 'North America', y: [3, 10, 17, 28, 30] }, + { x: 'West Europe', y: [1, 7, 10, 17, 22] }, + { x: 'West Africa', y: [1, 6, 8, 13, 16] }, ]; const config = { diff --git a/site/examples/statistics/box/demo/boxplot-no-outlier.js b/site/examples/statistics/box/demo/boxplot-no-outlier.js index f2067fc6c..c0f7a89bc 100644 --- a/site/examples/statistics/box/demo/boxplot-no-outlier.js +++ b/site/examples/statistics/box/demo/boxplot-no-outlier.js @@ -5,8 +5,8 @@ import { Box } from '@ant-design/plots'; const DemoBox = () => { const config = { data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/morley.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/morley.json', }, boxType: 'boxplot', xField: 'Expt', diff --git a/site/examples/statistics/box/demo/boxplot-one-dimension.js b/site/examples/statistics/box/demo/boxplot-one-dimension.js index 7fd0dc304..d0204d81e 100644 --- a/site/examples/statistics/box/demo/boxplot-one-dimension.js +++ b/site/examples/statistics/box/demo/boxplot-one-dimension.js @@ -8,14 +8,14 @@ const DemoBox = () => { autoFit: false, inset: 6, data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/morley.json", - transform: [{ type: "filter", callback: (d) => d.Expt === 1 }], + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/morley.json', + transform: [{ type: 'filter', callback: (d) => d.Expt === 1 }], }, boxType: 'boxplot', yField: 'Speed', - coordinate: { transform: [{ type: "transpose" }] }, - style: { boxFill: "#aaa", pointStroke: "#000" }, + coordinate: { transform: [{ type: 'transpose' }] }, + style: { boxFill: '#aaa', pointStroke: '#000' }, }; return ; }; diff --git a/site/examples/statistics/box/demo/boxplot-outlier.js b/site/examples/statistics/box/demo/boxplot-outlier.js index bf7e016b5..5db4547e2 100644 --- a/site/examples/statistics/box/demo/boxplot-outlier.js +++ b/site/examples/statistics/box/demo/boxplot-outlier.js @@ -5,8 +5,8 @@ import { Box } from '@ant-design/plots'; const DemoBox = () => { const config = { data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/morley.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/morley.json', }, boxType: 'boxplot', xField: 'Expt', diff --git a/site/examples/statistics/box/demo/boxplot-tooltip.js b/site/examples/statistics/box/demo/boxplot-tooltip.js index b5c698992..b642164f9 100644 --- a/site/examples/statistics/box/demo/boxplot-tooltip.js +++ b/site/examples/statistics/box/demo/boxplot-tooltip.js @@ -5,8 +5,8 @@ import { Box } from '@ant-design/plots'; const DemoBox = () => { const config = { data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/morley.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/morley.json', }, boxType: 'boxplot', xField: 'Expt', @@ -14,11 +14,11 @@ const DemoBox = () => { tooltip: { boxTitle: { channel: 'y3' }, boxItems: [ - { name: "最低值", channel: "y" }, - { name: "下四分位数", channel: "y1" }, - { name: "最低值", channel: "y2" }, - { name: "上四分位数", channel: "y3" }, - { name: "最高值", channel: "y4" }, + { name: '最低值', channel: 'y' }, + { name: '下四分位数', channel: 'y1' }, + { name: '最低值', channel: 'y2' }, + { name: '上四分位数', channel: 'y3' }, + { name: '最高值', channel: 'y4' }, ], pointTitle: { channel: 'x' }, pointItems: [{ channel: 'y', color: 'red', name: '异常点' }], diff --git a/site/examples/statistics/box/demo/grouped-boxplot-outlier.js b/site/examples/statistics/box/demo/grouped-boxplot-outlier.js index 032cd04ae..35f206d61 100644 --- a/site/examples/statistics/box/demo/grouped-boxplot-outlier.js +++ b/site/examples/statistics/box/demo/grouped-boxplot-outlier.js @@ -5,15 +5,15 @@ import { Box } from '@ant-design/plots'; const DemoBox = () => { const config = { data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/penguins.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/penguins.json', }, boxType: 'boxplot', xField: 'species', yField: 'flipper_length_mm', colorField: 'sex', seriesField: 'sex', - coordinate: { transform: [{ type: "transpose" }] }, + coordinate: { transform: [{ type: 'transpose' }] }, }; return ; }; diff --git a/site/examples/statistics/bullet/demo/bullet-more-cfg.js b/site/examples/statistics/bullet/demo/bullet-more-cfg.js index aa5b28c97..4de28737c 100644 --- a/site/examples/statistics/bullet/demo/bullet-more-cfg.js +++ b/site/examples/statistics/bullet/demo/bullet-more-cfg.js @@ -4,12 +4,14 @@ import { Bullet } from '@ant-design/plots'; const DemoBullet = () => { const config = { - data: [{ - title: '满意度', - ranges: 100, - measures: 80, - targets: 85, - }], + data: [ + { + title: '满意度', + ranges: 100, + measures: 80, + targets: 85, + }, + ], range: { style: { maxWidth: 50, diff --git a/site/examples/statistics/bullet/demo/bullet-vertical.js b/site/examples/statistics/bullet/demo/bullet-vertical.js index 307c1fb34..d7624f861 100644 --- a/site/examples/statistics/bullet/demo/bullet-vertical.js +++ b/site/examples/statistics/bullet/demo/bullet-vertical.js @@ -4,15 +4,17 @@ import { Bullet } from '@ant-design/plots'; const DemoBullet = () => { const config = { - data: [{ - title: '满意度', - ranges: 100, - measures: 80, - targets: 85, - }], + data: [ + { + title: '满意度', + ranges: 100, + measures: 80, + targets: 85, + }, + ], layout: 'vertical', }; - return ; + return ; }; ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bullet/demo/bullet.js b/site/examples/statistics/bullet/demo/bullet.js index 69ac3a025..9262e1f23 100644 --- a/site/examples/statistics/bullet/demo/bullet.js +++ b/site/examples/statistics/bullet/demo/bullet.js @@ -5,14 +5,16 @@ import { Bullet } from '@ant-design/plots'; const DemoBullet = () => { const config = { // default xField: 'title'、rangeField: 'ranges'、measureField: 'measures'、targetField: 'targets' - data: [{ - title: '满意度', - ranges: 100, - measures: 80, - targets: 85, - }], + data: [ + { + title: '满意度', + ranges: 100, + measures: 80, + targets: 85, + }, + ], }; - return ; + return ; }; ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bullet/demo/bullets-group.js b/site/examples/statistics/bullet/demo/bullets-group.js index a3305090c..f9c4828ff 100644 --- a/site/examples/statistics/bullet/demo/bullets-group.js +++ b/site/examples/statistics/bullet/demo/bullets-group.js @@ -3,7 +3,8 @@ import ReactDOM from 'react-dom'; import { Bullet } from '@ant-design/plots'; const DemoBullet = () => { - const data = [{ + const data = [ + { title: '5🌟', ranges: [100, 80], measures: [50, 40], @@ -40,7 +41,7 @@ const DemoBullet = () => { color, }; - return ; + return ; }; ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bullet/demo/bullets.js b/site/examples/statistics/bullet/demo/bullets.js index 221d0665f..9494f290d 100644 --- a/site/examples/statistics/bullet/demo/bullets.js +++ b/site/examples/statistics/bullet/demo/bullets.js @@ -30,7 +30,7 @@ const DemoBullet = () => { target: ['目标'], }, }; - return ; + return ; }; ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/bullet/demo/meta.json b/site/examples/statistics/bullet/demo/meta.json index 00e5a421b..792e36e11 100644 --- a/site/examples/statistics/bullet/demo/meta.json +++ b/site/examples/statistics/bullet/demo/meta.json @@ -3,7 +3,8 @@ "zh": "中文分类", "en": "Category" }, - "demos": [{ + "demos": [ + { "filename": "bullet.js", "title": { "zh": "子弹图", diff --git a/site/examples/statistics/circle-packing/demo/circlePacking.js b/site/examples/statistics/circle-packing/demo/circlePacking.js index 47731f9aa..2063893b8 100644 --- a/site/examples/statistics/circle-packing/demo/circlePacking.js +++ b/site/examples/statistics/circle-packing/demo/circlePacking.js @@ -1,23 +1,20 @@ - - import { CirclePacking } from '@ant-design/plots'; import { interpolateHcl } from 'd3-interpolate'; import React from 'react'; import ReactDOM from 'react-dom'; const DemoCirclePacking = () => { - const config = { data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/flare.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/flare.json', }, - valueField: "value", - colorField: "depth", + valueField: 'value', + colorField: 'depth', scale: { color: { domain: [0, 5], - range: ["hsl(152,80%,80%)", "hsl(228,30%,40%)"], - interpolate: interpolateHcl + range: ['hsl(152,80%,80%)', 'hsl(228,30%,40%)'], + interpolate: interpolateHcl, }, }, }; diff --git a/site/examples/statistics/circle-packing/demo/circlePackingLabel.js b/site/examples/statistics/circle-packing/demo/circlePackingLabel.js index a049f7986..3c2546eb4 100644 --- a/site/examples/statistics/circle-packing/demo/circlePackingLabel.js +++ b/site/examples/statistics/circle-packing/demo/circlePackingLabel.js @@ -1,34 +1,31 @@ - - import { CirclePacking } from '@ant-design/plots'; import { interpolateHcl } from 'd3-interpolate'; import React from 'react'; import ReactDOM from 'react-dom'; const DemoCirclePackingLabel = () => { - const config = { data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/flare.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/flare.json', }, - valueField: "value", - colorField: "depth", + valueField: 'value', + colorField: 'depth', scale: { color: { domain: [0, 5], - range: ["hsl(152,80%,80%)", "hsl(228,30%,40%)"], - interpolate: interpolateHcl + range: ['hsl(152,80%,80%)', 'hsl(228,30%,40%)'], + interpolate: interpolateHcl, }, }, label: { - text: (d) => d.height === 0 ? d.data.name : '', + text: (d) => (d.height === 0 ? d.data.name : ''), position: 'inside', transform: [ { - type: 'overflowHide' + type: 'overflowHide', }, - ] - } + ], + }, }; return ; }; diff --git a/site/examples/statistics/circle-packing/demo/circlePackingPadding.js b/site/examples/statistics/circle-packing/demo/circlePackingPadding.js index 14568ce3c..ba69031ba 100644 --- a/site/examples/statistics/circle-packing/demo/circlePackingPadding.js +++ b/site/examples/statistics/circle-packing/demo/circlePackingPadding.js @@ -1,37 +1,34 @@ - - import { CirclePacking } from '@ant-design/plots'; import { interpolateHcl } from 'd3-interpolate'; import React from 'react'; import ReactDOM from 'react-dom'; const DemoCirclePackingPadding = () => { - const config = { data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/flare.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/flare.json', }, - valueField: "value", - colorField: "depth", + valueField: 'value', + colorField: 'depth', scale: { color: { domain: [0, 5], - range: ["hsl(152,80%,80%)", "hsl(228,30%,40%)"], - interpolate: interpolateHcl + range: ['hsl(152,80%,80%)', 'hsl(228,30%,40%)'], + interpolate: interpolateHcl, }, }, layout: { padding: 5, }, label: { - text: (d) => d.height === 0 ? d.data.name : '', + text: (d) => (d.height === 0 ? d.data.name : ''), position: 'inside', transform: [ { - type: 'overflowHide' + type: 'overflowHide', }, - ] - } + ], + }, }; return ; }; diff --git a/site/examples/statistics/column/demo/percent.js b/site/examples/statistics/column/demo/percent.js index 9b7475ada..afa1d6553 100644 --- a/site/examples/statistics/column/demo/percent.js +++ b/site/examples/statistics/column/demo/percent.js @@ -110,7 +110,6 @@ const data = [ }, ]; - const DemoArea = () => { const config = { data, @@ -121,8 +120,8 @@ const DemoArea = () => { stack: true, interaction: { tooltip: { - shared: true - } + shared: true, + }, }, tooltip: { channel: 'y0', valueFormatter: '.0%' }, }; diff --git a/site/examples/statistics/gauge/demo/gauge.js b/site/examples/statistics/gauge/demo/gauge.js index 03c78b9a7..0e100d169 100644 --- a/site/examples/statistics/gauge/demo/gauge.js +++ b/site/examples/statistics/gauge/demo/gauge.js @@ -8,11 +8,11 @@ const DemoGauge = () => { height: 720, autoFit: true, data: { - target: 120, - total: 400, - name: 'score', + target: 120, + total: 400, + name: 'score', }, - legend: false + legend: false, }; return ; }; diff --git a/site/examples/statistics/liquid/demo/liquid-background.js b/site/examples/statistics/liquid/demo/liquid-background.js index 1f2e4e89d..f0a29b655 100644 --- a/site/examples/statistics/liquid/demo/liquid-background.js +++ b/site/examples/statistics/liquid/demo/liquid-background.js @@ -4,7 +4,7 @@ import ReactDOM from 'react-dom'; const DemoLiquid = () => { const config = { - percent: .3, + percent: 0.3, style: { backgroundFill: 'pink', }, diff --git a/site/examples/statistics/radial-bar/demo/background.js b/site/examples/statistics/radial-bar/demo/background.js index 9031591d2..f29ace413 100644 --- a/site/examples/statistics/radial-bar/demo/background.js +++ b/site/examples/statistics/radial-bar/demo/background.js @@ -24,14 +24,14 @@ const DemoRadialBar = () => { tooltip: { items: ['star'], }, - legend:false, + legend: false, axis: { y: false, }, markBackground: { opacity: 0.25, }, - scale:{ + scale: { y: { domain: [0, 12000], // 设定范围用于背景图的渲染获取最大值 }, diff --git a/site/examples/statistics/radial-bar/demo/basic.js b/site/examples/statistics/radial-bar/demo/basic.js index bbe518615..34b7ab265 100644 --- a/site/examples/statistics/radial-bar/demo/basic.js +++ b/site/examples/statistics/radial-bar/demo/basic.js @@ -2,7 +2,6 @@ import { RadialBar } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; - const data = [ { name: 'X6', star: 297 }, { name: 'G', star: 506 }, @@ -23,7 +22,7 @@ const DemoRadialBar = () => { radius: 1, innerRadius: 0.2, tooltip: { - items:['star'] + items: ['star'], }, }; return ; diff --git a/site/examples/statistics/radial-bar/demo/grouped.js b/site/examples/statistics/radial-bar/demo/grouped.js index a9bc549ad..4a9371fc3 100644 --- a/site/examples/statistics/radial-bar/demo/grouped.js +++ b/site/examples/statistics/radial-bar/demo/grouped.js @@ -2,98 +2,97 @@ import { RadialBar } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; - const data = [ { - "year": "1991", - "value": 3, - "type": "Lon" + year: '1991', + value: 3, + type: 'Lon', }, { - "year": "1992", - "value": 4, - "type": "Lon" + year: '1992', + value: 4, + type: 'Lon', }, { - "year": "1993", - "value": 3.5, - "type": "Lon" + year: '1993', + value: 3.5, + type: 'Lon', }, { - "year": "1994", - "value": 5, - "type": "Lon" + year: '1994', + value: 5, + type: 'Lon', }, { - "year": "1995", - "value": 4.9, - "type": "Lon" + year: '1995', + value: 4.9, + type: 'Lon', }, { - "year": "1996", - "value": 6, - "type": "Lon" + year: '1996', + value: 6, + type: 'Lon', }, { - "year": "1997", - "value": 7, - "type": "Lon" + year: '1997', + value: 7, + type: 'Lon', }, { - "year": "1998", - "value": 9, - "type": "Lon" + year: '1998', + value: 9, + type: 'Lon', }, { - "year": "1999", - "value": 13, - "type": "Lon" + year: '1999', + value: 13, + type: 'Lon', }, { - "year": "1991", - "value": 3, - "type": "Bor" + year: '1991', + value: 3, + type: 'Bor', }, { - "year": "1992", - "value": 4, - "type": "Bor" + year: '1992', + value: 4, + type: 'Bor', }, { - "year": "1993", - "value": 3.5, - "type": "Bor" + year: '1993', + value: 3.5, + type: 'Bor', }, { - "year": "1994", - "value": 5, - "type": "Bor" + year: '1994', + value: 5, + type: 'Bor', }, { - "year": "1995", - "value": 4.9, - "type": "Bor" + year: '1995', + value: 4.9, + type: 'Bor', }, { - "year": "1996", - "value": 6, - "type": "Bor" + year: '1996', + value: 6, + type: 'Bor', }, { - "year": "1997", - "value": 7, - "type": "Bor" + year: '1997', + value: 7, + type: 'Bor', }, { - "year": "1998", - "value": 9, - "type": "Bor" + year: '1998', + value: 9, + type: 'Bor', }, { - "year": "1999", - "value": 13, - "type": "Bor" - } + year: '1999', + value: 13, + type: 'Bor', + }, ]; const DemoRadialBar = () => { diff --git a/site/examples/statistics/radial-bar/demo/meta.json b/site/examples/statistics/radial-bar/demo/meta.json index fab7457b9..e9de352c9 100644 --- a/site/examples/statistics/radial-bar/demo/meta.json +++ b/site/examples/statistics/radial-bar/demo/meta.json @@ -34,7 +34,7 @@ "zh": "堆叠玉珏图", "en": "Stacked Radial-Bar plot" }, - + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/tft60hEBvN/594d5cfc-8da0-441b-89dd-81eb4f5657b6.png" }, { @@ -43,7 +43,7 @@ "zh": "分组玉珏图", "en": "Grouped Radial-Bar plot" }, - + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/M2EJJVBmHE/8984eee5-da51-4afb-8e81-34a8aaab47c0.png" }, { diff --git a/site/examples/statistics/radial-bar/demo/stacked.js b/site/examples/statistics/radial-bar/demo/stacked.js index 2d76fb6ec..0c4a3f65d 100644 --- a/site/examples/statistics/radial-bar/demo/stacked.js +++ b/site/examples/statistics/radial-bar/demo/stacked.js @@ -2,98 +2,97 @@ import { RadialBar } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; - const data = [ { - "year": "1991", - "value": 3, - "type": "Lon" + year: '1991', + value: 3, + type: 'Lon', }, { - "year": "1992", - "value": 4, - "type": "Lon" + year: '1992', + value: 4, + type: 'Lon', }, { - "year": "1993", - "value": 3.5, - "type": "Lon" + year: '1993', + value: 3.5, + type: 'Lon', }, { - "year": "1994", - "value": 5, - "type": "Lon" + year: '1994', + value: 5, + type: 'Lon', }, { - "year": "1995", - "value": 4.9, - "type": "Lon" + year: '1995', + value: 4.9, + type: 'Lon', }, { - "year": "1996", - "value": 6, - "type": "Lon" + year: '1996', + value: 6, + type: 'Lon', }, { - "year": "1997", - "value": 7, - "type": "Lon" + year: '1997', + value: 7, + type: 'Lon', }, { - "year": "1998", - "value": 9, - "type": "Lon" + year: '1998', + value: 9, + type: 'Lon', }, { - "year": "1999", - "value": 13, - "type": "Lon" + year: '1999', + value: 13, + type: 'Lon', }, { - "year": "1991", - "value": 3, - "type": "Bor" + year: '1991', + value: 3, + type: 'Bor', }, { - "year": "1992", - "value": 4, - "type": "Bor" + year: '1992', + value: 4, + type: 'Bor', }, { - "year": "1993", - "value": 3.5, - "type": "Bor" + year: '1993', + value: 3.5, + type: 'Bor', }, { - "year": "1994", - "value": 5, - "type": "Bor" + year: '1994', + value: 5, + type: 'Bor', }, { - "year": "1995", - "value": 4.9, - "type": "Bor" + year: '1995', + value: 4.9, + type: 'Bor', }, { - "year": "1996", - "value": 6, - "type": "Bor" + year: '1996', + value: 6, + type: 'Bor', }, { - "year": "1997", - "value": 7, - "type": "Bor" + year: '1997', + value: 7, + type: 'Bor', }, { - "year": "1998", - "value": 9, - "type": "Bor" + year: '1998', + value: 9, + type: 'Bor', }, { - "year": "1999", - "value": 13, - "type": "Bor" - } + year: '1999', + value: 13, + type: 'Bor', + }, ]; const DemoRadialBar = () => { diff --git a/site/examples/statistics/rose/demo/basic.js b/site/examples/statistics/rose/demo/basic.js index 6710ef43f..850cc8883 100644 --- a/site/examples/statistics/rose/demo/basic.js +++ b/site/examples/statistics/rose/demo/basic.js @@ -5,9 +5,8 @@ import ReactDOM from 'react-dom'; const DemoScatter = () => { const config = { data: { - type: "fetch", - value: - "https://gw.alipayobjects.com/os/basement_prod/6b4aa721-b039-49b9-99d8-540b3f87d339.json", + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/basement_prod/6b4aa721-b039-49b9-99d8-540b3f87d339.json', }, xField: 'height', yField: 'weight', diff --git a/site/examples/statistics/sankey/demo/basic.js b/site/examples/statistics/sankey/demo/basic.js index fc22f4dad..d22493933 100644 --- a/site/examples/statistics/sankey/demo/basic.js +++ b/site/examples/statistics/sankey/demo/basic.js @@ -1,16 +1,16 @@ -import { Sankey } from '@ant-design/plots' +import { Sankey } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; const DemoSankey = () => { const config = { - layout: { nodeAlign: "center", nodePadding: 0.03 }, + layout: { nodeAlign: 'center', nodePadding: 0.03 }, data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/energy.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/energy.json', transform: [ { - type: "custom", + type: 'custom', callback: (data) => ({ links: data, }), @@ -20,22 +20,22 @@ const DemoSankey = () => { scale: { color: { range: [ - "#4e79a7", - "#f28e2c", - "#e15759", - "#76b7b2", - "#59a14f", - "#edc949", - "#af7aa1", - "#ff9da7", - "#9c755f", - "#bab0ab", + '#4e79a7', + '#f28e2c', + '#e15759', + '#76b7b2', + '#59a14f', + '#edc949', + '#af7aa1', + '#ff9da7', + '#9c755f', + '#bab0ab', ], }, }, style: { labelSpacing: 3, - labelFontWeight: "bold", + labelFontWeight: 'bold', nodeStrokeWidth: 1.2, linkFillOpacity: 0.4, }, diff --git a/site/examples/statistics/scatter/demo/basic.js b/site/examples/statistics/scatter/demo/basic.js index 6710ef43f..850cc8883 100644 --- a/site/examples/statistics/scatter/demo/basic.js +++ b/site/examples/statistics/scatter/demo/basic.js @@ -5,9 +5,8 @@ import ReactDOM from 'react-dom'; const DemoScatter = () => { const config = { data: { - type: "fetch", - value: - "https://gw.alipayobjects.com/os/basement_prod/6b4aa721-b039-49b9-99d8-540b3f87d339.json", + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/basement_prod/6b4aa721-b039-49b9-99d8-540b3f87d339.json', }, xField: 'height', yField: 'weight', diff --git a/site/examples/statistics/scatter/demo/meta.json b/site/examples/statistics/scatter/demo/meta.json index eabe8adac..cab4497c9 100644 --- a/site/examples/statistics/scatter/demo/meta.json +++ b/site/examples/statistics/scatter/demo/meta.json @@ -3,7 +3,8 @@ "zh": "中文分类", "en": "Category" }, - "demos": [{ + "demos": [ + { "filename": "basic.js", "title": { "zh": "散点图", diff --git a/site/examples/statistics/scatter/demo/point-bubble.js b/site/examples/statistics/scatter/demo/point-bubble.js index ceacc3745..0aacdade3 100644 --- a/site/examples/statistics/scatter/demo/point-bubble.js +++ b/site/examples/statistics/scatter/demo/point-bubble.js @@ -1,16 +1,18 @@ -import {Scatter} from '@ant-design/plots'; +import { Scatter } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; const DemoScatter = () => { const config = { data: { - type: "fetch", - value: "https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-bubble.json", - transform: [{ - type: 'filter', - callback: (d) => d.Entity !== 'All natural disasters', - }], + type: 'fetch', + value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-bubble.json', + transform: [ + { + type: 'filter', + callback: (d) => d.Entity !== 'All natural disasters', + }, + ], }, paddingLeft: 150, paddingTop: 50, @@ -29,9 +31,9 @@ const DemoScatter = () => { stroke: 'black', opacity: 0.8, lineWidth: 1, - } + }, }; - return ; + return ; }; -ReactDOM.render( , document.getElementById('container')); +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/scatter/demo/point-jitter.js b/site/examples/statistics/scatter/demo/point-jitter.js index cb0d4f182..7a45f1c7e 100644 --- a/site/examples/statistics/scatter/demo/point-jitter.js +++ b/site/examples/statistics/scatter/demo/point-jitter.js @@ -8,16 +8,16 @@ const DemoScatter = () => { type: 'fetch', value: 'https://render.alipay.com/p/yuyan/180020010001215413/antd-charts/scatter-point-jitter.json', }, - transform: [{ type: 'jitterX'}, { type: 'sortX', channel: 'x' }], + transform: [{ type: 'jitterX' }, { type: 'sortX', channel: 'x' }], xField: 'Cylinders', yField: 'Horsepower', colorField: 'Cylinders', shapeField: 'hollow', scale: { - x: { type: 'point'}, + x: { type: 'point' }, y: { domain: [0, 200] }, - color: { type: 'ordinal' } - } + color: { type: 'ordinal' }, + }, }; return ; }; diff --git a/site/examples/statistics/scatter/demo/point-one-dimension.js b/site/examples/statistics/scatter/demo/point-one-dimension.js index c192f5e6a..4103e343a 100644 --- a/site/examples/statistics/scatter/demo/point-one-dimension.js +++ b/site/examples/statistics/scatter/demo/point-one-dimension.js @@ -7,9 +7,8 @@ const DemoScatter = () => { height: 120, autoFit: false, data: { - type: "fetch", - value: - 'https://gw.alipayobjects.com/os/basement_prod/6b4aa721-b039-49b9-99d8-540b3f87d339.json', + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/basement_prod/6b4aa721-b039-49b9-99d8-540b3f87d339.json', }, xField: 'height', }; diff --git a/site/examples/statistics/scatter/demo/point-strip.js b/site/examples/statistics/scatter/demo/point-strip.js index 99077f6b6..d51e11ec2 100644 --- a/site/examples/statistics/scatter/demo/point-strip.js +++ b/site/examples/statistics/scatter/demo/point-strip.js @@ -17,8 +17,8 @@ const DemoScatter = () => { shapeField: 'line', scale: { y: { type: 'linear', zero: true }, - x: { domain: [0, 10] } - } + x: { domain: [0, 10] }, + }, }; return ; }; diff --git a/site/examples/statistics/tiny/demo/basic-progress.js b/site/examples/statistics/tiny/demo/basic-progress.js index a4ceef975..51d5c76bc 100644 --- a/site/examples/statistics/tiny/demo/basic-progress.js +++ b/site/examples/statistics/tiny/demo/basic-progress.js @@ -3,7 +3,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; const DemoProgress = () => { - const progress = 0.7 + const progress = 0.7; const config = { width: 480, @@ -22,8 +22,8 @@ const DemoProgress = () => { fontSize: 16, fontStyle: 'bold', }, - } - ] + }, + ], }; return ; diff --git a/site/examples/statistics/venn/demo/label.js b/site/examples/statistics/venn/demo/label.js index ba7b1f106..22fa12b47 100644 --- a/site/examples/statistics/venn/demo/label.js +++ b/site/examples/statistics/venn/demo/label.js @@ -20,7 +20,7 @@ const DemoVenn = () => { position: 'inside', text: (d) => d.label || '', transform: [{ type: 'contrastReverse' }], - } + }, }; return ; }; diff --git a/site/examples/statistics/violin/demo/basic.js b/site/examples/statistics/violin/demo/basic.js index b4e915ec1..34464dc11 100644 --- a/site/examples/statistics/violin/demo/basic.js +++ b/site/examples/statistics/violin/demo/basic.js @@ -11,7 +11,7 @@ const DemoViolin = () => { }, xField: 'x', yField: 'y', - seriesField: 'species' + seriesField: 'species', }; return ; }; diff --git a/site/examples/statistics/violin/demo/density.js b/site/examples/statistics/violin/demo/density.js index 7b4ca7a67..ea844acc7 100644 --- a/site/examples/statistics/violin/demo/density.js +++ b/site/examples/statistics/violin/demo/density.js @@ -11,9 +11,9 @@ const DemoViolin = () => { }, xField: 'x', yField: 'y', - seriesField: 'species' + seriesField: 'species', }; return ; }; -ReactDOM.render(, document.getElementById('container')); \ No newline at end of file +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/violin/demo/polar.js b/site/examples/statistics/violin/demo/polar.js index 283aa9b67..49c8e7224 100644 --- a/site/examples/statistics/violin/demo/polar.js +++ b/site/examples/statistics/violin/demo/polar.js @@ -11,7 +11,7 @@ const DemoViolin = () => { }, xField: 'x', yField: 'y', - seriesField: 'species' + seriesField: 'species', }; return ; }; diff --git a/site/examples/statistics/wordCloud/demo/wordCloud-image.js b/site/examples/statistics/wordCloud/demo/wordCloud-image.js index b210ffeec..777f3df87 100644 --- a/site/examples/statistics/wordCloud/demo/wordCloud-image.js +++ b/site/examples/statistics/wordCloud/demo/wordCloud-image.js @@ -8,13 +8,11 @@ const DemoWordCloud = () => { height: 400, autoFit: false, data: { - type: "fetch", - value: - "https://gw.alipayobjects.com/os/antvdemo/assets/data/antv-keywords.json", + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antvdemo/assets/data/antv-keywords.json', }, layout: { - imageMask: - "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*LKU4TYEiB-4AAAAAAAAAAAAADmJ7AQ/original", + imageMask: 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*LKU4TYEiB-4AAAAAAAAAAAAADmJ7AQ/original', fontSize: 10, }, colorField: 'name', diff --git a/site/examples/statistics/wordCloud/demo/wordCloud.js b/site/examples/statistics/wordCloud/demo/wordCloud.js index 702e7f109..a8e39325c 100644 --- a/site/examples/statistics/wordCloud/demo/wordCloud.js +++ b/site/examples/statistics/wordCloud/demo/wordCloud.js @@ -6,10 +6,10 @@ const DemoWordCloud = () => { const config = { paddingTop: 40, data: { - type: "fetch", - value: "https://assets.antv.antgroup.com/g2/philosophy-word.json", + type: 'fetch', + value: 'https://assets.antv.antgroup.com/g2/philosophy-word.json', }, - layout: { spiral: "rectangular" }, + layout: { spiral: 'rectangular' }, colorField: 'text', }; return ; From 8983b80fb410ac894e249cd463662761f41cc295 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 28 Nov 2023 18:13:22 +0800 Subject: [PATCH 128/268] fix: update options (#2249) --- packages/plots/package.json | 2 +- packages/plots/src/core/base/index.ts | 6 +-- .../plots/src/core/plots/dual-axes/adaptor.ts | 34 +++++++++++++- .../plots/src/core/plots/dual-axes/index.ts | 6 +++ packages/plots/src/core/utils/index.ts | 1 - packages/plots/src/core/utils/transform.ts | 47 ++++++++++--------- .../dual-axes/demo/custom-column-line.js | 2 +- 7 files changed, 69 insertions(+), 29 deletions(-) diff --git a/packages/plots/package.json b/packages/plots/package.json index 189f13e70..6418a2146 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.3", + "version": "2.0.4", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index adf1397b2..6775ac953 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -1,7 +1,7 @@ import EE from '@antv/event-emitter'; import { Chart, ChartEvent } from '@antv/g2'; import { CHART_OPTIONS, ANNOTATION_LIST, SKIP_DEL_CUSTOM_SIGN } from '../constants'; -import { merge, omit, pick, deleteCustomKeys, deleteChartOptionKeys } from '../utils'; +import { deepAssign, omit, pick, deleteCustomKeys, deleteChartOptionKeys } from '../utils'; import { Annotaion } from '../annotation'; import type { Adaptor, Options } from '../types'; @@ -24,7 +24,7 @@ export abstract class Plot extends EE { constructor(container: string | HTMLElement, options: O) { super(); this.container = typeof container === 'string' ? document.getElementById(container) : container; - this.options = merge({}, this.getBaseOptions(), this.getDefaultOptions(), options); + this.options = deepAssign({}, this.getBaseOptions(), this.getDefaultOptions(), options); this.createG2(); this.bindEvents(); } @@ -132,7 +132,7 @@ export abstract class Plot extends EE { * @param options */ protected updateOption(options: Partial) { - this.options = merge({}, this.options, options); + this.options = deepAssign({}, this.options, options); } /** diff --git a/packages/plots/src/core/plots/dual-axes/adaptor.ts b/packages/plots/src/core/plots/dual-axes/adaptor.ts index 7eb47b5cf..382bf86d9 100644 --- a/packages/plots/src/core/plots/dual-axes/adaptor.ts +++ b/packages/plots/src/core/plots/dual-axes/adaptor.ts @@ -1,6 +1,6 @@ import { mark } from '../../components'; import type { Adaptor } from '../../types'; -import { flow, transformOptions } from '../../utils'; +import { flow, transformOptions, get, set } from '../../utils'; import type { DualAxesOptions } from './type'; type Params = Adaptor; @@ -10,5 +10,35 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(transformOptions, mark)(params); + /** + * @description Top level annotations needs to share scale, when top level annotations is not empty, scale needs to be dynamically set. + */ + const annotations = (params: Params) => { + const { options } = params; + const { annotations = [], children = [] } = options; + let sharedScale = false; + children.forEach((child, index) => { + const scaleKey = `child${index}Scale`; + set(child, 'scale.y.key', scaleKey); + const { annotations: childAnnotations = [] } = child; + /** + * @description If the child has annotations, the scale of the child needs to be assigned scaleKey to connect the annotation. + */ + if (childAnnotations.length > 0) { + set(child, 'scale.y.independent', false); + childAnnotations.forEach((annotation) => { + set(annotation, 'scale.y.key', scaleKey); + }); + } + if (!sharedScale && annotations.length > 0 && get(child, 'scale.y.independent') === undefined) { + sharedScale = true; + set(child, 'scale.y.independent', false); + annotations.forEach((annotation) => { + set(annotation, 'scale.y.key', scaleKey); + }); + } + }); + return params; + }; + return flow(annotations, transformOptions, mark)(params); } diff --git a/packages/plots/src/core/plots/dual-axes/index.ts b/packages/plots/src/core/plots/dual-axes/index.ts index 42f1b6900..199b3789a 100644 --- a/packages/plots/src/core/plots/dual-axes/index.ts +++ b/packages/plots/src/core/plots/dual-axes/index.ts @@ -20,6 +20,12 @@ export class DualAxes extends Plot { y: { title: false, tick: false }, x: { title: false }, }, + scale: { + y: { + independent: true, + nice: true, + }, + }, }; } diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index fe16086cc..05f3908e7 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -3,7 +3,6 @@ export { flow, isArray, isBoolean, - merge, omit, pick, isFunction, diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index 695af233d..90bbbc518 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -51,6 +51,30 @@ export const transformOptions = (params: Adaptor) => { } }; + /** + * @description + * 1. 将 CONFIG_SHAPE 中的配置项, 转换为 children + * @example 详见 src/core/constants/index.ts + */ + const transformShape = (config: T) => { + Object.keys(config).forEach((key) => { + const exist = CONFIG_SHAPE.find((item) => item.key === key); + if (exist) { + const { type, extend_keys } = exist; + if (type) { + children.push(transformConfig(deepAssign({}, pick(config, extend_keys), { type }, config[key]))); + } else { + // annotations + if (isArray(config[key])) { + config[key].forEach((annotation) => { + children.push(transformConfig(annotation)); + }); + } + } + } + }); + }; + /** * @title 通用转换逻辑 * @description 直接修改原对象 @@ -59,6 +83,7 @@ export const transformOptions = (params: Adaptor) => { config: T, callback?: (transformObject: object, specKey: string, key: string) => void, ): T => { + transformShape(config); Object.keys(TRANSFORM_OPTION_KEY).forEach((specKey) => { const transformObject = TRANSFORM_OPTION_KEY[specKey]; /** @@ -89,27 +114,7 @@ export const transformOptions = (params: Adaptor) => { transformConfig(deepAssign(child, config)); }); - /** - * @description - * 1. 将 CONFIG_SHAPE 中的配置项, 转换为 children - * @example 详见 src/core/constants/index.ts - */ - Object.keys(options).forEach((key) => { - const exist = CONFIG_SHAPE.find((item) => item.key === key); - if (exist) { - const { type, extend_keys } = exist; - if (type) { - children.push(transformConfig(deepAssign({}, pick(options, extend_keys), { type }, options[key]))); - } else { - // annotations - if (isArray(options[key])) { - options[key].forEach((annotation) => { - children.push(transformConfig(annotation)); - }); - } - } - } - }); + transformShape(options); deleteCustomKeys(options); diff --git a/site/examples/statistics/dual-axes/demo/custom-column-line.js b/site/examples/statistics/dual-axes/demo/custom-column-line.js index 1c30bbd72..10e78d18f 100644 --- a/site/examples/statistics/dual-axes/demo/custom-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-column-line.js @@ -46,7 +46,7 @@ const DemoDualAxes = () => { annotations: [ { type: 'text', - data: ['2019-05', 280], + data: ['2019-05', 300], style: { text: '2019-05, 发布新版本', dy: -30, From 85fe47e31b05dfe912409b68c724d1faf8a9bcd8 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 29 Nov 2023 12:38:07 +0800 Subject: [PATCH 129/268] fix: stack logic (#2250) --- packages/plots/package.json | 2 +- packages/plots/src/core/components/mark.ts | 4 +- .../plots/src/core/components/shape-stack.ts | 37 +++++++++++++++++++ packages/plots/src/core/constants/index.ts | 3 +- packages/plots/src/core/plots/area/adaptor.ts | 2 +- packages/plots/src/core/plots/bar/adaptor.ts | 2 +- .../core/plots/bidirectional-bar/adaptor.ts | 2 +- packages/plots/src/core/plots/box/adaptor.ts | 2 +- .../plots/src/core/plots/column/adaptor.ts | 2 +- .../plots/src/core/plots/dual-axes/adaptor.ts | 2 +- .../plots/src/core/plots/funnel/adaptor.ts | 2 +- .../plots/src/core/plots/gauge/adaptor.ts | 2 +- .../plots/src/core/plots/heatmap/adaptor.ts | 2 +- .../plots/src/core/plots/histogram/adaptor.ts | 2 +- packages/plots/src/core/plots/line/adaptor.ts | 2 +- .../plots/src/core/plots/liquid/adaptor.ts | 2 +- .../src/core/plots/radial-bar/adaptor.ts | 2 +- .../plots/src/core/plots/sankey/adaptor.ts | 2 +- .../plots/src/core/plots/scatter/adaptor.ts | 2 +- .../plots/src/core/plots/tiny-area/adaptor.ts | 2 +- .../src/core/plots/tiny-column/adaptor.ts | 2 +- .../plots/src/core/plots/tiny-line/adaptor.ts | 2 +- .../src/core/plots/tiny-progress/adaptor.ts | 2 +- .../plots/src/core/plots/tiny-ring/adaptor.ts | 2 +- .../plots/src/core/plots/treemap/adaptor.ts | 2 +- .../plots/src/core/plots/violin/adaptor.ts | 2 +- .../plots/src/core/plots/waterfall/adaptor.ts | 2 +- .../plots/src/core/plots/wordCloud/adaptor.ts | 2 +- 28 files changed, 66 insertions(+), 28 deletions(-) create mode 100644 packages/plots/src/core/components/shape-stack.ts diff --git a/packages/plots/package.json b/packages/plots/package.json index 6418a2146..33f8c5fde 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.4", + "version": "2.0.5", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/components/mark.ts b/packages/plots/src/core/components/mark.ts index 89dc9457a..3101336c2 100644 --- a/packages/plots/src/core/components/mark.ts +++ b/packages/plots/src/core/components/mark.ts @@ -1,8 +1,10 @@ +import { flow } from '../utils'; +import { shapeStack } from './shape-stack'; import type { Adaptor } from '../types'; /** * 根据图表类型新增一些高阶 Mark */ export function mark

(params: P) { - return params; + return flow(shapeStack)(params); } diff --git a/packages/plots/src/core/components/shape-stack.ts b/packages/plots/src/core/components/shape-stack.ts new file mode 100644 index 000000000..834e6bc70 --- /dev/null +++ b/packages/plots/src/core/components/shape-stack.ts @@ -0,0 +1,37 @@ +import { set, isBoolean } from '../utils'; +import { CONFIG_SHAPE } from '../constants'; +import type { Adaptor } from '../types'; + +/** + * @description 处理堆叠图配置line|point|area时的transform问题 + */ +export function shapeStack

(params: P) { + const { options } = params; + const { stack, tooltip, xField } = options; + if (!stack) return params; + + const shapes = CONFIG_SHAPE.map((item) => item.type).filter((item) => !!item); + let hasStack = false; + shapes.forEach((shape) => { + if (options[shape]) { + hasStack = true; + /** 堆叠特殊处理,详见https://github.com/antvis/G2/issues/4515 */ + set(options, [shape, 'stack'], { + y1: 'y', + ...(typeof stack === 'object' ? stack : {}), + }); + } + }); + /** 调整通道,避免多份tooltip */ + if (hasStack && !isBoolean(tooltip) && !tooltip) { + set(options, 'tooltip', { + title: xField, + items: [ + { + channel: 'y', + }, + ], + }); + } + return params; +} diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 5e7ac7a0f..e4f1e4d2b 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -172,13 +172,12 @@ const EXTEND_KEYS = [ 'yField', 'seriesField', 'colorField', - 'sizeField', - 'shapeField', 'keyField', 'positionField', 'meta', 'tooltip', 'animate', + ...Object.keys(TRANSFORM_OPTION_KEY.transform), ]; export const CONFIG_SHAPE = [ { diff --git a/packages/plots/src/core/plots/area/adaptor.ts b/packages/plots/src/core/plots/area/adaptor.ts index 41167f7de..800a13322 100644 --- a/packages/plots/src/core/plots/area/adaptor.ts +++ b/packages/plots/src/core/plots/area/adaptor.ts @@ -10,5 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(transformOptions, mark)(params); + return flow(mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/bar/adaptor.ts b/packages/plots/src/core/plots/bar/adaptor.ts index 0dba18482..d15bd0f8f 100644 --- a/packages/plots/src/core/plots/bar/adaptor.ts +++ b/packages/plots/src/core/plots/bar/adaptor.ts @@ -42,5 +42,5 @@ export function adaptor(params: Params) { return params; }; - return flow(background, transformOptions, mark)(params); + return flow(background, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts b/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts index 18926d959..2a75b00a5 100644 --- a/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts +++ b/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts @@ -114,5 +114,5 @@ export function adaptor(params: Params) { return params; }; - return flow(field, data, tooltip, layout, transformOptions, mark)(params); + return flow(field, data, tooltip, layout, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/box/adaptor.ts b/packages/plots/src/core/plots/box/adaptor.ts index 62dcf2860..215926239 100644 --- a/packages/plots/src/core/plots/box/adaptor.ts +++ b/packages/plots/src/core/plots/box/adaptor.ts @@ -19,5 +19,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, transformOptions, mark)(params); + return flow(init, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/column/adaptor.ts b/packages/plots/src/core/plots/column/adaptor.ts index a37c0f128..d9968b0ff 100644 --- a/packages/plots/src/core/plots/column/adaptor.ts +++ b/packages/plots/src/core/plots/column/adaptor.ts @@ -10,5 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(transformOptions, mark)(params); + return flow(mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/dual-axes/adaptor.ts b/packages/plots/src/core/plots/dual-axes/adaptor.ts index 382bf86d9..e1e548224 100644 --- a/packages/plots/src/core/plots/dual-axes/adaptor.ts +++ b/packages/plots/src/core/plots/dual-axes/adaptor.ts @@ -40,5 +40,5 @@ export function adaptor(params: Params) { }); return params; }; - return flow(annotations, transformOptions, mark)(params); + return flow(annotations, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/funnel/adaptor.ts b/packages/plots/src/core/plots/funnel/adaptor.ts index 628bd9e64..63842655f 100644 --- a/packages/plots/src/core/plots/funnel/adaptor.ts +++ b/packages/plots/src/core/plots/funnel/adaptor.ts @@ -81,5 +81,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, transform, compare, tooltip, transformOptions, mark)(params); + return flow(init, transform, compare, tooltip, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/gauge/adaptor.ts b/packages/plots/src/core/plots/gauge/adaptor.ts index 68a8e1ee5..4f148f175 100644 --- a/packages/plots/src/core/plots/gauge/adaptor.ts +++ b/packages/plots/src/core/plots/gauge/adaptor.ts @@ -23,5 +23,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, transformOptions, mark)(params); + return flow(init, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/heatmap/adaptor.ts b/packages/plots/src/core/plots/heatmap/adaptor.ts index 5ce997ab4..7f585bc1b 100644 --- a/packages/plots/src/core/plots/heatmap/adaptor.ts +++ b/packages/plots/src/core/plots/heatmap/adaptor.ts @@ -34,5 +34,5 @@ export function adaptor(params: Params) { return params; }; - return flow(tooltip, transformMark, transformOptions, mark)(params); + return flow(tooltip, transformMark, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/histogram/adaptor.ts b/packages/plots/src/core/plots/histogram/adaptor.ts index 9519aa57b..0caf3ee30 100644 --- a/packages/plots/src/core/plots/histogram/adaptor.ts +++ b/packages/plots/src/core/plots/histogram/adaptor.ts @@ -26,5 +26,5 @@ export function adaptor(params: Params) { return params; }; - return flow(transformHistogramConfig, transformOptions, mark)(params); + return flow(transformHistogramConfig, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/line/adaptor.ts b/packages/plots/src/core/plots/line/adaptor.ts index 073027bec..01cc9dbfb 100644 --- a/packages/plots/src/core/plots/line/adaptor.ts +++ b/packages/plots/src/core/plots/line/adaptor.ts @@ -10,5 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(transformOptions, mark)(params); + return flow(mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/liquid/adaptor.ts b/packages/plots/src/core/plots/liquid/adaptor.ts index 8997b9935..876d04200 100644 --- a/packages/plots/src/core/plots/liquid/adaptor.ts +++ b/packages/plots/src/core/plots/liquid/adaptor.ts @@ -24,5 +24,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, transformOptions, mark)(params); + return flow(init, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/radial-bar/adaptor.ts b/packages/plots/src/core/plots/radial-bar/adaptor.ts index b9d139ce3..09ef88ea7 100644 --- a/packages/plots/src/core/plots/radial-bar/adaptor.ts +++ b/packages/plots/src/core/plots/radial-bar/adaptor.ts @@ -85,5 +85,5 @@ export function adaptor(params: Params) { return params; }; - return flow(coordinate, tooltip, background, transformOptions, mark)(params); + return flow(coordinate, tooltip, background, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/sankey/adaptor.ts b/packages/plots/src/core/plots/sankey/adaptor.ts index f02a9ca9f..4cdea3741 100644 --- a/packages/plots/src/core/plots/sankey/adaptor.ts +++ b/packages/plots/src/core/plots/sankey/adaptor.ts @@ -10,5 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(transformOptions, mark)(params); + return flow(mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/scatter/adaptor.ts b/packages/plots/src/core/plots/scatter/adaptor.ts index e89202496..ce41dcf62 100644 --- a/packages/plots/src/core/plots/scatter/adaptor.ts +++ b/packages/plots/src/core/plots/scatter/adaptor.ts @@ -11,5 +11,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(transformOptions, mark)(params); + return flow(mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/tiny-area/adaptor.ts b/packages/plots/src/core/plots/tiny-area/adaptor.ts index b0dfc9bf9..549a453c8 100644 --- a/packages/plots/src/core/plots/tiny-area/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-area/adaptor.ts @@ -10,5 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(transformOptions, mark)(params); + return flow(mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/tiny-column/adaptor.ts b/packages/plots/src/core/plots/tiny-column/adaptor.ts index f7f48ca07..f605dfc00 100644 --- a/packages/plots/src/core/plots/tiny-column/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-column/adaptor.ts @@ -10,5 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(transformOptions, mark)(params); + return flow(mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/tiny-line/adaptor.ts b/packages/plots/src/core/plots/tiny-line/adaptor.ts index 8fd03798e..d71d5a79e 100644 --- a/packages/plots/src/core/plots/tiny-line/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-line/adaptor.ts @@ -10,5 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(transformOptions, mark)(params); + return flow(mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/tiny-progress/adaptor.ts b/packages/plots/src/core/plots/tiny-progress/adaptor.ts index e53882707..b8ea29ca0 100644 --- a/packages/plots/src/core/plots/tiny-progress/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-progress/adaptor.ts @@ -29,5 +29,5 @@ export function adaptor(params: Params) { return params; }; - return flow(transformData, transformOptions, mark)(params); + return flow(transformData, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/tiny-ring/adaptor.ts b/packages/plots/src/core/plots/tiny-ring/adaptor.ts index 490db8c37..3603e86cb 100644 --- a/packages/plots/src/core/plots/tiny-ring/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-ring/adaptor.ts @@ -39,5 +39,5 @@ export function adaptor(params: Params) { return params; }; - return flow(radius, transformData, transformOptions, mark)(params); + return flow(radius, transformData, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/treemap/adaptor.ts b/packages/plots/src/core/plots/treemap/adaptor.ts index 788b640f3..24858cd4b 100644 --- a/packages/plots/src/core/plots/treemap/adaptor.ts +++ b/packages/plots/src/core/plots/treemap/adaptor.ts @@ -24,5 +24,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, transformOptions, mark)(params); + return flow(init, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/violin/adaptor.ts b/packages/plots/src/core/plots/violin/adaptor.ts index c84168d45..2aa6f82dc 100644 --- a/packages/plots/src/core/plots/violin/adaptor.ts +++ b/packages/plots/src/core/plots/violin/adaptor.ts @@ -50,5 +50,5 @@ export function adaptor(params: Params) { return params; }; - return flow(customTransform, transformOptions, mark)(params); + return flow(customTransform, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/waterfall/adaptor.ts b/packages/plots/src/core/plots/waterfall/adaptor.ts index 4de816df8..7d3e4c4d9 100644 --- a/packages/plots/src/core/plots/waterfall/adaptor.ts +++ b/packages/plots/src/core/plots/waterfall/adaptor.ts @@ -67,5 +67,5 @@ export function adaptor(params: Params) { return params; }; - return flow(transformData, link, transformOptions, mark)(params); + return flow(transformData, link, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/wordCloud/adaptor.ts b/packages/plots/src/core/plots/wordCloud/adaptor.ts index 5ea4d460a..bf5c1f1ce 100644 --- a/packages/plots/src/core/plots/wordCloud/adaptor.ts +++ b/packages/plots/src/core/plots/wordCloud/adaptor.ts @@ -11,5 +11,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(transformOptions, mark)(params); + return flow(mark, transformOptions)(params); } From c31dc911bc5c79d64f7d799980da2b6817999063 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Wed, 29 Nov 2023 14:45:13 +0800 Subject: [PATCH 130/268] fix(plot): bullet TransformData optimize (#2251) --- .../plots/src/core/plots/bullet/adaptor.ts | 42 +++++++++++++++---- packages/plots/src/core/utils/index.ts | 2 + 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/packages/plots/src/core/plots/bullet/adaptor.ts b/packages/plots/src/core/plots/bullet/adaptor.ts index 39c479d99..a60646db9 100644 --- a/packages/plots/src/core/plots/bullet/adaptor.ts +++ b/packages/plots/src/core/plots/bullet/adaptor.ts @@ -1,5 +1,5 @@ import { coordinateLayout } from '../../components'; -import { flow, transformOptions, map, set, get, isArray, includes, isNumber, deepAssign } from '../../utils'; +import { flow, transformOptions, map, set, get, isArray, includes, isNumber, deepAssign, isNil, isString } from '../../utils'; import type { Adaptor } from '../../types'; import type { BulletOptions } from './type'; @@ -11,7 +11,9 @@ type Params = Adaptor; /** * 转化为扁平化数据 - * [{ measures: [1,2], title: 'x' }, ...] -> [{ measures: 1, title: 'x' }, { measures: 2, title: 'x' },...] + * 1、[{ measures: [1,2], title: 'x' }, ...] -> [{ measures: 1, title: 'x', index: 0 }, { measures: 2, title: 'x', index: 1 },...] + * 2、[{ measures: 1, title: 'x' }, { measures: [2,3], title: 'x' }] -> + * [{ measures: 1, title: 'x', index: 0 }, { measures: 2, title: 'x', index: 0 }, { measures: 3, title: 'x', index: 1 },...] * @param data 数据 * @param field 通道 * @param xField x 分类通道 @@ -19,13 +21,28 @@ type Params = Adaptor; * @returns [扁平化的数据, 最大数据量] */ function getTransformData(data: any[], field: string, xField: string, isSort = true) { - let maxSize = 1; + let maxSize = 0; + + let isArrayData = false; + const transformData = map(data, (d) => { - const fieldData = get(d, [field], []); + const fieldData = get(d, [field]); + + // null undefined 以及 Number(string) 为 NaN 的 都去除数据 + if (isNil(fieldData)) return []; + if (isString(fieldData)) { + const numberData = Number(fieldData); + + if (isNaN(numberData)) return []; + + return { [xField]: d[xField], [field]: numberData }; + } + + // 主要组成为数组的形式 if (isArray(fieldData)) { - if (maxSize < fieldData.length) { - maxSize = fieldData.length; - } + isArrayData = true; + + maxSize = Math.max(maxSize, fieldData.length); return map(isSort ? fieldData.sort((a, b) => b - a) : fieldData, (value: number, index: number) => ({ [xField]: d[xField], @@ -34,9 +51,20 @@ function getTransformData(data: any[], field: string, xField: string, isSort = t })); } + // 存在则 min 值为 1 + maxSize = Math.max(1, maxSize); + return { [xField]: d[xField], [field]: fieldData }; }).flat(); + // 当存在更多分类时,单一的 measures 从 'measures' 的分类,变更为 'measures_0' 的分类 + if (isArrayData) { + return [transformData.map((item) => ({ + index: 0, + ...item, + })), maxSize]; + } + return [transformData, maxSize]; } /** diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 05f3908e7..d771fda17 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -22,6 +22,8 @@ export { isObject, uniqBy, isPlainObject, + reduce, + isNil, } from 'lodash-es'; export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; From 77a5f9633cc1a7fa0ca27ca7b778b54859d19135 Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Wed, 29 Nov 2023 16:19:13 +0800 Subject: [PATCH 131/268] docs: update demos (#2252) Co-authored-by: lkd01632719 --- .../statistics/dual-axes/demo/basic.js | 15 +--- .../statistics/dual-axes/demo/column-line.js | 1 - .../dual-axes/demo/column-multi-line.js | 1 - .../dual-axes/demo/custom-column-line.js | 3 +- .../dual-axes/demo/custom-dual-line.js | 12 ++-- .../demo/custom-grouped-column-line.js | 1 - .../demo/custom-stacked-column-line.js | 1 - .../demo/dual-aggregated-line-area.js | 4 +- .../statistics/dual-axes/demo/dual-line.js | 5 +- .../dual-axes/demo/dual-multi-line.js | 2 + .../dual-axes/demo/dual-step-line.js | 7 +- .../dual-axes/demo/grouped-column-line.js | 1 - .../demo/grouped-column-multi-line.js | 2 +- .../statistics/dual-axes/demo/meta.json | 8 --- .../statistics/dual-axes/demo/multi-line.js | 30 ++------ .../statistics/dual-axes/demo/pareto.js | 9 +-- .../dual-axes/demo/pattern-with-callback.js | 68 ------------------- .../dual-axes/demo/range-column-line.js | 1 - .../dual-axes/demo/slider-column-line.js | 2 +- .../dual-axes/demo/stacked-column-line.js | 1 - .../demo/stacked-column-multi-line.js | 1 - .../demo/stacked-percent-column-line.js | 1 - 22 files changed, 26 insertions(+), 150 deletions(-) delete mode 100644 site/examples/statistics/dual-axes/demo/pattern-with-callback.js diff --git a/site/examples/statistics/dual-axes/demo/basic.js b/site/examples/statistics/dual-axes/demo/basic.js index aa6cfa49b..68d9bc785 100644 --- a/site/examples/statistics/dual-axes/demo/basic.js +++ b/site/examples/statistics/dual-axes/demo/basic.js @@ -4,6 +4,7 @@ import ReactDOM from 'react-dom'; const DemoDualAxes = () => { const config = { + xField: 'time', data: [ { time: '10:10', call: 4, waiting: 2, people: 2 }, { time: '10:15', call: 2, waiting: 6, people: 3 }, @@ -16,29 +17,17 @@ const DemoDualAxes = () => { children: [ { type: 'interval', - xField: 'time', yField: 'waiting', }, { type: 'line', - xField: 'time', yField: 'people', shapeField: 'smooth', style: { stroke: '#fdae6b', lineWidth: 2, }, - scale: { - y: { - independent: true, - }, - }, - axis: { - y: { - position: 'right', - // grid: null, - }, - }, + axis: { y: { position: 'right' } }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/column-line.js b/site/examples/statistics/dual-axes/demo/column-line.js index 287e3fa0f..773a79dd6 100644 --- a/site/examples/statistics/dual-axes/demo/column-line.js +++ b/site/examples/statistics/dual-axes/demo/column-line.js @@ -27,7 +27,6 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, - scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, }, ], diff --git a/site/examples/statistics/dual-axes/demo/column-multi-line.js b/site/examples/statistics/dual-axes/demo/column-multi-line.js index 5931a638d..e6b61ecba 100644 --- a/site/examples/statistics/dual-axes/demo/column-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/column-multi-line.js @@ -54,7 +54,6 @@ const DemoDualAxes = () => { lineWidth: 2, stroke: (d) => lineColor[d[0].name], }, - scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, }, ], diff --git a/site/examples/statistics/dual-axes/demo/custom-column-line.js b/site/examples/statistics/dual-axes/demo/custom-column-line.js index 10e78d18f..30ff81e30 100644 --- a/site/examples/statistics/dual-axes/demo/custom-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-column-line.js @@ -33,8 +33,7 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, - scale: { y: { independent: true } }, - axis: { y: { position: 'right' } }, + axis: { y: false }, interaction: { tooltip: { crosshairs: false, diff --git a/site/examples/statistics/dual-axes/demo/custom-dual-line.js b/site/examples/statistics/dual-axes/demo/custom-dual-line.js index d340b1b9a..17b2003ce 100644 --- a/site/examples/statistics/dual-axes/demo/custom-dual-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-dual-line.js @@ -30,13 +30,10 @@ const DemoDualAxes = () => { label: { text: (datum) => `${datum.value}个`, style: { - dy: -12, + dy: -10, textAnchor: 'middle', }, }, - scale: { - y: { independent: true }, - }, axis: { y: { title: 'value', @@ -56,7 +53,7 @@ const DemoDualAxes = () => { label: { text: (datum) => `${datum.count}个`, style: { - dy: -12, + dy: -10, textAnchor: 'middle', }, }, @@ -64,9 +61,7 @@ const DemoDualAxes = () => { y: { position: 'right', title: 'count', - style: { - titleFill: '#5AD8A6', - }, + style: { titleFill: '#5AD8A6' } }, }, }, @@ -78,6 +73,7 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', fill: '#fff', }, + axis: { y: false } }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js index d36502128..aeb042fb8 100644 --- a/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js @@ -52,7 +52,6 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, - scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, interaction: { tooltip: { diff --git a/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js b/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js index 640964804..61ad968dd 100644 --- a/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js @@ -54,7 +54,6 @@ const DemoDualAxes = () => { yField: 'count', colorField: () => 'count', style: { lineWidth: 2 }, - scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, interaction: { tooltip: { diff --git a/site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js b/site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js index 2fc97615e..581534bd9 100644 --- a/site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js +++ b/site/examples/statistics/dual-axes/demo/dual-aggregated-line-area.js @@ -15,7 +15,6 @@ const DemoDualAxes = () => { xField: (d) => new Date(d.date).getUTCMonth(), yField: ['temp_max', 'temp_min'], transform: [{ type: 'groupX', y: 'mean', y1: 'mean' }], - scale: { y: { nice: true } }, style: { fill: '#85c5A6', fillOpacity: 0.3 }, axis: { y: { title: 'Avg. Temperature (°C)', titleFill: '#85C5A6' } }, tooltip: { @@ -31,12 +30,11 @@ const DemoDualAxes = () => { yField: 'precipitation', shapeField: 'smooth', transform: [{ type: 'groupX', y: 'mean' }], - scale: { y: { independent: true } }, style: { stroke: 'steelblue' }, + scale: { y: { nice: false } }, axis: { y: { position: 'right', - grid: null, title: 'Precipitation (inches)', titleFill: 'steelblue', }, diff --git a/site/examples/statistics/dual-axes/demo/dual-line.js b/site/examples/statistics/dual-axes/demo/dual-line.js index dac7c9c4c..ae0b9bbd3 100644 --- a/site/examples/statistics/dual-axes/demo/dual-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-line.js @@ -40,14 +40,11 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, - scale: { y: { independent: true } }, axis: { y: { position: 'right', title: 'count', - style: { - titleFill: '#5AD8A6', - }, + style: { titleFill: '#5AD8A6' } }, }, }, diff --git a/site/examples/statistics/dual-axes/demo/dual-multi-line.js b/site/examples/statistics/dual-axes/demo/dual-multi-line.js index d4e521ef2..bd2fcea94 100644 --- a/site/examples/statistics/dual-axes/demo/dual-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-multi-line.js @@ -58,6 +58,7 @@ const DemoDualAxes = () => { type: 'line', yField: 'count', colorField: 'name', + axis: { y: false }, style: { lineWidth: 3 }, }, { @@ -67,6 +68,7 @@ const DemoDualAxes = () => { sizeField: 3, shapeField: 'point', style: { fill: (d) => lineColor[d.name] }, + axis: { y: false }, tooltip: false, }, ], diff --git a/site/examples/statistics/dual-axes/demo/dual-step-line.js b/site/examples/statistics/dual-axes/demo/dual-step-line.js index 9a70b5cfd..f5aa08dfe 100644 --- a/site/examples/statistics/dual-axes/demo/dual-step-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-step-line.js @@ -27,9 +27,6 @@ const DemoDualAxes = () => { stroke: '#29cae4', lineWidth: 2, }, - scale: { - y: { independent: true }, - }, }, { type: 'line', @@ -43,9 +40,7 @@ const DemoDualAxes = () => { y: { position: 'right', title: 'count', - style: { - titleFill: '#5AD8A6', - }, + style: { titleFill: '#5AD8A6' }, }, }, }, diff --git a/site/examples/statistics/dual-axes/demo/grouped-column-line.js b/site/examples/statistics/dual-axes/demo/grouped-column-line.js index 71aee3344..043074c85 100644 --- a/site/examples/statistics/dual-axes/demo/grouped-column-line.js +++ b/site/examples/statistics/dual-axes/demo/grouped-column-line.js @@ -43,7 +43,6 @@ const DemoDualAxes = () => { stroke: '#5D7092', lineWidth: 2, }, - scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, interaction: { tooltip: { diff --git a/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js b/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js index 793d7fb23..9e1c44d6b 100644 --- a/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js @@ -52,8 +52,8 @@ const DemoDualAxes = () => { yField: 'count', colorField: 'name', style: { lineWidth: 2 }, - scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, + scale: { series: { independent: true } }, interaction: { tooltip: { crosshairs: false, diff --git a/site/examples/statistics/dual-axes/demo/meta.json b/site/examples/statistics/dual-axes/demo/meta.json index fa064fafb..4eb7c789e 100644 --- a/site/examples/statistics/dual-axes/demo/meta.json +++ b/site/examples/statistics/dual-axes/demo/meta.json @@ -156,14 +156,6 @@ }, "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*Ogg7R6trDvgAAAAAAAAAAAAAARQnAQ" }, - { - "filename": "pattern-with-callback.js", - "title": { - "zh": "带贴图的分组柱线图表", - "en": "Grouped column line with pattern" - }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/SL3QbumEbL/6131d19d-56b8-42bb-9609-8d0640a77d4a.png" - }, { "filename": "grouped-column-multi-line.js", "title": { diff --git a/site/examples/statistics/dual-axes/demo/multi-line.js b/site/examples/statistics/dual-axes/demo/multi-line.js index 5c1d4ff3c..d872d2f8b 100644 --- a/site/examples/statistics/dual-axes/demo/multi-line.js +++ b/site/examples/statistics/dual-axes/demo/multi-line.js @@ -81,22 +81,18 @@ const DemoDualAxes = () => { const config = { data, xField: 'Month', + scale: { y: { nice: false } }, children: [ { type: 'line', yField: 'Temperature', shapeField: 'smooth', colorField: '#EE6666', - scale: { - y: { independent: true, domainMax: 30 }, - }, + scale: { y: { domainMax: 30 } }, axis: { y: { title: 'Temperature (°C)', - grid: null, - style: { - titleFill: '#EE6666', - }, + style: { titleFill: '#EE6666' }, }, }, }, @@ -104,19 +100,13 @@ const DemoDualAxes = () => { type: 'interval', yField: 'Evaporation', colorField: '#5470C6', - scale: { - y: { independent: true, domainMax: 200 }, - }, - style: { - fillOpacity: 0.8, - }, + scale: { y: { domainMax: 200 } }, + style: { fillOpacity: 0.8 }, axis: { y: { position: 'right', title: 'Evaporation (ml)', - style: { - titleFill: '#5470C6', - }, + style: { titleFill: '#5470C6' }, }, }, }, @@ -125,9 +115,6 @@ const DemoDualAxes = () => { yField: 'Precipitation', shapeField: 'smooth', colorField: '#91CC75', - scale: { - y: { independent: true }, - }, style: { lineWidth: 2, lineDash: [2, 2], @@ -136,10 +123,7 @@ const DemoDualAxes = () => { y: { position: 'right', title: 'Precipitation (ml)', - grid: null, - style: { - titleFill: '#91CC75', - }, + style: { titleFill: '#91CC75' }, }, }, }, diff --git a/site/examples/statistics/dual-axes/demo/pareto.js b/site/examples/statistics/dual-axes/demo/pareto.js index fa86c4ddf..34f771eae 100644 --- a/site/examples/statistics/dual-axes/demo/pareto.js +++ b/site/examples/statistics/dual-axes/demo/pareto.js @@ -4,6 +4,7 @@ import ReactDOM from 'react-dom'; const DemoDualAxes = () => { const config = { + scale: { y: { nice: false } }, data: { type: 'inline', value: [ @@ -56,7 +57,7 @@ const DemoDualAxes = () => { { type: 'line', yField: 'accumulate', - scale: { y: { independent: true, domainMin: 0, tickCount: 5 } }, + scale: { y: { domainMin: 0, tickCount: 5 } }, axis: { y: { position: 'right', @@ -73,9 +74,9 @@ const DemoDualAxes = () => { type: 'point', yField: 'accumulate', shapeField: 'diamond', - scale: { y: { independent: true, domainMin: 0 } }, - axis: { y: null }, - tooltip: null, + scale: { y: { domainMin: 0 } }, + axis: { y: false }, + tooltip: false, }, ], title: 'Pareto Chart of Customer Complaints', diff --git a/site/examples/statistics/dual-axes/demo/pattern-with-callback.js b/site/examples/statistics/dual-axes/demo/pattern-with-callback.js deleted file mode 100644 index c6c77e346..000000000 --- a/site/examples/statistics/dual-axes/demo/pattern-with-callback.js +++ /dev/null @@ -1,68 +0,0 @@ -import { DualAxes } from '@ant-design/plots'; -import React from 'react'; -import ReactDOM from 'react-dom'; - -const DemoDualAxes = () => { - const uvBillData = [ - { time: '2019-03', value: 350, type: 'uv' }, - { time: '2019-04', value: 900, type: 'uv' }, - { time: '2019-05', value: 300, type: 'uv' }, - { time: '2019-06', value: 450, type: 'uv' }, - { time: '2019-07', value: 470, type: 'uv' }, - { time: '2019-03', value: 220, type: 'bill' }, - { time: '2019-04', value: 300, type: 'bill' }, - { time: '2019-05', value: 250, type: 'bill' }, - { time: '2019-06', value: 220, type: 'bill' }, - { time: '2019-07', value: 362, type: 'bill' }, - ]; - - const transformData = [ - { time: '2019-03', count: 800 }, - { time: '2019-04', count: 600 }, - { time: '2019-05', count: 400 }, - { time: '2019-06', count: 380 }, - { time: '2019-07', count: 220 }, - ]; - - const config = { - xField: 'time', - legend: { - color: { - position: 'bottom', - layout: { justifyContent: 'center' }, - }, - }, - children: [ - { - data: uvBillData, - type: 'interval', - yField: 'value', - colorField: 'type', - group: true, - label: { position: 'inside' }, - scale: { color: { range: ['#5B8FF9', '#5D7092'] } }, - interaction: { elementHighlightByColor: { background: true } }, - }, - { - data: transformData, - type: 'line', - yField: 'count', - style: { - stroke: '#5AD8A6', - lineWidth: 2, - }, - scale: { y: { independent: true } }, - axis: { y: { position: 'right' } }, - interaction: { - tooltip: { - crosshairs: false, - marker: false, - }, - }, - }, - ], - }; - return ; -}; - -ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/dual-axes/demo/range-column-line.js b/site/examples/statistics/dual-axes/demo/range-column-line.js index 0a6634437..d9eb88b46 100644 --- a/site/examples/statistics/dual-axes/demo/range-column-line.js +++ b/site/examples/statistics/dual-axes/demo/range-column-line.js @@ -30,7 +30,6 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', lineWidth: 2, }, - scale: { y: { independent: true } }, axis: { y: { position: 'right', diff --git a/site/examples/statistics/dual-axes/demo/slider-column-line.js b/site/examples/statistics/dual-axes/demo/slider-column-line.js index 93cb8da65..e0a0c4bdf 100644 --- a/site/examples/statistics/dual-axes/demo/slider-column-line.js +++ b/site/examples/statistics/dual-axes/demo/slider-column-line.js @@ -41,6 +41,7 @@ const DemoDualAxes = () => { xField: 'time', padding: 70, slider: { x: true }, + scale: { y: { nice: false } }, children: [ { type: 'interval', @@ -51,7 +52,6 @@ const DemoDualAxes = () => { type: 'line', yField: 'completeTime', style: { stroke: '#5AD8A6', lineWidth: 2 }, - scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, }, ], diff --git a/site/examples/statistics/dual-axes/demo/stacked-column-line.js b/site/examples/statistics/dual-axes/demo/stacked-column-line.js index 7c87965ca..816946a50 100644 --- a/site/examples/statistics/dual-axes/demo/stacked-column-line.js +++ b/site/examples/statistics/dual-axes/demo/stacked-column-line.js @@ -44,7 +44,6 @@ const DemoDualAxes = () => { colorField: () => 'count', style: { lineWidth: 2 }, axis: { y: { position: 'right' } }, - scale: { y: { independent: true } }, interaction: { tooltip: { crosshairs: false, diff --git a/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js b/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js index 0f0631062..a14f9d9be 100644 --- a/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js @@ -67,7 +67,6 @@ const DemoDualAxes = () => { } }, }, - scale: { y: { independent: true } }, axis: { y: { position: 'right' } }, interaction: { tooltip: { diff --git a/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js b/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js index 592e8f53e..7a4cf495f 100644 --- a/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js +++ b/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js @@ -45,7 +45,6 @@ const DemoDualAxes = () => { yField: 'count', colorField: () => 'count', style: { lineWidth: 2 }, - scale: { y: { independent: true } }, axis: { y: { position: 'right', From 3a94c29f6536ac53f6c82d1c44009ebdb523dbab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E6=B5=B7?= <43226029+dongxifan@users.noreply.github.com> Date: Wed, 29 Nov 2023 19:31:51 +0800 Subject: [PATCH 132/268] =?UTF-8?q?feat:=E6=9B=B4=E6=96=B0=E6=8D=86?= =?UTF-8?q?=E7=BB=91=E5=9B=BE=E8=87=AA=E5=AE=9A=E4=B9=89padding=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=BC=A9=E7=95=A5=E5=9B=BE=20(#2253)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circle-packing/demo/circlePackingPadding.js | 11 +---------- .../examples/statistics/circle-packing/demo/meta.json | 2 +- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/site/examples/statistics/circle-packing/demo/circlePackingPadding.js b/site/examples/statistics/circle-packing/demo/circlePackingPadding.js index ba69031ba..c6a551741 100644 --- a/site/examples/statistics/circle-packing/demo/circlePackingPadding.js +++ b/site/examples/statistics/circle-packing/demo/circlePackingPadding.js @@ -18,16 +18,7 @@ const DemoCirclePackingPadding = () => { }, }, layout: { - padding: 5, - }, - label: { - text: (d) => (d.height === 0 ? d.data.name : ''), - position: 'inside', - transform: [ - { - type: 'overflowHide', - }, - ], + padding: 10, }, }; return ; diff --git a/site/examples/statistics/circle-packing/demo/meta.json b/site/examples/statistics/circle-packing/demo/meta.json index 3fad2ae47..906390a03 100644 --- a/site/examples/statistics/circle-packing/demo/meta.json +++ b/site/examples/statistics/circle-packing/demo/meta.json @@ -26,7 +26,7 @@ "zh": "捆绑图 - 自定义padding距离", "en": "Custom Padding Distance For CirclePacking Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*epG0TaxEVTsAAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*_4mJRL2Izd8AAAAAAAAAAAAADmJ7AQ/original" } ] } From da86eea7cf33142b2d26b2560e07b5e4c61ac9e3 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 29 Nov 2023 21:19:41 +0800 Subject: [PATCH 133/268] ci: site actions (#2256) --- .github/workflows/v2-site.yml | 69 +++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 .github/workflows/v2-site.yml diff --git a/.github/workflows/v2-site.yml b/.github/workflows/v2-site.yml new file mode 100644 index 000000000..ed01cc523 --- /dev/null +++ b/.github/workflows/v2-site.yml @@ -0,0 +1,69 @@ +name: V2 Site + +on: + pull_request: + branches: + - v2 # default branch +env: + CI: true + PNPM_STORE: .pnpm-store + +jobs: + deploy: + runs-on: ubuntu-latest + timeout-minutes: 15 + strategy: + matrix: + node-version: [16.x] + steps: + - name: checkout code repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Switch to site branch + run: git checkout -b site + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - name: install pnpm + run: npm i pnpm@latest -g + - name: Setup npmrc + run: | + cat << EOF > "$HOME/.npmrc" + email=${NPM_EMAIL} + //registry.npmjs.org/:_authToken=$NPM_TOKEN + EOF + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_EMAIL: ${{ secrets.NPM_EMAIL }} + - name: setup pnpm config + run: pnpm config set store-dir $PNPM_STORE + - name: install dependencies + run: pnpm install + - name: build site + run: | + pnpm run build:lib + pnpm run build:site + - name: copy and delete files + run: | + find . -maxdepth 1 -type f -exec rm -f {} \; + cp -r site/dist ./ + rm -rf site + rm -rf node_modules + rm -rf packages + rm -rf scripts + rm -rf public + rm -rf config + rm -rf template + rm -rf .changeset + rm -rf .github + rm -rf $PNPM_STORE + - name: commit changes + run: | + git config --local user.email "954055752@qq.com" + git config --local user.name "lxfu1" + git add . + git commit -m "chore: update site" + - name: push to site branch + run: git push origin site -f From 39fd91e7005e2535ca297fb8b32af2edb43cf182 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:30:53 +0800 Subject: [PATCH 134/268] docs: update group and stack example (#2258) --- .../statistics/column/demo/group-and-stack.js | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/site/examples/statistics/column/demo/group-and-stack.js b/site/examples/statistics/column/demo/group-and-stack.js index 1f07709db..514662676 100644 --- a/site/examples/statistics/column/demo/group-and-stack.js +++ b/site/examples/statistics/column/demo/group-and-stack.js @@ -16,6 +16,45 @@ const DemoColumn = () => { series: false, }, colorField: 'product_sub_type', + tooltip: (item) => { + return { origin: item }; + }, + interaction: { + tooltip: { + render: (e, { title, items }) => { + return ( +

+

{title}

+ {items.map((item) => { + const { name, color, origin } = item; + return ( +
+
+
+ + + {origin['product_sub_type']}-{name} + +
+ {origin['order_amt']} +
+
+ ); + })} +
+ ); + }, + }, + }, }; return ; }; From 569fc30f693016d2972a1ef29c5ed4b2cda225e4 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:32:53 +0800 Subject: [PATCH 135/268] fix: mark update (#2259) --- packages/plots/package.json | 2 +- packages/plots/src/core/plots/bar/adaptor.ts | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/plots/package.json b/packages/plots/package.json index 33f8c5fde..6fc604d7a 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.5", + "version": "2.0.6", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/plots/bar/adaptor.ts b/packages/plots/src/core/plots/bar/adaptor.ts index d15bd0f8f..ef6751ab2 100644 --- a/packages/plots/src/core/plots/bar/adaptor.ts +++ b/packages/plots/src/core/plots/bar/adaptor.ts @@ -1,6 +1,6 @@ import { mark } from '../../components'; import type { Adaptor } from '../../types'; -import { flow, transformOptions, get, isArray } from '../../utils'; +import { flow, transformOptions, get, isArray, set } from '../../utils'; import type { BarOptions } from './type'; type Params = Adaptor; @@ -16,6 +16,12 @@ export function adaptor(params: Params) { */ const background = (params: Params) => { const { options } = params; + /** + * @description 解决更新问题 + */ + if (get(options, 'children.length') > 1) { + set(options, 'children', [{ type: 'interval' }]); + } const { scale, markBackground, data, children } = options; const domain = get(scale, 'y.domain', []); if (markBackground && domain.length && isArray(data)) { From 4c2c25dedeeeb7fab9d84c27a69cc2c8ce8a68f7 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:39:22 +0800 Subject: [PATCH 136/268] feat(plots): add sunburst (#2264) * feat-sunburst * feat(plot): add sunburst * feat(plot): add sunburst * feat(plot): add sunburst --- packages/plots/package.json | 3 +- packages/plots/src/components/index.ts | 3 ++ .../plots/src/components/sunburst/index.tsx | 11 +++++ .../plots/src/components/waterfall/index.tsx | 5 +- packages/plots/src/core/base/chart.ts | 6 +++ packages/plots/src/core/base/index.ts | 11 +++-- packages/plots/src/core/index.ts | 3 ++ .../plots/src/core/plots/sunburst/adaptor.ts | 22 +++++++++ .../plots/src/core/plots/sunburst/index.ts | 34 +++++++++++++ .../plots/src/core/plots/sunburst/type.ts | 3 ++ packages/plots/tsconfig.json | 10 +++- .../statistics/sunburst/demo/meta.json | 48 +++++++++++++++++++ .../sunburst/demo/sunburst-color.js | 17 +++++++ .../sunburst/demo/sunburst-default.js | 19 ++++++++ .../sunburst/demo/sunburst-interaction.js | 44 +++++++++++++++++ .../sunburst/demo/sunburst-label.js | 24 ++++++++++ .../sunburst/demo/sunburst-style.js | 22 +++++++++ site/examples/statistics/sunburst/index.en.md | 4 ++ site/examples/statistics/sunburst/index.zh.md | 4 ++ 19 files changed, 284 insertions(+), 9 deletions(-) create mode 100644 packages/plots/src/components/sunburst/index.tsx create mode 100644 packages/plots/src/core/base/chart.ts create mode 100644 packages/plots/src/core/plots/sunburst/adaptor.ts create mode 100644 packages/plots/src/core/plots/sunburst/index.ts create mode 100644 packages/plots/src/core/plots/sunburst/type.ts create mode 100644 site/examples/statistics/sunburst/demo/meta.json create mode 100644 site/examples/statistics/sunburst/demo/sunburst-color.js create mode 100644 site/examples/statistics/sunburst/demo/sunburst-default.js create mode 100644 site/examples/statistics/sunburst/demo/sunburst-interaction.js create mode 100644 site/examples/statistics/sunburst/demo/sunburst-label.js create mode 100644 site/examples/statistics/sunburst/demo/sunburst-style.js create mode 100644 site/examples/statistics/sunburst/index.en.md create mode 100644 site/examples/statistics/sunburst/index.zh.md diff --git a/packages/plots/package.json b/packages/plots/package.json index 6fc604d7a..7e663a0b4 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -38,6 +38,7 @@ "dependencies": { "@antv/event-emitter": "^0.1.3", "@antv/g2": "^5.1.9", + "@antv/g2-extension-plot": "^0.1.1", "@ant-design/charts-util": "workspace:*" }, "peerDependencies": { @@ -55,4 +56,4 @@ "react-test-renderer": "^18.0.0", "rimraf": "^3.0.2" } -} +} \ No newline at end of file diff --git a/packages/plots/src/components/index.ts b/packages/plots/src/components/index.ts index 2c124e1ca..c2a6a1b8a 100644 --- a/packages/plots/src/components/index.ts +++ b/packages/plots/src/components/index.ts @@ -27,6 +27,7 @@ import Violin from './violin'; import BidirectionalBar from './bidirectional-bar'; import Venn from './venn'; import Mix from './mix'; +import Sunburst from './sunburst'; export type { AreaConfig } from './area'; export type { BarConfig } from './bar'; @@ -55,6 +56,7 @@ export type { ViolinConfig } from './violin'; export type { BidirectionalBarConfig } from './bidirectional-bar'; export type { VennConfig } from './venn'; export type { MixConfig } from './mix'; +export type { SunburstConfig } from './sunburst'; export { Base, @@ -86,4 +88,5 @@ export { BidirectionalBar, Venn, Mix, + Sunburst, }; diff --git a/packages/plots/src/components/sunburst/index.tsx b/packages/plots/src/components/sunburst/index.tsx new file mode 100644 index 000000000..4972bb5db --- /dev/null +++ b/packages/plots/src/components/sunburst/index.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { BaseChart } from '../base'; + +import type { SunburstOptions } from '../../core'; +import type { CommonConfig } from '../../interface'; + +export type SunburstConfig = CommonConfig; + +const SunburstChart = (props: SunburstConfig) => ; + +export default SunburstChart; diff --git a/packages/plots/src/components/waterfall/index.tsx b/packages/plots/src/components/waterfall/index.tsx index d11b7c1bd..8acb005cf 100644 --- a/packages/plots/src/components/waterfall/index.tsx +++ b/packages/plots/src/components/waterfall/index.tsx @@ -1,8 +1,9 @@ import React from 'react'; -import { WaterfallOptions } from '../../core'; -import { CommonConfig } from '../../interface'; import { BaseChart } from '../base'; +import type { WaterfallOptions } from '../../core'; +import type { CommonConfig } from '../../interface'; + export type WaterfallConfig = CommonConfig; const WaterfallChart = (props: WaterfallConfig) => ; diff --git a/packages/plots/src/core/base/chart.ts b/packages/plots/src/core/base/chart.ts new file mode 100644 index 000000000..1a42beecc --- /dev/null +++ b/packages/plots/src/core/base/chart.ts @@ -0,0 +1,6 @@ +import { plotlib } from '@antv/g2-extension-plot'; +import { Runtime, extend, stdlib } from '@antv/g2'; + +export type { Chart as G2Chart } from '@antv/g2'; + +export const Chart = extend(Runtime, { ...stdlib(), ...plotlib() }); diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 6775ac953..8f901936e 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -1,9 +1,11 @@ import EE from '@antv/event-emitter'; -import { Chart, ChartEvent } from '@antv/g2'; +import { ChartEvent } from '@antv/g2'; +import { Chart } from './chart'; +import { Annotaion } from '../annotation'; import { CHART_OPTIONS, ANNOTATION_LIST, SKIP_DEL_CUSTOM_SIGN } from '../constants'; import { deepAssign, omit, pick, deleteCustomKeys, deleteChartOptionKeys } from '../utils'; -import { Annotaion } from '../annotation'; +import type { G2Chart } from './chart'; import type { Adaptor, Options } from '../types'; const SOURCE_ATTRIBUTE_NAME = 'data-chart-source-type'; @@ -19,7 +21,7 @@ export abstract class Plot extends EE { /** G2 Spec */ public options: O; /** G2 chart 实例 */ - public chart: Chart; + public chart: G2Chart; constructor(container: string | HTMLElement, options: O) { super(); @@ -58,6 +60,7 @@ export abstract class Plot extends EE { if (!this.container) { throw Error('The container is not initialized!'); } + this.chart = new Chart(this.getChartOptions()); // 给容器增加标识,知道图表的来源区别于 G2 this.container.setAttribute(SOURCE_ATTRIBUTE_NAME, 'Ant Design Charts'); @@ -83,7 +86,7 @@ export abstract class Plot extends EE { /** * 获取默认的 options 配置项,每个组件都可以复写 */ - protected getDefaultOptions(): any {} + protected getDefaultOptions(): any { } /** * 绘制 diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 72cede4b2..4de534693 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -31,6 +31,7 @@ export type { CirclePackingOptions } from './plots/circlePacking'; export type { ViolinOptions } from './plots/violin'; export type { BidirectionalBarOptions } from './plots/bidirectional-bar'; export type { VennOptions } from './plots/venn'; +export type { SunburstOptions } from './plots/sunburst'; export * from './types'; @@ -67,6 +68,7 @@ import { Violin } from './plots/violin'; import { BidirectionalBar } from './plots/bidirectional-bar'; import { Venn } from './plots/venn'; import { Mix } from './plots/mix'; +import { Sunburst } from './plots/sunburst'; export const Plots = { Base, @@ -102,4 +104,5 @@ export const Plots = { BidirectionalBar, Venn, Mix, + Sunburst, }; diff --git a/packages/plots/src/core/plots/sunburst/adaptor.ts b/packages/plots/src/core/plots/sunburst/adaptor.ts new file mode 100644 index 000000000..0aa96be1e --- /dev/null +++ b/packages/plots/src/core/plots/sunburst/adaptor.ts @@ -0,0 +1,22 @@ +import { coordinate } from '../../components'; +import { flow, transformOptions } from '../../utils'; + +import type { Adaptor } from '../../types'; +import type { SunburstOptions } from './type'; + +type Params = Adaptor; + +/** + * @param chart + * @param options + */ +export function adaptor(params: Params) { + /** + * 图表差异化处理 + */ + const init = (params: Params) => { + return params; + }; + + return flow(init, coordinate, transformOptions)(params); +} diff --git a/packages/plots/src/core/plots/sunburst/index.ts b/packages/plots/src/core/plots/sunburst/index.ts new file mode 100644 index 000000000..4246b1d05 --- /dev/null +++ b/packages/plots/src/core/plots/sunburst/index.ts @@ -0,0 +1,34 @@ +import { adaptor } from './adaptor'; +import { Plot } from '../../base'; + +import type { Adaptor } from '../../types'; +import type { SunburstOptions } from './type'; + +export type { SunburstOptions }; + +export class Sunburst extends Plot { + /** 图表类型 */ + public type = 'Sunburst'; + + /** + * 获取 旭日图 默认配置项 + * 供外部使用 + */ + static getDefaultOptions(): Partial { + return { type: 'view', children: [{ type: 'sunburst' }] }; + } + + /** + * 获取 旭日图 默认配置 + */ + protected getDefaultOptions() { + return Sunburst.getDefaultOptions(); + } + + /** + * 旭日图适配器 + */ + protected getSchemaAdaptor(): (params: Adaptor) => void { + return adaptor; + } +} diff --git a/packages/plots/src/core/plots/sunburst/type.ts b/packages/plots/src/core/plots/sunburst/type.ts new file mode 100644 index 000000000..c210f5dc3 --- /dev/null +++ b/packages/plots/src/core/plots/sunburst/type.ts @@ -0,0 +1,3 @@ +import type { Options } from '../../types/common'; + +export type SunburstOptions = Options; diff --git a/packages/plots/tsconfig.json b/packages/plots/tsconfig.json index 74ecfab18..d0f609128 100644 --- a/packages/plots/tsconfig.json +++ b/packages/plots/tsconfig.json @@ -1,4 +1,10 @@ { + "compilerOptions": { + "downlevelIteration": true + }, "extends": "../../tsconfig.json", - "include": ["src", "tests"] -} + "include": [ + "src", + "tests" + ] +} \ No newline at end of file diff --git a/site/examples/statistics/sunburst/demo/meta.json b/site/examples/statistics/sunburst/demo/meta.json new file mode 100644 index 000000000..3cb74a587 --- /dev/null +++ b/site/examples/statistics/sunburst/demo/meta.json @@ -0,0 +1,48 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "sunburst-default.js", + "title": { + "zh": "旭日图", + "en": "Sunburst Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*-aInRJfa4-8AAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "sunburst-label.js", + "title": { + "zh": "旭日图带标签", + "en": "Sunburst Label Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*GBxdT697NYQAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "sunburst-color.js", + "title": { + "zh": "旭日图自定义颜色通道", + "en": "Sunburst ColorField Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*7L4tQ4F61ZkAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "sunburst-style.js", + "title": { + "zh": "旭日图自定义样式", + "en": "Sunburst Style Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*BP7zQ6SMiKcAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "sunburst-interaction.js", + "title": { + "zh": "旭日图交互配置", + "en": "Sunburst Interaction Config Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*7C0NQK9_TfwAAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/site/examples/statistics/sunburst/demo/sunburst-color.js b/site/examples/statistics/sunburst/demo/sunburst-color.js new file mode 100644 index 000000000..518fda6ba --- /dev/null +++ b/site/examples/statistics/sunburst/demo/sunburst-color.js @@ -0,0 +1,17 @@ +import { Sunburst } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoSunburst = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antvdemo/assets/data/sunburst.json', + }, + valueField: 'sum', + colorField: 'label', + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/sunburst/demo/sunburst-default.js b/site/examples/statistics/sunburst/demo/sunburst-default.js new file mode 100644 index 000000000..f90bac25f --- /dev/null +++ b/site/examples/statistics/sunburst/demo/sunburst-default.js @@ -0,0 +1,19 @@ +import { Sunburst } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoSunburst = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antfincdn/ryp44nvUYZ/coffee.json', + }, + animate: { + enter: { type: 'waveIn' } + }, + innerRadius: 0, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/sunburst/demo/sunburst-interaction.js b/site/examples/statistics/sunburst/demo/sunburst-interaction.js new file mode 100644 index 000000000..38839664c --- /dev/null +++ b/site/examples/statistics/sunburst/demo/sunburst-interaction.js @@ -0,0 +1,44 @@ +import { Sunburst } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoSunburst = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antvdemo/assets/data/sunburst.json', + }, + valueField: 'sum', + label: { + text: 'name', + transform: [ + { + type: 'overflowHide', + }, + ], + }, + interaction: { + drillDown: { + breadCrumb: { + rootText: '起始', + style: { + fontSize: '18px', + fill: '#333', + }, + active: { + fill: 'red', + }, + }, + // FixedColor default: true, true -> drillDown update scale, false -> scale keep. + fixedColor: false, + }, + }, + state: { + active: { zIndex: 2, stroke: 'red' }, + inactive: { zIndex: 1, stroke: '#fff' }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/sunburst/demo/sunburst-label.js b/site/examples/statistics/sunburst/demo/sunburst-label.js new file mode 100644 index 000000000..71c80db75 --- /dev/null +++ b/site/examples/statistics/sunburst/demo/sunburst-label.js @@ -0,0 +1,24 @@ +import { Sunburst } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoSunburst = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antvdemo/assets/data/sunburst.json', + }, + valueField: 'sum', + label: { + text: 'name', + transform: [ + { + type: 'overflowHide', + }, + ], + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/sunburst/demo/sunburst-style.js b/site/examples/statistics/sunburst/demo/sunburst-style.js new file mode 100644 index 000000000..806e5e73e --- /dev/null +++ b/site/examples/statistics/sunburst/demo/sunburst-style.js @@ -0,0 +1,22 @@ +import { Sunburst } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoSunburst = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antvdemo/assets/data/sunburst.json', + }, + valueField: 'sum', + style: { + fill: (v) => { + if (v['path'] === '类别 3') return 'red'; + if (v['name'] === '类别 2.1.1') return 'red'; + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/sunburst/index.en.md b/site/examples/statistics/sunburst/index.en.md new file mode 100644 index 000000000..518886789 --- /dev/null +++ b/site/examples/statistics/sunburst/index.en.md @@ -0,0 +1,4 @@ +--- +title: Sunburst +order: 13 +--- diff --git a/site/examples/statistics/sunburst/index.zh.md b/site/examples/statistics/sunburst/index.zh.md new file mode 100644 index 000000000..572a97c99 --- /dev/null +++ b/site/examples/statistics/sunburst/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 旭日图 +order: 13 +--- From 2a3f7c31dd85d7ef6766131a6fef176ecf8b954e Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 5 Dec 2023 18:45:08 +0800 Subject: [PATCH 137/268] fix: tooltip waver (#2272) * fix: tooltip waver * fix: tests --- packages/plots/package.json | 2 +- packages/plots/src/core/plots/column/index.ts | 8 +++----- packages/util/package.json | 2 +- packages/util/src/rc/create-node.ts | 14 ++++++-------- packages/util/tests/rc/create-node-spec.tsx | 8 ++------ 5 files changed, 13 insertions(+), 21 deletions(-) diff --git a/packages/plots/package.json b/packages/plots/package.json index 7e663a0b4..0dc07ca9a 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.6", + "version": "2.0.7", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/plots/column/index.ts b/packages/plots/src/core/plots/column/index.ts index c0e4c274b..421fa7667 100644 --- a/packages/plots/src/core/plots/column/index.ts +++ b/packages/plots/src/core/plots/column/index.ts @@ -19,6 +19,9 @@ export class Column extends Plot { tooltip: { shared: true, }, + elementHighlightByColor: { + background: true, + }, }, axis: { y: { title: false }, @@ -27,11 +30,6 @@ export class Column extends Plot { children: [ { type: 'interval', - interaction: { - elementHighlightByColor: { - background: true, - }, - }, }, ], }; diff --git a/packages/util/package.json b/packages/util/package.json index 6200e2d75..65786e1fc 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/charts-util", - "version": "0.0.1-alpha.0", + "version": "0.0.1-alpha.1", "description": "charts utils", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/util/src/rc/create-node.ts b/packages/util/src/rc/create-node.ts index 339e3de53..9422c2b81 100644 --- a/packages/util/src/rc/create-node.ts +++ b/packages/util/src/rc/create-node.ts @@ -1,13 +1,11 @@ import React from 'react'; import { render } from '../react/render'; -export const createNode = (children: React.ReactElement, extra?: object) => { - let mountPoint = document.createElement('div'); - if (extra) { - Object.keys(extra).forEach((key) => { - mountPoint.setAttribute(key, extra[key]); - }); +const mountMapping = new Map(); +export const createNode = (children: React.ReactElement) => { + if (!mountMapping.has(children)) { + mountMapping.set(children, document.createElement('div')); } - render(children, mountPoint); - return mountPoint; + render(children, mountMapping.get(children)); + return mountMapping.get(children); }; diff --git a/packages/util/tests/rc/create-node-spec.tsx b/packages/util/tests/rc/create-node-spec.tsx index 0651b341d..36b7cf9e9 100644 --- a/packages/util/tests/rc/create-node-spec.tsx +++ b/packages/util/tests/rc/create-node-spec.tsx @@ -5,12 +5,8 @@ import { createNode } from '../../src'; describe('Create Node', () => { it('run', () => { act(() => { - document.body.appendChild( - createNode(hello, { - id: 'test', - }), - ); + document.body.appendChild(createNode(hello)); }); - expect(document.querySelector('#test').innerHTML).toBe('hello'); + expect(document.querySelector('#test').innerHTML).toContain('hello'); }); }); From 4dff51b3baf7e6c27bd820884c5b135bf903964e Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 5 Dec 2023 18:46:13 +0800 Subject: [PATCH 138/268] fix: tooltip react render (#2274) --- packages/util/package.json | 2 +- packages/util/src/rc/create-node.ts | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/util/package.json b/packages/util/package.json index 65786e1fc..e3cd4bca4 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/charts-util", - "version": "0.0.1-alpha.1", + "version": "0.0.1-alpha.2", "description": "charts utils", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/util/src/rc/create-node.ts b/packages/util/src/rc/create-node.ts index 9422c2b81..35cca241e 100644 --- a/packages/util/src/rc/create-node.ts +++ b/packages/util/src/rc/create-node.ts @@ -3,9 +3,13 @@ import { render } from '../react/render'; const mountMapping = new Map(); export const createNode = (children: React.ReactElement) => { - if (!mountMapping.has(children)) { - mountMapping.set(children, document.createElement('div')); + let mount = document.createElement('div'); + if (children.key) { + if (!mountMapping.get(children.key)) { + mountMapping.set(children.key, mount); + } + mount = mountMapping.get(children.key); } - render(children, mountMapping.get(children)); - return mountMapping.get(children); + render(children, mount); + return mount; }; From 6b31ae099bd070730d7eaeb7ab41cbb2179123be Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 5 Dec 2023 19:57:07 +0800 Subject: [PATCH 139/268] fix: react render (#2275) --- packages/plots/CHANGELOG.md | 39 ++++----------------- packages/plots/package.json | 4 +-- packages/plots/src/util/is-valid-element.ts | 2 +- 3 files changed, 9 insertions(+), 36 deletions(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 851043980..71086fe31 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,38 +1,11 @@ -## 1.2.5 +## 2.0.9 -`2023-02-03` +`2023-12-05` -- 🐞 Revert PR [fix: 在 grid 布局中图表 autofit 缩小宽度时不生效](https://github.com/ant-design/ant-design-charts/pull/1766) grid 自适应问题参考[在 grid 布局中图表 autofit 缩小宽度时不生效](https://github.com/ant-design/ant-design-charts/issues/1761) +- 🐞 修复 jsx 类型推断错误 -## 1.2.4 +## 2.0.0 -`2023-01-17` +`2023-11-22` -- 🐞 [在 grid 布局中图表 autofit 缩小宽度时不生效](https://github.com/ant-design/ant-design-charts/issues/1761) - -## 1.2.3 - -`2022-12-27` - -- 🐞 [修复 React18 Tooltip 闪动](https://github.com/ant-design/ant-design-charts/issues/1508) -- 🐞 [修复数据更新时 legend 留存](https://github.com/ant-design/ant-design-charts/issues/620) -- 🐞 修复自定义 errorTemplate 非 callback 时无效 - -## 1.2.2 - -`2022-09-07` - -- 🐞 [修复 Tooltip 部分配置类型错误](https://github.com/ant-design/ant-design-charts/issues/1555) - -## 1.2.1 - -`2022-07-27` - -- 🐞 [修复 Tooltip 类型错误](https://github.com/ant-design/ant-design-charts/issues/1463) - -## 1.2.0 - -`2022-07-26` - -- 🔥 [React18 兼容](https://github.com/ant-design/ant-design-charts/issues/1452) -- `ContainerConfig` renamed `BaseConfig` +- 🔥 底层库升级到 [G2 5.0](https://github.com/antvis/g2) diff --git a/packages/plots/package.json b/packages/plots/package.json index 0dc07ca9a..8ca158826 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.7", + "version": "2.0.8", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" @@ -56,4 +56,4 @@ "react-test-renderer": "^18.0.0", "rimraf": "^3.0.2" } -} \ No newline at end of file +} diff --git a/packages/plots/src/util/is-valid-element.ts b/packages/plots/src/util/is-valid-element.ts index 2f493857d..95156f45a 100644 --- a/packages/plots/src/util/is-valid-element.ts +++ b/packages/plots/src/util/is-valid-element.ts @@ -1,5 +1,5 @@ export const isValidElement = (jsxCode: string): boolean => { - const jsxRegex = /react/i; + const jsxRegex = /react|\.jsx|children:\[\(/i; return jsxRegex.test(jsxCode); }; From 5b263b77ea8aa9dae0d04e6d7be9231fa3038e0d Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 5 Dec 2023 20:03:46 +0800 Subject: [PATCH 140/268] chore: release (#2276) --- packages/plots/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plots/package.json b/packages/plots/package.json index 8ca158826..22d8b0aef 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.8", + "version": "2.0.9", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From 5b4dfafafda7921dfcc1312eb3673f4787323ed2 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 5 Dec 2023 21:07:04 +0800 Subject: [PATCH 141/268] docs: add custom legend example (#2278) --- .../examples/statistics/column/demo/legend.js | 80 +++++++++++++++++++ .../examples/statistics/column/demo/meta.json | 8 ++ 2 files changed, 88 insertions(+) create mode 100644 site/examples/statistics/column/demo/legend.js diff --git a/site/examples/statistics/column/demo/legend.js b/site/examples/statistics/column/demo/legend.js new file mode 100644 index 000000000..24fbdda88 --- /dev/null +++ b/site/examples/statistics/column/demo/legend.js @@ -0,0 +1,80 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { type: '抖音', sold: 275 }, + { type: '快手', sold: 115 }, + { type: '小米', sold: 120 }, + { type: '微信', sold: 350 }, + { type: 'Keep', sold: 150 }, +]; + +const DemoColumn = () => { + const logo = [ + ['抖音', 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*8IXHQLvx9QkAAAAAAAAAAAAADmJ7AQ/original'], + ['快手', 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*swueRrrKvbcAAAAAAAAAAAAADmJ7AQ/original'], + ['小米', 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*79G3TIt3mBoAAAAAAAAAAAAADmJ7AQ/original'], + ['微信', 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*_ELBTJLp0dQAAAAAAAAAAAAADmJ7AQ/original'], + ['Keep', 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*JzbKRpFhR14AAAAAAAAAAAAADmJ7AQ/original'], + ]; + const chartRef = React.useRef(); + const config = { + data, + xField: 'type', + yField: 'sold', + colorField: 'type', + onReady: ({ chart }) => { + chartRef.current = chart; + }, + legend: { + color: { + itemMarker: (name, index) => () => { + const chart = chartRef.current; + const { canvas } = chart.getContext(); + const { document } = canvas; + window.c = chartRef.current; + const image = document.createElement('image', { + style: { + width: 20, + height: 20, + anchor: '0.5 0.5', + src: logo[index][1], + }, + }); + const tooltip = document.createElement('html', { + style: { + innerHTML: `

${name}

`, + fill: 'white', + stroke: '#ccc', + width: 80, + height: 30, + pointerEvents: 'none', + visibility: 'hidden', + }, + }); + canvas.appendChild(tooltip); + image.addEventListener('mousemove', (e) => { + tooltip.setPosition(e.x, e.y); + tooltip.style.visibility = 'visible'; + + console.log('move', e.target); + }); + image.addEventListener('mouseleave', (e) => { + tooltip.setPosition(0, 0); + tooltip.style.visibility = 'hidden'; + + console.log('leave', e.target); + }); + return image; + }, + itemMarkerSize: 40, + itemLabelText: (_, index) => logo[index][0], + maxRows: 1, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index 309783109..88cb4bb22 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -147,6 +147,14 @@ "en": "Customize tooltip" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*lZu1Q5vMEewAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "legend.js", + "title": { + "zh": "自定义Legend", + "en": "Customize legend" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*FFVDR4pgMPgAAAAAAAAAAAAADmJ7AQ/original" } ] } From 14ce87bc279b90a957defb35b8084fd556bb7c74 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 6 Dec 2023 16:16:22 +0800 Subject: [PATCH 142/268] fix: create node (#2280) --- packages/util/package.json | 2 +- packages/util/src/rc/create-node.ts | 2 +- .../statistics/funnel/demo/mirror-funnel.js | 43 +++++++++++++++++-- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/packages/util/package.json b/packages/util/package.json index e3cd4bca4..21d5bc745 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/charts-util", - "version": "0.0.1-alpha.2", + "version": "0.0.1-alpha.3", "description": "charts utils", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/util/src/rc/create-node.ts b/packages/util/src/rc/create-node.ts index 35cca241e..7caf20063 100644 --- a/packages/util/src/rc/create-node.ts +++ b/packages/util/src/rc/create-node.ts @@ -4,7 +4,7 @@ import { render } from '../react/render'; const mountMapping = new Map(); export const createNode = (children: React.ReactElement) => { let mount = document.createElement('div'); - if (children.key) { + if (children?.key) { if (!mountMapping.get(children.key)) { mountMapping.set(children.key, mount); } diff --git a/site/examples/statistics/funnel/demo/mirror-funnel.js b/site/examples/statistics/funnel/demo/mirror-funnel.js index 7049b4dd1..b0cfcfa82 100644 --- a/site/examples/statistics/funnel/demo/mirror-funnel.js +++ b/site/examples/statistics/funnel/demo/mirror-funnel.js @@ -16,6 +16,13 @@ const DemoFunnel = () => { { action: '完成', visitor: 80, site: '站点2' }, ]; + const uPosition = (item, values) => { + if (item.site === '站点2') { + return values[0]; + } + return values[1]; + }; + const config = { data, xField: 'action', @@ -24,9 +31,39 @@ const DemoFunnel = () => { style: { stroke: '#fff', }, - label: { - text: 'visitor', - }, + label: [ + { + text: (d) => d.visitor, + position: 'inside', + fontSize: 16, + }, + { + render: ($, _, i) => { + if (i) + return ( +
+ ); + }, + position: (item) => uPosition(item, ['top-left', 'top-right']), + }, + { + text: (d, i, data) => { + if (i) return ((d.visitor / data[i - 1].visitor) * 100).toFixed(2) + '%'; + }, + position: (item) => uPosition(item, ['top-left', 'top-right']), + textAlign: (item) => uPosition(item, ['right', 'left']), + textBaseline: 'middle', + dx: (item) => uPosition(item, [-40, 40]), + }, + ], legend: false, }; return ; From 2aefa13b7d9c3081f0515050df3d3eeac57b0b32 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 6 Dec 2023 16:27:07 +0800 Subject: [PATCH 143/268] Update tooltip example (#2281) --- site/examples/statistics/column/demo/tooltip.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/examples/statistics/column/demo/tooltip.js b/site/examples/statistics/column/demo/tooltip.js index 5d405200b..d8742ec23 100644 --- a/site/examples/statistics/column/demo/tooltip.js +++ b/site/examples/statistics/column/demo/tooltip.js @@ -16,7 +16,7 @@ const DemoColumn = () => { tooltip: { render: (e, { title, items }) => { return ( -
+

{title}

{items.map((item) => { const { name, value, color } = item; From 22dc7b32bbc8fb650a01576a488b285046fa853a Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Wed, 6 Dec 2023 17:06:21 +0800 Subject: [PATCH 144/268] fix: tooltip waver --- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- packages/plots/src/hooks/useChart.ts | 10 ++++++---- packages/util/package.json | 2 +- packages/util/src/rc/create-node.ts | 20 +++++++++++++++----- 5 files changed, 29 insertions(+), 11 deletions(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 71086fe31..66dddecd2 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.1.0 + +`2023-12-06` + +- 🐞 修复 tooltip 特殊情况下闪动 + ## 2.0.9 `2023-12-05` diff --git a/packages/plots/package.json b/packages/plots/package.json index 22d8b0aef..bee20494c 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.0.9", + "version": "2.1.0", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 2fb6c4e88..0c50ebbc2 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -40,19 +40,21 @@ export default function useChart(ChartC return imageName; }; - const processConfig = (cfg: object) => { + const processConfig = (cfg: object, flag = false) => { const keys = Object.keys(cfg); + let isTooltip = flag; keys.forEach((key) => { const current = cfg[key]; + if (key === 'tooltip') isTooltip = true; if (isFunction(current) && isValidElement(`${current}`)) { - cfg[key] = (...arg) => createNode(current(...arg)); + cfg[key] = (...arg) => createNode(current(...arg), isTooltip); } else { if (isArray(current)) { current.forEach((item) => { - processConfig(item); + processConfig(item, isTooltip); }); } else if (isObject(current)) { - processConfig(current); + processConfig(current, isTooltip); } } }); diff --git a/packages/util/package.json b/packages/util/package.json index 21d5bc745..9408a6e17 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/charts-util", - "version": "0.0.1-alpha.3", + "version": "0.0.1-alpha.4", "description": "charts utils", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/util/src/rc/create-node.ts b/packages/util/src/rc/create-node.ts index 7caf20063..c7fd2970a 100644 --- a/packages/util/src/rc/create-node.ts +++ b/packages/util/src/rc/create-node.ts @@ -2,14 +2,24 @@ import React from 'react'; import { render } from '../react/render'; const mountMapping = new Map(); -export const createNode = (children: React.ReactElement) => { +mountMapping.set('tooltip', document.createElement('div')); + +export const createNode = (children: React.ReactElement, isTooltip = false) => { let mount = document.createElement('div'); - if (children?.key) { - if (!mountMapping.get(children.key)) { - mountMapping.set(children.key, mount); + /** + * @description tooltip 为了防止抖动,只需一个root即可 + */ + if (isTooltip) { + mount = mountMapping.get('tooltip'); + } else { + if (children?.key) { + if (!mountMapping.get(children.key)) { + mountMapping.set(children.key, mount); + } + mount = mountMapping.get(children.key); } - mount = mountMapping.get(children.key); } + render(children, mount); return mount; }; From 36d3db15a7a466932b7bc0d909bbce02a6fdf9c6 Mon Sep 17 00:00:00 2001 From: OctKun <2310353398@qq.com> Date: Thu, 7 Dec 2023 18:06:57 +0800 Subject: [PATCH 145/268] docs: add scale doc (#2283) Co-authored-by: chenkun --- site/.dumirc.ts | 20 ++++-- site/docs/options/plots/scale/band.en.md | 6 ++ site/docs/options/plots/scale/band.zh.md | 64 +++++++++++++++++++ site/docs/options/plots/scale/linear.en.md | 6 ++ site/docs/options/plots/scale/linear.zh.md | 60 +++++++++++++++++ site/docs/options/plots/scale/log.en.md | 6 ++ site/docs/options/plots/scale/log.zh.md | 51 +++++++++++++++ site/docs/options/plots/scale/ordinal.en.md | 6 ++ site/docs/options/plots/scale/ordinal.zh.md | 47 ++++++++++++++ site/docs/options/plots/scale/point.en.md | 6 ++ site/docs/options/plots/scale/point.zh.md | 42 ++++++++++++ site/docs/options/plots/scale/pow.en.md | 6 ++ site/docs/options/plots/scale/pow.zh.md | 39 +++++++++++ site/docs/options/plots/scale/quantile.en.md | 6 ++ site/docs/options/plots/scale/quantile.zh.md | 31 +++++++++ site/docs/options/plots/scale/quantize.en.md | 6 ++ site/docs/options/plots/scale/quantize.zh.md | 30 +++++++++ site/docs/options/plots/scale/sqrt.en.md | 6 ++ site/docs/options/plots/scale/sqrt.zh.md | 39 +++++++++++ site/docs/options/plots/scale/threshold.en.md | 6 ++ site/docs/options/plots/scale/threshold.zh.md | 27 ++++++++ site/docs/options/plots/scale/time.en.md | 6 ++ site/docs/options/plots/scale/time.zh.md | 40 ++++++++++++ 23 files changed, 550 insertions(+), 6 deletions(-) create mode 100644 site/docs/options/plots/scale/band.en.md create mode 100644 site/docs/options/plots/scale/band.zh.md create mode 100644 site/docs/options/plots/scale/linear.en.md create mode 100644 site/docs/options/plots/scale/linear.zh.md create mode 100644 site/docs/options/plots/scale/log.en.md create mode 100644 site/docs/options/plots/scale/log.zh.md create mode 100644 site/docs/options/plots/scale/ordinal.en.md create mode 100644 site/docs/options/plots/scale/ordinal.zh.md create mode 100644 site/docs/options/plots/scale/point.en.md create mode 100644 site/docs/options/plots/scale/point.zh.md create mode 100644 site/docs/options/plots/scale/pow.en.md create mode 100644 site/docs/options/plots/scale/pow.zh.md create mode 100644 site/docs/options/plots/scale/quantile.en.md create mode 100644 site/docs/options/plots/scale/quantile.zh.md create mode 100644 site/docs/options/plots/scale/quantize.en.md create mode 100644 site/docs/options/plots/scale/quantize.zh.md create mode 100644 site/docs/options/plots/scale/sqrt.en.md create mode 100644 site/docs/options/plots/scale/sqrt.zh.md create mode 100644 site/docs/options/plots/scale/threshold.en.md create mode 100644 site/docs/options/plots/scale/threshold.zh.md create mode 100644 site/docs/options/plots/scale/time.en.md create mode 100644 site/docs/options/plots/scale/time.zh.md diff --git a/site/.dumirc.ts b/site/.dumirc.ts index d016c79cc..573978741 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -83,12 +83,20 @@ export default defineConfig({ order: 3, }, { - slug: 'options/plots/annotation', + slug: 'options/plots/scale', + title: { + zh: '比例尺 - Scale', + en: 'Scale', + }, + order: 4, + }, + { + slug: 'options/plots/', title: { zh: '标记 - Annotations', en: 'Annotations', }, - order: 3, + order: 5, }, { slug: 'options/plots/events', @@ -96,7 +104,7 @@ export default defineConfig({ zh: '事件 - Events', en: 'Events', }, - order: 4, + order: 6, }, { slug: 'options/plots/animation', @@ -104,7 +112,7 @@ export default defineConfig({ zh: '动画 - Animation', en: 'Animation', }, - order: 4, + order: 7, }, { slug: 'options/plots/interaction', @@ -112,7 +120,7 @@ export default defineConfig({ zh: '交互 - Interaction', en: 'Interaction', }, - order: 5, + order: 8, }, { slug: 'options/plots/theme', @@ -120,7 +128,7 @@ export default defineConfig({ zh: '主题 - Theme', en: 'Theme', }, - order: 6, + order: 9, }, { slug: 'options/plots/special', diff --git a/site/docs/options/plots/scale/band.en.md b/site/docs/options/plots/scale/band.en.md new file mode 100644 index 000000000..26a75f3d0 --- /dev/null +++ b/site/docs/options/plots/scale/band.en.md @@ -0,0 +1,6 @@ +--- +title: band +order: 1 +--- + + diff --git a/site/docs/options/plots/scale/band.zh.md b/site/docs/options/plots/scale/band.zh.md new file mode 100644 index 000000000..221c84674 --- /dev/null +++ b/site/docs/options/plots/scale/band.zh.md @@ -0,0 +1,64 @@ +--- +title: band +order: 1 +--- + +band 是特殊的 [ordinal](/options/plots/scale/ordinal) 比例尺,它的值域范围是一个连续的范围。 + +## 开始使用 + +band 比例尺经常用于柱形图的 x 通道。 + +```ts + +const config = { + scale: { + x: { + type:'band', + /* 其他配置项 */ + } + } +} + +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----| -------| +| domain | 设置定义域数组 | `number[] \| string[] \| Date[]` | `[]` | +| range | 设置数据映射的值域范围 | `number[]` \| `string[]` | `[0, 1]` | +| unknown | 对于 `undefined`, `NaN`,`null` 空值,返回的数据 | `any` | `undefined` | +| round | 输出值去四舍五入 | `boolean` | `false` | +| paddingInner | 设置比例尺的内部间距,在 [0, 1] 范围内 | `number` | `0` | +| paddingOuter | 设置比例尺的外部间距,在 [0, 1] 范围内 | `number` | `0` | +| padding | 同时设置 `paddingInner` 和 `paddingOuter` | `number` | `0` | +| align | 对齐方式,在 [0, 1] 范围内 | `number` | `0.5` | +| compare | 对定义域进行映射前的排序 | `(a: string or number, b: string or number) => number`| `undefined` | +| flex | 设置分配比例 | `number[]` | `[]`| + +```plain +|<------------------------------------------- range ------------------------------------------->| +| | | | | | | +|<--step*PO-->|<----bandWidth---->|<--step*PI-->|<----bandWidth---->|<--step*PI-->|<--step*PO-->| +| | ***************** | | ***************** | | | +| | ******* A ******* | | ******* B ******* | | | +| | ***************** | | ***************** | | | +| |<--------------step------------->| | +|-----------------------------------------------------------------------------------------------| +``` + +## FAQ + +- 怎么设置柱形图,柱子之间的间距? + +```ts +const config = { + scale: { + x: { + type: 'band', + padding: 0.5, + } + } +} +``` diff --git a/site/docs/options/plots/scale/linear.en.md b/site/docs/options/plots/scale/linear.en.md new file mode 100644 index 000000000..cedb155e7 --- /dev/null +++ b/site/docs/options/plots/scale/linear.en.md @@ -0,0 +1,6 @@ +--- +title: linear +order: 1 +--- + + diff --git a/site/docs/options/plots/scale/linear.zh.md b/site/docs/options/plots/scale/linear.zh.md new file mode 100644 index 000000000..4b163fccb --- /dev/null +++ b/site/docs/options/plots/scale/linear.zh.md @@ -0,0 +1,60 @@ +--- +title: linear +order: 1 +--- + +针对连续数据,对数据进行连续映射的比例尺,本质是一个线性公式:`y = ax + b`,从一个数值范围映射到另外一个数值范围。 + +## 开始使用 + +linear 比例尺常规用于将数据映射到归一化坐标上。 + +```ts +const config = { + scale: { + y: { + type: 'linear', + range: [0.2, 0.8], + /* 其他配置项 */ + } + } +} +``` + +这个例子中会将 y 通道的比例尺设置它的映射方式,从而影响到图形在画布上的位置。 + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----| -------| +| domain | 设置数据的定义域范围 | `number[]` | 输入数据的最大最小值范围 | +| domainMin | 设置数据的定义域最小值 | `number` | 输入数据的最小值 | +| domainMax | 设置数据的定义域最大值 | `number` | 输入数据的最大 | +| range | 设置数据映射的值域范围 | `number[]` \| `string[]` | `[0, 1]` | +| rangeMin | 设置数据映射的值域最小值 | `number \| string` | `0` | +| rangeMax | 设置数据映射的值域最大值 | `number \| string` | `1` | +| unknown | 对于 `undefined`, `NaN`,`null` 空值,返回的数据 | `any` | `undefined` | +| tickCount | 设置推荐的 tick 生成数量,tickCount 只是建议值,不会完全按照这个值产生 tick | `number` | `5` | +| tickMethod | 设置生成 tick 的方法,常用于自定义 tick | `(min: number, max: number, count: number) => number[]` | `d3-ticks` | +| round | 输出值去四舍五入 | `boolean` | `false` | +| clamp | 将映射值限定在 range 的范围内 | `boolean` | `false` | +| nice | 扩展 domain 范围,让输出的 tick 展示得更加友好 | `boolean` | `false` | +| interpolate | 自定义差值函数 | `(a: number, b: number) => (t: number) => T` | `(a, b) => (t) => a * (1 - t) + b * t` | + +## FAQ + +- 怎么自定义 y 轴的刻度? + +比如只需要在刻度上显示 0, 100, 600,那就以下方式设置 y 比例尺。 + +```ts +const config = { + scale: { + y: { + type: 'linear', + domain: [0, 700], + tickMethod: () => [0, 100, 600] + } + } +} +``` diff --git a/site/docs/options/plots/scale/log.en.md b/site/docs/options/plots/scale/log.en.md new file mode 100644 index 000000000..e424b0eb6 --- /dev/null +++ b/site/docs/options/plots/scale/log.en.md @@ -0,0 +1,6 @@ +--- +title: log +order: 1 +--- + + diff --git a/site/docs/options/plots/scale/log.zh.md b/site/docs/options/plots/scale/log.zh.md new file mode 100644 index 000000000..ae4f8f18a --- /dev/null +++ b/site/docs/options/plots/scale/log.zh.md @@ -0,0 +1,51 @@ +--- +title: log +order: 1 +--- + +log 是使用对数函数进行数据映射,它的映射函数为 `y = log(x) + b`。 + +## 开始使用 + +```ts +const config = { + scale: { + y: { + type: 'log', + /* 其他配置项 */ + } + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----| -------| +| domain | 设置数据的定义域范围 | `number[]` | 输入数据的最大最小值范围 | +| domainMin | 设置数据的定义域最小值 | `number` | 输入数据的最小值 | +| domainMax | 设置数据的定义域最大值 | `number` | 输入数据的最大 | +| range | 设置数据映射的值域范围 | `number[]` \| `string[]` | `[0, 1]` | +| rangeMin | 设置数据映射的值域最小值 | `number \| string` | `0` | +| rangeMax | 设置数据映射的值域最大值 | `number \| string` | `1` | +| unknown | 对于 `undefined`, `NaN`,`null` 空值,返回的数据 | `any` | `undefined` | +| tickCount | 设置推荐的 tick 生成数量,tickCount 只是建议值,不会完全按照这个值产生 tick | `number` | `5` | +| tickMethod | 设置生成 tick 的方法,常用于自定义 tick | `(min: number, max: number, count: number) => number[]` | `calculateLogTicks` | +| round | 输出值去四舍五入 | `boolean` | `false` | +| clamp | 将映射值限定在 range 的范围内 | `boolean` | `false` | +| nice | 扩展 domain 范围,让输出的 tick 展示得更加友好 | `boolean` | `false` | +| interpolate | 自定义差值函数 | `(a: number, b: number) => (t: number) => T` | `(a, b) => (t) => a * (1 - t) + b * t` | +| base | 设定对数底 | `number` | `10` | + +- log 底数默认为 10,怎么设定 log 的底数 + +```ts +const config = { + scale: { + y: { + type: 'log', + base: 100, + } + } +} +``` diff --git a/site/docs/options/plots/scale/ordinal.en.md b/site/docs/options/plots/scale/ordinal.en.md new file mode 100644 index 000000000..e01ba7172 --- /dev/null +++ b/site/docs/options/plots/scale/ordinal.en.md @@ -0,0 +1,6 @@ +--- +title: ordinal +order: 1 +--- + + diff --git a/site/docs/options/plots/scale/ordinal.zh.md b/site/docs/options/plots/scale/ordinal.zh.md new file mode 100644 index 000000000..67c1bee96 --- /dev/null +++ b/site/docs/options/plots/scale/ordinal.zh.md @@ -0,0 +1,47 @@ +--- +title: ordinal +order: 1 +--- + +ordinal 是将有序且离散的定义域映射到有序离散的值域,通常用于分类的数据,比如:班级、商品类别等形式的数据。 + +## 开始使用 + +linear 比例尺常规用于将数据映射到归一化坐标上。 + +```ts +const config = { + scale: { + y: { + type: 'ordinal', + /* 其他配置项 */ + } + } +} +``` + +这个例子中会将 y 通道的比例尺设置它的映射方式,从而影响到图形在画布上的位置。 + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----| -------| +| domain | 设置数据的定义域范围 | `any[]` | `[]` | +| range | 设置数据映射的值域范围 | `any[]` | `[]` | +| unknown | 对于 `undefined`, `NaN`,`null` 空值,返回的数据 | `any` | `undefined` | +| compare | 比较两个值,用于排序的比较器 | `(a: number | string, b: number | string) => number` | `undefined` | + +## FAQ + +- 柱形图怎么指定柱子的颜色色板? + +```ts +const config = { + scale: { + color: { + type: 'ordinal', + range: ['red', 'green', 'blue'], + } + } +} +``` diff --git a/site/docs/options/plots/scale/point.en.md b/site/docs/options/plots/scale/point.en.md new file mode 100644 index 000000000..e069d1fed --- /dev/null +++ b/site/docs/options/plots/scale/point.en.md @@ -0,0 +1,6 @@ +--- +title: point +order: 1 +--- + + diff --git a/site/docs/options/plots/scale/point.zh.md b/site/docs/options/plots/scale/point.zh.md new file mode 100644 index 000000000..aaac3b436 --- /dev/null +++ b/site/docs/options/plots/scale/point.zh.md @@ -0,0 +1,42 @@ +--- +title: point +order: 1 +--- + +point 是一个特殊 [band](/options/plots/scale/band) 比例尺,固定配置 `bandWith = 0`。 + +## 开始使用 + +```ts +const config = { + scale: { + x: { + type: 'point', + /* 其他配置项 */ + } + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----| -------| +| domain | 设置定义域数组 | `number[] \| string[] \| Date[]` | `[]` | +| range | 设置数据映射的值域范围 | `number[]` \| `string[]` | `[0, 1]` | +| unknown | 对于 `undefined`, `NaN`,`null` 空值,返回的数据 | `any` | `undefined` | +| round | 输出值去四舍五入 | `boolean` | `false` | +| paddingInner | 设置比例尺的内部间距,在 [0, 1] 范围内 | `number` | `0` | +| paddingOuter | 设置比例尺的外部间距,在 [0, 1] 范围内 | `number` | `0` | +| padding | 同时设置 `paddingInner` 和 `paddingOuter` | `number` | `0` | +| align | 对齐方式,在 [0, 1] 范围内 | `number` | `0.5` | +| compare | 对定义域进行映射前的排序 | `(a: string or number, b: string or number) => number`| `undefined` | + +```plain +|<------------------------------------------- range ------------------------------------------->| +| | | | | +|<--step*PO-->|<--------------step------------->|<--------------step------------->|<--step*PO-->| +| | | | | +| A B C | +|-----------------------------------------------------------------------------------------------| +``` diff --git a/site/docs/options/plots/scale/pow.en.md b/site/docs/options/plots/scale/pow.en.md new file mode 100644 index 000000000..8106dd36e --- /dev/null +++ b/site/docs/options/plots/scale/pow.en.md @@ -0,0 +1,6 @@ +--- +title: pow +order: 1 +--- + + diff --git a/site/docs/options/plots/scale/pow.zh.md b/site/docs/options/plots/scale/pow.zh.md new file mode 100644 index 000000000..7a7357827 --- /dev/null +++ b/site/docs/options/plots/scale/pow.zh.md @@ -0,0 +1,39 @@ +--- +title: pow +order: 1 +--- + +pow 是使用指数函数进行数据映射,它的映射函数为 `y = x ^ exp + b`。 + +## 开始使用 + +```ts +const config = { + scale: { + y: { + type: 'pow', + /* 其他配置项 */ + } + } +} + +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----| -------| +| domain | 设置数据的定义域范围 | `number[]` | 输入数据的最大最小值范围 | +| domainMin | 设置数据的定义域最小值 | `number` | 输入数据的最小值 | +| domainMax | 设置数据的定义域最大值 | `number` | 输入数据的最大 | +| range | 设置数据映射的值域范围 | `number[]` \| `string[]` | `[0, 1]` | +| rangeMin | 设置数据映射的值域最小值 | `number \| string` | `0` | +| rangeMax | 设置数据映射的值域最大值 | `number \| string` | `1` | +| unknown | 对于 `undefined`, `NaN`,`null` 空值,返回的数据 | `any` | `undefined` | +| tickCount | 设置推荐的 tick 生成数量,tickCount 只是建议值,不会完全按照这个值产生 tick | `number` | `5` | +| tickMethod | 设置生成 tick 的方法,常用于自定义 tick | `(min: number, max: number, count: number) => number[]` | `calculatePowTicks` | +| round | 输出值去四舍五入 | `boolean` | `false` | +| clamp | 将映射值限定在 range 的范围内 | `boolean` | `false` | +| nice | 扩展 domain 范围,让输出的 tick 展示得更加友好 | `boolean` | `false` | +| interpolate | 自定义差值函数 | `(a: number, b: number) => (t: number) => T` | `(a, b) => (t) => a * (1 - t) + b * t` | +| exponent | 设定指数 | `number` | `2` | diff --git a/site/docs/options/plots/scale/quantile.en.md b/site/docs/options/plots/scale/quantile.en.md new file mode 100644 index 000000000..056668c5b --- /dev/null +++ b/site/docs/options/plots/scale/quantile.en.md @@ -0,0 +1,6 @@ +--- +title: quantile +order: 1 +--- + + diff --git a/site/docs/options/plots/scale/quantile.zh.md b/site/docs/options/plots/scale/quantile.zh.md new file mode 100644 index 000000000..50794453e --- /dev/null +++ b/site/docs/options/plots/scale/quantile.zh.md @@ -0,0 +1,31 @@ +--- +title: quantile +order: 1 +--- + +quantile 类似于 [threshold](/options/plots/scale/threshold),但是计算切片的方式是基于元素在数据中的索引。 + +## 开始使用 + +```ts +const config = { + scale: { + x: { + type: 'quantile', + /* 其他配置项 */ + } + } +} + +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----| -------| +| domain | 设置数据的定义域范围 | `number[]` | `[]` | +| range | 设置数据映射的值域范围 | `any[]` | `[]` | +| unknown | 对于 `undefined`, `NaN`,`null` 空值,返回的数据 | `any` | `undefined` | +| tickCount | 设置推荐的 tick 生成数量,tickCount 只是建议值,不会完全按照这个值产生 tick | `number` | `5` | +| tickMethod | 设置生成 tick 的方法,常用于自定义 tick | `(min: number, max: number, count: number) => number[]` | `wilkinson-extended` | +| nice | 扩展 domain 范围,让输出的 tick 展示得更加友好 | `boolean` | `false` | diff --git a/site/docs/options/plots/scale/quantize.en.md b/site/docs/options/plots/scale/quantize.en.md new file mode 100644 index 000000000..68d7630fa --- /dev/null +++ b/site/docs/options/plots/scale/quantize.en.md @@ -0,0 +1,6 @@ +--- +title: quantize +order: 1 +--- + + diff --git a/site/docs/options/plots/scale/quantize.zh.md b/site/docs/options/plots/scale/quantize.zh.md new file mode 100644 index 000000000..63a4fa428 --- /dev/null +++ b/site/docs/options/plots/scale/quantize.zh.md @@ -0,0 +1,30 @@ +--- +title: quantize +order: 1 +--- + +quantize 类似于 [threshold](/options/plots/scale/threshold),但是计算切片的方式是基于元素的数据值。 + +## 开始使用 + +```ts +const config = { + scale: { + x: { + type: 'quantize', + /* 其他配置项 */ + } + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----| -------| +| domain | 设置数据的定义域范围 | `number[]` | `[]` | +| range | 设置数据映射的值域范围 | `any[]` | `[]` | +| unknown | 对于 `undefined`, `NaN`,`null` 空值,返回的数据 | `any` | `undefined` | +| tickCount | 设置推荐的 tick 生成数量,tickCount 只是建议值,不会完全按照这个值产生 tick | `number` | `5` | +| tickMethod | 设置生成 tick 的方法,常用于自定义 tick | `(min: number, max: number, count: number) => number[]` | `wilkinson-extended` | +| nice | 扩展 domain 范围,让输出的 tick 展示得更加友好 | `boolean` | `false` | diff --git a/site/docs/options/plots/scale/sqrt.en.md b/site/docs/options/plots/scale/sqrt.en.md new file mode 100644 index 000000000..d0522e26e --- /dev/null +++ b/site/docs/options/plots/scale/sqrt.en.md @@ -0,0 +1,6 @@ +--- +title: sqrt +order: 1 +--- + + diff --git a/site/docs/options/plots/scale/sqrt.zh.md b/site/docs/options/plots/scale/sqrt.zh.md new file mode 100644 index 000000000..b6cf380c4 --- /dev/null +++ b/site/docs/options/plots/scale/sqrt.zh.md @@ -0,0 +1,39 @@ +--- +title: sqrt +order: 1 +--- + +sqrt 是指数固定为 `0.5` 的 [pow](/options/plots/scale/pow) 比例尺,它的映射函数为 `y = x ^ 0.5 + b`。 + +## 开始使用 + +```ts +const config = { + scale: { + y: { + type: 'sqrt', + /* 其他配置项 */ + } + } +} + +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----| -------| +| domain | 设置数据的定义域范围 | `number[]` | 输入数据的最大最小值范围 | +| domainMin | 设置数据的定义域最小值 | `number` | 输入数据的最小值 | +| domainMax | 设置数据的定义域最大值 | `number` | 输入数据的最大 | +| range | 设置数据映射的值域范围 | `number[]` \| `string[]` | `[0, 1]` | +| rangeMin | 设置数据映射的值域最小值 | `number \| string` | `0` | +| rangeMax | 设置数据映射的值域最大值 | `number \| string` | `1` | +| unknown | 对于 `undefined`, `NaN`,`null` 空值,返回的数据 | `any` | `undefined` | +| tickCount | 设置推荐的 tick 生成数量,tickCount 只是建议值,不会完全按照这个值产生 tick | `number` | `5` | +| tickMethod | 设置生成 tick 的方法,常用于自定义 tick | `(min: number, max: number, count: number) => number[]` | `d3-ticks` | +| round | 输出值去四舍五入 | `boolean` | `false` | +| clamp | 将映射值限定在 range 的范围内 | `boolean` | `false` | +| nice | 扩展 domain 范围,让输出的 tick 展示得更加友好 | `boolean` | `false` | +| interpolate | 自定义差值函数 | `(a: number, b: number) => (t: number) => T` | `(a, b) => (t) => a * (1 - t) + b * t` | +| exponent | 设定指数 | `number` | `0.5` | diff --git a/site/docs/options/plots/scale/threshold.en.md b/site/docs/options/plots/scale/threshold.en.md new file mode 100644 index 000000000..c265a3ed7 --- /dev/null +++ b/site/docs/options/plots/scale/threshold.en.md @@ -0,0 +1,6 @@ +--- +title: threshold +order: 1 +--- + + diff --git a/site/docs/options/plots/scale/threshold.zh.md b/site/docs/options/plots/scale/threshold.zh.md new file mode 100644 index 000000000..092beb68a --- /dev/null +++ b/site/docs/options/plots/scale/threshold.zh.md @@ -0,0 +1,27 @@ +--- +title: threshold +order: 1 +--- + +threshold 是将连续的值域范围划分为多个切片,并将这些切片映射到一个离散的数据中。 + +## 开始使用 + +```ts +const config = { + scale: { + x: { + type: 'threshold', + /* 其他配置项 */ + } + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值| +| -------------| ----------------------------------------------------------- | -----| -------| +| domain | 设置数据的定义域范围 | `number[]` | `[0.5]` | +| range | 设置数据映射的值域范围 | `any[]` | `[0, 1]` | +| unknown | 对于 `undefined`, `NaN`,`null` 空值,返回的数据 | `any` | `undefined` | diff --git a/site/docs/options/plots/scale/time.en.md b/site/docs/options/plots/scale/time.en.md new file mode 100644 index 000000000..f24c0f4b0 --- /dev/null +++ b/site/docs/options/plots/scale/time.en.md @@ -0,0 +1,6 @@ +--- +title: time +order: 1 +--- + + diff --git a/site/docs/options/plots/scale/time.zh.md b/site/docs/options/plots/scale/time.zh.md new file mode 100644 index 000000000..858937699 --- /dev/null +++ b/site/docs/options/plots/scale/time.zh.md @@ -0,0 +1,40 @@ +--- +title: time +order: 1 +--- + +time 是特殊的 [linear](/options/plots/scale/linear) 比例尺,它的值域是一组时间顺序的数据,映射函数为 `y = x.getTime() + b`。 + +## 开始使用 + +```ts +const config = { + scale: { + x: { + type: 'time', + /* 其他配置项 */ + } + } +} +``` + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | +| -------------| ----------------------------------------------------------- | -----| ------- | +| domain | 设置数据的定义域范围 | `Date[]` | 输入数据的最大最小值范围 | +| domainMin | 设置数据的定义域最小值 | `Date` | 输入数据的最小值 | +| domainMax | 设置数据的定义域最大值 | `Date` | 输入数据的最大 | +| range | 设置数据映射的值域范围 | `Date[]` \| `string[]` | `[0, 1]` | +| rangeMin | 设置数据映射的值域最小值 | `Date` | `0` | +| rangeMax | 设置数据映射的值域最大值 | `Date` | `1` | +| unknown | 对于 `undefined`, `NaN`,`null` 空值,返回的数据 | `any` | `undefined` | +| tickCount | 设置推荐的 tick 生成数量,tickCount 只是建议值,不会完全按照这个值产生 tick | `number` | `5` | +| tickInterval | 设置推荐的 tick 之间的间隔,tickInterval 优先级高于 tickCount。| `number` | `undefined` | +| tickMethod | 设置生成 tick 的方法,常用于自定义 tick | `(min: number, max: number, count: number) => number[]` | `d3Time` | +| round | 输出值去四舍五入 | `boolean` | `false` | +| clamp | 将映射值限定在 range 的范围内 | `boolean` | `false` | +| nice | 扩展 domain 范围,让输出的 tick 展示得更加友好 | `boolean` | `false` | +| mask | 设置时间显示的格式,底层使用 [fetcha](https://github.com/taylorhakes/fecha). | `string` | `undefined` | +| utc | 是否 utc | `boolean` | `false` | +| interpolate | 自定义差值函数 | `(a: number, b: number) => (t: number) => T` | `(a, b) => (t) => a * (1 - t) + b * t` | From d13611ef2d105cbb77df05e858538e0ac9c08896 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 7 Dec 2023 18:07:09 +0800 Subject: [PATCH 146/268] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E2.5D=20(#2284?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plots/src/core/plots/bar/index.ts | 9 ++- packages/plots/src/core/plots/bar/shape.ts | 52 ++++++++++++++ packages/plots/src/core/plots/column/index.ts | 3 + packages/plots/src/core/plots/column/shape.ts | 68 +++++++++++++++++++ .../statistics/bar/demo/background.js | 3 + site/examples/statistics/column/demo/25d.js | 29 ++++++++ .../examples/statistics/column/demo/meta.json | 8 +++ 7 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 packages/plots/src/core/plots/bar/shape.ts create mode 100644 packages/plots/src/core/plots/column/shape.ts create mode 100644 site/examples/statistics/column/demo/25d.js diff --git a/packages/plots/src/core/plots/bar/index.ts b/packages/plots/src/core/plots/bar/index.ts index e6d03e976..ec4b6e65e 100644 --- a/packages/plots/src/core/plots/bar/index.ts +++ b/packages/plots/src/core/plots/bar/index.ts @@ -1,10 +1,14 @@ import { Plot } from '../../base'; -import type { Adaptor } from '../../types'; import { adaptor } from './adaptor'; +import { reisterShape } from './shape'; + +import type { Adaptor } from '../../types'; import { BarOptions } from './type'; export type { BarOptions }; +reisterShape(); + export class Bar extends Plot { /** 图表类型 */ public type = 'Bar'; @@ -29,6 +33,9 @@ export class Bar extends Plot { tooltip: { shared: true, }, + elementHighlightByColor: { + background: true, + }, }, }; } diff --git a/packages/plots/src/core/plots/bar/shape.ts b/packages/plots/src/core/plots/bar/shape.ts new file mode 100644 index 000000000..281c630be --- /dev/null +++ b/packages/plots/src/core/plots/bar/shape.ts @@ -0,0 +1,52 @@ +import { register } from '@antv/g2'; + +export const reisterShape = () => { + /** + * Draw 2.5d bar shape. + */ + const draw25DBar = (style, context) => { + return (points) => { + const { fill = '#2888FF', stroke, fillOpacity = 1, strokeOpacity = 0.2, pitch = 8 } = style; + const [p1, p2, p3, p4] = points; + const height = (p2[1] - p1[1]) / 2; + const { document } = context; + const g = document.createElement('g', {}); + const top = document.createElement('polygon', { + style: { + points: [p1, [p1[0] - pitch, p1[1] + height], [p3[0] - pitch, p1[1] + height], p4], + fill, + fillOpacity, + stroke, + strokeOpacity, + inset: 30, + }, + }); + + const bottom = document.createElement('polygon', { + style: { + points: [[p1[0] - pitch, p1[1] + height], p2, p3, [p3[0] - pitch, p1[1] + height]], + fill, + fillOpacity, + stroke, + strokeOpacity, + }, + }); + + const right = document.createElement('polygon', { + style: { + points: [p1, [p1[0] - pitch, p1[1] + height], p2, [p1[0] + pitch, p1[1] + height]], + fill, + fillOpacity: fillOpacity - 0.2, + }, + }); + + g.appendChild(top); + g.appendChild(bottom); + g.appendChild(right); + + return g; + }; + }; + // @ts-ignore + register('shape.interval.bar25D', draw25DBar); +}; diff --git a/packages/plots/src/core/plots/column/index.ts b/packages/plots/src/core/plots/column/index.ts index 421fa7667..89432fe82 100644 --- a/packages/plots/src/core/plots/column/index.ts +++ b/packages/plots/src/core/plots/column/index.ts @@ -1,10 +1,13 @@ import { Plot } from '../../base'; import type { Adaptor } from '../../types'; import { adaptor } from '../bar/adaptor'; +import { reisterShape } from './shape'; import { ColumnOptions } from './type'; export type { ColumnOptions }; +reisterShape(); + export class Column extends Plot { /** 图表类型 */ public type = 'column'; diff --git a/packages/plots/src/core/plots/column/shape.ts b/packages/plots/src/core/plots/column/shape.ts new file mode 100644 index 000000000..9663b53d4 --- /dev/null +++ b/packages/plots/src/core/plots/column/shape.ts @@ -0,0 +1,68 @@ +import { register } from '@antv/g2'; + +export const reisterShape = () => { + /** + * Draw 2.5d column shape. + */ + const draw25DColumn = (style, context) => { + return (points) => { + const { fill = '#2888FF', stroke, fillOpacity = 1, strokeOpacity = 0.2, pitch = 8 } = style; + const x3 = points[1][0] - points[0][0]; + const x4 = x3 / 2 + points[0][0]; + const { document } = context; + const g = document.createElement('g', {}); + + const left = document.createElement('polygon', { + style: { + points: [ + [points[0][0], points[0][1]], + [x4, points[1][1] + pitch], + [x4, points[3][1] + pitch], + [points[3][0], points[3][1]], + ], + fill, + fillOpacity, + stroke, + strokeOpacity, + inset: 30, + }, + }); + + const right = document.createElement('polygon', { + style: { + points: [ + [x4, points[1][1] + pitch], + [points[1][0], points[1][1]], + [points[2][0], points[2][1]], + [x4, points[2][1] + pitch], + ], + fill, + fillOpacity, + stroke, + strokeOpacity, + }, + }); + + const top = document.createElement('polygon', { + style: { + points: [ + [points[0][0], points[0][1]], + [x4, points[1][1] - pitch], + [points[1][0], points[1][1]], + [x4, points[1][1] + pitch], + ], + fill, + fillOpacity: fillOpacity - 0.2, + }, + }); + + g.appendChild(right); + g.appendChild(left); + g.appendChild(top); + + return g; + }; + }; + // @ts-ignore + register('shape.interval.column25D', draw25DColumn); +}; diff --git a/site/examples/statistics/bar/demo/background.js b/site/examples/statistics/bar/demo/background.js index 5a4b33362..e6b35ffe8 100644 --- a/site/examples/statistics/bar/demo/background.js +++ b/site/examples/statistics/bar/demo/background.js @@ -64,6 +64,9 @@ const DemoBar = () => { title: false, }, }, + interaction: { + elementHighlightByColor: false, + }, }; return ; }; diff --git a/site/examples/statistics/column/demo/25d.js b/site/examples/statistics/column/demo/25d.js new file mode 100644 index 000000000..89578ff3d --- /dev/null +++ b/site/examples/statistics/column/demo/25d.js @@ -0,0 +1,29 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const data = [ + { type: '1-3秒', value: 0.16 }, + { type: '4-10秒', value: 0.125 }, + { type: '11-30秒', value: 0.24 }, + { type: '31-60秒', value: 0.19 }, + { type: '1-3分', value: 0.22 }, + { type: '3-10分', value: 0.05 }, + { type: '10-30分', value: 0.01 }, + { type: '30+分', value: 0.015 }, +]; + +const DemoColumn = () => { + const config = { + data, + xField: 'type', + yField: 'value', + shapeField: 'column25D', + style: { + fill: 'rgba(126, 212, 236, 0.8)', + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/column/demo/meta.json b/site/examples/statistics/column/demo/meta.json index 88cb4bb22..fc8fd248b 100644 --- a/site/examples/statistics/column/demo/meta.json +++ b/site/examples/statistics/column/demo/meta.json @@ -155,6 +155,14 @@ "en": "Customize legend" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*FFVDR4pgMPgAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "25d.js", + "title": { + "zh": "2.5D 柱状图", + "en": "2.5D Column Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*wXEWRIbUJ7cAAAAAAAAAAAAADmJ7AQ/original" } ] } From bec20ef4516a4336fc3398b8bb0b5fab7eb78816 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 8 Dec 2023 19:25:26 +0800 Subject: [PATCH 147/268] fix: clip (#2286) --- packages/plots/CHANGELOG.md | 8 ++++++++ packages/plots/package.json | 2 +- packages/plots/src/core/constants/index.ts | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 66dddecd2..b1b76f99f 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.1.1 + +`2023-12-08` + +- 🔥 新增 2.5D Column and Bar,shapeField: 'column25D' | 'bar25D' +- 🐞 修复 clip 配置无效 + + ## 2.1.0 `2023-12-06` diff --git a/packages/plots/package.json b/packages/plots/package.json index bee20494c..bbdad9c58 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.0", + "version": "2.1.1", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index e4f1e4d2b..7f6e93d53 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -25,6 +25,7 @@ export const CHART_OPTIONS = [ 'marginLeft', 'depth', 'title', + 'clip', ]; /** 最终透传给 G2 Spec 的保留字 */ From 6f4ad26dc915df1c412afb7f4c042e7258640e42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=B6khan=20G=C3=BCnd=C3=BCz?= Date: Fri, 8 Dec 2023 14:25:42 +0300 Subject: [PATCH 148/268] refactor(readme.md): :tada: update docs url (#2285) --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 04422eaee..a1ba972c8 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,10 @@ A React chart library, based on [G2](https://github.com/antvis/G2), [G6](https:/ [![npm License](https://img.shields.io/npm/l/@ant-design/charts.svg)](https://www.npmjs.com/package/@ant-design/charts)

- Website • - Quick Start • - Gallery • - FAQ • + Website • + Quick Start • + Examples • + FAQ

From 983e5ba26c0b880df22f1673d3aa32d834ae3933 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Mon, 11 Dec 2023 20:38:16 +0800 Subject: [PATCH 149/268] docs: add gantt demo (#2290) Co-authored-by: wb-xcf804241 --- site/examples/statistics/bar/demo/gantt.js | 27 +++++++++++++++++++++ site/examples/statistics/bar/demo/meta.json | 8 ++++++ 2 files changed, 35 insertions(+) create mode 100644 site/examples/statistics/bar/demo/gantt.js diff --git a/site/examples/statistics/bar/demo/gantt.js b/site/examples/statistics/bar/demo/gantt.js new file mode 100644 index 000000000..c4966f87c --- /dev/null +++ b/site/examples/statistics/bar/demo/gantt.js @@ -0,0 +1,27 @@ +import { Bar } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoBar = () => { + + const events = [ + { name: 'event planning', startTime: 1, endTime: 4 }, + { name: 'layout logistics', startTime: 3, endTime: 13 }, + { name: 'select vendors', startTime: 5, endTime: 8 }, + { name: 'hire venue', startTime: 9, endTime: 13 }, + { name: 'hire caterer', startTime: 10, endTime: 14 }, + { name: 'hire event decorators', startTime: 12, endTime: 17 }, + { name: 'rehearsal', startTime: 14, endTime: 16 }, + { name: 'event celebration', startTime: 17, endTime: 18 }, + ]; + + const config = { + data: events, + xField: 'name', + yField: ['endTime', 'startTime'], + colorField: 'name' + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); \ No newline at end of file diff --git a/site/examples/statistics/bar/demo/meta.json b/site/examples/statistics/bar/demo/meta.json index 8efabe64b..da340be95 100644 --- a/site/examples/statistics/bar/demo/meta.json +++ b/site/examples/statistics/bar/demo/meta.json @@ -43,6 +43,14 @@ "en": "Background Bar Chart" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*oDkdRodUnXwAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "gantt.js", + "title": { + "zh": "甘特图", + "en": "Gantt Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*y260TK0A4UQAAAAAAAAAAAAADmJ7AQ/original" } ] } From 324dccb62adc50e3ee825065e35cdafb9e483fbb Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Mon, 11 Dec 2023 20:38:57 +0800 Subject: [PATCH 150/268] =?UTF-8?q?fix(plot):=20=E4=BF=AE=E5=A4=8D=20bulle?= =?UTF-8?q?t=20update=20layout=20=E5=90=8E=E5=9D=90=E6=A0=87=E4=B8=8D?= =?UTF-8?q?=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98=20(#2289)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(plot): 修复 bullet update layout 后坐标不生效的问题 * fix(plot): 修复 bullet update layout 后坐标不生效的问题 --------- Co-authored-by: wb-xcf804241 --- .../src/core/components/coordinate-layout.ts | 31 +++++++++++++++++++ .../src/core/components/coordinateLayout.ts | 12 ------- packages/plots/src/core/components/index.ts | 2 +- .../plots/src/core/plots/bullet/adaptor.ts | 4 +-- 4 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 packages/plots/src/core/components/coordinate-layout.ts delete mode 100644 packages/plots/src/core/components/coordinateLayout.ts diff --git a/packages/plots/src/core/components/coordinate-layout.ts b/packages/plots/src/core/components/coordinate-layout.ts new file mode 100644 index 000000000..38277172f --- /dev/null +++ b/packages/plots/src/core/components/coordinate-layout.ts @@ -0,0 +1,31 @@ +import type { Adaptor, Options } from '../types'; + +/** + * layout = 'horizontal' | 'vertical' + * @param params + * @returns + */ +export function coordinateLayout

>(params: P) { + const { layout = 'horizontal' } = params.options; + params.options.coordinate.transform = layout !== 'horizontal' ? undefined : [{ type: 'transpose' }]; + return params; +} + +/** + * layout = 'horizontal' | 'vertical' + * all children change + * @param params + * @returns + */ +export function allCoordinateLayout

>(params: P) { + coordinateLayout(params); + + const { layout = 'horizontal' } = params.options; + params.options.children.forEach((item) => { + if (item?.coordinate?.transform) { + item.coordinate.transform = layout !== 'horizontal' ? undefined : [{ type: 'transpose' }]; + } + }); + + return params; +} \ No newline at end of file diff --git a/packages/plots/src/core/components/coordinateLayout.ts b/packages/plots/src/core/components/coordinateLayout.ts deleted file mode 100644 index 440ecc48b..000000000 --- a/packages/plots/src/core/components/coordinateLayout.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { Adaptor, Options } from '../types'; - -/** - * layout = 'horizontal' | 'vertical' - * @param params - * @returns - */ -export function coordinateLayout

>(params: P) { - const { layout = 'horizontal' } = params.options; - params.options.coordinate.transform = layout !== 'horizontal' ? undefined : [{ type: 'transpose' }]; - return params; -} diff --git a/packages/plots/src/core/components/index.ts b/packages/plots/src/core/components/index.ts index 77f790aa0..3422db910 100644 --- a/packages/plots/src/core/components/index.ts +++ b/packages/plots/src/core/components/index.ts @@ -1,3 +1,3 @@ export { mark } from './mark'; export { coordinate, COORDIANTE_OPTIONS } from './coordinate'; -export { coordinateLayout } from './coordinateLayout'; +export * from './coordinate-layout'; diff --git a/packages/plots/src/core/plots/bullet/adaptor.ts b/packages/plots/src/core/plots/bullet/adaptor.ts index a60646db9..0f2cee033 100644 --- a/packages/plots/src/core/plots/bullet/adaptor.ts +++ b/packages/plots/src/core/plots/bullet/adaptor.ts @@ -1,4 +1,4 @@ -import { coordinateLayout } from '../../components'; +import { allCoordinateLayout } from '../../components'; import { flow, transformOptions, map, set, get, isArray, includes, isNumber, deepAssign, isNil, isString } from '../../utils'; import type { Adaptor } from '../../types'; @@ -178,5 +178,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, layoutAdaptor, cfgAdaptor, coordinateLayout, transformOptions)(params); + return flow(init, layoutAdaptor, cfgAdaptor, allCoordinateLayout, transformOptions)(params); } From 65ac421ea3a47d51a31a5ce8af789ca367397df3 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 12 Dec 2023 11:09:30 +0800 Subject: [PATCH 151/268] fix: docs annotation (#2291) --- site/.dumirc.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 573978741..77c99880e 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -91,7 +91,7 @@ export default defineConfig({ order: 4, }, { - slug: 'options/plots/', + slug: 'options/plots/annotation', title: { zh: '标记 - Annotations', en: 'Annotations', From 2b362042447e897e5483561a2b997879c2618403 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 12 Dec 2023 21:49:13 +0800 Subject: [PATCH 152/268] fix: auto fit (#2294) * fix: auto fit * docs: add segment example * chore: change log --- packages/plots/CHANGELOG.md | 8 +++ packages/plots/package.json | 2 +- packages/plots/src/core/base/index.ts | 12 ++--- packages/plots/src/core/constants/index.ts | 13 ++--- .../plots/src/core/plots/dual-axes/adaptor.ts | 43 ++++++++------- .../core/utils/delete-chart-option-keys.ts | 15 ------ .../src/core/utils/delete-custom-keys.ts | 14 +---- packages/plots/src/core/utils/index.ts | 1 - packages/plots/src/core/utils/transform.ts | 9 +--- .../statistics/dual-axes/demo/meta.json | 8 +++ .../statistics/dual-axes/demo/segment.js | 53 +++++++++++++++++++ 11 files changed, 109 insertions(+), 69 deletions(-) delete mode 100644 packages/plots/src/core/utils/delete-chart-option-keys.ts create mode 100644 site/examples/statistics/dual-axes/demo/segment.js diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index b1b76f99f..18e698683 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.1.2 + +`2023-12-12` + +- 🔥 新增 segment chart 示例,优化 transform 逻辑 +- 🐞 修复 autoFit 配置无效 + + ## 2.1.1 `2023-12-08` diff --git a/packages/plots/package.json b/packages/plots/package.json index bbdad9c58..0d4d60cf9 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.1", + "version": "2.1.2", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 8f901936e..65c6270b6 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -3,7 +3,7 @@ import { ChartEvent } from '@antv/g2'; import { Chart } from './chart'; import { Annotaion } from '../annotation'; import { CHART_OPTIONS, ANNOTATION_LIST, SKIP_DEL_CUSTOM_SIGN } from '../constants'; -import { deepAssign, omit, pick, deleteCustomKeys, deleteChartOptionKeys } from '../utils'; +import { deepAssign, pick } from '../utils'; import type { G2Chart } from './chart'; import type { Adaptor, Options } from '../types'; @@ -35,11 +35,9 @@ export abstract class Plot extends EE { * new Chart 所需配置 */ private getChartOptions() { - const { autoFit = true } = this.options; return { ...pick(this.options, CHART_OPTIONS), container: this.container, - autoFit, }; } @@ -50,7 +48,7 @@ export abstract class Plot extends EE { if (this.type === 'base' || this[SKIP_DEL_CUSTOM_SIGN]) { return { ...this.options, ...this.getChartOptions() }; } - return deleteCustomKeys(omit(this.options, CHART_OPTIONS), true); + return this.options; } /** @@ -80,13 +78,13 @@ export abstract class Plot extends EE { } private getBaseOptions(): Partial { - return { type: 'view' }; + return { type: 'view', autoFit: true }; } /** * 获取默认的 options 配置项,每个组件都可以复写 */ - protected getDefaultOptions(): any { } + protected getDefaultOptions(): any {} /** * 绘制 @@ -182,7 +180,7 @@ export abstract class Plot extends EE { // 转化成 G2 Spec adaptor({ chart: this.chart, - options: deleteChartOptionKeys(this.options), + options: this.options, }); } diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 7f6e93d53..a13eeba6b 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -1,12 +1,12 @@ import { isArray, isBoolean } from '../utils'; /** new Chart options */ -export const CHART_OPTIONS = [ +export const CHART_OPTIONS = ['renderer']; +/** There is only the view layer, no need to pass it down to children */ +export const VIEW_OPTIONS = [ 'width', 'height', - 'renderer', 'autoFit', - 'canvas', 'theme', 'inset', 'insetLeft', @@ -26,11 +26,12 @@ export const CHART_OPTIONS = [ 'depth', 'title', 'clip', + 'children', + 'type', + 'data', + 'direction', ]; -/** 最终透传给 G2 Spec 的保留字 */ -export const RESERVED_KEYS = ['data', 'type', 'children', 'direction']; - /** 特殊标识,用于标识改配置来自于转换逻辑,而非用户配置 */ export const TRANSFORM_SIGN = '__transform__'; diff --git a/packages/plots/src/core/plots/dual-axes/adaptor.ts b/packages/plots/src/core/plots/dual-axes/adaptor.ts index e1e548224..542e88bc5 100644 --- a/packages/plots/src/core/plots/dual-axes/adaptor.ts +++ b/packages/plots/src/core/plots/dual-axes/adaptor.ts @@ -15,27 +15,32 @@ export function adaptor(params: Params) { */ const annotations = (params: Params) => { const { options } = params; - const { annotations = [], children = [] } = options; + const { annotations = [], children = [], scale } = options; let sharedScale = false; + if (get(scale, 'y.key')) { + return params; + } children.forEach((child, index) => { - const scaleKey = `child${index}Scale`; - set(child, 'scale.y.key', scaleKey); - const { annotations: childAnnotations = [] } = child; - /** - * @description If the child has annotations, the scale of the child needs to be assigned scaleKey to connect the annotation. - */ - if (childAnnotations.length > 0) { - set(child, 'scale.y.independent', false); - childAnnotations.forEach((annotation) => { - set(annotation, 'scale.y.key', scaleKey); - }); - } - if (!sharedScale && annotations.length > 0 && get(child, 'scale.y.independent') === undefined) { - sharedScale = true; - set(child, 'scale.y.independent', false); - annotations.forEach((annotation) => { - set(annotation, 'scale.y.key', scaleKey); - }); + if (!get(child, 'scale.y.key')) { + const scaleKey = `child${index}Scale`; + set(child, 'scale.y.key', scaleKey); + const { annotations: childAnnotations = [] } = child; + /** + * @description If the child has annotations, the scale of the child needs to be assigned scaleKey to connect the annotation. + */ + if (childAnnotations.length > 0) { + set(child, 'scale.y.independent', false); + childAnnotations.forEach((annotation) => { + set(annotation, 'scale.y.key', scaleKey); + }); + } + if (!sharedScale && annotations.length > 0 && get(child, 'scale.y.independent') === undefined) { + sharedScale = true; + set(child, 'scale.y.independent', false); + annotations.forEach((annotation) => { + set(annotation, 'scale.y.key', scaleKey); + }); + } } }); return params; diff --git a/packages/plots/src/core/utils/delete-chart-option-keys.ts b/packages/plots/src/core/utils/delete-chart-option-keys.ts deleted file mode 100644 index dff3c2a75..000000000 --- a/packages/plots/src/core/utils/delete-chart-option-keys.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { CHART_OPTIONS } from '../constants'; -import { Options } from '../types'; - -/** - * 统一删除不消费的配置项 - */ -export const deleteChartOptionKeys = (options: O): O => { - Object.keys(options).forEach((key) => { - if (CHART_OPTIONS.includes(key)) { - delete options[key]; - } - }); - - return options; -}; diff --git a/packages/plots/src/core/utils/delete-custom-keys.ts b/packages/plots/src/core/utils/delete-custom-keys.ts index 351fd9ebb..48fc65dc2 100644 --- a/packages/plots/src/core/utils/delete-custom-keys.ts +++ b/packages/plots/src/core/utils/delete-custom-keys.ts @@ -1,12 +1,11 @@ import { COORDIANTE_OPTIONS } from '../components'; import { getCustomKeys } from './get-custom-keys'; -import { RESERVED_KEYS } from '../constants'; import { Options } from '../types'; /** * 统一删除已转换的配置项 */ -export const deleteCustomKeys = (options: O, isRender?: boolean): O => { +export const deleteCustomKeys = (options: O): O => { const deleteKeys = getCustomKeys(); [...deleteKeys, ...COORDIANTE_OPTIONS].forEach((key) => { delete options[key]; @@ -20,16 +19,5 @@ export const deleteCustomKeys = (options: O, isRender?: boole }); }); - /** - * @description 最终渲染,除保留配置外,其余全部删除,避免配置污染 - */ - if (isRender) { - Object.keys(options).forEach((key) => { - if (!RESERVED_KEYS.includes(key)) { - delete options[key]; - } - }); - } - return options; }; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index d771fda17..a7103ecf1 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -30,7 +30,6 @@ export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; export { getShapeConfigKeys } from './get-shape-config-keys'; export { deleteCustomKeys } from './delete-custom-keys'; -export { deleteChartOptionKeys } from './delete-chart-option-keys'; export { filterTransformed } from './filter-transformed'; export { conversionTagFormatter } from './conversion'; export { deepAssign } from '@ant-design/charts-util'; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index 90bbbc518..dc21d8d2f 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -1,4 +1,4 @@ -import { SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY, CONFIG_SHAPE } from '../constants'; +import { SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY, CONFIG_SHAPE, VIEW_OPTIONS } from '../constants'; import { omit, pick, @@ -19,12 +19,7 @@ export const transformOptions = (params: Adaptor) => { const options = filterTransformed(params); const { children = [] } = options; - const getRest = (o: Adaptor['options']) => { - const { children, type, data, ...rest } = o; - return omit(rest, getShapeConfigKeys()); - }; - - const rest = getRest(options); + const rest = omit(options, [].concat(VIEW_OPTIONS, getShapeConfigKeys())); const getValue = (newConfig: string | Function, value: unknown, origin: Options) => { if (typeof newConfig === 'function') { diff --git a/site/examples/statistics/dual-axes/demo/meta.json b/site/examples/statistics/dual-axes/demo/meta.json index 4eb7c789e..9b00029ba 100644 --- a/site/examples/statistics/dual-axes/demo/meta.json +++ b/site/examples/statistics/dual-axes/demo/meta.json @@ -12,6 +12,14 @@ }, "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*GLvKQbqMjTQAAAAAAAAAAAAADmJ7AQ/fmt.webp" }, + { + "filename": "segment.js", + "title": { + "zh": " 分段图", + "en": "Segment Chart" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*t5wnSouqkP4AAAAAAAAAAAAADmJ7AQ/original" + }, { "filename": "multi-line.js", "title": { diff --git a/site/examples/statistics/dual-axes/demo/segment.js b/site/examples/statistics/dual-axes/demo/segment.js new file mode 100644 index 000000000..f631a857c --- /dev/null +++ b/site/examples/statistics/dual-axes/demo/segment.js @@ -0,0 +1,53 @@ +import { DualAxes } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoDualAxes = () => { + const data = [ + { year: '1991', value: null, count: 3 }, + { year: '1992', value: null, count: 3 }, + { year: '1993', value: null, count: 5 }, + { year: '1994', value: 5, count: 5 }, + { year: '1995', value: 6, count: null }, + { year: '1996', value: 8, count: null }, + { year: '1997', value: 7, count: null }, + { year: '1998', value: 9, count: null }, + ]; + + const config = { + data, + xField: 'year', + scale: { + y: { + independent: false, + key: 'sameKey', + domain: [0, 10], + }, + }, + tooltip: { + items: [ + (item) => ({ + name: '销售额', + value: item.value | item.count, + }), + ], + }, + children: [ + { + type: 'line', + yField: 'count', + }, + { + type: 'line', + yField: 'value', + style: { + lineDash: [2, 4], + stroke: 'red', + }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 53ce6d5b18878a8f76f379530af853a9392a3ef0 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 13 Dec 2023 14:11:50 +0800 Subject: [PATCH 153/268] feat: container attributes (#2295) --- packages/plots/src/components/base/index.tsx | 3 ++- packages/plots/src/interface.ts | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/plots/src/components/base/index.tsx b/packages/plots/src/components/base/index.tsx index 2a552faf2..33b45d5c2 100644 --- a/packages/plots/src/components/base/index.tsx +++ b/packages/plots/src/components/base/index.tsx @@ -9,6 +9,7 @@ export const BaseChart: React.FC = forwardRef(({ chartType = 'Base', ...con containerStyle = { height: 'inherit', }, + containerAttributes = {}, className, loading, loadingTemplate, @@ -23,7 +24,7 @@ export const BaseChart: React.FC = forwardRef(({ chartType = 'Base', ...con return ( {loading && } -

+
); }); diff --git a/packages/plots/src/interface.ts b/packages/plots/src/interface.ts index 5377d3bb5..e60c51949 100644 --- a/packages/plots/src/interface.ts +++ b/packages/plots/src/interface.ts @@ -17,11 +17,18 @@ export interface Chart extends Plot { export interface ContainerConfig { /** * @title 图表样式 - * @description 配置图表样式 + * @description 配置容器样式 * @title.en_US Chart containerStyle * @description.en_US Configure chart container styles */ containerStyle?: React.CSSProperties; + /** + * @title 容器自定义属性 + * @description 配置容器自定义属性 + * @title.en_US Chart containerAttr + * @description.en_US Configure chart container attributes + */ + containerAttributes?: Record; /** * @title 容器class * @description 类名添加 From 6e80ebda96d03a0d6b85b3659c1b0bc8d7afd61b Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 15 Dec 2023 10:35:52 +0800 Subject: [PATCH 154/268] refactor: transform options (#2298) --- .../coordinate-layout.ts | 0 .../{components => adaptor}/coordinate.ts | 14 +- .../src/core/{components => adaptor}/index.ts | 2 +- .../src/core/{components => adaptor}/mark.ts | 0 .../{components => adaptor}/shape-stack.ts | 0 packages/plots/src/core/base/index.ts | 6 +- packages/plots/src/core/constants/index.ts | 191 +++++++++++------- packages/plots/src/core/plots/area/adaptor.ts | 2 +- packages/plots/src/core/plots/bar/adaptor.ts | 2 +- .../core/plots/bidirectional-bar/adaptor.ts | 2 +- packages/plots/src/core/plots/box/adaptor.ts | 2 +- .../plots/src/core/plots/bullet/adaptor.ts | 31 ++- .../plots/src/core/plots/column/adaptor.ts | 2 +- .../plots/src/core/plots/dual-axes/adaptor.ts | 2 +- .../plots/src/core/plots/funnel/adaptor.ts | 2 +- .../plots/src/core/plots/gauge/adaptor.ts | 2 +- .../plots/src/core/plots/heatmap/adaptor.ts | 2 +- .../plots/src/core/plots/histogram/adaptor.ts | 2 +- packages/plots/src/core/plots/line/adaptor.ts | 2 +- .../plots/src/core/plots/liquid/adaptor.ts | 2 +- packages/plots/src/core/plots/pie/adaptor.ts | 2 +- .../plots/src/core/plots/radar/adaptor.ts | 2 +- .../src/core/plots/radial-bar/adaptor.ts | 3 +- packages/plots/src/core/plots/rose/adaptor.ts | 2 +- .../plots/src/core/plots/sankey/adaptor.ts | 2 +- .../plots/src/core/plots/scatter/adaptor.ts | 2 +- .../plots/src/core/plots/sunburst/adaptor.ts | 2 +- .../plots/src/core/plots/tiny-area/adaptor.ts | 2 +- .../src/core/plots/tiny-column/adaptor.ts | 2 +- .../plots/src/core/plots/tiny-line/adaptor.ts | 2 +- .../src/core/plots/tiny-progress/adaptor.ts | 2 +- .../plots/src/core/plots/tiny-ring/adaptor.ts | 2 +- .../plots/src/core/plots/treemap/adaptor.ts | 2 +- .../plots/src/core/plots/violin/adaptor.ts | 2 +- .../plots/src/core/plots/waterfall/adaptor.ts | 2 +- .../plots/src/core/plots/wordCloud/adaptor.ts | 2 +- .../src/core/utils/delete-custom-keys.ts | 23 --- .../src/core/utils/delete-excess-keys.ts | 31 +++ .../plots/src/core/utils/get-custom-keys.ts | 12 -- .../src/core/utils/get-shape-config-keys.ts | 9 - packages/plots/src/core/utils/index.ts | 7 +- .../core/utils/merge-with-array-coverage.ts | 11 + packages/plots/src/core/utils/transform.ts | 70 +++---- packages/plots/src/hooks/useChart.ts | 5 + packages/util/src/deep-assign.ts | 32 --- packages/util/src/index.ts | 1 - packages/util/src/rc/create-node.ts | 9 +- packages/util/tests/utils/deep-assign-spec.ts | 22 -- .../statistics/funnel/demo/mirror-funnel.js | 1 - 49 files changed, 259 insertions(+), 275 deletions(-) rename packages/plots/src/core/{components => adaptor}/coordinate-layout.ts (100%) rename packages/plots/src/core/{components => adaptor}/coordinate.ts (83%) rename packages/plots/src/core/{components => adaptor}/index.ts (51%) rename packages/plots/src/core/{components => adaptor}/mark.ts (100%) rename packages/plots/src/core/{components => adaptor}/shape-stack.ts (100%) delete mode 100644 packages/plots/src/core/utils/delete-custom-keys.ts create mode 100644 packages/plots/src/core/utils/delete-excess-keys.ts delete mode 100644 packages/plots/src/core/utils/get-custom-keys.ts delete mode 100644 packages/plots/src/core/utils/get-shape-config-keys.ts create mode 100644 packages/plots/src/core/utils/merge-with-array-coverage.ts delete mode 100644 packages/util/src/deep-assign.ts delete mode 100644 packages/util/tests/utils/deep-assign-spec.ts diff --git a/packages/plots/src/core/components/coordinate-layout.ts b/packages/plots/src/core/adaptor/coordinate-layout.ts similarity index 100% rename from packages/plots/src/core/components/coordinate-layout.ts rename to packages/plots/src/core/adaptor/coordinate-layout.ts diff --git a/packages/plots/src/core/components/coordinate.ts b/packages/plots/src/core/adaptor/coordinate.ts similarity index 83% rename from packages/plots/src/core/components/coordinate.ts rename to packages/plots/src/core/adaptor/coordinate.ts index 5f28d7c91..9e80ec2d8 100644 --- a/packages/plots/src/core/components/coordinate.ts +++ b/packages/plots/src/core/adaptor/coordinate.ts @@ -1,19 +1,7 @@ import { set, pick, get } from '../utils'; - +import { COORDIANTE_OPTIONS } from '../constants'; import type { Adaptor } from '../types'; -export const COORDIANTE_OPTIONS = [ - 'radius', - 'innerRadius', - 'startAngle', - 'endAngle', - 'focusX', - 'focusY', - 'distortionX', - 'distortionY', - 'visual', -]; - /** * 主要为极坐标配置, 饼图、雷达图等 * 通用坐标系配置, coordinate 配置根据图表默认进行配置,例如 coordinate 饼图 { type: 'theta' } 玉珏图 { type: 'radial' }。 diff --git a/packages/plots/src/core/components/index.ts b/packages/plots/src/core/adaptor/index.ts similarity index 51% rename from packages/plots/src/core/components/index.ts rename to packages/plots/src/core/adaptor/index.ts index 3422db910..7144f8f19 100644 --- a/packages/plots/src/core/components/index.ts +++ b/packages/plots/src/core/adaptor/index.ts @@ -1,3 +1,3 @@ export { mark } from './mark'; -export { coordinate, COORDIANTE_OPTIONS } from './coordinate'; +export { coordinate } from './coordinate'; export * from './coordinate-layout'; diff --git a/packages/plots/src/core/components/mark.ts b/packages/plots/src/core/adaptor/mark.ts similarity index 100% rename from packages/plots/src/core/components/mark.ts rename to packages/plots/src/core/adaptor/mark.ts diff --git a/packages/plots/src/core/components/shape-stack.ts b/packages/plots/src/core/adaptor/shape-stack.ts similarity index 100% rename from packages/plots/src/core/components/shape-stack.ts rename to packages/plots/src/core/adaptor/shape-stack.ts diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 65c6270b6..123d2fd94 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -3,7 +3,7 @@ import { ChartEvent } from '@antv/g2'; import { Chart } from './chart'; import { Annotaion } from '../annotation'; import { CHART_OPTIONS, ANNOTATION_LIST, SKIP_DEL_CUSTOM_SIGN } from '../constants'; -import { deepAssign, pick } from '../utils'; +import { mergeWithArrayCoverage, pick } from '../utils'; import type { G2Chart } from './chart'; import type { Adaptor, Options } from '../types'; @@ -26,7 +26,7 @@ export abstract class Plot extends EE { constructor(container: string | HTMLElement, options: O) { super(); this.container = typeof container === 'string' ? document.getElementById(container) : container; - this.options = deepAssign({}, this.getBaseOptions(), this.getDefaultOptions(), options); + this.options = mergeWithArrayCoverage({}, this.getBaseOptions(), this.getDefaultOptions(), options); this.createG2(); this.bindEvents(); } @@ -133,7 +133,7 @@ export abstract class Plot extends EE { * @param options */ protected updateOption(options: Partial) { - this.options = deepAssign({}, this.options, options); + this.options = mergeWithArrayCoverage({}, this.options, options); } /** diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index a13eeba6b..5082252f5 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -57,102 +57,123 @@ const commonCallback = (type: string, value: boolean | object) => { return { type, ...(value as object) }; }; export const TRANSFORM_OPTION_KEY = { - encode: { - xField: 'x', - yField: 'y', - colorField: 'color', - angleField: 'y', - keyField: 'key', - sizeField: 'size', - shapeField: 'shape', - seriesField: 'series', - positionField: 'position', - textField: 'text', - valueField: 'value', - binField: 'x', - srcField: 'src', - }, - transform: { - /** - * @title 堆叠 - * @example - * 1. stack: true -> transform: [{type: 'stackY'}] - */ - stack: (value: boolean | object) => { + /** encode */ + xField: 'encode.x', + yField: 'encode.y', + colorField: 'encode.color', + angleField: 'encode.y', + keyField: 'encode.key', + sizeField: 'encode.size', + shapeField: 'encode.shape', + seriesField: 'encode.series', + positionField: 'encode.position', + textField: 'encode.text', + valueField: 'encode.value', + binField: 'encode.x', + srcField: 'encode.src', + /** + * @title 堆叠 + * @example + * 1. stack: true -> transform: [{type: 'stackY'}] + */ + stack: { + target: 'transform', + value: (value: boolean | object) => { return commonCallback('stackY', value); }, - /** - * @title 归一化 - * @example - * 1. normalize: true -> transform: [{type: 'normalizeY'}] - */ - normalize: (value: boolean | object) => { + }, + /** + * @title 归一化 + * @example + * 1. normalize: true -> transform: [{type: 'normalizeY'}] + */ + normalize: { + target: 'transform', + value: (value: boolean | object) => { return commonCallback('normalizeY', value); }, - /** - * @title 百分比 - * @description 同 normalize - * @example - * 1. percent: true -> transform: [{type: 'normalizeY'}] - */ - percent: (value: boolean | object) => { + }, + /** + * @title 百分比 + * @description 同 normalize + * @example + * 1. percent: true -> transform: [{type: 'normalizeY'}] + */ + percent: { + target: 'transform', + value: (value: boolean | object) => { return commonCallback('normalizeY', value); }, - /** - * @title 分组 - * @example - * 1. group: true -> transform: [{type: 'dodgeX'}] - */ - group: (value: boolean | object) => { + }, + /** + * @title 分组 + * @example + * 1. group: true -> transform: [{type: 'dodgeX'}] + */ + group: { + target: 'transform', + value: (value: boolean | object) => { return commonCallback('dodgeX', value); }, - /** - * @title 排序 - * @example - * 1. sort: true -> transform: [{type: 'sortX'}] - */ - sort: (value: boolean | object) => { + }, + /** + * @title 排序 + * @example + * 1. sort: true -> transform: [{type: 'sortX'}] + */ + sort: { + target: 'transform', + value: (value: boolean | object) => { return commonCallback('sortX', value); }, - /** - * @title 对称 - * @example - * 1. symmetry: true -> transform: [{type: 'symmetryY'}] - */ - symmetry: (value: boolean | object) => { + }, + /** + * @title 对称 + * @example + * 1. symmetry: true -> transform: [{type: 'symmetryY'}] + */ + symmetry: { + target: 'transform', + value: (value: boolean | object) => { return commonCallback('symmetryY', value); }, - /** - * @title 对 y 和 y1 通道求差集 - * @example - * 1. diff: true -> transform: [{type: 'diffY'}] - */ - diff: (value: boolean | object) => { + }, + /** + * @title 对 y 和 y1 通道求差集 + * @example + * 1. diff: true -> transform: [{type: 'diffY'}] + */ + diff: { + target: 'transform', + value: (value: boolean | object) => { return commonCallback('diffY', value); }, }, - scale: { - meta: (value: object) => { + meta: { + target: 'scale', + value: (value: object) => { return value; }, }, - labels: { - label: (value: object) => { + label: { + target: 'labels', + value: (value: object) => { return value; }, }, - style: { - /** - * @title 折线的形状 - * @example - * 1. shape: 'smooth' -> style: {shape: 'smooth'} - */ - shape: 'shape', - /** - * @title 是否链接空值 - * @description 支持 boolean 和 对象类型 - */ - connectNulls: (value: boolean | object) => { + /** + * @title 折线的形状 + * @example + * 1. shape: 'smooth' -> style: {shape: 'smooth'} + */ + shape: 'style.shape', + /** + * @title 是否链接空值 + * @description 支持 boolean 和 对象类型 + */ + connectNulls: { + target: 'style', + value: (value: boolean | object) => { if (isBoolean(value)) { return { connect: value, @@ -179,7 +200,13 @@ const EXTEND_KEYS = [ 'meta', 'tooltip', 'animate', - ...Object.keys(TRANSFORM_OPTION_KEY.transform), + 'stack', + 'normalize', + 'percent', + 'group', + 'sort', + 'symmetry', + 'diff', ]; export const CONFIG_SHAPE = [ { @@ -203,6 +230,18 @@ export const CONFIG_SHAPE = [ }, ]; +export const COORDIANTE_OPTIONS = [ + 'radius', + 'innerRadius', + 'startAngle', + 'endAngle', + 'focusX', + 'focusY', + 'distortionX', + 'distortionY', + 'visual', +]; + /** * @description 一些特殊的配置项,需要自定义转换逻辑 */ diff --git a/packages/plots/src/core/plots/area/adaptor.ts b/packages/plots/src/core/plots/area/adaptor.ts index 800a13322..316f19422 100644 --- a/packages/plots/src/core/plots/area/adaptor.ts +++ b/packages/plots/src/core/plots/area/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { AreaOptions } from './type'; diff --git a/packages/plots/src/core/plots/bar/adaptor.ts b/packages/plots/src/core/plots/bar/adaptor.ts index ef6751ab2..e820d15ec 100644 --- a/packages/plots/src/core/plots/bar/adaptor.ts +++ b/packages/plots/src/core/plots/bar/adaptor.ts @@ -1,4 +1,4 @@ -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import { flow, transformOptions, get, isArray, set } from '../../utils'; import type { BarOptions } from './type'; diff --git a/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts b/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts index 2a75b00a5..2767aff94 100644 --- a/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts +++ b/packages/plots/src/core/plots/bidirectional-bar/adaptor.ts @@ -1,4 +1,4 @@ -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import { flow, transformOptions, set, isArray, get, isPlainObject } from '../../utils'; import { HORIZONTAL_MARGIN, AXIS_LABEL_PADDING, VERTICAL_MARGIN } from './constants'; diff --git a/packages/plots/src/core/plots/box/adaptor.ts b/packages/plots/src/core/plots/box/adaptor.ts index 215926239..d78455a82 100644 --- a/packages/plots/src/core/plots/box/adaptor.ts +++ b/packages/plots/src/core/plots/box/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { BoxOptions } from './type'; diff --git a/packages/plots/src/core/plots/bullet/adaptor.ts b/packages/plots/src/core/plots/bullet/adaptor.ts index 0f2cee033..ed9cf60d5 100644 --- a/packages/plots/src/core/plots/bullet/adaptor.ts +++ b/packages/plots/src/core/plots/bullet/adaptor.ts @@ -1,5 +1,17 @@ -import { allCoordinateLayout } from '../../components'; -import { flow, transformOptions, map, set, get, isArray, includes, isNumber, deepAssign, isNil, isString } from '../../utils'; +import { allCoordinateLayout } from '../../adaptor'; +import { + flow, + transformOptions, + map, + set, + get, + isArray, + includes, + isNumber, + mergeWithArrayCoverage, + isNil, + isString, +} from '../../utils'; import type { Adaptor } from '../../types'; import type { BulletOptions } from './type'; @@ -12,7 +24,7 @@ type Params = Adaptor; /** * 转化为扁平化数据 * 1、[{ measures: [1,2], title: 'x' }, ...] -> [{ measures: 1, title: 'x', index: 0 }, { measures: 2, title: 'x', index: 1 },...] - * 2、[{ measures: 1, title: 'x' }, { measures: [2,3], title: 'x' }] -> + * 2、[{ measures: 1, title: 'x' }, { measures: [2,3], title: 'x' }] -> * [{ measures: 1, title: 'x', index: 0 }, { measures: 2, title: 'x', index: 0 }, { measures: 3, title: 'x', index: 1 },...] * @param data 数据 * @param field 通道 @@ -59,10 +71,13 @@ function getTransformData(data: any[], field: string, xField: string, isSort = t // 当存在更多分类时,单一的 measures 从 'measures' 的分类,变更为 'measures_0' 的分类 if (isArrayData) { - return [transformData.map((item) => ({ - index: 0, - ...item, - })), maxSize]; + return [ + transformData.map((item) => ({ + index: 0, + ...item, + })), + maxSize, + ]; } return [transformData, maxSize]; @@ -174,7 +189,7 @@ export function adaptor(params: Params) { */ const cfgAdaptor = (params: Params) => { const { range = {}, measure = {}, target = {}, children } = params.options; - params.options.children = [range, measure, target].map((c, i) => deepAssign(children[i], c)); + params.options.children = [range, measure, target].map((c, i) => mergeWithArrayCoverage(children[i], c)); return params; }; diff --git a/packages/plots/src/core/plots/column/adaptor.ts b/packages/plots/src/core/plots/column/adaptor.ts index d9968b0ff..1c7184adf 100644 --- a/packages/plots/src/core/plots/column/adaptor.ts +++ b/packages/plots/src/core/plots/column/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { ColumnOptions } from './type'; diff --git a/packages/plots/src/core/plots/dual-axes/adaptor.ts b/packages/plots/src/core/plots/dual-axes/adaptor.ts index 542e88bc5..e7b4cca0c 100644 --- a/packages/plots/src/core/plots/dual-axes/adaptor.ts +++ b/packages/plots/src/core/plots/dual-axes/adaptor.ts @@ -1,4 +1,4 @@ -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import { flow, transformOptions, get, set } from '../../utils'; import type { DualAxesOptions } from './type'; diff --git a/packages/plots/src/core/plots/funnel/adaptor.ts b/packages/plots/src/core/plots/funnel/adaptor.ts index 63842655f..2912f3652 100644 --- a/packages/plots/src/core/plots/funnel/adaptor.ts +++ b/packages/plots/src/core/plots/funnel/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions, set, groupBy } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { FunnelOptions } from './type'; diff --git a/packages/plots/src/core/plots/gauge/adaptor.ts b/packages/plots/src/core/plots/gauge/adaptor.ts index 4f148f175..417868962 100644 --- a/packages/plots/src/core/plots/gauge/adaptor.ts +++ b/packages/plots/src/core/plots/gauge/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { GaugeOptions } from './type'; diff --git a/packages/plots/src/core/plots/heatmap/adaptor.ts b/packages/plots/src/core/plots/heatmap/adaptor.ts index 7f585bc1b..351f0b9c4 100644 --- a/packages/plots/src/core/plots/heatmap/adaptor.ts +++ b/packages/plots/src/core/plots/heatmap/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { HeatmapOptions } from './type'; diff --git a/packages/plots/src/core/plots/histogram/adaptor.ts b/packages/plots/src/core/plots/histogram/adaptor.ts index 0caf3ee30..405ddbe0e 100644 --- a/packages/plots/src/core/plots/histogram/adaptor.ts +++ b/packages/plots/src/core/plots/histogram/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions, assign, isNumber, divide, ceil, get } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { HistogramOptions } from './type'; diff --git a/packages/plots/src/core/plots/line/adaptor.ts b/packages/plots/src/core/plots/line/adaptor.ts index 01cc9dbfb..b314c9fcd 100644 --- a/packages/plots/src/core/plots/line/adaptor.ts +++ b/packages/plots/src/core/plots/line/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { LineOptions } from './type'; diff --git a/packages/plots/src/core/plots/liquid/adaptor.ts b/packages/plots/src/core/plots/liquid/adaptor.ts index 876d04200..9c2c3cb8c 100644 --- a/packages/plots/src/core/plots/liquid/adaptor.ts +++ b/packages/plots/src/core/plots/liquid/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions, isNumber, set } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { LiquidOptions } from './type'; diff --git a/packages/plots/src/core/plots/pie/adaptor.ts b/packages/plots/src/core/plots/pie/adaptor.ts index 218312c91..07020a0be 100644 --- a/packages/plots/src/core/plots/pie/adaptor.ts +++ b/packages/plots/src/core/plots/pie/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { coordinate } from '../../components'; +import { coordinate } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { PieOptions } from './type'; diff --git a/packages/plots/src/core/plots/radar/adaptor.ts b/packages/plots/src/core/plots/radar/adaptor.ts index a0b4ffb25..ce83e031f 100644 --- a/packages/plots/src/core/plots/radar/adaptor.ts +++ b/packages/plots/src/core/plots/radar/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions, get, set } from '../../utils'; -import { coordinate } from '../../components'; +import { coordinate } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { RadarOptions } from './type'; diff --git a/packages/plots/src/core/plots/radial-bar/adaptor.ts b/packages/plots/src/core/plots/radial-bar/adaptor.ts index 09ef88ea7..5ff42558f 100644 --- a/packages/plots/src/core/plots/radial-bar/adaptor.ts +++ b/packages/plots/src/core/plots/radial-bar/adaptor.ts @@ -1,5 +1,6 @@ import { flow, set, pick, transformOptions, isNumber, get } from '../../utils'; -import { COORDIANTE_OPTIONS, mark } from '../../components'; +import { mark } from '../../adaptor'; +import { COORDIANTE_OPTIONS } from '../../constants'; import type { Adaptor } from '../../types'; import type { RadialBarOptions } from './type'; diff --git a/packages/plots/src/core/plots/rose/adaptor.ts b/packages/plots/src/core/plots/rose/adaptor.ts index e2e66b182..cd2897b57 100644 --- a/packages/plots/src/core/plots/rose/adaptor.ts +++ b/packages/plots/src/core/plots/rose/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { coordinate } from '../../components'; +import { coordinate } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { RoseOptions } from './type'; diff --git a/packages/plots/src/core/plots/sankey/adaptor.ts b/packages/plots/src/core/plots/sankey/adaptor.ts index 4cdea3741..7eefdc0ce 100644 --- a/packages/plots/src/core/plots/sankey/adaptor.ts +++ b/packages/plots/src/core/plots/sankey/adaptor.ts @@ -1,4 +1,4 @@ -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import { flow, transformOptions } from '../../utils'; import type { SankeyOptions } from './type'; diff --git a/packages/plots/src/core/plots/scatter/adaptor.ts b/packages/plots/src/core/plots/scatter/adaptor.ts index ce41dcf62..97bb971d2 100644 --- a/packages/plots/src/core/plots/scatter/adaptor.ts +++ b/packages/plots/src/core/plots/scatter/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { ScatterOptions } from './type'; diff --git a/packages/plots/src/core/plots/sunburst/adaptor.ts b/packages/plots/src/core/plots/sunburst/adaptor.ts index 0aa96be1e..3be1c0143 100644 --- a/packages/plots/src/core/plots/sunburst/adaptor.ts +++ b/packages/plots/src/core/plots/sunburst/adaptor.ts @@ -1,4 +1,4 @@ -import { coordinate } from '../../components'; +import { coordinate } from '../../adaptor'; import { flow, transformOptions } from '../../utils'; import type { Adaptor } from '../../types'; diff --git a/packages/plots/src/core/plots/tiny-area/adaptor.ts b/packages/plots/src/core/plots/tiny-area/adaptor.ts index 549a453c8..650356525 100644 --- a/packages/plots/src/core/plots/tiny-area/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-area/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { TinyAreaOptions } from './type'; diff --git a/packages/plots/src/core/plots/tiny-column/adaptor.ts b/packages/plots/src/core/plots/tiny-column/adaptor.ts index f605dfc00..19cd16c8b 100644 --- a/packages/plots/src/core/plots/tiny-column/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-column/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { TinyColumnOptions } from './type'; diff --git a/packages/plots/src/core/plots/tiny-line/adaptor.ts b/packages/plots/src/core/plots/tiny-line/adaptor.ts index d71d5a79e..a5e7c5635 100644 --- a/packages/plots/src/core/plots/tiny-line/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-line/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { TinyLineOptions } from './type'; diff --git a/packages/plots/src/core/plots/tiny-progress/adaptor.ts b/packages/plots/src/core/plots/tiny-progress/adaptor.ts index b8ea29ca0..d0f2916c4 100644 --- a/packages/plots/src/core/plots/tiny-progress/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-progress/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { TinyProgressOptions } from './type'; diff --git a/packages/plots/src/core/plots/tiny-ring/adaptor.ts b/packages/plots/src/core/plots/tiny-ring/adaptor.ts index 3603e86cb..4dfddfd8d 100644 --- a/packages/plots/src/core/plots/tiny-ring/adaptor.ts +++ b/packages/plots/src/core/plots/tiny-ring/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions, set } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { TinyRingOptions } from './type'; diff --git a/packages/plots/src/core/plots/treemap/adaptor.ts b/packages/plots/src/core/plots/treemap/adaptor.ts index 24858cd4b..5c1e27c79 100644 --- a/packages/plots/src/core/plots/treemap/adaptor.ts +++ b/packages/plots/src/core/plots/treemap/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions, set } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { TreemapOptions } from './type'; diff --git a/packages/plots/src/core/plots/violin/adaptor.ts b/packages/plots/src/core/plots/violin/adaptor.ts index 2aa6f82dc..f6f35ed44 100644 --- a/packages/plots/src/core/plots/violin/adaptor.ts +++ b/packages/plots/src/core/plots/violin/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions, set } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { ViolinOptions } from './type'; diff --git a/packages/plots/src/core/plots/waterfall/adaptor.ts b/packages/plots/src/core/plots/waterfall/adaptor.ts index 7d3e4c4d9..89f5caed1 100644 --- a/packages/plots/src/core/plots/waterfall/adaptor.ts +++ b/packages/plots/src/core/plots/waterfall/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import { START_KEY, END_KEY, WATERFALL_VALUE } from './constants'; import type { Adaptor } from '../../types'; import type { WaterfallOptions } from './type'; diff --git a/packages/plots/src/core/plots/wordCloud/adaptor.ts b/packages/plots/src/core/plots/wordCloud/adaptor.ts index bf5c1f1ce..d4b127dcf 100644 --- a/packages/plots/src/core/plots/wordCloud/adaptor.ts +++ b/packages/plots/src/core/plots/wordCloud/adaptor.ts @@ -1,5 +1,5 @@ import { flow, transformOptions } from '../../utils'; -import { mark } from '../../components'; +import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { WordCloudOptions } from './type'; diff --git a/packages/plots/src/core/utils/delete-custom-keys.ts b/packages/plots/src/core/utils/delete-custom-keys.ts deleted file mode 100644 index 48fc65dc2..000000000 --- a/packages/plots/src/core/utils/delete-custom-keys.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { COORDIANTE_OPTIONS } from '../components'; -import { getCustomKeys } from './get-custom-keys'; -import { Options } from '../types'; - -/** - * 统一删除已转换的配置项 - */ -export const deleteCustomKeys = (options: O): O => { - const deleteKeys = getCustomKeys(); - [...deleteKeys, ...COORDIANTE_OPTIONS].forEach((key) => { - delete options[key]; - }); - // 2023-11-09 对children为空情况做兼容。 - options.children?.forEach((child) => { - Object.keys(child).forEach((key) => { - if (deleteKeys.includes(key)) { - delete child[key]; - } - }); - }); - - return options; -}; diff --git a/packages/plots/src/core/utils/delete-excess-keys.ts b/packages/plots/src/core/utils/delete-excess-keys.ts new file mode 100644 index 000000000..978f32ff7 --- /dev/null +++ b/packages/plots/src/core/utils/delete-excess-keys.ts @@ -0,0 +1,31 @@ +import { TRANSFORM_OPTION_KEY, VIEW_OPTIONS, CONFIG_SHAPE, COORDIANTE_OPTIONS } from '../constants'; +import { Options } from '../types'; + +/** + * 统一删除已转换的配置项 + */ +export const deleteExcessKeys = (options: O): O => { + const { children = [] } = options; + const deleteKeys = Object.keys(TRANSFORM_OPTION_KEY).concat( + CONFIG_SHAPE.map((item) => item.key), + COORDIANTE_OPTIONS, + ); + deleteKeys.forEach((key) => { + delete options[key]; + }); + /** 针对双轴图、Mix 等复合图表 */ + children.forEach((child) => { + Object.keys(child).forEach((key) => { + if (deleteKeys.includes(key)) { + delete child[key]; + } + }); + }); + /** 删除不在 View 里面配置,避免多次 Transform & Scale 等 */ + Object.keys(options).forEach((key) => { + if (!VIEW_OPTIONS.includes(key)) { + delete options[key]; + } + }); + return options; +}; diff --git a/packages/plots/src/core/utils/get-custom-keys.ts b/packages/plots/src/core/utils/get-custom-keys.ts deleted file mode 100644 index 337cd7de0..000000000 --- a/packages/plots/src/core/utils/get-custom-keys.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TRANSFORM_OPTION_KEY } from '../constants'; -import { getShapeConfigKeys } from './get-shape-config-keys'; - -export const getCustomKeys = (): string[] => { - const customKeys = []; - Object.keys(TRANSFORM_OPTION_KEY).forEach((key) => { - customKeys.push(...Object.keys(TRANSFORM_OPTION_KEY[key])); - }); - const configKeys = getShapeConfigKeys(); - customKeys.push(...configKeys); - return customKeys; -}; diff --git a/packages/plots/src/core/utils/get-shape-config-keys.ts b/packages/plots/src/core/utils/get-shape-config-keys.ts deleted file mode 100644 index f3b76dec6..000000000 --- a/packages/plots/src/core/utils/get-shape-config-keys.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { CONFIG_SHAPE } from '../constants'; - -export const getShapeConfigKeys = (): string[] => { - const configKeys = []; - CONFIG_SHAPE.forEach((item) => { - configKeys.push(item.key); - }); - return configKeys; -}; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index a7103ecf1..3aa80ebf8 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -24,12 +24,11 @@ export { isPlainObject, reduce, isNil, + mergeWith, } from 'lodash-es'; -export { getCustomKeys } from './get-custom-keys'; export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; -export { getShapeConfigKeys } from './get-shape-config-keys'; -export { deleteCustomKeys } from './delete-custom-keys'; +export { deleteExcessKeys } from './delete-excess-keys'; export { filterTransformed } from './filter-transformed'; export { conversionTagFormatter } from './conversion'; -export { deepAssign } from '@ant-design/charts-util'; +export { mergeWithArrayCoverage } from './merge-with-array-coverage'; diff --git a/packages/plots/src/core/utils/merge-with-array-coverage.ts b/packages/plots/src/core/utils/merge-with-array-coverage.ts new file mode 100644 index 000000000..c006434a9 --- /dev/null +++ b/packages/plots/src/core/utils/merge-with-array-coverage.ts @@ -0,0 +1,11 @@ +import { isArray, mergeWith } from './index'; + +const arrayCoverage = (objValue: unknown, srcValue: unknown) => { + if (isArray(srcValue)) { + return srcValue; + } +}; + +export const mergeWithArrayCoverage = (...args) => { + return mergeWith(...args, arrayCoverage); +}; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index dc21d8d2f..a87c3e610 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -2,12 +2,12 @@ import { SPECIAL_OPTIONS, TRANSFORM_OPTION_KEY, CONFIG_SHAPE, VIEW_OPTIONS } fro import { omit, pick, - isFunction, - getShapeConfigKeys, isArray, - deleteCustomKeys, + deleteExcessKeys, filterTransformed, - deepAssign, + mergeWithArrayCoverage, + set, + isObject, } from './index'; import type { Adaptor, Options } from '../types'; @@ -19,16 +19,13 @@ export const transformOptions = (params: Adaptor) => { const options = filterTransformed(params); const { children = [] } = options; - const rest = omit(options, [].concat(VIEW_OPTIONS, getShapeConfigKeys())); - - const getValue = (newConfig: string | Function, value: unknown, origin: Options) => { - if (typeof newConfig === 'function') { - return newConfig(value, origin); - } - return { - [newConfig]: value, - }; - }; + const rest = omit( + options, + [].concat( + VIEW_OPTIONS, + CONFIG_SHAPE.map((item) => item.key), + ), + ); const getCustomTransform = (key: string) => { return SPECIAL_OPTIONS.find((option) => option.key === key)?.callback; @@ -42,7 +39,7 @@ export const transformOptions = (params: Adaptor) => { if (callback) { callback(origin, key, value); } else { - origin[key] = deepAssign({}, origin[key], value); + origin[key] = mergeWithArrayCoverage({}, origin[key], value); } }; @@ -57,7 +54,7 @@ export const transformOptions = (params: Adaptor) => { if (exist) { const { type, extend_keys } = exist; if (type) { - children.push(transformConfig(deepAssign({}, pick(config, extend_keys), { type }, config[key]))); + children.push(transformConfig(mergeWithArrayCoverage({}, pick(config, extend_keys), { type }, config[key]))); } else { // annotations if (isArray(config[key])) { @@ -74,28 +71,23 @@ export const transformOptions = (params: Adaptor) => { * @title 通用转换逻辑 * @description 直接修改原对象 */ - const transformConfig = ( - config: T, - callback?: (transformObject: object, specKey: string, key: string) => void, - ): T => { + const transformConfig = (config: T): T => { transformShape(config); - Object.keys(TRANSFORM_OPTION_KEY).forEach((specKey) => { - const transformObject = TRANSFORM_OPTION_KEY[specKey]; - /** - * @description 遍历配置项,如果存在对应的映射规则,则进行转换 - * @example 详见 src/core/constants/index.ts - */ - Object.keys(transformObject).forEach((key) => { - /** - * @description 常规图表 - * @example Line Bar Column 等单图层图表 - */ - if (config[key]) { - const transformValue = getValue(transformObject[key], config[key], config); - updateOptions(config, specKey, transformValue); + /** + * @description 遍历配置项,如果存在对应的映射规则,则进行转换 + * @example 详见 src/core/constants/index.ts + */ + Object.keys(TRANSFORM_OPTION_KEY).forEach((key) => { + const transformTarget = TRANSFORM_OPTION_KEY[key]; + if (config[key]) { + if (isObject(transformTarget)) { + const { value, target } = transformTarget; + const transformValue = value(config[key]); + updateOptions(config, target, transformValue); + } else { + set(config, transformTarget, config[key]); } - if (isFunction(callback)) callback(transformObject, specKey, key); - }); + } }); return config; }; @@ -105,13 +97,13 @@ export const transformOptions = (params: Adaptor) => { * 提前先 child 创造一个 config 防止 rest 被污染 和 child 数据缺失 * @description 外层配置应用到所有 children */ - const config = deepAssign({}, rest, child); - transformConfig(deepAssign(child, config)); + const config = mergeWithArrayCoverage({}, rest, child); + transformConfig(mergeWithArrayCoverage(child, config)); }); transformShape(options); - deleteCustomKeys(options); + deleteExcessKeys(options); return params; }; diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 0c50ebbc2..01fcf2a5f 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -40,6 +40,11 @@ export default function useChart(ChartC return imageName; }; + /** + * JSX TO HTMLElement + * @param {object} cfg + * @param {boolean} flag isTooltip + */ const processConfig = (cfg: object, flag = false) => { const keys = Object.keys(cfg); let isTooltip = flag; diff --git a/packages/util/src/deep-assign.ts b/packages/util/src/deep-assign.ts deleted file mode 100644 index 402c62d66..000000000 --- a/packages/util/src/deep-assign.ts +++ /dev/null @@ -1,32 +0,0 @@ -const isArray = (obj: any) => Array.isArray(obj); - -const isObject = (obj: any) => { - return obj !== null && typeof obj === 'object' && !isArray(obj); -}; - -/** - * @title 深度合并 - * @param {object} target 目标对象 - * @param {object} sources 源对象 - * @description 深度合并对象,用于合并配置,数组类型目前只支持覆盖 - */ -export const deepAssign = (target: object, ...sources) => { - if (!sources.length) return target; - - const source = sources.shift(); - - for (const key in source) { - if (Object.hasOwnProperty.call(source, key)) { - if (isObject(source[key])) { - if (!target[key] || typeof target[key] !== 'object') { - target[key] = {}; - } - deepAssign(target[key], source[key]); - } else { - target[key] = source[key]; - } - } - } - - return deepAssign(target, ...sources); -}; diff --git a/packages/util/src/index.ts b/packages/util/src/index.ts index fa11fccb9..987766a78 100644 --- a/packages/util/src/index.ts +++ b/packages/util/src/index.ts @@ -1,4 +1,3 @@ export * from './react'; export * from './rc'; -export { deepAssign } from './deep-assign'; export { uuid } from './uuid'; diff --git a/packages/util/src/rc/create-node.ts b/packages/util/src/rc/create-node.ts index c7fd2970a..25a746226 100644 --- a/packages/util/src/rc/create-node.ts +++ b/packages/util/src/rc/create-node.ts @@ -5,18 +5,21 @@ const mountMapping = new Map(); mountMapping.set('tooltip', document.createElement('div')); export const createNode = (children: React.ReactElement, isTooltip = false) => { - let mount = document.createElement('div'); + let mount: HTMLElement = null; /** * @description tooltip 为了防止抖动,只需一个root即可 */ if (isTooltip) { mount = mountMapping.get('tooltip'); } else { + mount = document.createElement('div'); if (children?.key) { - if (!mountMapping.get(children.key)) { + const exist = mountMapping.get(children.key); + if (exist) { + mount = exist; + } else { mountMapping.set(children.key, mount); } - mount = mountMapping.get(children.key); } } diff --git a/packages/util/tests/utils/deep-assign-spec.ts b/packages/util/tests/utils/deep-assign-spec.ts deleted file mode 100644 index 72448fd11..000000000 --- a/packages/util/tests/utils/deep-assign-spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { deepAssign } from '../../src'; - -describe('Deep assign', () => { - it('run', () => { - expect(deepAssign({ a: 1 }, { a: 2 })).toEqual({ a: 2 }); - expect(deepAssign({ a: 1 }, { a: 2, b: 1 })).toEqual({ a: 2, b: 1 }); - expect(deepAssign({ a: 1, b: { c: { d: 1 } } }, { a: 1, b: { c: { d: 2, e: 1 } } })).toEqual({ - a: 1, - b: { c: { d: 2, e: 1 } }, - }); - expect(deepAssign({ a: { b: 1 } }, { a: 2 })).toEqual({ a: 2 }); - expect(deepAssign({ a: { b: 1 } }, { a: { c: 1 } })).toEqual({ a: { b: 1, c: 1 } }); - expect(deepAssign({ a: { b: [1, 2, 3] } }, { a: 2 })).toEqual({ a: 2 }); - expect(deepAssign({ a: { b: ['b', 2, 'c'] } }, { a: { b: ['a', 2] } })).toEqual({ a: { b: ['a', 2] } }); - expect(deepAssign({ a: { b: [{ c: 1 }, { d: 2, e: 4 }] } }, { a: { b: [{ c: 2 }, { d: 3 }] } })).toEqual({ - a: { b: [{ c: 2 }, { d: 3 }] }, - }); - expect(deepAssign({ a: { b: { c: null } } }, { a: { b: { c: undefined } } })).toEqual({ - a: { b: { c: undefined } }, - }); - }); -}); diff --git a/site/examples/statistics/funnel/demo/mirror-funnel.js b/site/examples/statistics/funnel/demo/mirror-funnel.js index b0cfcfa82..cae4cfbe6 100644 --- a/site/examples/statistics/funnel/demo/mirror-funnel.js +++ b/site/examples/statistics/funnel/demo/mirror-funnel.js @@ -42,7 +42,6 @@ const DemoFunnel = () => { if (i) return (
Date: Fri, 15 Dec 2023 21:35:16 +0800 Subject: [PATCH 155/268] docs: add scatter demo (#2301) Co-authored-by: lkd01632719 --- site/.dumi/global.ts | 1 + site/examples/statistics/scatter/demo/line.js | 67 +++++++++++++++++++ .../statistics/scatter/demo/meta.json | 8 +++ site/package.json | 1 + 4 files changed, 77 insertions(+) create mode 100644 site/examples/statistics/scatter/demo/line.js diff --git a/site/.dumi/global.ts b/site/.dumi/global.ts index 69bdd49ad..3ed8d4a0e 100644 --- a/site/.dumi/global.ts +++ b/site/.dumi/global.ts @@ -8,4 +8,5 @@ if (window) { /** 不要使用 link, react-dom 冲突 */ (window as any).plots = require('@ant-design/plots'); (window as any).d3Interpolate = require('d3-interpolate'); + (window as any).d3Regression = require('d3-regression'); } diff --git a/site/examples/statistics/scatter/demo/line.js b/site/examples/statistics/scatter/demo/line.js new file mode 100644 index 000000000..02b1055c4 --- /dev/null +++ b/site/examples/statistics/scatter/demo/line.js @@ -0,0 +1,67 @@ +import { Scatter } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import { regressionQuad } from 'd3-regression'; + +const data = [ + { x: 1, y: 4.181 }, + { x: 2, y: 4.665 }, + { x: 3, y: 5.296 }, + { x: 4, y: 5.365 }, + { x: 5, y: 5.448 }, + { x: 6, y: 5.744 }, + { x: 7, y: 5.653 }, + { x: 8, y: 5.844 }, + { x: 9, y: 6.362 }, + { x: 10, y: 6.38 }, + { x: 11, y: 6.311 }, + { x: 12, y: 6.457 }, + { x: 13, y: 6.479 }, + { x: 14, y: 6.59 }, + { x: 15, y: 6.74 }, + { x: 16, y: 6.58 }, + { x: 17, y: 6.852 }, + { x: 18, y: 6.531 }, + { x: 19, y: 6.682 }, + { x: 20, y: 7.013 }, + { x: 21, y: 6.82 }, + { x: 22, y: 6.647 }, + { x: 23, y: 6.951 }, + { x: 24, y: 7.121 }, + { x: 25, y: 7.143 }, + { x: 26, y: 6.914 }, + { x: 27, y: 6.941 }, + { x: 28, y: 7.226 }, + { x: 29, y: 6.898 }, + { x: 30, y: 7.392 }, + { x: 31, y: 6.938 }, +]; + +const lineData = regressionQuad() + .x((d) => d.x) + .y((d) => d.y) + .domain([2, 31])(data) + +const DemoScatter = () => { + const config = { + data, + xField: 'x', + yField: 'y', + sizeField: 5, + style: { + stroke: '#777777', + lineWidth: 1, + fill: '#5B8FF9', + }, + line: { + data: lineData, + xField: (d) => d[0], + yField: (d) => d[1], + style: { stroke: "#c7cbc7", lineWidth: 2 }, + tooltip: false, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/scatter/demo/meta.json b/site/examples/statistics/scatter/demo/meta.json index cab4497c9..13fd26c0f 100644 --- a/site/examples/statistics/scatter/demo/meta.json +++ b/site/examples/statistics/scatter/demo/meta.json @@ -99,6 +99,14 @@ "en": "Dot Plot" }, "screenshot": "https://mdn.alipayobjects.com/mdn/huamei_qa8qxu/afts/img/A*RtalTb-DPdkAAAAAAAAAAAAADmJ7AQ" + }, + { + "filename": "line.js", + "title": { + "zh": "散点图-回归线", + "en": "Scatter plot regression line" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*WVncQ5FZmXMAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/package.json b/site/package.json index 256970c76..b2eca0a50 100644 --- a/site/package.json +++ b/site/package.json @@ -33,6 +33,7 @@ "@types/react-dom": "^16.9.13", "cross-env": "^7.0.3", "d3-interpolate": "^3.0.1", + "d3-regression": "^1.3.10", "dumi": "^2.1.14", "fecha": "^4.2.3", "gh-pages": "^2.1.1", From 2b390bb721b40b733dea47d45359a3ffab9431ff Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 15 Dec 2023 21:36:26 +0800 Subject: [PATCH 156/268] refactor: annotations (#2302) --- .../annotation/bidirectional-bar-axis-text.ts | 90 +++++++------------ .../plots/src/core/annotation/controller.ts | 41 +++++++++ .../src/core/annotation/conversion-tag.ts | 76 ++++++---------- packages/plots/src/core/annotation/core.ts | 61 +++++++++++++ packages/plots/src/core/annotation/index.ts | 1 + .../src/core/annotation/shapes/Polygon.ts | 14 +++ .../plots/src/core/annotation/shapes/Text.ts | 22 +++++ .../plots/src/core/annotation/shapes/index.ts | 2 + packages/plots/src/core/annotation/type.ts | 13 +++ packages/plots/src/core/base/index.ts | 27 ++---- .../src/core/utils/delete-excess-keys.ts | 6 +- 11 files changed, 224 insertions(+), 129 deletions(-) create mode 100644 packages/plots/src/core/annotation/controller.ts create mode 100644 packages/plots/src/core/annotation/core.ts create mode 100644 packages/plots/src/core/annotation/shapes/Polygon.ts create mode 100644 packages/plots/src/core/annotation/shapes/Text.ts create mode 100644 packages/plots/src/core/annotation/shapes/index.ts create mode 100644 packages/plots/src/core/annotation/type.ts diff --git a/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts b/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts index 6369923be..cef6bb9f4 100644 --- a/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts +++ b/packages/plots/src/core/annotation/bidirectional-bar-axis-text.ts @@ -1,66 +1,46 @@ -// @ts-expect-error -import { Text, Polygon, canvas as GCanvas } from '@antv/g'; -// @ts-expect-error -import { Chart, AxisComponent, G2ViewDescriptor } from '@antv/g2'; +import { Chart, AxisComponent } from '@antv/g2'; import { get, isFunction, uniqBy, groupBy } from '../utils'; +import { Annotaion } from './core'; +import { Text } from './shapes'; import { VERTICAL_MARGIN } from '../plots/bidirectional-bar/constants'; export type BidirectionalBarAxisTextOptions = AxisComponent; -export class BidirectionalBarAxisText { - /** canvas 实例 */ - public canvas: GCanvas; - public views: G2ViewDescriptor[]; - public chart: Chart; - public options: BidirectionalBarAxisTextOptions; - public container: Array = []; - +export class BidirectionalBarAxisText extends Annotaion { + static tag = 'BidirectionalBarAxisText'; constructor(chart: Chart, options: BidirectionalBarAxisTextOptions) { - if (!options) return; - this.chart = chart; - this.options = options; - this.init(); + super(chart, options, { type: BidirectionalBarAxisText.tag }); } - public getElementsLayout() { - const { layout } = this.options; - const isVertical = layout === 'vertical'; - const elements = this.canvas.document.getElementsByClassName('element'); - const elementsLayout = []; - elements.forEach((element) => { - const bbox = element.getBBox(); - const { x, y, width, height } = bbox; - elementsLayout.push({ - bbox, - x, - y, - width, - height, - data: element['__data__'], - }); - }); - return isVertical ? uniqBy(elementsLayout, 'x') : uniqBy(elementsLayout, 'y'); + + public render() { + this.drawText(); } + public getBidirectionalBarAxisTextLayout() { - const { layout } = this.options; + const { layout } = this.attributes; const isVertical = layout === 'vertical'; - const elementsLayout = this.getElementsLayout(); + const allElementsLayout = this.getElementsLayout(); + const elementsLayout = isVertical ? uniqBy(allElementsLayout, 'x') : uniqBy(allElementsLayout, 'y'); const textPath = ['title']; let textLayout = []; - const { width: viewWidth, height: viewHeight } = get(this.views, [0, 'layout']); + const { views } = this.chart.getContext(); + const { width: viewWidth, height: viewHeight } = get(views, [0, 'layout']); elementsLayout.forEach((element) => { - const { x, y, height, width, data } = element; + const { x, y, height, width, data, key } = element; const text = get(data, textPath); if (isVertical) { textLayout.push({ x: x + width / 2, y: viewHeight, text, + key, }); } else { textLayout.push({ x: viewWidth, y: y + height / 2, text, + key, }); } }); @@ -80,12 +60,7 @@ export class BidirectionalBarAxisText { return textLayout; } - public init() { - const { canvas, views } = this.chart.getContext(); - this.views = views; - this.canvas = canvas; - this.drawBidirectionalBarAxisText(); - } + public transformLabelStyle(style) { const removeLabel = {}; const reg = /^label[A-Z]/; @@ -98,36 +73,37 @@ export class BidirectionalBarAxisText { return removeLabel; } - public drawBidirectionalBarAxisText() { + public drawText() { const axisLayout = this.getBidirectionalBarAxisTextLayout(); - const { layout: viewLayout, labelFormatter, ...textStyle } = this.options; + const { layout: viewLayout, labelFormatter, ...textStyle } = this.attributes; axisLayout.forEach((layout) => { - const { x, y, text } = layout; + const { x, y, text, key } = layout; const textNode = new Text({ style: { x, y, text: isFunction(labelFormatter) ? labelFormatter(text) : text, - fontSize: 12, - textBaseline: 'middle', - textAlign: 'center', - fill: '#000', wordWrap: true, wordWrapWidth: viewLayout === 'horizontal' ? VERTICAL_MARGIN * 2 : 120, maxLines: 2, textOverflow: 'ellipsis', ...this.transformLabelStyle(textStyle), }, + id: `text-${key}`, }); - this.canvas.appendChild(textNode); - this.container.push(textNode); + this.appendChild(textNode); }); } - public update(options: BidirectionalBarAxisTextOptions) {} - public destroy() { - this.container.forEach((child) => { - child.destroy(); + + /** 仅仅更新位置即可 */ + public update() { + const axisLayout = this.getBidirectionalBarAxisTextLayout(); + axisLayout.forEach((layout) => { + const { x, y, key } = layout; + const text = this.getElementById(`text-${key}`); + text.setAttribute('x', x); + text.setAttribute('y', y); }); } } diff --git a/packages/plots/src/core/annotation/controller.ts b/packages/plots/src/core/annotation/controller.ts new file mode 100644 index 000000000..f2199bfbe --- /dev/null +++ b/packages/plots/src/core/annotation/controller.ts @@ -0,0 +1,41 @@ +import { Chart } from '@antv/g2'; +import { ANNOTATION_LIST } from '../constants'; +import { Annotaion } from '.'; + +export class Controller { + public chart: Chart; + public config: T; + public container: Map = new Map(); + + constructor(chart: Chart, config: T) { + this.chart = chart; + this.config = config; + this.init(); + } + + init() { + ANNOTATION_LIST.forEach((annotation) => { + const { key, shape } = annotation; + const annotationOptions = this.config[key]; + if (annotationOptions) { + const annotationInstance = new Annotaion[shape](this.chart, annotationOptions); + const { canvas } = this.chart.getContext(); + canvas.appendChild(annotationInstance); + this.container.set(key, annotationInstance); + } else { + this.container.get(key)?.clear(); + } + }); + } + /** + * Update annotaions + */ + update() { + if (!this.container.size) return; + ANNOTATION_LIST.forEach((annotation) => { + const { key } = annotation; + const annotationInstance = this.container.get(key); + annotationInstance?.update(); + }); + } +} diff --git a/packages/plots/src/core/annotation/conversion-tag.ts b/packages/plots/src/core/annotation/conversion-tag.ts index 15d324036..46e26e4b3 100644 --- a/packages/plots/src/core/annotation/conversion-tag.ts +++ b/packages/plots/src/core/annotation/conversion-tag.ts @@ -1,7 +1,7 @@ -// @ts-expect-error -import { Text, Polygon, canvas as GCanvas } from '@antv/g'; import { Chart } from '@antv/g2'; import { get, isFunction } from '../utils'; +import { Text, Polygon } from './shapes'; +import { Annotaion } from './core'; type ShapeAttrs = Record; @@ -23,37 +23,14 @@ export type ConversionTagOptions = { style?: ShapeAttrs; }; -export class ConversionTag { - /** canvas 实例 */ - public canvas: GCanvas; - public chart: Chart; - public options: ConversionTagOptions; +export class ConversionTag extends Annotaion { + static tag = 'ConversionTag'; public direction: 'vertical' | 'horizontal'; - public container: Array = []; constructor(chart: Chart, options: ConversionTagOptions) { - if (!options) return; - this.chart = chart; - this.options = options; - this.init(); - } - public getElementsLayout() { - const elements = this.canvas.document.getElementsByClassName('element'); - const elementsLayout = []; - elements.forEach((element) => { - const bbox = element.getBBox(); - const { x, y, width, height } = bbox; - elementsLayout.push({ - bbox, - x, - y, - width, - height, - data: element['__data__'], - }); - }); - return elementsLayout; + super(chart, options, { type: ConversionTag.tag }); } + public getConversionTagLayout() { const isVertical = this.direction === 'vertical'; const elementsLayout = this.getElementsLayout(); @@ -64,10 +41,10 @@ export class ConversionTag { ? elementsLayout[1].y - firstY - firstHeigt : elementsLayout[1].x - firstX - firstWidth; const tagLayout = []; - const { size = 40, arrowSize = 20, spacing = 4 } = this.options; + const { size = 40, arrowSize = 20, spacing = 4 } = this.attributes; elementsLayout.forEach((element, index) => { if (index > 0) { - const { x, y, height, width, data } = element; + const { x, y, height, width, data, key } = element; const currentValue = get(data, valuePath); const halfSize = size / 2; @@ -85,6 +62,7 @@ export class ConversionTag { center: [arrowVertexX, arrowVertexY - elementDistance / 2 - spacing], width: elementDistance, value: [preValue, currentValue], + key, }); } else { const arrowVertexX = x; @@ -100,6 +78,7 @@ export class ConversionTag { center: [arrowVertexX - elementDistance / 2 - spacing, arrowVertexY], width: elementDistance, value: [preValue, currentValue], + key, }); } @@ -108,9 +87,7 @@ export class ConversionTag { }); return tagLayout; } - public init() { - const { canvas } = this.chart.getContext(); - this.canvas = canvas; + public render() { this.setDirection(); this.drawConversionTag(); } @@ -132,9 +109,9 @@ export class ConversionTag { const { style, text: { style: textStyle, formatter }, - } = this.options; + } = this.attributes; conversionLayout.forEach((layout) => { - const { points, center, value } = layout; + const { points, center, value, key } = layout; const [prev, next] = value; const [x, y] = center; const polygon = new Polygon({ @@ -143,28 +120,33 @@ export class ConversionTag { fill: '#eee', ...style, }, + id: `polygon-${key}`, }); const text = new Text({ style: { x, y, text: isFunction(formatter) ? formatter(prev, next) : ((next / prev) * 100).toFixed(2) + '%', - fontSize: 12, - textBaseline: 'middle', - textAlign: 'center', - fill: '#000', ...textStyle, }, + id: `text-${key}`, }); - this.canvas.appendChild(polygon); - this.canvas.appendChild(text); - this.container.push(polygon, text); + this.appendChild(polygon); + this.appendChild(text); }); } - public update(options: ConversionTagOptions) {} - public destroy() { - this.container.forEach((child) => { - child.destroy(); + + /** 仅仅更新位置即可 */ + public update() { + const conversionLayout = this.getConversionTagLayout(); + conversionLayout.forEach((layout) => { + const { points, center, key } = layout; + const [x, y] = center; + const polygon = this.getElementById(`polygon-${key}`); + const text = this.getElementById(`text-${key}`); + polygon.setAttribute('points', points); + text.setAttribute('x', x); + text.setAttribute('y', y); }); } } diff --git a/packages/plots/src/core/annotation/core.ts b/packages/plots/src/core/annotation/core.ts new file mode 100644 index 000000000..a438127fa --- /dev/null +++ b/packages/plots/src/core/annotation/core.ts @@ -0,0 +1,61 @@ +import { CustomElement, Group } from '@antv/g'; +import { Chart } from '@antv/g2'; +import { mergeWithArrayCoverage } from '../utils'; +import type { DisplayObjectConfig } from '@antv/g'; +import type { GenericAnimation, AnimationResult } from './type'; + +export abstract class Annotaion> extends CustomElement { + public chart: Chart; + + constructor(chart: Chart, config: DisplayObjectConfig, defaultOptions: DisplayObjectConfig) { + super({ style: mergeWithArrayCoverage(defaultOptions, config) }); + this.chart = chart; + } + + connectedCallback() { + this.render(this.attributes as Required, this); + this.bindEvents(this.attributes, this); + } + + disconnectedCallback(): void {} + + attributeChangedCallback(name: Key): void {} + + public getElementsLayout() { + const { canvas } = this.chart.getContext(); + const elements = canvas.document.getElementsByClassName('element'); + const elementsLayout = []; + elements.forEach((element) => { + // @ts-ignore + const bbox = element.getBBox(); + const { x, y, width, height } = bbox; + elementsLayout.push({ + bbox, + x, + y, + width, + height, + key: element['__data__'].key, + data: element['__data__'], + }); + }); + return elementsLayout; + } + + public update(attr?: Partial, animate?: GenericAnimation) { + this.attr(mergeWithArrayCoverage({}, this.attributes, attr || {})); + return this.render?.(this.attributes as Required, this, animate); + } + + public clear() { + this.removeChildren(); + } + + public abstract render( + attributes: Required, + container: Group, + animate?: GenericAnimation, + ): void | AnimationResult[]; + + public bindEvents(attributes: T, container: Group): void {} +} diff --git a/packages/plots/src/core/annotation/index.ts b/packages/plots/src/core/annotation/index.ts index 29feada5f..21f4df76c 100644 --- a/packages/plots/src/core/annotation/index.ts +++ b/packages/plots/src/core/annotation/index.ts @@ -1,4 +1,5 @@ import { ConversionTag } from './conversion-tag'; import { BidirectionalBarAxisText } from './bidirectional-bar-axis-text'; +export { Controller } from './controller'; export const Annotaion = { ConversionTag, BidirectionalBarAxisText }; diff --git a/packages/plots/src/core/annotation/shapes/Polygon.ts b/packages/plots/src/core/annotation/shapes/Polygon.ts new file mode 100644 index 000000000..472838aae --- /dev/null +++ b/packages/plots/src/core/annotation/shapes/Polygon.ts @@ -0,0 +1,14 @@ +import type { DisplayObjectConfig, PolygonStyleProps as GPolygonStyleProps } from '@antv/g'; +import { Polygon as GPolygon } from '@antv/g'; + +export class Polygon extends GPolygon { + constructor({ style, ...restOptions }: DisplayObjectConfig = {}) { + super({ + style: { + fill: '#eee', + ...style, + }, + ...restOptions, + }); + } +} diff --git a/packages/plots/src/core/annotation/shapes/Text.ts b/packages/plots/src/core/annotation/shapes/Text.ts new file mode 100644 index 000000000..710300a96 --- /dev/null +++ b/packages/plots/src/core/annotation/shapes/Text.ts @@ -0,0 +1,22 @@ +import type { DisplayObjectConfig, TextStyleProps as GTextStyleProps } from '@antv/g'; +import { Text as GText } from '@antv/g'; + +export class Text extends GText { + constructor({ style, ...restOptions }: DisplayObjectConfig = {}) { + super({ + style: { + text: '', + fontSize: 12, + textBaseline: 'middle', + textAlign: 'center', + fill: '#000', + fontStyle: 'normal', + fontVariant: 'normal', + fontWeight: 'normal', + lineWidth: 1, + ...style, + }, + ...restOptions, + }); + } +} diff --git a/packages/plots/src/core/annotation/shapes/index.ts b/packages/plots/src/core/annotation/shapes/index.ts new file mode 100644 index 000000000..71ae026e0 --- /dev/null +++ b/packages/plots/src/core/annotation/shapes/index.ts @@ -0,0 +1,2 @@ +export * from './Text'; +export * from './Polygon'; diff --git a/packages/plots/src/core/annotation/type.ts b/packages/plots/src/core/annotation/type.ts new file mode 100644 index 000000000..429c8a297 --- /dev/null +++ b/packages/plots/src/core/annotation/type.ts @@ -0,0 +1,13 @@ +import type { IAnimation } from '@antv/g'; + +export type GenericAnimation = false | KeyframeAnimationOptions; + +export type StandardAnimationOption = { + enter: GenericAnimation; + update: GenericAnimation; + exit: GenericAnimation; +}; + +export type AnimationOption = GenericAnimation | StandardAnimationOption; + +export type AnimationResult = IAnimation | null; diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 123d2fd94..370e88a93 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -1,8 +1,8 @@ import EE from '@antv/event-emitter'; import { ChartEvent } from '@antv/g2'; import { Chart } from './chart'; -import { Annotaion } from '../annotation'; -import { CHART_OPTIONS, ANNOTATION_LIST, SKIP_DEL_CUSTOM_SIGN } from '../constants'; +import { Controller as Annotaion } from '../annotation'; +import { CHART_OPTIONS, SKIP_DEL_CUSTOM_SIGN } from '../constants'; import { mergeWithArrayCoverage, pick } from '../utils'; import type { G2Chart } from './chart'; @@ -10,8 +10,6 @@ import type { Adaptor, Options } from '../types'; const SOURCE_ATTRIBUTE_NAME = 'data-chart-source-type'; -const ANNOTATION_MAP = new Map(); - type PickOptions = Pick; export abstract class Plot extends EE { /** plot 类型名称 */ @@ -22,6 +20,7 @@ export abstract class Plot extends EE { public options: O; /** G2 chart 实例 */ public chart: G2Chart; + public annotation: Annotaion; constructor(container: string | HTMLElement, options: O) { super(); @@ -98,28 +97,12 @@ export abstract class Plot extends EE { this.chart.options(this.getSpecOptions()); // 渲染 this.chart.render().then(() => { - this.annotations(); + this.annotation = new Annotaion(this.chart, this.options); }); // 绑定 this.bindSizeSensor(); } - /** - * annotaions - */ - public annotations(): void { - ANNOTATION_LIST.forEach((annotation) => { - const { key, shape } = annotation; - const annotationOptions = this.options[key]; - if (ANNOTATION_MAP.has(key)) { - ANNOTATION_MAP.get(key).destroy(); - } - if (annotationOptions) { - ANNOTATION_MAP.set(key, new Annotaion[shape](this.chart, annotationOptions)); - } - }); - } - /** * 更新 * @param options @@ -198,7 +181,7 @@ export abstract class Plot extends EE { const { autoFit = true } = this.options; if (autoFit) { this.chart.on(ChartEvent.AFTER_CHANGE_SIZE, () => { - this.annotations(); + this.annotation.update(); }); } } diff --git a/packages/plots/src/core/utils/delete-excess-keys.ts b/packages/plots/src/core/utils/delete-excess-keys.ts index 978f32ff7..111101506 100644 --- a/packages/plots/src/core/utils/delete-excess-keys.ts +++ b/packages/plots/src/core/utils/delete-excess-keys.ts @@ -1,4 +1,4 @@ -import { TRANSFORM_OPTION_KEY, VIEW_OPTIONS, CONFIG_SHAPE, COORDIANTE_OPTIONS } from '../constants'; +import { TRANSFORM_OPTION_KEY, VIEW_OPTIONS, CONFIG_SHAPE, COORDIANTE_OPTIONS, ANNOTATION_LIST } from '../constants'; import { Options } from '../types'; /** @@ -21,9 +21,9 @@ export const deleteExcessKeys = (options: O): O => { } }); }); - /** 删除不在 View 里面配置,避免多次 Transform & Scale 等 */ + /** 删除不在 View 和自定义 Annotations 里面配置,避免多次 Transform & Scale 等 */ Object.keys(options).forEach((key) => { - if (!VIEW_OPTIONS.includes(key)) { + if (![...VIEW_OPTIONS, ...ANNOTATION_LIST.map((item) => item.key)].includes(key)) { delete options[key]; } }); From b0996802b5d01cc53d57c8f778d4d0c32de4f05b Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 18 Dec 2023 10:03:39 +0800 Subject: [PATCH 157/268] chore: annotation (#2303) --- packages/plots/CHANGELOG.md | 8 ++++ packages/plots/package.json | 2 +- .../plots/src/core/annotation/controller.ts | 41 ------------------ packages/plots/src/core/annotation/core.ts | 37 ++++++++-------- packages/plots/src/core/annotation/index.ts | 43 ++++++++++++++++++- packages/util/package.json | 2 +- 6 files changed, 70 insertions(+), 63 deletions(-) delete mode 100644 packages/plots/src/core/annotation/controller.ts diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 18e698683..cc7c9f259 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.1.3 + +`2023-12-12` + +- 💄 代码逻辑优化 +- 🐞 修复 DualAxes Annotations 配置展示异常 + + ## 2.1.2 `2023-12-12` diff --git a/packages/plots/package.json b/packages/plots/package.json index 0d4d60cf9..1b9ffa41d 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.2", + "version": "2.1.3", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/annotation/controller.ts b/packages/plots/src/core/annotation/controller.ts deleted file mode 100644 index f2199bfbe..000000000 --- a/packages/plots/src/core/annotation/controller.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Chart } from '@antv/g2'; -import { ANNOTATION_LIST } from '../constants'; -import { Annotaion } from '.'; - -export class Controller { - public chart: Chart; - public config: T; - public container: Map = new Map(); - - constructor(chart: Chart, config: T) { - this.chart = chart; - this.config = config; - this.init(); - } - - init() { - ANNOTATION_LIST.forEach((annotation) => { - const { key, shape } = annotation; - const annotationOptions = this.config[key]; - if (annotationOptions) { - const annotationInstance = new Annotaion[shape](this.chart, annotationOptions); - const { canvas } = this.chart.getContext(); - canvas.appendChild(annotationInstance); - this.container.set(key, annotationInstance); - } else { - this.container.get(key)?.clear(); - } - }); - } - /** - * Update annotaions - */ - update() { - if (!this.container.size) return; - ANNOTATION_LIST.forEach((annotation) => { - const { key } = annotation; - const annotationInstance = this.container.get(key); - annotationInstance?.update(); - }); - } -} diff --git a/packages/plots/src/core/annotation/core.ts b/packages/plots/src/core/annotation/core.ts index a438127fa..d3c0ef742 100644 --- a/packages/plots/src/core/annotation/core.ts +++ b/packages/plots/src/core/annotation/core.ts @@ -21,41 +21,42 @@ export abstract class Annotaion> extends CustomEle attributeChangedCallback(name: Key): void {} + public update(attr?: Partial, animate?: GenericAnimation) { + this.attr(mergeWithArrayCoverage({}, this.attributes, attr || {})); + return this.render?.(this.attributes as Required, this, animate); + } + + public clear() { + this.removeChildren(); + } + + public abstract render( + attributes: Required, + container: Group, + animate?: GenericAnimation, + ): void | AnimationResult[]; + public getElementsLayout() { const { canvas } = this.chart.getContext(); const elements = canvas.document.getElementsByClassName('element'); const elementsLayout = []; elements.forEach((element) => { - // @ts-ignore + //@ts-expect-error const bbox = element.getBBox(); const { x, y, width, height } = bbox; + const data = element['__data__']; elementsLayout.push({ bbox, x, y, width, height, - key: element['__data__'].key, - data: element['__data__'], + key: data.key, + data, }); }); return elementsLayout; } - public update(attr?: Partial, animate?: GenericAnimation) { - this.attr(mergeWithArrayCoverage({}, this.attributes, attr || {})); - return this.render?.(this.attributes as Required, this, animate); - } - - public clear() { - this.removeChildren(); - } - - public abstract render( - attributes: Required, - container: Group, - animate?: GenericAnimation, - ): void | AnimationResult[]; - public bindEvents(attributes: T, container: Group): void {} } diff --git a/packages/plots/src/core/annotation/index.ts b/packages/plots/src/core/annotation/index.ts index 21f4df76c..26cbff211 100644 --- a/packages/plots/src/core/annotation/index.ts +++ b/packages/plots/src/core/annotation/index.ts @@ -1,5 +1,44 @@ +import { Chart } from '@antv/g2'; +import { ANNOTATION_LIST } from '../constants'; import { ConversionTag } from './conversion-tag'; import { BidirectionalBarAxisText } from './bidirectional-bar-axis-text'; -export { Controller } from './controller'; -export const Annotaion = { ConversionTag, BidirectionalBarAxisText }; +const Annotaion = { ConversionTag, BidirectionalBarAxisText }; + +export class Controller { + public chart: Chart; + public config: T; + public container: Map = new Map(); + + constructor(chart: Chart, config: T) { + this.chart = chart; + this.config = config; + this.init(); + } + + init() { + ANNOTATION_LIST.forEach((annotation) => { + const { key, shape } = annotation; + const annotationOptions = this.config[key]; + if (annotationOptions) { + const annotationInstance = new Annotaion[shape](this.chart, annotationOptions); + const { canvas } = this.chart.getContext(); + canvas.appendChild(annotationInstance); + this.container.set(key, annotationInstance); + } else { + this.container.get(key)?.clear(); + } + }); + } + /** + * Update annotaions + */ + update() { + if (!this.container.size) return; + ANNOTATION_LIST.forEach((annotation) => { + const { key } = annotation; + const annotationInstance = this.container.get(key); + annotationInstance?.update(); + }); + } +} diff --git a/packages/util/package.json b/packages/util/package.json index 9408a6e17..46d07a7f9 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/charts-util", - "version": "0.0.1-alpha.4", + "version": "0.0.1-alpha.5", "description": "charts utils", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From b9690f79abe2228eb6167806cd8390b38468be1f Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:59:11 +0800 Subject: [PATCH 158/268] release: change log (#2304) --- packages/charts/CHANGELOG.md | 11 +++++++++++ packages/charts/package.json | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 packages/charts/CHANGELOG.md diff --git a/packages/charts/CHANGELOG.md b/packages/charts/CHANGELOG.md new file mode 100644 index 000000000..cd3ecc618 --- /dev/null +++ b/packages/charts/CHANGELOG.md @@ -0,0 +1,11 @@ +## 2.0.3 + +`2023-12-18` + +- 🐞 修复 plots 依赖版本问题 + +## 2.0.0 + +`2023-11-22` + +- 🔥 2.0 正式版本发布,目前已完成统计图表的升级,关系图、地理可视化、流程图等会在后续次版本更新,[next 版本官网](https://ant-design-charts-next.antgroup.com/) diff --git a/packages/charts/package.json b/packages/charts/package.json index 9c3ae6d7c..fc730679e 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@ant-design/charts", - "version": "2.0.2", + "version": "2.0.3", "description": "AntV upper level visual component library", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" @@ -30,7 +30,7 @@ "lib:es": "tsc -p tsconfig.json --target ES5 --module ESNext --outDir es" }, "dependencies": { - "@ant-design/plots": "workspace:*" + "@ant-design/plots": "^2.1.3" }, "peerDependencies": { "lodash-es": "^4.17.21", From aeb06fcb996068bf013eef719a510654c938025e Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 22 Dec 2023 10:15:26 +0800 Subject: [PATCH 159/268] fix: connect null type (#2307) --- packages/plots/src/core/plots/area/type.ts | 6 +++++- packages/plots/src/core/plots/line/type.ts | 9 +++++++-- packages/plots/src/core/types/common.ts | 15 +++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/plots/src/core/plots/area/type.ts b/packages/plots/src/core/plots/area/type.ts index 5edb9890c..5aa7f71be 100644 --- a/packages/plots/src/core/plots/area/type.ts +++ b/packages/plots/src/core/plots/area/type.ts @@ -1,8 +1,12 @@ -import type { Options } from '../../types/common'; +import type { Options, ConnectNulls } from '../../types/common'; export type AreaOptions = Omit & { /** * @title y轴字段 */ readonly yField?: string | string[]; + /** + * @title 链接空值 + */ + readonly connectNulls?: ConnectNulls; }; diff --git a/packages/plots/src/core/plots/line/type.ts b/packages/plots/src/core/plots/line/type.ts index b73f2121a..eebf4a77c 100644 --- a/packages/plots/src/core/plots/line/type.ts +++ b/packages/plots/src/core/plots/line/type.ts @@ -1,3 +1,8 @@ -import type { Options } from '../../types/common'; +import type { Options, ConnectNulls } from '../../types/common'; -export type LineOptions = Options; +export type LineOptions = Options & { + /** + * @title 链接空值 + */ + readonly connectNulls?: ConnectNulls; +}; diff --git a/packages/plots/src/core/types/common.ts b/packages/plots/src/core/types/common.ts index 4bfb89308..4368ac947 100644 --- a/packages/plots/src/core/types/common.ts +++ b/packages/plots/src/core/types/common.ts @@ -100,3 +100,18 @@ export type Adaptor

= { }; export type AttrStyle = Record; + +export type ConnectNulls = + | true + | { + connect: true; + /** + * @title 连线样式 + * @description 和 canvas path 一致,但需要加上 connect 前缀 + * @example + * - connectStroke: '#ccc' + * - connectLineWidth: 1 + * - connectLineDash: [ 4, 4 ] + */ + [key: string]: any; + }; From dbde6e19db25294141d7c18adcb4539e1b059cbe Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 25 Dec 2023 10:34:29 +0800 Subject: [PATCH 160/268] feat: measure text width (#2319) * feat: measure text width util * changelog --- packages/plots/CHANGELOG.md | 8 ++++++++ packages/plots/package.json | 2 +- packages/plots/src/core/utils/context.ts | 12 ++++++++++++ packages/plots/src/core/utils/index.ts | 3 +++ packages/plots/src/core/utils/measure-text.ts | 19 +++++++++++++++++++ packages/plots/src/index.ts | 3 +++ 6 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 packages/plots/src/core/utils/context.ts create mode 100644 packages/plots/src/core/utils/measure-text.ts diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index cc7c9f259..7abcfc6de 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.1.4 + +`2023-12-25` + +- 🐞 修复 [measureTextWidth](https://github.com/ant-design/ant-design-charts/issues/2316) 丢失 +- 🐞 修复 [connectNulls](https://github.com/ant-design/ant-design-charts/issues/2305) 类型错误 + + ## 2.1.3 `2023-12-12` diff --git a/packages/plots/package.json b/packages/plots/package.json index 1b9ffa41d..147316692 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.3", + "version": "2.1.4", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/utils/context.ts b/packages/plots/src/core/utils/context.ts new file mode 100644 index 000000000..f5cb43df8 --- /dev/null +++ b/packages/plots/src/core/utils/context.ts @@ -0,0 +1,12 @@ +let ctx: CanvasRenderingContext2D; + +/** + * 获取 canvas context + */ +export const getCanvasContext = () => { + if (!ctx) { + ctx = document.createElement('canvas').getContext('2d'); + } + + return ctx; +}; diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 3aa80ebf8..5e229545a 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -25,6 +25,8 @@ export { reduce, isNil, mergeWith, + memoize, + values, } from 'lodash-es'; export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; @@ -32,3 +34,4 @@ export { deleteExcessKeys } from './delete-excess-keys'; export { filterTransformed } from './filter-transformed'; export { conversionTagFormatter } from './conversion'; export { mergeWithArrayCoverage } from './merge-with-array-coverage'; +export { measureTextWidth } from './measure-text'; diff --git a/packages/plots/src/core/utils/measure-text.ts b/packages/plots/src/core/utils/measure-text.ts new file mode 100644 index 000000000..db3b3f3dc --- /dev/null +++ b/packages/plots/src/core/utils/measure-text.ts @@ -0,0 +1,19 @@ +import { isString, memoize, values } from '../utils'; +import { getCanvasContext } from './context'; + +/** + * 计算文本在画布中的宽度 + * @param text 文本 + * @param font 字体 + */ +export const measureTextWidth = memoize( + (text: string, font: any = {}): number => { + const { fontSize, fontFamily = 'sans-serif', fontWeight, fontStyle, fontVariant } = font; + const ctx = getCanvasContext(); + // @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/font + ctx.font = [fontStyle, fontWeight, fontVariant, `${fontSize}px`, fontFamily].join(' '); + const metrics = ctx.measureText(isString(text) ? text : ''); + return metrics.width; + }, + (text: string, font = {}) => [text, ...values(font)].join(''), +); diff --git a/packages/plots/src/index.ts b/packages/plots/src/index.ts index 70d1725c9..7aaa44a4b 100644 --- a/packages/plots/src/index.ts +++ b/packages/plots/src/index.ts @@ -3,3 +3,6 @@ export * as G2 from '@antv/g2'; export * from './components'; export * from './interface'; + +/** utils */ +export { measureTextWidth } from './core/utils'; From 925bede2aeae632a780fa150c934d6cbddc1f453 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 27 Dec 2023 14:55:11 +0800 Subject: [PATCH 161/268] fix: common data type (#2321) --- packages/plots/src/interface.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/plots/src/interface.ts b/packages/plots/src/interface.ts index e60c51949..58c955fde 100644 --- a/packages/plots/src/interface.ts +++ b/packages/plots/src/interface.ts @@ -1,4 +1,4 @@ -import { TooltipComponent } from '@antv/g2'; +import type { TooltipComponent, Data as G2Data } from '@antv/g2'; import { Options, Spec } from './core'; /** @@ -93,12 +93,12 @@ export interface AttachConfig { */ export type PlotEvent = any; // 来自 G2 ,临时使用 any -export type Datum = any; // 来自 G2 ,临时使用 any +export type Datum = G2Data | any[]; type TransformType = T extends object ? { [P in keyof T]: TransformType } : T; export interface Common extends AttachConfig, ContainerConfig { - data?: Datum[]; + data?: Datum; /** * @title 内部属性,只读 */ From 67928ab356fc0da1983a070208a085fd2b02aec3 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 27 Dec 2023 15:09:09 +0800 Subject: [PATCH 162/268] feat: link color field (#2323) --- package.json | 3 ++- packages/plots/CHANGELOG.md | 7 +++++++ packages/plots/package.json | 2 +- packages/plots/src/core/constants/index.ts | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9966a8858..bd448218e 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "prettier": "prettier --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", "ci:version": "pnpm changeset version", "add:changelog": "pnpm changeset", - "release": "pnpm publish --no-git-checks -r --filter @ant-design/*", + "before:release": "pnpm run build", + "release": "pnpm run before:release && pnpm publish --no-git-checks -r --filter @ant-design/*", "release:alpha": "pnpm publish --tag alpha --no-git-checks -r --filter @ant-design/*", "release:beta": "pnpm publish --tag beta --no-git-checks -r --filter @ant-design/*" }, diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 7abcfc6de..c7b6dc0ee 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.1.5 + +`2023-12-27` + +- 🔥 新增 linkColorField 配置,用于指定 link 颜色跟随节点 +- 🐞 修复 [Snakey data](https://github.com/ant-design/ant-design-charts/issues/2320) 类型错误 + ## 2.1.4 `2023-12-25` diff --git a/packages/plots/package.json b/packages/plots/package.json index 147316692..cc64d1630 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.4", + "version": "2.1.5", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 5082252f5..ff9f8ab4b 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -71,6 +71,7 @@ export const TRANSFORM_OPTION_KEY = { valueField: 'encode.value', binField: 'encode.x', srcField: 'encode.src', + linkColorField: 'encode.linkColor', /** * @title 堆叠 * @example From a4c3b291d418446268f46ce1dd1a637606bc6d0d Mon Sep 17 00:00:00 2001 From: Richie Date: Wed, 3 Jan 2024 19:44:42 -0800 Subject: [PATCH 163/268] Fix typo in useChart.ts (#2329) --- packages/plots/src/hooks/useChart.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 01fcf2a5f..c6fcd602e 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -19,7 +19,7 @@ export default function useChart(ChartC }; /** - * Download Iamge + * Download Image * @param {string} name A name of image * @param {string} type A DOMString indicating the image format. The default format type is image/png. * @param {number} encoderOptions A Number between 0 and 1 indicating the image quality From aaf19b2c1eb4e966ae9e2d5d027e493ba8bc149f Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 4 Jan 2024 22:20:05 +0800 Subject: [PATCH 164/268] feat: opt api (#2335) --- site/.dumirc.ts | 2 +- site/docs/options/plots/common/overview.en.md | 1 + site/docs/options/plots/common/overview.zh.md | 27 +++++++++++ site/docs/options/plots/overview.zh.md | 46 +++++++++---------- site/docs/options/plots/special/bar.zh.md | 4 +- .../plots/special/bidirectional-bar.zh.md | 6 ++- site/docs/options/plots/special/box.zh.md | 4 +- site/docs/options/plots/special/bullet.zh.md | 18 ++++---- site/docs/options/plots/special/column.zh.md | 4 +- site/docs/options/plots/special/funnel.zh.md | 6 ++- site/docs/options/plots/special/heatmap.zh.md | 4 +- .../options/plots/special/histogram.zh.md | 8 ++-- site/docs/options/plots/special/liquid.zh.md | 4 +- site/docs/options/plots/special/pie.zh.md | 8 ++-- site/docs/options/plots/special/radar.zh.md | 4 +- .../options/plots/special/radial-bar.zh.md | 4 +- site/docs/options/plots/special/stock.zh.md | 8 ++-- .../options/plots/special/tiny-progress.en.md | 6 --- .../options/plots/special/tiny-progress.zh.md | 17 ------- .../options/plots/special/tiny-ring.en.md | 6 --- site/docs/options/plots/special/tiny.en.md | 6 +++ .../special/{tiny-ring.zh.md => tiny.zh.md} | 10 ++-- site/docs/options/plots/special/violin.zh.md | 4 +- .../options/plots/special/waterfall.zh.md | 6 ++- site/examples/statistics/area/API.en.md | 1 + site/examples/statistics/area/API.zh.md | 1 + site/examples/statistics/bar/API.en.md | 3 +- site/examples/statistics/bar/API.zh.md | 3 +- site/examples/statistics/base/API.en.md | 2 +- site/examples/statistics/base/API.zh.md | 2 +- .../statistics/bidirectional-bar/API.en.md | 3 +- .../statistics/bidirectional-bar/API.zh.md | 3 +- site/examples/statistics/box/API.en.md | 3 +- site/examples/statistics/box/API.zh.md | 3 +- site/examples/statistics/bullet/API.en.md | 3 +- site/examples/statistics/bullet/API.zh.md | 3 +- .../statistics/circle-packing/API.en.md | 1 + .../statistics/circle-packing/API.zh.md | 1 + site/examples/statistics/column/API.en.md | 3 +- site/examples/statistics/column/API.zh.md | 3 +- site/examples/statistics/dual-axes/API.en.md | 2 +- site/examples/statistics/dual-axes/API.zh.md | 2 +- site/examples/statistics/funnel/API.en.md | 1 + site/examples/statistics/funnel/API.zh.md | 1 + site/examples/statistics/gauge/API.en.md | 1 + site/examples/statistics/gauge/API.zh.md | 1 + site/examples/statistics/heatmap/API.en.md | 3 +- site/examples/statistics/heatmap/API.zh.md | 3 +- site/examples/statistics/histogram/API.en.md | 1 + site/examples/statistics/histogram/API.zh.md | 1 + site/examples/statistics/line/API.en.md | 2 +- site/examples/statistics/line/API.zh.md | 2 +- site/examples/statistics/liquid/API.en.md | 1 + site/examples/statistics/liquid/API.zh.md | 1 + site/examples/statistics/pie/API.en.md | 3 +- site/examples/statistics/pie/API.zh.md | 3 +- site/examples/statistics/radar/API.en.md | 3 +- site/examples/statistics/radar/API.zh.md | 3 +- site/examples/statistics/radial-bar/API.en.md | 1 + site/examples/statistics/radial-bar/API.zh.md | 1 + site/examples/statistics/rose/API.en.md | 2 +- site/examples/statistics/rose/API.zh.md | 2 +- site/examples/statistics/sankey/API.en.md | 1 + site/examples/statistics/sankey/API.zh.md | 1 + site/examples/statistics/scatter/API.en.md | 2 +- site/examples/statistics/scatter/API.zh.md | 2 +- site/examples/statistics/stock/API.en.md | 1 + site/examples/statistics/stock/API.zh.md | 1 + site/examples/statistics/sunburst/API.en.md | 1 + site/examples/statistics/sunburst/API.zh.md | 1 + site/examples/statistics/tiny/API.en.md | 3 +- site/examples/statistics/tiny/API.zh.md | 3 +- site/examples/statistics/treemap/API.en.md | 1 + site/examples/statistics/treemap/API.zh.md | 1 + site/examples/statistics/venn/API.en.md | 1 + site/examples/statistics/venn/API.zh.md | 1 + site/examples/statistics/violin/API.en.md | 1 + site/examples/statistics/violin/API.zh.md | 1 + site/examples/statistics/waterfall/API.en.md | 3 +- site/examples/statistics/waterfall/API.zh.md | 3 +- site/examples/statistics/wordCloud/API.en.md | 1 + site/examples/statistics/wordCloud/API.zh.md | 1 + site/package.json | 2 +- 83 files changed, 204 insertions(+), 119 deletions(-) create mode 100644 site/docs/options/plots/common/overview.en.md create mode 100644 site/docs/options/plots/common/overview.zh.md delete mode 100644 site/docs/options/plots/special/tiny-progress.en.md delete mode 100644 site/docs/options/plots/special/tiny-progress.zh.md delete mode 100644 site/docs/options/plots/special/tiny-ring.en.md create mode 100644 site/docs/options/plots/special/tiny.en.md rename site/docs/options/plots/special/{tiny-ring.zh.md => tiny.zh.md} (78%) create mode 100644 site/examples/statistics/area/API.en.md create mode 100644 site/examples/statistics/area/API.zh.md create mode 100644 site/examples/statistics/circle-packing/API.en.md create mode 100644 site/examples/statistics/circle-packing/API.zh.md create mode 100644 site/examples/statistics/funnel/API.en.md create mode 100644 site/examples/statistics/funnel/API.zh.md create mode 100644 site/examples/statistics/gauge/API.en.md create mode 100644 site/examples/statistics/gauge/API.zh.md create mode 100644 site/examples/statistics/histogram/API.en.md create mode 100644 site/examples/statistics/histogram/API.zh.md create mode 100644 site/examples/statistics/liquid/API.en.md create mode 100644 site/examples/statistics/liquid/API.zh.md create mode 100644 site/examples/statistics/radial-bar/API.en.md create mode 100644 site/examples/statistics/radial-bar/API.zh.md create mode 100644 site/examples/statistics/sankey/API.en.md create mode 100644 site/examples/statistics/sankey/API.zh.md create mode 100644 site/examples/statistics/stock/API.en.md create mode 100644 site/examples/statistics/stock/API.zh.md create mode 100644 site/examples/statistics/sunburst/API.en.md create mode 100644 site/examples/statistics/sunburst/API.zh.md create mode 100644 site/examples/statistics/treemap/API.en.md create mode 100644 site/examples/statistics/treemap/API.zh.md create mode 100644 site/examples/statistics/venn/API.en.md create mode 100644 site/examples/statistics/venn/API.zh.md create mode 100644 site/examples/statistics/violin/API.en.md create mode 100644 site/examples/statistics/violin/API.zh.md create mode 100644 site/examples/statistics/wordCloud/API.en.md create mode 100644 site/examples/statistics/wordCloud/API.zh.md diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 77c99880e..6e9906ab4 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -21,7 +21,7 @@ export default defineConfig({ showLanguageSwitcher: true, // 是否显示官网语言切换 showWxQrcode: true, // 是否显示头部菜单的微信公众号 showChartResize: true, // 是否在 demo 页展示图表视图切换 - showAPIDoc: true, + showAPIDoc: process.env.NODE_ENV === 'production', // 是否在 demo 页展示 API 说明 versions: { [version]: 'https://ant-design-charts-next.antgroup.com', '1.x': 'https://ant-design-charts.antgroup.com', diff --git a/site/docs/options/plots/common/overview.en.md b/site/docs/options/plots/common/overview.en.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/docs/options/plots/common/overview.en.md @@ -0,0 +1 @@ + diff --git a/site/docs/options/plots/common/overview.zh.md b/site/docs/options/plots/common/overview.zh.md new file mode 100644 index 000000000..6897cd973 --- /dev/null +++ b/site/docs/options/plots/common/overview.zh.md @@ -0,0 +1,27 @@ +# 通用配置 + + + +# 坐标轴 + + + +# 图例 + + + +# 滚动条 + + + +# 提示 + + + +# 数据标签 + + + +# 更多 + +详见[选项](/options) diff --git a/site/docs/options/plots/overview.zh.md b/site/docs/options/plots/overview.zh.md index ddebf20ae..069e52982 100644 --- a/site/docs/options/plots/overview.zh.md +++ b/site/docs/options/plots/overview.zh.md @@ -3,35 +3,35 @@ title: 概览 order: 1 --- -### 图表容器 +## 图表容器 -#### width +### width **optional** *number* *default:* `400` 设置图表宽度。 -#### height +### height **optional** *number* *default:* `400` 设置图表高度。 -#### autoFit +### autoFit **optional** *boolean* *default:* `true` 图表是否自适应容器宽高。当 `autoFit` 设置为 true 时,`width` 和 `height` 的设置将失效。 -#### renderer +### renderer **optional** *string* *default:* `canvas` 设置图表渲染方式为 `canvas` 或 `svg`。 -### 视图模型 +## 视图模型 G2 中的视图模型定义了一个视图的划分方式,划分得到的不同区域会绘制不同的东西,也通过不同的选项去设置。现在可以简单的把视图理解为一个图表。G2 的视图模型如下: @@ -82,56 +82,56 @@ const contentHeight = insetBottom; ``` -### 数据映射 +## 数据映射 -#### data +### data **required** *array object* 设置图表数据源。数据源为对象集合,例如:`[{ time: '1991',value: 20 }, { time: '1992',value: 20 }]`。 -#### xField +### xField **required** *string* 图形在 x 方向对应的数据字段名,一般是横向的坐标轴对应的字段。比如:要看不同班级的人数情况,那么班级字段就是对应的 xField。 -#### yField +### yField **required** *string* 图形在 y 方向对应的数据字段名,一般是纵向的坐标轴对应的字段。比如:要看不同班级的人数情况,那么人数字段就是对应的 yField。 -#### seriesField +### seriesField **optional** *string* 分组字段。比如:我们需要分析不同`省份`的交易额趋势,那么`省份字段`就是分组字段。 -### 图形样式 +## 图形样式 -#### shapeField +### shapeField **optional** *string* 指定 line 是否平滑,点图形状等 -#### colorField +### colorField **optional** *string* 指定颜色通道字段 -#### sizeField +### sizeField **optional** *string* 指定尺寸通道字段 -#### stack +### stack **optional** *boolean | StackYTransform* @@ -148,7 +148,7 @@ type StackYTransform = { }; ``` -#### normalize +### normalize **optional** *boolean | NormalizeYTransform* @@ -162,7 +162,7 @@ type NormalizeYTransform = { }; ``` -#### sort +### sort **optional** *boolean | SortByTransform* @@ -175,7 +175,7 @@ type SortByTransform = { }; ``` -#### group +### group **optional** *boolean | DodgeXTransform* @@ -190,7 +190,7 @@ type DodgeXTransform = { }; ``` -#### percent +### percent **optional** *boolean* *default:* `true` @@ -198,13 +198,13 @@ type DodgeXTransform = { -#### line +### line **optional** *Line* 线条,一般用于面积图中添加线条 -#### point +### point **optional** *Point* @@ -212,7 +212,7 @@ type DodgeXTransform = { -### 状态 +## 状态 **可选** *object* diff --git a/site/docs/options/plots/special/bar.zh.md b/site/docs/options/plots/special/bar.zh.md index cf97f80ba..36f981f0e 100644 --- a/site/docs/options/plots/special/bar.zh.md +++ b/site/docs/options/plots/special/bar.zh.md @@ -3,7 +3,9 @@ title: Bar order: 0 --- -#### markBackground +## 特有 + +### markBackground **optional** *BarOptions* diff --git a/site/docs/options/plots/special/bidirectional-bar.zh.md b/site/docs/options/plots/special/bidirectional-bar.zh.md index 16eef1797..87a3b3227 100644 --- a/site/docs/options/plots/special/bidirectional-bar.zh.md +++ b/site/docs/options/plots/special/bidirectional-bar.zh.md @@ -3,14 +3,16 @@ title: BidirectionalBar order: 3 --- -#### yField +## 特有 + +### yField **optional** *string[]* Y 轴字段 -#### layout +### layout **optional** *vertical | horizontal* **default** *vertical* diff --git a/site/docs/options/plots/special/box.zh.md b/site/docs/options/plots/special/box.zh.md index bfcace88c..73e963b6e 100644 --- a/site/docs/options/plots/special/box.zh.md +++ b/site/docs/options/plots/special/box.zh.md @@ -3,7 +3,9 @@ title: Box order: 4 --- -#### boxType +## 特有 + +### boxType **optional** *boxplot | box* **default** *box* diff --git a/site/docs/options/plots/special/bullet.zh.md b/site/docs/options/plots/special/bullet.zh.md index 45af2eb1b..606a5a794 100644 --- a/site/docs/options/plots/special/bullet.zh.md +++ b/site/docs/options/plots/special/bullet.zh.md @@ -3,32 +3,34 @@ title: Bullet order: 5 --- -#### measureField +## 特有 + +### measureField **required** _string_ 使用数据条的长度,实际数值的设置字段,表示实际数值。 -#### rangeField +### rangeField **required** _string_ 使用背景色条的长度的设置字段,表示区间范围。 -#### targetField +### targetField **required** _string_ 使用测量标记的刻度轴位置的设置字段,表示目标值。 -#### layout +### layout **optional** _'horizontal' | 'vertical'_ _default:_ 'horizontal' 表示子弹图方向。 -#### color +### color **optional** _object_ @@ -41,20 +43,20 @@ order: 5 | target | _string\|string[]_ | 目标值颜色 | 无 | -#### range +### range **required** _BulletOptions_ range 配置 -#### measure +### measure **required** _BulletOptions_ measure 配置 -#### target +### target **required** _BulletOptions_ diff --git a/site/docs/options/plots/special/column.zh.md b/site/docs/options/plots/special/column.zh.md index 2d41f06d9..a4532e6e6 100644 --- a/site/docs/options/plots/special/column.zh.md +++ b/site/docs/options/plots/special/column.zh.md @@ -4,7 +4,9 @@ order: 1 --- -#### markBackground +## 特有 + +### markBackground **optional** *ColumnOptions* diff --git a/site/docs/options/plots/special/funnel.zh.md b/site/docs/options/plots/special/funnel.zh.md index 07d481c10..a28b6234c 100644 --- a/site/docs/options/plots/special/funnel.zh.md +++ b/site/docs/options/plots/special/funnel.zh.md @@ -3,13 +3,15 @@ title: Funnel order: 6 --- -#### compareField +## 特有 + +### compareField **optional** _string_ 对比字段。声明此字段时会自动渲染为对比漏斗图 -#### isTransposed +### isTransposed **optional** _boolean_ _default:_ `false` diff --git a/site/docs/options/plots/special/heatmap.zh.md b/site/docs/options/plots/special/heatmap.zh.md index f7bb46d03..56b956ec2 100644 --- a/site/docs/options/plots/special/heatmap.zh.md +++ b/site/docs/options/plots/special/heatmap.zh.md @@ -3,7 +3,9 @@ title: Heatmap order: 7 --- -#### mark +## 特有 + +### mark **optional** _string_ diff --git a/site/docs/options/plots/special/histogram.zh.md b/site/docs/options/plots/special/histogram.zh.md index 9f5809755..fe0262ced 100644 --- a/site/docs/options/plots/special/histogram.zh.md +++ b/site/docs/options/plots/special/histogram.zh.md @@ -3,19 +3,21 @@ title: Histogram order: 8 --- -#### binField +## 特有 + +### binField **required** _string_ 设置直方图绘制 (进行分箱) 的字段。 -#### binWidth +### binWidth **optional** _string_ 设置直方图的分箱宽度,binWidth 影响直方图分成多少箱, 不能与 binNumber 一起使用。 -#### binNumber +### binNumber **optional** _number_ diff --git a/site/docs/options/plots/special/liquid.zh.md b/site/docs/options/plots/special/liquid.zh.md index 14e5e6148..b4313929d 100644 --- a/site/docs/options/plots/special/liquid.zh.md +++ b/site/docs/options/plots/special/liquid.zh.md @@ -3,7 +3,9 @@ title: Liquid order: 9 --- -#### percent +## 特有 + +### percent **required** _number_ diff --git a/site/docs/options/plots/special/pie.zh.md b/site/docs/options/plots/special/pie.zh.md index a7e3b60d7..4511090be 100644 --- a/site/docs/options/plots/special/pie.zh.md +++ b/site/docs/options/plots/special/pie.zh.md @@ -3,20 +3,22 @@ title: Pie order: 2 --- -#### angleField +## 特有 + +### angleField **optional** *string* 角度映射字段 -#### radius +### radius **optional** *number* **default** *1* 饼图半径[0~1] -#### innerRadius +### innerRadius **optional** *number* diff --git a/site/docs/options/plots/special/radar.zh.md b/site/docs/options/plots/special/radar.zh.md index a68af8e79..30fa89767 100644 --- a/site/docs/options/plots/special/radar.zh.md +++ b/site/docs/options/plots/special/radar.zh.md @@ -3,7 +3,9 @@ title: Radar order: 10 --- -#### coordinateType +## 特有 + +### coordinateType **required** _radar | polar_ diff --git a/site/docs/options/plots/special/radial-bar.zh.md b/site/docs/options/plots/special/radial-bar.zh.md index cda852a6c..39fe9e61b 100644 --- a/site/docs/options/plots/special/radial-bar.zh.md +++ b/site/docs/options/plots/special/radial-bar.zh.md @@ -3,7 +3,9 @@ title: RadialBar order: 21 --- -#### markBackground +## 特有 + +### markBackground **optional** *BarOptions* diff --git a/site/docs/options/plots/special/stock.zh.md b/site/docs/options/plots/special/stock.zh.md index cfc4a775b..94a14f0e1 100644 --- a/site/docs/options/plots/special/stock.zh.md +++ b/site/docs/options/plots/special/stock.zh.md @@ -4,19 +4,21 @@ order: 10 --- -#### yField +## 特有 + +### yField **required** *string[]* 设置一个指定 [开盘价, 收盘价, 最高价, 最低价] 字段的数组 -#### risingFill +### risingFill **optional** *string* 上涨色 -#### fallingFill +### fallingFill **optional** *string* diff --git a/site/docs/options/plots/special/tiny-progress.en.md b/site/docs/options/plots/special/tiny-progress.en.md deleted file mode 100644 index d750563bf..000000000 --- a/site/docs/options/plots/special/tiny-progress.en.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: TinyProgress -order: 11 ---- - - \ No newline at end of file diff --git a/site/docs/options/plots/special/tiny-progress.zh.md b/site/docs/options/plots/special/tiny-progress.zh.md deleted file mode 100644 index eb091e9be..000000000 --- a/site/docs/options/plots/special/tiny-progress.zh.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: TinyProgress -order: 11 ---- - -#### percent - -**required** _number_ - -进度 - - -#### color - -**required** _string[]_ - -配色 diff --git a/site/docs/options/plots/special/tiny-ring.en.md b/site/docs/options/plots/special/tiny-ring.en.md deleted file mode 100644 index 1d5539811..000000000 --- a/site/docs/options/plots/special/tiny-ring.en.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: TinyRing -order: 12 ---- - - \ No newline at end of file diff --git a/site/docs/options/plots/special/tiny.en.md b/site/docs/options/plots/special/tiny.en.md new file mode 100644 index 000000000..3820d5704 --- /dev/null +++ b/site/docs/options/plots/special/tiny.en.md @@ -0,0 +1,6 @@ +--- +title: Tiny +order: 12 +--- + + diff --git a/site/docs/options/plots/special/tiny-ring.zh.md b/site/docs/options/plots/special/tiny.zh.md similarity index 78% rename from site/docs/options/plots/special/tiny-ring.zh.md rename to site/docs/options/plots/special/tiny.zh.md index 7b2df923d..a75aca9f2 100644 --- a/site/docs/options/plots/special/tiny-ring.zh.md +++ b/site/docs/options/plots/special/tiny.zh.md @@ -1,22 +1,24 @@ --- -title: TinyRing +title: Tiny order: 12 --- -#### percent +## 特有 + +### percent **required** _number_ 进度 -#### color +### color **required** _string[]_ 配色 -#### radius +### radius **required** _number_ **default** _0.8_ diff --git a/site/docs/options/plots/special/violin.zh.md b/site/docs/options/plots/special/violin.zh.md index e0bcd6b9f..e255bf85b 100644 --- a/site/docs/options/plots/special/violin.zh.md +++ b/site/docs/options/plots/special/violin.zh.md @@ -3,7 +3,9 @@ title: Violin order: 13 --- -#### violinType +## 特有 + +### violinType **required** _normal | density | polar_ diff --git a/site/docs/options/plots/special/waterfall.zh.md b/site/docs/options/plots/special/waterfall.zh.md index bdc33d6f3..bf07b3cea 100644 --- a/site/docs/options/plots/special/waterfall.zh.md +++ b/site/docs/options/plots/special/waterfall.zh.md @@ -3,13 +3,15 @@ title: Waterfall order: 14 --- -#### linkStyle +## 特有 + +### linkStyle **required** _attrStyle_ 连线样式 -#### xField +### xField **required** _string | string[]_ diff --git a/site/examples/statistics/area/API.en.md b/site/examples/statistics/area/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/area/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/area/API.zh.md b/site/examples/statistics/area/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/area/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/bar/API.en.md b/site/examples/statistics/bar/API.en.md index 60be19afe..85b27cd8a 100644 --- a/site/examples/statistics/bar/API.en.md +++ b/site/examples/statistics/bar/API.en.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/bar/API.zh.md b/site/examples/statistics/bar/API.zh.md index 04ad03f4e..0e8937fd1 100644 --- a/site/examples/statistics/bar/API.zh.md +++ b/site/examples/statistics/bar/API.zh.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/base/API.en.md b/site/examples/statistics/base/API.en.md index 1bfbf00ff..eb88c070c 100644 --- a/site/examples/statistics/base/API.en.md +++ b/site/examples/statistics/base/API.en.md @@ -1 +1 @@ - \ No newline at end of file + diff --git a/site/examples/statistics/base/API.zh.md b/site/examples/statistics/base/API.zh.md index 64b12ce7f..a8382b46d 100644 --- a/site/examples/statistics/base/API.zh.md +++ b/site/examples/statistics/base/API.zh.md @@ -1 +1 @@ - \ No newline at end of file + diff --git a/site/examples/statistics/bidirectional-bar/API.en.md b/site/examples/statistics/bidirectional-bar/API.en.md index f53fad132..54832197b 100644 --- a/site/examples/statistics/bidirectional-bar/API.en.md +++ b/site/examples/statistics/bidirectional-bar/API.en.md @@ -1 +1,2 @@ - + + diff --git a/site/examples/statistics/bidirectional-bar/API.zh.md b/site/examples/statistics/bidirectional-bar/API.zh.md index 0d3236c88..a8d2ddbdb 100644 --- a/site/examples/statistics/bidirectional-bar/API.zh.md +++ b/site/examples/statistics/bidirectional-bar/API.zh.md @@ -1 +1,2 @@ - + + diff --git a/site/examples/statistics/box/API.en.md b/site/examples/statistics/box/API.en.md index 240b49454..1869d0fd3 100644 --- a/site/examples/statistics/box/API.en.md +++ b/site/examples/statistics/box/API.en.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/box/API.zh.md b/site/examples/statistics/box/API.zh.md index b52c6db30..b8b0de5de 100644 --- a/site/examples/statistics/box/API.zh.md +++ b/site/examples/statistics/box/API.zh.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/bullet/API.en.md b/site/examples/statistics/bullet/API.en.md index b9c488778..c79393a8e 100644 --- a/site/examples/statistics/bullet/API.en.md +++ b/site/examples/statistics/bullet/API.en.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/bullet/API.zh.md b/site/examples/statistics/bullet/API.zh.md index b2912436b..592f89c73 100644 --- a/site/examples/statistics/bullet/API.zh.md +++ b/site/examples/statistics/bullet/API.zh.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/circle-packing/API.en.md b/site/examples/statistics/circle-packing/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/circle-packing/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/circle-packing/API.zh.md b/site/examples/statistics/circle-packing/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/circle-packing/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/column/API.en.md b/site/examples/statistics/column/API.en.md index 4a4b3493d..158c417c8 100644 --- a/site/examples/statistics/column/API.en.md +++ b/site/examples/statistics/column/API.en.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/column/API.zh.md b/site/examples/statistics/column/API.zh.md index b75ce1655..60ad7061e 100644 --- a/site/examples/statistics/column/API.zh.md +++ b/site/examples/statistics/column/API.zh.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/dual-axes/API.en.md b/site/examples/statistics/dual-axes/API.en.md index 16b855f11..eb88c070c 100644 --- a/site/examples/statistics/dual-axes/API.en.md +++ b/site/examples/statistics/dual-axes/API.en.md @@ -1 +1 @@ - \ No newline at end of file + diff --git a/site/examples/statistics/dual-axes/API.zh.md b/site/examples/statistics/dual-axes/API.zh.md index 60f45a35a..a8382b46d 100644 --- a/site/examples/statistics/dual-axes/API.zh.md +++ b/site/examples/statistics/dual-axes/API.zh.md @@ -1 +1 @@ - \ No newline at end of file + diff --git a/site/examples/statistics/funnel/API.en.md b/site/examples/statistics/funnel/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/funnel/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/funnel/API.zh.md b/site/examples/statistics/funnel/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/funnel/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/gauge/API.en.md b/site/examples/statistics/gauge/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/gauge/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/gauge/API.zh.md b/site/examples/statistics/gauge/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/gauge/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/heatmap/API.en.md b/site/examples/statistics/heatmap/API.en.md index 234a68dcf..b2f0b2008 100644 --- a/site/examples/statistics/heatmap/API.en.md +++ b/site/examples/statistics/heatmap/API.en.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/heatmap/API.zh.md b/site/examples/statistics/heatmap/API.zh.md index 0b6fecc57..2dd0472a5 100644 --- a/site/examples/statistics/heatmap/API.zh.md +++ b/site/examples/statistics/heatmap/API.zh.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/histogram/API.en.md b/site/examples/statistics/histogram/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/histogram/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/histogram/API.zh.md b/site/examples/statistics/histogram/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/histogram/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/line/API.en.md b/site/examples/statistics/line/API.en.md index 183d7f25f..eb88c070c 100644 --- a/site/examples/statistics/line/API.en.md +++ b/site/examples/statistics/line/API.en.md @@ -1 +1 @@ - \ No newline at end of file + diff --git a/site/examples/statistics/line/API.zh.md b/site/examples/statistics/line/API.zh.md index 02e374c79..a8382b46d 100644 --- a/site/examples/statistics/line/API.zh.md +++ b/site/examples/statistics/line/API.zh.md @@ -1 +1 @@ - \ No newline at end of file + diff --git a/site/examples/statistics/liquid/API.en.md b/site/examples/statistics/liquid/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/liquid/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/liquid/API.zh.md b/site/examples/statistics/liquid/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/liquid/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/pie/API.en.md b/site/examples/statistics/pie/API.en.md index 6c00eaf29..d2904f041 100644 --- a/site/examples/statistics/pie/API.en.md +++ b/site/examples/statistics/pie/API.en.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/pie/API.zh.md b/site/examples/statistics/pie/API.zh.md index ca784afc7..8279c839f 100644 --- a/site/examples/statistics/pie/API.zh.md +++ b/site/examples/statistics/pie/API.zh.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/radar/API.en.md b/site/examples/statistics/radar/API.en.md index ece5214a0..6e912f286 100644 --- a/site/examples/statistics/radar/API.en.md +++ b/site/examples/statistics/radar/API.en.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/radar/API.zh.md b/site/examples/statistics/radar/API.zh.md index 8d93b7f1a..87995145b 100644 --- a/site/examples/statistics/radar/API.zh.md +++ b/site/examples/statistics/radar/API.zh.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/radial-bar/API.en.md b/site/examples/statistics/radial-bar/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/radial-bar/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/radial-bar/API.zh.md b/site/examples/statistics/radial-bar/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/radial-bar/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/rose/API.en.md b/site/examples/statistics/rose/API.en.md index b670b11dc..eb88c070c 100644 --- a/site/examples/statistics/rose/API.en.md +++ b/site/examples/statistics/rose/API.en.md @@ -1 +1 @@ - \ No newline at end of file + diff --git a/site/examples/statistics/rose/API.zh.md b/site/examples/statistics/rose/API.zh.md index bacfe8f74..a8382b46d 100644 --- a/site/examples/statistics/rose/API.zh.md +++ b/site/examples/statistics/rose/API.zh.md @@ -1 +1 @@ - \ No newline at end of file + diff --git a/site/examples/statistics/sankey/API.en.md b/site/examples/statistics/sankey/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/sankey/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/sankey/API.zh.md b/site/examples/statistics/sankey/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/sankey/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/scatter/API.en.md b/site/examples/statistics/scatter/API.en.md index 8049f93bf..eb88c070c 100644 --- a/site/examples/statistics/scatter/API.en.md +++ b/site/examples/statistics/scatter/API.en.md @@ -1 +1 @@ - \ No newline at end of file + diff --git a/site/examples/statistics/scatter/API.zh.md b/site/examples/statistics/scatter/API.zh.md index 230e7a912..a8382b46d 100644 --- a/site/examples/statistics/scatter/API.zh.md +++ b/site/examples/statistics/scatter/API.zh.md @@ -1 +1 @@ - \ No newline at end of file + diff --git a/site/examples/statistics/stock/API.en.md b/site/examples/statistics/stock/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/stock/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/stock/API.zh.md b/site/examples/statistics/stock/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/stock/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/sunburst/API.en.md b/site/examples/statistics/sunburst/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/sunburst/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/sunburst/API.zh.md b/site/examples/statistics/sunburst/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/sunburst/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/tiny/API.en.md b/site/examples/statistics/tiny/API.en.md index f01ba56cc..6414c91a9 100644 --- a/site/examples/statistics/tiny/API.en.md +++ b/site/examples/statistics/tiny/API.en.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/tiny/API.zh.md b/site/examples/statistics/tiny/API.zh.md index 9635e982d..cd41b9fc6 100644 --- a/site/examples/statistics/tiny/API.zh.md +++ b/site/examples/statistics/tiny/API.zh.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/treemap/API.en.md b/site/examples/statistics/treemap/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/treemap/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/treemap/API.zh.md b/site/examples/statistics/treemap/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/treemap/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/venn/API.en.md b/site/examples/statistics/venn/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/venn/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/venn/API.zh.md b/site/examples/statistics/venn/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/venn/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/violin/API.en.md b/site/examples/statistics/violin/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/violin/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/violin/API.zh.md b/site/examples/statistics/violin/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/violin/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/waterfall/API.en.md b/site/examples/statistics/waterfall/API.en.md index c1e37aeb9..52fdae5c5 100644 --- a/site/examples/statistics/waterfall/API.en.md +++ b/site/examples/statistics/waterfall/API.en.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/waterfall/API.zh.md b/site/examples/statistics/waterfall/API.zh.md index 4aa3b3d32..b05937935 100644 --- a/site/examples/statistics/waterfall/API.zh.md +++ b/site/examples/statistics/waterfall/API.zh.md @@ -1 +1,2 @@ - \ No newline at end of file + + diff --git a/site/examples/statistics/wordCloud/API.en.md b/site/examples/statistics/wordCloud/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/wordCloud/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/wordCloud/API.zh.md b/site/examples/statistics/wordCloud/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/wordCloud/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/package.json b/site/package.json index b2eca0a50..a8ff0aafa 100644 --- a/site/package.json +++ b/site/package.json @@ -28,7 +28,7 @@ "start": "cross-env NODE_OPTIONS=--max_old_space_size=8192 pnpm run develop" }, "devDependencies": { - "@antv/dumi-theme-antv": "^0.4.2", + "@antv/dumi-theme-antv": "^0.5.0", "@types/react": "^16.14.8", "@types/react-dom": "^16.9.13", "cross-env": "^7.0.3", From 9e47891d9cbbf0f21653983c89056d1a40d3b6ed Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Thu, 4 Jan 2024 22:24:58 +0800 Subject: [PATCH 165/268] =?UTF-8?q?docs:=20colorField=E8=BD=AC=E5=8C=96&de?= =?UTF-8?q?mo=E9=85=8D=E7=BD=AE=E4=BC=98=E5=8C=96=20(#2334)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: lkd01632719 --- .../plots/src/core/plots/dual-axes/adaptor.ts | 14 +++++++++++++- .../statistics/dual-axes/demo/basic.js | 14 ++++++++++---- .../statistics/dual-axes/demo/column-line.js | 6 ++---- .../dual-axes/demo/column-multi-line.js | 14 ++++---------- .../dual-axes/demo/custom-column-line.js | 6 ++---- .../dual-axes/demo/custom-dual-line.js | 7 ++++--- .../demo/custom-grouped-column-line.js | 7 ++----- .../statistics/dual-axes/demo/dual-line.js | 1 + .../dual-axes/demo/dual-multi-line.js | 11 ++--------- .../dual-axes/demo/dual-step-line.js | 1 + .../dual-axes/demo/grouped-column-line.js | 6 ++---- .../dual-axes/demo/range-column-line.js | 18 ++++-------------- .../dual-axes/demo/slider-column-line.js | 1 + 13 files changed, 48 insertions(+), 58 deletions(-) diff --git a/packages/plots/src/core/plots/dual-axes/adaptor.ts b/packages/plots/src/core/plots/dual-axes/adaptor.ts index e7b4cca0c..a9b5da794 100644 --- a/packages/plots/src/core/plots/dual-axes/adaptor.ts +++ b/packages/plots/src/core/plots/dual-axes/adaptor.ts @@ -10,6 +10,18 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { + const colorField = (params: Params) => { + const { options } = params; + const { children = [], legend } = options; + if (!legend) return params; + children.forEach((option) => { + if (!get(option, 'colorField')) { + const yField = get(option, 'yField'); + set(option, 'colorField', () => yField); + } + }); + return params; + }; /** * @description Top level annotations needs to share scale, when top level annotations is not empty, scale needs to be dynamically set. */ @@ -45,5 +57,5 @@ export function adaptor(params: Params) { }); return params; }; - return flow(annotations, mark, transformOptions)(params); + return flow(colorField, annotations, mark, transformOptions)(params); } diff --git a/site/examples/statistics/dual-axes/demo/basic.js b/site/examples/statistics/dual-axes/demo/basic.js index 68d9bc785..c17d6cb7e 100644 --- a/site/examples/statistics/dual-axes/demo/basic.js +++ b/site/examples/statistics/dual-axes/demo/basic.js @@ -14,6 +14,14 @@ const DemoDualAxes = () => { { time: '10:35', call: 8, waiting: 2, people: 1 }, { time: '10:40', call: 13, waiting: 1, people: 2 }, ], + legend: { + color: { + itemMarker: (v) => { + if (v === 'waiting') return 'rect' + return 'smooth' + } + } + }, children: [ { type: 'interval', @@ -23,11 +31,9 @@ const DemoDualAxes = () => { type: 'line', yField: 'people', shapeField: 'smooth', - style: { - stroke: '#fdae6b', - lineWidth: 2, - }, + scale: { color: { relations: [['people', '#fdae6b']] } }, axis: { y: { position: 'right' } }, + style: { lineWidth: 2 }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/column-line.js b/site/examples/statistics/dual-axes/demo/column-line.js index 773a79dd6..afca8e156 100644 --- a/site/examples/statistics/dual-axes/demo/column-line.js +++ b/site/examples/statistics/dual-axes/demo/column-line.js @@ -14,6 +14,7 @@ const DemoDualAxes = () => { const config = { data, xField: 'time', + legend: true, children: [ { type: 'interval', @@ -23,10 +24,7 @@ const DemoDualAxes = () => { { type: 'line', yField: 'count', - style: { - stroke: '#5AD8A6', - lineWidth: 2, - }, + style: { lineWidth: 2 }, axis: { y: { position: 'right' } }, }, ], diff --git a/site/examples/statistics/dual-axes/demo/column-multi-line.js b/site/examples/statistics/dual-axes/demo/column-multi-line.js index e6b61ecba..f79077d5a 100644 --- a/site/examples/statistics/dual-axes/demo/column-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/column-multi-line.js @@ -2,12 +2,6 @@ import { DualAxes } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; -const lineColor = { - a: 'rgb(90, 216, 166)', - b: 'rgb(93, 112, 146)', - c: 'rgb(246, 189, 22)', -}; - const DemoDualAxes = () => { const uvData = [ { time: '2019-03', value: 35 }, @@ -37,6 +31,8 @@ const DemoDualAxes = () => { const config = { xField: 'time', + legend: true, + scale: { color: { range: ['#1783FF', '#5AD8A6', '#5D7092', '#F6BD16'] } }, interaction: { tooltip: { sort: (d) => ['value', 'a', 'b', 'c'].indexOf(d.name) } }, children: [ { @@ -49,12 +45,10 @@ const DemoDualAxes = () => { data: transformData, type: 'line', yField: 'count', + colorField: 'name', seriesField: 'name', - style: { - lineWidth: 2, - stroke: (d) => lineColor[d[0].name], - }, axis: { y: { position: 'right' } }, + style: { lineWidth: 2 }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/custom-column-line.js b/site/examples/statistics/dual-axes/demo/custom-column-line.js index 30ff81e30..0caa55902 100644 --- a/site/examples/statistics/dual-axes/demo/custom-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-column-line.js @@ -14,6 +14,7 @@ const DemoDualAxes = () => { const config = { data, xField: 'time', + legend: true, children: [ { type: 'interval', @@ -29,10 +30,7 @@ const DemoDualAxes = () => { type: 'line', yField: 'count', shapeField: 'smooth', - style: { - stroke: '#5AD8A6', - lineWidth: 2, - }, + style: { lineWidth: 2 }, axis: { y: false }, interaction: { tooltip: { diff --git a/site/examples/statistics/dual-axes/demo/custom-dual-line.js b/site/examples/statistics/dual-axes/demo/custom-dual-line.js index 17b2003ce..431e98b54 100644 --- a/site/examples/statistics/dual-axes/demo/custom-dual-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-dual-line.js @@ -18,12 +18,12 @@ const DemoDualAxes = () => { const config = { data, xField: 'year', + legend: true, children: [ { type: 'line', yField: 'value', style: { - stroke: '#5B8FF9', lineWidth: 3, lineDash: [5, 5], }, @@ -61,7 +61,7 @@ const DemoDualAxes = () => { y: { position: 'right', title: 'count', - style: { titleFill: '#5AD8A6' } + style: { titleFill: '#5AD8A6' }, }, }, }, @@ -73,7 +73,8 @@ const DemoDualAxes = () => { stroke: '#5AD8A6', fill: '#fff', }, - axis: { y: false } + axis: { y: false }, + tooltip: false, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js index aeb042fb8..291fe99fc 100644 --- a/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js @@ -32,6 +32,7 @@ const DemoDualAxes = () => { layout: { justifyContent: 'center' }, }, }, + scale: { color: { range: ['#5B8FF9', '#5D7092', '#5AD8A6'] } }, children: [ { data: uvBillData, @@ -41,17 +42,13 @@ const DemoDualAxes = () => { group: true, style: { maxWidth: 50 }, label: { position: 'inside' }, - scale: { color: { range: ['#5B8FF9', '#5D7092'] } }, interaction: { elementHighlightByColor: { background: true } }, }, { data: transformData, type: 'line', yField: 'count', - style: { - stroke: '#5AD8A6', - lineWidth: 2, - }, + style: { lineWidth: 2 }, axis: { y: { position: 'right' } }, interaction: { tooltip: { diff --git a/site/examples/statistics/dual-axes/demo/dual-line.js b/site/examples/statistics/dual-axes/demo/dual-line.js index ae0b9bbd3..defa6e841 100644 --- a/site/examples/statistics/dual-axes/demo/dual-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-line.js @@ -18,6 +18,7 @@ const DemoDualAxes = () => { const config = { data, xField: 'year', + legend: true, children: [ { type: 'line', diff --git a/site/examples/statistics/dual-axes/demo/dual-multi-line.js b/site/examples/statistics/dual-axes/demo/dual-multi-line.js index bd2fcea94..f2e509e7b 100644 --- a/site/examples/statistics/dual-axes/demo/dual-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-multi-line.js @@ -2,14 +2,6 @@ import { DualAxes } from '@ant-design/plots'; import React from 'react'; import ReactDOM from 'react-dom'; -const lineColor = { - uv: 'rgb(91, 143, 249)', - bill: 'rgb(90, 216, 166)', - a: 'rgb(93, 112, 146)', - b: 'rgb(246, 189, 22)', - c: 'rgb(111, 94, 249)', -}; - const DemoDualAxes = () => { const uvBillData = [ { time: '2019-03', value: 350, type: 'uv' }, @@ -44,6 +36,7 @@ const DemoDualAxes = () => { const config = { xField: 'time', + scale: { color: { range: ['#5B8FF9', '#5AD8A6', '#5D7092', '#F6BD16', '#6F5EF9'] } }, children: [ { data: uvBillData, @@ -65,9 +58,9 @@ const DemoDualAxes = () => { data: transformData, type: 'point', yField: 'count', + colorField: 'name', sizeField: 3, shapeField: 'point', - style: { fill: (d) => lineColor[d.name] }, axis: { y: false }, tooltip: false, }, diff --git a/site/examples/statistics/dual-axes/demo/dual-step-line.js b/site/examples/statistics/dual-axes/demo/dual-step-line.js index f5aa08dfe..a8e75d3f5 100644 --- a/site/examples/statistics/dual-axes/demo/dual-step-line.js +++ b/site/examples/statistics/dual-axes/demo/dual-step-line.js @@ -18,6 +18,7 @@ const DemoDualAxes = () => { const config = { data, xField: 'year', + legend: true, children: [ { type: 'line', diff --git a/site/examples/statistics/dual-axes/demo/grouped-column-line.js b/site/examples/statistics/dual-axes/demo/grouped-column-line.js index 043074c85..d2950b4cf 100644 --- a/site/examples/statistics/dual-axes/demo/grouped-column-line.js +++ b/site/examples/statistics/dual-axes/demo/grouped-column-line.js @@ -26,6 +26,7 @@ const DemoDualAxes = () => { const config = { xField: 'time', + legend: true, children: [ { data: uvBillData, @@ -39,10 +40,7 @@ const DemoDualAxes = () => { data: transformData, type: 'line', yField: 'count', - style: { - stroke: '#5D7092', - lineWidth: 2, - }, + style: { lineWidth: 2 }, axis: { y: { position: 'right' } }, interaction: { tooltip: { diff --git a/site/examples/statistics/dual-axes/demo/range-column-line.js b/site/examples/statistics/dual-axes/demo/range-column-line.js index d9eb88b46..82e61cead 100644 --- a/site/examples/statistics/dual-axes/demo/range-column-line.js +++ b/site/examples/statistics/dual-axes/demo/range-column-line.js @@ -14,28 +14,18 @@ const DemoDualAxes = () => { const config = { data, xField: 'time', + legend: true, children: [ { type: 'interval', yField: 'value', - style: { - stroke: '#5B8FF9', - maxWidth: 100, - }, + style: { maxWidth: 100 }, }, { type: 'line', yField: 'count', - style: { - stroke: '#5AD8A6', - lineWidth: 2, - }, - axis: { - y: { - position: 'right', - style: { titleFill: '#5AD8A6' }, - }, - }, + style: { lineWidth: 2 }, + axis: { y: { position: 'right' } }, }, ], }; diff --git a/site/examples/statistics/dual-axes/demo/slider-column-line.js b/site/examples/statistics/dual-axes/demo/slider-column-line.js index e0a0c4bdf..6d7776ceb 100644 --- a/site/examples/statistics/dual-axes/demo/slider-column-line.js +++ b/site/examples/statistics/dual-axes/demo/slider-column-line.js @@ -40,6 +40,7 @@ const DemoDualAxes = () => { data, xField: 'time', padding: 70, + legend: true, slider: { x: true }, scale: { y: { nice: false } }, children: [ From bf1b7b6411f3526f983bdab46d6aa2153c54ff49 Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Fri, 5 Jan 2024 13:42:26 +0800 Subject: [PATCH 166/268] docs: add three demos (#2325) Co-authored-by: lkd01632719 --- .../plots/src/core/plots/sankey/adaptor.ts | 28 +++++++++- packages/plots/src/core/plots/sankey/index.ts | 6 +-- .../examples/statistics/sankey/demo/alipay.js | 50 +++++++++++++++++ site/examples/statistics/sankey/demo/basic.js | 10 +--- .../examples/statistics/sankey/demo/energy.js | 19 +++++++ .../examples/statistics/sankey/demo/meta.json | 24 +++++++++ .../sankey/demo/node-sort-sankey.js | 53 +++++++++++++++++++ 7 files changed, 176 insertions(+), 14 deletions(-) create mode 100644 site/examples/statistics/sankey/demo/alipay.js create mode 100644 site/examples/statistics/sankey/demo/energy.js create mode 100644 site/examples/statistics/sankey/demo/node-sort-sankey.js diff --git a/packages/plots/src/core/plots/sankey/adaptor.ts b/packages/plots/src/core/plots/sankey/adaptor.ts index 7eefdc0ce..2dcd65f0e 100644 --- a/packages/plots/src/core/plots/sankey/adaptor.ts +++ b/packages/plots/src/core/plots/sankey/adaptor.ts @@ -1,6 +1,6 @@ import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; -import { flow, transformOptions } from '../../utils'; +import { flow, get, isArray, set, transformOptions } from '../../utils'; import type { SankeyOptions } from './type'; type Params = Adaptor; @@ -10,5 +10,29 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(mark, transformOptions)(params); + const dataTransform = (params: Params) => { + const { options } = params; + const { data } = options; + const defaultTransform = [ + { + type: 'custom', + callback: (datum) => ({ links: datum }), + }, + ]; + if (isArray(data)) { + set(options, 'data', { + value: data, + transform: defaultTransform, + }); + } else if (get(data, 'type') === 'fetch' && get(data, 'value')) { + const transform = get(data, 'transform'); + if (isArray(transform)) { + set(data, 'transform', transform.concat(defaultTransform)); + } else { + set(data, 'transform', defaultTransform); + } + } + return params; + }; + return flow(dataTransform, mark, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/sankey/index.ts b/packages/plots/src/core/plots/sankey/index.ts index 300b908e0..ca1c64b49 100644 --- a/packages/plots/src/core/plots/sankey/index.ts +++ b/packages/plots/src/core/plots/sankey/index.ts @@ -10,7 +10,7 @@ export class Sankey extends Plot { public type = 'sankey'; /** - * 获取 双轴图 默认配置项 + * 获取 桑基图 默认配置项 * 供外部使用 */ static getDefaultOptions(): Partial { @@ -18,14 +18,14 @@ export class Sankey extends Plot { } /** - * 获取 条形图 默认配置 + * 获取 桑基图 默认配置 */ protected getDefaultOptions() { return Sankey.getDefaultOptions(); } /** - * 条形图适配器 + * 桑基图适配器 */ protected getSchemaAdaptor(): (params: Adaptor) => void { return adaptor; diff --git a/site/examples/statistics/sankey/demo/alipay.js b/site/examples/statistics/sankey/demo/alipay.js new file mode 100644 index 000000000..8066a3f1a --- /dev/null +++ b/site/examples/statistics/sankey/demo/alipay.js @@ -0,0 +1,50 @@ +import { Sankey } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const colors = [ + '#5B8FF9', + '#61DDAA', + '#65789B', + '#F6BD16', + '#7262fd', + '#78D3F8', + '#9661BC', + '#F6903D', + '#008685', + '#F08BB4', +]; + +const data = [ + { source: '首次打开', target: '首页 UV', value: 160 }, + { source: '结果页', target: '首页 UV', value: 40 }, + { source: '验证页', target: '首页 UV', value: 10 }, + { source: '我的', target: '首页 UV', value: 10 }, + { source: '朋友', target: '首页 UV', value: 8 }, + { source: '其他来源', target: '首页 UV', value: 27 }, + { source: '首页 UV', target: '理财', value: 30 }, + { source: '首页 UV', target: '扫一扫', value: 40 }, + { source: '首页 UV', target: '服务', value: 35 }, + { source: '首页 UV', target: '蚂蚁森林', value: 25 }, + { source: '首页 UV', target: '跳失', value: 10 }, + { source: '首页 UV', target: '借呗', value: 30 }, + { source: '首页 UV', target: '花呗', value: 40 }, + { source: '首页 UV', target: '其他流向', value: 45 }, +]; + +const DemoSankey = () => { + const config = { + data, + scale: { color: { range: colors } }, + layout: { nodeWidth: 0.01 }, + linkColorField: (d) => d.source.key, + style: { + labelFontSize: 13, + linkFillOpacity: 0.4, + nodeStrokeWidth: 0, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/sankey/demo/basic.js b/site/examples/statistics/sankey/demo/basic.js index d22493933..898854cc9 100644 --- a/site/examples/statistics/sankey/demo/basic.js +++ b/site/examples/statistics/sankey/demo/basic.js @@ -4,18 +4,9 @@ import ReactDOM from 'react-dom'; const DemoSankey = () => { const config = { - layout: { nodeAlign: 'center', nodePadding: 0.03 }, data: { type: 'fetch', value: 'https://assets.antv.antgroup.com/g2/energy.json', - transform: [ - { - type: 'custom', - callback: (data) => ({ - links: data, - }), - }, - ], }, scale: { color: { @@ -33,6 +24,7 @@ const DemoSankey = () => { ], }, }, + layout: { nodeAlign: 'center', nodePadding: 0.03 }, style: { labelSpacing: 3, labelFontWeight: 'bold', diff --git a/site/examples/statistics/sankey/demo/energy.js b/site/examples/statistics/sankey/demo/energy.js new file mode 100644 index 000000000..5f3441ee3 --- /dev/null +++ b/site/examples/statistics/sankey/demo/energy.js @@ -0,0 +1,19 @@ +import { Sankey } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoSankey = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/bmw-prod/fa3414cc-75ed-47b4-8306-f2ffe8c40127.json', + }, + scale: { color: { range: ['red', 'green', 'yellow'] } }, + layout: { nodeWidth: 0.01, nodePadding: 0.01 }, + linkColorField: (d) => d.source.key, + style: { linkFillOpacity: 0.4 }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/sankey/demo/meta.json b/site/examples/statistics/sankey/demo/meta.json index cf1ca51a7..ea33b3e69 100644 --- a/site/examples/statistics/sankey/demo/meta.json +++ b/site/examples/statistics/sankey/demo/meta.json @@ -11,6 +11,30 @@ "en": "Sankey" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*dACBR7ANcfEAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "alipay.js", + "title": { + "zh": "支付宝流量桑基图", + "en": "Alipay sankey" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*fecqTpstXu0AAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "energy.js", + "title": { + "zh": "能量关系桑基图", + "en": "Energy sankey" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*8o1RQJ2fqdsAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "node-sort-sankey.js", + "title": { + "zh": "节点排序前桑基图", + "en": "NodeSort sankey" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Ubm3Q4E1qCAAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/sankey/demo/node-sort-sankey.js b/site/examples/statistics/sankey/demo/node-sort-sankey.js new file mode 100644 index 000000000..01728f98d --- /dev/null +++ b/site/examples/statistics/sankey/demo/node-sort-sankey.js @@ -0,0 +1,53 @@ +import { Sankey } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const colors = [ + '#5B8FF9', + '#61DDAA', + '#65789B', + '#F6BD16', + '#7262fd', + '#78D3F8', + '#9661BC', + '#F6903D', + '#008685', + '#F08BB4', +]; + +const data = [ + { source: '首次打开', target: '首页 UV', value: 160 }, + { source: '结果页', target: '首页 UV', value: 40 }, + { source: '验证页', target: '首页 UV', value: 10 }, + { source: '我的', target: '首页 UV', value: 10 }, + { source: '朋友', target: '首页 UV', value: 8 }, + { source: '其他来源', target: '首页 UV', value: 27 }, + { source: '首页 UV', target: '理财', value: 30 }, + { source: '首页 UV', target: '扫一扫', value: 40 }, + { source: '首页 UV', target: '服务', value: 35 }, + { source: '首页 UV', target: '蚂蚁森林', value: 25 }, + { source: '首页 UV', target: '跳失', value: 10 }, + { source: '首页 UV', target: '借呗', value: 30 }, + { source: '首页 UV', target: '花呗', value: 40 }, + { source: '首页 UV', target: '其他流向', value: 45 }, +]; + +const DemoSankey = () => { + const config = { + data, + scale: { color: { range: colors } }, + layout: { + nodeWidth: 0.01, + nodeSort: (a, b) => b.value - a.value, + }, + linkColorField: (d) => d.source.key, + style: { + labelFontSize: 13, + linkFillOpacity: 0.4, + nodeStrokeWidth: 0, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 9571ebb969576c6ade1a6257113c42bc6457fe90 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:27:39 +0800 Subject: [PATCH 167/268] docs: renderer (#2338) --- site/docs/options/plots/overview.zh.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/site/docs/options/plots/overview.zh.md b/site/docs/options/plots/overview.zh.md index 069e52982..35bec1ed3 100644 --- a/site/docs/options/plots/overview.zh.md +++ b/site/docs/options/plots/overview.zh.md @@ -28,8 +28,16 @@ order: 1 **optional** *string* *default:* `canvas` -设置图表渲染方式为 `canvas` 或 `svg`。 +设置图表渲染方式为 `canvas` 或 `svg`,默认值无需指定,当要使用 svg 模式时,可以如下配置 +```ts +// import { Renderer as CanvasRenderer } from '@antv/g-canvas'; +import { Renderer as SVGRenderer } from '@antv/g-svg'; + +const config = { + renderer: new SVGRenderer() +} +``` ## 视图模型 From 3ef5c79ad8d3aa6e7b4b30ed439f16e19a41dedb Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:27:49 +0800 Subject: [PATCH 168/268] fix: the sum of data is equal to zero (#2336) --- packages/plots/src/core/plots/pie/adaptor.ts | 39 +++++++++++++++++++- site/examples/statistics/pie/demo/basic.js | 1 - 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/packages/plots/src/core/plots/pie/adaptor.ts b/packages/plots/src/core/plots/pie/adaptor.ts index 07020a0be..5345fd444 100644 --- a/packages/plots/src/core/plots/pie/adaptor.ts +++ b/packages/plots/src/core/plots/pie/adaptor.ts @@ -1,4 +1,4 @@ -import { flow, transformOptions } from '../../utils'; +import { flow, transformOptions, isArray, set } from '../../utils'; import { coordinate } from '../../adaptor'; import type { Adaptor } from '../../types'; @@ -11,5 +11,40 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(coordinate, transformOptions)(params); + /** + * @description 当 angleField 总算为 0 时,设置默认样式 + * @link https://github.com/ant-design/ant-design-charts/issues/2324 + */ + const emptyData = (params: Params) => { + const { options } = params; + const { angleField, data, label, tooltip, colorField } = options; + if (isArray(data)) { + const sum = data.reduce((a, b) => a + b[angleField], 0); + if (sum === 0) { + const normalization = data.map((item) => ({ ...item, [angleField]: 1 })); + set(options, 'data', normalization); + if (label) { + set(options, 'label', { + ...label, + formatter: () => 0, + }); + } + if (tooltip !== false) { + set(options, 'tooltip', { + ...tooltip, + items: [ + (arg) => { + return { + name: arg[colorField], + value: 0, + }; + }, + ], + }); + } + } + } + return params; + }; + return flow(emptyData, coordinate, transformOptions)(params); } diff --git a/site/examples/statistics/pie/demo/basic.js b/site/examples/statistics/pie/demo/basic.js index f55484fe5..c71102175 100644 --- a/site/examples/statistics/pie/demo/basic.js +++ b/site/examples/statistics/pie/demo/basic.js @@ -14,7 +14,6 @@ const DemoPie = () => { ], angleField: 'value', colorField: 'type', - paddingRight: 80, label: { text: 'value', style: { From e31695046e95e6c085c820f39e9b72f457a8eb56 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 8 Jan 2024 19:04:31 +0800 Subject: [PATCH 169/268] fix: coordinate (#2343) --- packages/plots/src/core/adaptor/coordinate.ts | 24 ------------------- packages/plots/src/core/adaptor/index.ts | 1 - packages/plots/src/core/constants/index.ts | 21 +++++++--------- packages/plots/src/core/plots/pie/adaptor.ts | 4 +--- .../plots/src/core/plots/radar/adaptor.ts | 3 +-- .../src/core/plots/radial-bar/adaptor.ts | 8 ++----- packages/plots/src/core/plots/rose/adaptor.ts | 3 +-- .../plots/src/core/plots/sunburst/adaptor.ts | 3 +-- .../src/core/utils/delete-excess-keys.ts | 7 ++---- 9 files changed, 17 insertions(+), 57 deletions(-) delete mode 100644 packages/plots/src/core/adaptor/coordinate.ts diff --git a/packages/plots/src/core/adaptor/coordinate.ts b/packages/plots/src/core/adaptor/coordinate.ts deleted file mode 100644 index 9e80ec2d8..000000000 --- a/packages/plots/src/core/adaptor/coordinate.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { set, pick, get } from '../utils'; -import { COORDIANTE_OPTIONS } from '../constants'; -import type { Adaptor } from '../types'; - -/** - * 主要为极坐标配置, 饼图、雷达图等 - * 通用坐标系配置, coordinate 配置根据图表默认进行配置,例如 coordinate 饼图 { type: 'theta' } 玉珏图 { type: 'radial' }。 - * 也可直接通过 options.coordinate 进行穿透。 - * 同样 coordinate 但其他配置需要直接在 options 中配置,例如 主要配置内径 innerRadius 结束角度 endAngle 等, 次要配置 focusX distortionX。 - * @param params Adaptor - * @returns params Adaptor - */ -export function coordinate

(params: P) { - const { options } = params; - const { coordinate = {} } = options; - - set(params, ['options', 'coordinate'], { - ...coordinate, - ...pick(options, COORDIANTE_OPTIONS), - outerRadius: get(options, 'radius'), - }); - - return params; -} diff --git a/packages/plots/src/core/adaptor/index.ts b/packages/plots/src/core/adaptor/index.ts index 7144f8f19..5dd0dff0e 100644 --- a/packages/plots/src/core/adaptor/index.ts +++ b/packages/plots/src/core/adaptor/index.ts @@ -1,3 +1,2 @@ export { mark } from './mark'; -export { coordinate } from './coordinate'; export * from './coordinate-layout'; diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index ff9f8ab4b..3a7fe1b26 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -72,6 +72,15 @@ export const TRANSFORM_OPTION_KEY = { binField: 'encode.x', srcField: 'encode.src', linkColorField: 'encode.linkColor', + radius: 'coordinate.outerRadius', + innerRadius: 'coordinate.innerRadius', + startAngle: 'coordinate.startAngle', + endAngle: 'coordinate.endAngle', + focusX: 'coordinate.focusX', + focusY: 'coordinate.focusY', + distortionX: 'coordinate.distortionX', + distortionY: 'coordinate.distortionY', + visual: 'coordinate.visual', /** * @title 堆叠 * @example @@ -231,18 +240,6 @@ export const CONFIG_SHAPE = [ }, ]; -export const COORDIANTE_OPTIONS = [ - 'radius', - 'innerRadius', - 'startAngle', - 'endAngle', - 'focusX', - 'focusY', - 'distortionX', - 'distortionY', - 'visual', -]; - /** * @description 一些特殊的配置项,需要自定义转换逻辑 */ diff --git a/packages/plots/src/core/plots/pie/adaptor.ts b/packages/plots/src/core/plots/pie/adaptor.ts index 5345fd444..6e26b926e 100644 --- a/packages/plots/src/core/plots/pie/adaptor.ts +++ b/packages/plots/src/core/plots/pie/adaptor.ts @@ -1,6 +1,4 @@ import { flow, transformOptions, isArray, set } from '../../utils'; -import { coordinate } from '../../adaptor'; - import type { Adaptor } from '../../types'; import type { PieOptions } from './type'; @@ -46,5 +44,5 @@ export function adaptor(params: Params) { } return params; }; - return flow(emptyData, coordinate, transformOptions)(params); + return flow(emptyData, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/radar/adaptor.ts b/packages/plots/src/core/plots/radar/adaptor.ts index ce83e031f..6e20340c3 100644 --- a/packages/plots/src/core/plots/radar/adaptor.ts +++ b/packages/plots/src/core/plots/radar/adaptor.ts @@ -1,5 +1,4 @@ import { flow, transformOptions, get, set } from '../../utils'; -import { coordinate } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { RadarOptions } from './type'; @@ -19,5 +18,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, coordinate, transformOptions)(params); + return flow(init, transformOptions)(params); } diff --git a/packages/plots/src/core/plots/radial-bar/adaptor.ts b/packages/plots/src/core/plots/radial-bar/adaptor.ts index 5ff42558f..a30f11180 100644 --- a/packages/plots/src/core/plots/radial-bar/adaptor.ts +++ b/packages/plots/src/core/plots/radial-bar/adaptor.ts @@ -1,6 +1,5 @@ -import { flow, set, pick, transformOptions, isNumber, get } from '../../utils'; +import { flow, set, transformOptions, isNumber, get } from '../../utils'; import { mark } from '../../adaptor'; -import { COORDIANTE_OPTIONS } from '../../constants'; import type { Adaptor } from '../../types'; import type { RadialBarOptions } from './type'; @@ -17,17 +16,14 @@ export function adaptor(params: Params) { */ const coordinate = (params: Params) => { const { options } = params; - const { startAngle, maxAngle, coordinate, radius, innerRadius } = options; + const { startAngle, maxAngle, coordinate } = options; // 默认开始角度是-90度 const start = isNumber(startAngle) ? (startAngle / (2 * Math.PI)) * 360 : -90; // 结束角度通过maxAngle来计算 const end = isNumber(maxAngle) ? ((Number(maxAngle) + start) / 180) * Math.PI : Math.PI; set(params, ['options', 'coordinate'], { ...coordinate, - ...pick(options.coordinate, COORDIANTE_OPTIONS), endAngle: end, - outerRadius: radius, - innerRadius, startAngle: startAngle ?? -Math.PI / 2, }); diff --git a/packages/plots/src/core/plots/rose/adaptor.ts b/packages/plots/src/core/plots/rose/adaptor.ts index cd2897b57..0c313ecd8 100644 --- a/packages/plots/src/core/plots/rose/adaptor.ts +++ b/packages/plots/src/core/plots/rose/adaptor.ts @@ -1,5 +1,4 @@ import { flow, transformOptions } from '../../utils'; -import { coordinate } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { RoseOptions } from './type'; @@ -11,5 +10,5 @@ type Params = Adaptor; * @param options */ export function adaptor(params: Params) { - return flow(coordinate, transformOptions)(params); + return flow(transformOptions)(params); } diff --git a/packages/plots/src/core/plots/sunburst/adaptor.ts b/packages/plots/src/core/plots/sunburst/adaptor.ts index 3be1c0143..01ce9f442 100644 --- a/packages/plots/src/core/plots/sunburst/adaptor.ts +++ b/packages/plots/src/core/plots/sunburst/adaptor.ts @@ -1,4 +1,3 @@ -import { coordinate } from '../../adaptor'; import { flow, transformOptions } from '../../utils'; import type { Adaptor } from '../../types'; @@ -18,5 +17,5 @@ export function adaptor(params: Params) { return params; }; - return flow(init, coordinate, transformOptions)(params); + return flow(init, transformOptions)(params); } diff --git a/packages/plots/src/core/utils/delete-excess-keys.ts b/packages/plots/src/core/utils/delete-excess-keys.ts index 111101506..cb248e29b 100644 --- a/packages/plots/src/core/utils/delete-excess-keys.ts +++ b/packages/plots/src/core/utils/delete-excess-keys.ts @@ -1,4 +1,4 @@ -import { TRANSFORM_OPTION_KEY, VIEW_OPTIONS, CONFIG_SHAPE, COORDIANTE_OPTIONS, ANNOTATION_LIST } from '../constants'; +import { TRANSFORM_OPTION_KEY, VIEW_OPTIONS, CONFIG_SHAPE, ANNOTATION_LIST } from '../constants'; import { Options } from '../types'; /** @@ -6,10 +6,7 @@ import { Options } from '../types'; */ export const deleteExcessKeys = (options: O): O => { const { children = [] } = options; - const deleteKeys = Object.keys(TRANSFORM_OPTION_KEY).concat( - CONFIG_SHAPE.map((item) => item.key), - COORDIANTE_OPTIONS, - ); + const deleteKeys = Object.keys(TRANSFORM_OPTION_KEY).concat(CONFIG_SHAPE.map((item) => item.key)); deleteKeys.forEach((key) => { delete options[key]; }); From e2597329a6f8731ff2a8b6d0990b94895ea8a1ec Mon Sep 17 00:00:00 2001 From: lxfu1 <954055752@qq.com> Date: Mon, 8 Jan 2024 19:14:56 +0800 Subject: [PATCH 170/268] changelog --- package.json | 2 +- packages/plots/CHANGELOG.md | 7 +++++++ packages/plots/package.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index bd448218e..4642c0f7e 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "ci:version": "pnpm changeset version", "add:changelog": "pnpm changeset", "before:release": "pnpm run build", - "release": "pnpm run before:release && pnpm publish --no-git-checks -r --filter @ant-design/*", + "release": "pnpm run before:release && pnpm publish --no-git-checks -r --registry=https://registry.npmjs.org --filter @ant-design/*", "release:alpha": "pnpm publish --tag alpha --no-git-checks -r --filter @ant-design/*", "release:beta": "pnpm publish --tag beta --no-git-checks -r --filter @ant-design/*" }, diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index c7b6dc0ee..b013cce2d 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.1.6 + +`2024-01-08` + +- 🐞 修复 [环图的半径不支持动态更新](https://github.com/ant-design/ant-design-charts/issues/2342) +- 🐞 修复 [2.x版本饼图value为0时图形是不渲染的](https://github.com/ant-design/ant-design-charts/issues/2324) + ## 2.1.5 `2023-12-27` diff --git a/packages/plots/package.json b/packages/plots/package.json index cc64d1630..a9ef3b194 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.5", + "version": "2.1.6", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From ddbd4657038455754442cd21a949f26e5f376ca2 Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Tue, 9 Jan 2024 14:39:21 +0800 Subject: [PATCH 171/268] docs: update demo (#2347) Co-authored-by: lkd01632719 --- site/examples/statistics/pie/demo/basic-donut.js | 13 +++++++++++++ site/examples/statistics/pie/demo/meta.json | 8 ++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/site/examples/statistics/pie/demo/basic-donut.js b/site/examples/statistics/pie/demo/basic-donut.js index 9135390b4..757889683 100644 --- a/site/examples/statistics/pie/demo/basic-donut.js +++ b/site/examples/statistics/pie/demo/basic-donut.js @@ -29,6 +29,19 @@ const DemoPie = () => { rowPadding: 5, }, }, + annotations: [ + { + type: 'text', + style: { + text: 'AntV\nCharts', + x: '50%', + y: '50%', + textAlign: 'center', + fontSize: 40, + fontStyle: 'bold', + }, + }, + ], }; return ; }; diff --git a/site/examples/statistics/pie/demo/meta.json b/site/examples/statistics/pie/demo/meta.json index 073ee4871..a7c5108d3 100644 --- a/site/examples/statistics/pie/demo/meta.json +++ b/site/examples/statistics/pie/demo/meta.json @@ -42,7 +42,7 @@ "zh": "饼图 - 四分之一圆", "en": "Pie plot - Quarter circle pie" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/bzXrKEyk6T/f334d3fa-4494-41b7-9260-c469588555a6.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*HtmQSoTfo0gAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "pie-texture.js", @@ -50,7 +50,7 @@ "zh": "饼图 - 带纹理的饼图", "en": "Pie plot - Pie plot fill with texture" }, - "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/SUQSZupP5X/c2076423-44ca-41d2-b8fa-a221b6a8fcf2.png" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*340IRYjd26IAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "basic-donut.js", @@ -58,7 +58,7 @@ "zh": "基础环图", "en": "Basic donut plot" }, - "screenshot": "https://gw.alipayobjects.com/mdn/rms_d314dd/afts/img/A*65WIQK5T4c8AAAAAAAAAAAAAARQnAQ" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Fl1OT6t5avcAAAAAAAAAAAAADmJ7AQ/original" }, { "filename": "doughnut.js", @@ -66,7 +66,7 @@ "zh": "甜甜圈图", "en": "Pie plot - Donut Chart" }, - "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*wu8VQIWJJ50AAAAAAAAAAAAADmJ7AQ/original" + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*_OHoQb0Xho8AAAAAAAAAAAAADmJ7AQ/original" } ] } From 04eb944066f0d5f7c5f7a1797bac40827d8d7c81 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 9 Jan 2024 14:53:40 +0800 Subject: [PATCH 172/268] fix: transform (#2348) --- package.json | 2 +- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- packages/plots/src/core/utils/index.ts | 1 + packages/plots/src/core/utils/transform.ts | 3 ++- 5 files changed, 11 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 4642c0f7e..39e0c103b 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "ci:version": "pnpm changeset version", "add:changelog": "pnpm changeset", "before:release": "pnpm run build", - "release": "pnpm run before:release && pnpm publish --no-git-checks -r --registry=https://registry.npmjs.org --filter @ant-design/*", + "release": "pnpm publish --no-git-checks -r --registry=https://registry.npmjs.org --filter @ant-design/*", "release:alpha": "pnpm publish --tag alpha --no-git-checks -r --filter @ant-design/*", "release:beta": "pnpm publish --tag beta --no-git-checks -r --filter @ant-design/*" }, diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index b013cce2d..864f52a27 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.1.7 + +`2024-01-09` + +- 🐞 修复 `transform` 转换逻辑错误 + ## 2.1.6 `2024-01-08` diff --git a/packages/plots/package.json b/packages/plots/package.json index a9ef3b194..61d497bde 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.6", + "version": "2.1.7", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 5e229545a..1fd67d03f 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -27,6 +27,7 @@ export { mergeWith, memoize, values, + isUndefined, } from 'lodash-es'; export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index a87c3e610..f24ba0fa4 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -8,6 +8,7 @@ import { mergeWithArrayCoverage, set, isObject, + isUndefined, } from './index'; import type { Adaptor, Options } from '../types'; @@ -79,7 +80,7 @@ export const transformOptions = (params: Adaptor) => { */ Object.keys(TRANSFORM_OPTION_KEY).forEach((key) => { const transformTarget = TRANSFORM_OPTION_KEY[key]; - if (config[key]) { + if (!isUndefined(config[key])) { if (isObject(transformTarget)) { const { value, target } = transformTarget; const transformValue = value(config[key]); From 2ef8895e1b11ddb864165bdf2495e69fc6b44e60 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:31:21 +0800 Subject: [PATCH 173/268] fix: mark background legend loss (#2350) --- package.json | 2 +- packages/plots/CHANGELOG.md | 2 ++ packages/plots/package.json | 2 +- packages/plots/src/core/plots/bar/adaptor.ts | 7 +++---- site/CNAME | 1 - 5 files changed, 7 insertions(+), 7 deletions(-) delete mode 100644 site/CNAME diff --git a/package.json b/package.json index 39e0c103b..4642c0f7e 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "ci:version": "pnpm changeset version", "add:changelog": "pnpm changeset", "before:release": "pnpm run build", - "release": "pnpm publish --no-git-checks -r --registry=https://registry.npmjs.org --filter @ant-design/*", + "release": "pnpm run before:release && pnpm publish --no-git-checks -r --registry=https://registry.npmjs.org --filter @ant-design/*", "release:alpha": "pnpm publish --tag alpha --no-git-checks -r --filter @ant-design/*", "release:beta": "pnpm publish --tag beta --no-git-checks -r --filter @ant-design/*" }, diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 864f52a27..ec37209c3 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,7 +1,9 @@ +## 2.1.8 ## 2.1.7 `2024-01-09` +- 🐞 修复 `markBackground` legend 失效 - 🐞 修复 `transform` 转换逻辑错误 ## 2.1.6 diff --git a/packages/plots/package.json b/packages/plots/package.json index 61d497bde..dfbc54134 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.7", + "version": "2.1.8", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/plots/bar/adaptor.ts b/packages/plots/src/core/plots/bar/adaptor.ts index e820d15ec..59cdb278a 100644 --- a/packages/plots/src/core/plots/bar/adaptor.ts +++ b/packages/plots/src/core/plots/bar/adaptor.ts @@ -1,6 +1,6 @@ import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; -import { flow, transformOptions, get, isArray, set } from '../../utils'; +import { flow, transformOptions, get, isArray, set, omit } from '../../utils'; import type { BarOptions } from './type'; type Params = Adaptor; @@ -22,13 +22,13 @@ export function adaptor(params: Params) { if (get(options, 'children.length') > 1) { set(options, 'children', [{ type: 'interval' }]); } - const { scale, markBackground, data, children } = options; + const { scale, markBackground, data, children, yField } = options; const domain = get(scale, 'y.domain', []); if (markBackground && domain.length && isArray(data)) { const domainMax = 'domainMax'; const backgroundData = data.map((item) => { return { - ...item, + ...omit(item, yField), [domainMax]: domain[domain.length - 1], }; }); @@ -37,7 +37,6 @@ export function adaptor(params: Params) { data: backgroundData, yField: domainMax, tooltip: false, - legend: false, style: { fill: '#eee', }, diff --git a/site/CNAME b/site/CNAME deleted file mode 100644 index b6bfd10c2..000000000 --- a/site/CNAME +++ /dev/null @@ -1 +0,0 @@ -g6-v3-2.antv.vision \ No newline at end of file From c224c7bbb223125b5bb24ef24ebe017954b61b45 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:13:38 +0800 Subject: [PATCH 174/268] fix: heatmap examples (#2351) --- packages/plots/src/core/plots/heatmap/adaptor.ts | 4 ++-- site/examples/statistics/heatmap/demo/basic.js | 1 + site/examples/statistics/heatmap/demo/cell-aggregated.js | 1 + site/examples/statistics/heatmap/demo/shape.js | 1 + 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/plots/src/core/plots/heatmap/adaptor.ts b/packages/plots/src/core/plots/heatmap/adaptor.ts index 351f0b9c4..db7b2a17a 100644 --- a/packages/plots/src/core/plots/heatmap/adaptor.ts +++ b/packages/plots/src/core/plots/heatmap/adaptor.ts @@ -16,8 +16,8 @@ export function adaptor(params: Params) { const tooltip = (params: Params) => { const { options } = params; const { tooltip, colorField, sizeField } = options; - if (!tooltip.field) { - tooltip.field = colorField || sizeField; + if (tooltip && !tooltip.field) { + tooltip['field'] = colorField || sizeField; } return params; }; diff --git a/site/examples/statistics/heatmap/demo/basic.js b/site/examples/statistics/heatmap/demo/basic.js index fc87e7be2..41d20eb03 100644 --- a/site/examples/statistics/heatmap/demo/basic.js +++ b/site/examples/statistics/heatmap/demo/basic.js @@ -29,6 +29,7 @@ const DemoHeatmap = () => { position: 'inside', style: { fill: '#fff', + pointerEvents: 'none', }, }, scale: { diff --git a/site/examples/statistics/heatmap/demo/cell-aggregated.js b/site/examples/statistics/heatmap/demo/cell-aggregated.js index ab6dd92e9..4ff42e950 100644 --- a/site/examples/statistics/heatmap/demo/cell-aggregated.js +++ b/site/examples/statistics/heatmap/demo/cell-aggregated.js @@ -20,6 +20,7 @@ const DemoHeatmap = () => { title: 'date', field: 'temp_max', valueFormatter: '~s', + pointerEvents: 'none' }, }; diff --git a/site/examples/statistics/heatmap/demo/shape.js b/site/examples/statistics/heatmap/demo/shape.js index 337d53aff..82196986c 100644 --- a/site/examples/statistics/heatmap/demo/shape.js +++ b/site/examples/statistics/heatmap/demo/shape.js @@ -35,6 +35,7 @@ const DemoHeatmap = () => { fill: '#fff', shadowBlur: 2, shadowColor: 'rgba(0, 0, 0, .45)', + pointerEvents: 'none', }, }, }; From c1c8e3b011304b580f029470adf993c2d280ae7e Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:26:52 +0800 Subject: [PATCH 175/268] feat: add mark background origin data field (#2352) * feat: add mark background origin data field * Update CHANGELOG.md --- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- packages/plots/src/core/plots/bar/adaptor.ts | 3 +++ packages/plots/src/core/plots/column/adaptor.ts | 14 -------------- 4 files changed, 10 insertions(+), 15 deletions(-) delete mode 100644 packages/plots/src/core/plots/column/adaptor.ts diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index ec37209c3..4d38fef30 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.1.9 + +`2024-01-10` + +- 🔥 `markBackground` 新增 originData 字段,保留原始数据 + ## 2.1.8 ## 2.1.7 diff --git a/packages/plots/package.json b/packages/plots/package.json index dfbc54134..e1da060b9 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.8", + "version": "2.1.9", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/plots/bar/adaptor.ts b/packages/plots/src/core/plots/bar/adaptor.ts index 59cdb278a..974647239 100644 --- a/packages/plots/src/core/plots/bar/adaptor.ts +++ b/packages/plots/src/core/plots/bar/adaptor.ts @@ -28,6 +28,9 @@ export function adaptor(params: Params) { const domainMax = 'domainMax'; const backgroundData = data.map((item) => { return { + originData: { + ...item, + }, ...omit(item, yField), [domainMax]: domain[domain.length - 1], }; diff --git a/packages/plots/src/core/plots/column/adaptor.ts b/packages/plots/src/core/plots/column/adaptor.ts deleted file mode 100644 index 1c7184adf..000000000 --- a/packages/plots/src/core/plots/column/adaptor.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { flow, transformOptions } from '../../utils'; -import { mark } from '../../adaptor'; -import type { Adaptor } from '../../types'; -import type { ColumnOptions } from './type'; - -type Params = Adaptor; - -/** - * @param chart - * @param options - */ -export function adaptor(params: Params) { - return flow(mark, transformOptions)(params); -} From 569feaf46a53e9dfa46333e941812da27335cfbf Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:32:52 +0800 Subject: [PATCH 176/268] fix: area type (#2355) --- packages/plots/src/core/types/common.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/plots/src/core/types/common.ts b/packages/plots/src/core/types/common.ts index 4368ac947..83750c123 100644 --- a/packages/plots/src/core/types/common.ts +++ b/packages/plots/src/core/types/common.ts @@ -86,6 +86,21 @@ export type Options = Spec & * @title 标注 */ annotations?: Array; + /** + * @title 连线 + * @description 用于面积图、柱状图等添加连接线效果 + */ + line?: Options; + /** + * @title 面积 + * @description 用于折线图添加面积效果 + */ + area?: Options; + /** + * @title 点 + * @description 用于折线图、面积图等添加点图形 + */ + point?: Options; /** * @title 嵌套 view * @description 用于 Mix 等复杂图表 From 14ca883ba66f459502ead3ccb6a6bc37bc25c324 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:33:04 +0800 Subject: [PATCH 177/268] fix: axis title update (#2356) --- packages/plots/src/core/base/index.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/plots/src/core/base/index.ts b/packages/plots/src/core/base/index.ts index 370e88a93..17bbe9eb0 100644 --- a/packages/plots/src/core/base/index.ts +++ b/packages/plots/src/core/base/index.ts @@ -25,7 +25,7 @@ export abstract class Plot extends EE { constructor(container: string | HTMLElement, options: O) { super(); this.container = typeof container === 'string' ? document.getElementById(container) : container; - this.options = mergeWithArrayCoverage({}, this.getBaseOptions(), this.getDefaultOptions(), options); + this.options = this.mergeOption(options); this.createG2(); this.bindEvents(); } @@ -108,15 +108,11 @@ export abstract class Plot extends EE { * @param options */ public update(options: Partial) { - this.updateOption(options); + this.options = this.mergeOption(options); } - /** - * 更新配置 - * @param options - */ - protected updateOption(options: Partial) { - this.options = mergeWithArrayCoverage({}, this.options, options); + protected mergeOption(options: Partial) { + return mergeWithArrayCoverage({}, this.getBaseOptions(), this.getDefaultOptions(), options); } /** From 246ad65f441b774c1967d6fec3d626313540086c Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:33:16 +0800 Subject: [PATCH 178/268] fix: tooltip render (#2357) --- packages/plots/src/hooks/useChart.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index c6fcd602e..073a6e966 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -50,7 +50,7 @@ export default function useChart(ChartC let isTooltip = flag; keys.forEach((key) => { const current = cfg[key]; - if (key === 'tooltip') isTooltip = true; + isTooltip = key === 'tooltip'; if (isFunction(current) && isValidElement(`${current}`)) { cfg[key] = (...arg) => createNode(current(...arg), isTooltip); } else { From 9ef190a37f7ac111071d52b1eba2ee6206406d18 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:33:39 +0800 Subject: [PATCH 179/268] changelog (#2358) --- packages/plots/CHANGELOG.md | 4 ++++ packages/plots/package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 4d38fef30..c117acf5e 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,7 +1,11 @@ +## 2.1.10 ## 2.1.9 `2024-01-10` +- 🐞 修复 [axis.y.title 值如果是动态的并不会更新](https://github.com/ant-design/ant-design-charts/issues/2353) +- 🐞 修复 [面积图类型丢失](https://github.com/ant-design/ant-design-charts/issues/2354) +- 🐞 修复 isTooltip render 判断逻辑 - 🔥 `markBackground` 新增 originData 字段,保留原始数据 ## 2.1.8 diff --git a/packages/plots/package.json b/packages/plots/package.json index e1da060b9..e48d4b47c 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.9", + "version": "2.1.10", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From 1c2073dccf1b5f0d1391e5b779d2af40ddc1edeb Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Thu, 11 Jan 2024 19:11:40 +0800 Subject: [PATCH 180/268] docs: add demo&document (#2360) Co-authored-by: lkd01632719 --- .../docs/options/plots/annotation/shape.en.md | 6 ++ .../docs/options/plots/annotation/shape.zh.md | 78 ++++++++++++++++ .../statistics/annotation-shape/API.en.md | 1 + .../statistics/annotation-shape/API.zh.md | 1 + .../annotation-shape/demo/interval-point.js | 54 ++++++++++++ .../annotation-shape/demo/line-badge.js | 42 +++++++++ .../annotation-shape/demo/meta.json | 32 +++++++ .../annotation-shape/demo/watermark.js | 88 +++++++++++++++++++ .../statistics/annotation-shape/index.en.md | 4 + .../statistics/annotation-shape/index.zh.md | 4 + 10 files changed, 310 insertions(+) create mode 100644 site/docs/options/plots/annotation/shape.en.md create mode 100644 site/docs/options/plots/annotation/shape.zh.md create mode 100644 site/examples/statistics/annotation-shape/API.en.md create mode 100644 site/examples/statistics/annotation-shape/API.zh.md create mode 100644 site/examples/statistics/annotation-shape/demo/interval-point.js create mode 100644 site/examples/statistics/annotation-shape/demo/line-badge.js create mode 100644 site/examples/statistics/annotation-shape/demo/meta.json create mode 100644 site/examples/statistics/annotation-shape/demo/watermark.js create mode 100644 site/examples/statistics/annotation-shape/index.en.md create mode 100644 site/examples/statistics/annotation-shape/index.zh.md diff --git a/site/docs/options/plots/annotation/shape.en.md b/site/docs/options/plots/annotation/shape.en.md new file mode 100644 index 000000000..4ab4eb55e --- /dev/null +++ b/site/docs/options/plots/annotation/shape.en.md @@ -0,0 +1,6 @@ +--- +title: shape +order: 1 +--- + + diff --git a/site/docs/options/plots/annotation/shape.zh.md b/site/docs/options/plots/annotation/shape.zh.md new file mode 100644 index 000000000..90ebd8c87 --- /dev/null +++ b/site/docs/options/plots/annotation/shape.zh.md @@ -0,0 +1,78 @@ +--- +title: shape +order: 1 +--- + +通常用来在图表上绘制一个静态的自定义图形,灵活性非常高,当然技术成本也会高一些,需要了解 [G](https://g.antv.antgroup.com/) 的 API 去绘制图形。 + +## 开始使用 + +shape + +上图中的「数据保密」的徽章图案就是使用 `shape` 绘制。在绘制图形时,可以从图表上下文中获取 [document](https://g.antv.antgroup.com/api/builtin-objects/document) 对象,随后使用 [document.createElement](https://g.antv.antgroup.com/api/builtin-objects/document#createelement) 创建基础图形。在下面的示例中我们创建了一个 [Circle](https://g.antv.antgroup.com/api/basic/circle)。 + +```ts +{ + annotations: [ + { + type: 'shape', + style: { + x: '80%', + y: '70%', + render: ({ x, y }, context, d) => { + const { document } = context; + const g = document.createElement('g', {}); + const c1 = document.createElement('circle', { + style: { + cx: x, + cy: y, + lineWidth: 4, + r: 65, + stroke: 'red', + opacity: 0.3, + }, + }); + const c2 = document.createElement('circle', { + style: { + cx: x, + cy: y, + lineWidth: 2, + r: 50, + stroke: 'red', + opacity: 0.3, + }, + }); + const text = document.createElement('text', { + style: { + x, + y, + text: '数据保密', + transform: 'rotate(30)', + fontSize: 20, + fill: 'red', + textAlign: 'center', + textBaseline: 'middle', + fillOpacity: 0.3, + }, + }); + g.appendChild(c1); + g.appendChild(c2); + g.appendChild(text); + return g; + }, + }, + }, + ], +}; +``` + +可以查看[图表徽章水印](/examples/statistics/annotation-shape/#watermark)具体示例。 + +## 选项 + +| 属性 | 描述 | 类型 | 默认值 | - | +| ----------- | -------------------------------------------------------- | ---------------------------------- | -------- | --- | +| x | 设置图形的位置 x,支持百分比(`'50%'`)和像素值(`200`) | `number` | `string` | - | +| y | 设置图形的位置 y,支持百分比(`'50%'`)和像素值(`200`) | `number` | `string` | - | +| render | 对应的自定义渲染函数,函数需要返回 G 的 DisplayObject | `(style: object) => DisplayObject` | - | +| { ...rest } | 自定义图形的额外参数,都会作为 `render` 函数的第一个参数属性 | `object` | - | \ No newline at end of file diff --git a/site/examples/statistics/annotation-shape/API.en.md b/site/examples/statistics/annotation-shape/API.en.md new file mode 100644 index 000000000..eb88c070c --- /dev/null +++ b/site/examples/statistics/annotation-shape/API.en.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/annotation-shape/API.zh.md b/site/examples/statistics/annotation-shape/API.zh.md new file mode 100644 index 000000000..a8382b46d --- /dev/null +++ b/site/examples/statistics/annotation-shape/API.zh.md @@ -0,0 +1 @@ + diff --git a/site/examples/statistics/annotation-shape/demo/interval-point.js b/site/examples/statistics/annotation-shape/demo/interval-point.js new file mode 100644 index 000000000..8f26f285f --- /dev/null +++ b/site/examples/statistics/annotation-shape/demo/interval-point.js @@ -0,0 +1,54 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoAnnotationShape = () => { + const data = [ + { x: 'Jan', tick: 9.3, value: 11.5 }, + { x: 'Feb', tick: 10.5, value: 12 }, + { x: 'Mar', tick: 11.2, value: 11.7 }, + { x: 'Apr', tick: 11.2, value: 12.4 }, + { x: 'May', tick: 12.7, value: 13.5 }, + { x: 'Jun', tick: 13.1, value: 11.9 }, + { x: 'Jul', tick: 12.2, value: 14.6 }, + { x: 'Aug', tick: 12.2, value: 17.2 }, + { x: 'Sep', tick: 10.1, value: 16.9 }, + { x: 'Oct', tick: 14.5, value: 15.4 }, + { x: 'Nov', tick: 14.5, value: 16.9 }, + { x: 'Dec', tick: 15.5, value: 17.2 }, + ]; + + const config = { + data, + xField: 'x', + yField: 'value', + paddingRight: 30, + sizeField: 20, + coordinate: { transform: [{ type: 'transpose' }] }, + axis: { x: { title: false } }, + labels: [ + { + text: 'value', + position: 'right', + formatter: (v) => `${v}min`, + dx: 4, + textAlign: 'start', + }, + ], + style: { fillOpacity: 0.65, lineWidth: 1 }, + annotations: [ + { + type: 'point', + xField: 'x', + yField: 'tick', + shapeField: 'line', + sizeField: 15, + style: { stroke: 'red' }, + tooltip: false, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/annotation-shape/demo/line-badge.js b/site/examples/statistics/annotation-shape/demo/line-badge.js new file mode 100644 index 000000000..f3e1421ab --- /dev/null +++ b/site/examples/statistics/annotation-shape/demo/line-badge.js @@ -0,0 +1,42 @@ +import { Line } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoAnnotationShape = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antvdemo/assets/data/blockchain.json', + transform: [ + { + type: 'fold', + fields: ['blockchain', 'nlp'], + key: 'type', + value: 'value', + }, + ], + }, + xField: (d) => new Date(d.date), + yField: 'value', + colorField: 'type', + axis: { x: { labelAutoHide: 'greedy' } }, + annotations: [ + { + type: 'text', + data: [new Date('2017-12-17'), 100], + shape: 'badge', + style: { + text: '100', + dy: -1, + markerSize: 24, + markerFill: '#6395FA', + markerFillOpacity: 0.55, + }, + tooltip: false, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/annotation-shape/demo/meta.json b/site/examples/statistics/annotation-shape/demo/meta.json new file mode 100644 index 000000000..0bbbe9630 --- /dev/null +++ b/site/examples/statistics/annotation-shape/demo/meta.json @@ -0,0 +1,32 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "interval-point.js", + "title": { + "zh": "点标记的条形图", + "en": "Interval, Point Annotation" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ypE2SbuV6kwAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "line-badge.js", + "title": { + "zh": "徽章标记的折线图", + "en": "Line, Badge Annotation" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*INjOS7ExVzYAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "watermark.js", + "title": { + "zh": "徽章水印", + "en": "Watermark" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*LA11Rqfk2Y4AAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/site/examples/statistics/annotation-shape/demo/watermark.js b/site/examples/statistics/annotation-shape/demo/watermark.js new file mode 100644 index 000000000..e9e20a69e --- /dev/null +++ b/site/examples/statistics/annotation-shape/demo/watermark.js @@ -0,0 +1,88 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoAnnotationShape = () => { + const data = [ + { month: 'Jan.', profit: 387264, start: 0, end: 387264 }, + { month: 'Feb.', profit: 772096, start: 387264, end: 1159360 }, + { month: 'Mar.', profit: 638075, start: 1159360, end: 1797435 }, + { month: 'Apr.', profit: -211386, start: 1797435, end: 1586049 }, + { month: 'May', profit: -138135, start: 1586049, end: 1447914 }, + { month: 'Jun', profit: -267238, start: 1447914, end: 1180676 }, + { month: 'Jul.', profit: 431406, start: 1180676, end: 1612082 }, + { month: 'Aug.', profit: 363018, start: 1612082, end: 1975100 }, + { month: 'Sep.', profit: -224638, start: 1975100, end: 1750462 }, + { month: 'Oct.', profit: -299867, start: 1750462, end: 1450595 }, + { month: 'Nov.', profit: 607365, start: 1450595, end: 2057960 }, + { month: 'Dec.', profit: 1106986, start: 2057960, end: 3164946 }, + { month: 'Total', start: 0, end: 3164946 }, + ]; + + const config = { + data, + xField: 'month', + yField: ['end', 'start'], + colorField: (d) => (d.month === 'Total' ? 'Total' : d.profit > 0 ? 'Increase' : 'Decrease'), + axis: { y: { labelFormatter: '~s' } }, + tooltip: { + items: [ + { channel: 'y', valueFormatter: '~s' }, + { channel: 'y1', valueFormatter: '~s' }, + ], + }, + annotations: [ + { + type: 'shape', + style: { + x: '80%', + y: '70%', + render: ({ x, y }, context, d) => { + const { document } = context; + const g = document.createElement('g', {}); + const c1 = document.createElement('circle', { + style: { + cx: x, + cy: y, + lineWidth: 4, + r: 65, + stroke: 'red', + opacity: 0.3, + }, + }); + const c2 = document.createElement('circle', { + style: { + cx: x, + cy: y, + lineWidth: 2, + r: 50, + stroke: 'red', + opacity: 0.3, + }, + }); + const text = document.createElement('text', { + style: { + x, + y, + text: '数据保密', + transform: 'rotate(30)', + fontSize: 20, + fill: 'red', + textAlign: 'center', + textBaseline: 'middle', + fillOpacity: 0.3, + }, + }); + g.appendChild(c1); + g.appendChild(c2); + g.appendChild(text); + return g; + }, + }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/annotation-shape/index.en.md b/site/examples/statistics/annotation-shape/index.en.md new file mode 100644 index 000000000..6e1afd25b --- /dev/null +++ b/site/examples/statistics/annotation-shape/index.en.md @@ -0,0 +1,4 @@ +--- +title: Annotation Shape +order: 22 +--- \ No newline at end of file diff --git a/site/examples/statistics/annotation-shape/index.zh.md b/site/examples/statistics/annotation-shape/index.zh.md new file mode 100644 index 000000000..79c75c54b --- /dev/null +++ b/site/examples/statistics/annotation-shape/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 图形标注 +order: 22 +--- From 58c8f5ae028e13a3216aa7d28d93b06128f70ca2 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 12 Jan 2024 10:40:26 +0800 Subject: [PATCH 181/268] fix: tooltip debounce (#2362) --- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- packages/plots/src/hooks/useChart.ts | 6 +++++- site/examples/statistics/bar/demo/background.js | 4 ++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index c117acf5e..6fe4fd9f1 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.1.11 + +`2024-01-12` + +- 🐞 修复 tooltip 抖动 + ## 2.1.10 ## 2.1.9 diff --git a/packages/plots/package.json b/packages/plots/package.json index e48d4b47c..9830eb770 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.10", + "version": "2.1.11", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 073a6e966..840049528 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -50,7 +50,9 @@ export default function useChart(ChartC let isTooltip = flag; keys.forEach((key) => { const current = cfg[key]; - isTooltip = key === 'tooltip'; + if (key === 'tooltip') { + isTooltip = true; + } if (isFunction(current) && isValidElement(`${current}`)) { cfg[key] = (...arg) => createNode(current(...arg), isTooltip); } else { @@ -60,6 +62,8 @@ export default function useChart(ChartC }); } else if (isObject(current)) { processConfig(current, isTooltip); + } else { + isTooltip = flag; } } }); diff --git a/site/examples/statistics/bar/demo/background.js b/site/examples/statistics/bar/demo/background.js index e6b35ffe8..dc3d10fe5 100644 --- a/site/examples/statistics/bar/demo/background.js +++ b/site/examples/statistics/bar/demo/background.js @@ -32,8 +32,8 @@ const DemoBar = () => { }, markBackground: { label: { - text: (d) => { - return `${(d.value / 1000) * 100}% | ${d.value}`; + text: ({ originData }) => { + return `${(originData.value / 1000) * 100}% | ${originData.value}`; }, position: 'right', dx: 80, From 508513ee15d3969bbeafc6b722b20f0ee9a5f808 Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Mon, 15 Jan 2024 14:52:33 +0800 Subject: [PATCH 182/268] docs: add demo (#2367) Co-authored-by: lkd01632719 --- site/examples/statistics/line/demo/meta.json | 8 ++++ .../statistics/line/demo/style-callback.js | 45 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 site/examples/statistics/line/demo/style-callback.js diff --git a/site/examples/statistics/line/demo/meta.json b/site/examples/statistics/line/demo/meta.json index 4d30e4c48..404e629a5 100644 --- a/site/examples/statistics/line/demo/meta.json +++ b/site/examples/statistics/line/demo/meta.json @@ -75,6 +75,14 @@ "en": "Slider" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*xZAVSKcWzrwAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "style-callback.js", + "title": { + "zh": "通过回调函数指定折线样式", + "en": "Set line style through callback" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*p1n4RI9YynkAAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/statistics/line/demo/style-callback.js b/site/examples/statistics/line/demo/style-callback.js new file mode 100644 index 000000000..d41bdaeb5 --- /dev/null +++ b/site/examples/statistics/line/demo/style-callback.js @@ -0,0 +1,45 @@ +import { Line } from '@ant-design/plots'; +import React, { useState, useEffect } from 'react'; +import ReactDOM from 'react-dom'; + +const DemoLine = () => { + const [data, setData] = useState([]); + + useEffect(() => { + asyncFetch(); + }, []); + + const asyncFetch = () => { + fetch('https://gw.alipayobjects.com/os/bmw-prod/c48dbbb1-fccf-4a46-b68f-a3ddb4908b68.json') + .then((response) => response.json()) + .then((json) => setData(json)) + .catch((error) => { + console.log('fetch data failed', error); + }); + }; + const config = { + data, + xField: 'date', + yField: 'value', + colorField: 'type', + axis: { + y: { + labelFormatter: (v) => `${v}`.replace(/\d{1,3}(?=(\d{3})+$)/g, (s) => `${s},`), + }, + }, + scale: { color: { range: ['#30BF78', '#F4664A', '#FAAD14'] } }, + style: { + lineWidth: 2, + lineDash: (data) => { + if (data[0].type === 'register') return [4, 4]; + }, + opacity: (data) => { + if (data[0].type !== 'register') return 0.5; + }, + }, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 14bfe2aa72483b82f4263a9c32351d2758b967a0 Mon Sep 17 00:00:00 2001 From: i11I04i <58681207+i11I04i@users.noreply.github.com> Date: Tue, 16 Jan 2024 22:34:10 +0800 Subject: [PATCH 183/268] fix: empty array (#2363) Co-authored-by: lkd01632719 --- packages/plots/src/core/plots/sankey/adaptor.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/plots/src/core/plots/sankey/adaptor.ts b/packages/plots/src/core/plots/sankey/adaptor.ts index 2dcd65f0e..251f353f9 100644 --- a/packages/plots/src/core/plots/sankey/adaptor.ts +++ b/packages/plots/src/core/plots/sankey/adaptor.ts @@ -20,10 +20,14 @@ export function adaptor(params: Params) { }, ]; if (isArray(data)) { - set(options, 'data', { - value: data, - transform: defaultTransform, - }); + if (data.length > 0) { + set(options, 'data', { + value: data, + transform: defaultTransform, + }); + } else { + delete options.children; + } } else if (get(data, 'type') === 'fetch' && get(data, 'value')) { const transform = get(data, 'transform'); if (isArray(transform)) { From 8062d804f4200578e4d3ecfb0e10bfb853098401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=9A=E6=A1=91?= <31983804+X-x-start@users.noreply.github.com> Date: Tue, 16 Jan 2024 22:34:49 +0800 Subject: [PATCH 184/268] =?UTF-8?q?annotations=20range=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=A0=87=E6=B3=A8=20=E6=96=87=E6=A1=A3=E4=BF=AE=E5=A4=8D=20(#2?= =?UTF-8?q?372)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: annotations range类型标注 文档修复 * fix: annotations range类型标注 文档修复 --------- Co-authored-by: 博桑 --- site/docs/options/plots/annotation/range.zh.md | 4 +--- site/docs/options/plots/annotation/rangeX.zh.md | 4 +--- site/docs/options/plots/annotation/rangeY.zh.md | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/site/docs/options/plots/annotation/range.zh.md b/site/docs/options/plots/annotation/range.zh.md index 50349bcf3..7d6b976b0 100644 --- a/site/docs/options/plots/annotation/range.zh.md +++ b/site/docs/options/plots/annotation/range.zh.md @@ -40,9 +40,7 @@ order: 1 ## 选项 -目前 range 只有一种同名的 shape 图形。 - -### range +### style | 属性 | 描述 | 类型 | 默认值 | |----------------|------------------------------------------------|---------------------|------------| diff --git a/site/docs/options/plots/annotation/rangeX.zh.md b/site/docs/options/plots/annotation/rangeX.zh.md index 790d79986..a22e949d6 100644 --- a/site/docs/options/plots/annotation/rangeX.zh.md +++ b/site/docs/options/plots/annotation/rangeX.zh.md @@ -40,9 +40,7 @@ order: 1 ## 选项 -目前 rangeX 只有 range 一种 shape 图形。 - -### range +### style | 属性 | 描述 | 类型 | 默认值 | | ------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | --------- | diff --git a/site/docs/options/plots/annotation/rangeY.zh.md b/site/docs/options/plots/annotation/rangeY.zh.md index 84d83163c..4f4c17a97 100644 --- a/site/docs/options/plots/annotation/rangeY.zh.md +++ b/site/docs/options/plots/annotation/rangeY.zh.md @@ -25,9 +25,7 @@ order: 1 ## 选项 -目前 rangeY 只有 range 一种 shape 图形。 - -### range +### style | 属性 | 描述 | 类型 | 默认值 | | ------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | --------- | From 2fa16960c305017238dab5107d4acbdc983178f2 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 16 Jan 2024 22:38:50 +0800 Subject: [PATCH 185/268] fix: react element (#2373) * fix: react element * changelog --- packages/plots/CHANGELOG.md | 7 +++++++ packages/plots/package.json | 2 +- packages/plots/src/util/is-valid-element.ts | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 6fe4fd9f1..127443d63 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.1.12 + +`2024-01-16` + +- 🐞 修复 isValidElement 检测不全 +- 🐞 [ Sankey throws error when data is empty](https://github.com/ant-design/ant-design-charts/issues/2361) + ## 2.1.11 `2024-01-12` diff --git a/packages/plots/package.json b/packages/plots/package.json index 9830eb770..53359f191 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.11", + "version": "2.1.12", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/util/is-valid-element.ts b/packages/plots/src/util/is-valid-element.ts index 95156f45a..daf067673 100644 --- a/packages/plots/src/util/is-valid-element.ts +++ b/packages/plots/src/util/is-valid-element.ts @@ -1,5 +1,5 @@ export const isValidElement = (jsxCode: string): boolean => { - const jsxRegex = /react|\.jsx|children:\[\(/i; + const jsxRegex = /react|\.jsx|children:\[\(|return\s+\S+.createElement\([^\)]*,/i; return jsxRegex.test(jsxCode); }; From d26645e66ad4f76a70986d6523a68950daf912a4 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 19 Feb 2024 11:45:29 +0800 Subject: [PATCH 186/268] fix: demo code (#2412) * fix: demo code * chore: demo --- site/examples/statistics/column/demo/slider.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/site/examples/statistics/column/demo/slider.js b/site/examples/statistics/column/demo/slider.js index ccd686f55..927d3638b 100644 --- a/site/examples/statistics/column/demo/slider.js +++ b/site/examples/statistics/column/demo/slider.js @@ -17,13 +17,9 @@ const DemoColumn = () => { xField: '城市', yField: '销售额', slider: { - x: {}, - }, - onReady: (chartsInstance) => { - // 初始选区范围 - chartsInstance.emit('sliderX:filter', { - data: { selection: [[0.1, 0.2], undefined] }, - }); + x: { + values: [0.1, 0.2], + }, }, }; return ; From e4021353c667c91290242e9252214eea06374abf Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 19 Feb 2024 11:45:51 +0800 Subject: [PATCH 187/268] fix: is valid element (#2398) --- package.json | 4 ++-- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- packages/plots/src/util/is-valid-element.ts | 3 ++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 4642c0f7e..3fa08b6ef 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "add:changelog": "pnpm changeset", "before:release": "pnpm run build", "release": "pnpm run before:release && pnpm publish --no-git-checks -r --registry=https://registry.npmjs.org --filter @ant-design/*", - "release:alpha": "pnpm publish --tag alpha --no-git-checks -r --filter @ant-design/*", - "release:beta": "pnpm publish --tag beta --no-git-checks -r --filter @ant-design/*" + "release:alpha": "pnpm run before:release && pnpm publish --tag alpha --no-git-checks -r --filter @ant-design/*", + "release:beta": "pnpm run before:release && pnpm publish --tag beta --no-git-checks -r --filter @ant-design/*" }, "devDependencies": { "@babel/core": "^7.11.6", diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 127443d63..da91cc939 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.1.13 + +`2024-02-06` + +- 🐞 修复 isValidElement 检测错误 + ## 2.1.12 `2024-01-16` diff --git a/packages/plots/package.json b/packages/plots/package.json index 53359f191..1abe2021a 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.12", + "version": "2.1.13", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/util/is-valid-element.ts b/packages/plots/src/util/is-valid-element.ts index daf067673..a34b6f005 100644 --- a/packages/plots/src/util/is-valid-element.ts +++ b/packages/plots/src/util/is-valid-element.ts @@ -1,5 +1,6 @@ export const isValidElement = (jsxCode: string): boolean => { - const jsxRegex = /react|\.jsx|children:\[\(|return\s+\S+.createElement\([^\)]*,/i; + const jsxRegex = + /react|\.jsx|children:\[\(|return\s+[A-Za-z0-9].createElement\((?!['"][g|circle|ellipse|image|rect|line|polyline|polygon|text|path|html|mesh]['"])([^\)])*,/i; return jsxRegex.test(jsxCode); }; From 6e5fd1d8766ba0ab1cf79b980fa476d0e8f6243e Mon Sep 17 00:00:00 2001 From: OctKun <2310353398@qq.com> Date: Mon, 19 Feb 2024 11:48:10 +0800 Subject: [PATCH 188/268] =?UTF-8?q?feat:=20=E9=A5=BC=E5=9B=BE=E8=81=94?= =?UTF-8?q?=E5=8A=A8=20(#2384)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: chenkun --- .../statistics/pie/demo/association-pie.js | 121 ++++++++++++++++++ site/examples/statistics/pie/demo/meta.json | 8 ++ 2 files changed, 129 insertions(+) create mode 100644 site/examples/statistics/pie/demo/association-pie.js diff --git a/site/examples/statistics/pie/demo/association-pie.js b/site/examples/statistics/pie/demo/association-pie.js new file mode 100644 index 000000000..4d38a48f8 --- /dev/null +++ b/site/examples/statistics/pie/demo/association-pie.js @@ -0,0 +1,121 @@ +import React, { useState, useEffect } from 'react'; +import ReactDOM from 'react-dom'; +import { Pie } from '@ant-design/plots'; + +const PlotMaps = {}; + +const DemoPie = () => { + const [data, setData] = useState({}); + + useEffect(() => { + asyncFetch(); + }, []); + + const asyncFetch = () => { + fetch('https://gw.alipayobjects.com/os/antfincdn/fKTgtjKdaN/association-pie.json') + .then((response) => response.json()) + .then((json) => setData(json)) + .catch((error) => { + console.log('fetch data failed', error); + }); + }; + + if (!Object.keys(data).length) { + return null; + } + + const showTooltip = (evt, pie) => { + Object.keys(PlotMaps).forEach((plot) => { + if (plot !== pie) { + PlotMaps[plot].chart.emit('tooltip:show', { + data: { data: { area: evt.data.data.area } }, + }); + PlotMaps[plot].chart.emit('element:highlight', { + data: { data: { area: evt.data.data.area } }, + }); + } + }); + }; + + const hideTooltip = (evt, pie) => { + Object.keys(PlotMaps).forEach((plot) => { + if (plot !== pie) { + PlotMaps[plot].chart.emit('tooltip:hide', { + data: { data: { area: evt.data.data.area } }, + }); + PlotMaps[plot].chart.emit('element:unhighlight', { + data: { data: { area: evt.data.data.area } }, + }); + } + }); + }; + + const LeftConfig = { + angleField: 'bill', + colorField: 'area', + data: data.pie1, + label: { + text: 'bill', + }, + legend: false, + tooltip: { + title: 'area', + }, + interaction: { + elementHighlight: true, + }, + state: { + inactive: { opacity: 0.5 }, + }, + }; + const RightConfig = { + angleField: 'value', + colorField: 'area', + data: data.pie2, + label: { + text: 'value', + }, + legend: false, + tooltip: { + title: 'area', + }, + interaction: { + elementHighlight: true, + }, + state: { + inactive: { opacity: 0.5 }, + }, + }; + return ( +

+ { + PlotMaps.leftPie = plot; + plot.chart.on('interval:pointerover', (evt) => { + showTooltip(evt, 'leftPie'); + }); + plot.chart.on('interval:pointerout', (evt) => { + hideTooltip(evt, 'leftPie'); + }); + }} + /> + { + PlotMaps.rightPie = plot; + plot.chart.on('interval:pointerover', (evt) => { + showTooltip(evt, 'rightPie'); + }); + plot.chart.on('interval:pointerout', (evt) => { + hideTooltip(evt, 'rightPie'); + }); + }} + /> +
+ ); +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/pie/demo/meta.json b/site/examples/statistics/pie/demo/meta.json index a7c5108d3..d83d29db2 100644 --- a/site/examples/statistics/pie/demo/meta.json +++ b/site/examples/statistics/pie/demo/meta.json @@ -67,6 +67,14 @@ "en": "Pie plot - Donut Chart" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*_OHoQb0Xho8AAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "association-pie.js", + "title": { + "zh": "饼图联动", + "en": "Association Pie" + }, + "screenshot": "https://gw.alipayobjects.com/zos/antfincdn/8hTlCI2Fbn/association-pie.gif" } ] } From b61c8d0d6c78a1e24385cf3fe8f1c2eed5f8fc52 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 27 Feb 2024 11:53:00 +0800 Subject: [PATCH 189/268] fix: g version (#2420) * fix: g version * chore: relseae --- packages/plots/CHANGELOG.md | 8 ++++++++ packages/plots/package.json | 11 ++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index da91cc939..e217c722d 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.1.14 +## 2.1.14-beta.0 + +`2024-02-21` + +- 🐞 修复 `@antv/g` 版本冲突 + + ## 2.1.13 `2024-02-06` diff --git a/packages/plots/package.json b/packages/plots/package.json index 1abe2021a..5fc819966 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.13", + "version": "2.1.14", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" @@ -36,15 +36,16 @@ "test:live": "DEBUG_MODE=1 jest --watch ./tests/plots/column-proxy-spec.tsx --no-cache" }, "dependencies": { + "@ant-design/charts-util": "workspace:*", "@antv/event-emitter": "^0.1.3", + "@antv/g": "^5.18.24", "@antv/g2": "^5.1.9", - "@antv/g2-extension-plot": "^0.1.1", - "@ant-design/charts-util": "workspace:*" + "@antv/g2-extension-plot": "^0.1.1" }, "peerDependencies": { + "lodash-es": "^4.17.21", "react": ">=16.8.4", - "react-dom": ">=16.8.4", - "lodash-es": "^4.17.21" + "react-dom": ">=16.8.4" }, "sideEffects": false, "license": "MIT", From df7e8fcfb253df497ba73ce1707b1270f01b3e8e Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Mon, 11 Mar 2024 19:48:00 +0800 Subject: [PATCH 190/268] feat(plot): add heatmap demo (#2446) * feat(plot): add heatmap demo * Update adaptor.ts --------- Co-authored-by: wb-xcf804241 Co-authored-by: Joel Alan <31396322+lxfu1@users.noreply.github.com> --- .../plots/src/core/plots/heatmap/adaptor.ts | 4 ++-- site/docs/options/plots/special/heatmap.zh.md | 2 +- .../heatmap/demo/heatmap-density.js | 24 +++++++++++++++++++ .../statistics/heatmap/demo/meta.json | 8 +++++++ 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 site/examples/statistics/heatmap/demo/heatmap-density.js diff --git a/packages/plots/src/core/plots/heatmap/adaptor.ts b/packages/plots/src/core/plots/heatmap/adaptor.ts index db7b2a17a..43c15ce56 100644 --- a/packages/plots/src/core/plots/heatmap/adaptor.ts +++ b/packages/plots/src/core/plots/heatmap/adaptor.ts @@ -15,9 +15,9 @@ export function adaptor(params: Params) { */ const tooltip = (params: Params) => { const { options } = params; - const { tooltip, colorField, sizeField } = options; + const { tooltip = {}, colorField, sizeField } = options; if (tooltip && !tooltip.field) { - tooltip['field'] = colorField || sizeField; + tooltip.field = colorField || sizeField; } return params; }; diff --git a/site/docs/options/plots/special/heatmap.zh.md b/site/docs/options/plots/special/heatmap.zh.md index 56b956ec2..ff12a176a 100644 --- a/site/docs/options/plots/special/heatmap.zh.md +++ b/site/docs/options/plots/special/heatmap.zh.md @@ -9,4 +9,4 @@ order: 7 **optional** _string_ -热力图类型,'point' | 'cell' +热力图类型,'point' | 'cell' | 'heatmap' diff --git a/site/examples/statistics/heatmap/demo/heatmap-density.js b/site/examples/statistics/heatmap/demo/heatmap-density.js new file mode 100644 index 000000000..512fc4a44 --- /dev/null +++ b/site/examples/statistics/heatmap/demo/heatmap-density.js @@ -0,0 +1,24 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Heatmap } from '@ant-design/plots'; + +const DemoHeatmap = () => { + const config = { + mark: 'heatmap', + data: { + type: "fetch", + value: "https://assets.antv.antgroup.com/g2/heatmap.json", + }, + xField: 'g', + yField: 'l', + colorField: 'tmp', + sizeField: 26, + style: { + opacity: 0, + }, + }; + + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/statistics/heatmap/demo/meta.json b/site/examples/statistics/heatmap/demo/meta.json index c47f35ff1..2d2694234 100644 --- a/site/examples/statistics/heatmap/demo/meta.json +++ b/site/examples/statistics/heatmap/demo/meta.json @@ -27,6 +27,14 @@ "en": "Aggregated Heatmap" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*ru0HSZ6RiCsAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "heatmap-density.js", + "title": { + "zh": "密度热力图", + "en": "Density Heatmap" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*mfxdT4ozJXAAAAAAAAAAAAAADmJ7AQ/original" } ] } From cd31b09bf734eb37573d20defb4a4e0071cb5c16 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 11 Mar 2024 19:52:03 +0800 Subject: [PATCH 191/268] chore: update site (#2447) --- site/.dumirc.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/site/.dumirc.ts b/site/.dumirc.ts index 6e9906ab4..fc2b7ffee 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -23,8 +23,8 @@ export default defineConfig({ showChartResize: true, // 是否在 demo 页展示图表视图切换 showAPIDoc: process.env.NODE_ENV === 'production', // 是否在 demo 页展示 API 说明 versions: { - [version]: 'https://ant-design-charts-next.antgroup.com', - '1.x': 'https://ant-design-charts.antgroup.com', + [version]: 'https://ant-design-charts.antgroup.com', + '1.x': 'https://ant-design-charts-v1.antgroup.com', '0.x': 'https://v0-charts.ant.design/', }, docsearchOptions: { From 136938ea76ae8941ef8fbf5b3fd6a373a2218326 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 11 Mar 2024 20:16:30 +0800 Subject: [PATCH 192/268] chore: site workflows (#2448) * chore: update site * chore: workflows --- .github/workflows/v2-site.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/v2-site.yml b/.github/workflows/v2-site.yml index ed01cc523..9322e3e17 100644 --- a/.github/workflows/v2-site.yml +++ b/.github/workflows/v2-site.yml @@ -21,7 +21,7 @@ jobs: with: fetch-depth: 0 - name: Switch to site branch - run: git checkout -b site + run: git checkout -b gh-pages - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: @@ -65,5 +65,5 @@ jobs: git config --local user.name "lxfu1" git add . git commit -m "chore: update site" - - name: push to site branch - run: git push origin site -f + - name: push to gh-pages branch + run: git push origin gh-pages -f From 021d9734d0b6da67848fb7b544a5c3d648fd6a4a Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 13 Mar 2024 15:36:11 +0800 Subject: [PATCH 193/268] Update v2-site.yml (#2449) * Update v2-site.yml * Update v2-site.yml --- .github/workflows/v2-site.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/v2-site.yml b/.github/workflows/v2-site.yml index 9322e3e17..babc26968 100644 --- a/.github/workflows/v2-site.yml +++ b/.github/workflows/v2-site.yml @@ -48,7 +48,7 @@ jobs: - name: copy and delete files run: | find . -maxdepth 1 -type f -exec rm -f {} \; - cp -r site/dist ./ + cp -r site/dist/* ./ rm -rf site rm -rf node_modules rm -rf packages From 6f5f5b36fbb313c289968385eb85acaaa9a12298 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:16:03 +0800 Subject: [PATCH 194/268] =?UTF-8?q?fix(field):=20=E4=BF=AE=E5=A4=8D=20fiel?= =?UTF-8?q?d=20=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B=E7=9A=84=E9=94=99?= =?UTF-8?q?=E8=AF=AF=20(#2450)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: wb-xcf804241 --- packages/plots/src/core/plots/bullet/type.ts | 1 + .../plots/src/core/plots/funnel/adaptor.ts | 1 - packages/plots/src/core/plots/funnel/type.ts | 1 + packages/plots/src/core/plots/pie/adaptor.ts | 8 ++-- .../src/core/plots/radial-bar/adaptor.ts | 10 ++-- .../plots/src/core/plots/stock/adaptor.ts | 9 +++- packages/plots/src/core/plots/venn/type.ts | 2 +- .../plots/src/core/plots/waterfall/adaptor.ts | 14 +++--- packages/plots/src/core/types/common.ts | 48 ++++++++++++------- .../plots/src/core/utils/field-adapter.ts | 14 ++++++ packages/plots/src/core/utils/index.ts | 1 + 11 files changed, 75 insertions(+), 34 deletions(-) create mode 100644 packages/plots/src/core/utils/field-adapter.ts diff --git a/packages/plots/src/core/plots/bullet/type.ts b/packages/plots/src/core/plots/bullet/type.ts index 7154b98d7..336d609bf 100644 --- a/packages/plots/src/core/plots/bullet/type.ts +++ b/packages/plots/src/core/plots/bullet/type.ts @@ -6,6 +6,7 @@ export type BulletOptions = Options & { measures: string | string[]; target: string | string[]; }; + xField: string; rangeField: string; measureField: string; targetField: string; diff --git a/packages/plots/src/core/plots/funnel/adaptor.ts b/packages/plots/src/core/plots/funnel/adaptor.ts index 2912f3652..ab04511b3 100644 --- a/packages/plots/src/core/plots/funnel/adaptor.ts +++ b/packages/plots/src/core/plots/funnel/adaptor.ts @@ -58,7 +58,6 @@ export function adaptor(params: Params) { set(options, 'type', 'spaceFlex'); set(options, 'ratio', [1, 1]); set(options, 'direction', isTransposed ? 'row' : 'col'); - // @ts-expect-error delete options['seriesField']; } diff --git a/packages/plots/src/core/plots/funnel/type.ts b/packages/plots/src/core/plots/funnel/type.ts index cc42dd371..b5d2ac5fa 100644 --- a/packages/plots/src/core/plots/funnel/type.ts +++ b/packages/plots/src/core/plots/funnel/type.ts @@ -2,5 +2,6 @@ import type { Options } from '../../types/common'; export type FunnelOptions = Options & { compareField?: string; + seriesField?: string; isTransposed?: boolean; }; diff --git a/packages/plots/src/core/plots/pie/adaptor.ts b/packages/plots/src/core/plots/pie/adaptor.ts index 6e26b926e..6c20c0f6b 100644 --- a/packages/plots/src/core/plots/pie/adaptor.ts +++ b/packages/plots/src/core/plots/pie/adaptor.ts @@ -1,4 +1,4 @@ -import { flow, transformOptions, isArray, set } from '../../utils'; +import { flow, transformOptions, isArray, set, fieldAdapter } from '../../utils'; import type { Adaptor } from '../../types'; import type { PieOptions } from './type'; @@ -16,6 +16,8 @@ export function adaptor(params: Params) { const emptyData = (params: Params) => { const { options } = params; const { angleField, data, label, tooltip, colorField } = options; + + const getColorValue = fieldAdapter(colorField); if (isArray(data)) { const sum = data.reduce((a, b) => a + b[angleField], 0); if (sum === 0) { @@ -31,9 +33,9 @@ export function adaptor(params: Params) { set(options, 'tooltip', { ...tooltip, items: [ - (arg) => { + (arg, i, d) => { return { - name: arg[colorField], + name: getColorValue(arg, i, d), value: 0, }; }, diff --git a/packages/plots/src/core/plots/radial-bar/adaptor.ts b/packages/plots/src/core/plots/radial-bar/adaptor.ts index a30f11180..b83bdd397 100644 --- a/packages/plots/src/core/plots/radial-bar/adaptor.ts +++ b/packages/plots/src/core/plots/radial-bar/adaptor.ts @@ -1,4 +1,4 @@ -import { flow, set, transformOptions, isNumber, get } from '../../utils'; +import { flow, set, transformOptions, isNumber, get, fieldAdapter } from '../../utils'; import { mark } from '../../adaptor'; import type { Adaptor } from '../../types'; import type { RadialBarOptions } from './type'; @@ -37,13 +37,15 @@ export function adaptor(params: Params) { const tooltip = (params: Params) => { const { options } = params; const { tooltip, xField, yField } = options; + + const getXFieldData = fieldAdapter(xField); + const getYFieldData = fieldAdapter(yField); + if (!tooltip) { set(options, 'tooltip', { title: false, items: [ - (d) => { - return { name: d[xField], value: d[yField] }; - }, + (d, i, data) => ({ name: getXFieldData(d, i, data), value: getYFieldData(d, i, data) }), ], }); } diff --git a/packages/plots/src/core/plots/stock/adaptor.ts b/packages/plots/src/core/plots/stock/adaptor.ts index eecbfc08a..a19ca4c99 100644 --- a/packages/plots/src/core/plots/stock/adaptor.ts +++ b/packages/plots/src/core/plots/stock/adaptor.ts @@ -1,4 +1,4 @@ -import { set, flow, map, transformOptions } from '../../utils'; +import { set, flow, map, transformOptions, fieldAdapter } from '../../utils'; import type { Adaptor } from '../../types'; import type { StockOptions } from './type'; @@ -40,13 +40,18 @@ export function adaptor(params: Params) { const [open, close, high, low] = yField; + const getFieldData = fieldAdapter(xField); + params.options.children = map(params.options.children, (child, index) => { const isShadow = index === 0; return { ...child, tooltip: { - title: (d) => (d[xField] instanceof Date ? d[xField].toLocaleString() : d[xField]), + title: (d, i, data) => { + const v = getFieldData(d, i, data); + return v instanceof Date ? v.toLocaleString() : v; + }, items: [{ field: high }, { field: low }, { field: open }, { field: close }], }, encode: { diff --git a/packages/plots/src/core/plots/venn/type.ts b/packages/plots/src/core/plots/venn/type.ts index 58210d386..a9d6026d5 100644 --- a/packages/plots/src/core/plots/venn/type.ts +++ b/packages/plots/src/core/plots/venn/type.ts @@ -8,7 +8,7 @@ export type VennOptions = Options & { /** * @title 集合大小键名 */ - sizeField: string; + sizeField: string | number; }; export enum DefaultTransformKey { diff --git a/packages/plots/src/core/plots/waterfall/adaptor.ts b/packages/plots/src/core/plots/waterfall/adaptor.ts index 89f5caed1..d832f87df 100644 --- a/packages/plots/src/core/plots/waterfall/adaptor.ts +++ b/packages/plots/src/core/plots/waterfall/adaptor.ts @@ -1,4 +1,4 @@ -import { flow, transformOptions } from '../../utils'; +import { flow, transformOptions, fieldAdapter } from '../../utils'; import { mark } from '../../adaptor'; import { START_KEY, END_KEY, WATERFALL_VALUE } from './constants'; import type { Adaptor } from '../../types'; @@ -18,15 +18,17 @@ export function adaptor(params: Params) { const { options } = params; const { data = [], yField } = options; if (!data.length) return params; - data.reduce((prev, cur, index) => { + data.reduce((prev, cur, index: number) => { + const getFieldData = fieldAdapter(yField); + const newCur = getFieldData(cur, index, data); if (index === 0 || cur.isTotal) { cur[START_KEY] = 0; - cur[END_KEY] = cur[yField]; - cur[WATERFALL_VALUE] = cur[yField]; + cur[END_KEY] = newCur; + cur[WATERFALL_VALUE] = newCur; } else { - const start = prev[END_KEY] ?? prev[yField]; + const start = prev[END_KEY] ?? getFieldData(prev, index, data); cur[START_KEY] = start; - cur[END_KEY] = start + cur[yField]; + cur[END_KEY] = start + newCur; cur[WATERFALL_VALUE] = prev[END_KEY]; } return cur; diff --git a/packages/plots/src/core/types/common.ts b/packages/plots/src/core/types/common.ts index 83750c123..a3d9eec8a 100644 --- a/packages/plots/src/core/types/common.ts +++ b/packages/plots/src/core/types/common.ts @@ -10,6 +10,16 @@ import type { LegendComponent, } from '@antv/g2'; +export type Primitive = number | string | boolean | Date; + +export type FunctionEncodeSpec = ( + value: any, + index?: number, + array?: any[], +) => Primitive; + +export type PrimitiveEncodeSpec = Primitive | FunctionEncodeSpec; + export type Spec = (Mark | Composition | AxisComponent | Omit) & { width?: number; height?: number; @@ -21,27 +31,31 @@ export type BaseOptions = { /** * @title x轴字段 */ - readonly xField?: string; + readonly xField?: PrimitiveEncodeSpec; /** * @title y轴字段 */ - readonly yField?: string; + readonly yField?: PrimitiveEncodeSpec; /** * @title 分组字段 */ - readonly seriesField?: string; + readonly seriesField?: PrimitiveEncodeSpec; /** * @title 尺寸字段 */ - readonly sizeField?: string; + readonly sizeField?: PrimitiveEncodeSpec; /** * @title 颜色字段 */ - readonly colorField?: string; + readonly colorField?: PrimitiveEncodeSpec; /** * @title 形状字段 */ - readonly shapeField?: string; + readonly shapeField?: PrimitiveEncodeSpec; + /** + * @title 形状key值字段 + */ + readonly keyField?: PrimitiveEncodeSpec; /** * @title 堆积 */ @@ -119,14 +133,14 @@ export type AttrStyle = Record; export type ConnectNulls = | true | { - connect: true; - /** - * @title 连线样式 - * @description 和 canvas path 一致,但需要加上 connect 前缀 - * @example - * - connectStroke: '#ccc' - * - connectLineWidth: 1 - * - connectLineDash: [ 4, 4 ] - */ - [key: string]: any; - }; + connect: true; + /** + * @title 连线样式 + * @description 和 canvas path 一致,但需要加上 connect 前缀 + * @example + * - connectStroke: '#ccc' + * - connectLineWidth: 1 + * - connectLineDash: [ 4, 4 ] + */ + [key: string]: any; + }; diff --git a/packages/plots/src/core/utils/field-adapter.ts b/packages/plots/src/core/utils/field-adapter.ts new file mode 100644 index 000000000..04e200a9d --- /dev/null +++ b/packages/plots/src/core/utils/field-adapter.ts @@ -0,0 +1,14 @@ +import { get } from './index'; + +import type { PrimitiveEncodeSpec, FunctionEncodeSpec } from '../types'; + +export function fieldAdapter(field: PrimitiveEncodeSpec): FunctionEncodeSpec { + switch (typeof field) { + case 'function': + return field; + case 'string': + return (d) => get(d, [field]); + default: + return () => field; + } +} \ No newline at end of file diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index 1fd67d03f..bb5b71db1 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -36,3 +36,4 @@ export { filterTransformed } from './filter-transformed'; export { conversionTagFormatter } from './conversion'; export { mergeWithArrayCoverage } from './merge-with-array-coverage'; export { measureTextWidth } from './measure-text'; +export { fieldAdapter } from './field-adapter'; From 10ef30aceaf5dcffd067cfc5091bbbb3149c5347 Mon Sep 17 00:00:00 2001 From: Frank William <65594180+ai-qing-hai@users.noreply.github.com> Date: Wed, 20 Mar 2024 15:00:11 +0800 Subject: [PATCH 195/268] fix(plots): config shape undefined (#2463) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(plots): 修复 line\point\area 配置为 空或underfind 的时候,依然有默认的错误 * fix(plots): 修复 line\point\area 配置为 空或underfind 的时候,依然有默认的错误 --------- Co-authored-by: wb-xcf804241 --- packages/plots/src/core/utils/transform.ts | 2 ++ site/docs/manual/getting-started.zh.md | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/plots/src/core/utils/transform.ts b/packages/plots/src/core/utils/transform.ts index f24ba0fa4..d6d01fc79 100644 --- a/packages/plots/src/core/utils/transform.ts +++ b/packages/plots/src/core/utils/transform.ts @@ -51,6 +51,8 @@ export const transformOptions = (params: Adaptor) => { */ const transformShape = (config: T) => { Object.keys(config).forEach((key) => { + // 判断内容是否为空 + if (!config[key]) return; const exist = CONFIG_SHAPE.find((item) => item.key === key); if (exist) { const { type, extend_keys } = exist; diff --git a/site/docs/manual/getting-started.zh.md b/site/docs/manual/getting-started.zh.md index d405ff58a..35ca1a949 100644 --- a/site/docs/manual/getting-started.zh.md +++ b/site/docs/manual/getting-started.zh.md @@ -64,7 +64,7 @@ externals: { ```ts // 折线图,其它图表类似 -const { Line } = window.charts; +const { Line } = window.Plots; ``` @@ -72,7 +72,7 @@ const { Line } = window.charts; ``` From 8a1ed9147886a02ae03e4a1398b79273f4d0b02b Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 20 Mar 2024 16:55:22 +0800 Subject: [PATCH 196/268] feat: font size field (#2465) --- packages/plots/src/core/constants/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 3a7fe1b26..0611c7b02 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -72,6 +72,7 @@ export const TRANSFORM_OPTION_KEY = { binField: 'encode.x', srcField: 'encode.src', linkColorField: 'encode.linkColor', + fontSizeField: 'encode.fontSize', radius: 'coordinate.outerRadius', innerRadius: 'coordinate.innerRadius', startAngle: 'coordinate.startAngle', From 8371d11979a392d402aeb21cf26488ca3bf25ac8 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 20 Mar 2024 17:22:42 +0800 Subject: [PATCH 197/268] fix: transform (#2466) --- packages/plots/src/core/constants/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/plots/src/core/constants/index.ts b/packages/plots/src/core/constants/index.ts index 0611c7b02..11cb7180b 100644 --- a/packages/plots/src/core/constants/index.ts +++ b/packages/plots/src/core/constants/index.ts @@ -253,10 +253,10 @@ export const SPECIAL_OPTIONS = [ if (available) { origin[key].push({ [TRANSFORM_SIGN]: true, ...rest }); } else { - origin[key].splice( - origin[key].indexOf((item) => item.type === value.type), - 1, - ); + const index = origin[key].indexOf((item) => item.type === value.type); + if (index !== -1) { + origin[key].splice(index, 1); + } } }, }, From c080823f48a686075afdbcd261d167ba7d898b2e Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 20 Mar 2024 19:51:55 +0800 Subject: [PATCH 198/268] changelog (#2468) --- packages/plots/CHANGELOG.md | 8 ++++++++ packages/plots/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index e217c722d..bcb20961f 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.1.15 + +`2024-03-20` + +- 🔥 新增 `fontSizeField`,支持 `WordCloud` 根据内容调整文本大小 +- 🐞 修复 [transform percent\stack conflict](https://github.com/ant-design/ant-design-charts/issues/2456) +- 🐞 修复 [TS type error](https://github.com/ant-design/ant-design-charts/issues/2440) + ## 2.1.14 ## 2.1.14-beta.0 diff --git a/packages/plots/package.json b/packages/plots/package.json index 5fc819966..977515ad5 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.14", + "version": "2.1.15", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From 297a72847730e847c20df9c2cb6a80f0333b749d Mon Sep 17 00:00:00 2001 From: xiaoiver Date: Fri, 12 Apr 2024 13:31:00 +0800 Subject: [PATCH 199/268] chore: update latest deps (#2496) --- packages/plots/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/plots/package.json b/packages/plots/package.json index 977515ad5..3f27154b5 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -38,9 +38,9 @@ "dependencies": { "@ant-design/charts-util": "workspace:*", "@antv/event-emitter": "^0.1.3", - "@antv/g": "^5.18.24", - "@antv/g2": "^5.1.9", - "@antv/g2-extension-plot": "^0.1.1" + "@antv/g": "^6.0.0", + "@antv/g2": "^5.1.18", + "@antv/g2-extension-plot": "^0.2.0" }, "peerDependencies": { "lodash-es": "^4.17.21", From 8525e250226840e310bd1d791da7be0615ace4a5 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 16 Apr 2024 10:04:30 +0800 Subject: [PATCH 200/268] changelog (#2503) --- packages/charts/CHANGELOG.md | 7 +++++++ packages/charts/package.json | 2 +- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/charts/CHANGELOG.md b/packages/charts/CHANGELOG.md index cd3ecc618..fa8fabc4f 100644 --- a/packages/charts/CHANGELOG.md +++ b/packages/charts/CHANGELOG.md @@ -1,5 +1,12 @@ ## 2.0.3 +`2024-04-16` + +- 🔥 底层依赖升级 +- 🔥 plots 功能完善 + +## 2.0.3 + `2023-12-18` - 🐞 修复 plots 依赖版本问题 diff --git a/packages/charts/package.json b/packages/charts/package.json index fc730679e..3ed2fbbe2 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@ant-design/charts", - "version": "2.0.3", + "version": "2.0.4", "description": "AntV upper level visual component library", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index bcb20961f..b0d9764e9 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.1.16 + +`2024-04-16` + +- 💄 依赖更新 + ## 2.1.15 `2024-03-20` diff --git a/packages/plots/package.json b/packages/plots/package.json index 3f27154b5..7521c62a7 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.15", + "version": "2.1.16", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From 308f2b954e6981641e68c8c42a33eb1986bb9750 Mon Sep 17 00:00:00 2001 From: ryanwang Date: Fri, 19 Apr 2024 15:25:19 +0800 Subject: [PATCH 201/268] fix: Add missing ref and types of the wrapped component (#2471) * fix: fix wrapper component's ref lose and fix typro * fix: fix wrapper component's ref lose and fix typro * fix: fix prettier * fix: run prettier in packages/plots/** --- packages/plots/src/components/area/index.tsx | 12 +++++--- packages/plots/src/components/bar/index.tsx | 10 +++++-- packages/plots/src/components/base/index.tsx | 8 ++++-- .../components/bidirectional-bar/index.tsx | 12 +++++--- packages/plots/src/components/box/index.tsx | 12 +++++--- .../plots/src/components/bullet/index.tsx | 12 +++++--- .../src/components/circlePacking/index.tsx | 10 ++++--- .../plots/src/components/column/index.tsx | 12 +++++--- .../plots/src/components/dual-axes/index.tsx | 10 +++++-- .../plots/src/components/funnel/index.tsx | 12 +++++--- packages/plots/src/components/gauge/index.tsx | 12 +++++--- .../plots/src/components/heatmap/index.tsx | 12 +++++--- .../plots/src/components/histogram/index.tsx | 12 +++++--- packages/plots/src/components/line/index.tsx | 12 +++++--- .../plots/src/components/liquid/index.tsx | 10 +++++-- packages/plots/src/components/mix/index.tsx | 12 +++++--- packages/plots/src/components/pie/index.tsx | 12 +++++--- packages/plots/src/components/radar/index.tsx | 10 +++++-- .../plots/src/components/radial-bar/index.tsx | 12 +++++--- packages/plots/src/components/rose/index.tsx | 10 +++++-- .../plots/src/components/sankey/index.tsx | 12 +++++--- .../plots/src/components/scatter/index.tsx | 10 +++++-- packages/plots/src/components/stock/index.tsx | 12 +++++--- .../plots/src/components/sunburst/index.tsx | 10 +++++-- .../plots/src/components/tiny/area/index.tsx | 12 +++++--- .../src/components/tiny/column/index.tsx | 12 +++++--- .../plots/src/components/tiny/line/index.tsx | 12 +++++--- .../src/components/tiny/progress/index.tsx | 10 ++++--- .../plots/src/components/tiny/ring/index.tsx | 10 +++++-- .../plots/src/components/treemap/index.tsx | 12 +++++--- packages/plots/src/components/venn/index.tsx | 12 +++++--- .../plots/src/components/violin/index.tsx | 16 +++++++---- .../plots/src/components/waterfall/index.tsx | 10 +++++-- .../plots/src/components/wordCloud/index.tsx | 10 +++++-- .../src/core/adaptor/coordinate-layout.ts | 2 +- .../src/core/plots/radial-bar/adaptor.ts | 4 +-- packages/plots/src/core/types/common.ts | 28 ++++++++----------- .../plots/src/core/utils/field-adapter.ts | 2 +- packages/plots/tsconfig.json | 7 ++--- 39 files changed, 275 insertions(+), 152 deletions(-) diff --git a/packages/plots/src/components/area/index.tsx b/packages/plots/src/components/area/index.tsx index ad6f6412f..23d4d05e9 100644 --- a/packages/plots/src/components/area/index.tsx +++ b/packages/plots/src/components/area/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { AreaOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { AreaOptions } from '../../core'; +import type { CommonConfig, Chart } from '../../interface'; import { BaseChart } from '../base'; export type AreaConfig = CommonConfig; -const AreaChart = (props: AreaConfig) => ; +const AreaChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + AreaConfig +>((props, ref) => ); export default AreaChart; diff --git a/packages/plots/src/components/bar/index.tsx b/packages/plots/src/components/bar/index.tsx index 44463e3f4..a2b9f0b82 100644 --- a/packages/plots/src/components/bar/index.tsx +++ b/packages/plots/src/components/bar/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; import { BarOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import type { CommonConfig, Chart } from '../../interface'; import { BaseChart } from '../base'; export type BarConfig = CommonConfig; -const BarChart = (props: BarConfig) => ; +const BarChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + BarConfig +>((props, ref) => ); export default BarChart; diff --git a/packages/plots/src/components/base/index.tsx b/packages/plots/src/components/base/index.tsx index 33b45d5c2..1c40e01a9 100644 --- a/packages/plots/src/components/base/index.tsx +++ b/packages/plots/src/components/base/index.tsx @@ -1,10 +1,14 @@ import React, { useImperativeHandle, forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; import { ErrorBoundary, ChartLoading } from '@ant-design/charts-util'; import useChart from '../../hooks/useChart'; import { Plots } from '../../core'; -import { CommonConfig, Chart } from '../../interface'; +import type { CommonConfig, Chart } from '../../interface'; -export const BaseChart: React.FC = forwardRef(({ chartType = 'Base', ...config }: CommonConfig, ref) => { +export const BaseChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + CommonConfig +>(({ chartType = 'Base', ...config }, ref) => { const { containerStyle = { height: 'inherit', diff --git a/packages/plots/src/components/bidirectional-bar/index.tsx b/packages/plots/src/components/bidirectional-bar/index.tsx index 4d39e37f8..4fa5d19b0 100644 --- a/packages/plots/src/components/bidirectional-bar/index.tsx +++ b/packages/plots/src/components/bidirectional-bar/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { BidirectionalBarOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { BidirectionalBarOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type BidirectionalBarConfig = CommonConfig; -const BidirectionalBarChart = (props: BidirectionalBarConfig) => ; +const BidirectionalBarChart: ForwardRefExoticComponent & RefAttributes> = + forwardRef((props, ref) => ( + + )); export default BidirectionalBarChart; diff --git a/packages/plots/src/components/box/index.tsx b/packages/plots/src/components/box/index.tsx index e4fa92ef7..352c45da9 100644 --- a/packages/plots/src/components/box/index.tsx +++ b/packages/plots/src/components/box/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { BoxOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { BoxOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type BoxConfig = CommonConfig; -const BoxChart = (props: BoxConfig) => ; +const BoxChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + BoxConfig +>((props, ref) => ); export default BoxChart; diff --git a/packages/plots/src/components/bullet/index.tsx b/packages/plots/src/components/bullet/index.tsx index 01019351c..e2ecfa057 100644 --- a/packages/plots/src/components/bullet/index.tsx +++ b/packages/plots/src/components/bullet/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { BulletOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { BulletOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type BulletConfig = CommonConfig; -const BulletChart = (props: BulletConfig) => ; +const BulletChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + BulletConfig +>((props, ref) => ); export default BulletChart; diff --git a/packages/plots/src/components/circlePacking/index.tsx b/packages/plots/src/components/circlePacking/index.tsx index df17ad323..e958ae87a 100644 --- a/packages/plots/src/components/circlePacking/index.tsx +++ b/packages/plots/src/components/circlePacking/index.tsx @@ -1,10 +1,12 @@ -import React from 'react'; -import { CirclePackingOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { CirclePackingOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type CirclePackingConfig = CommonConfig; -const CirclePackingChart = (props: CirclePackingConfig) => ; +const CirclePackingChart: ForwardRefExoticComponent & RefAttributes> = + forwardRef((props, ref) => ); export default CirclePackingChart; diff --git a/packages/plots/src/components/column/index.tsx b/packages/plots/src/components/column/index.tsx index 7b771203a..aa5cba47f 100644 --- a/packages/plots/src/components/column/index.tsx +++ b/packages/plots/src/components/column/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { ColumnOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { ColumnOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type ColumnConfig = CommonConfig; -const ColumnChart = (props: ColumnConfig) => ; +const ColumnChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + ColumnConfig +>((props, ref) => ); export default ColumnChart; diff --git a/packages/plots/src/components/dual-axes/index.tsx b/packages/plots/src/components/dual-axes/index.tsx index 10a3b2835..6a6e4de70 100644 --- a/packages/plots/src/components/dual-axes/index.tsx +++ b/packages/plots/src/components/dual-axes/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; import { DualAxesOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type DualAxesConfig = CommonConfig; -const DualAxesChart = (props: DualAxesConfig) => ; +const DualAxesChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + DualAxesConfig +>((props, ref) => ); export default DualAxesChart; diff --git a/packages/plots/src/components/funnel/index.tsx b/packages/plots/src/components/funnel/index.tsx index e380f2a18..f335615e8 100644 --- a/packages/plots/src/components/funnel/index.tsx +++ b/packages/plots/src/components/funnel/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { FunnelOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { FunnelOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type FunnelConfig = CommonConfig; -const FunnelChart = (props: FunnelConfig) => ; +const FunnelChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + FunnelConfig +>((props, ref) => ); export default FunnelChart; diff --git a/packages/plots/src/components/gauge/index.tsx b/packages/plots/src/components/gauge/index.tsx index dbfa5bf66..bc4489f3d 100644 --- a/packages/plots/src/components/gauge/index.tsx +++ b/packages/plots/src/components/gauge/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { GaugeOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { GaugeOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type GaugeConfig = CommonConfig; -const GaugeChart = (props: GaugeConfig) => ; +const GaugeChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + GaugeConfig +>((props: GaugeConfig, ref) => ); export default GaugeChart; diff --git a/packages/plots/src/components/heatmap/index.tsx b/packages/plots/src/components/heatmap/index.tsx index 4766c6100..0767ad641 100644 --- a/packages/plots/src/components/heatmap/index.tsx +++ b/packages/plots/src/components/heatmap/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { HeatmapOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { HeatmapOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type HeatmapConfig = CommonConfig; -const HeatmapChart = (props: HeatmapConfig) => ; +const HeatmapChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + HeatmapConfig +>((props, ref) => ); export default HeatmapChart; diff --git a/packages/plots/src/components/histogram/index.tsx b/packages/plots/src/components/histogram/index.tsx index e8f367516..687896b1a 100644 --- a/packages/plots/src/components/histogram/index.tsx +++ b/packages/plots/src/components/histogram/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { HistogramOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { HistogramOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type HistogramConfig = CommonConfig; -const HistogramChart = (props: HistogramConfig) => ; +const HistogramChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + HistogramConfig +>((props, ref) => ); export default HistogramChart; diff --git a/packages/plots/src/components/line/index.tsx b/packages/plots/src/components/line/index.tsx index dc8844c4b..b1c343529 100644 --- a/packages/plots/src/components/line/index.tsx +++ b/packages/plots/src/components/line/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { LineOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { LineOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type LineConfig = CommonConfig; -const LineChart = (props: LineConfig) => ; +const LineChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + LineConfig +>((props, ref) => ); export default LineChart; diff --git a/packages/plots/src/components/liquid/index.tsx b/packages/plots/src/components/liquid/index.tsx index 137ae1683..f3d5c2f81 100644 --- a/packages/plots/src/components/liquid/index.tsx +++ b/packages/plots/src/components/liquid/index.tsx @@ -1,11 +1,15 @@ -import React from 'react'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; import { BaseChart } from '../base'; import type { LiquidOptions } from '../../core'; -import type { CommonConfig } from '../../interface'; +import type { Chart, CommonConfig } from '../../interface'; export type LiquidConfig = CommonConfig; -const LiquidChart = (props: LiquidConfig) => ; +const LiquidChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + LiquidConfig +>((props, ref) => ); export default LiquidChart; diff --git a/packages/plots/src/components/mix/index.tsx b/packages/plots/src/components/mix/index.tsx index a8147f4d2..1c22407ef 100644 --- a/packages/plots/src/components/mix/index.tsx +++ b/packages/plots/src/components/mix/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { MixOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { MixOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type MixConfig = CommonConfig; -const MixChart = (props: MixConfig) => ; +const MixChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + MixConfig +>((props, ref) => ); export default MixChart; diff --git a/packages/plots/src/components/pie/index.tsx b/packages/plots/src/components/pie/index.tsx index 672596f91..3ed02410f 100644 --- a/packages/plots/src/components/pie/index.tsx +++ b/packages/plots/src/components/pie/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { PieOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { PieOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type PieConfig = CommonConfig; -const PieChart = (props: PieConfig) => ; +const PieChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + PieConfig +>((props, ref) => ); export default PieChart; diff --git a/packages/plots/src/components/radar/index.tsx b/packages/plots/src/components/radar/index.tsx index 9fc44533d..aaa657969 100644 --- a/packages/plots/src/components/radar/index.tsx +++ b/packages/plots/src/components/radar/index.tsx @@ -1,11 +1,15 @@ -import React from 'react'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; import { BaseChart } from '../base'; import type { RadarOptions } from '../../core'; -import type { CommonConfig } from '../../interface'; +import type { Chart, CommonConfig } from '../../interface'; export type RadarConfig = CommonConfig; -const RadarChart = (props: RadarConfig) => ; +const RadarChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + RadarConfig +>((props, ref) => ); export default RadarChart; diff --git a/packages/plots/src/components/radial-bar/index.tsx b/packages/plots/src/components/radial-bar/index.tsx index d59440388..9ee06f71d 100644 --- a/packages/plots/src/components/radial-bar/index.tsx +++ b/packages/plots/src/components/radial-bar/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { RadialBarOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { RadialBarOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type RadialBarConfig = CommonConfig; -const RadialBar = (props: RadialBarConfig) => ; +const RadialBar: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + RadialBarConfig +>((props, ref) => ); export default RadialBar; diff --git a/packages/plots/src/components/rose/index.tsx b/packages/plots/src/components/rose/index.tsx index 436f91a27..5d027587b 100644 --- a/packages/plots/src/components/rose/index.tsx +++ b/packages/plots/src/components/rose/index.tsx @@ -1,11 +1,15 @@ -import React from 'react'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; import { BaseChart } from '../base'; import type { RoseOptions } from '../../core'; -import type { CommonConfig } from '../../interface'; +import type { Chart, CommonConfig } from '../../interface'; export type RoseConfig = CommonConfig; -const RoseChart = (props: RoseConfig) => ; +const RoseChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + RoseConfig +>((props, ref) => ); export default RoseChart; diff --git a/packages/plots/src/components/sankey/index.tsx b/packages/plots/src/components/sankey/index.tsx index c5febface..279f03b0e 100644 --- a/packages/plots/src/components/sankey/index.tsx +++ b/packages/plots/src/components/sankey/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { SankeyOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { SankeyOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type SankeyConfig = CommonConfig; -const SankeyChart = (props: SankeyConfig) => ; +const SankeyChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + SankeyConfig +>((props, ref) => ); export default SankeyChart; diff --git a/packages/plots/src/components/scatter/index.tsx b/packages/plots/src/components/scatter/index.tsx index 34ef112ef..99ba9e571 100644 --- a/packages/plots/src/components/scatter/index.tsx +++ b/packages/plots/src/components/scatter/index.tsx @@ -1,11 +1,15 @@ -import React from 'react'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; import { BaseChart } from '../base'; import type { ScatterOptions } from '../../core'; -import type { CommonConfig } from '../../interface'; +import type { Chart, CommonConfig } from '../../interface'; export type ScatterConfig = CommonConfig; -const ScatterChart = (props: ScatterConfig) => ; +const ScatterChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + ScatterConfig +>((props, ref) => ); export default ScatterChart; diff --git a/packages/plots/src/components/stock/index.tsx b/packages/plots/src/components/stock/index.tsx index 139e2ead3..73f4e909a 100644 --- a/packages/plots/src/components/stock/index.tsx +++ b/packages/plots/src/components/stock/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { StockOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { StockOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type StockConfig = CommonConfig; -const StockChart = (props: StockConfig) => ; +const StockChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + StockConfig +>((props, ref) => ); export default StockChart; diff --git a/packages/plots/src/components/sunburst/index.tsx b/packages/plots/src/components/sunburst/index.tsx index 4972bb5db..786910041 100644 --- a/packages/plots/src/components/sunburst/index.tsx +++ b/packages/plots/src/components/sunburst/index.tsx @@ -1,11 +1,15 @@ -import React from 'react'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; import { BaseChart } from '../base'; import type { SunburstOptions } from '../../core'; -import type { CommonConfig } from '../../interface'; +import type { Chart, CommonConfig } from '../../interface'; export type SunburstConfig = CommonConfig; -const SunburstChart = (props: SunburstConfig) => ; +const SunburstChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + SunburstConfig +>((props, ref) => ); export default SunburstChart; diff --git a/packages/plots/src/components/tiny/area/index.tsx b/packages/plots/src/components/tiny/area/index.tsx index 9182bb937..d4b43280a 100644 --- a/packages/plots/src/components/tiny/area/index.tsx +++ b/packages/plots/src/components/tiny/area/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { TinyAreaOptions } from '../../../core'; -import { CommonConfig } from '../../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { TinyAreaOptions } from '../../../core'; +import type { Chart, CommonConfig } from '../../../interface'; import { BaseChart } from '../../base'; export type TinyAreaConfig = CommonConfig; -const TinyAreaChart = (props: TinyAreaConfig) => ; +const TinyAreaChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + TinyAreaConfig +>((props, ref) => ); export default TinyAreaChart; diff --git a/packages/plots/src/components/tiny/column/index.tsx b/packages/plots/src/components/tiny/column/index.tsx index 234c86f0e..10f48ea4a 100644 --- a/packages/plots/src/components/tiny/column/index.tsx +++ b/packages/plots/src/components/tiny/column/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { TinyColumnOptions } from '../../../core'; -import { CommonConfig } from '../../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { TinyColumnOptions } from '../../../core'; +import type { Chart, CommonConfig } from '../../../interface'; import { BaseChart } from '../../base'; export type TinyColumnConfig = CommonConfig; -const TinyLineChart = (props: TinyColumnConfig) => ; +const TinyLineChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + TinyColumnConfig +>((props, ref) => ); export default TinyLineChart; diff --git a/packages/plots/src/components/tiny/line/index.tsx b/packages/plots/src/components/tiny/line/index.tsx index 95fc16e21..90d4ea777 100644 --- a/packages/plots/src/components/tiny/line/index.tsx +++ b/packages/plots/src/components/tiny/line/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { TinyLineOptions } from '../../../core'; -import { CommonConfig } from '../../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { TinyLineOptions } from '../../../core'; +import type { Chart, CommonConfig } from '../../../interface'; import { BaseChart } from '../../base'; export type TinyLineConfig = CommonConfig; -const TinyLineChart = (props: TinyLineConfig) => ; +const TinyLineChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + TinyLineConfig +>((props, ref) => ); export default TinyLineChart; diff --git a/packages/plots/src/components/tiny/progress/index.tsx b/packages/plots/src/components/tiny/progress/index.tsx index 1053e2928..ed5edb1d3 100644 --- a/packages/plots/src/components/tiny/progress/index.tsx +++ b/packages/plots/src/components/tiny/progress/index.tsx @@ -1,10 +1,12 @@ -import React from 'react'; -import { TinyProgressOptions } from '../../../core'; -import { CommonConfig } from '../../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { TinyProgressOptions } from '../../../core'; +import type { Chart, CommonConfig } from '../../../interface'; import { BaseChart } from '../../base'; export type TinyProgressConfig = CommonConfig; -const TinyProgressChart = (props: TinyProgressOptions) => ; +const TinyProgressChart: ForwardRefExoticComponent & RefAttributes> = + forwardRef((props, ref) => ); export default TinyProgressChart; diff --git a/packages/plots/src/components/tiny/ring/index.tsx b/packages/plots/src/components/tiny/ring/index.tsx index c716bd5e3..d832b9d06 100644 --- a/packages/plots/src/components/tiny/ring/index.tsx +++ b/packages/plots/src/components/tiny/ring/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; import { TinyRingOptions } from '../../../core'; -import { CommonConfig } from '../../../interface'; +import { Chart, CommonConfig } from '../../../interface'; import { BaseChart } from '../../base'; export type TinyRingConfig = CommonConfig; -const TinyRingChart = (props: TinyRingOptions) => ; +const TinyRingChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + TinyRingConfig +>((props, ref) => ); export default TinyRingChart; diff --git a/packages/plots/src/components/treemap/index.tsx b/packages/plots/src/components/treemap/index.tsx index 7201cd251..5c87e03c7 100644 --- a/packages/plots/src/components/treemap/index.tsx +++ b/packages/plots/src/components/treemap/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { TreemapOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { TreemapOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type TreemapConfig = CommonConfig; -const TreemapChart = (props: TreemapConfig) => ; +const TreemapChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + TreemapConfig +>((props, ref) => ); export default TreemapChart; diff --git a/packages/plots/src/components/venn/index.tsx b/packages/plots/src/components/venn/index.tsx index 3bf2e9e04..079fcd572 100644 --- a/packages/plots/src/components/venn/index.tsx +++ b/packages/plots/src/components/venn/index.tsx @@ -1,10 +1,14 @@ -import React from 'react'; -import { VennOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { VennOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type VennConfig = CommonConfig; -const VennChart = (props: VennConfig) => ; +const VennChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + VennConfig +>((props, ref) => ); export default VennChart; diff --git a/packages/plots/src/components/violin/index.tsx b/packages/plots/src/components/violin/index.tsx index f2854ac9d..843b4412b 100644 --- a/packages/plots/src/components/violin/index.tsx +++ b/packages/plots/src/components/violin/index.tsx @@ -1,12 +1,16 @@ -import React from 'react'; -import { ViolinOptions } from '../../core'; -import { CommonConfig } from '../../interface'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; +import type { ViolinOptions } from '../../core'; +import type { Chart, CommonConfig } from '../../interface'; import { BaseChart } from '../base'; export type ViolinConfig = CommonConfig; -const ViolinChart = (props: ViolinConfig) => { - return ; -}; +const ViolinChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + ViolinConfig +>((props, ref) => { + return ; +}); export default ViolinChart; diff --git a/packages/plots/src/components/waterfall/index.tsx b/packages/plots/src/components/waterfall/index.tsx index 8acb005cf..b2ea6d62f 100644 --- a/packages/plots/src/components/waterfall/index.tsx +++ b/packages/plots/src/components/waterfall/index.tsx @@ -1,11 +1,15 @@ -import React from 'react'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; import { BaseChart } from '../base'; import type { WaterfallOptions } from '../../core'; -import type { CommonConfig } from '../../interface'; +import type { Chart, CommonConfig } from '../../interface'; export type WaterfallConfig = CommonConfig; -const WaterfallChart = (props: WaterfallConfig) => ; +const WaterfallChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + WaterfallConfig +>((props, ref) => ); export default WaterfallChart; diff --git a/packages/plots/src/components/wordCloud/index.tsx b/packages/plots/src/components/wordCloud/index.tsx index cb7c89306..99fd5fa58 100644 --- a/packages/plots/src/components/wordCloud/index.tsx +++ b/packages/plots/src/components/wordCloud/index.tsx @@ -1,11 +1,15 @@ -import React from 'react'; +import React, { forwardRef } from 'react'; +import type { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react'; import { BaseChart } from '../base'; import type { WordCloudOptions } from '../../core'; -import type { CommonConfig } from '../../interface'; +import type { Chart, CommonConfig } from '../../interface'; export type WordCloudConfig = CommonConfig; -const WordCloudChart = (props: WordCloudConfig) => ; +const WordCloudChart: ForwardRefExoticComponent & RefAttributes> = forwardRef< + Chart, + WordCloudConfig +>((props, ref) => ); export default WordCloudChart; diff --git a/packages/plots/src/core/adaptor/coordinate-layout.ts b/packages/plots/src/core/adaptor/coordinate-layout.ts index 38277172f..d3bd948ea 100644 --- a/packages/plots/src/core/adaptor/coordinate-layout.ts +++ b/packages/plots/src/core/adaptor/coordinate-layout.ts @@ -28,4 +28,4 @@ export function allCoordinateLayout

({ name: getXFieldData(d, i, data), value: getYFieldData(d, i, data) }), - ], + items: [(d, i, data) => ({ name: getXFieldData(d, i, data), value: getYFieldData(d, i, data) })], }); } return params; diff --git a/packages/plots/src/core/types/common.ts b/packages/plots/src/core/types/common.ts index a3d9eec8a..f2e2181bb 100644 --- a/packages/plots/src/core/types/common.ts +++ b/packages/plots/src/core/types/common.ts @@ -12,11 +12,7 @@ import type { export type Primitive = number | string | boolean | Date; -export type FunctionEncodeSpec = ( - value: any, - index?: number, - array?: any[], -) => Primitive; +export type FunctionEncodeSpec = (value: any, index?: number, array?: any[]) => Primitive; export type PrimitiveEncodeSpec = Primitive | FunctionEncodeSpec; @@ -133,14 +129,14 @@ export type AttrStyle = Record; export type ConnectNulls = | true | { - connect: true; - /** - * @title 连线样式 - * @description 和 canvas path 一致,但需要加上 connect 前缀 - * @example - * - connectStroke: '#ccc' - * - connectLineWidth: 1 - * - connectLineDash: [ 4, 4 ] - */ - [key: string]: any; - }; + connect: true; + /** + * @title 连线样式 + * @description 和 canvas path 一致,但需要加上 connect 前缀 + * @example + * - connectStroke: '#ccc' + * - connectLineWidth: 1 + * - connectLineDash: [ 4, 4 ] + */ + [key: string]: any; + }; diff --git a/packages/plots/src/core/utils/field-adapter.ts b/packages/plots/src/core/utils/field-adapter.ts index 04e200a9d..5c5f94916 100644 --- a/packages/plots/src/core/utils/field-adapter.ts +++ b/packages/plots/src/core/utils/field-adapter.ts @@ -11,4 +11,4 @@ export function fieldAdapter(field: PrimitiveEncodeSpec): FunctionEncodeSpec { default: return () => field; } -} \ No newline at end of file +} diff --git a/packages/plots/tsconfig.json b/packages/plots/tsconfig.json index d0f609128..6cf339110 100644 --- a/packages/plots/tsconfig.json +++ b/packages/plots/tsconfig.json @@ -3,8 +3,5 @@ "downlevelIteration": true }, "extends": "../../tsconfig.json", - "include": [ - "src", - "tests" - ] -} \ No newline at end of file + "include": ["src", "tests"] +} From cc01490d5c264fcab381e79abea7d76a9806ae7c Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 19 Apr 2024 15:49:31 +0800 Subject: [PATCH 202/268] fix: webpack v4 (#2511) --- packages/plots/src/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/plots/src/index.ts b/packages/plots/src/index.ts index 7aaa44a4b..ebcfd49ce 100644 --- a/packages/plots/src/index.ts +++ b/packages/plots/src/index.ts @@ -1,5 +1,3 @@ -export * as G2 from '@antv/g2'; - export * from './components'; export * from './interface'; From 909b66cd719d5c8c784ca82f61d28289fcfcde59 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 19 Apr 2024 16:02:18 +0800 Subject: [PATCH 203/268] chore: changelog (#2512) --- packages/charts/CHANGELOG.md | 7 +++++++ packages/charts/package.json | 2 +- packages/plots/CHANGELOG.md | 7 +++++++ packages/plots/package.json | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/charts/CHANGELOG.md b/packages/charts/CHANGELOG.md index fa8fabc4f..8eb1491b8 100644 --- a/packages/charts/CHANGELOG.md +++ b/packages/charts/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.1.0 + +`2024-04-19` + +- 🐞 修复低版本 webpack 不支持的 `export * as` 语法 +- 🔥 暴露图表 ref 上层可通过 ref 直接获取图表实例,eg: `` + ## 2.0.3 `2024-04-16` diff --git a/packages/charts/package.json b/packages/charts/package.json index 3ed2fbbe2..8c4e84063 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@ant-design/charts", - "version": "2.0.4", + "version": "2.1.0", "description": "AntV upper level visual component library", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index b0d9764e9..ff88a27be 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.2.0 + +`2024-04-19` + +- 🐞 修复低版本 webpack 不支持的 `export * as` 语法 +- 🔥 暴露图表 ref 上层可通过 ref 直接获取图表实例,eg: `` + ## 2.1.16 `2024-04-16` diff --git a/packages/plots/package.json b/packages/plots/package.json index 7521c62a7..81f9552ab 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.1.16", + "version": "2.2.0", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From 790b637d7dffbad9ce64ff85bbf2d8a5b5c6848c Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 25 Apr 2024 23:51:54 +0800 Subject: [PATCH 204/268] fix: tiny chart auto fit (#2521) --- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- packages/plots/src/core/plots/tiny-area/index.ts | 1 - packages/plots/src/core/plots/tiny-column/index.ts | 1 - packages/plots/src/core/plots/tiny-line/index.ts | 1 - packages/plots/src/core/plots/tiny-progress/index.ts | 1 - packages/plots/src/core/plots/tiny-ring/index.ts | 1 - 7 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index ff88a27be..18d90f018 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.2.1 + +`2024-04-25` + +- 🐞 修复 Tiny 组件默认不能自适应容器大小 + ## 2.2.0 `2024-04-19` diff --git a/packages/plots/package.json b/packages/plots/package.json index 81f9552ab..7f248b8d8 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.2.0", + "version": "2.2.1", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/plots/tiny-area/index.ts b/packages/plots/src/core/plots/tiny-area/index.ts index 8e9b72376..bb2f7e0e1 100644 --- a/packages/plots/src/core/plots/tiny-area/index.ts +++ b/packages/plots/src/core/plots/tiny-area/index.ts @@ -20,7 +20,6 @@ export class TinyArea extends Plot { enter: { type: 'growInX', duration: 500 }, }, children: [{ type: 'area', axis: false }], - autoFit: false, padding: 0, margin: 0, tooltip: false, diff --git a/packages/plots/src/core/plots/tiny-column/index.ts b/packages/plots/src/core/plots/tiny-column/index.ts index 59d819672..76aa09ba1 100644 --- a/packages/plots/src/core/plots/tiny-column/index.ts +++ b/packages/plots/src/core/plots/tiny-column/index.ts @@ -17,7 +17,6 @@ export class TinyColumn extends Plot { return { type: 'view', children: [{ type: 'interval', axis: false }], - autoFit: false, padding: 0, margin: 0, tooltip: false, diff --git a/packages/plots/src/core/plots/tiny-line/index.ts b/packages/plots/src/core/plots/tiny-line/index.ts index f84f3a22b..efd269fbd 100644 --- a/packages/plots/src/core/plots/tiny-line/index.ts +++ b/packages/plots/src/core/plots/tiny-line/index.ts @@ -17,7 +17,6 @@ export class TinyLine extends Plot { return { type: 'view', children: [{ type: 'line', axis: false }], - autoFit: false, animate: { enter: { type: 'growInX', duration: 500 }, }, diff --git a/packages/plots/src/core/plots/tiny-progress/index.ts b/packages/plots/src/core/plots/tiny-progress/index.ts index 42bd89f00..5c3870700 100644 --- a/packages/plots/src/core/plots/tiny-progress/index.ts +++ b/packages/plots/src/core/plots/tiny-progress/index.ts @@ -17,7 +17,6 @@ export class TinyProgress extends Plot { return { type: 'view', data: [], - autoFit: false, margin: 0, padding: 0, tooltip: false, diff --git a/packages/plots/src/core/plots/tiny-ring/index.ts b/packages/plots/src/core/plots/tiny-ring/index.ts index 9f19d4a52..b3f8d38a3 100644 --- a/packages/plots/src/core/plots/tiny-ring/index.ts +++ b/packages/plots/src/core/plots/tiny-ring/index.ts @@ -17,7 +17,6 @@ export class TinyRing extends Plot { return { type: 'view', data: [], - autoFit: false, margin: 0, padding: 0, coordinate: { type: 'theta' }, From aa3562c4735396eafd8fc58eadaa33ab81f493f2 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 29 Apr 2024 17:27:53 +0800 Subject: [PATCH 205/268] chore: add case examples (#2526) * chore: add case examples * fix: node version * fix: test * fix: gh pages --- .github/workflows/lint.yml | 2 +- .github/workflows/release.yml | 4 +- .github/workflows/test.yml | 2 +- .github/workflows/v2-site.yml | 2 +- package.json | 4 +- site/.dumirc.ts | 8 ++ site/examples/case/interactions/demo/link.js | 83 +++++++++++++++++++ .../examples/case/interactions/demo/meta.json | 16 ++++ site/examples/case/interactions/index.en.md | 4 + site/examples/case/interactions/index.zh.md | 4 + site/package.json | 3 +- 11 files changed, 125 insertions(+), 7 deletions(-) create mode 100644 site/examples/case/interactions/demo/link.js create mode 100644 site/examples/case/interactions/demo/meta.json create mode 100644 site/examples/case/interactions/index.en.md create mode 100644 site/examples/case/interactions/index.zh.md diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 87adb6f9e..142939199 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [16.x] + node-version: [latest] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3c90b9c4b..893f15e6d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [16.x] + node-version: [latest] steps: - name: checkout code repository uses: actions/checkout@v3 @@ -48,4 +48,4 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - name: publish to npm - run: pnpm run release \ No newline at end of file + run: pnpm run release diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6a7bb2caf..8291f0972 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: timeout-minutes: 15 strategy: matrix: - node-version: [16.x] + node-version: [latest] steps: - name: checkout code repository uses: actions/checkout@v3 diff --git a/.github/workflows/v2-site.yml b/.github/workflows/v2-site.yml index babc26968..364204f63 100644 --- a/.github/workflows/v2-site.yml +++ b/.github/workflows/v2-site.yml @@ -14,7 +14,7 @@ jobs: timeout-minutes: 15 strategy: matrix: - node-version: [16.x] + node-version: [latest] steps: - name: checkout code repository uses: actions/checkout@v3 diff --git a/package.json b/package.json index 3fa08b6ef..7494c481a 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,9 @@ "overrides": { "@typescript-eslint/eslint-plugin": "^4.1.1", "@typescript-eslint/parser": "^4.1.1", - "tslib": "2.6.1" + "tslib": "2.6.1", + "react-dom": "^18.0.1", + "react": "^18.0.1" } }, "gitHooks": { diff --git a/site/.dumirc.ts b/site/.dumirc.ts index fc2b7ffee..51a6987b7 100644 --- a/site/.dumirc.ts +++ b/site/.dumirc.ts @@ -140,6 +140,14 @@ export default defineConfig({ }, ], examples: [ + { + slug: 'case', + icon: 'gallery', + title: { + zh: '场景案例', + en: 'Show Case', + }, + }, { slug: 'statistics', icon: 'line', diff --git a/site/examples/case/interactions/demo/link.js b/site/examples/case/interactions/demo/link.js new file mode 100644 index 000000000..709407c7a --- /dev/null +++ b/site/examples/case/interactions/demo/link.js @@ -0,0 +1,83 @@ +import React, { useState, useEffect, useRef } from 'react'; +import ReactDOM from 'react-dom'; +import { Line, Column } from '@ant-design/plots'; + +const CHART_MAP = {}; + +const DemoLine = () => { + const [data, setData] = useState([]); + const dataRef = useRef(); + dataRef.current = data; + + useEffect(() => { + asyncFetch(); + }, []); + + const asyncFetch = () => { + fetch('https://gw.alipayobjects.com/os/antvdemo/assets/data/sp500.json') + .then((response) => response.json()) + .then((json) => setData(json)) + .catch((error) => { + console.log('fetch data failed', error); + }); + }; + + const config = { + data, + xField: 'date', + yField: 'price', + height: 200, + }; + + const showTooltip = (data) => { + const { line, column } = CHART_MAP; + // 连续图表 + line.emit('tooltip:show', { + data: { data: { x: data.date } }, + }); + column.emit('tooltip:show', { + data: { data }, + }); + }; + + const hideTooltip = () => { + const { line, column } = CHART_MAP; + line.emit('tooltip:hide'); + column.emit('tooltip:hide'); + }; + + const setTooltipPosition = (evt, chart) => { + const { x } = evt; + const { layout } = chart.getView(); + // 根据位置粗略计算出 tooltip data + const percent = x / layout.width; + showTooltip(dataRef.current[Math.floor(percent * dataRef.current.length)]); + }; + + return ( +

+ { + CHART_MAP['line'] = chart; + chart.on('plot:pointermove', (evt) => { + setTooltipPosition(evt, chart); + }); + chart.on('plot:pointerout', hideTooltip); + }} + /> + { + CHART_MAP['column'] = chart; + chart.on('plot:pointermove', (evt) => { + setTooltipPosition(evt, chart); + }); + chart.on('plot:pointerout', hideTooltip); + }} + /> +
+ ); +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/case/interactions/demo/meta.json b/site/examples/case/interactions/demo/meta.json new file mode 100644 index 000000000..225d987bc --- /dev/null +++ b/site/examples/case/interactions/demo/meta.json @@ -0,0 +1,16 @@ +{ + "title": { + "zh": "中文分类", + "en": "Category" + }, + "demos": [ + { + "filename": "link.js", + "title": { + "zh": "图表联动", + "en": "Chart link" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*dBDRR43tju8AAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/site/examples/case/interactions/index.en.md b/site/examples/case/interactions/index.en.md new file mode 100644 index 000000000..32b37f85b --- /dev/null +++ b/site/examples/case/interactions/index.en.md @@ -0,0 +1,4 @@ +--- +title: Advanced interactions +order: 0 +--- diff --git a/site/examples/case/interactions/index.zh.md b/site/examples/case/interactions/index.zh.md new file mode 100644 index 000000000..2d6239ed5 --- /dev/null +++ b/site/examples/case/interactions/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 高级交互 +order: 0 +--- diff --git a/site/package.json b/site/package.json index a8ff0aafa..96bae9373 100644 --- a/site/package.json +++ b/site/package.json @@ -42,10 +42,11 @@ "typescript": "^3.6.5" }, "dependencies": { - "@ant-design/plots": "^2.0.0-alpha.0", + "@ant-design/plots": "^2.0.0", "antd": "^4.16.13", "insert-css": "^2.0.0", "lodash-es": "^4.17.21", + "rc-util": "^5.39.1", "react": "^16.14.0", "react-dom": "^16.14.0" } From 5d52c96926d9be7271b665ee4100c122c6348a17 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 6 May 2024 17:18:36 +0800 Subject: [PATCH 206/268] fix: webpack with export * as (#2530) --- packages/charts/CHANGELOG.md | 6 ++++++ packages/charts/package.json | 2 +- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- packages/plots/src/index.ts | 5 +++-- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/charts/CHANGELOG.md b/packages/charts/CHANGELOG.md index 8eb1491b8..f293fee16 100644 --- a/packages/charts/CHANGELOG.md +++ b/packages/charts/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.1.1 + +`2024-05-06` + +- 🐞 修复低版本 webpack 不支持的 `export * as` 语法 + ## 2.1.0 `2024-04-19` diff --git a/packages/charts/package.json b/packages/charts/package.json index 8c4e84063..43a9fe1b7 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@ant-design/charts", - "version": "2.1.0", + "version": "2.1.1", "description": "AntV upper level visual component library", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 18d90f018..6e79b6c34 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.2.2 + +`2024-05-06` + +- 🐞 修复低版本 webpack 不支持的 `export * as` 语法 + ## 2.2.1 `2024-04-25` diff --git a/packages/plots/package.json b/packages/plots/package.json index 7f248b8d8..156df310c 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.2.1", + "version": "2.2.2", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/index.ts b/packages/plots/src/index.ts index ebcfd49ce..1e67f65fc 100644 --- a/packages/plots/src/index.ts +++ b/packages/plots/src/index.ts @@ -1,6 +1,7 @@ -export * from './components'; +import * as G2 from '@antv/g2'; +export * from './components'; export * from './interface'; - /** utils */ export { measureTextWidth } from './core/utils'; +export { G2 }; From fe4bd8663b783e66bc512f79f4aa6768e8232292 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:20:56 +0800 Subject: [PATCH 207/268] chore: update interaction (#2569) --- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- packages/plots/src/core/plots/bar/index.ts | 2 +- packages/plots/src/core/plots/column/index.ts | 2 +- packages/plots/src/core/plots/heatmap/index.ts | 2 +- packages/plots/src/core/plots/histogram/index.ts | 2 +- packages/plots/src/core/plots/waterfall/index.ts | 2 +- site/examples/statistics/bar/demo/background.js | 2 +- site/examples/statistics/column/demo/bar-dodged.js | 2 +- .../statistics/dual-axes/demo/custom-column-line.js | 2 +- .../statistics/dual-axes/demo/custom-grouped-column-line.js | 2 +- .../statistics/dual-axes/demo/custom-stacked-column-line.js | 2 +- .../statistics/dual-axes/demo/grouped-column-line.js | 2 +- .../statistics/dual-axes/demo/grouped-column-multi-line.js | 2 +- .../statistics/dual-axes/demo/stacked-column-line.js | 2 +- .../statistics/dual-axes/demo/stacked-column-multi-line.js | 2 +- .../dual-axes/demo/stacked-percent-column-line.js | 2 +- site/package.json | 2 +- 18 files changed, 23 insertions(+), 17 deletions(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 6e79b6c34..6af30fc67 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.2.3 + +`2024-06-20` + +- 💄 内置交互逻辑 `elementHighlightByColor` 更新为 `elementHighlight` + ## 2.2.2 `2024-05-06` diff --git a/packages/plots/package.json b/packages/plots/package.json index 156df310c..ce5f095a5 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.2.2", + "version": "2.2.3", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/plots/bar/index.ts b/packages/plots/src/core/plots/bar/index.ts index ec4b6e65e..9f31f2b52 100644 --- a/packages/plots/src/core/plots/bar/index.ts +++ b/packages/plots/src/core/plots/bar/index.ts @@ -33,7 +33,7 @@ export class Bar extends Plot { tooltip: { shared: true, }, - elementHighlightByColor: { + elementHighlight: { background: true, }, }, diff --git a/packages/plots/src/core/plots/column/index.ts b/packages/plots/src/core/plots/column/index.ts index 89432fe82..c1621bd87 100644 --- a/packages/plots/src/core/plots/column/index.ts +++ b/packages/plots/src/core/plots/column/index.ts @@ -22,7 +22,7 @@ export class Column extends Plot { tooltip: { shared: true, }, - elementHighlightByColor: { + elementHighlight: { background: true, }, }, diff --git a/packages/plots/src/core/plots/heatmap/index.ts b/packages/plots/src/core/plots/heatmap/index.ts index 346e19e6a..270a99ef3 100644 --- a/packages/plots/src/core/plots/heatmap/index.ts +++ b/packages/plots/src/core/plots/heatmap/index.ts @@ -30,7 +30,7 @@ export class Heatmap extends Plot { { type: 'point', interaction: { - elementHighlightByColor: { + elementHighlight: { background: true, }, }, diff --git a/packages/plots/src/core/plots/histogram/index.ts b/packages/plots/src/core/plots/histogram/index.ts index 1e2aac0fb..d78c8f94e 100644 --- a/packages/plots/src/core/plots/histogram/index.ts +++ b/packages/plots/src/core/plots/histogram/index.ts @@ -26,7 +26,7 @@ export class Histogram extends Plot { type: 'rect', transform: [{ type: 'binX', y: 'count' }], interaction: { - elementHighlightByColor: { + elementHighlight: { background: true, }, }, diff --git a/packages/plots/src/core/plots/waterfall/index.ts b/packages/plots/src/core/plots/waterfall/index.ts index 570f663d0..476820fde 100644 --- a/packages/plots/src/core/plots/waterfall/index.ts +++ b/packages/plots/src/core/plots/waterfall/index.ts @@ -32,7 +32,7 @@ export class Waterfall extends Plot { { type: 'interval', interaction: { - elementHighlightByColor: { + elementHighlight: { background: true, }, }, diff --git a/site/examples/statistics/bar/demo/background.js b/site/examples/statistics/bar/demo/background.js index dc3d10fe5..3f2bb8267 100644 --- a/site/examples/statistics/bar/demo/background.js +++ b/site/examples/statistics/bar/demo/background.js @@ -65,7 +65,7 @@ const DemoBar = () => { }, }, interaction: { - elementHighlightByColor: false, + elementHighlight: false, }, }; return ; diff --git a/site/examples/statistics/column/demo/bar-dodged.js b/site/examples/statistics/column/demo/bar-dodged.js index bc90a50c6..8f443bf5d 100644 --- a/site/examples/statistics/column/demo/bar-dodged.js +++ b/site/examples/statistics/column/demo/bar-dodged.js @@ -21,7 +21,7 @@ const DemoColumn = () => { }, interaction: { tooltip: { shared: true }, - elementHighlightByColor: { background: true }, + elementHighlight: { background: true }, }, }; return ; diff --git a/site/examples/statistics/dual-axes/demo/custom-column-line.js b/site/examples/statistics/dual-axes/demo/custom-column-line.js index 0caa55902..c7a036a06 100644 --- a/site/examples/statistics/dual-axes/demo/custom-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-column-line.js @@ -23,7 +23,7 @@ const DemoDualAxes = () => { label: { position: 'inside' }, interaction: { elementHighlight: true, - elementHighlightByColor: { background: true }, + elementHighlight: { background: true }, }, }, { diff --git a/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js index 291fe99fc..234a01d98 100644 --- a/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-grouped-column-line.js @@ -42,7 +42,7 @@ const DemoDualAxes = () => { group: true, style: { maxWidth: 50 }, label: { position: 'inside' }, - interaction: { elementHighlightByColor: { background: true } }, + interaction: { elementHighlight: { background: true } }, }, { data: transformData, diff --git a/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js b/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js index 61ad968dd..276dddd54 100644 --- a/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-stacked-column-line.js @@ -45,7 +45,7 @@ const DemoDualAxes = () => { scale: { y: { domainMax: 1200 } }, interaction: { elementHighlight: true, - elementHighlightByColor: { background: true }, + elementHighlight: { background: true }, }, }, { diff --git a/site/examples/statistics/dual-axes/demo/grouped-column-line.js b/site/examples/statistics/dual-axes/demo/grouped-column-line.js index d2950b4cf..fba261ed3 100644 --- a/site/examples/statistics/dual-axes/demo/grouped-column-line.js +++ b/site/examples/statistics/dual-axes/demo/grouped-column-line.js @@ -34,7 +34,7 @@ const DemoDualAxes = () => { yField: 'value', colorField: 'type', group: true, - interaction: { elementHighlightByColor: { background: true } }, + interaction: { elementHighlight: { background: true } }, }, { data: transformData, diff --git a/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js b/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js index 9e1c44d6b..4bd15098c 100644 --- a/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/grouped-column-multi-line.js @@ -44,7 +44,7 @@ const DemoDualAxes = () => { colorField: 'type', group: true, style: { maxWidth: 80 }, - interaction: { elementHighlightByColor: { background: true } }, + interaction: { elementHighlight: { background: true } }, }, { data: transformData, diff --git a/site/examples/statistics/dual-axes/demo/stacked-column-line.js b/site/examples/statistics/dual-axes/demo/stacked-column-line.js index 816946a50..2f3d43395 100644 --- a/site/examples/statistics/dual-axes/demo/stacked-column-line.js +++ b/site/examples/statistics/dual-axes/demo/stacked-column-line.js @@ -35,7 +35,7 @@ const DemoDualAxes = () => { colorField: 'type', style: { maxWidth: 80 }, scale: { y: { domainMax: 1200 } }, - interaction: { elementHighlightByColor: { background: true } }, + interaction: { elementHighlight: { background: true } }, }, { data: transformData, diff --git a/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js b/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js index a14f9d9be..d2b5a5d50 100644 --- a/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js +++ b/site/examples/statistics/dual-axes/demo/stacked-column-multi-line.js @@ -46,7 +46,7 @@ const DemoDualAxes = () => { stack: true, style: { maxWidth: 80 }, scale: { y: { domainMax: 1200 } }, - interaction: { elementHighlightByColor: { background: true } }, + interaction: { elementHighlight: { background: true } }, }, { data: transformData, diff --git a/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js b/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js index 7a4cf495f..fb6731ee6 100644 --- a/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js +++ b/site/examples/statistics/dual-axes/demo/stacked-percent-column-line.js @@ -37,7 +37,7 @@ const DemoDualAxes = () => { style: { maxWidth: 80 }, tooltip: { channel: 'y0', valueFormatter: '.0%' }, axis: { y: { title: 'value', style: { titleFill: '#5B8FF9' } } }, - interaction: { elementHighlightByColor: { background: true } }, + interaction: { elementHighlight: { background: true } }, }, { data: transformData, diff --git a/site/package.json b/site/package.json index 96bae9373..6a42f7bc1 100644 --- a/site/package.json +++ b/site/package.json @@ -42,7 +42,7 @@ "typescript": "^3.6.5" }, "dependencies": { - "@ant-design/plots": "^2.0.0", + "@ant-design/plots": "workspace:*", "antd": "^4.16.13", "insert-css": "^2.0.0", "lodash-es": "^4.17.21", From eb5937dc9af41e453d4b73a33c99e049c7ab1ecb Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 20 Jun 2024 20:02:05 +0800 Subject: [PATCH 208/268] fix: dependence (#2571) --- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 6af30fc67..af797a5f7 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.2.4 + +`2024-06-20` + +- 🐞 fix dependencies + ## 2.2.3 `2024-06-20` diff --git a/packages/plots/package.json b/packages/plots/package.json index ce5f095a5..b35f7c9e5 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.2.3", + "version": "2.2.4", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From 519580cf9e8114d2da401bedc3220009eacd883a Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:51:14 +0800 Subject: [PATCH 209/268] fix: flex (#2581) --- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- packages/plots/src/components/base/index.tsx | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index af797a5f7..99cde7858 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.2.5 + +`2024-07-03` + +- 🐞 修复 flex 模式下,无法默认适应容器宽度问题 + ## 2.2.4 `2024-06-20` diff --git a/packages/plots/package.json b/packages/plots/package.json index b35f7c9e5..e3a14dee4 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.2.4", + "version": "2.2.5", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/components/base/index.tsx b/packages/plots/src/components/base/index.tsx index 1c40e01a9..ce717a099 100644 --- a/packages/plots/src/components/base/index.tsx +++ b/packages/plots/src/components/base/index.tsx @@ -12,6 +12,7 @@ export const BaseChart: ForwardRefExoticComponent const { containerStyle = { height: 'inherit', + flex: 1 }, containerAttributes = {}, className, From 813b7b33c69055462ff58822239059c06359fdff Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 8 Jul 2024 09:45:25 +0800 Subject: [PATCH 210/268] Update README.md (#2584) --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a1ba972c8..f13b0453d 100644 --- a/README.md +++ b/README.md @@ -4,17 +4,18 @@ A React chart library, based on [G2](https://github.com/antvis/G2), [G6](https://github.com/antvis/G6), [X6](https://github.com/antvis/X6), [L7](https://github.com/antvis/L7). -![build](https://github.com/ant-design/ant-design-charts/workflows/build/badge.svg) ![npm](https://img.shields.io/npm/v/@ant-design/charts) ![npm](https://img.shields.io/npm/dm/@ant-design/charts) [![GitHub stars](https://img.shields.io/github/stars/ant-design/ant-design-charts)](https://github.com/ant-design/ant-design-charts/stargazers) [![npm License](https://img.shields.io/npm/l/@ant-design/charts.svg)](https://www.npmjs.com/package/@ant-design/charts) +

WebsiteQuick StartExamplesFAQ • + Online question answering tool

From a09a4217ac846e35afcb03e52b07a9c4faede809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=9E=E6=A2=93?= Date: Tue, 9 Jul 2024 16:25:06 +0800 Subject: [PATCH 211/268] =?UTF-8?q?fix:=20label=E7=9A=84textAnchor?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E6=9B=B4=E6=AD=A3=E4=B8=BAtextAlign=20(#2587?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: xiexinrun --- site/examples/statistics/bar/demo/bar.js | 2 +- site/examples/statistics/dual-axes/demo/custom-dual-line.js | 4 ++-- site/examples/statistics/scatter/demo/point-label.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/site/examples/statistics/bar/demo/bar.js b/site/examples/statistics/bar/demo/bar.js index 263584882..9b7776e07 100644 --- a/site/examples/statistics/bar/demo/bar.js +++ b/site/examples/statistics/bar/demo/bar.js @@ -17,7 +17,7 @@ const DemoBar = () => { text: 'frequency', formatter: '.1%', style: { - textAnchor: (d) => (+d.frequency > 0.008 ? 'right' : 'start'), + textAlign: (d) => (+d.frequency > 0.008 ? 'right' : 'start'), fill: (d) => (+d.frequency > 0.008 ? '#fff' : '#000'), dx: (d) => (+d.frequency > 0.008 ? -5 : 5), }, diff --git a/site/examples/statistics/dual-axes/demo/custom-dual-line.js b/site/examples/statistics/dual-axes/demo/custom-dual-line.js index 431e98b54..487aa5d65 100644 --- a/site/examples/statistics/dual-axes/demo/custom-dual-line.js +++ b/site/examples/statistics/dual-axes/demo/custom-dual-line.js @@ -31,7 +31,7 @@ const DemoDualAxes = () => { text: (datum) => `${datum.value}个`, style: { dy: -10, - textAnchor: 'middle', + textAlign: 'middle', }, }, axis: { @@ -54,7 +54,7 @@ const DemoDualAxes = () => { text: (datum) => `${datum.count}个`, style: { dy: -10, - textAnchor: 'middle', + textAlign: 'middle', }, }, axis: { diff --git a/site/examples/statistics/scatter/demo/point-label.js b/site/examples/statistics/scatter/demo/point-label.js index 23dd89726..a9900dda0 100644 --- a/site/examples/statistics/scatter/demo/point-label.js +++ b/site/examples/statistics/scatter/demo/point-label.js @@ -19,7 +19,7 @@ const DemoScatter = () => { text: 'name', style: { stroke: '#fff', - textAnchor: 'start', + textAlign: 'start', textBaseline: 'middle', dx: 10, position: 'left', From 80e6e3172ac108536003c51632284f9242f5d29f Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Tue, 9 Jul 2024 18:00:15 +0800 Subject: [PATCH 212/268] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f13b0453d..a0dee6daf 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,6 @@ A React chart library, based on [G2](https://github.com/antvis/G2), [G6](https:/ Quick StartExamplesFAQ • - Online question answering tool

From e1f21ba4100e0cbf6c8f1d15bf9ab94c1766fb21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=B8=85?= Date: Wed, 24 Jul 2024 11:46:09 +0800 Subject: [PATCH 213/268] fix: support ssr (#2608) --- packages/util/src/rc/chart-loading.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/util/src/rc/chart-loading.tsx b/packages/util/src/rc/chart-loading.tsx index f2cc74a5a..c5ba8cff8 100644 --- a/packages/util/src/rc/chart-loading.tsx +++ b/packages/util/src/rc/chart-loading.tsx @@ -14,6 +14,9 @@ export interface ChartLoadingConfig { } const shadowLoading = (ele: HTMLElement) => { + if (typeof document === 'undefined') { + return 'loading'; + } const shadowRoot = ele.attachShadow({ mode: 'open' }); const shadowDiv = document.createElement('div'); const shadowStyle = document.createElement('style'); From 77995e5122254371720842d524134ea160ac3a72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=B8=85?= Date: Wed, 24 Jul 2024 12:18:13 +0800 Subject: [PATCH 214/268] Support-ssr (#2609) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: support ssr * fix:support ssr --- packages/util/src/rc/create-node.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/util/src/rc/create-node.ts b/packages/util/src/rc/create-node.ts index 25a746226..2b2feb2d7 100644 --- a/packages/util/src/rc/create-node.ts +++ b/packages/util/src/rc/create-node.ts @@ -2,7 +2,10 @@ import React from 'react'; import { render } from '../react/render'; const mountMapping = new Map(); -mountMapping.set('tooltip', document.createElement('div')); + +if (typeof document !== 'undefined') { + mountMapping.set('tooltip', document.createElement('div')); +} export const createNode = (children: React.ReactElement, isTooltip = false) => { let mount: HTMLElement = null; From e8e682ca25f6b55a0145534b0ed5d461ac9875fa Mon Sep 17 00:00:00 2001 From: HM Q <76636135+QHM-tjut@users.noreply.github.com> Date: Wed, 24 Jul 2024 14:03:38 +0800 Subject: [PATCH 215/268] fix: remove demo code paddingRight: 80 (#2594) --- site/examples/statistics/pie/demo/basic-donut.js | 1 - site/examples/statistics/pie/demo/outer-label.js | 1 - 2 files changed, 2 deletions(-) diff --git a/site/examples/statistics/pie/demo/basic-donut.js b/site/examples/statistics/pie/demo/basic-donut.js index 757889683..2b550b00e 100644 --- a/site/examples/statistics/pie/demo/basic-donut.js +++ b/site/examples/statistics/pie/demo/basic-donut.js @@ -14,7 +14,6 @@ const DemoPie = () => { ], angleField: 'value', colorField: 'type', - paddingRight: 80, innerRadius: 0.6, label: { text: 'value', diff --git a/site/examples/statistics/pie/demo/outer-label.js b/site/examples/statistics/pie/demo/outer-label.js index 55d8a1fd0..80443930c 100644 --- a/site/examples/statistics/pie/demo/outer-label.js +++ b/site/examples/statistics/pie/demo/outer-label.js @@ -14,7 +14,6 @@ const DemoPie = () => { ], angleField: 'value', colorField: 'type', - paddingRight: 80, label: { text: 'value', position: 'outside', From 126008d7ce809098827da4825065371ca09bf7ed Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Wed, 24 Jul 2024 14:09:12 +0800 Subject: [PATCH 216/268] chore: changelog (#2610) --- package.json | 2 +- packages/charts/CHANGELOG.md | 6 ++++++ packages/charts/package.json | 2 +- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- packages/util/package.json | 2 +- 6 files changed, 16 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 7494c481a..63607d337 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "ci:version": "pnpm changeset version", "add:changelog": "pnpm changeset", "before:release": "pnpm run build", - "release": "pnpm run before:release && pnpm publish --no-git-checks -r --registry=https://registry.npmjs.org --filter @ant-design/*", + "release": "pnpm publish --no-git-checks -r --registry=https://registry.npmjs.org --filter @ant-design/*", "release:alpha": "pnpm run before:release && pnpm publish --tag alpha --no-git-checks -r --filter @ant-design/*", "release:beta": "pnpm run before:release && pnpm publish --tag beta --no-git-checks -r --filter @ant-design/*" }, diff --git a/packages/charts/CHANGELOG.md b/packages/charts/CHANGELOG.md index f293fee16..e554f2a83 100644 --- a/packages/charts/CHANGELOG.md +++ b/packages/charts/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.1.2 + +`2024-07-24` + +- 🔥 Support SSR + ## 2.1.1 `2024-05-06` diff --git a/packages/charts/package.json b/packages/charts/package.json index 43a9fe1b7..22b92a3ec 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@ant-design/charts", - "version": "2.1.1", + "version": "2.1.2", "description": "AntV upper level visual component library", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 99cde7858..15f091d55 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.2.6 + +`2024-07-24` + +- 🔥 Support SSR + ## 2.2.5 `2024-07-03` diff --git a/packages/plots/package.json b/packages/plots/package.json index e3a14dee4..14b85eaa7 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.2.5", + "version": "2.2.6", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/util/package.json b/packages/util/package.json index 46d07a7f9..301589e15 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/charts-util", - "version": "0.0.1-alpha.5", + "version": "0.0.1-alpha.6", "description": "charts utils", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From c1050d11ee857e6b4be005ddb5e082659e4035d8 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 5 Aug 2024 19:49:04 +0800 Subject: [PATCH 217/268] fix: liquid (#2635) --- package.json | 4 ++-- packages/plots/CHANGELOG.md | 6 ++++++ packages/plots/package.json | 2 +- packages/plots/src/core/plots/liquid/adaptor.ts | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 63607d337..e3b75455c 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "charts", "private": true, "scripts": { - "start": "pnpm -r --stream --filter=./site run start", + "start": "pnpm run build:lib && pnpm -r --stream --filter=./site run start", "test": "pnpm -r --stream --filter=./packages/* run test", "lint": "pnpm -r --stream --filter=./packages/* run lint", "build": "pnpm -r --stream --filter=!./site run build", @@ -13,7 +13,7 @@ "ci:version": "pnpm changeset version", "add:changelog": "pnpm changeset", "before:release": "pnpm run build", - "release": "pnpm publish --no-git-checks -r --registry=https://registry.npmjs.org --filter @ant-design/*", + "release": "pnpm run before:release && pnpm publish --no-git-checks -r --registry=https://registry.npmjs.org --filter @ant-design/*", "release:alpha": "pnpm run before:release && pnpm publish --tag alpha --no-git-checks -r --filter @ant-design/*", "release:beta": "pnpm run before:release && pnpm publish --tag beta --no-git-checks -r --filter @ant-design/*" }, diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 15f091d55..1fdc222fa 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.2.7 + +`2024-08-05` + +- 🐞 [水波图Liquid组件当percent为0时,backgroundFill不生效](https://github.com/ant-design/ant-design-charts/issues/2628) + ## 2.2.6 `2024-07-24` diff --git a/packages/plots/package.json b/packages/plots/package.json index 14b85eaa7..80757c624 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.2.6", + "version": "2.2.7", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" diff --git a/packages/plots/src/core/plots/liquid/adaptor.ts b/packages/plots/src/core/plots/liquid/adaptor.ts index 9c2c3cb8c..6d668fc7c 100644 --- a/packages/plots/src/core/plots/liquid/adaptor.ts +++ b/packages/plots/src/core/plots/liquid/adaptor.ts @@ -20,6 +20,7 @@ export function adaptor(params: Params) { if (isNumber(percent)) { set(params, 'options.data', percent); + delete params.options.percent; } return params; }; From 463dcf1e475a2a183a359d036e10a4b0d48da353 Mon Sep 17 00:00:00 2001 From: Martin Jul Date: Mon, 5 Aug 2024 13:49:55 +0200 Subject: [PATCH 218/268] Fix typo in (US) English title (#2611) --- site/examples/statistics/bar/demo/meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/examples/statistics/bar/demo/meta.json b/site/examples/statistics/bar/demo/meta.json index da340be95..fa84488d1 100644 --- a/site/examples/statistics/bar/demo/meta.json +++ b/site/examples/statistics/bar/demo/meta.json @@ -16,7 +16,7 @@ "filename": "shape.js", "title": { "zh": "自定义条形图 shape", - "en": "Csutomize shape of bar plot" + "en": "Customize shape of bar plot" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*hB17Sq7hyuMAAAAAAAAAAAAADmJ7AQ/original" }, From 43a2d9e9c146586352384026c3ae013dab44cf67 Mon Sep 17 00:00:00 2001 From: Paul Bykov <47425463+PaulBykov@users.noreply.github.com> Date: Mon, 5 Aug 2024 14:50:17 +0300 Subject: [PATCH 219/268] Webpack v4 (import * as issue) fix (#2613) This changes should fix issues like this https://github.com/ant-design/ant-design-charts/issues/2504 --- packages/plots/src/core/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/plots/src/core/index.ts b/packages/plots/src/core/index.ts index 4de534693..2884c74a5 100644 --- a/packages/plots/src/core/index.ts +++ b/packages/plots/src/core/index.ts @@ -1,4 +1,3 @@ -export * as G2 from '@antv/g2'; export type { AreaOptions } from './plots/area'; export type { BarOptions } from './plots/bar'; export type { ColumnOptions } from './plots/column'; @@ -35,6 +34,8 @@ export type { SunburstOptions } from './plots/sunburst'; export * from './types'; +import * as G2 from '@antv/g2'; + import { Base } from './plots/base'; import { Area } from './plots/area'; import { Bar } from './plots/bar'; @@ -70,6 +71,8 @@ import { Venn } from './plots/venn'; import { Mix } from './plots/mix'; import { Sunburst } from './plots/sunburst'; +export { G2 }; + export const Plots = { Base, Line, From e52dfa2d11c1f2c4cc5091bd4d4515d00e338fe2 Mon Sep 17 00:00:00 2001 From: chenxiang <597219320@qq.com> Date: Mon, 5 Aug 2024 19:50:43 +0800 Subject: [PATCH 220/268] Update overview.zh.md (#2618) --- site/docs/options/plots/common/overview.zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/docs/options/plots/common/overview.zh.md b/site/docs/options/plots/common/overview.zh.md index 6897cd973..f273fc334 100644 --- a/site/docs/options/plots/common/overview.zh.md +++ b/site/docs/options/plots/common/overview.zh.md @@ -24,4 +24,4 @@ # 更多 -详见[选项](/options) +详见[选项](/options/plots/overview) From 82f949f18e975fff13c234058f011796e967b682 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 5 Aug 2024 20:04:02 +0800 Subject: [PATCH 221/268] changelog (#2636) --- packages/plots/CHANGELOG.md | 3 ++- packages/plots/package.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 1fdc222fa..6057c7389 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,7 +1,8 @@ +## 2.2.8 ## 2.2.7 - `2024-08-05` +- 🐞 [Webpack v4 (import * as issue) fix](https://github.com/ant-design/ant-design-charts/pull/2613) - 🐞 [水波图Liquid组件当percent为0时,backgroundFill不生效](https://github.com/ant-design/ant-design-charts/issues/2628) ## 2.2.6 diff --git a/packages/plots/package.json b/packages/plots/package.json index 80757c624..6e5109e59 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.2.7", + "version": "2.2.8", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" From 83aee0d20c4252a9c9988085a067213fb5516696 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:42:16 +0800 Subject: [PATCH 222/268] chore: demos (#2661) --- .../examples/case/interactions/demo/filter.js | 33 ++++ site/examples/case/interactions/demo/memo.js | 79 +++++++++ .../examples/case/interactions/demo/meta.json | 32 ++++ .../case/interactions/demo/segmented-line.js | 155 ++++++++++++++++++ .../case/interactions/demo/tooltip.js | 62 +++++++ 5 files changed, 361 insertions(+) create mode 100644 site/examples/case/interactions/demo/filter.js create mode 100644 site/examples/case/interactions/demo/memo.js create mode 100644 site/examples/case/interactions/demo/segmented-line.js create mode 100644 site/examples/case/interactions/demo/tooltip.js diff --git a/site/examples/case/interactions/demo/filter.js b/site/examples/case/interactions/demo/filter.js new file mode 100644 index 000000000..05bd3a4a6 --- /dev/null +++ b/site/examples/case/interactions/demo/filter.js @@ -0,0 +1,33 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Column } from '@ant-design/plots'; + +const DemoDefaultTooltip = () => { + const config = { + data: { + type: 'fetch', + value: 'https://gw.alipayobjects.com/os/antfincdn/iPY8JFnxdb/dodge-padding.json', + }, + xField: '月份', + yField: '月均降雨量', + colorField: 'name', + group: true, + style: { + inset: 5, + }, + onReady: ({ chart }) => { + try { + chart.on('afterrender', () => { + chart.emit('legend:filter', { + data: { channel: 'color', values: ['London'] }, + }); + }); + } catch (e) { + console.error(e); + } + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/case/interactions/demo/memo.js b/site/examples/case/interactions/demo/memo.js new file mode 100644 index 000000000..d78d7e801 --- /dev/null +++ b/site/examples/case/interactions/demo/memo.js @@ -0,0 +1,79 @@ +import React, { memo, useState } from 'react'; +import { Pie } from '@ant-design/plots'; +import { Button } from 'antd'; +import ReactDOM from 'react-dom'; +import { isEqual } from 'lodash-es'; + +const DemoPie = memo( + ({ data, onReady }) => { + var config = { + data, + angleField: 'value', + colorField: 'type', + label: { + text: 'value', + position: 'outside', + }, + onReady, + }; + return ; + }, + (pre, next) => { + return isEqual(pre?.data, next?.data); + }, +); + +const DemoMemo = () => { + const [count, setCount] = useState(0); + const [data, setData] = useState([ + { + type: '分类一', + value: 27, + }, + { + type: '分类二', + value: 25, + }, + { + type: '分类三', + value: 18, + }, + { + type: '分类四', + value: 15, + }, + { + type: '分类五', + value: 10, + }, + { + type: '其他', + value: 5, + }, + ]); + + return ( +
+ + + {count} + {}} /> +
+ ); +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/case/interactions/demo/meta.json b/site/examples/case/interactions/demo/meta.json index 225d987bc..0507bff72 100644 --- a/site/examples/case/interactions/demo/meta.json +++ b/site/examples/case/interactions/demo/meta.json @@ -11,6 +11,38 @@ "en": "Chart link" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*dBDRR43tju8AAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "tooltip.js", + "title": { + "zh": "默认提示", + "en": "Default tooltip" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*vqr9QrFDTEgAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "segmented-line.js", + "title": { + "zh": "分段线", + "en": "Segmented line" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*wL0FRJvibpAAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "memo.js", + "title": { + "zh": "防止重复渲染", + "en": "Memo" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*y2aySIowQlUAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "filter.js", + "title": { + "zh": "图例过滤", + "en": "Legend filter" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*2e6jSoEnW60AAAAAAAAAAAAADmJ7AQ/original" } ] } diff --git a/site/examples/case/interactions/demo/segmented-line.js b/site/examples/case/interactions/demo/segmented-line.js new file mode 100644 index 000000000..62e0cffb9 --- /dev/null +++ b/site/examples/case/interactions/demo/segmented-line.js @@ -0,0 +1,155 @@ +import { Line } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoSegmentedLine = () => { + const data = [ + { + year: '1991', + value: 3, + type: 'Lon', + }, + { + year: '1992', + value: 4, + type: 'Lon', + }, + { + year: '1993', + value: 3.5, + type: 'Lon', + }, + { + year: '1994', + value: 5, + type: 'Lon', + }, + { + year: '1995', + value: 4.9, + type: 'Lon', + }, + { + year: '1996', + value: 6, + type: 'Lon', + }, + { + year: '1997', + value: null, + type: 'Lon', + }, + { + year: '1998', + value: null, + type: 'Lon', + }, + { + year: '1999', + value: null, + type: 'Lon', + }, + { + year: '1991', + value: null, + type: 'Bor', + }, + { + year: '1992', + value: null, + type: 'Bor', + }, + { + year: '1993', + value: null, + type: 'Bor', + }, + { + year: '1994', + value: null, + type: 'Bor', + }, + { + year: '1995', + value: null, + type: 'Bor', + }, + { + year: '1996', + value: 6, + type: 'Bor', + }, + { + year: '1997', + value: 7, + type: 'Bor', + }, + { + year: '1998', + value: 9, + type: 'Bor', + }, + { + year: '1999', + value: 13, + type: 'Bor', + }, + ]; + const config = { + data, + xField: 'year', + yField: 'value', + colorField: 'type', + scale: { + color: { + range: ['#2688FF', 'red'], + }, + }, + style: { + lineWidth: 2, + lineDash: (items) => { + const { type } = items[0]; + return type === 'Bor' ? [2, 4] : [0, 0]; + }, + }, + interaction: { + tooltip: { + render: (e, { title, items }) => { + const list = items.filter((item) => item.value); + return ( +
+

{title}

+ {list.map((item) => { + const { name, value, color } = item; + return ( +
+
+
+ + {name} +
+ {value} +
+
+ ); + })} +
+ ); + }, + }, + }, + legend: false, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/case/interactions/demo/tooltip.js b/site/examples/case/interactions/demo/tooltip.js new file mode 100644 index 000000000..7957168fa --- /dev/null +++ b/site/examples/case/interactions/demo/tooltip.js @@ -0,0 +1,62 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Column } from '@ant-design/plots'; + +const DemoDefaultTooltip = () => { + const data = [ + { letter: 'A', frequency: 8167 }, + { letter: 'B', frequency: 1492 }, + { letter: 'C', frequency: 2782 }, + { letter: 'D', frequency: 4253 }, + { letter: 'E', frequency: 12702 }, + { letter: 'F', frequency: 2288 }, + { letter: 'G', frequency: 2015 }, + { letter: 'H', frequency: 6094 }, + { letter: 'I', frequency: 6966 }, + { letter: 'J', frequency: 153 }, + { letter: 'K', frequency: 772 }, + { letter: 'L', frequency: 4025 }, + { letter: 'M', frequency: 2406 }, + { letter: 'N', frequency: 6749 }, + { letter: 'O', frequency: 7507 }, + { letter: 'P', frequency: 1929 }, + { letter: 'Q', frequency: 95 }, + { letter: 'R', frequency: 5987 }, + { letter: 'S', frequency: 6327 }, + { letter: 'T', frequency: 9056 }, + { letter: 'U', frequency: 2758 }, + { letter: 'V', frequency: 978 }, + { letter: 'W', frequency: 236 }, + { letter: 'X', frequency: 15 }, + { letter: 'Y', frequency: 1974 }, + { letter: 'Z', frequency: 74 }, + ]; + const config = { + data, + xField: 'letter', + yField: 'frequency', + onReady: ({ chart }) => { + try { + const { height } = chart._container.getBoundingClientRect(); + const tooltipItem = data[Math.floor(Math.random() * data.length)]; + chart.on( + 'afterrender', + () => { + chart.emit('tooltip:show', { + data: { + data: tooltipItem, + }, + offsetY: height / 2 - 60, + }); + }, + true, + ); + } catch (e) { + console.error(e); + } + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); From 713d12797562412ca19923020353a402118fca3b Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Mon, 26 Aug 2024 21:25:25 +0800 Subject: [PATCH 223/268] fix: nextjs lodash esm (#2666) --- config/jest.js | 1 - config/webpack.js | 2 +- packages/charts/CHANGELOG.md | 6 ++ packages/charts/package.json | 6 +- packages/plots/CHANGELOG.md | 6 ++ packages/plots/jest.config.js | 2 +- packages/plots/package.json | 6 +- packages/plots/src/core/utils/index.ts | 2 +- packages/plots/src/util/index.ts | 2 +- scripts/ast3.0/core/constants.js | 2 +- scripts/ast3.0/core/parser.js | 2 +- scripts/ast3.0/core/utils.js | 2 +- site/.dumi/global.ts | 2 +- site/docs/manual/getting-started.zh.md | 5 +- .../column/demo/annotation-label.js | 2 +- site/examples/statistics/sankey/demo/basic.js | 87 ++++++++++++++++++- site/package.json | 2 +- template/doc/demo.ejs | 4 +- 18 files changed, 116 insertions(+), 25 deletions(-) diff --git a/config/jest.js b/config/jest.js index ad191ed22..f374d04ef 100644 --- a/config/jest.js +++ b/config/jest.js @@ -8,7 +8,6 @@ const BaseJestConfig = { '\\.(less|css)$': 'jest-less-loader', }, moduleNameMapper: { - '^lodash-es$': 'lodash', '^.+\\.(css|less)$': 'identity-obj-proxy', }, moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], diff --git a/config/webpack.js b/config/webpack.js index 683384da2..6a6f79b32 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -40,7 +40,7 @@ const getWebpackConfig = (name, library) => { commonjs: 'react-dom', amd: 'react-dom', }, - 'lodash-es': { + lodash: { root: '_', commonjs2: 'lodash', commonjs: 'lodash', diff --git a/packages/charts/CHANGELOG.md b/packages/charts/CHANGELOG.md index e554f2a83..bef1eeb84 100644 --- a/packages/charts/CHANGELOG.md +++ b/packages/charts/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.2.1 + +`2024-08-26` + +- 🐞 [🧐[问题]ESM packages (lodash-es) need to be imported. ](https://github.com/ant-design/ant-design-charts/issues/2489) + ## 2.1.2 `2024-07-24` diff --git a/packages/charts/package.json b/packages/charts/package.json index 22b92a3ec..faf737217 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@ant-design/charts", - "version": "2.1.2", + "version": "2.2.1", "description": "AntV upper level visual component library", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" @@ -30,10 +30,10 @@ "lib:es": "tsc -p tsconfig.json --target ES5 --module ESNext --outDir es" }, "dependencies": { - "@ant-design/plots": "^2.1.3" + "@ant-design/plots": "^2.1.3", + "lodash": "^4.17.21" }, "peerDependencies": { - "lodash-es": "^4.17.21", "react": ">=16.8.4", "react-dom": ">=16.8.4" }, diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index 6057c7389..b4d1dacfe 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.3.1 + +`2024-08-26` + +- 🐞 [🧐[问题]ESM packages (lodash-es) need to be imported. ](https://github.com/ant-design/ant-design-charts/issues/2489) + ## 2.2.8 ## 2.2.7 `2024-08-05` diff --git a/packages/plots/jest.config.js b/packages/plots/jest.config.js index 60e34dba6..f0ce7b7ad 100644 --- a/packages/plots/jest.config.js +++ b/packages/plots/jest.config.js @@ -4,7 +4,7 @@ module.exports = { ...(process.env.DEBUG_MODE === '1' ? OnlineConfig : {}), moduleNameMapper: { '^d3-((?!linear)\\S*)': `/../../node_modules/d3-$1/dist/d3-$1.min.js`, - '^lodash-es$': 'lodash', + '^lodash$': 'lodash', '^@ant-design/charts-util': `/../../packages/util/src`, }, }; diff --git a/packages/plots/package.json b/packages/plots/package.json index 6e5109e59..f25206c27 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.2.8", + "version": "2.3.1", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" @@ -40,10 +40,10 @@ "@antv/event-emitter": "^0.1.3", "@antv/g": "^6.0.0", "@antv/g2": "^5.1.18", - "@antv/g2-extension-plot": "^0.2.0" + "@antv/g2-extension-plot": "^0.2.0", + "lodash": "^4.17.21" }, "peerDependencies": { - "lodash-es": "^4.17.21", "react": ">=16.8.4", "react-dom": ">=16.8.4" }, diff --git a/packages/plots/src/core/utils/index.ts b/packages/plots/src/core/utils/index.ts index bb5b71db1..01c69102f 100644 --- a/packages/plots/src/core/utils/index.ts +++ b/packages/plots/src/core/utils/index.ts @@ -28,7 +28,7 @@ export { memoize, values, isUndefined, -} from 'lodash-es'; +} from 'lodash'; export { isCompositePlot } from './is-composite-plot'; export { transformOptions } from './transform'; export { deleteExcessKeys } from './delete-excess-keys'; diff --git a/packages/plots/src/util/index.ts b/packages/plots/src/util/index.ts index cbe81724b..d1409c006 100644 --- a/packages/plots/src/util/index.ts +++ b/packages/plots/src/util/index.ts @@ -1,3 +1,3 @@ -export { isEqual, get, isString, isNumber, isFunction, isElement, cloneDeep, isArray, isObject } from 'lodash-es'; +export { isEqual, get, isString, isNumber, isFunction, isElement, cloneDeep, isArray, isObject } from 'lodash'; export { createNode, uuid } from '@ant-design/charts-util'; export { isValidElement } from './is-valid-element'; diff --git a/scripts/ast3.0/core/constants.js b/scripts/ast3.0/core/constants.js index cb4ce09b8..9cda9e18d 100644 --- a/scripts/ast3.0/core/constants.js +++ b/scripts/ast3.0/core/constants.js @@ -1,4 +1,4 @@ -const { uniqBy, concat, filter, get } = require('lodash-es'); +const { uniqBy, concat, filter, get } = require('lodash'); /** * 函数标识 diff --git a/scripts/ast3.0/core/parser.js b/scripts/ast3.0/core/parser.js index e439ba396..116ca466a 100644 --- a/scripts/ast3.0/core/parser.js +++ b/scripts/ast3.0/core/parser.js @@ -1,7 +1,7 @@ const fs = require('fs'); const babel = require('@babel/core'); const chalk = require('chalk'); -const { get, pick } = require('lodash-es'); +const { get, pick } = require('lodash'); const { PIPELINE } = require('./constants'); const { SETGLOBAL, RESETGLOBAL, INGLOBALRANGE } = require('./global'); const { diff --git a/scripts/ast3.0/core/utils.js b/scripts/ast3.0/core/utils.js index a730a23f8..1ac058874 100644 --- a/scripts/ast3.0/core/utils.js +++ b/scripts/ast3.0/core/utils.js @@ -1,4 +1,4 @@ -const { get } = require('lodash-es'); +const { get } = require('lodash'); const { SHAPES, SIGN } = require('./constants'); const { SETGLOBAL } = require('./global'); diff --git a/site/.dumi/global.ts b/site/.dumi/global.ts index 3ed8d4a0e..b82c6fec9 100644 --- a/site/.dumi/global.ts +++ b/site/.dumi/global.ts @@ -4,7 +4,7 @@ if (window) { (window as any).react = require('react'); (window as any).reactDom = require('react-dom'); (window as any).fecha = require('fecha'); - (window as any).lodashEs = require('lodash-es'); + (window as any).lodashEs = require('lodash'); /** 不要使用 link, react-dom 冲突 */ (window as any).plots = require('@ant-design/plots'); (window as any).d3Interpolate = require('d3-interpolate'); diff --git a/site/docs/manual/getting-started.zh.md b/site/docs/manual/getting-started.zh.md index 35ca1a949..07be271a2 100644 --- a/site/docs/manual/getting-started.zh.md +++ b/site/docs/manual/getting-started.zh.md @@ -20,7 +20,6 @@ import { Line } from '@ant-design/charts'; ```ts "peerDependencies": { - "lodash-es": "^4.17.20", "react": ">=16.8.4", "react-dom": ">=16.8.4" } @@ -42,19 +41,17 @@ npm install @ant-design/plots --save ``` -由于 @ant-design/charts 里面 externals 了 `react` 、`react-dom` 和 `lodash-es`,使用时需要通过 CDN 的方式在 `charts.min.js` 之前引入对应包的 CDN 地址。 +由于 @ant-design/charts 里面 externals 了 `react` 、`react-dom`,使用时需要通过 CDN 的方式在 `charts.min.js` 之前引入对应包的 CDN 地址。 ```ts // webpack.config.js externals: { react: 'React', 'react-dom': 'ReactDOM', - 'lodash-es': 'lodash' } // public/index.html - // 按需引入 diff --git a/site/examples/statistics/column/demo/annotation-label.js b/site/examples/statistics/column/demo/annotation-label.js index ea443cff2..a2d7e6538 100644 --- a/site/examples/statistics/column/demo/annotation-label.js +++ b/site/examples/statistics/column/demo/annotation-label.js @@ -1,7 +1,7 @@ import { Column } from '@ant-design/plots'; import React, { useEffect, useState } from 'react'; import ReactDOM from 'react-dom'; -import { forEach, groupBy } from 'lodash-es'; +import { forEach, groupBy } from 'lodash'; const DemoColumn = () => { const [data, setData] = useState([]); diff --git a/site/examples/statistics/sankey/demo/basic.js b/site/examples/statistics/sankey/demo/basic.js index 898854cc9..32730af57 100644 --- a/site/examples/statistics/sankey/demo/basic.js +++ b/site/examples/statistics/sankey/demo/basic.js @@ -5,8 +5,78 @@ import ReactDOM from 'react-dom'; const DemoSankey = () => { const config = { data: { - type: 'fetch', - value: 'https://assets.antv.antgroup.com/g2/energy.json', + value: { + links: [ + { source: "Agricultural 'waste'", target: 'Bio-conversion', value: 124.729 }, + { source: 'Bio-conversion', target: 'Liquid', value: 0.597 }, + { source: 'Bio-conversion', target: 'Losses', value: 26.862 }, + { source: 'Bio-conversion', target: 'Solid', value: 280.322 }, + { source: 'Bio-conversion', target: 'Gas', value: 81.144 }, + { source: 'Biofuel imports', target: 'Liquid', value: 35 }, + { source: 'Biomass imports', target: 'Solid', value: 35 }, + { source: 'Coal imports', target: 'Coal', value: 11.606 }, + { source: 'Coal reserves', target: 'Coal', value: 63.965 }, + { source: 'Coal', target: 'Solid', value: 75.571 }, + { source: 'District heating', target: 'Industry', value: 10.639 }, + { source: 'District heating', target: 'Heating and cooling - commercial', value: 22.505 }, + { source: 'District heating', target: 'Heating and cooling - homes', value: 46.184 }, + { source: 'Electricity grid', target: 'Over generation / exports', value: 104.453 }, + { source: 'Electricity grid', target: 'Heating and cooling - homes', value: 113.726 }, + { source: 'Electricity grid', target: 'H2 conversion', value: 27.14 }, + { source: 'Electricity grid', target: 'Industry', value: 342.165 }, + { source: 'Electricity grid', target: 'Road transport', value: 37.797 }, + { source: 'Electricity grid', target: 'Agriculture', value: 4.412 }, + { source: 'Electricity grid', target: 'Heating and cooling - commercial', value: 40.858 }, + { source: 'Electricity grid', target: 'Losses', value: 56.691 }, + { source: 'Electricity grid', target: 'Rail transport', value: 7.863 }, + { source: 'Electricity grid', target: 'Lighting & appliances - commercial', value: 90.008 }, + { source: 'Electricity grid', target: 'Lighting & appliances - homes', value: 93.494 }, + { source: 'Gas imports', target: 'Ngas', value: 40.719 }, + { source: 'Gas reserves', target: 'Ngas', value: 82.233 }, + { source: 'Gas', target: 'Heating and cooling - commercial', value: 0.129 }, + { source: 'Gas', target: 'Losses', value: 1.401 }, + { source: 'Gas', target: 'Thermal generation', value: 151.891 }, + { source: 'Gas', target: 'Agriculture', value: 2.096 }, + { source: 'Gas', target: 'Industry', value: 48.58 }, + { source: 'Geothermal', target: 'Electricity grid', value: 7.013 }, + { source: 'H2 conversion', target: 'H2', value: 20.897 }, + { source: 'H2 conversion', target: 'Losses', value: 6.242 }, + { source: 'H2', target: 'Road transport', value: 20.897 }, + { source: 'Hydro', target: 'Electricity grid', value: 6.995 }, + { source: 'Liquid', target: 'Industry', value: 121.066 }, + { source: 'Liquid', target: 'International shipping', value: 128.69 }, + { source: 'Liquid', target: 'Road transport', value: 135.835 }, + { source: 'Liquid', target: 'Domestic aviation', value: 14.458 }, + { source: 'Liquid', target: 'International aviation', value: 206.267 }, + { source: 'Liquid', target: 'Agriculture', value: 3.64 }, + { source: 'Liquid', target: 'National navigation', value: 33.218 }, + { source: 'Liquid', target: 'Rail transport', value: 4.413 }, + { source: 'Marine algae', target: 'Bio-conversion', value: 4.375 }, + { source: 'Ngas', target: 'Gas', value: 122.952 }, + { source: 'Nuclear', target: 'Thermal generation', value: 839.978 }, + { source: 'Oil imports', target: 'Oil', value: 504.287 }, + { source: 'Oil reserves', target: 'Oil', value: 107.703 }, + { source: 'Oil', target: 'Liquid', value: 611.99 }, + { source: 'Other waste', target: 'Solid', value: 56.587 }, + { source: 'Other waste', target: 'Bio-conversion', value: 77.81 }, + { source: 'Pumped heat', target: 'Heating and cooling - homes', value: 193.026 }, + { source: 'Pumped heat', target: 'Heating and cooling - commercial', value: 70.672 }, + { source: 'Solar PV', target: 'Electricity grid', value: 59.901 }, + { source: 'Solar Thermal', target: 'Heating and cooling - homes', value: 19.263 }, + { source: 'Solar', target: 'Solar Thermal', value: 19.263 }, + { source: 'Solar', target: 'Solar PV', value: 59.901 }, + { source: 'Solid', target: 'Agriculture', value: 0.882 }, + { source: 'Solid', target: 'Thermal generation', value: 400.12 }, + { source: 'Solid', target: 'Industry', value: 46.477 }, + { source: 'Thermal generation', target: 'Electricity grid', value: 525.531 }, + { source: 'Thermal generation', target: 'Losses', value: 787.129 }, + { source: 'Thermal generation', target: 'District heating', value: 79.329 }, + { source: 'Tidal', target: 'Electricity grid', value: 9.452 }, + { source: 'UK land based bioenergy', target: 'Bio-conversion', value: 182.01 }, + { source: 'Wave', target: 'Electricity grid', value: 19.013 }, + { source: 'Wind', target: 'Electricity grid', value: 289.366 }, + ], + }, }, scale: { color: { @@ -31,6 +101,19 @@ const DemoSankey = () => { nodeStrokeWidth: 1.2, linkFillOpacity: 0.4, }, + interaction: { + tooltip: { + render: (e, { title, items }) => { + console.log(title, items); + // const div = document.createElement('div'); + // const h3 = document.createElement('h3'); + // h3.innerHTML = title; + // div.appendChild(h3); + // div.innerHTML = `${source} → ${target}: ${value}`; + return
123
; + }, + }, + }, }; return ; }; diff --git a/site/package.json b/site/package.json index 6a42f7bc1..662ae234e 100644 --- a/site/package.json +++ b/site/package.json @@ -45,7 +45,7 @@ "@ant-design/plots": "workspace:*", "antd": "^4.16.13", "insert-css": "^2.0.0", - "lodash-es": "^4.17.21", + "lodash": "^4.17.21", "rc-util": "^5.39.1", "react": "^16.14.0", "react-dom": "^16.14.0" diff --git a/template/doc/demo.ejs b/template/doc/demo.ejs index 3ad0b1f58..9d4babd51 100644 --- a/template/doc/demo.ejs +++ b/template/doc/demo.ejs @@ -2,7 +2,7 @@ import React, { useState, useEffect }from 'react'; import ReactDOM from 'react-dom'; import { <%= plotName %> } from '@ant-design/<%= lib %>'; <% if (utilName) { %> -import { <%= utilName %> } from 'lodash-es'; +import { <%= utilName %> } from 'lodash'; <% } %> const Demo<%= chartName %> = () => { @@ -10,4 +10,4 @@ const Demo<%= chartName %> = () => { return <<%= chartName %> {...config} />; }; -ReactDOM.render( />, document.getElementById('container')); \ No newline at end of file +ReactDOM.render( />, document.getElementById('container')); From 11379e6f791318fefaa036a3640cc3f9feb089f9 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 6 Sep 2024 16:11:49 +0800 Subject: [PATCH 224/268] fix: data update (#2684) --- packages/plots/src/core/plots/pie/adaptor.ts | 2 +- packages/plots/src/hooks/useChart.ts | 17 ++------ .../case/interactions/demo/change-data.js | 40 +++++++++++++++++++ .../examples/case/interactions/demo/meta.json | 10 ++++- 4 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 site/examples/case/interactions/demo/change-data.js diff --git a/packages/plots/src/core/plots/pie/adaptor.ts b/packages/plots/src/core/plots/pie/adaptor.ts index 6c20c0f6b..ec588e67c 100644 --- a/packages/plots/src/core/plots/pie/adaptor.ts +++ b/packages/plots/src/core/plots/pie/adaptor.ts @@ -18,7 +18,7 @@ export function adaptor(params: Params) { const { angleField, data, label, tooltip, colorField } = options; const getColorValue = fieldAdapter(colorField); - if (isArray(data)) { + if (isArray(data) && data.length > 0) { const sum = data.reduce((a, b) => a + b[angleField], 0); if (sum === 0) { const normalization = data.map((item) => ({ ...item, [angleField]: 1 })); diff --git a/packages/plots/src/hooks/useChart.ts b/packages/plots/src/hooks/useChart.ts index 840049528..bdb95a386 100644 --- a/packages/plots/src/hooks/useChart.ts +++ b/packages/plots/src/hooks/useChart.ts @@ -71,21 +71,10 @@ export default function useChart(ChartC useEffect(() => { if (chart.current && !isEqual(chartOptions.current, config)) { - let changeData = false; - if (chartOptions.current) { - // 从 options 里面取出 data 、value 、 percent 进行比对,判断是否仅数值发生改变 - const { data: currentData, ...currentConfig } = chartOptions.current; - const { data: inputData, ...inputConfig } = config; - changeData = isEqual(currentConfig, inputConfig); - } chartOptions.current = cloneDeep(config); - if (changeData) { - chart.current.changeData(get(config, 'data')); - } else { - processConfig(config); - chart.current.update(config); - chart.current.render(); - } + processConfig(config); + chart.current.update(config); + chart.current.render(); } }, [config]); diff --git a/site/examples/case/interactions/demo/change-data.js b/site/examples/case/interactions/demo/change-data.js new file mode 100644 index 000000000..bd6c54f0c --- /dev/null +++ b/site/examples/case/interactions/demo/change-data.js @@ -0,0 +1,40 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Pie } from '@ant-design/plots'; + +const DemoChangeData = () => { + const [data, setData] = React.useState([]); + React.useEffect(() => { + setTimeout(() => { + setData([ + { type: '分类一', value: 27 }, + { type: '分类二', value: 25 }, + { type: '分类三', value: 18 }, + { type: '分类四', value: 15 }, + { type: '分类五', value: 10 }, + { type: '其他', value: 5 }, + ]); + }, 1000); + }, []); + const config = { + data, + angleField: 'value', + colorField: 'type', + label: { + text: 'value', + style: { + fontWeight: 'bold', + }, + }, + legend: { + color: { + title: false, + position: 'right', + rowPadding: 5, + }, + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/case/interactions/demo/meta.json b/site/examples/case/interactions/demo/meta.json index 0507bff72..555170d2f 100644 --- a/site/examples/case/interactions/demo/meta.json +++ b/site/examples/case/interactions/demo/meta.json @@ -43,6 +43,14 @@ "en": "Legend filter" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*2e6jSoEnW60AAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "change-data.js", + "title": { + "zh": "数据更新", + "en": "Data update" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*0O5VR5z7zlgAAAAAAAAAAAAADmJ7AQ/original" } ] -} +} \ No newline at end of file From 387849e57aa40eb638dfddbf1a469d7b92ac271f Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:02:30 +0800 Subject: [PATCH 225/268] chore: custom shape demo (#2685) * chore: custom shape demo * chore: default selected demo --- .../case/interactions/demo/custom-shape.js | 49 +++++++++++++++++++ .../interactions/demo/default-selected.js | 40 +++++++++++++++ .../examples/case/interactions/demo/meta.json | 16 ++++++ 3 files changed, 105 insertions(+) create mode 100644 site/examples/case/interactions/demo/custom-shape.js create mode 100644 site/examples/case/interactions/demo/default-selected.js diff --git a/site/examples/case/interactions/demo/custom-shape.js b/site/examples/case/interactions/demo/custom-shape.js new file mode 100644 index 000000000..9a921eb8f --- /dev/null +++ b/site/examples/case/interactions/demo/custom-shape.js @@ -0,0 +1,49 @@ +import { Column } from '@ant-design/plots'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +const DemoCustomShape = () => { + const config = { + data: [ + { type: '1-3秒', value: 0.36 }, + { type: '4-10秒', value: 0.25 }, + { type: '11-30秒', value: 0.24 }, + { type: '31-60秒', value: 0.19 }, + { type: '1-3分', value: 0.12 }, + { type: '3-10分', value: 0.15 }, + { type: '10-30分', value: 0.16 }, + { type: '30+分', value: 0.1 }, + ], + xField: 'type', + yField: 'value', + annotations: [ + { + type: 'shape', + xField: 'type', + yField: 'value', + style: { + render: ({ x, y }, context) => { + const { document } = context; + const g = document.createElement('g', {}); + const { width } = document.getElementsByClassName('element')[0].getBBox(); + const rect = document.createElement('rect', { + style: { + x: x - width / 2, + y: y - 20, + width, + height: 10, + fill: '#FF8C16', + cursor: 'pointer', + }, + }); + g.appendChild(rect); + return g; + }, + }, + }, + ], + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/case/interactions/demo/default-selected.js b/site/examples/case/interactions/demo/default-selected.js new file mode 100644 index 000000000..6b61f5e35 --- /dev/null +++ b/site/examples/case/interactions/demo/default-selected.js @@ -0,0 +1,40 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Bar } from '@ant-design/plots'; + +const DemoSelected = () => { + const config = { + data: [ + { type: '分类一', value: 87 }, + { type: '分类二', value: 65 }, + { type: '分类三', value: 48 }, + { type: '分类四', value: 15 }, + { type: '分类五', value: 10 }, + { type: '其他', value: 5 }, + ], + xField: 'type', + yField: 'value', + colorField: 'type', + state: { + unselected: { opacity: 0.5 }, + selected: { lineWidth: 3, stroke: 'red' }, + }, + interaction: { + elementSelect: true, + }, + onReady: ({ chart, ...rest }) => { + chart.on( + 'afterrender', + () => { + const { document } = chart.getContext().canvas; + const elements = document.getElementsByClassName('element'); + elements[0]?.emit('click'); + }, + true, + ); + }, + }; + return ; +}; + +ReactDOM.render(, document.getElementById('container')); diff --git a/site/examples/case/interactions/demo/meta.json b/site/examples/case/interactions/demo/meta.json index 555170d2f..a80003ce7 100644 --- a/site/examples/case/interactions/demo/meta.json +++ b/site/examples/case/interactions/demo/meta.json @@ -51,6 +51,22 @@ "en": "Data update" }, "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*0O5VR5z7zlgAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "custom-shape.js", + "title": { + "zh": "自定义图形标记", + "en": "Custom shape" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*n4GESr9WhDQAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "default-selected.js", + "title": { + "zh": "默认选中", + "en": "Default selected" + }, + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*PKwaRJj4WNsAAAAAAAAAAAAADmJ7AQ/original" } ] } \ No newline at end of file From 19d714d958ab8a539c1267b28b6ee2c5ff84f735 Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:27:10 +0800 Subject: [PATCH 226/268] fix: tooltip callback (#2686) --- packages/plots/src/core/plots/pie/adaptor.ts | 33 +++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/packages/plots/src/core/plots/pie/adaptor.ts b/packages/plots/src/core/plots/pie/adaptor.ts index ec588e67c..3fa0877af 100644 --- a/packages/plots/src/core/plots/pie/adaptor.ts +++ b/packages/plots/src/core/plots/pie/adaptor.ts @@ -1,4 +1,4 @@ -import { flow, transformOptions, isArray, set, fieldAdapter } from '../../utils'; +import { flow, transformOptions, isArray, set, fieldAdapter, isFunction } from '../../utils'; import type { Adaptor } from '../../types'; import type { PieOptions } from './type'; @@ -30,17 +30,26 @@ export function adaptor(params: Params) { }); } if (tooltip !== false) { - set(options, 'tooltip', { - ...tooltip, - items: [ - (arg, i, d) => { - return { - name: getColorValue(arg, i, d), - value: 0, - }; - }, - ], - }); + if (isFunction(tooltip)) { + set(options, 'tooltip', (arg, index, items) => { + return tooltip({ + ...arg, + [angleField]: 0 + }, index, items.map(item => ({ ...item, [angleField]: 0 }))); + }); + } else { + set(options, 'tooltip', { + ...tooltip, + items: [ + (arg, i, d) => { + return { + name: getColorValue(arg, i, d), + value: 0, + }; + }, + ], + }); + } } } } From 3990c0e280107f3dbaab77f9660e89f6d405b8ca Mon Sep 17 00:00:00 2001 From: Joel Alan <31396322+lxfu1@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:48:54 +0800 Subject: [PATCH 227/268] chore: changelog (#2687) --- package.json | 3 ++- packages/plots/CHANGELOG.md | 9 +++++++++ packages/plots/package.json | 7 ++++--- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index e3b75455c..bbe5cc15e 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "sideEffects": false, "license": "MIT", "dependencies": { + "conventional-changelog-cli": "^5.0.0", "less-plugin-npm-import": "^2.1.0", "remark-frontmatter": "^4.0.1", "remark-parse": "^10.0.1", @@ -86,4 +87,4 @@ "to-vfile": "^7.2.3", "unified": "^10.1.2" } -} +} \ No newline at end of file diff --git a/packages/plots/CHANGELOG.md b/packages/plots/CHANGELOG.md index b4d1dacfe..f61171aed 100644 --- a/packages/plots/CHANGELOG.md +++ b/packages/plots/CHANGELOG.md @@ -1,3 +1,12 @@ +## [2.3.2](https://github.com/ant-design/ant-design-charts/compare/2.2.1...2.3.2) (2024-09-06) + + +### Bug Fixes + +* data update ([#2684](https://github.com/ant-design/ant-design-charts/issues/2684)) ([11379e6](https://github.com/ant-design/ant-design-charts/commit/11379e6f791318fefaa036a3640cc3f9feb089f9)) +* tooltip callback ([#2686](https://github.com/ant-design/ant-design-charts/issues/2686)) ([19d714d](https://github.com/ant-design/ant-design-charts/commit/19d714d958ab8a539c1267b28b6ee2c5ff84f735)) + + ## 2.3.1 `2024-08-26` diff --git a/packages/plots/package.json b/packages/plots/package.json index f25206c27..95b443f34 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/plots", - "version": "2.3.1", + "version": "2.3.2", "description": "G2Plot Statistical chart", "bugs": { "url": "https://github.com/ant-design/ant-design-charts/issues" @@ -33,7 +33,8 @@ "lint:prettier": "pnpm run prettier && git diff && prettier --version && prettier --check \"src/**/**.{js,jsx,tsx,ts,less,md,json}\" --end-of-line auto", "prettier": "prettier --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", "test": "jest", - "test:live": "DEBUG_MODE=1 jest --watch ./tests/plots/column-proxy-spec.tsx --no-cache" + "test:live": "DEBUG_MODE=1 jest --watch ./tests/plots/column-proxy-spec.tsx --no-cache", + "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" }, "dependencies": { "@ant-design/charts-util": "workspace:*", @@ -57,4 +58,4 @@ "react-test-renderer": "^18.0.0", "rimraf": "^3.0.2" } -} +} \ No newline at end of file From 055dc020937a79a909f813e84c951f504e7a5b2b Mon Sep 17 00:00:00 2001 From: Yuxin <55794321+yvonneyx@users.noreply.github.com> Date: Mon, 9 Sep 2024 16:59:02 +0800 Subject: [PATCH 228/268] chore: initialize @ant-design/graphs package (#2690) * chore: init graphs package * chore: config test env * fix: fix lint * chore: export files * chore: add jest * fix: fix cr issues --- packages/graphs/.babelrc | 3 + packages/graphs/.eslintignore | 5 ++ packages/graphs/.eslintrc.js | 3 + packages/graphs/README.md | 1 + packages/graphs/jest.config.js | 10 +++ packages/graphs/jest.setup.js | 2 + packages/graphs/package.json | 67 +++++++++++++++++++ .../components/HierarchicalGraph/index.tsx | 5 ++ packages/graphs/src/components/index.ts | 1 + packages/graphs/src/index.ts | 4 ++ .../graphs/tests/demos/error-boundary.tsx | 5 ++ packages/graphs/tests/demos/index.tsx | 1 + packages/graphs/tests/index.html | 18 +++++ packages/graphs/tests/main.tsx | 47 +++++++++++++ packages/graphs/tests/units/test.spec.ts | 5 ++ packages/graphs/tsconfig.json | 12 ++++ packages/graphs/tsconfig.prod.json | 4 ++ packages/graphs/vite.config.ts | 16 +++++ packages/graphs/webpack.config.js | 3 + tsconfig.json | 11 ++- 20 files changed, 217 insertions(+), 6 deletions(-) create mode 100644 packages/graphs/.babelrc create mode 100644 packages/graphs/.eslintignore create mode 100644 packages/graphs/.eslintrc.js create mode 100644 packages/graphs/README.md create mode 100644 packages/graphs/jest.config.js create mode 100644 packages/graphs/jest.setup.js create mode 100644 packages/graphs/package.json create mode 100644 packages/graphs/src/components/HierarchicalGraph/index.tsx create mode 100644 packages/graphs/src/components/index.ts create mode 100644 packages/graphs/src/index.ts create mode 100644 packages/graphs/tests/demos/error-boundary.tsx create mode 100644 packages/graphs/tests/demos/index.tsx create mode 100644 packages/graphs/tests/index.html create mode 100644 packages/graphs/tests/main.tsx create mode 100644 packages/graphs/tests/units/test.spec.ts create mode 100644 packages/graphs/tsconfig.json create mode 100644 packages/graphs/tsconfig.prod.json create mode 100644 packages/graphs/vite.config.ts create mode 100644 packages/graphs/webpack.config.js diff --git a/packages/graphs/.babelrc b/packages/graphs/.babelrc new file mode 100644 index 000000000..633f93f42 --- /dev/null +++ b/packages/graphs/.babelrc @@ -0,0 +1,3 @@ +{ + "extends": "../../.babelrc" +} diff --git a/packages/graphs/.eslintignore b/packages/graphs/.eslintignore new file mode 100644 index 000000000..cc6f6d2b0 --- /dev/null +++ b/packages/graphs/.eslintignore @@ -0,0 +1,5 @@ +dist +es +lib +node_modules +tests \ No newline at end of file diff --git a/packages/graphs/.eslintrc.js b/packages/graphs/.eslintrc.js new file mode 100644 index 000000000..6a8e85093 --- /dev/null +++ b/packages/graphs/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: '../../.eslintrc.js', +}; diff --git a/packages/graphs/README.md b/packages/graphs/README.md new file mode 100644 index 000000000..71349e463 --- /dev/null +++ b/packages/graphs/README.md @@ -0,0 +1 @@ +# @ant-design/graphs diff --git a/packages/graphs/jest.config.js b/packages/graphs/jest.config.js new file mode 100644 index 000000000..f0ce7b7ad --- /dev/null +++ b/packages/graphs/jest.config.js @@ -0,0 +1,10 @@ +const { BaseJestConfig, OnlineConfig } = require('../../config/jest'); +module.exports = { + ...BaseJestConfig, + ...(process.env.DEBUG_MODE === '1' ? OnlineConfig : {}), + moduleNameMapper: { + '^d3-((?!linear)\\S*)': `/../../node_modules/d3-$1/dist/d3-$1.min.js`, + '^lodash$': 'lodash', + '^@ant-design/charts-util': `/../../packages/util/src`, + }, +}; diff --git a/packages/graphs/jest.setup.js b/packages/graphs/jest.setup.js new file mode 100644 index 000000000..0bfed5f3b --- /dev/null +++ b/packages/graphs/jest.setup.js @@ -0,0 +1,2 @@ +require('../../config/setup'); +require('whatwg-fetch'); diff --git a/packages/graphs/package.json b/packages/graphs/package.json new file mode 100644 index 000000000..aaf6b4d41 --- /dev/null +++ b/packages/graphs/package.json @@ -0,0 +1,67 @@ +{ + "name": "@ant-design/graphs", + "version": "2.0.0-alpha.0", + "description": "A React graph library based on Graphin", + "bugs": { + "url": "https://github.com/ant-design/ant-design-charts/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ant-design/ant-design-charts.git" + }, + "main": "lib/index.js", + "unpkg": "dist/graphs.min.js", + "module": "es/index.js", + "types": "es/index.d.ts", + "files": [ + "lib", + "dist", + "es", + "src" + ], + "scripts": { + "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s", + "ci": "run-s lint build test", + "clean": "rimraf lib es dist", + "dev": "vite", + "build": "run-p build:*", + "build:umd": "rimraf ./dist && webpack --config webpack.config.js --mode production", + "build:lib": "rimraf ./lib && tsc -p tsconfig.prod.json --target ES5 --module commonjs --outDir lib", + "build:esm": "rimraf ./es && tsc -p tsconfig.prod.json --target ES5 --module ESNext --outDir es", + "lint:prettier": "npm run prettier && git diff && prettier --version && prettier --check \"src/**/**.{js,jsx,tsx,ts,less,md,json}\" --end-of-line auto", + "lint": "eslint --cache --ext .js,.jsx,.ts,.tsx --fix --format=pretty ./src && npm run lint:prettier", + "prettier": "prettier --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", + "profile": "webpack --config webpack.config.js --mode production --profile --json > stats.json", + "start": "npm run build:esm --w", + "test": "jest" + }, + "keywords": [ + "antv", + "g6", + "graph", + "graph analysis", + "graph editor", + "graph visualization", + "relational data", + "react" + ], + "dependencies": { + "@antv/g6": "^5.0.21", + "@antv/graphin": "^3.0.2", + "lodash-es": "^4.17.21" + }, + "devDependencies": { + "@types/jest": "^26.0.0", + "@types/react": "^18.0.0", + "@types/react-dom": "^18.0.6", + "antd": "^5.20.5", + "npm-run-all": "^4.1.5", + "react-router-dom": "^6.26.1", + "vite": "^5.4.3" + }, + "peerDependencies": { + "react": ">=16.8.4", + "react-dom": ">=16.8.4" + }, + "license": "MIT" +} diff --git a/packages/graphs/src/components/HierarchicalGraph/index.tsx b/packages/graphs/src/components/HierarchicalGraph/index.tsx new file mode 100644 index 000000000..16bbb3d86 --- /dev/null +++ b/packages/graphs/src/components/HierarchicalGraph/index.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export const HierarchicalGraph = () => { + return
HierarchicalGraph
; +}; diff --git a/packages/graphs/src/components/index.ts b/packages/graphs/src/components/index.ts new file mode 100644 index 000000000..83e25a1f1 --- /dev/null +++ b/packages/graphs/src/components/index.ts @@ -0,0 +1 @@ +export { HierarchicalGraph } from './HierarchicalGraph'; diff --git a/packages/graphs/src/index.ts b/packages/graphs/src/index.ts new file mode 100644 index 000000000..484a28982 --- /dev/null +++ b/packages/graphs/src/index.ts @@ -0,0 +1,4 @@ +import * as G6 from '@antv/g6'; + +export * from './components'; +export { G6 }; diff --git a/packages/graphs/tests/demos/error-boundary.tsx b/packages/graphs/tests/demos/error-boundary.tsx new file mode 100644 index 000000000..0376b99d1 --- /dev/null +++ b/packages/graphs/tests/demos/error-boundary.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export const ErrorBoundary = () => { + return
ErrorBoundary
; +}; diff --git a/packages/graphs/tests/demos/index.tsx b/packages/graphs/tests/demos/index.tsx new file mode 100644 index 000000000..538d0b512 --- /dev/null +++ b/packages/graphs/tests/demos/index.tsx @@ -0,0 +1 @@ +export { ErrorBoundary } from './error-boundary'; diff --git a/packages/graphs/tests/index.html b/packages/graphs/tests/index.html new file mode 100644 index 000000000..5717fd0fe --- /dev/null +++ b/packages/graphs/tests/index.html @@ -0,0 +1,18 @@ + + + + + + @ant-design/graphs + + + +
+ + + diff --git a/packages/graphs/tests/main.tsx b/packages/graphs/tests/main.tsx new file mode 100644 index 000000000..a81980fe9 --- /dev/null +++ b/packages/graphs/tests/main.tsx @@ -0,0 +1,47 @@ +import { Alert, Flex, Select } from 'antd'; +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import { Outlet, RouterProvider, createBrowserRouter, useMatch, useNavigate } from 'react-router-dom'; +import * as demos from './demos'; + +const App = () => { + const navigate = useNavigate(); + const match = useMatch('/*'); + + return ( + + ({ label, value: label }))} diff --git a/packages/graphs/vite.config.ts b/packages/graphs/vite.config.ts index c53edf895..436bd43c4 100644 --- a/packages/graphs/vite.config.ts +++ b/packages/graphs/vite.config.ts @@ -10,8 +10,8 @@ export default defineConfig({ plugins: [{ name: 'isolation' }], resolve: { alias: { - '@ant-design/graphs': path.resolve(__dirname, './src'), - '@ant-design/graphs-util': path.resolve(__dirname, '../../util/lib/index.js'), + '@ant-design/graphs': path.resolve(__dirname, './src/index.ts'), + '@ant-design/graphs-util': path.resolve(__dirname, '../util/src/index.ts') }, }, }); diff --git a/packages/plots/package.json b/packages/plots/package.json index 86ffee363..70782d05d 100644 --- a/packages/plots/package.json +++ b/packages/plots/package.json @@ -39,10 +39,12 @@ "dependencies": { "@ant-design/charts-util": "workspace:*", "@antv/event-emitter": "^0.1.3", - "@antv/g": "^6.0.0", - "@antv/g2": "^5.1.18", - "@antv/g2-extension-plot": "^0.2.0", - "lodash": "^4.17.21" + "@antv/g": "^6.1.7", + "@antv/g2": "^5.2.7", + "@antv/g2-extension-plot": "^0.2.1", + "lodash": "^4.17.21", + "react": "^18.3.1", + "react-dom": "^18.3.1" }, "peerDependencies": { "react": ">=16.8.4", @@ -51,9 +53,9 @@ "sideEffects": false, "license": "MIT", "devDependencies": { - "@types/jest": "^26.0.0", - "@types/react": "^18.0.0", - "@types/react-dom": "^18.0.6", - "react-test-renderer": "^18.0.0" + "@types/jest": "^26.0.24", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "react-test-renderer": "^18.3.1" } } diff --git a/packages/util/package.json b/packages/util/package.json index 33a868056..af6521744 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -42,12 +42,14 @@ }, "license": "MIT", "devDependencies": { - "@types/jest": "^26.0.0", - "@types/react": "^18.0.0", - "@types/react-dom": "^18.0.6" + "@types/jest": "^26.0.24", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1" }, "dependencies": { - "lodash": "^4.17.21" + "lodash": "^4.17.21", + "react": "^18.3.1", + "react-dom": "^18.3.1" }, "publishConfig": { "access": "public", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 326a7d445..5f0bba7f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,8 +1,4 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false +lockfileVersion: '6.0' overrides: '@typescript-eslint/eslint-plugin': ^4.1.1 @@ -17,7 +13,7 @@ importers: dependencies: conventional-changelog-cli: specifier: ^5.0.0 - version: 5.0.0(conventional-commits-filter@5.0.0) + version: 5.0.0 less-plugin-npm-import: specifier: ^2.1.0 version: 2.1.0 @@ -38,29 +34,29 @@ importers: version: 10.1.2 devDependencies: '@babel/core': - specifier: ^7.25.2 + specifier: ^7.26.0 version: 7.26.0 '@babel/polyfill': specifier: ^7.12.1 version: 7.12.1 '@babel/preset-env': - specifier: ^7.25.4 + specifier: ^7.26.0 version: 7.26.0(@babel/core@7.26.0) '@babel/preset-typescript': - specifier: ^7.24.7 + specifier: ^7.26.0 version: 7.26.0(@babel/core@7.26.0) '@changesets/cli': - specifier: ^2.27.8 + specifier: ^2.27.9 version: 2.27.9 '@swc/jest': - specifier: ^0.2.36 - version: 0.2.37(@swc/core@1.4.2(@swc/helpers@0.5.1)) + specifier: ^0.2.37 + version: 0.2.37(@swc/core@1.9.2) '@testing-library/jest-dom': specifier: ^5.17.0 version: 5.17.0 '@testing-library/react-hooks': specifier: ^7.0.2 - version: 7.0.2(react-dom@18.3.1(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.0.2(react@18.3.1) '@types/enzyme': specifier: ^3.10.18 version: 3.10.18 @@ -75,7 +71,7 @@ importers: version: 2.14.1 babel-loader: specifier: ^8.4.1 - version: 8.4.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) + version: 8.4.1(@babel/core@7.26.0)(webpack@5.96.1) babel-plugin-named-asset-import: specifier: ^0.3.8 version: 0.3.8(@babel/core@7.26.0) @@ -96,7 +92,7 @@ importers: version: 7.0.3 css-loader: specifier: ^6.11.0 - version: 6.11.0(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) + version: 6.11.0(webpack@5.96.1) ejs: specifier: ^3.1.10 version: 3.1.10 @@ -132,7 +128,7 @@ importers: version: 4.2.0 less-loader: specifier: ^10.2.0 - version: 10.2.0(less@4.2.0)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) + version: 10.2.0(less@4.2.0)(webpack@5.96.1) np: specifier: ^10.0.7 version: 10.0.7(typescript@5.6.3) @@ -146,32 +142,32 @@ importers: specifier: ^4.1.0 version: 4.1.0(prettier@2.8.8)(typescript@5.6.3) prettier-plugin-packagejson: - specifier: ^2.5.2 + specifier: ^2.5.3 version: 2.5.3(prettier@2.8.8) pretty-quick: specifier: ^3.3.1 version: 3.3.1(prettier@2.8.8) react-dev-utils: specifier: ^12.0.1 - version: 12.0.1(eslint@7.32.0)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) + version: 12.0.1(eslint@7.32.0)(typescript@5.6.3)(webpack@5.96.1) rimraf: specifier: ^3.0.2 version: 3.0.2 style-loader: specifier: ^3.3.4 - version: 3.3.4(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) + version: 3.3.4(webpack@5.96.1) ts-loader: specifier: ^9.5.1 - version: 9.5.1(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) + version: 9.5.1(typescript@5.6.3)(webpack@5.96.1) typescript: - specifier: ^5.6.2 + specifier: ^5.6.3 version: 5.6.3 vfile-reporter: specifier: ^7.0.5 version: 7.0.5 webpack: - specifier: ^5.94.0 - version: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) + specifier: ^5.96.1 + version: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) webpack-bundle-analyzer: specifier: ^4.10.2 version: 4.10.2 @@ -191,11 +187,11 @@ importers: packages/charts: dependencies: '@ant-design/graphs': - specifier: ^2.0.0 - version: 2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))) + specifier: workspace:^ + version: link:../graphs '@ant-design/plots': - specifier: ^2.1.3 - version: 2.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: workspace:^ + version: link:../plots lodash: specifier: ^4.17.21 version: 4.17.21 @@ -212,14 +208,14 @@ importers: specifier: workspace:* version: link:../util '@antv/g6': - specifier: ^5.0.24 - version: 5.0.29(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))) + specifier: ^5.0.30 + version: 5.0.30(workerize-loader@2.0.2) '@antv/g6-extension-react': specifier: ^0.1.7 - version: 0.1.7(@antv/g6@5.0.29(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 0.1.7(@antv/g6@5.0.30)(react-dom@18.3.1)(react@18.3.1) '@antv/graphin': - specifier: ^3.0.2 - version: 3.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))) + specifier: ^3.0.4 + version: 3.0.4(react-dom@18.3.1)(react@18.3.1)(workerize-loader@2.0.2) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -231,29 +227,29 @@ importers: version: 18.3.1(react@18.3.1) styled-components: specifier: ^6.1.13 - version: 6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 6.1.13(react-dom@18.3.1)(react@18.3.1) devDependencies: '@antv/algorithm': specifier: ^0.1.26 version: 0.1.26 '@types/jest': - specifier: ^26.0.0 + specifier: ^26.0.24 version: 26.0.24 '@types/lodash': - specifier: ^4.17.7 + specifier: ^4.17.13 version: 4.17.13 antd: - specifier: ^5.20.5 - version: 5.22.0(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^5.22.0 + version: 5.22.0(react-dom@18.3.1)(react@18.3.1) react-router-dom: - specifier: ^6.26.1 - version: 6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^6.28.0 + version: 6.28.0(react-dom@18.3.1)(react@18.3.1) tsconfig-paths-webpack-plugin: specifier: ^4.1.0 version: 4.1.0 vite: - specifier: ^5.4.3 - version: 5.4.11(@types/node@14.18.63)(less@4.2.0)(lightningcss@1.22.1)(sass@1.80.6)(sugarss@2.0.0)(terser@5.36.0) + specifier: ^5.4.11 + version: 5.4.11(@types/node@14.18.63)(less@4.2.0) packages/plots: dependencies: @@ -264,13 +260,13 @@ importers: specifier: ^0.1.3 version: 0.1.3 '@antv/g': - specifier: ^6.0.0 + specifier: ^6.1.7 version: 6.1.7 '@antv/g2': - specifier: ^5.1.18 + specifier: ^5.2.7 version: 5.2.7 '@antv/g2-extension-plot': - specifier: ^0.2.0 + specifier: ^0.2.1 version: 0.2.1 lodash: specifier: ^4.17.21 @@ -283,16 +279,16 @@ importers: version: 18.3.1(react@18.3.1) devDependencies: '@types/jest': - specifier: ^26.0.0 + specifier: ^26.0.24 version: 26.0.24 '@types/react': - specifier: ^18.0.0 + specifier: ^18.3.12 version: 18.3.12 '@types/react-dom': - specifier: ^18.0.6 + specifier: ^18.3.1 version: 18.3.1 react-test-renderer: - specifier: ^18.0.0 + specifier: ^18.3.1 version: 18.3.1(react@18.3.1) packages/util: @@ -308,13 +304,13 @@ importers: version: 18.3.1(react@18.3.1) devDependencies: '@types/jest': - specifier: ^26.0.0 + specifier: ^26.0.24 version: 26.0.24 '@types/react': - specifier: ^18.0.0 + specifier: ^18.3.12 version: 18.3.12 '@types/react-dom': - specifier: ^18.0.6 + specifier: ^18.3.1 version: 18.3.1 site: @@ -326,8 +322,8 @@ importers: specifier: workspace:* version: link:../packages/plots antd: - specifier: ^5.20.5 - version: 5.22.0(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^5.22.0 + version: 5.22.0(react-dom@18.3.1)(react@18.3.1) insert-css: specifier: ^2.0.0 version: 2.0.0 @@ -336,7 +332,7 @@ importers: version: 4.17.21 rc-util: specifier: ^5.43.0 - version: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: specifier: ^18.0.1 version: 18.3.1 @@ -345,19 +341,19 @@ importers: version: 18.3.1(react@18.3.1) styled-components: specifier: ^6.1.13 - version: 6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 6.1.13(react-dom@18.3.1)(react@18.3.1) devDependencies: '@antv/dumi-theme-antv': specifier: ^0.5.3 - version: 0.5.3(@algolia/client-search@5.13.0)(@babel/core@7.23.6)(@types/react@16.14.62)(dumi@2.4.13(@babel/core@7.23.6)(@swc/helpers@0.5.1)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.25.0)(stylelint@13.13.1)(sugarss@2.0.0)(terser@5.36.0)(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(jquery@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2) + version: 0.5.3(@algolia/client-search@5.13.0)(@babel/core@7.26.0)(@types/react@16.14.62)(dumi@2.4.13)(jquery@3.7.1)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2) '@types/lodash': - specifier: ^4.17.7 + specifier: ^4.17.13 version: 4.17.13 '@types/react': - specifier: ^16.14.8 + specifier: ^16.14.62 version: 16.14.62 '@types/react-dom': - specifier: ^16.9.13 + specifier: ^16.9.24 version: 16.9.24 '@types/styled-components': specifier: ^5.1.34 @@ -372,13142 +368,550 @@ importers: specifier: ^1.3.10 version: 1.3.10 dumi: - specifier: ^2.1.14 - version: 2.4.13(@babel/core@7.23.6)(@swc/helpers@0.5.1)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.25.0)(stylelint@13.13.1)(sugarss@2.0.0)(terser@5.36.0)(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) + specifier: ^2.4.13 + version: 2.4.13(@babel/core@7.26.0)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(prettier@2.8.8)(react-dom@18.3.1)(react@18.3.1)(stylelint@14.16.1)(typescript@3.9.10)(webpack-dev-server@5.1.0)(webpack@5.96.1) fecha: specifier: ^4.2.3 version: 4.2.3 gh-pages: - specifier: ^2.1.1 + specifier: ^2.2.0 version: 2.2.0 typedoc: - specifier: ^0.17.6 + specifier: ^0.17.8 version: 0.17.8(typescript@3.9.10) typedoc-plugin-markdown: - specifier: ^2.2.11 - version: 2.4.2(typedoc@0.17.8(typescript@3.9.10)) + specifier: ^2.4.2 + version: 2.4.2(typedoc@0.17.8) typescript: - specifier: ^3.6.5 + specifier: ^3.9.10 version: 3.9.10 packages: - '@adobe/css-tools@4.4.0': - resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==, tarball: https://registry.npmmirror.com/@adobe/css-tools/-/css-tools-4.4.0.tgz} + /@adobe/css-tools@4.4.0: + resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==} + dev: true - '@algolia/autocomplete-core@1.17.6': - resolution: {integrity: sha512-lkDoW4I7h2kKlIgf3pUt1LqvxyYKkVyiypoGLlUnhPSnCpmeOwudM6rNq6YYsCmdQtnDQoW5lUNNuj6ASg3qeg==, tarball: https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.17.6.tgz} + /@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2): + resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: true - '@algolia/autocomplete-plugin-algolia-insights@1.17.6': - resolution: {integrity: sha512-17NnaacuFzSWVuZu4NKzVeaFIe9Abpw8w+/gjc7xhZFtqj+GadufzodIdchwiB2eM2cDdiR3icW7gbNTB3K2YA==, tarball: https://registry.npmmirror.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.6.tgz} + /@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2): + resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} peerDependencies: search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) + search-insights: 2.17.2 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: true - '@algolia/autocomplete-preset-algolia@1.17.6': - resolution: {integrity: sha512-Cvg5JENdSCMuClwhJ1ON1/jSuojaYMiUW2KePm18IkdCzPJj/NXojaOxw58RFtQFpJgfVW8h2E8mEoDtLlMdeA==, tarball: https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.6.tgz} + /@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0): + resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) + '@algolia/client-search': 5.13.0 + algoliasearch: 5.13.0 + dev: true - '@algolia/autocomplete-shared@1.17.6': - resolution: {integrity: sha512-aq/3V9E00Tw2GC/PqgyPGXtqJUlVc17v4cn1EUhSc+O/4zd04Uwb3UmPm8KDaYQQOrkt1lwvCj2vG2wRE5IKhw==, tarball: https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.6.tgz} + /@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0): + resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 5.13.0 + algoliasearch: 5.13.0 + dev: true - '@algolia/client-abtesting@5.13.0': - resolution: {integrity: sha512-6CoQjlMi1pmQYMQO8tXfuGxSPf6iKX5FP9MuMe6IWmvC81wwTvOehnwchyBl2wuPVhcw2Ar53K53mQ60DAC64g==, tarball: https://registry.npmmirror.com/@algolia/client-abtesting/-/client-abtesting-5.13.0.tgz} + /@algolia/client-abtesting@5.13.0: + resolution: {integrity: sha512-6CoQjlMi1pmQYMQO8tXfuGxSPf6iKX5FP9MuMe6IWmvC81wwTvOehnwchyBl2wuPVhcw2Ar53K53mQ60DAC64g==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 + dev: true - '@algolia/client-analytics@5.13.0': - resolution: {integrity: sha512-pS3qyXiWTwKnrt/jE79fqkNqZp7kjsFNlJDcBGkSWid74DNc6DmArlkvPqyLxnoaYGjUGACT6g56n7E3mVV2TA==, tarball: https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-5.13.0.tgz} + /@algolia/client-analytics@5.13.0: + resolution: {integrity: sha512-pS3qyXiWTwKnrt/jE79fqkNqZp7kjsFNlJDcBGkSWid74DNc6DmArlkvPqyLxnoaYGjUGACT6g56n7E3mVV2TA==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 + dev: true - '@algolia/client-common@5.13.0': - resolution: {integrity: sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==, tarball: https://registry.npmmirror.com/@algolia/client-common/-/client-common-5.13.0.tgz} + /@algolia/client-common@5.13.0: + resolution: {integrity: sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==} engines: {node: '>= 14.0.0'} + dev: true - '@algolia/client-insights@5.13.0': - resolution: {integrity: sha512-ldHTe+LVgC6L4Wr6doAQQ7Ku0jAdhaaPg1T+IHzmmiRZb2Uq5OsjW2yC65JifOmzPCiMkIZE2mGRpWgkn5ktlw==, tarball: https://registry.npmmirror.com/@algolia/client-insights/-/client-insights-5.13.0.tgz} + /@algolia/client-insights@5.13.0: + resolution: {integrity: sha512-ldHTe+LVgC6L4Wr6doAQQ7Ku0jAdhaaPg1T+IHzmmiRZb2Uq5OsjW2yC65JifOmzPCiMkIZE2mGRpWgkn5ktlw==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 + dev: true - '@algolia/client-personalization@5.13.0': - resolution: {integrity: sha512-RnCfOSN4OUJDuMNHFca2M8lY64Tmw0kQOZikge4TknTqHmlbKJb8IbJE7Rol79Z80W2Y+B1ydcjV7DPje4GMRA==, tarball: https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-5.13.0.tgz} + /@algolia/client-personalization@5.13.0: + resolution: {integrity: sha512-RnCfOSN4OUJDuMNHFca2M8lY64Tmw0kQOZikge4TknTqHmlbKJb8IbJE7Rol79Z80W2Y+B1ydcjV7DPje4GMRA==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 + dev: true - '@algolia/client-query-suggestions@5.13.0': - resolution: {integrity: sha512-pYo0jbLUtPDN1r341UHTaF2fgN5rbaZfDZqjPRKPM+FRlRmxFxqFQm1UUfpkSUWYGn7lECwDpbKYiKUf81MTwA==, tarball: https://registry.npmmirror.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.13.0.tgz} + /@algolia/client-query-suggestions@5.13.0: + resolution: {integrity: sha512-pYo0jbLUtPDN1r341UHTaF2fgN5rbaZfDZqjPRKPM+FRlRmxFxqFQm1UUfpkSUWYGn7lECwDpbKYiKUf81MTwA==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 + dev: true - '@algolia/client-search@5.13.0': - resolution: {integrity: sha512-s2ge3uZ6Zg2sPSFibqijgEYsuorxcc8KVHg3I95nOPHvFHdnBtSHymhZvq4sp/fu8ijt/Y8jLwkuqm5myn+2Sg==, tarball: https://registry.npmmirror.com/@algolia/client-search/-/client-search-5.13.0.tgz} + /@algolia/client-search@5.13.0: + resolution: {integrity: sha512-s2ge3uZ6Zg2sPSFibqijgEYsuorxcc8KVHg3I95nOPHvFHdnBtSHymhZvq4sp/fu8ijt/Y8jLwkuqm5myn+2Sg==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 + dev: true - '@algolia/ingestion@1.13.0': - resolution: {integrity: sha512-fm5LEOe4FPDOc1D+M9stEs8hfcdmbdD+pt9og5shql6ueTZJANDbFoQhDOpiPJizR/ps1GwmjkWfUEywx3sV+Q==, tarball: https://registry.npmmirror.com/@algolia/ingestion/-/ingestion-1.13.0.tgz} + /@algolia/ingestion@1.13.0: + resolution: {integrity: sha512-fm5LEOe4FPDOc1D+M9stEs8hfcdmbdD+pt9og5shql6ueTZJANDbFoQhDOpiPJizR/ps1GwmjkWfUEywx3sV+Q==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 + dev: true - '@algolia/monitoring@1.13.0': - resolution: {integrity: sha512-e8Hshlnm2G5fapyUgWTBwhJ22yXcnLtPC4LWZKx7KOvv35GcdoHtlUBX94I/sWCJLraUr65JvR8qOo3LXC43dg==, tarball: https://registry.npmmirror.com/@algolia/monitoring/-/monitoring-1.13.0.tgz} + /@algolia/monitoring@1.13.0: + resolution: {integrity: sha512-e8Hshlnm2G5fapyUgWTBwhJ22yXcnLtPC4LWZKx7KOvv35GcdoHtlUBX94I/sWCJLraUr65JvR8qOo3LXC43dg==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 + dev: true - '@algolia/recommend@5.13.0': - resolution: {integrity: sha512-53/wW96oaj1FKMzGdFcZ/epygfTppLDUvgI1thLkd475EtVZCH3ZZVUNCEvf1AtnNyH1RnItkFzX8ayWCpx2PQ==, tarball: https://registry.npmmirror.com/@algolia/recommend/-/recommend-5.13.0.tgz} + /@algolia/recommend@5.13.0: + resolution: {integrity: sha512-53/wW96oaj1FKMzGdFcZ/epygfTppLDUvgI1thLkd475EtVZCH3ZZVUNCEvf1AtnNyH1RnItkFzX8ayWCpx2PQ==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 + dev: true - '@algolia/requester-browser-xhr@5.13.0': - resolution: {integrity: sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==, tarball: https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.13.0.tgz} + /@algolia/requester-browser-xhr@5.13.0: + resolution: {integrity: sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + dev: true - '@algolia/requester-fetch@5.13.0': - resolution: {integrity: sha512-094bK4rumf+rXJazxv3mq6eKRM0ep5AxIo8T0YmOdldswQt79apeufFiPLN19nHEWH22xR2FelimD+T/wRSP+Q==, tarball: https://registry.npmmirror.com/@algolia/requester-fetch/-/requester-fetch-5.13.0.tgz} + /@algolia/requester-fetch@5.13.0: + resolution: {integrity: sha512-094bK4rumf+rXJazxv3mq6eKRM0ep5AxIo8T0YmOdldswQt79apeufFiPLN19nHEWH22xR2FelimD+T/wRSP+Q==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + dev: true - '@algolia/requester-node-http@5.13.0': - resolution: {integrity: sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==, tarball: https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-5.13.0.tgz} + /@algolia/requester-node-http@5.13.0: + resolution: {integrity: sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.13.0 + dev: true - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==, tarball: https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: true - '@ant-design/charts-util@0.0.1-alpha.6': - resolution: {integrity: sha512-roZobGkUJ0WqULPiQkX/2j01r6Cn0W6WTVpszq9u8dZKwyrSDr+UgfA/hDmrwOm9TWD9HAxe7aRHnvC06dux8w==, tarball: https://registry.npmmirror.com/@ant-design/charts-util/-/charts-util-0.0.1-alpha.6.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@ant-design/charts-util@0.0.1-alpha.7': - resolution: {integrity: sha512-Yh0o6EdO6SvdSnStFZMbnUzjyymkVzV+TQ9ymVW9hlVgO/fUkUII3JYSdV+UVcFnYwUF0YiDKuSTLCZNAzg2bQ==, tarball: https://registry.npmmirror.com/@ant-design/charts-util/-/charts-util-0.0.1-alpha.7.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@ant-design/colors@6.0.0': - resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==, tarball: https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz} + /@ant-design/colors@6.0.0: + resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==} + dependencies: + '@ctrl/tinycolor': 3.6.1 + dev: true - '@ant-design/colors@7.1.0': - resolution: {integrity: sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg==, tarball: https://registry.npmmirror.com/@ant-design/colors/-/colors-7.1.0.tgz} + /@ant-design/colors@7.1.0: + resolution: {integrity: sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg==} + dependencies: + '@ctrl/tinycolor': 3.6.1 - '@ant-design/cssinjs-utils@1.1.1': - resolution: {integrity: sha512-2HAiyGGGnM0es40SxdszeQAU5iWp41wBIInq+ONTCKjlSKOrzQfnw4JDtB8IBmqE6tQaEKwmzTP2LGdt5DSwYQ==, tarball: https://registry.npmmirror.com/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.1.tgz} + /@ant-design/cssinjs-utils@1.1.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-2HAiyGGGnM0es40SxdszeQAU5iWp41wBIInq+ONTCKjlSKOrzQfnw4JDtB8IBmqE6tQaEKwmzTP2LGdt5DSwYQ==} peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@ant-design/cssinjs': 1.21.1(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.0 + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@ant-design/cssinjs@1.21.1': - resolution: {integrity: sha512-tyWnlK+XH7Bumd0byfbCiZNK43HEubMoCcu9VxwsAwiHdHTgWa+tMN0/yvxa+e8EzuFP1WdUNNPclRpVtD33lg==, tarball: https://registry.npmmirror.com/@ant-design/cssinjs/-/cssinjs-1.21.1.tgz} + /@ant-design/cssinjs@1.21.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-tyWnlK+XH7Bumd0byfbCiZNK43HEubMoCcu9VxwsAwiHdHTgWa+tMN0/yvxa+e8EzuFP1WdUNNPclRpVtD33lg==} peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 + react: '>=16.0.0' + react-dom: '>=16.0.0' + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/hash': 0.8.0 + '@emotion/unitless': 0.7.5 + classnames: 2.5.1 + csstype: 3.1.3 + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + stylis: 4.3.4 - '@ant-design/fast-color@2.0.6': - resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==, tarball: https://registry.npmmirror.com/@ant-design/fast-color/-/fast-color-2.0.6.tgz} + /@ant-design/fast-color@2.0.6: + resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} engines: {node: '>=8.x'} + dependencies: + '@babel/runtime': 7.26.0 - '@ant-design/graphs@2.0.0': - resolution: {integrity: sha512-giwe60AHwcQp5mXKQrsDU2/34cKOJQoc4rYPB9N1CqaGFcEWqOi6Kiz7O9s0QRwPBpzyP/boyP01a9qb03ycKw==, tarball: https://registry.npmmirror.com/@ant-design/graphs/-/graphs-2.0.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@ant-design/icons-svg@4.4.2': - resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==, tarball: https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz} + /@ant-design/icons-svg@4.4.2: + resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} - '@ant-design/icons@4.8.3': - resolution: {integrity: sha512-HGlIQZzrEbAhpJR6+IGdzfbPym94Owr6JZkJ2QCCnOkPVIWMO2xgIVcOKnl8YcpijIo39V7l2qQL5fmtw56cMw==, tarball: https://registry.npmmirror.com/@ant-design/icons/-/icons-4.8.3.tgz} + /@ant-design/icons@4.8.3(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-HGlIQZzrEbAhpJR6+IGdzfbPym94Owr6JZkJ2QCCnOkPVIWMO2xgIVcOKnl8YcpijIo39V7l2qQL5fmtw56cMw==} engines: {node: '>=8'} peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 + react: '>=16.0.0' + react-dom: '>=16.0.0' + dependencies: + '@ant-design/colors': 6.0.0 + '@ant-design/icons-svg': 4.4.2 + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + lodash: 4.17.21 + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: true - '@ant-design/icons@5.5.1': - resolution: {integrity: sha512-0UrM02MA2iDIgvLatWrj6YTCYe0F/cwXvVE0E2SqGrL7PZireQwgEKTKBisWpZyal5eXZLvuM98kju6YtYne8w==, tarball: https://registry.npmmirror.com/@ant-design/icons/-/icons-5.5.1.tgz} + /@ant-design/icons@5.5.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-0UrM02MA2iDIgvLatWrj6YTCYe0F/cwXvVE0E2SqGrL7PZireQwgEKTKBisWpZyal5eXZLvuM98kju6YtYne8w==} engines: {node: '>=8'} peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@ant-design/plots@2.3.2': - resolution: {integrity: sha512-shFV2DTQcbQDtzBwpMagG2pnKy3+I4igws6VQvM7m8UIZtWFSwkWpjCnOl7Xefqgnov/M0C9HbaVGCGc9ZfIqA==, tarball: https://registry.npmmirror.com/@ant-design/plots/-/plots-2.3.2.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 + react: '>=16.0.0' + react-dom: '>=16.0.0' + dependencies: + '@ant-design/colors': 7.1.0 + '@ant-design/icons-svg': 4.4.2 + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@ant-design/react-slick@1.0.2': - resolution: {integrity: sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==, tarball: https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-1.0.2.tgz} + /@ant-design/react-slick@1.0.2(react@18.3.1): + resolution: {integrity: sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==} peerDependencies: - react: ^18.0.1 + react: '>=16.9.0' + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + json2mq: 0.2.0 + react: 18.3.1 + resize-observer-polyfill: 1.5.1 + throttle-debounce: 5.0.2 + dev: true - '@ant-design/react-slick@1.1.2': - resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==, tarball: https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-1.1.2.tgz} + /@ant-design/react-slick@1.1.2(react@18.3.1): + resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} peerDependencies: - react: ^18.0.1 + react: '>=16.9.0' + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + json2mq: 0.2.0 + react: 18.3.1 + resize-observer-polyfill: 1.5.1 + throttle-debounce: 5.0.2 - '@antfu/install-pkg@0.1.1': - resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==, tarball: https://registry.npmmirror.com/@antfu/install-pkg/-/install-pkg-0.1.1.tgz} + /@antfu/install-pkg@0.1.1: + resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} + dependencies: + execa: 5.1.1 + find-up: 5.0.0 + dev: true - '@antfu/utils@0.7.10': - resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==, tarball: https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz} + /@antfu/utils@0.7.10: + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + dev: true - '@antv/algorithm@0.1.26': - resolution: {integrity: sha512-DVhcFSQ8YQnMNW34Mk8BSsfc61iC1sAnmcfYoXTAshYHuU50p/6b7x3QYaGctDNKWGvi1ub7mPcSY0bK+aN0qg==, tarball: https://registry.npmmirror.com/@antv/algorithm/-/algorithm-0.1.26.tgz} + /@antv/algorithm@0.1.26: + resolution: {integrity: sha512-DVhcFSQ8YQnMNW34Mk8BSsfc61iC1sAnmcfYoXTAshYHuU50p/6b7x3QYaGctDNKWGvi1ub7mPcSY0bK+aN0qg==} + dependencies: + '@antv/util': 2.0.17 + tslib: 2.6.1 - '@antv/component@2.1.1': - resolution: {integrity: sha512-V0UCq3Bekqtjw5WedexT1tHM/9x5BY0UAaU7G/5A2NhRfp9GuaQ8xGWLMSWlCQiJSRZWhPIA7RoOSw4Y/W+7UA==, tarball: https://registry.npmmirror.com/@antv/component/-/component-2.1.1.tgz} + /@antv/component@2.1.1: + resolution: {integrity: sha512-V0UCq3Bekqtjw5WedexT1tHM/9x5BY0UAaU7G/5A2NhRfp9GuaQ8xGWLMSWlCQiJSRZWhPIA7RoOSw4Y/W+7UA==} + dependencies: + '@antv/g': 6.1.7 + '@antv/scale': 0.4.16 + '@antv/util': 3.3.10 + svg-path-parser: 1.1.0 + dev: false - '@antv/coord@0.4.7': - resolution: {integrity: sha512-UTbrMLhwJUkKzqJx5KFnSRpU3BqrdLORJbwUbHK2zHSCT3q3bjcFA//ZYLVfIlwqFDXp/hzfMyRtp0c77A9ZVA==, tarball: https://registry.npmmirror.com/@antv/coord/-/coord-0.4.7.tgz} + /@antv/coord@0.4.7: + resolution: {integrity: sha512-UTbrMLhwJUkKzqJx5KFnSRpU3BqrdLORJbwUbHK2zHSCT3q3bjcFA//ZYLVfIlwqFDXp/hzfMyRtp0c77A9ZVA==} + dependencies: + '@antv/scale': 0.4.16 + '@antv/util': 2.0.17 + gl-matrix: 3.4.3 + dev: false - '@antv/dumi-theme-antv@0.5.3': - resolution: {integrity: sha512-RVxHIKjjmGRfQm7zcbTueqP8SzWLq/uuBwSliOkhNTRnbgmzRpAMf8WfpmnIR+5wmoxBxTXDGxTBYN3ik9wW+w==, tarball: https://registry.npmmirror.com/@antv/dumi-theme-antv/-/dumi-theme-antv-0.5.3.tgz} + /@antv/dumi-theme-antv@0.5.3(@algolia/client-search@5.13.0)(@babel/core@7.26.0)(@types/react@16.14.62)(dumi@2.4.13)(jquery@3.7.1)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2): + resolution: {integrity: sha512-RVxHIKjjmGRfQm7zcbTueqP8SzWLq/uuBwSliOkhNTRnbgmzRpAMf8WfpmnIR+5wmoxBxTXDGxTBYN3ik9wW+w==} peerDependencies: dumi: ^2.0.0 - react: ^18.0.1 - react-dom: ^18.0.1 - - '@antv/event-emitter@0.1.3': - resolution: {integrity: sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==, tarball: https://registry.npmmirror.com/@antv/event-emitter/-/event-emitter-0.1.3.tgz} - - '@antv/g-camera-api@2.0.21': - resolution: {integrity: sha512-cU903cmIBEyVX6hk7bmoltnnORnRd+KnRQsFzWv+Gg8l99bVOEqVa6/YE+Geh9Gt0JVUr+k06KVs8V40IVkz5Q==, tarball: https://registry.npmmirror.com/@antv/g-camera-api/-/g-camera-api-2.0.21.tgz} - - '@antv/g-canvas@2.0.24': - resolution: {integrity: sha512-wXEU+8opR6pQ/NLbcsx2Mz90vDd44GSgSP4/G9lmda9xzoNNzWVge8aRlDf/bK8r0N7oN8xsdaXE9bN8YQtCUw==, tarball: https://registry.npmmirror.com/@antv/g-canvas/-/g-canvas-2.0.24.tgz} - - '@antv/g-dom-mutation-observer-api@2.0.18': - resolution: {integrity: sha512-LOriTfw9iSJVQv24VpBKnwWTy2Axv1JxnOpfC6siV8M1D+5cfv+fBmWs6cIQKxM9p7RZSkpaYFQWM27+sH0AvA==, tarball: https://registry.npmmirror.com/@antv/g-dom-mutation-observer-api/-/g-dom-mutation-observer-api-2.0.18.tgz} + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@ant-design/icons': 4.8.3(react-dom@18.3.1)(react@18.3.1) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) + '@babel/standalone': 7.26.2 + '@docsearch/css': 3.8.0 + '@docsearch/react': 3.8.0(@algolia/client-search@5.13.0)(@types/react@16.14.62)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2) + '@monaco-editor/react': 4.6.0(monaco-editor@0.25.2)(react-dom@18.3.1)(react@18.3.1) + '@stackblitz/sdk': 1.11.0 + antd: 4.24.16(react-dom@18.3.1)(react@18.3.1) + classnames: 2.5.1 + codesandbox: 2.2.3 + d3-dsv: 3.0.1 + docsearch.js: 2.6.3 + dumi: 2.4.13(@babel/core@7.26.0)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(prettier@2.8.8)(react-dom@18.3.1)(react@18.3.1)(stylelint@14.16.1)(typescript@3.9.10)(webpack-dev-server@5.1.0)(webpack@5.96.1) + front-matter: 4.0.2 + fs-extra: 10.1.0 + glob: 8.1.0 + hast: 1.0.0 + indent-string: 5.0.0 + insert-css: 2.0.0 + lodash-es: 4.17.21 + monaco-editor: 0.25.2 + parse-github-url: 1.0.3 + prettier: 2.8.8 + rc-drawer: 4.4.3(react-dom@18.3.1)(react@18.3.1) + rc-footer: 0.6.8(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-error-boundary: 3.1.4(react@18.3.1) + react-github-button: 0.1.11 + react-helmet: 6.1.0(react@18.3.1) + react-markdown: 9.0.1(@types/react@16.14.62)(react@18.3.1) + react-router-dom: 6.28.0(react-dom@18.3.1)(react@18.3.1) + react-slick: 0.29.0(react-dom@18.3.1)(react@18.3.1) + react-split-pane: 0.1.92(react-dom@18.3.1)(react@18.3.1) + react-use: 17.5.1(react-dom@18.3.1)(react@18.3.1) + reading-time: 1.5.0 + rehype-raw: 7.0.0 + remark-gfm: 4.0.0 + semver: 7.6.3 + size-sensor: 1.0.2 + slick-carousel: 1.8.1(jquery@3.7.1) + unified: 10.1.2 + unist-util-visit: 4.1.2 + uri-parse: 1.0.0 + valtio: 1.13.2(@types/react@16.14.62)(react@18.3.1) + video-react: 0.16.0(react-dom@18.3.1)(react@18.3.1) + transitivePeerDependencies: + - '@algolia/client-search' + - '@babel/core' + - '@types/react' + - jquery + - search-insights + - supports-color + dev: true - '@antv/g-lite@2.2.2': - resolution: {integrity: sha512-Ffk7Jar+n6lUA+TEvoEaN30rAWe5l6Ybic7lucA90PKiyCsN0w+qVGJzbvskamuwp3RmcSZDNwQGP8vg374dCA==, tarball: https://registry.npmmirror.com/@antv/g-lite/-/g-lite-2.2.2.tgz} + /@antv/event-emitter@0.1.3: + resolution: {integrity: sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==} + dev: false - '@antv/g-math@3.0.0': - resolution: {integrity: sha512-AkmiNIEL1vgqTPeGY2wtsMdBBqKFwF7SKSgs+D1iOS/rqYMsXdhp/HvtuQ5tx/HdawE/ZzTiicIYopc520ADZw==, tarball: https://registry.npmmirror.com/@antv/g-math/-/g-math-3.0.0.tgz} + /@antv/g-camera-api@2.0.21: + resolution: {integrity: sha512-cU903cmIBEyVX6hk7bmoltnnORnRd+KnRQsFzWv+Gg8l99bVOEqVa6/YE+Geh9Gt0JVUr+k06KVs8V40IVkz5Q==} + dependencies: + '@antv/g-lite': 2.2.2 + '@antv/util': 3.3.10 + '@babel/runtime': 7.26.0 + gl-matrix: 3.4.3 + tslib: 2.6.1 + dev: false - '@antv/g-plugin-canvas-path-generator@2.1.2': - resolution: {integrity: sha512-ILaKEQvbAZNkRhbE3kWxd0EszDAb3TE0HQKNfur7YuVkQMgACDj6jbVUULFPcGpcw/pQbWM8nD1RRf24hfFAlw==, tarball: https://registry.npmmirror.com/@antv/g-plugin-canvas-path-generator/-/g-plugin-canvas-path-generator-2.1.2.tgz} + /@antv/g-canvas@2.0.24: + resolution: {integrity: sha512-wXEU+8opR6pQ/NLbcsx2Mz90vDd44GSgSP4/G9lmda9xzoNNzWVge8aRlDf/bK8r0N7oN8xsdaXE9bN8YQtCUw==} + dependencies: + '@antv/g-lite': 2.2.2 + '@antv/g-plugin-canvas-path-generator': 2.1.2 + '@antv/g-plugin-canvas-picker': 2.1.3 + '@antv/g-plugin-canvas-renderer': 2.2.3 + '@antv/g-plugin-dom-interaction': 2.1.7 + '@antv/g-plugin-html-renderer': 2.1.7 + '@antv/g-plugin-image-loader': 2.1.3 + '@antv/util': 3.3.10 + '@babel/runtime': 7.26.0 + tslib: 2.6.1 + dev: false - '@antv/g-plugin-canvas-picker@2.1.3': - resolution: {integrity: sha512-HGb4DFknjZKDfXThKxEd9rW0DvbuOl7l7z/rybJ75TW2r+tk1EEDMQZepui4mSCKiewd+Zn03kbc5VytRQ1qTA==, tarball: https://registry.npmmirror.com/@antv/g-plugin-canvas-picker/-/g-plugin-canvas-picker-2.1.3.tgz} + /@antv/g-dom-mutation-observer-api@2.0.18: + resolution: {integrity: sha512-LOriTfw9iSJVQv24VpBKnwWTy2Axv1JxnOpfC6siV8M1D+5cfv+fBmWs6cIQKxM9p7RZSkpaYFQWM27+sH0AvA==} + dependencies: + '@antv/g-lite': 2.2.2 + '@babel/runtime': 7.26.0 + dev: false - '@antv/g-plugin-canvas-renderer@2.2.3': - resolution: {integrity: sha512-aTr1hLVGNxu79M4HoBO0ookBJ21PGVk/T/BZK2tqGbohn3vyZtWi90VS3bXMU34m6p6vfIlDa6th1UGFbs48vQ==, tarball: https://registry.npmmirror.com/@antv/g-plugin-canvas-renderer/-/g-plugin-canvas-renderer-2.2.3.tgz} + /@antv/g-lite@2.2.2: + resolution: {integrity: sha512-Ffk7Jar+n6lUA+TEvoEaN30rAWe5l6Ybic7lucA90PKiyCsN0w+qVGJzbvskamuwp3RmcSZDNwQGP8vg374dCA==} + dependencies: + '@antv/g-math': 3.0.0 + '@antv/util': 3.3.10 + '@babel/runtime': 7.26.0 + d3-color: 3.1.0 + eventemitter3: 5.0.1 + gl-matrix: 3.4.3 + rbush: 3.0.1 + tslib: 2.6.1 + dev: false - '@antv/g-plugin-dom-interaction@2.1.7': - resolution: {integrity: sha512-wrlcFlWsXq9Pa6ju5de8V0TzIR2GivBOkRyHQuNba6kpUC1RAT0EHpTpPCJML+Jys8nt8A0ppssSF4E0jZ1MpQ==, tarball: https://registry.npmmirror.com/@antv/g-plugin-dom-interaction/-/g-plugin-dom-interaction-2.1.7.tgz} + /@antv/g-math@3.0.0: + resolution: {integrity: sha512-AkmiNIEL1vgqTPeGY2wtsMdBBqKFwF7SKSgs+D1iOS/rqYMsXdhp/HvtuQ5tx/HdawE/ZzTiicIYopc520ADZw==} + dependencies: + '@antv/util': 3.3.10 + gl-matrix: 3.4.3 + tslib: 2.6.1 + dev: false - '@antv/g-plugin-dragndrop@2.0.18': - resolution: {integrity: sha512-kjRj/yoWXh5J0Db/gtB3TFNlR4x3dMWvlRz6+7M3ka/mlrdMS0SGFLZfbWq6xvN+TzyiDXZdzSwA0A0OkA5Jww==, tarball: https://registry.npmmirror.com/@antv/g-plugin-dragndrop/-/g-plugin-dragndrop-2.0.18.tgz} + /@antv/g-plugin-canvas-path-generator@2.1.2: + resolution: {integrity: sha512-ILaKEQvbAZNkRhbE3kWxd0EszDAb3TE0HQKNfur7YuVkQMgACDj6jbVUULFPcGpcw/pQbWM8nD1RRf24hfFAlw==} + dependencies: + '@antv/g-lite': 2.2.2 + '@antv/g-math': 3.0.0 + '@antv/util': 3.3.10 + '@babel/runtime': 7.26.0 + tslib: 2.6.1 + dev: false - '@antv/g-plugin-html-renderer@2.1.7': - resolution: {integrity: sha512-MPquXo9MT9QHUdbvgwcBr9msNv9Qh2slOKpc1fzwWG7/aLpmOAxTAhd3+Sjj8JuVXHYw25Q3seI8lMJSGwTWvw==, tarball: https://registry.npmmirror.com/@antv/g-plugin-html-renderer/-/g-plugin-html-renderer-2.1.7.tgz} + /@antv/g-plugin-canvas-picker@2.1.3: + resolution: {integrity: sha512-HGb4DFknjZKDfXThKxEd9rW0DvbuOl7l7z/rybJ75TW2r+tk1EEDMQZepui4mSCKiewd+Zn03kbc5VytRQ1qTA==} + dependencies: + '@antv/g-lite': 2.2.2 + '@antv/g-math': 3.0.0 + '@antv/g-plugin-canvas-path-generator': 2.1.2 + '@antv/g-plugin-canvas-renderer': 2.2.3 + '@antv/util': 3.3.10 + '@babel/runtime': 7.26.0 + gl-matrix: 3.4.3 + tslib: 2.6.1 + dev: false - '@antv/g-plugin-image-loader@2.1.3': - resolution: {integrity: sha512-tHGFVx96DcXo5Q4pwuRnwSe0dZ9I3N+JS1An8zziYUDqHRZ7ukNablzKSsdchjr9v2PdkWtxN5jQ0d3nz7EtJQ==, tarball: https://registry.npmmirror.com/@antv/g-plugin-image-loader/-/g-plugin-image-loader-2.1.3.tgz} + /@antv/g-plugin-canvas-renderer@2.2.3: + resolution: {integrity: sha512-aTr1hLVGNxu79M4HoBO0ookBJ21PGVk/T/BZK2tqGbohn3vyZtWi90VS3bXMU34m6p6vfIlDa6th1UGFbs48vQ==} + dependencies: + '@antv/g-lite': 2.2.2 + '@antv/g-math': 3.0.0 + '@antv/g-plugin-canvas-path-generator': 2.1.2 + '@antv/g-plugin-image-loader': 2.1.3 + '@antv/util': 3.3.10 + '@babel/runtime': 7.26.0 + gl-matrix: 3.4.3 + tslib: 2.6.1 + dev: false - '@antv/g-plugin-svg-picker@2.0.20': - resolution: {integrity: sha512-gML0upmK24Bqr8REsuW8ZZqlKNHSEDtYlycFof36HDcKVNDWIf22ff5N3op1rCHkbny6XXjkIXoKulfQM6GHOA==, tarball: https://registry.npmmirror.com/@antv/g-plugin-svg-picker/-/g-plugin-svg-picker-2.0.20.tgz} + /@antv/g-plugin-dom-interaction@2.1.7: + resolution: {integrity: sha512-wrlcFlWsXq9Pa6ju5de8V0TzIR2GivBOkRyHQuNba6kpUC1RAT0EHpTpPCJML+Jys8nt8A0ppssSF4E0jZ1MpQ==} + dependencies: + '@antv/g-lite': 2.2.2 + '@babel/runtime': 7.26.0 + tslib: 2.6.1 + dev: false - '@antv/g-plugin-svg-renderer@2.2.2': - resolution: {integrity: sha512-fWQ5gVSxcZr+Ip95wVeHY2WtoWnsyGDqj+lkxK1aAq0uzqI2qIVyawUc86R87Bv4UVY9b0B5KCtig5F5SGGwAg==, tarball: https://registry.npmmirror.com/@antv/g-plugin-svg-renderer/-/g-plugin-svg-renderer-2.2.2.tgz} + /@antv/g-plugin-dragndrop@2.0.18: + resolution: {integrity: sha512-kjRj/yoWXh5J0Db/gtB3TFNlR4x3dMWvlRz6+7M3ka/mlrdMS0SGFLZfbWq6xvN+TzyiDXZdzSwA0A0OkA5Jww==} + dependencies: + '@antv/g-lite': 2.2.2 + '@antv/util': 3.3.10 + '@babel/runtime': 7.26.0 + tslib: 2.6.1 + dev: false - '@antv/g-svg@2.0.20': - resolution: {integrity: sha512-KMb5VzQ3nZpBBwH+sRIJGh/umfEpv4SmDWwV/Yy4nAn0X91yq++qEiIDCnq9QSXHOESV6Si7XJbo4WtX5G7TPw==, tarball: https://registry.npmmirror.com/@antv/g-svg/-/g-svg-2.0.20.tgz} - - '@antv/g-web-animations-api@2.1.7': - resolution: {integrity: sha512-yx7ZwLUgiglCe7sSisloWesO8gwgNwTGeDE0fTHhk1kZmO0BxZ8q6/VxlmLgXTyqdRso+6wfsTo2HukMURJSNw==, tarball: https://registry.npmmirror.com/@antv/g-web-animations-api/-/g-web-animations-api-2.1.7.tgz} - - '@antv/g2-extension-plot@0.2.1': - resolution: {integrity: sha512-WNv/LIUNJLwlfG8XXmKUbje9PbImtJqh36UDvuOk/uu+kmP/uMyHAXsBuu0yCOWdQgBVTVwoxszxJOCnY4mVfg==, tarball: https://registry.npmmirror.com/@antv/g2-extension-plot/-/g2-extension-plot-0.2.1.tgz} - - '@antv/g2@5.2.7': - resolution: {integrity: sha512-bOU7ZJfa735KCqIsWWwlFtn3pc8TwJIckBhy7X8PFcxTuMIXzgqOt7vbMMdF4psBHMyIIOCDAo8zf9rGhgjEzA==, tarball: https://registry.npmmirror.com/@antv/g2/-/g2-5.2.7.tgz} - - '@antv/g6-extension-react@0.1.7': - resolution: {integrity: sha512-fKk1weq2odHSTi5i8iSg9/keDPbufryA2TZ2X2j+qkSAwxJ7WtURagV/7/CUN9r1tMMk1eoiuzQZXdvc72a1GA==, tarball: https://registry.npmmirror.com/@antv/g6-extension-react/-/g6-extension-react-0.1.7.tgz} - peerDependencies: - '@antv/g6': ^5.0.22 - react: ^18.0.1 - react-dom: ^18.0.1 - - '@antv/g6@5.0.29': - resolution: {integrity: sha512-ZdGQmY0lqhySb0YXxK2bsHgaLa+uQyCxFbG1s3zfm66OSvjzPI8UlEGPw9dWJ79pOtOy2HjfLNbJE4BhzcakWg==, tarball: https://registry.npmmirror.com/@antv/g6/-/g6-5.0.29.tgz} - - '@antv/g@6.1.7': - resolution: {integrity: sha512-qv8YnBKqX3Yjs85U9OnBa6E92tNAI3cKrBhDrI5EikzjVPqfcVQLx0P5Zo8uzCYt7m9jFpJCi/iaGvWX/fA14Q==, tarball: https://registry.npmmirror.com/@antv/g/-/g-6.1.7.tgz} - - '@antv/graphin@3.0.4': - resolution: {integrity: sha512-7ce6RDI5Z6ud93yiyS7b+mmFrHJhlkwwNo53kb7P7KoCsnV7ioMONDE6Gw0ROeMSR6TwHtxGZUhHw9wxnPp82Q==, tarball: https://registry.npmmirror.com/@antv/graphin/-/graphin-3.0.4.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@antv/graphlib@2.0.3': - resolution: {integrity: sha512-EtQR+DIfsYy28tumTnH560v7yIzXZq0nSgFBZh76mMiV1oHEN1L4p6JKu7IMtILH14mDqzmYYYFetYoAODoQUw==, tarball: https://registry.npmmirror.com/@antv/graphlib/-/graphlib-2.0.3.tgz} - - '@antv/hierarchy@0.6.14': - resolution: {integrity: sha512-V3uknf7bhynOqQDw2sg+9r9DwZ9pc6k/EcqyTFdfXB1+ydr7urisP0MipIuimucvQKN+Qkd+d6w601r1UIroqQ==, tarball: https://registry.npmmirror.com/@antv/hierarchy/-/hierarchy-0.6.14.tgz} - - '@antv/layout@1.2.14-beta.9': - resolution: {integrity: sha512-wPlwBFMtq2lWZFc89/7Lzb8fjHnyKVZZ9zBb2h+zZIP0YWmVmHRE8+dqCiPKOyOGUXEdDtn813f1g107dCHZlg==, tarball: https://registry.npmmirror.com/@antv/layout/-/layout-1.2.14-beta.9.tgz} - - '@antv/react-g@2.0.23': - resolution: {integrity: sha512-Cur5/B6kRRK7kxj5USsEobKcGAGoWG9fDltVJ/3m95kMN95Ayx2rbVFxc5NavTrnmhxO4OUkRIyb0PDBFApfQA==, tarball: https://registry.npmmirror.com/@antv/react-g/-/react-g-2.0.23.tgz} - peerDependencies: - react: ^18.0.1 - - '@antv/scale@0.4.16': - resolution: {integrity: sha512-5wg/zB5kXHxpTV5OYwJD3ja6R8yTiqIOkjOhmpEJiowkzRlbEC/BOyMvNUq5fqFIHnMCE9woO7+c3zxEQCKPjw==, tarball: https://registry.npmmirror.com/@antv/scale/-/scale-0.4.16.tgz} - - '@antv/util@2.0.17': - resolution: {integrity: sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==, tarball: https://registry.npmmirror.com/@antv/util/-/util-2.0.17.tgz} - - '@antv/util@3.3.10': - resolution: {integrity: sha512-basGML3DFA3O87INnzvDStjzS+n0JLEhRnRsDzP9keiXz8gT1z/fTdmJAZFOzMMWxy+HKbi7NbSt0+8vz/OsBQ==, tarball: https://registry.npmmirror.com/@antv/util/-/util-3.3.10.tgz} - - '@babel/code-frame@7.12.11': - resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==, tarball: https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.12.11.tgz} - - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==, tarball: https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.26.2.tgz} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.26.2': - resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==, tarball: https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.26.2.tgz} - engines: {node: '>=6.9.0'} - - '@babel/core@7.23.6': - resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==, tarball: https://registry.npmmirror.com/@babel/core/-/core-7.23.6.tgz} - engines: {node: '>=6.9.0'} - - '@babel/core@7.26.0': - resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==, tarball: https://registry.npmmirror.com/@babel/core/-/core-7.26.0.tgz} - engines: {node: '>=6.9.0'} - - '@babel/eslint-parser@7.23.3': - resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==, tarball: https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 - - '@babel/eslint-parser@7.25.9': - resolution: {integrity: sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==, tarball: https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - - '@babel/generator@7.2.0': - resolution: {integrity: sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==, tarball: https://registry.npmmirror.com/@babel/generator/-/generator-7.2.0.tgz} - - '@babel/generator@7.26.2': - resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==, tarball: https://registry.npmmirror.com/@babel/generator/-/generator-7.26.2.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.25.9': - resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==, tarball: https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': - resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==, tarball: https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.25.9': - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==, tarball: https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-create-class-features-plugin@7.25.9': - resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==, tarball: https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-create-regexp-features-plugin@7.25.9': - resolution: {integrity: sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==, tarball: https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-define-polyfill-provider@0.6.3': - resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==, tarball: https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - '@babel/helper-member-expression-to-functions@7.25.9': - resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==, tarball: https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==, tarball: https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==, tarball: https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.25.9': - resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==, tarball: https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.25.9': - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==, tarball: https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-remap-async-to-generator@7.25.9': - resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==, tarball: https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-replace-supers@7.25.9': - resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==, tarball: https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-simple-access@7.25.9': - resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==, tarball: https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': - resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==, tarball: https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==, tarball: https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helper-wrap-function@7.25.9': - resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==, tarball: https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.26.0': - resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==, tarball: https://registry.npmmirror.com/@babel/helpers/-/helpers-7.26.0.tgz} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.25.9': - resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==, tarball: https://registry.npmmirror.com/@babel/highlight/-/highlight-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.26.2': - resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.26.2.tgz} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': - resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': - resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': - resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': - resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': - resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-proposal-class-properties@7.18.6': - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-decorators@7.25.9': - resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6': - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-numeric-separator@7.18.6': - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-optional-chaining@7.21.0': - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-private-methods@7.18.6': - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-private-property-in-object@7.21.11': - resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-decorators@7.25.9': - resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-flow@7.26.0': - resolution: {integrity: sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.26.0': - resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.26.0': - resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.25.9': - resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-arrow-functions@7.25.9': - resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-generator-functions@7.25.9': - resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-to-generator@7.25.9': - resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoped-functions@7.25.9': - resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoping@7.25.9': - resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-properties@7.25.9': - resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-static-block@7.26.0': - resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - - '@babel/plugin-transform-classes@7.25.9': - resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-computed-properties@7.25.9': - resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-destructuring@7.25.9': - resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-dotall-regex@7.25.9': - resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-keys@7.25.9': - resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-dynamic-import@7.25.9': - resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-exponentiation-operator@7.25.9': - resolution: {integrity: sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-export-namespace-from@7.25.9': - resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-flow-strip-types@7.25.9': - resolution: {integrity: sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-for-of@7.25.9': - resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-function-name@7.25.9': - resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-json-strings@7.25.9': - resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-literals@7.25.9': - resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-logical-assignment-operators@7.25.9': - resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-member-expression-literals@7.25.9': - resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-amd@7.25.9': - resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.23.3': - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.25.9': - resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-systemjs@7.25.9': - resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-umd@7.25.9': - resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-new-target@7.25.9': - resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': - resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-numeric-separator@7.25.9': - resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-rest-spread@7.25.9': - resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-super@7.25.9': - resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-catch-binding@7.25.9': - resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-chaining@7.25.9': - resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-parameters@7.25.9': - resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-methods@7.25.9': - resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-property-in-object@7.25.9': - resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-property-literals@7.25.9': - resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-display-name@7.25.9': - resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-development@7.25.9': - resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-self@7.25.9': - resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-source@7.25.9': - resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx@7.25.9': - resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-pure-annotations@7.25.9': - resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regenerator@7.25.9': - resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regexp-modifiers@7.26.0': - resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-reserved-words@7.25.9': - resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-runtime@7.25.9': - resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-shorthand-properties@7.25.9': - resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-spread@7.25.9': - resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-sticky-regex@7.25.9': - resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-template-literals@7.25.9': - resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typeof-symbol@7.25.9': - resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typescript@7.25.9': - resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-escapes@7.25.9': - resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-property-regex@7.25.9': - resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-regex@7.25.9': - resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-sets-regex@7.25.9': - resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/polyfill@7.12.1': - resolution: {integrity: sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==, tarball: https://registry.npmmirror.com/@babel/polyfill/-/polyfill-7.12.1.tgz} - deprecated: 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information. - - '@babel/preset-env@7.26.0': - resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==, tarball: https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.26.0.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, tarball: https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - - '@babel/preset-react@7.25.9': - resolution: {integrity: sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==, tarball: https://registry.npmmirror.com/@babel/preset-react/-/preset-react-7.25.9.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-typescript@7.26.0': - resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==, tarball: https://registry.npmmirror.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.23.6': - resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==, tarball: https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.6.tgz} - engines: {node: '>=6.9.0'} - - '@babel/runtime@7.26.0': - resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==, tarball: https://registry.npmmirror.com/@babel/runtime/-/runtime-7.26.0.tgz} - engines: {node: '>=6.9.0'} - - '@babel/standalone@7.26.2': - resolution: {integrity: sha512-i2VbegsRfwa9yq3xmfDX3tG2yh9K0cCqwpSyVG2nPxifh0EOnucAZUeO/g4lW2Zfg03aPJNtPfxQbDHzXc7H+w==, tarball: https://registry.npmmirror.com/@babel/standalone/-/standalone-7.26.2.tgz} - engines: {node: '>=6.9.0'} - - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==, tarball: https://registry.npmmirror.com/@babel/template/-/template-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.25.9': - resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==, tarball: https://registry.npmmirror.com/@babel/traverse/-/traverse-7.25.9.tgz} - engines: {node: '>=6.9.0'} - - '@babel/types@7.26.0': - resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.26.0.tgz} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, tarball: https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz} - - '@bloomberg/record-tuple-polyfill@0.0.4': - resolution: {integrity: sha512-h0OYmPR3A5Dfbetra/GzxBAzQk8sH7LhRkRUTdagX6nrtlUgJGYCTv4bBK33jsTQw9HDd8PE2x1Ma+iRKEDUsw==, tarball: https://registry.npmmirror.com/@bloomberg/record-tuple-polyfill/-/record-tuple-polyfill-0.0.4.tgz} - - '@changesets/apply-release-plan@7.0.5': - resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==, tarball: https://registry.npmmirror.com/@changesets/apply-release-plan/-/apply-release-plan-7.0.5.tgz} - - '@changesets/assemble-release-plan@6.0.4': - resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==, tarball: https://registry.npmmirror.com/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.4.tgz} - - '@changesets/changelog-git@0.2.0': - resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==, tarball: https://registry.npmmirror.com/@changesets/changelog-git/-/changelog-git-0.2.0.tgz} - - '@changesets/cli@2.27.9': - resolution: {integrity: sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==, tarball: https://registry.npmmirror.com/@changesets/cli/-/cli-2.27.9.tgz} - hasBin: true - - '@changesets/config@3.0.3': - resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==, tarball: https://registry.npmmirror.com/@changesets/config/-/config-3.0.3.tgz} - - '@changesets/errors@0.2.0': - resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==, tarball: https://registry.npmmirror.com/@changesets/errors/-/errors-0.2.0.tgz} - - '@changesets/get-dependents-graph@2.1.2': - resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==, tarball: https://registry.npmmirror.com/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.2.tgz} - - '@changesets/get-release-plan@4.0.4': - resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==, tarball: https://registry.npmmirror.com/@changesets/get-release-plan/-/get-release-plan-4.0.4.tgz} - - '@changesets/get-version-range-type@0.4.0': - resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==, tarball: https://registry.npmmirror.com/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz} - - '@changesets/git@3.0.1': - resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==, tarball: https://registry.npmmirror.com/@changesets/git/-/git-3.0.1.tgz} - - '@changesets/logger@0.1.1': - resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==, tarball: https://registry.npmmirror.com/@changesets/logger/-/logger-0.1.1.tgz} - - '@changesets/parse@0.4.0': - resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==, tarball: https://registry.npmmirror.com/@changesets/parse/-/parse-0.4.0.tgz} - - '@changesets/pre@2.0.1': - resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==, tarball: https://registry.npmmirror.com/@changesets/pre/-/pre-2.0.1.tgz} - - '@changesets/read@0.6.1': - resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==, tarball: https://registry.npmmirror.com/@changesets/read/-/read-0.6.1.tgz} - - '@changesets/should-skip-package@0.1.1': - resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==, tarball: https://registry.npmmirror.com/@changesets/should-skip-package/-/should-skip-package-0.1.1.tgz} - - '@changesets/types@4.1.0': - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==, tarball: https://registry.npmmirror.com/@changesets/types/-/types-4.1.0.tgz} - - '@changesets/types@6.0.0': - resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==, tarball: https://registry.npmmirror.com/@changesets/types/-/types-6.0.0.tgz} - - '@changesets/write@0.3.2': - resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==, tarball: https://registry.npmmirror.com/@changesets/write/-/write-0.3.2.tgz} - - '@cnakazawa/watch@1.0.4': - resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==, tarball: https://registry.npmmirror.com/@cnakazawa/watch/-/watch-1.0.4.tgz} - engines: {node: '>=0.1.95'} - hasBin: true - - '@conventional-changelog/git-client@1.0.1': - resolution: {integrity: sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==, tarball: https://registry.npmmirror.com/@conventional-changelog/git-client/-/git-client-1.0.1.tgz} - engines: {node: '>=18'} - peerDependencies: - conventional-commits-filter: ^5.0.0 - conventional-commits-parser: ^6.0.0 - peerDependenciesMeta: - conventional-commits-filter: - optional: true - conventional-commits-parser: - optional: true - - '@csstools/postcss-color-function@1.1.1': - resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==, tarball: https://registry.npmmirror.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - '@csstools/postcss-font-format-keywords@1.0.1': - resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==, tarball: https://registry.npmmirror.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - '@csstools/postcss-hwb-function@1.0.2': - resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==, tarball: https://registry.npmmirror.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - '@csstools/postcss-ic-unit@1.0.1': - resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==, tarball: https://registry.npmmirror.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - '@csstools/postcss-is-pseudo-class@2.0.7': - resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==, tarball: https://registry.npmmirror.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - '@csstools/postcss-normalize-display-values@1.0.1': - resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==, tarball: https://registry.npmmirror.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - '@csstools/postcss-oklab-function@1.1.1': - resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==, tarball: https://registry.npmmirror.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - '@csstools/postcss-progressive-custom-properties@1.3.0': - resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==, tarball: https://registry.npmmirror.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - - '@csstools/postcss-stepped-value-functions@1.0.1': - resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==, tarball: https://registry.npmmirror.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - '@csstools/postcss-unset-value@1.0.2': - resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==, tarball: https://registry.npmmirror.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - '@csstools/selector-specificity@2.2.0': - resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==, tarball: https://registry.npmmirror.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss-selector-parser: ^6.0.10 - - '@ctrl/tinycolor@3.6.1': - resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==, tarball: https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz} - engines: {node: '>=10'} - - '@discoveryjs/json-ext@0.5.7': - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==, tarball: https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz} - engines: {node: '>=10.0.0'} - - '@docsearch/css@3.7.0': - resolution: {integrity: sha512-1OorbTwi1eeDmr0v5t+ckSRlt1zM5GHjm92iIl3kUu7im3GHuP+csf6E0WBg8pdXQczTWP9J9+o9n+Vg6DH5cQ==, tarball: https://registry.npmmirror.com/@docsearch/css/-/css-3.7.0.tgz} - - '@docsearch/react@3.7.0': - resolution: {integrity: sha512-8e6tdDfkYoxafEEPuX5eE1h9cTkLvhe4KgoFkO5JCddXSQONnN1FHcDZRI4r8894eMpbYq6rdJF0dVYh8ikwNQ==, tarball: https://registry.npmmirror.com/@docsearch/react/-/react-3.7.0.tgz} - peerDependencies: - '@types/react': '>= 16.8.0 < 19.0.0' - react: ^18.0.1 - react-dom: ^18.0.1 - search-insights: '>= 1 < 3' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true - search-insights: - optional: true - - '@electron/get@1.14.1': - resolution: {integrity: sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==, tarball: https://registry.npmmirror.com/@electron/get/-/get-1.14.1.tgz} - engines: {node: '>=8.6'} - - '@emotion/hash@0.8.0': - resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==, tarball: https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz} - - '@emotion/is-prop-valid@1.2.2': - resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==, tarball: https://registry.npmmirror.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz} - - '@emotion/memoize@0.8.1': - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==, tarball: https://registry.npmmirror.com/@emotion/memoize/-/memoize-0.8.1.tgz} - - '@emotion/unitless@0.7.5': - resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==, tarball: https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.7.5.tgz} - - '@emotion/unitless@0.8.1': - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==, tarball: https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.8.1.tgz} - - '@esbuild-kit/cjs-loader@2.4.4': - resolution: {integrity: sha512-NfsJX4PdzhwSkfJukczyUiZGc7zNNWZcEAyqeISpDnn0PTfzMJR1aR8xAIPskBejIxBJbIgCCMzbaYa9SXepIg==, tarball: https://registry.npmmirror.com/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.4.tgz} - - '@esbuild-kit/core-utils@3.3.2': - resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==, tarball: https://registry.npmmirror.com/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz} - - '@esbuild-kit/esm-loader@2.6.5': - resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==, tarball: https://registry.npmmirror.com/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz} - - '@esbuild/aix-ppc64@0.21.4': - resolution: {integrity: sha512-Zrm+B33R4LWPLjDEVnEqt2+SLTATlru1q/xYKVn8oVTbiRBGmK2VIMoIYGJDGyftnGaC788IuzGFAlb7IQ0Y8A==, tarball: https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==, tarball: https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.21.4': - resolution: {integrity: sha512-fYFnz+ObClJ3dNiITySBUx+oNalYUT18/AryMxfovLkYWbutXsct3Wz2ZWAcGGppp+RVVX5FiXeLYGi97umisA==, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.21.4': - resolution: {integrity: sha512-E7H/yTd8kGQfY4z9t3nRPk/hrhaCajfA3YSQSBrst8B+3uTcgsi8N+ZWYCaeIDsiVs6m65JPCaQN/DxBRclF3A==, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.21.4': - resolution: {integrity: sha512-mDqmlge3hFbEPbCWxp4fM6hqq7aZfLEHZAKGP9viq9wMUBVQx202aDIfc3l+d2cKhUJM741VrCXEzRFhPDKH3Q==, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.21.4': - resolution: {integrity: sha512-72eaIrDZDSiWqpmCzVaBD58c8ea8cw/U0fq/PPOTqE3c53D0xVMRt2ooIABZ6/wj99Y+h4ksT/+I+srCDLU9TA==, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.4': - resolution: {integrity: sha512-uBsuwRMehGmw1JC7Vecu/upOjTsMhgahmDkWhGLWxIgUn2x/Y4tIwUZngsmVb6XyPSTXJYS4YiASKPcm9Zitag==, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.21.4': - resolution: {integrity: sha512-8JfuSC6YMSAEIZIWNL3GtdUT5NhUA/CMUCpZdDRolUXNAXEE/Vbpe6qlGLpfThtY5NwXq8Hi4nJy4YfPh+TwAg==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.4': - resolution: {integrity: sha512-8d9y9eQhxv4ef7JmXny7591P/PYsDFc4+STaxC1GBv0tMyCdyWfXu2jBuqRsyhY8uL2HU8uPyscgE2KxCY9imQ==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.21.4': - resolution: {integrity: sha512-/GLD2orjNU50v9PcxNpYZi+y8dJ7e7/LhQukN3S4jNDXCKkyyiyAz9zDw3siZ7Eh1tRcnCHAo/WcqKMzmi4eMQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.21.4': - resolution: {integrity: sha512-2rqFFefpYmpMs+FWjkzSgXg5vViocqpq5a1PSRgT0AvSgxoXmGF17qfGAzKedg6wAwyM7UltrKVo9kxaJLMF/g==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.21.4': - resolution: {integrity: sha512-pNftBl7m/tFG3t2m/tSjuYeWIffzwAZT9m08+9DPLizxVOsUl8DdFzn9HvJrTQwe3wvJnwTdl92AonY36w/25g==, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.21.4': - resolution: {integrity: sha512-cSD2gzCK5LuVX+hszzXQzlWya6c7hilO71L9h4KHwqI4qeqZ57bAtkgcC2YioXjsbfAv4lPn3qe3b00Zt+jIfQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.21.4': - resolution: {integrity: sha512-qtzAd3BJh7UdbiXCrg6npWLYU0YpufsV9XlufKhMhYMJGJCdfX/G6+PNd0+v877X1JG5VmjBLUiFB0o8EUSicA==, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.21.4': - resolution: {integrity: sha512-yB8AYzOTaL0D5+2a4xEy7OVvbcypvDR05MsB/VVPVA7nL4hc5w5Dyd/ddnayStDgJE59fAgNEOdLhBxjfx5+dg==, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.4': - resolution: {integrity: sha512-Y5AgOuVzPjQdgU59ramLoqSSiXddu7F3F+LI5hYy/d1UHN7K5oLzYBDZe23QmQJ9PIVUXwOdKJ/jZahPdxzm9w==, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.21.4': - resolution: {integrity: sha512-Iqc/l/FFwtt8FoTK9riYv9zQNms7B8u+vAI/rxKuN10HgQIXaPzKZc479lZ0x6+vKVQbu55GdpYpeNWzjOhgbA==, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.21.4': - resolution: {integrity: sha512-Td9jv782UMAFsuLZINfUpoF5mZIbAj+jv1YVtE58rFtfvoKRiKSkRGQfHTgKamLVT/fO7203bHa3wU122V/Bdg==, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.21.4': - resolution: {integrity: sha512-Awn38oSXxsPMQxaV0Ipb7W/gxZtk5Tx3+W+rAPdZkyEhQ6968r9NvtkjhnhbEgWXYbgV+JEONJ6PcdBS+nlcpA==, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.21.4': - resolution: {integrity: sha512-IsUmQeCY0aU374R82fxIPu6vkOybWIMc3hVGZ3ChRwL9hA1TwY+tS0lgFWV5+F1+1ssuvvXt3HFqe8roCip8Hg==, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.21.4': - resolution: {integrity: sha512-hsKhgZ4teLUaDA6FG/QIu2q0rI6I36tZVfM4DBZv3BG0mkMIdEnMbhc4xwLvLJSS22uWmaVkFkqWgIS0gPIm+A==, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.21.4': - resolution: {integrity: sha512-UUfMgMoXPoA/bvGUNfUBFLCh0gt9dxZYIx9W4rfJr7+hKe5jxxHmfOK8YSH4qsHLLN4Ck8JZ+v7Q5fIm1huErg==, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.21.4': - resolution: {integrity: sha512-yIxbspZb5kGCAHWm8dexALQ9en1IYDfErzjSEq1KzXFniHv019VT3mNtTK7t8qdy4TwT6QYHI9sEZabONHg+aw==, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.21.4': - resolution: {integrity: sha512-sywLRD3UK/qRJt0oBwdpYLBibk7KiRfbswmWRDabuncQYSlf8aLEEUor/oP6KRz8KEG+HoiVLBhPRD5JWjS8Sg==, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.4.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==, tarball: https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint/eslintrc@0.4.3': - resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==, tarball: https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz} - engines: {node: ^10.12.0 || >=12.0.0} - - '@floating-ui/core@0.6.2': - resolution: {integrity: sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg==, tarball: https://registry.npmmirror.com/@floating-ui/core/-/core-0.6.2.tgz} - - '@floating-ui/dom@0.4.5': - resolution: {integrity: sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==, tarball: https://registry.npmmirror.com/@floating-ui/dom/-/dom-0.4.5.tgz} - - '@floating-ui/react-dom-interactions@0.3.1': - resolution: {integrity: sha512-tP2KEh7EHJr5hokSBHcPGojb+AorDNUf0NYfZGg/M+FsMvCOOsSEeEF0O1NDfETIzDnpbHnCs0DuvCFhSMSStg==, tarball: https://registry.npmmirror.com/@floating-ui/react-dom-interactions/-/react-dom-interactions-0.3.1.tgz} - deprecated: Package renamed to @floating-ui/react - - '@floating-ui/react-dom@0.6.3': - resolution: {integrity: sha512-hC+pS5D6AgS2wWjbmSQ6UR6Kpy+drvWGJIri6e1EDGADTPsCaa4KzCgmCczHrQeInx9tqs81EyDmbKJYY2swKg==, tarball: https://registry.npmmirror.com/@floating-ui/react-dom/-/react-dom-0.6.3.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@formatjs/ecma402-abstract@2.2.3': - resolution: {integrity: sha512-aElGmleuReGnk2wtYOzYFmNWYoiWWmf1pPPCYg0oiIQSJj0mjc4eUfzUXaSOJ4S8WzI/cLqnCTWjqz904FT2OQ==, tarball: https://registry.npmmirror.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.3.tgz} - - '@formatjs/fast-memoize@2.2.3': - resolution: {integrity: sha512-3jeJ+HyOfu8osl3GNSL4vVHUuWFXR03Iz9jjgI7RwjG6ysu/Ymdr0JRCPHfF5yGbTE6JCrd63EpvX1/WybYRbA==, tarball: https://registry.npmmirror.com/@formatjs/fast-memoize/-/fast-memoize-2.2.3.tgz} - - '@formatjs/icu-messageformat-parser@2.9.3': - resolution: {integrity: sha512-9L99QsH14XjOCIp4TmbT8wxuffJxGK8uLNO1zNhLtcZaVXvv626N0s4A2qgRCKG3dfYWx9psvGlFmvyVBa6u/w==, tarball: https://registry.npmmirror.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.3.tgz} - - '@formatjs/icu-skeleton-parser@1.8.7': - resolution: {integrity: sha512-fI+6SmS2g7h3srfAKSWa5dwreU5zNEfon2uFo99OToiLF6yxGE+WikvFSbsvMAYkscucvVmTYNlWlaDPp0n5HA==, tarball: https://registry.npmmirror.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.7.tgz} - - '@formatjs/intl-displaynames@6.8.4': - resolution: {integrity: sha512-HDVNBspDAOW0yTWluWTPHX2fk/9iBO4oST4R96f/IUaPGsFtjsHrpakwc+XDRPa3U5RniSEU2z34ZY0W78+E6Q==, tarball: https://registry.npmmirror.com/@formatjs/intl-displaynames/-/intl-displaynames-6.8.4.tgz} - - '@formatjs/intl-listformat@7.7.4': - resolution: {integrity: sha512-lipFspH2MZcoeXxR6WSR/Jy9unzJ/iT0w+gbL8vgv25Ap0S9cUtcDVAce4ECEKI1bDtAvEU3b6+9Dha27gAikA==, tarball: https://registry.npmmirror.com/@formatjs/intl-listformat/-/intl-listformat-7.7.4.tgz} - - '@formatjs/intl-localematcher@0.5.7': - resolution: {integrity: sha512-GGFtfHGQVFe/niOZp24Kal5b2i36eE2bNL0xi9Sg/yd0TR8aLjcteApZdHmismP5QQax1cMnZM9yWySUUjJteA==, tarball: https://registry.npmmirror.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.7.tgz} - - '@formatjs/intl@2.10.14': - resolution: {integrity: sha512-4CA1EO75i/mSMHdjwfpgRj3Rsdsm6WjALeu/nlzYhBmAPxGu/Ha5GIRHAet5SO05TnpmqxmEGOsskWqFm0IeoA==, tarball: https://registry.npmmirror.com/@formatjs/intl/-/intl-2.10.14.tgz} - peerDependencies: - typescript: ^4.7 || 5 - peerDependenciesMeta: - typescript: - optional: true - - '@humanwhocodes/config-array@0.5.0': - resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==, tarball: https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/object-schema@1.2.1': - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, tarball: https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz} - deprecated: Use @eslint/object-schema instead - - '@hutson/parse-repository-url@5.0.0': - resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==, tarball: https://registry.npmmirror.com/@hutson/parse-repository-url/-/parse-repository-url-5.0.0.tgz} - engines: {node: '>=10.13.0'} - - '@iconify/types@2.0.0': - resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==, tarball: https://registry.npmmirror.com/@iconify/types/-/types-2.0.0.tgz} - - '@iconify/utils@2.1.1': - resolution: {integrity: sha512-H8xz74JDzDw8f0qLxwIaxFMnFkbXTZNWEufOk3WxaLFHV4h0A2FjIDgNk5LzC0am4jssnjdeJJdRs3UFu3582Q==, tarball: https://registry.npmmirror.com/@iconify/utils/-/utils-2.1.1.tgz} - - '@inquirer/figures@1.0.8': - resolution: {integrity: sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==, tarball: https://registry.npmmirror.com/@inquirer/figures/-/figures-1.0.8.tgz} - engines: {node: '>=18'} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, tarball: https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz} - engines: {node: '>=12'} - - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==, tarball: https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, tarball: https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.3.tgz} - engines: {node: '>=8'} - - '@jest/console@24.9.0': - resolution: {integrity: sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==, tarball: https://registry.npmmirror.com/@jest/console/-/console-24.9.0.tgz} - engines: {node: '>= 6'} - - '@jest/console@26.6.2': - resolution: {integrity: sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==, tarball: https://registry.npmmirror.com/@jest/console/-/console-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - '@jest/core@26.6.3': - resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==, tarball: https://registry.npmmirror.com/@jest/core/-/core-26.6.3.tgz} - engines: {node: '>= 10.14.2'} - - '@jest/create-cache-key-function@29.7.0': - resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==, tarball: https://registry.npmmirror.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/environment@24.9.0': - resolution: {integrity: sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==, tarball: https://registry.npmmirror.com/@jest/environment/-/environment-24.9.0.tgz} - engines: {node: '>= 6'} - - '@jest/environment@26.6.2': - resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==, tarball: https://registry.npmmirror.com/@jest/environment/-/environment-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - '@jest/fake-timers@24.9.0': - resolution: {integrity: sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==, tarball: https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz} - engines: {node: '>= 6'} - - '@jest/fake-timers@26.6.2': - resolution: {integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==, tarball: https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - '@jest/globals@26.6.2': - resolution: {integrity: sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==, tarball: https://registry.npmmirror.com/@jest/globals/-/globals-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - '@jest/reporters@26.6.2': - resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==, tarball: https://registry.npmmirror.com/@jest/reporters/-/reporters-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, tarball: https://registry.npmmirror.com/@jest/schemas/-/schemas-29.6.3.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/source-map@24.9.0': - resolution: {integrity: sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==, tarball: https://registry.npmmirror.com/@jest/source-map/-/source-map-24.9.0.tgz} - engines: {node: '>= 6'} - - '@jest/source-map@26.6.2': - resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==, tarball: https://registry.npmmirror.com/@jest/source-map/-/source-map-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - '@jest/test-result@24.9.0': - resolution: {integrity: sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==, tarball: https://registry.npmmirror.com/@jest/test-result/-/test-result-24.9.0.tgz} - engines: {node: '>= 6'} - - '@jest/test-result@26.6.2': - resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==, tarball: https://registry.npmmirror.com/@jest/test-result/-/test-result-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - '@jest/test-sequencer@24.9.0': - resolution: {integrity: sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==, tarball: https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz} - engines: {node: '>= 6'} - - '@jest/test-sequencer@26.6.3': - resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==, tarball: https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz} - engines: {node: '>= 10.14.2'} - - '@jest/transform@24.9.0': - resolution: {integrity: sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==, tarball: https://registry.npmmirror.com/@jest/transform/-/transform-24.9.0.tgz} - engines: {node: '>= 6'} - - '@jest/transform@26.6.2': - resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==, tarball: https://registry.npmmirror.com/@jest/transform/-/transform-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==, tarball: https://registry.npmmirror.com/@jest/transform/-/transform-29.7.0.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@24.9.0': - resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==, tarball: https://registry.npmmirror.com/@jest/types/-/types-24.9.0.tgz} - engines: {node: '>= 6'} - - '@jest/types@26.6.2': - resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==, tarball: https://registry.npmmirror.com/@jest/types/-/types-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - '@jest/types@27.5.1': - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==, tarball: https://registry.npmmirror.com/@jest/types/-/types-27.5.1.tgz} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==, tarball: https://registry.npmmirror.com/@jest/types/-/types-29.6.3.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, tarball: https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==, tarball: https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==, tarball: https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==, tarball: https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz} - - '@jsonjoy.com/base64@1.1.2': - resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==, tarball: https://registry.npmmirror.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz} - engines: {node: '>=10.0'} - peerDependencies: - tslib: 2.6.1 - - '@jsonjoy.com/json-pack@1.1.0': - resolution: {integrity: sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==, tarball: https://registry.npmmirror.com/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz} - engines: {node: '>=10.0'} - peerDependencies: - tslib: 2.6.1 - - '@jsonjoy.com/util@1.5.0': - resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==, tarball: https://registry.npmmirror.com/@jsonjoy.com/util/-/util-1.5.0.tgz} - engines: {node: '>=10.0'} - peerDependencies: - tslib: 2.6.1 - - '@leichtgewicht/ip-codec@2.0.5': - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==, tarball: https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz} - - '@ljharb/resumer@0.0.1': - resolution: {integrity: sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw==, tarball: https://registry.npmmirror.com/@ljharb/resumer/-/resumer-0.0.1.tgz} - engines: {node: '>= 0.4'} - - '@ljharb/through@2.3.13': - resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==, tarball: https://registry.npmmirror.com/@ljharb/through/-/through-2.3.13.tgz} - engines: {node: '>= 0.4'} - - '@loadable/component@5.15.2': - resolution: {integrity: sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw==, tarball: https://registry.npmmirror.com/@loadable/component/-/component-5.15.2.tgz} - engines: {node: '>=8'} - peerDependencies: - react: ^18.0.1 - - '@makotot/ghostui@2.0.0': - resolution: {integrity: sha512-LD6OeMv+yGjpYZNjh34yDTCIE1NegqOtJq5gm4wX6op3QL7K5psTVzMjkWzseBoYj0XOD4g+UJVIZTprfoOPGg==, tarball: https://registry.npmmirror.com/@makotot/ghostui/-/ghostui-2.0.0.tgz} - engines: {node: '>=10'} - peerDependencies: - react: ^18.0.1 - - '@manypkg/find-root@1.1.0': - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==, tarball: https://registry.npmmirror.com/@manypkg/find-root/-/find-root-1.1.0.tgz} - - '@manypkg/get-packages@1.1.3': - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==, tarball: https://registry.npmmirror.com/@manypkg/get-packages/-/get-packages-1.1.3.tgz} - - '@monaco-editor/loader@1.4.0': - resolution: {integrity: sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==, tarball: https://registry.npmmirror.com/@monaco-editor/loader/-/loader-1.4.0.tgz} - peerDependencies: - monaco-editor: '>= 0.21.0 < 1' - - '@monaco-editor/react@4.6.0': - resolution: {integrity: sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw==, tarball: https://registry.npmmirror.com/@monaco-editor/react/-/react-4.6.0.tgz} - peerDependencies: - monaco-editor: '>= 0.25.0 < 1' - react: ^18.0.1 - react-dom: ^18.0.1 - - '@naoak/workerize-transferable@0.1.0': - resolution: {integrity: sha512-fDLfuP71IPNP5+zSfxFb52OHgtjZvauRJWbVnpzQ7G7BjcbLjTny0OW1d3ZO806XKpLWNKmeeW3MhE0sy8iwYQ==, tarball: https://registry.npmmirror.com/@naoak/workerize-transferable/-/workerize-transferable-0.1.0.tgz} - peerDependencies: - workerize-loader: '*' - - '@napi-rs/nice-android-arm-eabi@1.0.1': - resolution: {integrity: sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==, tarball: https://registry.npmmirror.com/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [arm] - os: [android] - - '@napi-rs/nice-android-arm64@1.0.1': - resolution: {integrity: sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==, tarball: https://registry.npmmirror.com/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@napi-rs/nice-darwin-arm64@1.0.1': - resolution: {integrity: sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==, tarball: https://registry.npmmirror.com/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@napi-rs/nice-darwin-x64@1.0.1': - resolution: {integrity: sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==, tarball: https://registry.npmmirror.com/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@napi-rs/nice-freebsd-x64@1.0.1': - resolution: {integrity: sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==, tarball: https://registry.npmmirror.com/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@napi-rs/nice-linux-arm-gnueabihf@1.0.1': - resolution: {integrity: sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==, tarball: https://registry.npmmirror.com/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@napi-rs/nice-linux-arm64-gnu@1.0.1': - resolution: {integrity: sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==, tarball: https://registry.npmmirror.com/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@napi-rs/nice-linux-arm64-musl@1.0.1': - resolution: {integrity: sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==, tarball: https://registry.npmmirror.com/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@napi-rs/nice-linux-ppc64-gnu@1.0.1': - resolution: {integrity: sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==, tarball: https://registry.npmmirror.com/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@napi-rs/nice-linux-riscv64-gnu@1.0.1': - resolution: {integrity: sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==, tarball: https://registry.npmmirror.com/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@napi-rs/nice-linux-s390x-gnu@1.0.1': - resolution: {integrity: sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==, tarball: https://registry.npmmirror.com/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@napi-rs/nice-linux-x64-gnu@1.0.1': - resolution: {integrity: sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==, tarball: https://registry.npmmirror.com/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@napi-rs/nice-linux-x64-musl@1.0.1': - resolution: {integrity: sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==, tarball: https://registry.npmmirror.com/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@napi-rs/nice-win32-arm64-msvc@1.0.1': - resolution: {integrity: sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==, tarball: https://registry.npmmirror.com/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@napi-rs/nice-win32-ia32-msvc@1.0.1': - resolution: {integrity: sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==, tarball: https://registry.npmmirror.com/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@napi-rs/nice-win32-x64-msvc@1.0.1': - resolution: {integrity: sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==, tarball: https://registry.npmmirror.com/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@napi-rs/nice@1.0.1': - resolution: {integrity: sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==, tarball: https://registry.npmmirror.com/@napi-rs/nice/-/nice-1.0.1.tgz} - engines: {node: '>= 10'} - - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==, tarball: https://registry.npmmirror.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz} - engines: {node: '>= 8'} - - '@parcel/watcher-android-arm64@2.5.0': - resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==, tarball: https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [android] - - '@parcel/watcher-darwin-arm64@2.5.0': - resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==, tarball: https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [darwin] - - '@parcel/watcher-darwin-x64@2.5.0': - resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==, tarball: https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [darwin] - - '@parcel/watcher-freebsd-x64@2.5.0': - resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==, tarball: https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [freebsd] - - '@parcel/watcher-linux-arm-glibc@2.5.0': - resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==, tarball: https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-arm-musl@2.5.0': - resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==, tarball: https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - libc: [musl] - - '@parcel/watcher-linux-arm64-glibc@2.5.0': - resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==, tarball: https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-arm64-musl@2.5.0': - resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==, tarball: https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@parcel/watcher-linux-x64-glibc@2.5.0': - resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==, tarball: https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-x64-musl@2.5.0': - resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==, tarball: https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@parcel/watcher-win32-arm64@2.5.0': - resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==, tarball: https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [win32] - - '@parcel/watcher-win32-ia32@2.5.0': - resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==, tarball: https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [ia32] - os: [win32] - - '@parcel/watcher-win32-x64@2.5.0': - resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==, tarball: https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [win32] - - '@parcel/watcher@2.5.0': - resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==, tarball: https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.0.tgz} - engines: {node: '>= 10.0.0'} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, tarball: https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz} - engines: {node: '>=14'} - - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==, tarball: https://registry.npmmirror.com/@pkgr/core/-/core-0.1.1.tgz} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@pkgr/utils@2.4.2': - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==, tarball: https://registry.npmmirror.com/@pkgr/utils/-/utils-2.4.2.tgz} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@pnpm/config.env-replace@1.1.0': - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==, tarball: https://registry.npmmirror.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz} - engines: {node: '>=12.22.0'} - - '@pnpm/network.ca-file@1.0.2': - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==, tarball: https://registry.npmmirror.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz} - engines: {node: '>=12.22.0'} - - '@pnpm/npm-conf@2.3.1': - resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==, tarball: https://registry.npmmirror.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz} - engines: {node: '>=12'} - - '@polka/url@1.0.0-next.28': - resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==, tarball: https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.28.tgz} - - '@rc-component/async-validator@5.0.4': - resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==, tarball: https://registry.npmmirror.com/@rc-component/async-validator/-/async-validator-5.0.4.tgz} - engines: {node: '>=14.x'} - - '@rc-component/color-picker@2.0.1': - resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==, tarball: https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-2.0.1.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@rc-component/context@1.4.0': - resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==, tarball: https://registry.npmmirror.com/@rc-component/context/-/context-1.4.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@rc-component/mini-decimal@1.1.0': - resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==, tarball: https://registry.npmmirror.com/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz} - engines: {node: '>=8.x'} - - '@rc-component/mutate-observer@1.1.0': - resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==, tarball: https://registry.npmmirror.com/@rc-component/mutate-observer/-/mutate-observer-1.1.0.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@rc-component/portal@1.1.2': - resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==, tarball: https://registry.npmmirror.com/@rc-component/portal/-/portal-1.1.2.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@rc-component/qrcode@1.0.0': - resolution: {integrity: sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==, tarball: https://registry.npmmirror.com/@rc-component/qrcode/-/qrcode-1.0.0.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@rc-component/tour@1.15.1': - resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==, tarball: https://registry.npmmirror.com/@rc-component/tour/-/tour-1.15.1.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@rc-component/trigger@1.18.3': - resolution: {integrity: sha512-Ksr25pXreYe1gX6ayZ1jLrOrl9OAUHUqnuhEx6MeHnNa1zVM5Y2Aj3Q35UrER0ns8D2cJYtmJtVli+i+4eKrvA==, tarball: https://registry.npmmirror.com/@rc-component/trigger/-/trigger-1.18.3.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@rc-component/trigger@2.2.5': - resolution: {integrity: sha512-F1EJ4KjFpGAHAjuKvOyZB/6IZDkVx0bHl0M4fQM5wXcmm7lgTgVSSnR3bXwdmS6jOJGHOqfDxIJW3WUvwMIXhQ==, tarball: https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.2.5.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@remix-run/router@1.21.0': - resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==, tarball: https://registry.npmmirror.com/@remix-run/router/-/router-1.21.0.tgz} - engines: {node: '>=14.0.0'} - - '@rollup/rollup-android-arm-eabi@4.25.0': - resolution: {integrity: sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.25.0.tgz} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.25.0': - resolution: {integrity: sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.25.0.tgz} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.25.0': - resolution: {integrity: sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.25.0.tgz} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.25.0': - resolution: {integrity: sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.25.0.tgz} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.25.0': - resolution: {integrity: sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==, tarball: https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.25.0.tgz} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.25.0': - resolution: {integrity: sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==, tarball: https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.25.0.tgz} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.25.0': - resolution: {integrity: sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.25.0.tgz} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.25.0': - resolution: {integrity: sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.25.0.tgz} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.25.0': - resolution: {integrity: sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.25.0.tgz} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm64-musl@4.25.0': - resolution: {integrity: sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.25.0.tgz} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': - resolution: {integrity: sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.25.0.tgz} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-gnu@4.25.0': - resolution: {integrity: sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.25.0.tgz} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-s390x-gnu@4.25.0': - resolution: {integrity: sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.25.0.tgz} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-gnu@4.25.0': - resolution: {integrity: sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.25.0.tgz} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-musl@4.25.0': - resolution: {integrity: sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.25.0.tgz} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rollup/rollup-win32-arm64-msvc@4.25.0': - resolution: {integrity: sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.25.0.tgz} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.25.0': - resolution: {integrity: sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.25.0.tgz} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.25.0': - resolution: {integrity: sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.25.0.tgz} - cpu: [x64] - os: [win32] - - '@samverschueren/stream-to-observable@0.3.1': - resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==, tarball: https://registry.npmmirror.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz} - engines: {node: '>=6'} - peerDependencies: - rxjs: '*' - zen-observable: '*' - peerDependenciesMeta: - rxjs: - optional: true - zen-observable: - optional: true - - '@selderee/plugin-htmlparser2@0.11.0': - resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==, tarball: https://registry.npmmirror.com/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz} - - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, tarball: https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.27.8.tgz} - - '@sindresorhus/is@0.14.0': - resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==, tarball: https://registry.npmmirror.com/@sindresorhus/is/-/is-0.14.0.tgz} - engines: {node: '>=6'} - - '@sinonjs/commons@1.8.6': - resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==, tarball: https://registry.npmmirror.com/@sinonjs/commons/-/commons-1.8.6.tgz} - - '@sinonjs/fake-timers@6.0.1': - resolution: {integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==, tarball: https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz} - - '@sketch-hq/sketch-file-format-ts@6.5.0': - resolution: {integrity: sha512-shaGl4ttFDpHjYBoMaZpciOtsi/lKvJ3VfcBYk6+PjjbFs6H5GxPAyhbiSqy3Vmx30aos284pd88QzD3rE6iag==, tarball: https://registry.npmmirror.com/@sketch-hq/sketch-file-format-ts/-/sketch-file-format-ts-6.5.0.tgz} - - '@stackblitz/sdk@1.11.0': - resolution: {integrity: sha512-DFQGANNkEZRzFk1/rDP6TcFdM82ycHE+zfl9C/M/jXlH68jiqHWHFMQURLELoD8koxvu/eW5uhg94NSAZlYrUQ==, tarball: https://registry.npmmirror.com/@stackblitz/sdk/-/sdk-1.11.0.tgz} - - '@stylelint/postcss-css-in-js@0.37.3': - resolution: {integrity: sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==, tarball: https://registry.npmmirror.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - peerDependencies: - postcss: '>=7.0.0' - postcss-syntax: '>=0.36.2' - - '@stylelint/postcss-css-in-js@0.38.0': - resolution: {integrity: sha512-XOz5CAe49kS95p5yRd+DAIWDojTjfmyAQ4bbDlXMdbZTQ5t0ThjSLvWI6JI2uiS7MFurVBkZ6zUqcimzcLTBoQ==, tarball: https://registry.npmmirror.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.38.0.tgz} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - peerDependencies: - postcss: '>=7.0.0' - postcss-syntax: '>=0.36.2' - - '@stylelint/postcss-markdown@0.36.2': - resolution: {integrity: sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==, tarball: https://registry.npmmirror.com/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz} - deprecated: 'Use the original unforked package instead: postcss-markdown' - peerDependencies: - postcss: '>=7.0.0' - postcss-syntax: '>=0.36.2' - - '@svgr/babel-plugin-add-jsx-attribute@6.5.1': - resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==, tarball: https://registry.npmmirror.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': - resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==, tarball: https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': - resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==, tarball: https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1': - resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==, tarball: https://registry.npmmirror.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-dynamic-title@6.5.1': - resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==, tarball: https://registry.npmmirror.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-em-dimensions@6.5.1': - resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==, tarball: https://registry.npmmirror.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-react-native-svg@6.5.1': - resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==, tarball: https://registry.npmmirror.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-svg-component@6.5.1': - resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==, tarball: https://registry.npmmirror.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz} - engines: {node: '>=12'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-preset@6.5.1': - resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==, tarball: https://registry.npmmirror.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/core@6.5.1': - resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==, tarball: https://registry.npmmirror.com/@svgr/core/-/core-6.5.1.tgz} - engines: {node: '>=10'} - - '@svgr/hast-util-to-babel-ast@6.5.1': - resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==, tarball: https://registry.npmmirror.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz} - engines: {node: '>=10'} - - '@svgr/plugin-jsx@6.5.1': - resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==, tarball: https://registry.npmmirror.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz} - engines: {node: '>=10'} - peerDependencies: - '@svgr/core': ^6.0.0 - - '@svgr/plugin-svgo@6.5.1': - resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==, tarball: https://registry.npmmirror.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz} - engines: {node: '>=10'} - peerDependencies: - '@svgr/core': '*' - - '@swc/core-darwin-arm64@1.4.2': - resolution: {integrity: sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==, tarball: https://registry.npmmirror.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.2.tgz} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.4.2': - resolution: {integrity: sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ==, tarball: https://registry.npmmirror.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.2.tgz} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.4.2': - resolution: {integrity: sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ==, tarball: https://registry.npmmirror.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.2.tgz} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.4.2': - resolution: {integrity: sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA==, tarball: https://registry.npmmirror.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.2.tgz} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@swc/core-linux-arm64-musl@1.4.2': - resolution: {integrity: sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw==, tarball: https://registry.npmmirror.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.2.tgz} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@swc/core-linux-x64-gnu@1.4.2': - resolution: {integrity: sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==, tarball: https://registry.npmmirror.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.2.tgz} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@swc/core-linux-x64-musl@1.4.2': - resolution: {integrity: sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==, tarball: https://registry.npmmirror.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.2.tgz} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@swc/core-win32-arm64-msvc@1.4.2': - resolution: {integrity: sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ==, tarball: https://registry.npmmirror.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.2.tgz} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.4.2': - resolution: {integrity: sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA==, tarball: https://registry.npmmirror.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.2.tgz} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.4.2': - resolution: {integrity: sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw==, tarball: https://registry.npmmirror.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.2.tgz} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.4.2': - resolution: {integrity: sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==, tarball: https://registry.npmmirror.com/@swc/core/-/core-1.4.2.tgz} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': ^0.5.0 - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==, tarball: https://registry.npmmirror.com/@swc/counter/-/counter-0.1.3.tgz} - - '@swc/helpers@0.5.1': - resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==, tarball: https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.1.tgz} - - '@swc/jest@0.2.37': - resolution: {integrity: sha512-CR2BHhmXKGxTiFr21DYPRHQunLkX3mNIFGFkxBGji6r9uyIR5zftTOVYj1e0sFNMV2H7mf/+vpaglqaryBtqfQ==, tarball: https://registry.npmmirror.com/@swc/jest/-/jest-0.2.37.tgz} - engines: {npm: '>= 7.0.0'} - peerDependencies: - '@swc/core': '*' - - '@swc/types@0.1.12': - resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==, tarball: https://registry.npmmirror.com/@swc/types/-/types-0.1.12.tgz} - - '@szmarczak/http-timer@1.1.2': - resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==, tarball: https://registry.npmmirror.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz} - engines: {node: '>=6'} - - '@testing-library/jest-dom@5.17.0': - resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==, tarball: https://registry.npmmirror.com/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz} - engines: {node: '>=8', npm: '>=6', yarn: '>=1'} - - '@testing-library/react-hooks@7.0.2': - resolution: {integrity: sha512-dYxpz8u9m4q1TuzfcUApqi8iFfR6R0FaMbr2hjZJy1uC8z+bO/K4v8Gs9eogGKYQop7QsrBTFkv/BCF7MzD2Cg==, tarball: https://registry.npmmirror.com/@testing-library/react-hooks/-/react-hooks-7.0.2.tgz} - engines: {node: '>=12'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - react-test-renderer: '>=16.9.0' - peerDependenciesMeta: - react-dom: - optional: true - react-test-renderer: - optional: true - - '@tootallnate/once@1.1.2': - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==, tarball: https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz} - engines: {node: '>= 6'} - - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==, tarball: https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz} - engines: {node: '>=10.13.0'} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, tarball: https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==, tarball: https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.8.tgz} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, tarball: https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz} - - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==, tarball: https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz} - - '@types/body-parser@1.19.5': - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==, tarball: https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz} - - '@types/bonjour@3.5.13': - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==, tarball: https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.13.tgz} - - '@types/cheerio@0.22.35': - resolution: {integrity: sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA==, tarball: https://registry.npmmirror.com/@types/cheerio/-/cheerio-0.22.35.tgz} - - '@types/connect-history-api-fallback@1.5.4': - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==, tarball: https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz} - - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==, tarball: https://registry.npmmirror.com/@types/connect/-/connect-3.4.38.tgz} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==, tarball: https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz} - - '@types/enzyme@3.10.18': - resolution: {integrity: sha512-RaO/TyyHZvXkpzinbMTZmd/S5biU4zxkvDsn22ujC29t9FMSzq8tnn8f2MxQ2P8GVhFRG5jTAL05DXKyTtpEQQ==, tarball: https://registry.npmmirror.com/@types/enzyme/-/enzyme-3.10.18.tgz} - - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==, tarball: https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz} - - '@types/eslint@7.29.0': - resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==, tarball: https://registry.npmmirror.com/@types/eslint/-/eslint-7.29.0.tgz} - - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==, tarball: https://registry.npmmirror.com/@types/eslint/-/eslint-9.6.1.tgz} - - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==, tarball: https://registry.npmmirror.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, tarball: https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz} - - '@types/express-serve-static-core@4.19.6': - resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==, tarball: https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz} - - '@types/express-serve-static-core@5.0.1': - resolution: {integrity: sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==, tarball: https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz} - - '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==, tarball: https://registry.npmmirror.com/@types/express/-/express-4.17.21.tgz} - - '@types/fs-extra@11.0.1': - resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==, tarball: https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-11.0.1.tgz} - - '@types/glob@7.2.0': - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==, tarball: https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz} - - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==, tarball: https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz} - - '@types/hapi__joi@17.1.9': - resolution: {integrity: sha512-oOMFT8vmCTFncsF1engrs04jatz8/Anwx3De9uxnOK4chgSEgWBvFtpSoJo8u3784JNO+ql5tzRR6phHoRnscQ==, tarball: https://registry.npmmirror.com/@types/hapi__joi/-/hapi__joi-17.1.9.tgz} - - '@types/hast@2.3.10': - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==, tarball: https://registry.npmmirror.com/@types/hast/-/hast-2.3.10.tgz} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==, tarball: https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz} - - '@types/hoist-non-react-statics@3.3.5': - resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==, tarball: https://registry.npmmirror.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz} - - '@types/html-minifier-terser@6.1.0': - resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==, tarball: https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz} - - '@types/http-errors@2.0.4': - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==, tarball: https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.4.tgz} - - '@types/http-proxy@1.17.15': - resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==, tarball: https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.15.tgz} - - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==, tarball: https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==, tarball: https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz} - - '@types/istanbul-reports@1.1.2': - resolution: {integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==, tarball: https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==, tarball: https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz} - - '@types/jest@26.0.24': - resolution: {integrity: sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==, tarball: https://registry.npmmirror.com/@types/jest/-/jest-26.0.24.tgz} - - '@types/js-cookie@2.2.7': - resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==, tarball: https://registry.npmmirror.com/@types/js-cookie/-/js-cookie-2.2.7.tgz} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, tarball: https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz} - - '@types/jsonfile@6.1.4': - resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==, tarball: https://registry.npmmirror.com/@types/jsonfile/-/jsonfile-6.1.4.tgz} - - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==, tarball: https://registry.npmmirror.com/@types/keyv/-/keyv-3.1.4.tgz} - - '@types/lodash@4.17.13': - resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==, tarball: https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.13.tgz} - - '@types/mdast@3.0.15': - resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==, tarball: https://registry.npmmirror.com/@types/mdast/-/mdast-3.0.15.tgz} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==, tarball: https://registry.npmmirror.com/@types/mdast/-/mdast-4.0.4.tgz} - - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==, tarball: https://registry.npmmirror.com/@types/mime/-/mime-1.3.5.tgz} - - '@types/minimatch@5.1.2': - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==, tarball: https://registry.npmmirror.com/@types/minimatch/-/minimatch-5.1.2.tgz} - - '@types/minimist@1.2.5': - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==, tarball: https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.5.tgz} - - '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==, tarball: https://registry.npmmirror.com/@types/ms/-/ms-0.7.34.tgz} - - '@types/node-forge@1.3.11': - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==, tarball: https://registry.npmmirror.com/@types/node-forge/-/node-forge-1.3.11.tgz} - - '@types/node@12.20.55': - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==, tarball: https://registry.npmmirror.com/@types/node/-/node-12.20.55.tgz} - - '@types/node@14.18.63': - resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==, tarball: https://registry.npmmirror.com/@types/node/-/node-14.18.63.tgz} - - '@types/node@17.0.45': - resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==, tarball: https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz} - - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==, tarball: https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==, tarball: https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.2.tgz} - - '@types/parse5@6.0.3': - resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==, tarball: https://registry.npmmirror.com/@types/parse5/-/parse5-6.0.3.tgz} - - '@types/prettier@2.7.3': - resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==, tarball: https://registry.npmmirror.com/@types/prettier/-/prettier-2.7.3.tgz} - - '@types/prop-types@15.7.13': - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==, tarball: https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.13.tgz} - - '@types/q@1.5.8': - resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==, tarball: https://registry.npmmirror.com/@types/q/-/q-1.5.8.tgz} - - '@types/qs@6.9.17': - resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==, tarball: https://registry.npmmirror.com/@types/qs/-/qs-6.9.17.tgz} - - '@types/ramda@0.29.3': - resolution: {integrity: sha512-Yh/RHkjN0ru6LVhSQtTkCRo6HXkfL9trot/2elzM/yXLJmbLm2v6kJc8yftTnwv1zvUob6TEtqI2cYjdqG3U0Q==, tarball: https://registry.npmmirror.com/@types/ramda/-/ramda-0.29.3.tgz} - - '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==, tarball: https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz} - - '@types/react-dom@16.9.24': - resolution: {integrity: sha512-Gcmq2JTDheyWn/1eteqyzzWKSqDjYU6KYsIvH7thb7CR5OYInAWOX+7WnKf6PaU/cbdOc4szJItcDEJO7UGmfA==, tarball: https://registry.npmmirror.com/@types/react-dom/-/react-dom-16.9.24.tgz} - - '@types/react-dom@18.3.1': - resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==, tarball: https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.3.1.tgz} - - '@types/react-test-renderer@18.3.0': - resolution: {integrity: sha512-HW4MuEYxfDbOHQsVlY/XtOvNHftCVEPhJF2pQXXwcUiUF+Oyb0usgp48HSgpK5rt8m9KZb22yqOeZm+rrVG8gw==, tarball: https://registry.npmmirror.com/@types/react-test-renderer/-/react-test-renderer-18.3.0.tgz} - - '@types/react@16.14.62': - resolution: {integrity: sha512-BWf7hqninZav6nerxXj+NeZT/mTpDeG6Lk2zREHAy63CrnXoOGPGtNqTFYFN/sqpSaREDP5otVV88axIXmKfGA==, tarball: https://registry.npmmirror.com/@types/react/-/react-16.14.62.tgz} - - '@types/react@18.3.12': - resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==, tarball: https://registry.npmmirror.com/@types/react/-/react-18.3.12.tgz} - - '@types/resolve@1.20.6': - resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==, tarball: https://registry.npmmirror.com/@types/resolve/-/resolve-1.20.6.tgz} - - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==, tarball: https://registry.npmmirror.com/@types/responselike/-/responselike-1.0.3.tgz} - - '@types/retry@0.12.2': - resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==, tarball: https://registry.npmmirror.com/@types/retry/-/retry-0.12.2.tgz} - - '@types/sax@1.2.7': - resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==, tarball: https://registry.npmmirror.com/@types/sax/-/sax-1.2.7.tgz} - - '@types/scheduler@0.16.8': - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==, tarball: https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.8.tgz} - - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==, tarball: https://registry.npmmirror.com/@types/semver/-/semver-7.5.8.tgz} - - '@types/send@0.17.4': - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==, tarball: https://registry.npmmirror.com/@types/send/-/send-0.17.4.tgz} - - '@types/serve-index@1.9.4': - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==, tarball: https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.4.tgz} - - '@types/serve-static@1.15.7': - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==, tarball: https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.7.tgz} - - '@types/sockjs@0.3.36': - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==, tarball: https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.36.tgz} - - '@types/stack-utils@1.0.1': - resolution: {integrity: sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==, tarball: https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-1.0.1.tgz} - - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==, tarball: https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.3.tgz} - - '@types/styled-components@5.1.34': - resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==, tarball: https://registry.npmmirror.com/@types/styled-components/-/styled-components-5.1.34.tgz} - - '@types/stylis@4.2.5': - resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==, tarball: https://registry.npmmirror.com/@types/stylis/-/stylis-4.2.5.tgz} - - '@types/supports-color@8.1.3': - resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==, tarball: https://registry.npmmirror.com/@types/supports-color/-/supports-color-8.1.3.tgz} - - '@types/testing-library__jest-dom@5.14.9': - resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==, tarball: https://registry.npmmirror.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz} - - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==, tarball: https://registry.npmmirror.com/@types/unist/-/unist-2.0.11.tgz} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==, tarball: https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz} - - '@types/webpack-env@1.18.5': - resolution: {integrity: sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==, tarball: https://registry.npmmirror.com/@types/webpack-env/-/webpack-env-1.18.5.tgz} - - '@types/ws@8.5.13': - resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==, tarball: https://registry.npmmirror.com/@types/ws/-/ws-8.5.13.tgz} - - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==, tarball: https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz} - - '@types/yargs@13.0.12': - resolution: {integrity: sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==, tarball: https://registry.npmmirror.com/@types/yargs/-/yargs-13.0.12.tgz} - - '@types/yargs@15.0.19': - resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==, tarball: https://registry.npmmirror.com/@types/yargs/-/yargs-15.0.19.tgz} - - '@types/yargs@16.0.9': - resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==, tarball: https://registry.npmmirror.com/@types/yargs/-/yargs-16.0.9.tgz} - - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==, tarball: https://registry.npmmirror.com/@types/yargs/-/yargs-17.0.33.tgz} - - '@typescript-eslint/eslint-plugin@4.33.0': - resolution: {integrity: sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==, tarball: https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - '@typescript-eslint/parser': ^4.1.1 - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/experimental-utils@4.33.0': - resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==, tarball: https://registry.npmmirror.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: '*' - - '@typescript-eslint/parser@4.33.0': - resolution: {integrity: sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==, tarball: https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-4.33.0.tgz} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@4.33.0': - resolution: {integrity: sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==, tarball: https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} - - '@typescript-eslint/scope-manager@5.62.0': - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==, tarball: https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/types@4.33.0': - resolution: {integrity: sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==, tarball: https://registry.npmmirror.com/@typescript-eslint/types/-/types-4.33.0.tgz} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} - - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==, tarball: https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.62.0.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/typescript-estree@4.33.0': - resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==, tarball: https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==, tarball: https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@5.62.0': - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==, tarball: https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.62.0.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@4.33.0': - resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==, tarball: https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} - - '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==, tarball: https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@umijs/ast@4.3.31': - resolution: {integrity: sha512-5kLHFwwpB6agbU+gFVgGMzFS69IEW7EmDqAQn45DINSW8H2iy6mm9cp4G0vf4xo/vU/bLqT9+39Uz+4YtZvkEg==, tarball: https://registry.npmmirror.com/@umijs/ast/-/ast-4.3.31.tgz} - - '@umijs/babel-preset-umi@4.3.31': - resolution: {integrity: sha512-aoRRl5+FRwu5QL5cJK0kZY+rNcnvjDWJgnihBrSpUHqTu+kIX8iWQG3vb6m8qAeTSR1828XL5EsrZ37kvu/LZQ==, tarball: https://registry.npmmirror.com/@umijs/babel-preset-umi/-/babel-preset-umi-4.3.31.tgz} - - '@umijs/bundler-esbuild@4.3.31': - resolution: {integrity: sha512-KgdnsKj9A00YWwrcvQCuoVpqaoviL3+yWarltkwWKInqDnHogOS30TiExAlpU0RhJIU3GNy6PVKJ/msAC/1OJA==, tarball: https://registry.npmmirror.com/@umijs/bundler-esbuild/-/bundler-esbuild-4.3.31.tgz} - hasBin: true - - '@umijs/bundler-mako@0.9.5': - resolution: {integrity: sha512-i9yTP/NHdogI9BXFMRTAQ9EISH4wb2VYtlV8iUAjI+8xAw0D27VrglH1RoNZebne948m3u3dihrw6LJ66AyJmg==, tarball: https://registry.npmmirror.com/@umijs/bundler-mako/-/bundler-mako-0.9.5.tgz} - - '@umijs/bundler-utils@4.3.31': - resolution: {integrity: sha512-A2+HpPZ1LntVxpdr/rIs6ovzEbjmgcLjg94QT6V75zg44XT7iGHp+ofC5jMdTvpt5fXBxsf2Q1KKXhf9sTfqWA==, tarball: https://registry.npmmirror.com/@umijs/bundler-utils/-/bundler-utils-4.3.31.tgz} - - '@umijs/bundler-vite@4.3.31': - resolution: {integrity: sha512-iQVybOIbNBRTKsN/QoP20+SCpFOSxjiZbKzu9VPf5prTwLlO0/AOc/HLFpTAiBWftIBbCYEXj6KPBlcL1OxJ2g==, tarball: https://registry.npmmirror.com/@umijs/bundler-vite/-/bundler-vite-4.3.31.tgz} - hasBin: true - - '@umijs/bundler-webpack@4.3.31': - resolution: {integrity: sha512-4UJrNYiax1ImET8Bk9Um+ChS1cyHFaU8QstI9INg97V1zpvAOFrIRHPUKAx/Vd5+BqUL3CX8KupkkT7laW42nQ==, tarball: https://registry.npmmirror.com/@umijs/bundler-webpack/-/bundler-webpack-4.3.31.tgz} - hasBin: true - - '@umijs/case-sensitive-paths-webpack-plugin@1.0.1': - resolution: {integrity: sha512-kDKJ8yTarxwxGJDInG33hOpaQRZ//XpNuuznQ/1Mscypw6kappzFmrBr2dOYave++K7JHouoANF354UpbEQw0Q==, tarball: https://registry.npmmirror.com/@umijs/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-1.0.1.tgz} - - '@umijs/core@4.3.31': - resolution: {integrity: sha512-vUwa4WNyrQijvk23JEP8cGKdSYasRtPwMELanBbsmh+5N2Oratn5ST4DBCstrq90o28RPnAl7XJ2nJkWQgY8hQ==, tarball: https://registry.npmmirror.com/@umijs/core/-/core-4.3.31.tgz} - - '@umijs/did-you-know@1.0.3': - resolution: {integrity: sha512-9EZ+rgY9+2HEaE+Z9dGkal2ccw8L4uuz77tCB5WpskW7NBZX5nOj82sqF/shEtA5tU3SWO/Mi4n35K3iONvDtw==, tarball: https://registry.npmmirror.com/@umijs/did-you-know/-/did-you-know-1.0.3.tgz} - - '@umijs/es-module-parser-darwin-arm64@0.0.7': - resolution: {integrity: sha512-1QeNupekuVYVvL4UHyCRq4ISP2PNk4rDd9UOPONW+KpqTyP9p7RfgGpwB0VLPaFSu2ADtm0XZyIaYEGPY6zuDw==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-darwin-arm64/-/es-module-parser-darwin-arm64-0.0.7.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@umijs/es-module-parser-darwin-x64@0.0.7': - resolution: {integrity: sha512-FBFmfigmToPc9qBCW7wHiTYpqnLdPbAvoMGOydzAu2NspdPEF7TfILcr8vCPNbNe3vCobS+T/YM1dP+SagERlA==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-darwin-x64/-/es-module-parser-darwin-x64-0.0.7.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@umijs/es-module-parser-linux-arm-gnueabihf@0.0.7': - resolution: {integrity: sha512-AXfmg3htkadLGsXUyiyrTig4omGCWIN4l+HS7Qapqv0wlfFYSpC0KPemjyBQgzXO70tDcT+1FNhGjIy+yr2pIQ==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-linux-arm-gnueabihf/-/es-module-parser-linux-arm-gnueabihf-0.0.7.tgz} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@umijs/es-module-parser-linux-arm64-gnu@0.0.7': - resolution: {integrity: sha512-2wSdChFc39fPJwvS8tRq+jx8qNlIwrjRk1hb3N5o0rJR+rqt+ceAyNPbYwpNBmUHW7xtmDQvJUeinvr7hIBP+w==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-linux-arm64-gnu/-/es-module-parser-linux-arm64-gnu-0.0.7.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@umijs/es-module-parser-linux-arm64-musl@0.0.7': - resolution: {integrity: sha512-cqQffARWkmQ3n1RYNKZR3aD6X8YaP6u1maASjDgPQOpZMAlv/OSDrM/7iGujWTs0PD0haockNG9/DcP6lgPHMw==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-linux-arm64-musl/-/es-module-parser-linux-arm64-musl-0.0.7.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@umijs/es-module-parser-linux-x64-gnu@0.0.7': - resolution: {integrity: sha512-PHrKHtT665Za0Ydjch4ACrNpRU+WIIden12YyF1CtMdhuLDSoU6UfdhF3NoDbgEUcXVDX/ftOqmj0SbH3R1uew==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-linux-x64-gnu/-/es-module-parser-linux-x64-gnu-0.0.7.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@umijs/es-module-parser-linux-x64-musl@0.0.7': - resolution: {integrity: sha512-cyZvUK5lcECLWzLp/eU1lFlCETcz+LEb+wrdARQSST1dgoIGZsT4cqM1WzYmdZNk3o883tiZizLt58SieEiHBQ==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-linux-x64-musl/-/es-module-parser-linux-x64-musl-0.0.7.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@umijs/es-module-parser-win32-arm64-msvc@0.0.7': - resolution: {integrity: sha512-V7WxnUI88RboSl0RWLNQeKBT7EDW35fW6Tn92zqtoHHxrhAIL9DtDyvC8REP4qTxeZ6Oej/Ax5I6IjsLx3yTOg==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-win32-arm64-msvc/-/es-module-parser-win32-arm64-msvc-0.0.7.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@umijs/es-module-parser-win32-x64-msvc@0.0.7': - resolution: {integrity: sha512-X3Pqy0l38hg6wMPquPeMHuoHU+Cx+wzyz32SVYCta+RPJQ7n9PjrEBiIuVAw5+GJZjSABN7LVr8u/n0RZT9EQA==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-win32-x64-msvc/-/es-module-parser-win32-x64-msvc-0.0.7.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@umijs/es-module-parser@0.0.7': - resolution: {integrity: sha512-x47CMi/Hw7Nkz3RXTUqlldH/UM+Tcmw2PziV3k+itJqTFJc8oVx3lzdUgCnG+eL3ZtmLPbOEBhPb30V0NytNDQ==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser/-/es-module-parser-0.0.7.tgz} - engines: {node: '>= 10'} - - '@umijs/fabric@2.14.1': - resolution: {integrity: sha512-fOyXcbViOB+/jW+g2rCiK9XjSZVn4OzFuMZpSCriCdR/KxhxLTokvJWFm3CzBEmg9vXfrBFQ4c/ykmqoVacHtw==, tarball: https://registry.npmmirror.com/@umijs/fabric/-/fabric-2.14.1.tgz} - hasBin: true - - '@umijs/history@5.3.1': - resolution: {integrity: sha512-/e0cEGrR2bIWQD7pRl3dl9dcyRGeC9hoW0OCvUTT/hjY0EfUrkd6G8ZanVghPMpDuY5usxq9GVcvrT8KNXLWvA==, tarball: https://registry.npmmirror.com/@umijs/history/-/history-5.3.1.tgz} - - '@umijs/lint@4.3.31': - resolution: {integrity: sha512-cPLC0o9tDhyOhRp5N1fPciL2u5eEKCZFfkKTd7MtgmSZ7wl0T9X8aMLzjtuq4hNQ6CtXje/dOHDVW8lYfMzLAA==, tarball: https://registry.npmmirror.com/@umijs/lint/-/lint-4.3.31.tgz} - - '@umijs/mako-darwin-arm64@0.9.5': - resolution: {integrity: sha512-2WCIp8ypVgIqXb8KS/pOp/elQYkT4bcqTLHsQx7FsMVS4iTDH3bIIfr2PbdBN6fgXZAZViync5kdk/vouy0zAA==, tarball: https://registry.npmmirror.com/@umijs/mako-darwin-arm64/-/mako-darwin-arm64-0.9.5.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@umijs/mako-darwin-x64@0.9.5': - resolution: {integrity: sha512-DmubJdeQSmIdwIihvj5xmammm6erqgEUl/hxaBEKxTL/xuoFh8KXTCt8Q/Avk/M/o+tlSF6ffXQYCgTB+M2XeA==, tarball: https://registry.npmmirror.com/@umijs/mako-darwin-x64/-/mako-darwin-x64-0.9.5.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@umijs/mako-linux-arm64-gnu@0.9.5': - resolution: {integrity: sha512-XXIwvHtsEkXvVFnWw4UCjFcbXvFOiq7SHFb4Puxd8zmROr5/dxrhukn9ta43VePMhb34mCdgWaC3vVITIz5DEg==, tarball: https://registry.npmmirror.com/@umijs/mako-linux-arm64-gnu/-/mako-linux-arm64-gnu-0.9.5.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@umijs/mako-linux-arm64-musl@0.9.5': - resolution: {integrity: sha512-Hwg44bT5FCP5AcQ0IpMzTDP4hypaB6KoNrG2QVeqxhnkitXkixpsex09vkaPYXrY5bQu/MkNoJCJDnhEJp/v/Q==, tarball: https://registry.npmmirror.com/@umijs/mako-linux-arm64-musl/-/mako-linux-arm64-musl-0.9.5.tgz} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@umijs/mako-linux-x64-gnu@0.9.5': - resolution: {integrity: sha512-Dd+D9F/KVWnxVyKr/66kxscIKIVUMEFKrevZ10Z+VbiRmokXeTUNJkxfZ2tIj9h/pHqgVbSUykyWon1dQsQRlw==, tarball: https://registry.npmmirror.com/@umijs/mako-linux-x64-gnu/-/mako-linux-x64-gnu-0.9.5.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@umijs/mako-linux-x64-musl@0.9.5': - resolution: {integrity: sha512-Aoj2pbdKg1NTHWd9vFNQiNHPeBo6gszTZSOJq9N44wI6dS92OuWd0z/NNG0LAu+fb2rMD3fCr1zHJbO7ietNxw==, tarball: https://registry.npmmirror.com/@umijs/mako-linux-x64-musl/-/mako-linux-x64-musl-0.9.5.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@umijs/mako-win32-ia32-msvc@0.9.5': - resolution: {integrity: sha512-JjePjho+TzgeB02s6oXG8KEpjOojwSFtv3vS0xJhKO0SPv4j7zk0s+5KNv3ZLy2Hx1hKITvmtoQFx6CAmFrKEQ==, tarball: https://registry.npmmirror.com/@umijs/mako-win32-ia32-msvc/-/mako-win32-ia32-msvc-0.9.5.tgz} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@umijs/mako-win32-x64-msvc@0.9.5': - resolution: {integrity: sha512-5UUcvZlGiJ7FsvjfuV8pk5KbLFCsPZOQ0iFAjzXjoTOIBFQ8Zh6QI5pjiDpbnJWbcPX9NNmNGdgqayMfq1q60w==, tarball: https://registry.npmmirror.com/@umijs/mako-win32-x64-msvc/-/mako-win32-x64-msvc-0.9.5.tgz} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@umijs/mako@0.9.5': - resolution: {integrity: sha512-NNuPXHwkXifFRhRAlAgu/vYwGExNNJmExtonJTrao7Yr3QEwPToEgPtsJQrGVKZEEIn/IiTb2YDF/ZAzO84Pxw==, tarball: https://registry.npmmirror.com/@umijs/mako/-/mako-0.9.5.tgz} - engines: {node: '>= 16'} - hasBin: true - - '@umijs/mfsu@4.3.31': - resolution: {integrity: sha512-fnUg1S24OvOa57TwBy9gDcb5q7zxLYTUcjjknn54Kj3ytl8xMn1ozK1Xhynq2tnqc8yqHC8H3r3cjdSZ4aMwsg==, tarball: https://registry.npmmirror.com/@umijs/mfsu/-/mfsu-4.3.31.tgz} - - '@umijs/plugin-run@4.3.31': - resolution: {integrity: sha512-GSv3GPqpludK5KHH1EItHib/tg/hBv3XZH06dWfOGXKr5eUAojztN/dIMJD+0XFtFEmS1iiIJKgRtOrU1ofknQ==, tarball: https://registry.npmmirror.com/@umijs/plugin-run/-/plugin-run-4.3.31.tgz} - - '@umijs/preset-umi@4.3.31': - resolution: {integrity: sha512-UmIdVkr2PkZsbJG1QaaqEvJAAMiG4RpoXoDdbo/IGMgCy6juaukkmEUcNa/nDG+Pm8oskQKUwBdNFY5jLqMaYg==, tarball: https://registry.npmmirror.com/@umijs/preset-umi/-/preset-umi-4.3.31.tgz} - - '@umijs/react-refresh-webpack-plugin@0.5.11': - resolution: {integrity: sha512-RtFvB+/GmjRhpHcqNgnw8iWZpTlxOnmNxi8eDcecxMmxmSgeDj25LV0jr4Q6rOhv3GTIfVGBhkwz+khGT5tfmg==, tarball: https://registry.npmmirror.com/@umijs/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz} - engines: {node: '>= 10.13'} - peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <5.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - - '@umijs/renderer-react@4.3.31': - resolution: {integrity: sha512-mEWeSvv/XQHgBh8jzdRYgEykqGysLy2KJwBwClzNS1PdTsA9x6yPTHYmC0/LTkaUieJEpZbCSZMJ8G0gVXoJDw==, tarball: https://registry.npmmirror.com/@umijs/renderer-react/-/renderer-react-4.3.31.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - '@umijs/server@4.3.31': - resolution: {integrity: sha512-dR1sjPeenTsdYRNeh8eF+ilN+aOuxdBi6OG6sywBAsq2y9NgSOS7+xS9K80rzrelaYm654S1JnGQjYzTQBZODw==, tarball: https://registry.npmmirror.com/@umijs/server/-/server-4.3.31.tgz} - - '@umijs/test@4.3.31': - resolution: {integrity: sha512-4W1qYAcgWYp2Gd2lHCh+ZyMUJ6yZQiLrhdclX04D6iZi2zx+fQeBE3/wWJoBdFmu/gi6J6US8T9D6va4ddxp3g==, tarball: https://registry.npmmirror.com/@umijs/test/-/test-4.3.31.tgz} - - '@umijs/ui@3.0.1': - resolution: {integrity: sha512-zcz37AJH0xt/6XVVbyO/hmsK9Hq4vH23HZ4KYVi5A8rbM9KeJkJigTS7ELOdArawZhVNGe+h3a5Oixs4a2QsWw==, tarball: https://registry.npmmirror.com/@umijs/ui/-/ui-3.0.1.tgz} - - '@umijs/utils@4.3.31': - resolution: {integrity: sha512-UyJbN9f0jWlTrVbHb8/3ckpkEApEfRskSSZD9sAL4QMs99i1+9MJnO/GowpyGJUY+9ZhgwIhsc2AJ35r21v2kg==, tarball: https://registry.npmmirror.com/@umijs/utils/-/utils-4.3.31.tgz} - - '@umijs/zod2ts@4.3.31': - resolution: {integrity: sha512-CPZTG8UfMAc9E60QBYLOJ5KA0FGcl6D08YaRgLQFmUdWyHgCXBR2ZHHCWMHPgUXLd5dlokJ49/jFPxKEKfdcDA==, tarball: https://registry.npmmirror.com/@umijs/zod2ts/-/zod2ts-4.3.31.tgz} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==, tarball: https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz} - - '@vitejs/plugin-react@4.0.0': - resolution: {integrity: sha512-HX0XzMjL3hhOYm+0s95pb0Z7F8O81G7joUHgfDd/9J/ZZf5k4xX6QAMFkKsHFxaHlf6X7GD7+XuaZ66ULiJuhQ==, tarball: https://registry.npmmirror.com/@vitejs/plugin-react/-/plugin-react-4.0.0.tgz} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 - - '@webassemblyjs/ast@1.14.1': - resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==, tarball: https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.14.1.tgz} - - '@webassemblyjs/floating-point-hex-parser@1.13.2': - resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==, tarball: https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz} - - '@webassemblyjs/helper-api-error@1.13.2': - resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz} - - '@webassemblyjs/helper-buffer@1.14.1': - resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz} - - '@webassemblyjs/helper-numbers@1.13.2': - resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz} - - '@webassemblyjs/helper-wasm-bytecode@1.13.2': - resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz} - - '@webassemblyjs/helper-wasm-section@1.14.1': - resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz} - - '@webassemblyjs/ieee754@1.13.2': - resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==, tarball: https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz} - - '@webassemblyjs/leb128@1.13.2': - resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==, tarball: https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz} - - '@webassemblyjs/utf8@1.13.2': - resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==, tarball: https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz} - - '@webassemblyjs/wasm-edit@1.14.1': - resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz} - - '@webassemblyjs/wasm-gen@1.14.1': - resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz} - - '@webassemblyjs/wasm-opt@1.14.1': - resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz} - - '@webassemblyjs/wasm-parser@1.14.1': - resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz} - - '@webassemblyjs/wast-printer@1.14.1': - resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==, tarball: https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz} - - '@webpack-cli/configtest@2.1.1': - resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==, tarball: https://registry.npmmirror.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz} - engines: {node: '>=14.15.0'} - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - - '@webpack-cli/info@2.0.2': - resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==, tarball: https://registry.npmmirror.com/@webpack-cli/info/-/info-2.0.2.tgz} - engines: {node: '>=14.15.0'} - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - - '@webpack-cli/serve@2.0.5': - resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==, tarball: https://registry.npmmirror.com/@webpack-cli/serve/-/serve-2.0.5.tgz} - engines: {node: '>=14.15.0'} - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - webpack-dev-server: '*' - peerDependenciesMeta: - webpack-dev-server: - optional: true - - '@xobotyi/scrollbar-width@1.9.5': - resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==, tarball: https://registry.npmmirror.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz} - - '@xtuc/ieee754@1.2.0': - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, tarball: https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz} - - '@xtuc/long@4.2.2': - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, tarball: https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz} - - abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==, tarball: https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz} - deprecated: Use your platform's native atob() and btoa() methods instead - - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==, tarball: https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==, tarball: https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz} - engines: {node: '>= 0.6'} - - acorn-globals@4.3.4: - resolution: {integrity: sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==, tarball: https://registry.npmmirror.com/acorn-globals/-/acorn-globals-4.3.4.tgz} - - acorn-globals@6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==, tarball: https://registry.npmmirror.com/acorn-globals/-/acorn-globals-6.0.0.tgz} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, tarball: https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn-walk@6.2.0: - resolution: {integrity: sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==, tarball: https://registry.npmmirror.com/acorn-walk/-/acorn-walk-6.2.0.tgz} - engines: {node: '>=0.4.0'} - - acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==, tarball: https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz} - engines: {node: '>=0.4.0'} - - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==, tarball: https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.4.tgz} - engines: {node: '>=0.4.0'} - - acorn@5.7.4: - resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==, tarball: https://registry.npmmirror.com/acorn/-/acorn-5.7.4.tgz} - engines: {node: '>=0.4.0'} - hasBin: true - - acorn@6.4.2: - resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==, tarball: https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz} - engines: {node: '>=0.4.0'} - hasBin: true - - acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, tarball: https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz} - engines: {node: '>=0.4.0'} - hasBin: true - - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==, tarball: https://registry.npmmirror.com/acorn/-/acorn-8.14.0.tgz} - engines: {node: '>=0.4.0'} - hasBin: true - - add-stream@1.0.0: - resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==, tarball: https://registry.npmmirror.com/add-stream/-/add-stream-1.0.0.tgz} - - address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==, tarball: https://registry.npmmirror.com/address/-/address-1.2.2.tgz} - engines: {node: '>= 10.0.0'} - - agent-base@4.3.0: - resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==, tarball: https://registry.npmmirror.com/agent-base/-/agent-base-4.3.0.tgz} - engines: {node: '>= 4.0.0'} - - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==, tarball: https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz} - engines: {node: '>= 6.0.0'} - - agentkeepalive@2.2.0: - resolution: {integrity: sha512-TnB6ziK363p7lR8QpeLC8aMr8EGYBKZTpgzQLfqTs3bR0Oo5VbKdwKf8h0dSzsYrB7lSCgfJnMZKqShvlq5Oyg==, tarball: https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz} - engines: {node: '>= 0.10.0'} - - agentkeepalive@3.5.3: - resolution: {integrity: sha512-yqXL+k5rr8+ZRpOAntkaaRgWgE5o8ESAj5DyRmVTCSoZxXmqemb9Dd7T4i5UzwuERdLAJUy6XzR9zFVuf0kzkw==, tarball: https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-3.5.3.tgz} - engines: {node: '>= 4.0.0'} - - aggregate-error@4.0.1: - resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==, tarball: https://registry.npmmirror.com/aggregate-error/-/aggregate-error-4.0.1.tgz} - engines: {node: '>=12'} - - ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==, tarball: https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==, tarball: https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz} - peerDependencies: - ajv: ^6.9.1 - - ajv-keywords@5.1.0: - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==, tarball: https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz} - peerDependencies: - ajv: ^8.8.2 - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, tarball: https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz} - - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==, tarball: https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz} - - algoliasearch@3.35.1: - resolution: {integrity: sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ==, tarball: https://registry.npmmirror.com/algoliasearch/-/algoliasearch-3.35.1.tgz} - engines: {node: '>=0.8'} - - algoliasearch@5.13.0: - resolution: {integrity: sha512-04lyQX3Ev/oLYQx+aagamQDXvkUUfX1mwrLrus15+9fNaYj28GDxxEzbwaRfvmHFcZyoxvup7mMtDTTw8SrTEQ==, tarball: https://registry.npmmirror.com/algoliasearch/-/algoliasearch-5.13.0.tgz} - engines: {node: '>= 14.0.0'} - - align-text@0.1.4: - resolution: {integrity: sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==, tarball: https://registry.npmmirror.com/align-text/-/align-text-0.1.4.tgz} - engines: {node: '>=0.10.0'} - - amdefine@1.0.1: - resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==, tarball: https://registry.npmmirror.com/amdefine/-/amdefine-1.0.1.tgz} - engines: {node: '>=0.4.2'} - - animated-scroll-to@2.3.0: - resolution: {integrity: sha512-PT/5MSKCWQaK2kuOl2HT2KJMuJEvUS4/TgMhWy82c2EmF74/CIkvPBPKOvd8nMYP6Higo7xCn49/iSW9BccMoQ==, tarball: https://registry.npmmirror.com/animated-scroll-to/-/animated-scroll-to-2.3.0.tgz} - - ansi-align@2.0.0: - resolution: {integrity: sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==, tarball: https://registry.npmmirror.com/ansi-align/-/ansi-align-2.0.0.tgz} - - ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==, tarball: https://registry.npmmirror.com/ansi-align/-/ansi-align-3.0.1.tgz} - - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, tarball: https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.3.tgz} - engines: {node: '>=6'} - - ansi-escapes@3.2.0: - resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz} - engines: {node: '>=4'} - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz} - engines: {node: '>=8'} - - ansi-escapes@5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz} - engines: {node: '>=12'} - - ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==, tarball: https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz} - engines: {'0': node >= 0.8.0} - hasBin: true - - ansi-regex@2.1.1: - resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz} - engines: {node: '>=0.10.0'} - - ansi-regex@3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz} - engines: {node: '>=4'} - - ansi-regex@4.1.1: - resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz} - engines: {node: '>=6'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz} - engines: {node: '>=8'} - - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.1.0.tgz} - engines: {node: '>=12'} - - ansi-styles@2.2.1: - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz} - engines: {node: '>=0.10.0'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz} - engines: {node: '>=10'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz} - engines: {node: '>=12'} - - antd@4.24.16: - resolution: {integrity: sha512-zZrK4UYxHtU6tGOOf0uG/kBRx1kTvypfuSB3GqE/SBQxFhZ/TZ+yj7Z1qwI8vGfMtUUJdLeuoCAqGDa1zPsXnQ==, tarball: https://registry.npmmirror.com/antd/-/antd-4.24.16.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - antd@5.22.0: - resolution: {integrity: sha512-hZE8riK8+LWsXUnPpbluvBxjnwXRh34s1yIND7g5WUV/AVZtPjt81jOoXCbKw5SJ8ORIx2o7nlaa4PJ3Luwisg==, tarball: https://registry.npmmirror.com/antd/-/antd-5.22.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - any-observable@0.3.0: - resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==, tarball: https://registry.npmmirror.com/any-observable/-/any-observable-0.3.0.tgz} - engines: {node: '>=6'} - peerDependencies: - rxjs: '*' - zenObservable: '*' - peerDependenciesMeta: - rxjs: - optional: true - zenObservable: - optional: true - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, tarball: https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz} - - anymatch@2.0.0: - resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz} - engines: {node: '>= 8'} - - aproba@1.2.0: - resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==, tarball: https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==, tarball: https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, tarball: https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, tarball: https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz} - - aria-hidden@1.2.4: - resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==, tarball: https://registry.npmmirror.com/aria-hidden/-/aria-hidden-1.2.4.tgz} - engines: {node: '>=10'} - - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==, tarball: https://registry.npmmirror.com/aria-query/-/aria-query-5.3.2.tgz} - engines: {node: '>= 0.4'} - - arr-diff@4.0.0: - resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==, tarball: https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz} - engines: {node: '>=0.10.0'} - - arr-flatten@1.1.0: - resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==, tarball: https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz} - engines: {node: '>=0.10.0'} - - arr-union@3.1.0: - resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==, tarball: https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz} - engines: {node: '>=0.10.0'} - - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==, tarball: https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz} - engines: {node: '>= 0.4'} - - array-equal@1.0.2: - resolution: {integrity: sha512-gUHx76KtnhEgB3HOuFYiCm3FIdEs6ocM2asHvNTkfu/Y09qQVrrVVaOKENmS2KkSaGoxgXNqC+ZVtR/n0MOkSA==, tarball: https://registry.npmmirror.com/array-equal/-/array-equal-1.0.2.tgz} - - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==, tarball: https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz} - - array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==, tarball: https://registry.npmmirror.com/array-ify/-/array-ify-1.0.0.tgz} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==, tarball: https://registry.npmmirror.com/array-includes/-/array-includes-3.1.8.tgz} - engines: {node: '>= 0.4'} - - array-tree-filter@2.1.0: - resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==, tarball: https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz} - - array-union@1.0.2: - resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==, tarball: https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz} - engines: {node: '>=0.10.0'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, tarball: https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz} - engines: {node: '>=8'} - - array-uniq@1.0.3: - resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==, tarball: https://registry.npmmirror.com/array-uniq/-/array-uniq-1.0.3.tgz} - engines: {node: '>=0.10.0'} - - array-unique@0.3.2: - resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==, tarball: https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz} - engines: {node: '>=0.10.0'} - - array.prototype.filter@1.0.4: - resolution: {integrity: sha512-r+mCJ7zXgXElgR4IRC+fkvNCeoaavWBs6EdCso5Tbcf+iEMKzBU/His60lt34WEZ9vlb8wDkZvQGcVI5GwkfoQ==, tarball: https://registry.npmmirror.com/array.prototype.filter/-/array.prototype.filter-1.0.4.tgz} - engines: {node: '>= 0.4'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==, tarball: https://registry.npmmirror.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==, tarball: https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==, tarball: https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz} - engines: {node: '>= 0.4'} - - array.prototype.reduce@1.0.7: - resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==, tarball: https://registry.npmmirror.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==, tarball: https://registry.npmmirror.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==, tarball: https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz} - engines: {node: '>= 0.4'} - - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==, tarball: https://registry.npmmirror.com/arrify/-/arrify-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==, tarball: https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz} - - asn1.js@4.10.1: - resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==, tarball: https://registry.npmmirror.com/asn1.js/-/asn1.js-4.10.1.tgz} - - asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==, tarball: https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz} - - assert-okam@1.5.0: - resolution: {integrity: sha512-pchhPo40i8GsTj/7h6P8LSSzwRErnh2nCEiwXNTxy4VYw6lSesSac4rTKqwsA+fOZdj6FT81Mb9U1vIZEua1EQ==, tarball: https://registry.npmmirror.com/assert-okam/-/assert-okam-1.5.0.tgz} - - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==, tarball: https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz} - engines: {node: '>=0.8'} - - assert@1.5.1: - resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==, tarball: https://registry.npmmirror.com/assert/-/assert-1.5.1.tgz} - - assign-symbols@1.0.0: - resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==, tarball: https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, tarball: https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz} - engines: {node: '>=8'} - - astring@1.9.0: - resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==, tarball: https://registry.npmmirror.com/astring/-/astring-1.9.0.tgz} - hasBin: true - - async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==, tarball: https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz} - - async-validator@4.2.5: - resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz} - - async@2.6.4: - resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==, tarball: https://registry.npmmirror.com/async/-/async-2.6.4.tgz} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==, tarball: https://registry.npmmirror.com/async/-/async-3.2.6.tgz} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, tarball: https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz} - - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, tarball: https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz} - engines: {node: '>= 4.0.0'} - - atob@2.1.2: - resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==, tarball: https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz} - engines: {node: '>= 4.5.0'} - hasBin: true - - atomic-sleep@1.0.0: - resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==, tarball: https://registry.npmmirror.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz} - engines: {node: '>=8.0.0'} - - atomically@2.0.3: - resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==, tarball: https://registry.npmmirror.com/atomically/-/atomically-2.0.3.tgz} - - autocomplete.js@0.36.0: - resolution: {integrity: sha512-jEwUXnVMeCHHutUt10i/8ZiRaCb0Wo+ZyKxeGsYwBDtw6EJHqEeDrq4UwZRD8YBSvp3g6klP678il2eeiVXN2Q==, tarball: https://registry.npmmirror.com/autocomplete.js/-/autocomplete.js-0.36.0.tgz} - - autoprefixer@10.4.20: - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==, tarball: https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.20.tgz} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - autoprefixer@9.8.8: - resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==, tarball: https://registry.npmmirror.com/autoprefixer/-/autoprefixer-9.8.8.tgz} - hasBin: true - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, tarball: https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz} - engines: {node: '>= 0.4'} - - aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==, tarball: https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz} - - aws4@1.13.2: - resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==, tarball: https://registry.npmmirror.com/aws4/-/aws4-1.13.2.tgz} - - axios@0.18.1: - resolution: {integrity: sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==, tarball: https://registry.npmmirror.com/axios/-/axios-0.18.1.tgz} - deprecated: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410 - - babel-jest@24.9.0: - resolution: {integrity: sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==, tarball: https://registry.npmmirror.com/babel-jest/-/babel-jest-24.9.0.tgz} - engines: {node: '>= 6'} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-jest@26.6.3: - resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==, tarball: https://registry.npmmirror.com/babel-jest/-/babel-jest-26.6.3.tgz} - engines: {node: '>= 10.14.2'} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==, tarball: https://registry.npmmirror.com/babel-jest/-/babel-jest-29.7.0.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-loader@8.4.1: - resolution: {integrity: sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==, tarball: https://registry.npmmirror.com/babel-loader/-/babel-loader-8.4.1.tgz} - engines: {node: '>= 8.9'} - peerDependencies: - '@babel/core': ^7.0.0 - webpack: '>=2' - - babel-plugin-dynamic-import-node@2.3.3: - resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==, tarball: https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz} - - babel-plugin-istanbul@5.2.0: - resolution: {integrity: sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==, tarball: https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz} - engines: {node: '>=6'} - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==, tarball: https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@24.9.0: - resolution: {integrity: sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==, tarball: https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz} - engines: {node: '>= 6'} - - babel-plugin-jest-hoist@26.6.2: - resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==, tarball: https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==, tarball: https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==, tarball: https://registry.npmmirror.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz} - engines: {node: '>=10', npm: '>=6'} - - babel-plugin-named-asset-import@0.3.8: - resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==, tarball: https://registry.npmmirror.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz} - peerDependencies: - '@babel/core': ^7.1.0 - - babel-plugin-polyfill-corejs2@0.4.12: - resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.10.6: - resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-regenerator@0.6.3: - resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-react-compiler@0.0.0-experimental-c23de8d-20240515: - resolution: {integrity: sha512-0XN2gmpT55QtAz5n7d5g91y1AuO9tRhWBaLgCRyc4ExHrlr7+LfxW+YTb3mOwxngkkiggwM8HyYsaEK9MqhnlQ==, tarball: https://registry.npmmirror.com/babel-plugin-react-compiler/-/babel-plugin-react-compiler-0.0.0-experimental-c23de8d-20240515.tgz} - - babel-plugin-transform-react-remove-prop-types@0.4.24: - resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==, tarball: https://registry.npmmirror.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz} - - babel-polyfill@6.26.0: - resolution: {integrity: sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==, tarball: https://registry.npmmirror.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz} - - babel-preset-current-node-syntax@1.1.0: - resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==, tarball: https://registry.npmmirror.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-jest@24.9.0: - resolution: {integrity: sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==, tarball: https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz} - engines: {node: '>= 6'} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-jest@26.6.2: - resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==, tarball: https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==, tarball: https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-react-app@10.0.1: - resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==, tarball: https://registry.npmmirror.com/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz} - - babel-runtime@6.26.0: - resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==, tarball: https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz} - - babel-types@6.26.0: - resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==, tarball: https://registry.npmmirror.com/babel-types/-/babel-types-6.26.0.tgz} - - bail@1.0.5: - resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==, tarball: https://registry.npmmirror.com/bail/-/bail-1.0.5.tgz} - - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==, tarball: https://registry.npmmirror.com/bail/-/bail-2.0.2.tgz} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz} - - balanced-match@2.0.0: - resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-2.0.0.tgz} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, tarball: https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz} - - base@0.11.2: - resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==, tarball: https://registry.npmmirror.com/base/-/base-0.11.2.tgz} - engines: {node: '>=0.10.0'} - - batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==, tarball: https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz} - - bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==, tarball: https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz} - - better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==, tarball: https://registry.npmmirror.com/better-path-resolve/-/better-path-resolve-1.0.0.tgz} - engines: {node: '>=4'} - - big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==, tarball: https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz} - engines: {node: '>=0.6'} - - big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, tarball: https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz} - engines: {node: '>=8'} - - binaryextensions@2.3.0: - resolution: {integrity: sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==, tarball: https://registry.npmmirror.com/binaryextensions/-/binaryextensions-2.3.0.tgz} - engines: {node: '>=0.8'} - - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==, tarball: https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz} - - bl@1.2.3: - resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==, tarball: https://registry.npmmirror.com/bl/-/bl-1.2.3.tgz} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, tarball: https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz} - - bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, tarball: https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz} - - bn.js@4.12.1: - resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==, tarball: https://registry.npmmirror.com/bn.js/-/bn.js-4.12.1.tgz} - - bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==, tarball: https://registry.npmmirror.com/bn.js/-/bn.js-5.2.1.tgz} - - body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==, tarball: https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - bonjour-service@1.2.1: - resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==, tarball: https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.2.1.tgz} - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, tarball: https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz} - - boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==, tarball: https://registry.npmmirror.com/boolean/-/boolean-3.2.0.tgz} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - - boxen@1.3.0: - resolution: {integrity: sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==, tarball: https://registry.npmmirror.com/boxen/-/boxen-1.3.0.tgz} - engines: {node: '>=4'} - - boxen@8.0.1: - resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==, tarball: https://registry.npmmirror.com/boxen/-/boxen-8.0.1.tgz} - engines: {node: '>=18'} - - bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==, tarball: https://registry.npmmirror.com/bplist-parser/-/bplist-parser-0.2.0.tgz} - engines: {node: '>= 5.10.0'} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz} - - braces@2.3.2: - resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, tarball: https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz} - engines: {node: '>=0.10.0'} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz} - engines: {node: '>=8'} - - brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==, tarball: https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz} - - browser-process-hrtime@1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==, tarball: https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz} - - browser-resolve@1.11.3: - resolution: {integrity: sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==, tarball: https://registry.npmmirror.com/browser-resolve/-/browser-resolve-1.11.3.tgz} - - browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==, tarball: https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz} - - browserify-cipher@1.0.1: - resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==, tarball: https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz} - - browserify-des@1.0.2: - resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==, tarball: https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz} - - browserify-rsa@4.1.1: - resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==, tarball: https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.1.tgz} - engines: {node: '>= 0.10'} - - browserify-sign@4.2.3: - resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==, tarball: https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.3.tgz} - engines: {node: '>= 0.12'} - - browserify-zlib@0.2.0: - resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==, tarball: https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz} - - browserslist@4.24.2: - resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==, tarball: https://registry.npmmirror.com/browserslist/-/browserslist-4.24.2.tgz} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, tarball: https://registry.npmmirror.com/bser/-/bser-2.1.1.tgz} - - bubblesets-js@2.3.4: - resolution: {integrity: sha512-DyMjHmpkS2+xcFNtyN00apJYL3ESdp9fTrkDr5+9Qg/GPqFmcWgGsK1akZnttE1XFxJ/VMy4DNNGMGYtmFp1Sg==, tarball: https://registry.npmmirror.com/bubblesets-js/-/bubblesets-js-2.3.4.tgz} - - buffer-alloc-unsafe@1.1.0: - resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==, tarball: https://registry.npmmirror.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz} - - buffer-alloc@1.2.0: - resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==, tarball: https://registry.npmmirror.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz} - - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==, tarball: https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz} - - buffer-fill@1.0.0: - resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==, tarball: https://registry.npmmirror.com/buffer-fill/-/buffer-fill-1.0.0.tgz} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, tarball: https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz} - - buffer-okam@4.9.2: - resolution: {integrity: sha512-t+vozme+an7flUs6GXHGMiP3PdodTse1NgRHSDWioIFJAtmMlj3pj7qD20Mkr9hZy0+9HA4R0xcumpMewrRdZQ==, tarball: https://registry.npmmirror.com/buffer-okam/-/buffer-okam-4.9.2.tgz} - - buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==, tarball: https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz} - - buffer@4.9.2: - resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==, tarball: https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, tarball: https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz} - - builtin-status-codes@3.0.0: - resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==, tarball: https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz} - - builtins@1.0.3: - resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==, tarball: https://registry.npmmirror.com/builtins/-/builtins-1.0.3.tgz} - - bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==, tarball: https://registry.npmmirror.com/bundle-name/-/bundle-name-3.0.0.tgz} - engines: {node: '>=12'} - - bundle-name@4.1.0: - resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==, tarball: https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz} - engines: {node: '>=18'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, tarball: https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz} - engines: {node: '>= 0.8'} - - cacache@10.0.4: - resolution: {integrity: sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==, tarball: https://registry.npmmirror.com/cacache/-/cacache-10.0.4.tgz} - - cacache@9.3.0: - resolution: {integrity: sha512-Vbi8J1XfC8v+FbQ6QkOtKXsHpPnB0i9uMeYFJoj40EbdOsEqWB3DPpNjfsnYBkqOPYA8UvrqH6FZPpBP0zdN7g==, tarball: https://registry.npmmirror.com/cacache/-/cacache-9.3.0.tgz} - - cache-base@1.0.1: - resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==, tarball: https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - cacheable-request@6.1.0: - resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==, tarball: https://registry.npmmirror.com/cacheable-request/-/cacheable-request-6.1.0.tgz} - engines: {node: '>=8'} - - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==, tarball: https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, tarball: https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz} - engines: {node: '>=6'} - - camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==, tarball: https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz} - - camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==, tarball: https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz} - engines: {node: '>=8'} - - camelcase@1.2.1: - resolution: {integrity: sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-1.2.1.tgz} - engines: {node: '>=0.10.0'} - - camelcase@4.1.0: - resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-4.1.0.tgz} - engines: {node: '>=4'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz} - engines: {node: '>=10'} - - camelcase@8.0.0: - resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-8.0.0.tgz} - engines: {node: '>=16'} - - camelize@1.0.1: - resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==, tarball: https://registry.npmmirror.com/camelize/-/camelize-1.0.1.tgz} - - caniuse-lite@1.0.30001680: - resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==, tarball: https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz} - - capture-exit@2.0.0: - resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==, tarball: https://registry.npmmirror.com/capture-exit/-/capture-exit-2.0.0.tgz} - engines: {node: 6.* || 8.* || >= 10.*} - - capture-stack-trace@1.0.2: - resolution: {integrity: sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==, tarball: https://registry.npmmirror.com/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz} - engines: {node: '>=0.10.0'} - - caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==, tarball: https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==, tarball: https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz} - - center-align@0.1.3: - resolution: {integrity: sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==, tarball: https://registry.npmmirror.com/center-align/-/center-align-0.1.3.tgz} - engines: {node: '>=0.10.0'} - - chalk-template@1.1.0: - resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==, tarball: https://registry.npmmirror.com/chalk-template/-/chalk-template-1.1.0.tgz} - engines: {node: '>=14.16'} - - chalk@1.1.3: - resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==, tarball: https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz} - engines: {node: '>=0.10.0'} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, tarball: https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz} - engines: {node: '>=4'} - - chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==, tarball: https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz} - engines: {node: '>=8'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, tarball: https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz} - engines: {node: '>=10'} - - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==, tarball: https://registry.npmmirror.com/chalk/-/chalk-5.3.0.tgz} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==, tarball: https://registry.npmmirror.com/char-regex/-/char-regex-1.0.2.tgz} - engines: {node: '>=10'} - - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==, tarball: https://registry.npmmirror.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz} - - character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==, tarball: https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==, tarball: https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz} - - character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==, tarball: https://registry.npmmirror.com/character-entities/-/character-entities-1.2.4.tgz} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==, tarball: https://registry.npmmirror.com/character-entities/-/character-entities-2.0.2.tgz} - - character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==, tarball: https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz} - - character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==, tarball: https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz} - - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, tarball: https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz} - - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==, tarball: https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz} - - cheerio@1.0.0: - resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==, tarball: https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0.tgz} - engines: {node: '>=18.17'} - - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz} - engines: {node: '>= 8.10.0'} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz} - engines: {node: '>= 8.10.0'} - - chokidar@4.0.1: - resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-4.0.1.tgz} - engines: {node: '>= 14.16.0'} - - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==, tarball: https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz} - - chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==, tarball: https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz} - engines: {node: '>=6.0'} - - ci-info@1.6.0: - resolution: {integrity: sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==, tarball: https://registry.npmmirror.com/ci-info/-/ci-info-1.6.0.tgz} - - ci-info@2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==, tarball: https://registry.npmmirror.com/ci-info/-/ci-info-2.0.0.tgz} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==, tarball: https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz} - engines: {node: '>=8'} - - cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==, tarball: https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz} - - cjs-module-lexer@0.6.0: - resolution: {integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==, tarball: https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz} - - class-utils@0.3.6: - resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==, tarball: https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz} - engines: {node: '>=0.10.0'} - - classnames@2.3.2: - resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==, tarball: https://registry.npmmirror.com/classnames/-/classnames-2.3.2.tgz} - - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==, tarball: https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz} - - clean-css@5.3.3: - resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==, tarball: https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz} - engines: {node: '>= 10.0'} - - clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==, tarball: https://registry.npmmirror.com/clean-regexp/-/clean-regexp-1.0.0.tgz} - engines: {node: '>=4'} - - clean-stack@4.2.0: - resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==, tarball: https://registry.npmmirror.com/clean-stack/-/clean-stack-4.2.0.tgz} - engines: {node: '>=12'} - - cli-boxes@1.0.0: - resolution: {integrity: sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==, tarball: https://registry.npmmirror.com/cli-boxes/-/cli-boxes-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==, tarball: https://registry.npmmirror.com/cli-boxes/-/cli-boxes-3.0.0.tgz} - engines: {node: '>=10'} - - cli-cursor@2.1.0: - resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz} - engines: {node: '>=4'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz} - engines: {node: '>=8'} - - cli-spinners@1.3.1: - resolution: {integrity: sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==, tarball: https://registry.npmmirror.com/cli-spinners/-/cli-spinners-1.3.1.tgz} - engines: {node: '>=4'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==, tarball: https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz} - engines: {node: '>=6'} - - cli-truncate@0.2.1: - resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==, tarball: https://registry.npmmirror.com/cli-truncate/-/cli-truncate-0.2.1.tgz} - engines: {node: '>=0.10.0'} - - cli-width@2.2.1: - resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==, tarball: https://registry.npmmirror.com/cli-width/-/cli-width-2.2.1.tgz} - - cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==, tarball: https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz} - engines: {node: '>= 10'} - - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==, tarball: https://registry.npmmirror.com/cli-width/-/cli-width-4.1.0.tgz} - engines: {node: '>= 12'} - - click-to-react-component@1.1.0: - resolution: {integrity: sha512-/DjZemufS1BkxyRgZL3r7HXVVOFRWVQi5Xd4EBnjxZMwrHEh0OlUVA2N9CjXkZ0x8zMf8dL1cKnnx+xUWUg4VA==, tarball: https://registry.npmmirror.com/click-to-react-component/-/click-to-react-component-1.1.0.tgz} - peerDependencies: - react: ^18.0.1 - - cliui@2.1.0: - resolution: {integrity: sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==, tarball: https://registry.npmmirror.com/cliui/-/cliui-2.1.0.tgz} - - cliui@5.0.0: - resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==, tarball: https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz} - - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, tarball: https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, tarball: https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz} - engines: {node: '>=12'} - - clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==, tarball: https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz} - engines: {node: '>=6'} - - clone-regexp@2.2.0: - resolution: {integrity: sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==, tarball: https://registry.npmmirror.com/clone-regexp/-/clone-regexp-2.2.0.tgz} - engines: {node: '>=6'} - - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==, tarball: https://registry.npmmirror.com/clone-response/-/clone-response-1.0.3.tgz} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, tarball: https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz} - engines: {node: '>=0.8'} - - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, tarball: https://registry.npmmirror.com/co/-/co-4.6.0.tgz} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - - coa@2.0.2: - resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==, tarball: https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz} - engines: {node: '>= 4.0'} - - code-point-at@1.1.0: - resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==, tarball: https://registry.npmmirror.com/code-point-at/-/code-point-at-1.1.0.tgz} - engines: {node: '>=0.10.0'} - - codesandbox-import-util-types@2.2.3: - resolution: {integrity: sha512-Qj00p60oNExthP2oR3vvXmUGjukij+rxJGuiaKM6tyUmSyimdZsqHI/TUvFFClAffk9s7hxGnQgWQ8KCce27qQ==, tarball: https://registry.npmmirror.com/codesandbox-import-util-types/-/codesandbox-import-util-types-2.2.3.tgz} - - codesandbox-import-utils@2.2.3: - resolution: {integrity: sha512-ymtmcgZKU27U+nM2qUb21aO8Ut/u2S9s6KorOgG81weP+NA0UZkaHKlaRqbLJ9h4i/4FLvwmEXYAnTjNmp6ogg==, tarball: https://registry.npmmirror.com/codesandbox-import-utils/-/codesandbox-import-utils-2.2.3.tgz} - - codesandbox@2.2.3: - resolution: {integrity: sha512-IAkWFk6UUglOhSemI7UFgNNL/jgg+1YjVEIllFULLgsaHhFnY51pCqAifMNuAd5d9Zp4Nk/xMgrEaGNV0L4Xlg==, tarball: https://registry.npmmirror.com/codesandbox/-/codesandbox-2.2.3.tgz} - hasBin: true - - collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==, tarball: https://registry.npmmirror.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz} - - collection-visit@1.0.0: - resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==, tarball: https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz} - - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==, tarball: https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz} - - color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==, tarball: https://registry.npmmirror.com/color/-/color-3.2.1.tgz} - - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, tarball: https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, tarball: https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz} - engines: {node: '>= 0.8'} - - comlink@4.4.2: - resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==, tarball: https://registry.npmmirror.com/comlink/-/comlink-4.4.2.tgz} - - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==, tarball: https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz} - - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==, tarball: https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz} - engines: {node: '>=14'} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, tarball: https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, tarball: https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz} - engines: {node: '>= 6'} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, tarball: https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz} - engines: {node: '>= 10'} - - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, tarball: https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz} - engines: {node: '>= 12'} - - common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==, tarball: https://registry.npmmirror.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz} - - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, tarball: https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz} - - compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==, tarball: https://registry.npmmirror.com/compare-func/-/compare-func-2.0.0.tgz} - - component-emitter@1.3.1: - resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==, tarball: https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.1.tgz} - - compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==, tarball: https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz} - engines: {node: '>= 0.6'} - - compression@1.7.5: - resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==, tarball: https://registry.npmmirror.com/compression/-/compression-1.7.5.tgz} - engines: {node: '>= 0.8.0'} - - compute-scroll-into-view@1.0.20: - resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==, tarball: https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz} - - compute-scroll-into-view@3.1.0: - resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==, tarball: https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, tarball: https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz} - - concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==, tarball: https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz} - engines: {'0': node >= 0.8} - - config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==, tarball: https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz} - - configstore@3.1.5: - resolution: {integrity: sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==, tarball: https://registry.npmmirror.com/configstore/-/configstore-3.1.5.tgz} - engines: {node: '>=4'} - - configstore@7.0.0: - resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==, tarball: https://registry.npmmirror.com/configstore/-/configstore-7.0.0.tgz} - engines: {node: '>=18'} - - connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==, tarball: https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz} - engines: {node: '>=0.8'} - - console-browserify@1.2.0: - resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==, tarball: https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz} - - constants-browserify@1.0.0: - resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==, tarball: https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz} - - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==, tarball: https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==, tarball: https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz} - engines: {node: '>= 0.6'} - - contour_plot@0.0.1: - resolution: {integrity: sha512-Nil2HI76Xux6sVGORvhSS8v66m+/h5CwFkBJDO+U5vWaMdNC0yXNCsGDPbzPhvqOEU5koebhdEvD372LI+IyLw==, tarball: https://registry.npmmirror.com/contour_plot/-/contour_plot-0.0.1.tgz} - - conventional-changelog-angular@8.0.0: - resolution: {integrity: sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==, tarball: https://registry.npmmirror.com/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz} - engines: {node: '>=18'} - - conventional-changelog-atom@5.0.0: - resolution: {integrity: sha512-WfzCaAvSCFPkznnLgLnfacRAzjgqjLUjvf3MftfsJzQdDICqkOOpcMtdJF3wTerxSpv2IAAjX8doM3Vozqle3g==, tarball: https://registry.npmmirror.com/conventional-changelog-atom/-/conventional-changelog-atom-5.0.0.tgz} - engines: {node: '>=18'} - - conventional-changelog-cli@5.0.0: - resolution: {integrity: sha512-9Y8fucJe18/6ef6ZlyIlT2YQUbczvoQZZuYmDLaGvcSBP+M6h+LAvf7ON7waRxKJemcCII8Yqu5/8HEfskTxJQ==, tarball: https://registry.npmmirror.com/conventional-changelog-cli/-/conventional-changelog-cli-5.0.0.tgz} - engines: {node: '>=18'} - hasBin: true - - conventional-changelog-codemirror@5.0.0: - resolution: {integrity: sha512-8gsBDI5Y3vrKUCxN6Ue8xr6occZ5nsDEc4C7jO/EovFGozx8uttCAyfhRrvoUAWi2WMm3OmYs+0mPJU7kQdYWQ==, tarball: https://registry.npmmirror.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-5.0.0.tgz} - engines: {node: '>=18'} - - conventional-changelog-conventionalcommits@8.0.0: - resolution: {integrity: sha512-eOvlTO6OcySPyyyk8pKz2dP4jjElYunj9hn9/s0OB+gapTO8zwS9UQWrZ1pmF2hFs3vw1xhonOLGcGjy/zgsuA==, tarball: https://registry.npmmirror.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-8.0.0.tgz} - engines: {node: '>=18'} - - conventional-changelog-core@8.0.0: - resolution: {integrity: sha512-EATUx5y9xewpEe10UEGNpbSHRC6cVZgO+hXQjofMqpy+gFIrcGvH3Fl6yk2VFKh7m+ffenup2N7SZJYpyD9evw==, tarball: https://registry.npmmirror.com/conventional-changelog-core/-/conventional-changelog-core-8.0.0.tgz} - engines: {node: '>=18'} - - conventional-changelog-ember@5.0.0: - resolution: {integrity: sha512-RPflVfm5s4cSO33GH/Ey26oxhiC67akcxSKL8CLRT3kQX2W3dbE19sSOM56iFqUJYEwv9mD9r6k79weWe1urfg==, tarball: https://registry.npmmirror.com/conventional-changelog-ember/-/conventional-changelog-ember-5.0.0.tgz} - engines: {node: '>=18'} - - conventional-changelog-eslint@6.0.0: - resolution: {integrity: sha512-eiUyULWjzq+ybPjXwU6NNRflApDWlPEQEHvI8UAItYW/h22RKkMnOAtfCZxMmrcMO1OKUWtcf2MxKYMWe9zJuw==, tarball: https://registry.npmmirror.com/conventional-changelog-eslint/-/conventional-changelog-eslint-6.0.0.tgz} - engines: {node: '>=18'} - - conventional-changelog-express@5.0.0: - resolution: {integrity: sha512-D8Q6WctPkQpvr2HNCCmwU5GkX22BVHM0r4EW8vN0230TSyS/d6VQJDAxGb84lbg0dFjpO22MwmsikKL++Oo/oQ==, tarball: https://registry.npmmirror.com/conventional-changelog-express/-/conventional-changelog-express-5.0.0.tgz} - engines: {node: '>=18'} - - conventional-changelog-jquery@6.0.0: - resolution: {integrity: sha512-2kxmVakyehgyrho2ZHBi90v4AHswkGzHuTaoH40bmeNqUt20yEkDOSpw8HlPBfvEQBwGtbE+5HpRwzj6ac2UfA==, tarball: https://registry.npmmirror.com/conventional-changelog-jquery/-/conventional-changelog-jquery-6.0.0.tgz} - engines: {node: '>=18'} - - conventional-changelog-jshint@5.0.0: - resolution: {integrity: sha512-gGNphSb/opc76n2eWaO6ma4/Wqu3tpa2w7i9WYqI6Cs2fncDSI2/ihOfMvXveeTTeld0oFvwMVNV+IYQIk3F3g==, tarball: https://registry.npmmirror.com/conventional-changelog-jshint/-/conventional-changelog-jshint-5.0.0.tgz} - engines: {node: '>=18'} - - conventional-changelog-preset-loader@5.0.0: - resolution: {integrity: sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==, tarball: https://registry.npmmirror.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-5.0.0.tgz} - engines: {node: '>=18'} - - conventional-changelog-writer@8.0.0: - resolution: {integrity: sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==, tarball: https://registry.npmmirror.com/conventional-changelog-writer/-/conventional-changelog-writer-8.0.0.tgz} - engines: {node: '>=18'} - hasBin: true - - conventional-changelog@6.0.0: - resolution: {integrity: sha512-tuUH8H/19VjtD9Ig7l6TQRh+Z0Yt0NZ6w/cCkkyzUbGQTnUEmKfGtkC9gGfVgCfOL1Rzno5NgNF4KY8vR+Jo3w==, tarball: https://registry.npmmirror.com/conventional-changelog/-/conventional-changelog-6.0.0.tgz} - engines: {node: '>=18'} - - conventional-commits-filter@5.0.0: - resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==, tarball: https://registry.npmmirror.com/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz} - engines: {node: '>=18'} - - conventional-commits-parser@6.0.0: - resolution: {integrity: sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==, tarball: https://registry.npmmirror.com/conventional-commits-parser/-/conventional-commits-parser-6.0.0.tgz} - engines: {node: '>=18'} - hasBin: true - - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, tarball: https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, tarball: https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz} - - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==, tarball: https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz} - - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==, tarball: https://registry.npmmirror.com/cookie/-/cookie-0.7.1.tgz} - engines: {node: '>= 0.6'} - - copy-anything@2.0.6: - resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==, tarball: https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz} - - copy-concurrently@1.0.5: - resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==, tarball: https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz} - deprecated: This package is no longer supported. - - copy-descriptor@0.1.1: - resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==, tarball: https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz} - engines: {node: '>=0.10.0'} - - copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==, tarball: https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz} - - core-js-compat@3.39.0: - resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==, tarball: https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.39.0.tgz} - - core-js-pure@3.39.0: - resolution: {integrity: sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==, tarball: https://registry.npmmirror.com/core-js-pure/-/core-js-pure-3.39.0.tgz} - - core-js@2.6.12: - resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==, tarball: https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz} - deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. - - core-js@3.34.0: - resolution: {integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==, tarball: https://registry.npmmirror.com/core-js/-/core-js-3.34.0.tgz} - - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==, tarball: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz} - - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, tarball: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz} - - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==, tarball: https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz} - engines: {node: '>= 0.10'} - - cosmiconfig@6.0.0: - resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==, tarball: https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz} - engines: {node: '>=8'} - - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==, tarball: https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz} - engines: {node: '>=10'} - - cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==, tarball: https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - create-ecdh@4.0.4: - resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==, tarball: https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz} - - create-error-class@3.0.2: - resolution: {integrity: sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==, tarball: https://registry.npmmirror.com/create-error-class/-/create-error-class-3.0.2.tgz} - engines: {node: '>=0.10.0'} - - create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==, tarball: https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz} - - create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==, tarball: https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz} - - cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==, tarball: https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true - - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz} - - cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz} - engines: {node: '>=4.8'} - - cross-spawn@7.0.5: - resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.5.tgz} - engines: {node: '>= 8'} - - crypto-browserify@3.12.1: - resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==, tarball: https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.1.tgz} - engines: {node: '>= 0.10'} - - crypto-random-string@1.0.0: - resolution: {integrity: sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==, tarball: https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz} - engines: {node: '>=4'} - - css-blank-pseudo@3.0.3: - resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==, tarball: https://registry.npmmirror.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - - css-color-keywords@1.0.0: - resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==, tarball: https://registry.npmmirror.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz} - engines: {node: '>=4'} - - css-has-pseudo@3.0.4: - resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==, tarball: https://registry.npmmirror.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - - css-in-js-utils@3.1.0: - resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==, tarball: https://registry.npmmirror.com/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz} - - css-loader@6.11.0: - resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==, tarball: https://registry.npmmirror.com/css-loader/-/css-loader-6.11.0.tgz} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - - css-loader@6.7.1: - resolution: {integrity: sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==, tarball: https://registry.npmmirror.com/css-loader/-/css-loader-6.7.1.tgz} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - - css-prefers-color-scheme@6.0.3: - resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==, tarball: https://registry.npmmirror.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - - css-select-base-adapter@0.1.1: - resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==, tarball: https://registry.npmmirror.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz} - - css-select@2.1.0: - resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==, tarball: https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz} - - css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==, tarball: https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz} - - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==, tarball: https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz} - - css-to-react-native@3.2.0: - resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==, tarball: https://registry.npmmirror.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz} - - css-tree@1.0.0-alpha.37: - resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==, tarball: https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz} - engines: {node: '>=8.0.0'} - - css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==, tarball: https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz} - engines: {node: '>=8.0.0'} - - css-what@3.4.2: - resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==, tarball: https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz} - engines: {node: '>= 6'} - - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, tarball: https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz} - engines: {node: '>= 6'} - - css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==, tarball: https://registry.npmmirror.com/css.escape/-/css.escape-1.5.1.tgz} - - css@3.0.0: - resolution: {integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==, tarball: https://registry.npmmirror.com/css/-/css-3.0.0.tgz} - - cssdb@6.6.3: - resolution: {integrity: sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==, tarball: https://registry.npmmirror.com/cssdb/-/cssdb-6.6.3.tgz} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, tarball: https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz} - engines: {node: '>=4'} - hasBin: true - - cssfontparser@1.2.1: - resolution: {integrity: sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg==, tarball: https://registry.npmmirror.com/cssfontparser/-/cssfontparser-1.2.1.tgz} - - csso@4.2.0: - resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==, tarball: https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz} - engines: {node: '>=8.0.0'} - - cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==, tarball: https://registry.npmmirror.com/cssom/-/cssom-0.3.8.tgz} - - cssom@0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==, tarball: https://registry.npmmirror.com/cssom/-/cssom-0.4.4.tgz} - - cssstyle@1.4.0: - resolution: {integrity: sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==, tarball: https://registry.npmmirror.com/cssstyle/-/cssstyle-1.4.0.tgz} - - cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==, tarball: https://registry.npmmirror.com/cssstyle/-/cssstyle-2.3.0.tgz} - engines: {node: '>=8'} - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==, tarball: https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz} - - current-script-polyfill@1.0.0: - resolution: {integrity: sha512-qv8s+G47V6Hq+g2kRE5th+ASzzrL7b6l+tap1DHKK25ZQJv3yIFhH96XaQ7NGL+zRW3t/RDbweJf/dJDe5Z5KA==, tarball: https://registry.npmmirror.com/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz} - - cwd@0.9.1: - resolution: {integrity: sha512-4+0D+ojEasdLndYX4Cqff057I/Jp6ysXpwKkdLQLnZxV8f6IYZmZtTP5uqD91a/kWqejoc0sSqK4u8wpTKCh8A==, tarball: https://registry.npmmirror.com/cwd/-/cwd-0.9.1.tgz} - engines: {node: '>=0.8'} - - cyclist@1.0.2: - resolution: {integrity: sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==, tarball: https://registry.npmmirror.com/cyclist/-/cyclist-1.0.2.tgz} - - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==, tarball: https://registry.npmmirror.com/d3-array/-/d3-array-3.2.4.tgz} - engines: {node: '>=12'} - - d3-binarytree@1.0.2: - resolution: {integrity: sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==, tarball: https://registry.npmmirror.com/d3-binarytree/-/d3-binarytree-1.0.2.tgz} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==, tarball: https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz} - engines: {node: '>=12'} - - d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==, tarball: https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz} - engines: {node: '>=12'} - - d3-dsv@3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==, tarball: https://registry.npmmirror.com/d3-dsv/-/d3-dsv-3.0.1.tgz} - engines: {node: '>=12'} - hasBin: true - - d3-force-3d@3.0.5: - resolution: {integrity: sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==, tarball: https://registry.npmmirror.com/d3-force-3d/-/d3-force-3d-3.0.5.tgz} - engines: {node: '>=12'} - - d3-force@3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==, tarball: https://registry.npmmirror.com/d3-force/-/d3-force-3.0.0.tgz} - engines: {node: '>=12'} - - d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==, tarball: https://registry.npmmirror.com/d3-format/-/d3-format-3.1.0.tgz} - engines: {node: '>=12'} - - d3-geo@3.1.1: - resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==, tarball: https://registry.npmmirror.com/d3-geo/-/d3-geo-3.1.1.tgz} - engines: {node: '>=12'} - - d3-hierarchy@3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==, tarball: https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==, tarball: https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz} - engines: {node: '>=12'} - - d3-octree@1.0.2: - resolution: {integrity: sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==, tarball: https://registry.npmmirror.com/d3-octree/-/d3-octree-1.0.2.tgz} - - d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==, tarball: https://registry.npmmirror.com/d3-path/-/d3-path-3.1.0.tgz} - engines: {node: '>=12'} - - d3-quadtree@3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==, tarball: https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz} - engines: {node: '>=12'} - - d3-regression@1.3.10: - resolution: {integrity: sha512-PF8GWEL70cHHWpx2jUQXc68r1pyPHIA+St16muk/XRokETzlegj5LriNKg7o4LR0TySug4nHYPJNNRz/W+/Niw==, tarball: https://registry.npmmirror.com/d3-regression/-/d3-regression-1.3.10.tgz} - - d3-scale-chromatic@3.1.0: - resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==, tarball: https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz} - engines: {node: '>=12'} - - d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==, tarball: https://registry.npmmirror.com/d3-shape/-/d3-shape-3.2.0.tgz} - engines: {node: '>=12'} - - d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==, tarball: https://registry.npmmirror.com/d3-timer/-/d3-timer-3.0.1.tgz} - engines: {node: '>=12'} - - dagre@0.8.5: - resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==, tarball: https://registry.npmmirror.com/dagre/-/dagre-0.8.5.tgz} - - dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==, tarball: https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz} - engines: {node: '>=0.10'} - - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==, tarball: https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz} - engines: {node: '>= 12'} - - data-urls@1.1.0: - resolution: {integrity: sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==, tarball: https://registry.npmmirror.com/data-urls/-/data-urls-1.1.0.tgz} - - data-urls@2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==, tarball: https://registry.npmmirror.com/data-urls/-/data-urls-2.0.0.tgz} - engines: {node: '>=10'} - - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==, tarball: https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==, tarball: https://registry.npmmirror.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==, tarball: https://registry.npmmirror.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz} - engines: {node: '>= 0.4'} - - datauri@3.0.0: - resolution: {integrity: sha512-NeDFuUPV1YCpCn8MUIcDk1QnuyenUHs7f4Q5P0n9FFA0neKFrfEH9esR+YMW95BplbYfdmjbs0Pl/ZGAaM2QHQ==, tarball: https://registry.npmmirror.com/datauri/-/datauri-3.0.0.tgz} - engines: {node: '>= 8'} - - date-fns@1.30.1: - resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==, tarball: https://registry.npmmirror.com/date-fns/-/date-fns-1.30.1.tgz} - - date-fns@2.30.0: - resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==, tarball: https://registry.npmmirror.com/date-fns/-/date-fns-2.30.0.tgz} - engines: {node: '>=0.11'} - - dayjs@1.11.13: - resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz} - - debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==, tarball: https://registry.npmmirror.com/debounce/-/debounce-1.2.1.tgz} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, tarball: https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@3.1.0: - resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==, tarball: https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, tarball: https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==, tarball: https://registry.npmmirror.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz} - engines: {node: '>=0.10.0'} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, tarball: https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz} - engines: {node: '>=0.10.0'} - - decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==, tarball: https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz} - - decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==, tarball: https://registry.npmmirror.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz} - - decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==, tarball: https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz} - engines: {node: '>=0.10'} - - decompress-response@3.3.0: - resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==, tarball: https://registry.npmmirror.com/decompress-response/-/decompress-response-3.3.0.tgz} - engines: {node: '>=4'} - - deep-equal@1.1.2: - resolution: {integrity: sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==, tarball: https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.2.tgz} - engines: {node: '>= 0.4'} - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, tarball: https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz} - engines: {node: '>=4.0.0'} - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, tarball: https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz} - - deep-rename-keys@0.2.1: - resolution: {integrity: sha512-RHd9ABw4Fvk+gYDWqwOftG849x0bYOySl/RgX0tLI9i27ZIeSO91mLZJEp7oPHOMFqHvpgu21YptmDt0FYD/0A==, tarball: https://registry.npmmirror.com/deep-rename-keys/-/deep-rename-keys-0.2.1.tgz} - engines: {node: '>=0.10.0'} - - deepmerge@1.5.2: - resolution: {integrity: sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==, tarball: https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz} - engines: {node: '>=0.10.0'} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, tarball: https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz} - engines: {node: '>=0.10.0'} - - default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==, tarball: https://registry.npmmirror.com/default-browser-id/-/default-browser-id-3.0.0.tgz} - engines: {node: '>=12'} - - default-browser-id@5.0.0: - resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==, tarball: https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz} - engines: {node: '>=18'} - - default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==, tarball: https://registry.npmmirror.com/default-browser/-/default-browser-4.0.0.tgz} - engines: {node: '>=14.16'} - - default-browser@5.2.1: - resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==, tarball: https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz} - engines: {node: '>=18'} - - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, tarball: https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz} - - defer-to-connect@1.1.3: - resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==, tarball: https://registry.npmmirror.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, tarball: https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz} - engines: {node: '>= 0.4'} - - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, tarball: https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz} - engines: {node: '>=8'} - - define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==, tarball: https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz} - engines: {node: '>=12'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, tarball: https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz} - engines: {node: '>= 0.4'} - - define-property@0.2.5: - resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==, tarball: https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz} - engines: {node: '>=0.10.0'} - - define-property@1.0.0: - resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==, tarball: https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - define-property@2.0.2: - resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==, tarball: https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz} - engines: {node: '>=0.10.0'} - - defined@1.0.1: - resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==, tarball: https://registry.npmmirror.com/defined/-/defined-1.0.1.tgz} - - del@7.1.0: - resolution: {integrity: sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==, tarball: https://registry.npmmirror.com/del/-/del-7.1.0.tgz} - engines: {node: '>=14.16'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, tarball: https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz} - engines: {node: '>=0.4.0'} - - depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==, tarball: https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz} - engines: {node: '>= 0.6'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, tarball: https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz} - engines: {node: '>= 0.8'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, tarball: https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz} - engines: {node: '>=6'} - - derive-valtio@0.1.0: - resolution: {integrity: sha512-OCg2UsLbXK7GmmpzMXhYkdO64vhJ1ROUUGaTFyHjVwEdMEcTTRj7W1TxLbSBxdY8QLBPCcp66MTyaSy0RpO17A==, tarball: https://registry.npmmirror.com/derive-valtio/-/derive-valtio-0.1.0.tgz} - peerDependencies: - valtio: '*' - - des.js@1.1.0: - resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==, tarball: https://registry.npmmirror.com/des.js/-/des.js-1.1.0.tgz} - - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==, tarball: https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==, tarball: https://registry.npmmirror.com/detect-indent/-/detect-indent-6.1.0.tgz} - engines: {node: '>=8'} - - detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==, tarball: https://registry.npmmirror.com/detect-indent/-/detect-indent-7.0.1.tgz} - engines: {node: '>=12.20'} - - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==, tarball: https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz} - engines: {node: '>=0.10'} - hasBin: true - - detect-newline@2.1.0: - resolution: {integrity: sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==, tarball: https://registry.npmmirror.com/detect-newline/-/detect-newline-2.1.0.tgz} - engines: {node: '>=0.10.0'} - - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==, tarball: https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz} - engines: {node: '>=8'} - - detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==, tarball: https://registry.npmmirror.com/detect-newline/-/detect-newline-4.0.1.tgz} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==, tarball: https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz} - - detect-port-alt@1.1.6: - resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==, tarball: https://registry.npmmirror.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz} - engines: {node: '>= 4.2.1'} - hasBin: true - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==, tarball: https://registry.npmmirror.com/devlop/-/devlop-1.1.0.tgz} - - diff-sequences@24.9.0: - resolution: {integrity: sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==, tarball: https://registry.npmmirror.com/diff-sequences/-/diff-sequences-24.9.0.tgz} - engines: {node: '>= 6'} - - diff-sequences@26.6.2: - resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==, tarball: https://registry.npmmirror.com/diff-sequences/-/diff-sequences-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - diff-sequences@27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==, tarball: https://registry.npmmirror.com/diff-sequences/-/diff-sequences-27.5.1.tgz} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - - diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==, tarball: https://registry.npmmirror.com/diff/-/diff-5.2.0.tgz} - engines: {node: '>=0.3.1'} - - diffie-hellman@5.0.3: - resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==, tarball: https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, tarball: https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz} - engines: {node: '>=8'} - - discontinuous-range@1.0.0: - resolution: {integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==, tarball: https://registry.npmmirror.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz} - - dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==, tarball: https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.1.tgz} - engines: {node: '>=6'} - - docsearch.js@2.6.3: - resolution: {integrity: sha512-GN+MBozuyz664ycpZY0ecdQE0ND/LSgJKhTLA0/v3arIS3S1Rpf2OJz6A35ReMsm91V5apcmzr5/kM84cvUg+A==, tarball: https://registry.npmmirror.com/docsearch.js/-/docsearch.js-2.6.3.tgz} - deprecated: This package has been deprecated and is no longer maintained. Please use @docsearch/js. - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, tarball: https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, tarball: https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz} - engines: {node: '>=6.0.0'} - - dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==, tarball: https://registry.npmmirror.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz} - - dom-align@1.12.4: - resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==, tarball: https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz} - - dom-converter@0.2.0: - resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==, tarball: https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz} - - dom-serializer@0.2.2: - resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz} - - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz} - - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz} - - dom-walk@0.1.2: - resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==, tarball: https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz} - - domain-browser@1.2.0: - resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==, tarball: https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz} - engines: {node: '>=0.4', npm: '>=1.2'} - - domelementtype@1.3.1: - resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==, tarball: https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, tarball: https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz} - - domexception@1.0.1: - resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==, tarball: https://registry.npmmirror.com/domexception/-/domexception-1.0.1.tgz} - deprecated: Use your platform's native DOMException instead - - domexception@2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==, tarball: https://registry.npmmirror.com/domexception/-/domexception-2.0.1.tgz} - engines: {node: '>=8'} - deprecated: Use your platform's native DOMException instead - - domhandler@2.4.2: - resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz} - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz} - engines: {node: '>= 4'} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz} - engines: {node: '>= 4'} - - domutils@1.7.0: - resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==, tarball: https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==, tarball: https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz} - - domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==, tarball: https://registry.npmmirror.com/domutils/-/domutils-3.1.0.tgz} - - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==, tarball: https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz} - - dot-prop@4.2.1: - resolution: {integrity: sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==, tarball: https://registry.npmmirror.com/dot-prop/-/dot-prop-4.2.1.tgz} - engines: {node: '>=4'} - - dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, tarball: https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz} - engines: {node: '>=8'} - - dot-prop@9.0.0: - resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==, tarball: https://registry.npmmirror.com/dot-prop/-/dot-prop-9.0.0.tgz} - engines: {node: '>=18'} - - dotignore@0.1.2: - resolution: {integrity: sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==, tarball: https://registry.npmmirror.com/dotignore/-/dotignore-0.1.2.tgz} - hasBin: true - - dumi-afx-deps@1.0.0-alpha.20: - resolution: {integrity: sha512-PRSJlHuJkyHDET7Hukykx/hLULkgUBX5q2CutMG5EDI3eJLzJlX634wNll10m3at1uomcDAVudL7Dgh5UOJ7IQ==, tarball: https://registry.npmmirror.com/dumi-afx-deps/-/dumi-afx-deps-1.0.0-alpha.20.tgz} - - dumi-assets-types@2.3.0: - resolution: {integrity: sha512-mM6UoGTgTNoo8lA4dwaIwoeSGT+4PeQeiFylr2+kCB5z3/7NEf7lIM4tqrAsEyzecE/HX0+w7Z78hnFZQ9k5vQ==, tarball: https://registry.npmmirror.com/dumi-assets-types/-/dumi-assets-types-2.3.0.tgz} - - dumi@2.4.13: - resolution: {integrity: sha512-cOeFrY7MgdcVJpRn4+v5Kb9LJbPz55FekwuPLKUyphw/fJFe/Chu0+bTV619VlQtIZUPelnob0vHmoBE4eT9nw==, tarball: https://registry.npmmirror.com/dumi/-/dumi-2.4.13.tgz} - hasBin: true - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - duplexer3@0.1.5: - resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==, tarball: https://registry.npmmirror.com/duplexer3/-/duplexer3-0.1.5.tgz} - - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, tarball: https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz} - - duplexify@3.7.1: - resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==, tarball: https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz} - - duplexify@4.1.3: - resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==, tarball: https://registry.npmmirror.com/duplexify/-/duplexify-4.1.3.tgz} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, tarball: https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz} - - ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==, tarball: https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz} - - editions@2.3.1: - resolution: {integrity: sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==, tarball: https://registry.npmmirror.com/editions/-/editions-2.3.1.tgz} - engines: {node: '>=0.8'} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, tarball: https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==, tarball: https://registry.npmmirror.com/ejs/-/ejs-3.1.10.tgz} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-to-chromium@1.5.56: - resolution: {integrity: sha512-7lXb9dAvimCFdvUMTyucD4mnIndt/xhRKFAlky0CyFogdnNmdPQNoHI23msF/2V4mpTxMzgMdjK4+YRlFlRQZw==, tarball: https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.56.tgz} - - electron@11.5.0: - resolution: {integrity: sha512-WjNDd6lGpxyiNjE3LhnFCAk/D9GIj1rU3GSDealVShhkkkPR3Vh4q8ErXGDl1OAO/faomVa10KoFPUN/pLbNxg==, tarball: https://registry.npmmirror.com/electron/-/electron-11.5.0.tgz} - engines: {node: '>= 8.6'} - hasBin: true - - elegant-spinner@1.0.1: - resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==, tarball: https://registry.npmmirror.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - elliptic@6.6.0: - resolution: {integrity: sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==, tarball: https://registry.npmmirror.com/elliptic/-/elliptic-6.6.0.tgz} - - email-addresses@3.1.0: - resolution: {integrity: sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==, tarball: https://registry.npmmirror.com/email-addresses/-/email-addresses-3.1.0.tgz} - - emittery@0.7.2: - resolution: {integrity: sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==, tarball: https://registry.npmmirror.com/emittery/-/emittery-0.7.2.tgz} - engines: {node: '>=10'} - - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.4.0.tgz} - - emoji-regex@7.0.3: - resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz} - - emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, tarball: https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz} - engines: {node: '>= 4'} - - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, tarball: https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz} - engines: {node: '>= 0.8'} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==, tarball: https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz} - engines: {node: '>= 0.8'} - - encoding-sniffer@0.2.0: - resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==, tarball: https://registry.npmmirror.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz} - - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==, tarball: https://registry.npmmirror.com/encoding/-/encoding-0.1.13.tgz} - - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, tarball: https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz} - - enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==, tarball: https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz} - engines: {node: '>=10.13.0'} - - enhanced-resolve@5.9.3: - resolution: {integrity: sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==, tarball: https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz} - engines: {node: '>=10.13.0'} - - enquire.js@2.1.6: - resolution: {integrity: sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==, tarball: https://registry.npmmirror.com/enquire.js/-/enquire.js-2.1.6.tgz} - - enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==, tarball: https://registry.npmmirror.com/enquirer/-/enquirer-2.4.1.tgz} - engines: {node: '>=8.6'} - - entities@1.1.2: - resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==, tarball: https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz} - - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, tarball: https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, tarball: https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz} - engines: {node: '>=0.12'} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, tarball: https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz} - engines: {node: '>=6'} - - envify@4.1.0: - resolution: {integrity: sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==, tarball: https://registry.npmmirror.com/envify/-/envify-4.1.0.tgz} - hasBin: true - - envinfo@7.14.0: - resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==, tarball: https://registry.npmmirror.com/envinfo/-/envinfo-7.14.0.tgz} - engines: {node: '>=4'} - hasBin: true - - enzyme-shallow-equal@1.0.7: - resolution: {integrity: sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg==, tarball: https://registry.npmmirror.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz} - - enzyme-to-json@3.6.2: - resolution: {integrity: sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==, tarball: https://registry.npmmirror.com/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz} - engines: {node: '>=6.0.0'} - peerDependencies: - enzyme: ^3.4.0 - - enzyme@3.11.0: - resolution: {integrity: sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==, tarball: https://registry.npmmirror.com/enzyme/-/enzyme-3.11.0.tgz} - - err-code@1.1.2: - resolution: {integrity: sha512-CJAN+O0/yA1CKfRn9SXOGctSpEM7DCon/r/5r2eXFMY2zCCJBasFhcM5I+1kh3Ap11FsQCX+vGHceNPvpWKhoA==, tarball: https://registry.npmmirror.com/err-code/-/err-code-1.1.2.tgz} - - errlop@2.2.0: - resolution: {integrity: sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==, tarball: https://registry.npmmirror.com/errlop/-/errlop-2.2.0.tgz} - engines: {node: '>=0.8'} - - errno@0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz} - hasBin: true - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, tarball: https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz} - - error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==, tarball: https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz} - - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==, tarball: https://registry.npmmirror.com/es-abstract/-/es-abstract-1.23.3.tgz} - engines: {node: '>= 0.4'} - - es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==, tarball: https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==, tarball: https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.0.tgz} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, tarball: https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz} - engines: {node: '>= 0.4'} - - es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==, tarball: https://registry.npmmirror.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz} - - es-iterator-helpers@1.2.0: - resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==, tarball: https://registry.npmmirror.com/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz} - engines: {node: '>= 0.4'} - - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==, tarball: https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz} - - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==, tarball: https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==, tarball: https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==, tarball: https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, tarball: https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz} - engines: {node: '>= 0.4'} - - es5-imcompatible-versions@0.1.90: - resolution: {integrity: sha512-2MPI0t/VV4j/oz1qbMekb4gCW81dewTpM2XJHKnPpZiPGu+1rVWmhTnwcq1vt8AFwWrkNF4RE7OZ9ibnKFYKwg==, tarball: https://registry.npmmirror.com/es5-imcompatible-versions/-/es5-imcompatible-versions-0.1.90.tgz} - - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==, tarball: https://registry.npmmirror.com/es6-error/-/es6-error-4.1.1.tgz} - - es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==, tarball: https://registry.npmmirror.com/es6-promise/-/es6-promise-4.2.8.tgz} - - es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==, tarball: https://registry.npmmirror.com/es6-promisify/-/es6-promisify-5.0.0.tgz} - - esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.21.4: - resolution: {integrity: sha512-sFMcNNrj+Q0ZDolrp5pDhH0nRPN9hLIM3fRPwgbLYJeSHHgnXSnbV3xYgSVuOeLWH9c73VwmEverVzupIv5xuA==, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.21.4.tgz} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz} - engines: {node: '>=12'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, tarball: https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz} - engines: {node: '>=6'} - - escape-goat@4.0.0: - resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==, tarball: https://registry.npmmirror.com/escape-goat/-/escape-goat-4.0.0.tgz} - engines: {node: '>=12'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, tarball: https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz} - engines: {node: '>=0.8.0'} - - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz} - engines: {node: '>=8'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz} - engines: {node: '>=10'} - - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz} - engines: {node: '>=12'} - - escodegen@1.14.3: - resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==, tarball: https://registry.npmmirror.com/escodegen/-/escodegen-1.14.3.tgz} - engines: {node: '>=4.0'} - hasBin: true - - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==, tarball: https://registry.npmmirror.com/escodegen/-/escodegen-2.1.0.tgz} - engines: {node: '>=6.0'} - hasBin: true - - eslint-ast-utils@1.1.0: - resolution: {integrity: sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==, tarball: https://registry.npmmirror.com/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz} - engines: {node: '>=4'} - - eslint-config-prettier@8.10.0: - resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==, tarball: https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-formatter-pretty@4.1.0: - resolution: {integrity: sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==, tarball: https://registry.npmmirror.com/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz} - engines: {node: '>=10'} - - eslint-plugin-babel@5.3.1: - resolution: {integrity: sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==, tarball: https://registry.npmmirror.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz} - engines: {node: '>=4'} - peerDependencies: - eslint: '>=4.0.0' - - eslint-plugin-jest@24.7.0: - resolution: {integrity: sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==, tarball: https://registry.npmmirror.com/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz} - engines: {node: '>=10'} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^4.1.1 - eslint: '>=5' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - - eslint-plugin-jest@27.2.3: - resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==, tarball: https://registry.npmmirror.com/eslint-plugin-jest/-/eslint-plugin-jest-27.2.3.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^4.1.1 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - - eslint-plugin-promise@6.6.0: - resolution: {integrity: sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==, tarball: https://registry.npmmirror.com/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - - eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==, tarball: https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react-hooks@4.6.2: - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==, tarball: https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react@7.33.2: - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==, tarball: https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-react@7.37.2: - resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==, tarball: https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-plugin-unicorn@20.1.0: - resolution: {integrity: sha512-XQxLBJT/gnwyRR6cfYsIK1AdekQchAt5tmcsnldevGjgR2xoZsRUa5/i6e0seNHy2RoT57CkTnbVHwHF8No8LA==, tarball: https://registry.npmmirror.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-20.1.0.tgz} - engines: {node: '>=10'} - peerDependencies: - eslint: '>=7.0.0' - - eslint-rule-composer@0.3.0: - resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==, tarball: https://registry.npmmirror.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz} - engines: {node: '>=4.0.0'} - - eslint-rule-docs@1.1.235: - resolution: {integrity: sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==, tarball: https://registry.npmmirror.com/eslint-rule-docs/-/eslint-rule-docs-1.1.235.tgz} - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, tarball: https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz} - engines: {node: '>=8.0.0'} - - eslint-template-visitor@2.3.2: - resolution: {integrity: sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==, tarball: https://registry.npmmirror.com/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz} - peerDependencies: - eslint: '>=7.0.0' - - eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==, tarball: https://registry.npmmirror.com/eslint-utils/-/eslint-utils-2.1.0.tgz} - engines: {node: '>=6'} - - eslint-utils@3.0.0: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==, tarball: https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - - eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==, tarball: https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz} - engines: {node: '>=4'} - - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==, tarball: https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz} - engines: {node: '>=10'} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, tarball: https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint@7.32.0: - resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==, tarball: https://registry.npmmirror.com/eslint/-/eslint-7.32.0.tgz} - engines: {node: ^10.12.0 || >=12.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - - espree@7.3.1: - resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==, tarball: https://registry.npmmirror.com/espree/-/espree-7.3.1.tgz} - engines: {node: ^10.12.0 || >=12.0.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, tarball: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz} - engines: {node: '>=4'} - hasBin: true - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==, tarball: https://registry.npmmirror.com/esquery/-/esquery-1.6.0.tgz} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, tarball: https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz} - engines: {node: '>=4.0'} - - estree-util-attach-comments@2.1.1: - resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==, tarball: https://registry.npmmirror.com/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz} - - estree-util-is-identifier-name@2.1.0: - resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==, tarball: https://registry.npmmirror.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz} - - estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==, tarball: https://registry.npmmirror.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz} - - estree-util-to-js@1.2.0: - resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==, tarball: https://registry.npmmirror.com/estree-util-to-js/-/estree-util-to-js-1.2.0.tgz} - - estree-util-visit@1.2.1: - resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==, tarball: https://registry.npmmirror.com/estree-util-visit/-/estree-util-visit-1.2.1.tgz} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, tarball: https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz} - engines: {node: '>=0.10.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, tarball: https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz} - engines: {node: '>= 0.6'} - - eventemitter3@2.0.3: - resolution: {integrity: sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==, tarball: https://registry.npmmirror.com/eventemitter3/-/eventemitter3-2.0.3.tgz} - - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, tarball: https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz} - - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, tarball: https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz} - - events-okam@3.3.0: - resolution: {integrity: sha512-6iR7z9hAJEwrT+D2Ywg6Fx62HSmN86OlcvPdrnq1JBeFr30dMF6l+j7M3VabjHfIi2KMtF8rO0J1rIZEfwMAwg==, tarball: https://registry.npmmirror.com/events-okam/-/events-okam-3.3.0.tgz} - engines: {node: '>=0.8.x'} - - events@1.1.1: - resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==, tarball: https://registry.npmmirror.com/events/-/events-1.1.1.tgz} - engines: {node: '>=0.4.x'} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, tarball: https://registry.npmmirror.com/events/-/events-3.3.0.tgz} - engines: {node: '>=0.8.x'} - - evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==, tarball: https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz} - - exec-sh@0.3.6: - resolution: {integrity: sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==, tarball: https://registry.npmmirror.com/exec-sh/-/exec-sh-0.3.6.tgz} - - execa@0.7.0: - resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==, tarball: https://registry.npmmirror.com/execa/-/execa-0.7.0.tgz} - engines: {node: '>=4'} - - execa@0.8.0: - resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==, tarball: https://registry.npmmirror.com/execa/-/execa-0.8.0.tgz} - engines: {node: '>=4'} - - execa@1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==, tarball: https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz} - engines: {node: '>=6'} - - execa@4.1.0: - resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==, tarball: https://registry.npmmirror.com/execa/-/execa-4.1.0.tgz} - engines: {node: '>=10'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, tarball: https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz} - engines: {node: '>=10'} - - execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==, tarball: https://registry.npmmirror.com/execa/-/execa-7.2.0.tgz} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==, tarball: https://registry.npmmirror.com/execa/-/execa-8.0.1.tgz} - engines: {node: '>=16.17'} - - execall@2.0.0: - resolution: {integrity: sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==, tarball: https://registry.npmmirror.com/execall/-/execall-2.0.0.tgz} - engines: {node: '>=8'} - - exit-hook@4.0.0: - resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==, tarball: https://registry.npmmirror.com/exit-hook/-/exit-hook-4.0.0.tgz} - engines: {node: '>=18'} - - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==, tarball: https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz} - engines: {node: '>= 0.8.0'} - - expand-brackets@2.1.4: - resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==, tarball: https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz} - engines: {node: '>=0.10.0'} - - expand-tilde@1.2.2: - resolution: {integrity: sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==, tarball: https://registry.npmmirror.com/expand-tilde/-/expand-tilde-1.2.2.tgz} - engines: {node: '>=0.10.0'} - - expect@24.9.0: - resolution: {integrity: sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==, tarball: https://registry.npmmirror.com/expect/-/expect-24.9.0.tgz} - engines: {node: '>= 6'} - - expect@26.6.2: - resolution: {integrity: sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==, tarball: https://registry.npmmirror.com/expect/-/expect-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - express-http-proxy@2.1.1: - resolution: {integrity: sha512-4aRQRqDQU7qNPV5av0/hLcyc0guB9UP71nCYrQEYml7YphTo8tmWf3nDZWdTJMMjFikyz9xKXaURor7Chygdwg==, tarball: https://registry.npmmirror.com/express-http-proxy/-/express-http-proxy-2.1.1.tgz} - engines: {node: '>=6.0.0'} - - express@4.21.1: - resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==, tarball: https://registry.npmmirror.com/express/-/express-4.21.1.tgz} - engines: {node: '>= 0.10.0'} - - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz} - engines: {node: '>=0.10.0'} - - extend-shallow@3.0.2: - resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz} - engines: {node: '>=0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, tarball: https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz} - - extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==, tarball: https://registry.npmmirror.com/extendable-error/-/extendable-error-0.1.7.tgz} - - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, tarball: https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz} - engines: {node: '>=4'} - - extglob@2.0.4: - resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==, tarball: https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz} - engines: {node: '>=0.10.0'} - - extract-zip@1.7.0: - resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==, tarball: https://registry.npmmirror.com/extract-zip/-/extract-zip-1.7.0.tgz} - hasBin: true - - extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==, tarball: https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz} - engines: {'0': node >=0.6.0} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, tarball: https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} - - fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz} - engines: {node: '>=8.6.0'} - - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, tarball: https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, tarball: https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} - - fast-redact@3.5.0: - resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==, tarball: https://registry.npmmirror.com/fast-redact/-/fast-redact-3.5.0.tgz} - engines: {node: '>=6'} - - fast-shallow-equal@1.0.0: - resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==, tarball: https://registry.npmmirror.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz} - - fast-uri@3.0.3: - resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==, tarball: https://registry.npmmirror.com/fast-uri/-/fast-uri-3.0.3.tgz} - - fastest-levenshtein@1.0.16: - resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==, tarball: https://registry.npmmirror.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz} - engines: {node: '>= 4.9.1'} - - fastest-stable-stringify@2.0.2: - resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==, tarball: https://registry.npmmirror.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz} - - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz} - - fault@2.0.1: - resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==, tarball: https://registry.npmmirror.com/fault/-/fault-2.0.1.tgz} - - faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==, tarball: https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz} - engines: {node: '>=0.8.0'} - - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, tarball: https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.2.tgz} - - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==, tarball: https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz} - - fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==, tarball: https://registry.npmmirror.com/fecha/-/fecha-4.2.3.tgz} - - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==, tarball: https://registry.npmmirror.com/fetch-blob/-/fetch-blob-3.2.0.tgz} - engines: {node: ^12.20 || >= 14.13} - - figures@1.7.0: - resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==, tarball: https://registry.npmmirror.com/figures/-/figures-1.7.0.tgz} - engines: {node: '>=0.10.0'} - - figures@2.0.0: - resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==, tarball: https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz} - engines: {node: '>=4'} - - figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, tarball: https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz} - engines: {node: '>=8'} - - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, tarball: https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz} - engines: {node: ^10.12.0 || >=12.0.0} - - file-name@0.1.0: - resolution: {integrity: sha512-Q8SskhjF4eUk/xoQkmubwLkoHwOTv6Jj/WGtOVLKkZ0vvM+LipkSXugkn1F/+mjWXU32AXLZB3qaz0arUzgtRw==, tarball: https://registry.npmmirror.com/file-name/-/file-name-0.1.0.tgz} - engines: {node: '>=0.10.0'} - - file-system-cache@2.4.4: - resolution: {integrity: sha512-vCYhn8pb5nlC3Gs2FFCOkmf4NEg2Ym3ulJwkmS9o6p9oRShGj6CwTMFvpgZihBlsh373NaM0XgAgDHXQIlS4LQ==, tarball: https://registry.npmmirror.com/file-system-cache/-/file-system-cache-2.4.4.tgz} - - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==, tarball: https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==, tarball: https://registry.npmmirror.com/filelist/-/filelist-1.0.4.tgz} - - filename-reserved-regex@1.0.0: - resolution: {integrity: sha512-UZArj7+U+2reBBVCvVmRlyq9D7EYQdUtuNN+1iz7pF1jGcJ2L0TjiRCxsTZfj2xFbM4c25uGCUDpKTHA7L2TKg==, tarball: https://registry.npmmirror.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - filenamify-url@1.0.0: - resolution: {integrity: sha512-O9K9JcZeF5VdZWM1qR92NSv1WY2EofwudQayPx5dbnnFl9k0IcZha4eV/FGkjnBK+1irOQInij0yiooCHu/0Fg==, tarball: https://registry.npmmirror.com/filenamify-url/-/filenamify-url-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - filenamify@1.2.1: - resolution: {integrity: sha512-DKVP0WQcB7WaIMSwDETqImRej2fepPqvXQjaVib7LRZn9Rxn5UbvK2tYTqGf1A1DkIprQQkG4XSQXSOZp7Q3GQ==, tarball: https://registry.npmmirror.com/filenamify/-/filenamify-1.2.1.tgz} - engines: {node: '>=0.10.0'} - - filesize@3.6.1: - resolution: {integrity: sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==, tarball: https://registry.npmmirror.com/filesize/-/filesize-3.6.1.tgz} - engines: {node: '>= 0.4.0'} - - filesize@8.0.7: - resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==, tarball: https://registry.npmmirror.com/filesize/-/filesize-8.0.7.tgz} - engines: {node: '>= 0.4.0'} - - fill-range@4.0.0: - resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz} - engines: {node: '>=0.10.0'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz} - engines: {node: '>=8'} - - filter-obj@1.1.0: - resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==, tarball: https://registry.npmmirror.com/filter-obj/-/filter-obj-1.1.0.tgz} - engines: {node: '>=0.10.0'} - - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==, tarball: https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.1.tgz} - engines: {node: '>= 0.8'} - - find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==, tarball: https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz} - engines: {node: '>=8'} - - find-file-up@0.1.3: - resolution: {integrity: sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==, tarball: https://registry.npmmirror.com/find-file-up/-/find-file-up-0.1.3.tgz} - engines: {node: '>=0.10.0'} - - find-pkg@0.1.2: - resolution: {integrity: sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==, tarball: https://registry.npmmirror.com/find-pkg/-/find-pkg-0.1.2.tgz} - engines: {node: '>=0.10.0'} - - find-up-simple@1.0.0: - resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==, tarball: https://registry.npmmirror.com/find-up-simple/-/find-up-simple-1.0.0.tgz} - engines: {node: '>=18'} - - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==, tarball: https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz} - engines: {node: '>=6'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, tarball: https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, tarball: https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz} - engines: {node: '>=10'} - - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==, tarball: https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz} - engines: {node: ^10.12.0 || >=12.0.0} - - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==, tarball: https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz} - hasBin: true - - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==, tarball: https://registry.npmmirror.com/flatted/-/flatted-3.3.1.tgz} - - flru@1.0.2: - resolution: {integrity: sha512-kWyh8ADvHBFz6ua5xYOPnUroZTT/bwWfrCeL0Wj1dzG4/YOmOcfJ99W8dOVyyynJN35rZ9aCOtHChqQovV7yog==, tarball: https://registry.npmmirror.com/flru/-/flru-1.0.2.tgz} - engines: {node: '>=6'} - - flush-write-stream@1.1.1: - resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==, tarball: https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz} - - fmin@0.0.2: - resolution: {integrity: sha512-sSi6DzInhl9d8yqssDfGZejChO8d2bAGIpysPsvYsxFe898z89XhCZg6CPNV3nhUhFefeC/AXZK2bAJxlBjN6A==, tarball: https://registry.npmmirror.com/fmin/-/fmin-0.0.2.tgz} - - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - follow-redirects@1.5.10: - resolution: {integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz} - engines: {node: '>=4.0'} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, tarball: https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz} - - for-in@1.0.2: - resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==, tarball: https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz} - engines: {node: '>=0.10.0'} - - foreach@2.0.6: - resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==, tarball: https://registry.npmmirror.com/foreach/-/foreach-2.0.6.tgz} - - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==, tarball: https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.0.tgz} - engines: {node: '>=14'} - - forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==, tarball: https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz} - - fork-ts-checker-webpack-plugin@6.5.3: - resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==, tarball: https://registry.npmmirror.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz} - engines: {node: '>=10', yarn: '>=1.0.0'} - peerDependencies: - eslint: '>= 6' - typescript: '>= 2.7' - vue-template-compiler: '*' - webpack: '>= 4' - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - - fork-ts-checker-webpack-plugin@8.0.0: - resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==, tarball: https://registry.npmmirror.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz} - engines: {node: '>=12.13.0', yarn: '>=1.0.0'} - peerDependencies: - typescript: '>3.6.0' - webpack: ^5.11.0 - - form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==, tarball: https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz} - engines: {node: '>= 0.12'} - - form-data@3.0.2: - resolution: {integrity: sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==, tarball: https://registry.npmmirror.com/form-data/-/form-data-3.0.2.tgz} - engines: {node: '>= 6'} - - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==, tarball: https://registry.npmmirror.com/format/-/format-0.2.2.tgz} - engines: {node: '>=0.4.x'} - - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==, tarball: https://registry.npmmirror.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz} - engines: {node: '>=12.20.0'} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==, tarball: https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz} - engines: {node: '>= 0.6'} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==, tarball: https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz} - - fragment-cache@0.2.1: - resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==, tarball: https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz} - engines: {node: '>=0.10.0'} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==, tarball: https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz} - engines: {node: '>= 0.6'} - - from2@2.3.0: - resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==, tarball: https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz} - - front-matter@4.0.2: - resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==, tarball: https://registry.npmmirror.com/front-matter/-/front-matter-4.0.2.tgz} - - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==, tarball: https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz} - - fs-exists-sync@0.1.0: - resolution: {integrity: sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==, tarball: https://registry.npmmirror.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz} - engines: {node: '>=0.10.0'} - - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz} - engines: {node: '>=12'} - - fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-11.1.1.tgz} - engines: {node: '>=14.14'} - - fs-extra@3.0.1: - resolution: {integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-3.0.1.tgz} - - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-7.0.1.tgz} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz} - engines: {node: '>=10'} - - fs-monkey@1.0.6: - resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==, tarball: https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.6.tgz} - - fs-write-stream-atomic@1.0.10: - resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==, tarball: https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz} - deprecated: This package is no longer supported. - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz} - - fsevents@1.2.13: - resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz} - engines: {node: '>= 4.0'} - os: [darwin] - deprecated: Upgrade to fsevents v2 to mitigate potential security issues - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz} - - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==, tarball: https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz} - engines: {node: '>= 0.4'} - - functional-red-black-tree@1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==, tarball: https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, tarball: https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz} - - genfun@4.0.1: - resolution: {integrity: sha512-48yv1eDS5Qrz6cbSDBBik0u7jCgC/eA9eZrl9MIN1LfKzFTuGt6EHgr31YM8yT9cjb5BplXb4Iz3VtOYmgt8Jg==, tarball: https://registry.npmmirror.com/genfun/-/genfun-4.0.1.tgz} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, tarball: https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, tarball: https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz} - engines: {node: 6.* || 8.* || >= 10.*} - - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==, tarball: https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz} - engines: {node: '>=18'} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==, tarball: https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz} - engines: {node: '>= 0.4'} - - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==, tarball: https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz} - engines: {node: '>=8.0.0'} - - get-stdin@8.0.0: - resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==, tarball: https://registry.npmmirror.com/get-stdin/-/get-stdin-8.0.0.tgz} - engines: {node: '>=10'} - - get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==, tarball: https://registry.npmmirror.com/get-stdin/-/get-stdin-9.0.0.tgz} - engines: {node: '>=12'} - - get-stream@3.0.0: - resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz} - engines: {node: '>=4'} - - get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz} - engines: {node: '>=6'} - - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz} - engines: {node: '>=8'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz} - engines: {node: '>=10'} - - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-8.0.1.tgz} - engines: {node: '>=16'} - - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==, tarball: https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz} - engines: {node: '>= 0.4'} - - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==, tarball: https://registry.npmmirror.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz} - - get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==, tarball: https://registry.npmmirror.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz} - - get-value@2.0.6: - resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==, tarball: https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz} - engines: {node: '>=0.10.0'} - - getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==, tarball: https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz} - - gh-pages@2.2.0: - resolution: {integrity: sha512-c+yPkNOPMFGNisYg9r4qvsMIjVYikJv7ImFOhPIVPt0+AcRUamZ7zkGRLHz7FKB0xrlZ+ddSOJsZv9XAFVXLmA==, tarball: https://registry.npmmirror.com/gh-pages/-/gh-pages-2.2.0.tgz} - engines: {node: '>=6'} - hasBin: true - - git-branch@1.0.0: - resolution: {integrity: sha512-ZTzuqw5Df8fyLXQWrX6hK+4FpNCdKzMcERlxENEGO5aKcLmG7MAszhrMhluUKNKmOS/JAGijDMQDXDCDw1mE/A==, tarball: https://registry.npmmirror.com/git-branch/-/git-branch-1.0.0.tgz} - engines: {node: '>=0.8'} - - git-config-path@1.0.1: - resolution: {integrity: sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==, tarball: https://registry.npmmirror.com/git-config-path/-/git-config-path-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - git-hooks-list@1.0.3: - resolution: {integrity: sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==, tarball: https://registry.npmmirror.com/git-hooks-list/-/git-hooks-list-1.0.3.tgz} - - git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==, tarball: https://registry.npmmirror.com/git-hooks-list/-/git-hooks-list-3.1.0.tgz} - - git-raw-commits@5.0.0: - resolution: {integrity: sha512-I2ZXrXeOc0KrCvC7swqtIFXFN+rbjnC7b2T943tvemIOVNl+XP8YnA9UVwqFhzzLClnSA60KR/qEjLpXzs73Qg==, tarball: https://registry.npmmirror.com/git-raw-commits/-/git-raw-commits-5.0.0.tgz} - engines: {node: '>=18'} - hasBin: true - - git-repo-name@0.6.0: - resolution: {integrity: sha512-DF4XxB6H+Te79JA08/QF/IjIv+j+0gF990WlgAX3SXXU2irfqvBc/xxlAIh6eJWYaKz45MrrGVBFS0Qc4bBz5g==, tarball: https://registry.npmmirror.com/git-repo-name/-/git-repo-name-0.6.0.tgz} - engines: {node: '>=0.8'} - - git-semver-tags@8.0.0: - resolution: {integrity: sha512-N7YRIklvPH3wYWAR2vysaqGLPRcpwQ0GKdlqTiVN5w1UmCdaeY3K8s6DMKRCh54DDdzyt/OAB6C8jgVtb7Y2Fg==, tarball: https://registry.npmmirror.com/git-semver-tags/-/git-semver-tags-8.0.0.tgz} - engines: {node: '>=18'} - hasBin: true - - git-username@0.5.1: - resolution: {integrity: sha512-xjUjrj3i4kup2A3a/ZVZB1Nt0PUX7SU7KeVqIbXPdslT7NbNfyO04JMxBv4gar77JePdS+A6f05jG1Viy6+U1w==, tarball: https://registry.npmmirror.com/git-username/-/git-username-0.5.1.tgz} - engines: {node: '>=0.8'} - - github-slugger@1.5.0: - resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==, tarball: https://registry.npmmirror.com/github-slugger/-/github-slugger-1.5.0.tgz} - - github-url-from-git@1.5.0: - resolution: {integrity: sha512-WWOec4aRI7YAykQ9+BHmzjyNlkfJFG8QLXnDTsLz/kZefq7qkzdfo4p6fkYYMIq1aj+gZcQs/1HQhQh3DPPxlQ==, tarball: https://registry.npmmirror.com/github-url-from-git/-/github-url-from-git-1.5.0.tgz} - - gl-matrix@3.4.3: - resolution: {integrity: sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==, tarball: https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz} - engines: {node: '>= 6'} - - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, tarball: https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==, tarball: https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, tarball: https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz} - deprecated: Glob versions prior to v9 are no longer supported - - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, tarball: https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported - - global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==, tarball: https://registry.npmmirror.com/global-agent/-/global-agent-3.0.0.tgz} - engines: {node: '>=10.0'} - - global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==, tarball: https://registry.npmmirror.com/global-directory/-/global-directory-4.0.1.tgz} - engines: {node: '>=18'} - - global-dirs@0.1.1: - resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==, tarball: https://registry.npmmirror.com/global-dirs/-/global-dirs-0.1.1.tgz} - engines: {node: '>=4'} - - global-modules@0.2.3: - resolution: {integrity: sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==, tarball: https://registry.npmmirror.com/global-modules/-/global-modules-0.2.3.tgz} - engines: {node: '>=0.10.0'} - - global-modules@2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==, tarball: https://registry.npmmirror.com/global-modules/-/global-modules-2.0.0.tgz} - engines: {node: '>=6'} - - global-prefix@0.1.5: - resolution: {integrity: sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==, tarball: https://registry.npmmirror.com/global-prefix/-/global-prefix-0.1.5.tgz} - engines: {node: '>=0.10.0'} - - global-prefix@3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==, tarball: https://registry.npmmirror.com/global-prefix/-/global-prefix-3.0.0.tgz} - engines: {node: '>=6'} - - global-tunnel-ng@2.7.1: - resolution: {integrity: sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==, tarball: https://registry.npmmirror.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz} - engines: {node: '>=0.10'} - - global@4.4.0: - resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==, tarball: https://registry.npmmirror.com/global/-/global-4.4.0.tgz} - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, tarball: https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz} - engines: {node: '>=4'} - - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==, tarball: https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz} - engines: {node: '>=8'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, tarball: https://registry.npmmirror.com/globalthis/-/globalthis-1.0.4.tgz} - engines: {node: '>= 0.4'} - - globby@10.0.0: - resolution: {integrity: sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==, tarball: https://registry.npmmirror.com/globby/-/globby-10.0.0.tgz} - engines: {node: '>=8'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, tarball: https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz} - engines: {node: '>=10'} - - globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==, tarball: https://registry.npmmirror.com/globby/-/globby-13.2.2.tgz} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - globby@6.1.0: - resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==, tarball: https://registry.npmmirror.com/globby/-/globby-6.1.0.tgz} - engines: {node: '>=0.10.0'} - - globjoin@0.1.4: - resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==, tarball: https://registry.npmmirror.com/globjoin/-/globjoin-0.1.4.tgz} - - gonzales-pe@4.3.0: - resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==, tarball: https://registry.npmmirror.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz} - engines: {node: '>=0.6.0'} - hasBin: true - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, tarball: https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz} - - got@6.7.1: - resolution: {integrity: sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==, tarball: https://registry.npmmirror.com/got/-/got-6.7.1.tgz} - engines: {node: '>=4'} - - got@9.6.0: - resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==, tarball: https://registry.npmmirror.com/got/-/got-9.6.0.tgz} - engines: {node: '>=8.6'} - - graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz} - - graphlib@2.1.8: - resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==, tarball: https://registry.npmmirror.com/graphlib/-/graphlib-2.1.8.tgz} - - growly@1.3.0: - resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==, tarball: https://registry.npmmirror.com/growly/-/growly-1.3.0.tgz} - - gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==, tarball: https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz} - engines: {node: '>=10'} - - handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==, tarball: https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz} - - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==, tarball: https://registry.npmmirror.com/handlebars/-/handlebars-4.7.8.tgz} - engines: {node: '>=0.4.7'} - hasBin: true - - har-schema@2.0.0: - resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==, tarball: https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz} - engines: {node: '>=4'} - - har-validator@5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==, tarball: https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz} - engines: {node: '>=6'} - deprecated: this library is no longer supported - - hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==, tarball: https://registry.npmmirror.com/hard-rejection/-/hard-rejection-2.1.0.tgz} - engines: {node: '>=6'} - - harmony-reflect@1.6.2: - resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==, tarball: https://registry.npmmirror.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz} - - has-ansi@2.0.0: - resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==, tarball: https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz} - engines: {node: '>=0.10.0'} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, tarball: https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, tarball: https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==, tarball: https://registry.npmmirror.com/has-proto/-/has-proto-1.0.3.tgz} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, tarball: https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, tarball: https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz} - engines: {node: '>= 0.4'} - - has-value@0.3.1: - resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==, tarball: https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz} - engines: {node: '>=0.10.0'} - - has-value@1.0.0: - resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==, tarball: https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - has-values@0.1.4: - resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==, tarball: https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz} - engines: {node: '>=0.10.0'} - - has-values@1.0.0: - resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==, tarball: https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==, tarball: https://registry.npmmirror.com/has/-/has-1.0.4.tgz} - engines: {node: '>= 0.4.0'} - - hash-base@3.0.4: - resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==, tarball: https://registry.npmmirror.com/hash-base/-/hash-base-3.0.4.tgz} - engines: {node: '>=4'} - - hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==, tarball: https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, tarball: https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz} - engines: {node: '>= 0.4'} - - hast-util-from-parse5@7.1.2: - resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==, tarball: https://registry.npmmirror.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz} - - hast-util-from-parse5@8.0.1: - resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==, tarball: https://registry.npmmirror.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz} - - hast-util-has-property@2.0.1: - resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==, tarball: https://registry.npmmirror.com/hast-util-has-property/-/hast-util-has-property-2.0.1.tgz} - - hast-util-heading-rank@2.1.1: - resolution: {integrity: sha512-iAuRp+ESgJoRFJbSyaqsfvJDY6zzmFoEnL1gtz1+U8gKtGGj1p0CVlysuUAUjq95qlZESHINLThwJzNGmgGZxA==, tarball: https://registry.npmmirror.com/hast-util-heading-rank/-/hast-util-heading-rank-2.1.1.tgz} - - hast-util-is-conditional-comment@2.0.0: - resolution: {integrity: sha512-U66gW8ZWQdxP4ZjTEZ3xZT72y6rIKJqV4At5QmC1ItBbQyZyVkuTp8QkQwhxsbkHdzpifiZdQWrDipc9ByqhRg==, tarball: https://registry.npmmirror.com/hast-util-is-conditional-comment/-/hast-util-is-conditional-comment-2.0.0.tgz} - - hast-util-is-element@2.1.3: - resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==, tarball: https://registry.npmmirror.com/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz} - - hast-util-parse-selector@3.1.1: - resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==, tarball: https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz} - - hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==, tarball: https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz} - - hast-util-raw@7.2.3: - resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==, tarball: https://registry.npmmirror.com/hast-util-raw/-/hast-util-raw-7.2.3.tgz} - - hast-util-raw@8.0.0: - resolution: {integrity: sha512-bKbaUxMNLjZMMowgcrc4l3aQSPiMLiceZD+mp+AKF8Si0mtyR2DYVdxzS2XBxXYDeW/VvfZy40lNxHRiY6MMTg==, tarball: https://registry.npmmirror.com/hast-util-raw/-/hast-util-raw-8.0.0.tgz} - - hast-util-raw@9.0.4: - resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==, tarball: https://registry.npmmirror.com/hast-util-raw/-/hast-util-raw-9.0.4.tgz} - - hast-util-to-estree@2.3.3: - resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==, tarball: https://registry.npmmirror.com/hast-util-to-estree/-/hast-util-to-estree-2.3.3.tgz} - - hast-util-to-html@8.0.4: - resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==, tarball: https://registry.npmmirror.com/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz} - - hast-util-to-jsx-runtime@2.3.2: - resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==, tarball: https://registry.npmmirror.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz} - - hast-util-to-parse5@7.1.0: - resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==, tarball: https://registry.npmmirror.com/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz} - - hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==, tarball: https://registry.npmmirror.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz} - - hast-util-to-string@2.0.0: - resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==, tarball: https://registry.npmmirror.com/hast-util-to-string/-/hast-util-to-string-2.0.0.tgz} - - hast-util-whitespace@2.0.1: - resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==, tarball: https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==, tarball: https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz} - - hast@1.0.0: - resolution: {integrity: sha512-vFUqlRV5C+xqP76Wwq2SrM0kipnmpxJm7OfvVXpB35Fp+Fn4MV+ozr+JZr5qFvyR1q/U+Foim2x+3P+x9S1PLA==, tarball: https://registry.npmmirror.com/hast/-/hast-1.0.0.tgz} - deprecated: Renamed to rehype - - hastscript@7.2.0: - resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==, tarball: https://registry.npmmirror.com/hastscript/-/hastscript-7.2.0.tgz} - - hastscript@8.0.0: - resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==, tarball: https://registry.npmmirror.com/hastscript/-/hastscript-8.0.0.tgz} - - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, tarball: https://registry.npmmirror.com/he/-/he-1.2.0.tgz} - hasBin: true - - heti-findandreplacedomtext@0.5.0: - resolution: {integrity: sha512-GFZjqU8LAdu1uR72GqrReI+lzNLMlcWtvdz1TKNJiofyo1mfTecFYSZEoEbcLcRMl+KwEldnNQoS4BwO8wtg0A==, tarball: https://registry.npmmirror.com/heti-findandreplacedomtext/-/heti-findandreplacedomtext-0.5.0.tgz} - - heti@0.9.4: - resolution: {integrity: sha512-DI1A/R6VabM8wulXrGVbeHZNZ8jJUm+Pwn+PEYZcNBxAO+4mXWPEX+Xu9R/YrHETGcevNrLO34m/99ZCnFnlhw==, tarball: https://registry.npmmirror.com/heti/-/heti-0.9.4.tgz} - - highlight.js@10.7.3: - resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==, tarball: https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz} - - history@5.3.0: - resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==, tarball: https://registry.npmmirror.com/history/-/history-5.3.0.tgz} - - hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==, tarball: https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz} - - hogan.js@3.0.2: - resolution: {integrity: sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==, tarball: https://registry.npmmirror.com/hogan.js/-/hogan.js-3.0.2.tgz} - hasBin: true - - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==, tarball: https://registry.npmmirror.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz} - - homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==, tarball: https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz} - engines: {node: '>=0.10.0'} - - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, tarball: https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz} - - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==, tarball: https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz} - engines: {node: '>=10'} - - hosted-git-info@6.1.1: - resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==, tarball: https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - hosted-git-info@7.0.2: - resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==, tarball: https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz} - engines: {node: ^16.14.0 || >=18.0.0} - - hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==, tarball: https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz} - - htm@3.1.1: - resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==, tarball: https://registry.npmmirror.com/htm/-/htm-3.1.1.tgz} - - html-element-map@1.3.1: - resolution: {integrity: sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==, tarball: https://registry.npmmirror.com/html-element-map/-/html-element-map-1.3.1.tgz} - - html-encoding-sniffer@1.0.2: - resolution: {integrity: sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==, tarball: https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz} - - html-encoding-sniffer@2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==, tarball: https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz} - engines: {node: '>=10'} - - html-entities@2.5.2: - resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==, tarball: https://registry.npmmirror.com/html-entities/-/html-entities-2.5.2.tgz} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, tarball: https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz} - - html-minifier-terser@6.1.0: - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==, tarball: https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz} - engines: {node: '>=12'} - hasBin: true - - html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==, tarball: https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz} - engines: {node: '>=8'} - - html-to-text@9.0.5: - resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==, tarball: https://registry.npmmirror.com/html-to-text/-/html-to-text-9.0.5.tgz} - engines: {node: '>=14'} - - html-url-attributes@3.0.1: - resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==, tarball: https://registry.npmmirror.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz} - - html-void-elements@2.0.1: - resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==, tarball: https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz} - - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==, tarball: https://registry.npmmirror.com/html-void-elements/-/html-void-elements-3.0.0.tgz} - - html-webpack-plugin@5.5.0: - resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==, tarball: https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz} - engines: {node: '>=10.13.0'} - peerDependencies: - webpack: ^5.20.0 - - html2sketch@1.0.2: - resolution: {integrity: sha512-/P9NcVH9yBhrOkcnaFkAbWJifDO8Ii+CTIxy9gE6trSQvo2OH++TKQIP5MICEoWvgXpVhZ6botj7P63Krl1/gg==, tarball: https://registry.npmmirror.com/html2sketch/-/html2sketch-1.0.2.tgz} - engines: {node: '>=14.0.0'} - - htmlparser2@3.10.1: - resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-3.10.1.tgz} - - htmlparser2@6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz} - - htmlparser2@8.0.2: - resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.2.tgz} - - htmlparser2@9.1.0: - resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-9.1.0.tgz} - - http-cache-semantics@3.8.1: - resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==, tarball: https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz} - - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==, tarball: https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz} - - http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==, tarball: https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz} - - http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==, tarball: https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz} - engines: {node: '>= 0.6'} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==, tarball: https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz} - engines: {node: '>= 0.8'} - - http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==, tarball: https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz} - - http-proxy-agent@2.1.0: - resolution: {integrity: sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==, tarball: https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz} - engines: {node: '>= 4.5.0'} - - http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==, tarball: https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz} - engines: {node: '>= 6'} - - http-proxy-middleware@2.0.7: - resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==, tarball: https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - - http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==, tarball: https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz} - engines: {node: '>=8.0.0'} - - http-signature@1.2.0: - resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==, tarball: https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz} - engines: {node: '>=0.8', npm: '>=1.3.7'} - - https-browserify@1.0.0: - resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==, tarball: https://registry.npmmirror.com/https-browserify/-/https-browserify-1.0.0.tgz} - - https-proxy-agent@2.2.4: - resolution: {integrity: sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==, tarball: https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz} - engines: {node: '>= 4.5.0'} - - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==, tarball: https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz} - engines: {node: '>= 6'} - - hull.js@1.0.6: - resolution: {integrity: sha512-TC7e9sHYOaCVms0sn2hN7buxnaGfcl9h5EPVoVX9DTPoMpqQiS9bf3tmGDgiNaMVHBD91RAvWjCxrJ5Jx8BI5A==, tarball: https://registry.npmmirror.com/hull.js/-/hull.js-1.0.6.tgz} - deprecated: This package is no longer published on npmjs.com, you are using a deprecated and vulnerable version. Do not use it. Check package homepage on GitHub to see how to fetch the latest version. - - human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==, tarball: https://registry.npmmirror.com/human-id/-/human-id-1.0.2.tgz} - - human-signals@1.1.1: - resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz} - engines: {node: '>=8.12.0'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz} - engines: {node: '>=10.17.0'} - - human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-4.3.1.tgz} - engines: {node: '>=14.18.0'} - - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-5.0.0.tgz} - engines: {node: '>=16.17.0'} - - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==, tarball: https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz} - - humanize-url@1.0.1: - resolution: {integrity: sha512-RtgTzXCPVb/te+e82NDhAc5paj+DuKSratIGAr+v+HZK24eAQ8LMoBGYoL7N/O+9iEc33AKHg45dOMKw3DNldQ==, tarball: https://registry.npmmirror.com/humanize-url/-/humanize-url-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - humps@2.0.1: - resolution: {integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==, tarball: https://registry.npmmirror.com/humps/-/humps-2.0.1.tgz} - - hyperdyperid@1.2.0: - resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==, tarball: https://registry.npmmirror.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz} - engines: {node: '>=10.18'} - - hyphenate-style-name@1.1.0: - resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==, tarball: https://registry.npmmirror.com/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz} - - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz} - engines: {node: '>=0.10.0'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz} - engines: {node: '>=0.10.0'} - - icss-utils@5.1.0: - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==, tarball: https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - identity-obj-proxy@3.0.0: - resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==, tarball: https://registry.npmmirror.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz} - engines: {node: '>=4'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, tarball: https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz} - - iferr@0.1.5: - resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==, tarball: https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz} - - ignore-walk@6.0.5: - resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==, tarball: https://registry.npmmirror.com/ignore-walk/-/ignore-walk-6.0.5.tgz} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - ignore@4.0.6: - resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==, tarball: https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz} - engines: {node: '>= 4'} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, tarball: https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz} - engines: {node: '>= 4'} - - image-size@0.5.5: - resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz} - engines: {node: '>=0.10.0'} - hasBin: true - - image-size@0.8.3: - resolution: {integrity: sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg==, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.8.3.tgz} - engines: {node: '>=6.9.0'} - hasBin: true - - immediate@3.3.0: - resolution: {integrity: sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==, tarball: https://registry.npmmirror.com/immediate/-/immediate-3.3.0.tgz} - - immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==, tarball: https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz} - - immutable@4.3.7: - resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.3.7.tgz} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, tarball: https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz} - engines: {node: '>=6'} - - import-lazy@2.1.0: - resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==, tarball: https://registry.npmmirror.com/import-lazy/-/import-lazy-2.1.0.tgz} - engines: {node: '>=4'} - - import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==, tarball: https://registry.npmmirror.com/import-lazy/-/import-lazy-4.0.0.tgz} - engines: {node: '>=8'} - - import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==, tarball: https://registry.npmmirror.com/import-local/-/import-local-3.2.0.tgz} - engines: {node: '>=8'} - hasBin: true - - import-modules@2.1.0: - resolution: {integrity: sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==, tarball: https://registry.npmmirror.com/import-modules/-/import-modules-2.1.0.tgz} - engines: {node: '>=8'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, tarball: https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz} - engines: {node: '>=0.8.19'} - - indent-string@3.2.0: - resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-3.2.0.tgz} - engines: {node: '>=4'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz} - engines: {node: '>=8'} - - indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-5.0.0.tgz} - engines: {node: '>=12'} - - index-to-position@0.1.2: - resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==, tarball: https://registry.npmmirror.com/index-to-position/-/index-to-position-0.1.2.tgz} - engines: {node: '>=18'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.1: - resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.1.tgz} - - inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, tarball: https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz} - - ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==, tarball: https://registry.npmmirror.com/ini/-/ini-4.1.1.tgz} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==, tarball: https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz} - - inline-style-parser@0.2.4: - resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==, tarball: https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz} - - inline-style-prefixer@7.0.1: - resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==, tarball: https://registry.npmmirror.com/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz} - - inquirer-autosubmit-prompt@0.2.0: - resolution: {integrity: sha512-mzNrusCk5L6kSzlN0Ioddn8yzrhYNLli+Sn2ZxMuLechMYAzakiFCIULxsxlQb5YKzthLGfrFACcWoAvM7p04Q==, tarball: https://registry.npmmirror.com/inquirer-autosubmit-prompt/-/inquirer-autosubmit-prompt-0.2.0.tgz} - - inquirer@6.5.2: - resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==, tarball: https://registry.npmmirror.com/inquirer/-/inquirer-6.5.2.tgz} - engines: {node: '>=6.0.0'} - - inquirer@7.3.3: - resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==, tarball: https://registry.npmmirror.com/inquirer/-/inquirer-7.3.3.tgz} - engines: {node: '>=8.0.0'} - - inquirer@9.3.7: - resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==, tarball: https://registry.npmmirror.com/inquirer/-/inquirer-9.3.7.tgz} - engines: {node: '>=18'} - - insert-css@2.0.0: - resolution: {integrity: sha512-xGq5ISgcUP5cvGkS2MMFLtPDBtrtQPSFfC6gA6U8wHKqfjTIMZLZNxOItQnoSjdOzlXOLU/yD32RKC4SvjNbtA==, tarball: https://registry.npmmirror.com/insert-css/-/insert-css-2.0.0.tgz} - - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==, tarball: https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.7.tgz} - engines: {node: '>= 0.4'} - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==, tarball: https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz} - engines: {node: '>=12'} - - interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==, tarball: https://registry.npmmirror.com/interpret/-/interpret-1.4.0.tgz} - engines: {node: '>= 0.10'} - - interpret@3.1.1: - resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==, tarball: https://registry.npmmirror.com/interpret/-/interpret-3.1.1.tgz} - engines: {node: '>=10.13.0'} - - intl-messageformat@10.7.6: - resolution: {integrity: sha512-IsMU/hqyy3FJwNJ0hxDfY2heJ7MteSuFvcnCebxRp67di4Fhx1gKKE+qS0bBwUF8yXkX9SsPUhLeX/B6h5SKUA==, tarball: https://registry.npmmirror.com/intl-messageformat/-/intl-messageformat-10.7.6.tgz} - - invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==, tarball: https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz} - - invert-kv@3.0.1: - resolution: {integrity: sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==, tarball: https://registry.npmmirror.com/invert-kv/-/invert-kv-3.0.1.tgz} - engines: {node: '>=8'} - - ip@1.1.9: - resolution: {integrity: sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==, tarball: https://registry.npmmirror.com/ip/-/ip-1.1.9.tgz} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, tarball: https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz} - engines: {node: '>= 0.10'} - - ipaddr.js@2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==, tarball: https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz} - engines: {node: '>= 10'} - - irregular-plurals@3.5.0: - resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==, tarball: https://registry.npmmirror.com/irregular-plurals/-/irregular-plurals-3.5.0.tgz} - engines: {node: '>=8'} - - is-accessor-descriptor@1.0.1: - resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==, tarball: https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz} - engines: {node: '>= 0.10'} - - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==, tarball: https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz} - - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==, tarball: https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz} - - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==, tarball: https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz} - - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==, tarball: https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz} - - is-any-array@2.0.1: - resolution: {integrity: sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==, tarball: https://registry.npmmirror.com/is-any-array/-/is-any-array-2.0.1.tgz} - - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==, tarball: https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==, tarball: https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz} - engines: {node: '>= 0.4'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, tarball: https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz} - - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==, tarball: https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz} - - is-arrow-function@2.0.3: - resolution: {integrity: sha512-iDStzcT1FJMzx+TjCOK//uDugSe/Mif/8a+T0htydQ3qkJGvSweTZpVYz4hpJH0baloSPiAFQdA8WslAgJphvQ==, tarball: https://registry.npmmirror.com/is-arrow-function/-/is-arrow-function-2.0.3.tgz} - engines: {node: '>= 0.4'} - - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==, tarball: https://registry.npmmirror.com/is-async-function/-/is-async-function-2.0.0.tgz} - engines: {node: '>= 0.4'} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, tarball: https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz} - engines: {node: '>=8'} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, tarball: https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz} - engines: {node: '>= 0.4'} - - is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==, tarball: https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz} - - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==, tarball: https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz} - engines: {node: '>=4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, tarball: https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz} - engines: {node: '>= 0.4'} - - is-ci@1.2.1: - resolution: {integrity: sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==, tarball: https://registry.npmmirror.com/is-ci/-/is-ci-1.2.1.tgz} - hasBin: true - - is-ci@2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==, tarball: https://registry.npmmirror.com/is-ci/-/is-ci-2.0.0.tgz} - hasBin: true - - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.15.1.tgz} - engines: {node: '>= 0.4'} - - is-data-descriptor@1.0.1: - resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==, tarball: https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz} - engines: {node: '>= 0.4'} - - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==, tarball: https://registry.npmmirror.com/is-data-view/-/is-data-view-1.0.1.tgz} - engines: {node: '>= 0.4'} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, tarball: https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz} - engines: {node: '>= 0.4'} - - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==, tarball: https://registry.npmmirror.com/is-decimal/-/is-decimal-1.0.4.tgz} - - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==, tarball: https://registry.npmmirror.com/is-decimal/-/is-decimal-2.0.1.tgz} - - is-descriptor@0.1.7: - resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==, tarball: https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.7.tgz} - engines: {node: '>= 0.4'} - - is-descriptor@1.0.3: - resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==, tarball: https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.3.tgz} - engines: {node: '>= 0.4'} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, tarball: https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz} - engines: {node: '>=8'} - hasBin: true - - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==, tarball: https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - - is-equal@1.7.0: - resolution: {integrity: sha512-hErktGR9jmoYXNWlbrwGjc8eHh09mbY6TWSTTFtnMcKaCuSMN8z+Ni5ma/8mkbVpe4CbB7V6kN1MkCg9bCx5bA==, tarball: https://registry.npmmirror.com/is-equal/-/is-equal-1.7.0.tgz} - engines: {node: '>= 0.4'} - - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz} - engines: {node: '>=0.10.0'} - - is-extendable@1.0.1: - resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==, tarball: https://registry.npmmirror.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz} - - is-fullwidth-code-point@1.0.0: - resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz} - engines: {node: '>=4'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz} - engines: {node: '>=8'} - - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==, tarball: https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz} - engines: {node: '>=6'} - - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==, tarball: https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.0.10.tgz} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz} - engines: {node: '>=0.10.0'} - - is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==, tarball: https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz} - - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==, tarball: https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz} - - is-in-ci@1.0.0: - resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==, tarball: https://registry.npmmirror.com/is-in-ci/-/is-in-ci-1.0.0.tgz} - engines: {node: '>=18'} - hasBin: true - - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==, tarball: https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz} - engines: {node: '>=14.16'} - hasBin: true - - is-installed-globally@0.1.0: - resolution: {integrity: sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==, tarball: https://registry.npmmirror.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz} - engines: {node: '>=4'} - - is-installed-globally@1.0.0: - resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==, tarball: https://registry.npmmirror.com/is-installed-globally/-/is-installed-globally-1.0.0.tgz} - engines: {node: '>=18'} - - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==, tarball: https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz} - engines: {node: '>=8'} - - is-interactive@2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==, tarball: https://registry.npmmirror.com/is-interactive/-/is-interactive-2.0.0.tgz} - engines: {node: '>=12'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==, tarball: https://registry.npmmirror.com/is-map/-/is-map-2.0.3.tgz} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, tarball: https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz} - engines: {node: '>= 0.4'} - - is-network-error@1.1.0: - resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==, tarball: https://registry.npmmirror.com/is-network-error/-/is-network-error-1.1.0.tgz} - engines: {node: '>=16'} - - is-npm@1.0.0: - resolution: {integrity: sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg==, tarball: https://registry.npmmirror.com/is-npm/-/is-npm-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - is-npm@6.0.0: - resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==, tarball: https://registry.npmmirror.com/is-npm/-/is-npm-6.0.0.tgz} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, tarball: https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz} - engines: {node: '>= 0.4'} - - is-number@3.0.0: - resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==, tarball: https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz} - engines: {node: '>=0.12.0'} - - is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==, tarball: https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, tarball: https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz} - engines: {node: '>=8'} - - is-observable@1.1.0: - resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==, tarball: https://registry.npmmirror.com/is-observable/-/is-observable-1.1.0.tgz} - engines: {node: '>=4'} - - is-path-cwd@3.0.0: - resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==, tarball: https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-3.0.0.tgz} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-path-inside@1.0.1: - resolution: {integrity: sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==, tarball: https://registry.npmmirror.com/is-path-inside/-/is-path-inside-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - is-path-inside@4.0.0: - resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==, tarball: https://registry.npmmirror.com/is-path-inside/-/is-path-inside-4.0.0.tgz} - engines: {node: '>=12'} - - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==, tarball: https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz} - engines: {node: '>=0.10.0'} - - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==, tarball: https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz} - engines: {node: '>=8'} - - is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==, tarball: https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz} - engines: {node: '>=10'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==, tarball: https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz} - engines: {node: '>=12'} - - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==, tarball: https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz} - engines: {node: '>=0.10.0'} - - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==, tarball: https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz} - - is-promise@2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==, tarball: https://registry.npmmirror.com/is-promise/-/is-promise-2.2.2.tgz} - - is-redirect@1.0.0: - resolution: {integrity: sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==, tarball: https://registry.npmmirror.com/is-redirect/-/is-redirect-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, tarball: https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz} - engines: {node: '>= 0.4'} - - is-regexp@2.1.0: - resolution: {integrity: sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==, tarball: https://registry.npmmirror.com/is-regexp/-/is-regexp-2.1.0.tgz} - engines: {node: '>=6'} - - is-retry-allowed@1.2.0: - resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==, tarball: https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz} - engines: {node: '>=0.10.0'} - - is-root@2.1.0: - resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==, tarball: https://registry.npmmirror.com/is-root/-/is-root-2.1.0.tgz} - engines: {node: '>=6'} - - is-scoped@3.0.0: - resolution: {integrity: sha512-ezxLUq30kiTvP0w/5n9tj4qTOKlrA07Oty1hwTQ+lcqw11x6uc8sp7VRb2OVGRzKfCHZ2A22T5Zsau/Q2Akb0g==, tarball: https://registry.npmmirror.com/is-scoped/-/is-scoped-3.0.0.tgz} - engines: {node: '>=12'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==, tarball: https://registry.npmmirror.com/is-set/-/is-set-2.0.3.tgz} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==, tarball: https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz} - engines: {node: '>= 0.4'} - - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz} - engines: {node: '>=0.10.0'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz} - engines: {node: '>=8'} - - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, tarball: https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz} - engines: {node: '>= 0.4'} - - is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==, tarball: https://registry.npmmirror.com/is-subdir/-/is-subdir-1.2.0.tgz} - engines: {node: '>=4'} - - is-subset@0.1.1: - resolution: {integrity: sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==, tarball: https://registry.npmmirror.com/is-subset/-/is-subset-0.1.1.tgz} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, tarball: https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==, tarball: https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.13.tgz} - engines: {node: '>= 0.4'} - - is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==, tarball: https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, tarball: https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz} - engines: {node: '>=10'} - - is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==, tarball: https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz} - engines: {node: '>=12'} - - is-url-superb@6.1.0: - resolution: {integrity: sha512-LXdhGlYqUPdvEyIhWPEEwYYK3yrUiPcBjmFGlZNv1u5GtIL5qQRf7ddDyPNAvsMFqdzS923FROpTQU97tLe3JQ==, tarball: https://registry.npmmirror.com/is-url-superb/-/is-url-superb-6.1.0.tgz} - engines: {node: '>=12'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==, tarball: https://registry.npmmirror.com/is-weakmap/-/is-weakmap-2.0.2.tgz} - engines: {node: '>= 0.4'} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, tarball: https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz} - - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==, tarball: https://registry.npmmirror.com/is-weakset/-/is-weakset-2.0.3.tgz} - engines: {node: '>= 0.4'} - - is-what@3.14.1: - resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==, tarball: https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz} - - is-windows@0.2.0: - resolution: {integrity: sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==, tarball: https://registry.npmmirror.com/is-windows/-/is-windows-0.2.0.tgz} - engines: {node: '>=0.10.0'} - - is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, tarball: https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz} - engines: {node: '>=0.10.0'} - - is-wsl@1.1.0: - resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==, tarball: https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz} - engines: {node: '>=4'} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, tarball: https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz} - engines: {node: '>=8'} - - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==, tarball: https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz} - engines: {node: '>=16'} - - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==, tarball: https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz} - - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, tarball: https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, tarball: https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, tarball: https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz} - - isobject@2.1.0: - resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==, tarball: https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz} - engines: {node: '>=0.10.0'} - - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==, tarball: https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz} - engines: {node: '>=0.10.0'} - - isomorphic-unfetch@4.0.2: - resolution: {integrity: sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==, tarball: https://registry.npmmirror.com/isomorphic-unfetch/-/isomorphic-unfetch-4.0.2.tgz} - - isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==, tarball: https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz} - - issue-regex@4.3.0: - resolution: {integrity: sha512-7731a/t2llyrk8Hdwl1x3LkhIFGzxHQGpJA7Ur9cIRViakQF2y25Lwhx8Ziy1B068+kBYUmYPBzw5uo3DdWrdQ==, tarball: https://registry.npmmirror.com/issue-regex/-/issue-regex-4.3.0.tgz} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - istanbul-lib-coverage@2.0.5: - resolution: {integrity: sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==, tarball: https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz} - engines: {node: '>=6'} - - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==, tarball: https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz} - engines: {node: '>=8'} - - istanbul-lib-instrument@3.3.0: - resolution: {integrity: sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==, tarball: https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz} - engines: {node: '>=6'} - - istanbul-lib-instrument@4.0.3: - resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==, tarball: https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz} - engines: {node: '>=8'} - - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==, tarball: https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz} - engines: {node: '>=8'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==, tarball: https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz} - engines: {node: '>=10'} - - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==, tarball: https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz} - engines: {node: '>=10'} - - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==, tarball: https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz} - engines: {node: '>=8'} - - istextorbinary@2.6.0: - resolution: {integrity: sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA==, tarball: https://registry.npmmirror.com/istextorbinary/-/istextorbinary-2.6.0.tgz} - engines: {node: '>=0.12'} - - iterator.prototype@1.1.3: - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==, tarball: https://registry.npmmirror.com/iterator.prototype/-/iterator.prototype-1.1.3.tgz} - engines: {node: '>= 0.4'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, tarball: https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz} - - jake@10.9.2: - resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==, tarball: https://registry.npmmirror.com/jake/-/jake-10.9.2.tgz} - engines: {node: '>=10'} - hasBin: true - - javascript-stringify@2.1.0: - resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==, tarball: https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz} - - jest-canvas-mock@2.5.2: - resolution: {integrity: sha512-vgnpPupjOL6+L5oJXzxTxFrlGEIbHdZqFU+LFNdtLxZ3lRDCl17FlTMM7IatoRQkrcyOTMlDinjUguqmQ6bR2A==, tarball: https://registry.npmmirror.com/jest-canvas-mock/-/jest-canvas-mock-2.5.2.tgz} - - jest-changed-files@26.6.2: - resolution: {integrity: sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==, tarball: https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-cli@26.6.3: - resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==, tarball: https://registry.npmmirror.com/jest-cli/-/jest-cli-26.6.3.tgz} - engines: {node: '>= 10.14.2'} - hasBin: true - - jest-config@24.9.0: - resolution: {integrity: sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==, tarball: https://registry.npmmirror.com/jest-config/-/jest-config-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-config@26.6.3: - resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==, tarball: https://registry.npmmirror.com/jest-config/-/jest-config-26.6.3.tgz} - engines: {node: '>= 10.14.2'} - peerDependencies: - ts-node: '>=9.0.0' - peerDependenciesMeta: - ts-node: - optional: true - - jest-diff@24.9.0: - resolution: {integrity: sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==, tarball: https://registry.npmmirror.com/jest-diff/-/jest-diff-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-diff@26.6.2: - resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==, tarball: https://registry.npmmirror.com/jest-diff/-/jest-diff-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-diff@27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==, tarball: https://registry.npmmirror.com/jest-diff/-/jest-diff-27.5.1.tgz} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - - jest-docblock@24.9.0: - resolution: {integrity: sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==, tarball: https://registry.npmmirror.com/jest-docblock/-/jest-docblock-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-docblock@26.0.0: - resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==, tarball: https://registry.npmmirror.com/jest-docblock/-/jest-docblock-26.0.0.tgz} - engines: {node: '>= 10.14.2'} - - jest-each@24.9.0: - resolution: {integrity: sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==, tarball: https://registry.npmmirror.com/jest-each/-/jest-each-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-each@26.6.2: - resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==, tarball: https://registry.npmmirror.com/jest-each/-/jest-each-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-electron@0.1.12: - resolution: {integrity: sha512-10Hjr1kpyWz5cj9Xs/Xfb8yvF1LZPVmyEMHu/A/VhgvIV5yiP9uD8FHNc4HAfEnZHM+wvpR5YfveBTUAiNfwnA==, tarball: https://registry.npmmirror.com/jest-electron/-/jest-electron-0.1.12.tgz} - peerDependencies: - jest: ^24.0.0 - - jest-environment-jsdom@24.9.0: - resolution: {integrity: sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==, tarball: https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-environment-jsdom@26.6.2: - resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==, tarball: https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-environment-node@24.9.0: - resolution: {integrity: sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==, tarball: https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-environment-node@26.6.2: - resolution: {integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==, tarball: https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-extended@1.2.1: - resolution: {integrity: sha512-eKZR5iDpyTkcDesj16FpIPnjAWQNUB81ZFQW08EIddM6iqO7DjRIi39td9qol+1dpJS4Mqr9Qzp8ZMhanbSeug==, tarball: https://registry.npmmirror.com/jest-extended/-/jest-extended-1.2.1.tgz} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - jest-get-type@24.9.0: - resolution: {integrity: sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==, tarball: https://registry.npmmirror.com/jest-get-type/-/jest-get-type-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-get-type@26.3.0: - resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==, tarball: https://registry.npmmirror.com/jest-get-type/-/jest-get-type-26.3.0.tgz} - engines: {node: '>= 10.14.2'} - - jest-get-type@27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==, tarball: https://registry.npmmirror.com/jest-get-type/-/jest-get-type-27.5.1.tgz} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - - jest-haste-map@24.9.0: - resolution: {integrity: sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==, tarball: https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-haste-map@26.6.2: - resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==, tarball: https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==, tarball: https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-jasmine2@24.9.0: - resolution: {integrity: sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==, tarball: https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-jasmine2@26.6.3: - resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==, tarball: https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz} - engines: {node: '>= 10.14.2'} - - jest-leak-detector@24.9.0: - resolution: {integrity: sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==, tarball: https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-leak-detector@26.6.2: - resolution: {integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==, tarball: https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-less-loader@0.1.2: - resolution: {integrity: sha512-J04E9UnTq00I+maz9KADl/CtC+5ee2HhKPVo1ALRW3xVzmzx6ltY9L9IlupacE6uA5n/rPs1+aZexFt+1xFM/A==, tarball: https://registry.npmmirror.com/jest-less-loader/-/jest-less-loader-0.1.2.tgz} - peerDependencies: - less: ^3.10.3 - - jest-matcher-utils@24.9.0: - resolution: {integrity: sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==, tarball: https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-matcher-utils@26.6.2: - resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==, tarball: https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-matcher-utils@27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==, tarball: https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - - jest-message-util@24.9.0: - resolution: {integrity: sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==, tarball: https://registry.npmmirror.com/jest-message-util/-/jest-message-util-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-message-util@26.6.2: - resolution: {integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==, tarball: https://registry.npmmirror.com/jest-message-util/-/jest-message-util-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-mock@24.9.0: - resolution: {integrity: sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==, tarball: https://registry.npmmirror.com/jest-mock/-/jest-mock-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-mock@26.6.2: - resolution: {integrity: sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==, tarball: https://registry.npmmirror.com/jest-mock/-/jest-mock-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==, tarball: https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - - jest-regex-util@24.9.0: - resolution: {integrity: sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==, tarball: https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-regex-util@26.0.0: - resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==, tarball: https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz} - engines: {node: '>= 10.14.2'} - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==, tarball: https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve-dependencies@26.6.3: - resolution: {integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==, tarball: https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz} - engines: {node: '>= 10.14.2'} - - jest-resolve@24.9.0: - resolution: {integrity: sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==, tarball: https://registry.npmmirror.com/jest-resolve/-/jest-resolve-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-resolve@26.6.2: - resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==, tarball: https://registry.npmmirror.com/jest-resolve/-/jest-resolve-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-runner@24.9.0: - resolution: {integrity: sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==, tarball: https://registry.npmmirror.com/jest-runner/-/jest-runner-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-runner@26.6.3: - resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==, tarball: https://registry.npmmirror.com/jest-runner/-/jest-runner-26.6.3.tgz} - engines: {node: '>= 10.14.2'} - - jest-runtime@24.9.0: - resolution: {integrity: sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==, tarball: https://registry.npmmirror.com/jest-runtime/-/jest-runtime-24.9.0.tgz} - engines: {node: '>= 6'} - hasBin: true - - jest-runtime@26.6.3: - resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==, tarball: https://registry.npmmirror.com/jest-runtime/-/jest-runtime-26.6.3.tgz} - engines: {node: '>= 10.14.2'} - hasBin: true - - jest-serializer@24.9.0: - resolution: {integrity: sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==, tarball: https://registry.npmmirror.com/jest-serializer/-/jest-serializer-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-serializer@26.6.2: - resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==, tarball: https://registry.npmmirror.com/jest-serializer/-/jest-serializer-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-snapshot@24.9.0: - resolution: {integrity: sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==, tarball: https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-snapshot@26.6.2: - resolution: {integrity: sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==, tarball: https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-util@24.9.0: - resolution: {integrity: sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==, tarball: https://registry.npmmirror.com/jest-util/-/jest-util-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-util@26.6.2: - resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==, tarball: https://registry.npmmirror.com/jest-util/-/jest-util-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==, tarball: https://registry.npmmirror.com/jest-util/-/jest-util-29.7.0.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-validate@24.9.0: - resolution: {integrity: sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==, tarball: https://registry.npmmirror.com/jest-validate/-/jest-validate-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-validate@26.6.2: - resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==, tarball: https://registry.npmmirror.com/jest-validate/-/jest-validate-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-watcher@26.6.2: - resolution: {integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==, tarball: https://registry.npmmirror.com/jest-watcher/-/jest-watcher-26.6.2.tgz} - engines: {node: '>= 10.14.2'} - - jest-worker@24.9.0: - resolution: {integrity: sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==, tarball: https://registry.npmmirror.com/jest-worker/-/jest-worker-24.9.0.tgz} - engines: {node: '>= 6'} - - jest-worker@26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==, tarball: https://registry.npmmirror.com/jest-worker/-/jest-worker-26.6.2.tgz} - engines: {node: '>= 10.13.0'} - - jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, tarball: https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz} - engines: {node: '>= 10.13.0'} - - jest-worker@29.4.3: - resolution: {integrity: sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==, tarball: https://registry.npmmirror.com/jest-worker/-/jest-worker-29.4.3.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==, tarball: https://registry.npmmirror.com/jest-worker/-/jest-worker-29.7.0.tgz} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest@26.6.3: - resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==, tarball: https://registry.npmmirror.com/jest/-/jest-26.6.3.tgz} - engines: {node: '>= 10.14.2'} - hasBin: true - - jquery@3.7.1: - resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==, tarball: https://registry.npmmirror.com/jquery/-/jquery-3.7.1.tgz} - - js-cookie@2.2.1: - resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==, tarball: https://registry.npmmirror.com/js-cookie/-/js-cookie-2.2.1.tgz} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, tarball: https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, tarball: https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz} - hasBin: true - - jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==, tarball: https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz} - - jsdom@11.12.0: - resolution: {integrity: sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==, tarball: https://registry.npmmirror.com/jsdom/-/jsdom-11.12.0.tgz} - - jsdom@16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==, tarball: https://registry.npmmirror.com/jsdom/-/jsdom-16.7.0.tgz} - engines: {node: '>=10'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz} - engines: {node: '>=4'} - hasBin: true - - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-3.0.2.tgz} - engines: {node: '>=6'} - hasBin: true - - json-buffer@3.0.0: - resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==, tarball: https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.0.tgz} - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, tarball: https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz} - - json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==, tarball: https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, tarball: https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz} - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz} - - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, tarball: https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, tarball: https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz} - - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==, tarball: https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz} - - json2module@0.0.3: - resolution: {integrity: sha512-qYGxqrRrt4GbB8IEOy1jJGypkNsjWoIMlZt4bAsmUScCA507Hbc2p1JOhBzqn45u3PWafUgH2OnzyNU7udO/GA==, tarball: https://registry.npmmirror.com/json2module/-/json2module-0.0.3.tgz} - hasBin: true - - json2mq@0.2.0: - resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==, tarball: https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, tarball: https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz} - engines: {node: '>=6'} - hasBin: true - - jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==, tarball: https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz} - - jsonfile@3.0.1: - resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-3.0.1.tgz} - - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz} - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz} - - jsprim@1.4.2: - resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==, tarball: https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz} - engines: {node: '>=0.6.0'} - - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, tarball: https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz} - engines: {node: '>=4.0'} - - keyv@3.1.0: - resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==, tarball: https://registry.npmmirror.com/keyv/-/keyv-3.1.0.tgz} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, tarball: https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz} - - kind-of@3.2.2: - resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz} - engines: {node: '>=0.10.0'} - - kind-of@4.0.0: - resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz} - engines: {node: '>=0.10.0'} - - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz} - engines: {node: '>=0.10.0'} - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, tarball: https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz} - engines: {node: '>=6'} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, tarball: https://registry.npmmirror.com/kleur/-/kleur-4.1.5.tgz} - engines: {node: '>=6'} - - klona@2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==, tarball: https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz} - engines: {node: '>= 8'} - - known-css-properties@0.21.0: - resolution: {integrity: sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==, tarball: https://registry.npmmirror.com/known-css-properties/-/known-css-properties-0.21.0.tgz} - - kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==, tarball: https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz} - - ky@1.7.2: - resolution: {integrity: sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==, tarball: https://registry.npmmirror.com/ky/-/ky-1.7.2.tgz} - engines: {node: '>=18'} - - latest-version@3.1.0: - resolution: {integrity: sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==, tarball: https://registry.npmmirror.com/latest-version/-/latest-version-3.1.0.tgz} - engines: {node: '>=4'} - - latest-version@9.0.0: - resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==, tarball: https://registry.npmmirror.com/latest-version/-/latest-version-9.0.0.tgz} - engines: {node: '>=18'} - - launch-editor@2.9.1: - resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==, tarball: https://registry.npmmirror.com/launch-editor/-/launch-editor-2.9.1.tgz} - - lazy-cache@1.0.4: - resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==, tarball: https://registry.npmmirror.com/lazy-cache/-/lazy-cache-1.0.4.tgz} - engines: {node: '>=0.10.0'} - - lcid@3.1.1: - resolution: {integrity: sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==, tarball: https://registry.npmmirror.com/lcid/-/lcid-3.1.1.tgz} - engines: {node: '>=8'} - - leac@0.6.0: - resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==, tarball: https://registry.npmmirror.com/leac/-/leac-0.6.0.tgz} - - left-pad@1.3.0: - resolution: {integrity: sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==, tarball: https://registry.npmmirror.com/left-pad/-/left-pad-1.3.0.tgz} - deprecated: use String.prototype.padStart() - - less-loader@10.2.0: - resolution: {integrity: sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==, tarball: https://registry.npmmirror.com/less-loader/-/less-loader-10.2.0.tgz} - engines: {node: '>= 12.13.0'} - peerDependencies: - less: ^3.5.0 || ^4.0.0 - webpack: ^5.0.0 - - less-plugin-npm-import@2.1.0: - resolution: {integrity: sha512-f7pVkEooRq2/jge/M/Y+spoPXj5rRIY30q1as+3kZsDG8Rs+loNJUCVQjzXB9Ao/9FeIJULiq2zrXymv+OMTbw==, tarball: https://registry.npmmirror.com/less-plugin-npm-import/-/less-plugin-npm-import-2.1.0.tgz} - engines: {node: '>=0.4.2'} - - less-plugin-resolve@1.0.2: - resolution: {integrity: sha512-e1AHq0XNTU8S3d9JCc8CFYajoUBr0EK3pcuLT5PogyBBeE0knzZJL105kKKSZWfq2lQLq3/uEDrMK3JPq+fHaA==, tarball: https://registry.npmmirror.com/less-plugin-resolve/-/less-plugin-resolve-1.0.2.tgz} - - less@4.1.3: - resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==, tarball: https://registry.npmmirror.com/less/-/less-4.1.3.tgz} - engines: {node: '>=6'} - hasBin: true - - less@4.2.0: - resolution: {integrity: sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==, tarball: https://registry.npmmirror.com/less/-/less-4.2.0.tgz} - engines: {node: '>=6'} - hasBin: true - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, tarball: https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz} - engines: {node: '>=6'} - - levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==, tarball: https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz} - engines: {node: '>= 0.8.0'} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, tarball: https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz} - engines: {node: '>= 0.8.0'} - - lightningcss-darwin-arm64@1.22.1: - resolution: {integrity: sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg==, tarball: https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.22.1.tgz} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.22.1: - resolution: {integrity: sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ==, tarball: https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.22.1.tgz} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.22.1: - resolution: {integrity: sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg==, tarball: https://registry.npmmirror.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.22.1.tgz} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.22.1: - resolution: {integrity: sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg==, tarball: https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.22.1.tgz} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.22.1: - resolution: {integrity: sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ==, tarball: https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.22.1.tgz} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - lightningcss-linux-arm64-musl@1.22.1: - resolution: {integrity: sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg==, tarball: https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.22.1.tgz} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - - lightningcss-linux-x64-gnu@1.22.1: - resolution: {integrity: sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg==, tarball: https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.22.1.tgz} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - - lightningcss-linux-x64-musl@1.22.1: - resolution: {integrity: sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA==, tarball: https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.22.1.tgz} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - - lightningcss-win32-x64-msvc@1.22.1: - resolution: {integrity: sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg==, tarball: https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.22.1.tgz} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.22.1: - resolution: {integrity: sha512-Fy45PhibiNXkm0cK5FJCbfO8Y6jUpD/YcHf/BtuI+jvYYqSXKF4muk61jjE8YxCR9y+hDYIWSzHTc+bwhDE6rQ==, tarball: https://registry.npmmirror.com/lightningcss/-/lightningcss-1.22.1.tgz} - engines: {node: '>= 12.0.0'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, tarball: https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz} - - listr-input@0.2.1: - resolution: {integrity: sha512-oa8iVG870qJq+OuuMK3DjGqFcwsK1SDu+kULp9kEq09TY231aideIZenr3lFOQdASpAr6asuyJBbX62/a3IIhg==, tarball: https://registry.npmmirror.com/listr-input/-/listr-input-0.2.1.tgz} - engines: {node: '>=6'} - - listr-silent-renderer@1.1.1: - resolution: {integrity: sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==, tarball: https://registry.npmmirror.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz} - engines: {node: '>=4'} - - listr-update-renderer@0.5.0: - resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==, tarball: https://registry.npmmirror.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz} - engines: {node: '>=6'} - peerDependencies: - listr: ^0.14.2 - - listr-verbose-renderer@0.5.0: - resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==, tarball: https://registry.npmmirror.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz} - engines: {node: '>=4'} - - listr@0.14.3: - resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==, tarball: https://registry.npmmirror.com/listr/-/listr-0.14.3.tgz} - engines: {node: '>=6'} - - load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==, tarball: https://registry.npmmirror.com/load-json-file/-/load-json-file-4.0.0.tgz} - engines: {node: '>=4'} - - load-script@1.0.0: - resolution: {integrity: sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==, tarball: https://registry.npmmirror.com/load-script/-/load-script-1.0.0.tgz} - - loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==, tarball: https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz} - engines: {node: '>=6.11.5'} - - loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz} - engines: {node: '>=8.9.0'} - - loader-utils@3.3.1: - resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-3.3.1.tgz} - engines: {node: '>= 12.13.0'} - - local-pkg@0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==, tarball: https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz} - engines: {node: '>=14'} - - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz} - engines: {node: '>=6'} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz} - engines: {node: '>=8'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz} - engines: {node: '>=10'} - - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, tarball: https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, tarball: https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz} - - lodash.escape@4.0.1: - resolution: {integrity: sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==, tarball: https://registry.npmmirror.com/lodash.escape/-/lodash.escape-4.0.1.tgz} - - lodash.flattendeep@4.4.0: - resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==, tarball: https://registry.npmmirror.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz} - - lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==, tarball: https://registry.npmmirror.com/lodash.get/-/lodash.get-4.4.2.tgz} - - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==, tarball: https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, tarball: https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz} - - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, tarball: https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz} - - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==, tarball: https://registry.npmmirror.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz} - - lodash.throttle@4.1.1: - resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==, tarball: https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz} - - lodash.truncate@4.4.2: - resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==, tarball: https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz} - - lodash.zip@4.2.0: - resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==, tarball: https://registry.npmmirror.com/lodash.zip/-/lodash.zip-4.2.0.tgz} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz} - - log-symbols@1.0.2: - resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-1.0.2.tgz} - engines: {node: '>=0.10.0'} - - log-symbols@2.2.0: - resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-2.2.0.tgz} - engines: {node: '>=4'} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz} - engines: {node: '>=10'} - - log-symbols@6.0.0: - resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-6.0.0.tgz} - engines: {node: '>=18'} - - log-update@2.3.0: - resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==, tarball: https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz} - engines: {node: '>=4'} - - longest-streak@2.0.4: - resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==, tarball: https://registry.npmmirror.com/longest-streak/-/longest-streak-2.0.4.tgz} - - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==, tarball: https://registry.npmmirror.com/longest-streak/-/longest-streak-3.1.0.tgz} - - longest@1.0.1: - resolution: {integrity: sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==, tarball: https://registry.npmmirror.com/longest/-/longest-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, tarball: https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz} - hasBin: true - - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, tarball: https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz} - - lowercase-keys@1.0.1: - resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==, tarball: https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==, tarball: https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz} - engines: {node: '>=8'} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz} - - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz} - engines: {node: '>=10'} - - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-7.18.3.tgz} - engines: {node: '>=12'} - - lunr@2.3.9: - resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==, tarball: https://registry.npmmirror.com/lunr/-/lunr-2.3.9.tgz} - - lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==, tarball: https://registry.npmmirror.com/lz-string/-/lz-string-1.5.0.tgz} - hasBin: true - - make-dir@1.3.0: - resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz} - engines: {node: '>=4'} - - make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz} - engines: {node: '>=6'} - - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz} - engines: {node: '>=8'} - - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-4.0.0.tgz} - engines: {node: '>=10'} - - make-fetch-happen@2.6.0: - resolution: {integrity: sha512-FFq0lNI0ax+n9IWzWpH8A4JdgYiAp2DDYIZ3rsaav8JDe8I+72CzK6PQW/oom15YDZpV5bYW/9INd6nIJ2ZfZw==, tarball: https://registry.npmmirror.com/make-fetch-happen/-/make-fetch-happen-2.6.0.tgz} - - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==, tarball: https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz} - - map-age-cleaner@0.1.3: - resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==, tarball: https://registry.npmmirror.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz} - engines: {node: '>=6'} - - map-cache@0.2.2: - resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==, tarball: https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz} - engines: {node: '>=0.10.0'} - - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==, tarball: https://registry.npmmirror.com/map-obj/-/map-obj-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==, tarball: https://registry.npmmirror.com/map-obj/-/map-obj-4.3.0.tgz} - engines: {node: '>=8'} - - map-visit@1.0.0: - resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==, tarball: https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - markdown-table@3.0.4: - resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==, tarball: https://registry.npmmirror.com/markdown-table/-/markdown-table-3.0.4.tgz} - - marked@1.0.0: - resolution: {integrity: sha512-Wo+L1pWTVibfrSr+TTtMuiMfNzmZWiOPeO7rZsQUY5bgsxpHesBEcIWJloWVTFnrMXnf/TL30eTFSGJddmQAng==, tarball: https://registry.npmmirror.com/marked/-/marked-1.0.0.tgz} - engines: {node: '>= 8.16.2'} - hasBin: true - - matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==, tarball: https://registry.npmmirror.com/matcher/-/matcher-3.0.0.tgz} - engines: {node: '>=10'} - - mathml-tag-names@2.1.3: - resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==, tarball: https://registry.npmmirror.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz} - - md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==, tarball: https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz} - - mdast-util-definitions@5.1.2: - resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==, tarball: https://registry.npmmirror.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz} - - mdast-util-directive@2.2.4: - resolution: {integrity: sha512-sK3ojFP+jpj1n7Zo5ZKvoxP1MvLyzVG63+gm40Z/qI00avzdPCYxt7RBMgofwAva9gBjbDBWVRB/i+UD+fUCzQ==, tarball: https://registry.npmmirror.com/mdast-util-directive/-/mdast-util-directive-2.2.4.tgz} - - mdast-util-find-and-replace@2.2.2: - resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==, tarball: https://registry.npmmirror.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz} - - mdast-util-find-and-replace@3.0.1: - resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==, tarball: https://registry.npmmirror.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz} - - mdast-util-from-markdown@0.8.5: - resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==, tarball: https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz} - - mdast-util-from-markdown@1.3.1: - resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==, tarball: https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz} - - mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==, tarball: https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz} - - mdast-util-frontmatter@1.0.1: - resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==, tarball: https://registry.npmmirror.com/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz} - - mdast-util-gfm-autolink-literal@1.0.3: - resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==, tarball: https://registry.npmmirror.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz} - - mdast-util-gfm-autolink-literal@2.0.1: - resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==, tarball: https://registry.npmmirror.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz} - - mdast-util-gfm-footnote@1.0.2: - resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==, tarball: https://registry.npmmirror.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz} - - mdast-util-gfm-footnote@2.0.0: - resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==, tarball: https://registry.npmmirror.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz} - - mdast-util-gfm-strikethrough@1.0.3: - resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==, tarball: https://registry.npmmirror.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz} - - mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==, tarball: https://registry.npmmirror.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz} - - mdast-util-gfm-table@1.0.7: - resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==, tarball: https://registry.npmmirror.com/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz} - - mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==, tarball: https://registry.npmmirror.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz} - - mdast-util-gfm-task-list-item@1.0.2: - resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==, tarball: https://registry.npmmirror.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz} - - mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==, tarball: https://registry.npmmirror.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz} - - mdast-util-gfm@2.0.2: - resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==, tarball: https://registry.npmmirror.com/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz} - - mdast-util-gfm@3.0.0: - resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==, tarball: https://registry.npmmirror.com/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz} - - mdast-util-mdx-expression@1.3.2: - resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==, tarball: https://registry.npmmirror.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz} - - mdast-util-mdx-expression@2.0.1: - resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==, tarball: https://registry.npmmirror.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz} - - mdast-util-mdx-jsx@3.1.3: - resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==, tarball: https://registry.npmmirror.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz} - - mdast-util-mdxjs-esm@1.3.1: - resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==, tarball: https://registry.npmmirror.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz} - - mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==, tarball: https://registry.npmmirror.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz} - - mdast-util-phrasing@3.0.1: - resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==, tarball: https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz} - - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==, tarball: https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz} - - mdast-util-to-hast@12.3.0: - resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==, tarball: https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz} - - mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==, tarball: https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz} - - mdast-util-to-markdown@0.6.5: - resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==, tarball: https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz} - - mdast-util-to-markdown@1.5.0: - resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==, tarball: https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz} - - mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==, tarball: https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz} - - mdast-util-to-string@2.0.0: - resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==, tarball: https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz} - - mdast-util-to-string@3.2.0: - resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==, tarball: https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz} - - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==, tarball: https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz} - - mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==, tarball: https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz} - - mdn-data@2.0.4: - resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==, tarball: https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz} - - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==, tarball: https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz} - engines: {node: '>= 0.6'} - - mem@5.1.1: - resolution: {integrity: sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==, tarball: https://registry.npmmirror.com/mem/-/mem-5.1.1.tgz} - engines: {node: '>=8'} - - memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==, tarball: https://registry.npmmirror.com/memfs/-/memfs-3.5.3.tgz} - engines: {node: '>= 4.0.0'} - - memfs@4.14.0: - resolution: {integrity: sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==, tarball: https://registry.npmmirror.com/memfs/-/memfs-4.14.0.tgz} - engines: {node: '>= 4.0.0'} - - memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==, tarball: https://registry.npmmirror.com/memorystream/-/memorystream-0.3.1.tgz} - engines: {node: '>= 0.10.0'} - - meow@13.2.0: - resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==, tarball: https://registry.npmmirror.com/meow/-/meow-13.2.0.tgz} - engines: {node: '>=18'} - - meow@9.0.0: - resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==, tarball: https://registry.npmmirror.com/meow/-/meow-9.0.0.tgz} - engines: {node: '>=10'} - - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==, tarball: https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, tarball: https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz} - engines: {node: '>= 8'} - - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==, tarball: https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz} - engines: {node: '>= 0.6'} - - micromark-core-commonmark@1.1.0: - resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==, tarball: https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz} - - micromark-core-commonmark@2.0.1: - resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==, tarball: https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz} - - micromark-extension-directive@2.2.1: - resolution: {integrity: sha512-ZFKZkNaEqAP86IghX1X7sE8NNnx6kFNq9mSBRvEHjArutTCJZ3LYg6VH151lXVb1JHpmIcW/7rX25oMoIHuSug==, tarball: https://registry.npmmirror.com/micromark-extension-directive/-/micromark-extension-directive-2.2.1.tgz} - - micromark-extension-frontmatter@1.1.1: - resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==, tarball: https://registry.npmmirror.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.1.1.tgz} - - micromark-extension-gfm-autolink-literal@1.0.5: - resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz} - - micromark-extension-gfm-autolink-literal@2.1.0: - resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz} - - micromark-extension-gfm-footnote@1.1.2: - resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz} - - micromark-extension-gfm-footnote@2.1.0: - resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz} - - micromark-extension-gfm-strikethrough@1.0.7: - resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz} - - micromark-extension-gfm-strikethrough@2.1.0: - resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz} - - micromark-extension-gfm-table@1.0.7: - resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz} - - micromark-extension-gfm-table@2.1.0: - resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz} - - micromark-extension-gfm-tagfilter@1.0.2: - resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz} - - micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz} - - micromark-extension-gfm-task-list-item@1.0.5: - resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz} - - micromark-extension-gfm-task-list-item@2.1.0: - resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==, tarball: https://registry.npmmirror.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz} - - micromark-extension-gfm@2.0.3: - resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==, tarball: https://registry.npmmirror.com/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz} - - micromark-extension-gfm@3.0.0: - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==, tarball: https://registry.npmmirror.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz} - - micromark-factory-destination@1.1.0: - resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==, tarball: https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz} - - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==, tarball: https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz} - - micromark-factory-label@1.1.0: - resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==, tarball: https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz} - - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==, tarball: https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz} - - micromark-factory-space@1.1.0: - resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==, tarball: https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz} - - micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==, tarball: https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz} - - micromark-factory-title@1.1.0: - resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==, tarball: https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz} - - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==, tarball: https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz} - - micromark-factory-whitespace@1.1.0: - resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==, tarball: https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz} - - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==, tarball: https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz} - - micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==, tarball: https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==, tarball: https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz} - - micromark-util-chunked@1.1.0: - resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==, tarball: https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz} - - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==, tarball: https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz} - - micromark-util-classify-character@1.1.0: - resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==, tarball: https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz} - - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==, tarball: https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz} - - micromark-util-combine-extensions@1.1.0: - resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==, tarball: https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz} - - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==, tarball: https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz} - - micromark-util-decode-numeric-character-reference@1.1.0: - resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==, tarball: https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz} - - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==, tarball: https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz} - - micromark-util-decode-string@1.1.0: - resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==, tarball: https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz} - - micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==, tarball: https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz} - - micromark-util-encode@1.1.0: - resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==, tarball: https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==, tarball: https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz} - - micromark-util-html-tag-name@1.2.0: - resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==, tarball: https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz} - - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==, tarball: https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz} - - micromark-util-normalize-identifier@1.1.0: - resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==, tarball: https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz} - - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==, tarball: https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz} - - micromark-util-resolve-all@1.1.0: - resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==, tarball: https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz} - - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==, tarball: https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz} - - micromark-util-sanitize-uri@1.2.0: - resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==, tarball: https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==, tarball: https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz} - - micromark-util-subtokenize@1.1.0: - resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==, tarball: https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz} - - micromark-util-subtokenize@2.0.2: - resolution: {integrity: sha512-xKxhkB62vwHUuuxHe9Xqty3UaAsizV2YKq5OV344u3hFBbf8zIYrhYOWhAQb94MtMPkjTOzzjJ/hid9/dR5vFA==, tarball: https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.2.tgz} - - micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==, tarball: https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==, tarball: https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz} - - micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==, tarball: https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz} - - micromark-util-types@2.0.1: - resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==, tarball: https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-2.0.1.tgz} - - micromark@2.11.4: - resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==, tarball: https://registry.npmmirror.com/micromark/-/micromark-2.11.4.tgz} - - micromark@3.2.0: - resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==, tarball: https://registry.npmmirror.com/micromark/-/micromark-3.2.0.tgz} - - micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==, tarball: https://registry.npmmirror.com/micromark/-/micromark-4.0.0.tgz} - - micromatch@3.1.10: - resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz} - engines: {node: '>=0.10.0'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz} - engines: {node: '>=8.6'} - - miller-rabin@4.0.1: - resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==, tarball: https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz} - hasBin: true - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, tarball: https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz} - engines: {node: '>= 0.6'} - - mime-db@1.53.0: - resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==, tarball: https://registry.npmmirror.com/mime-db/-/mime-db-1.53.0.tgz} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, tarball: https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz} - engines: {node: '>= 0.6'} - - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz} - engines: {node: '>=4'} - hasBin: true - - mimer@1.1.0: - resolution: {integrity: sha512-y9dVfy2uiycQvDNiAYW6zp49ZhFlXDMr5wfdOiMbdzGM/0N5LNR6HTUn3un+WUQcM0koaw8FMTG1bt5EnHJdvQ==, tarball: https://registry.npmmirror.com/mimer/-/mimer-1.1.0.tgz} - engines: {node: '>= 6.0'} - hasBin: true - - mimic-fn@1.2.0: - resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz} - engines: {node: '>=4'} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz} - engines: {node: '>=6'} - - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz} - engines: {node: '>=12'} - - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==, tarball: https://registry.npmmirror.com/mimic-function/-/mimic-function-5.0.1.tgz} - engines: {node: '>=18'} - - mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==, tarball: https://registry.npmmirror.com/mimic-response/-/mimic-response-1.0.1.tgz} - engines: {node: '>=4'} - - min-document@2.19.0: - resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==, tarball: https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz} - - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==, tarball: https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz} - engines: {node: '>=4'} - - minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==, tarball: https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz} - - minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==, tarball: https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz} - engines: {node: '>=16 || 14 >=14.17'} - - minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==, tarball: https://registry.npmmirror.com/minimist-options/-/minimist-options-4.1.0.tgz} - engines: {node: '>= 6'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, tarball: https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==, tarball: https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz} - engines: {node: '>=16 || 14 >=14.17'} - - mississippi@1.3.1: - resolution: {integrity: sha512-/6rB8YXFbAtsUVRphIRQqB0+9c7VaPHCjVtvto+JqwVxgz8Zz+I+f68/JgQ+Pb4VlZb2svA9OtdXnHHsZz7ltg==, tarball: https://registry.npmmirror.com/mississippi/-/mississippi-1.3.1.tgz} - - mississippi@2.0.0: - resolution: {integrity: sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==, tarball: https://registry.npmmirror.com/mississippi/-/mississippi-2.0.0.tgz} - engines: {node: '>=4.0.0'} - - mixin-deep@1.3.2: - resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==, tarball: https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz} - engines: {node: '>=0.10.0'} - - mkdirp@0.3.0: - resolution: {integrity: sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==, tarball: https://registry.npmmirror.com/mkdirp/-/mkdirp-0.3.0.tgz} - deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==, tarball: https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz} - hasBin: true - - ml-array-max@1.2.4: - resolution: {integrity: sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==, tarball: https://registry.npmmirror.com/ml-array-max/-/ml-array-max-1.2.4.tgz} - - ml-array-min@1.2.3: - resolution: {integrity: sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==, tarball: https://registry.npmmirror.com/ml-array-min/-/ml-array-min-1.2.3.tgz} - - ml-array-rescale@1.3.7: - resolution: {integrity: sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==, tarball: https://registry.npmmirror.com/ml-array-rescale/-/ml-array-rescale-1.3.7.tgz} - - ml-matrix@6.12.0: - resolution: {integrity: sha512-AGfR+pWaC0GmzjUnB6BfwhndPEUGz0i7QUYdqNuw1zhTov/vSRJ9pP2hs6BoGpaSbtXgrKjZz2zjD1M0xuur6A==, tarball: https://registry.npmmirror.com/ml-matrix/-/ml-matrix-6.12.0.tgz} - - mock-property@1.0.3: - resolution: {integrity: sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ==, tarball: https://registry.npmmirror.com/mock-property/-/mock-property-1.0.3.tgz} - engines: {node: '>= 0.4'} - - moment@2.30.1: - resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==, tarball: https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz} - - monaco-editor@0.25.2: - resolution: {integrity: sha512-5iylzSJevCnzJn9UVsW8yOZ3yHjmAs4TfvH3zsbftKiFKmHG0xirGN6DK9Kk04VSWxYCZZAIafYJoNJJMAU1KA==, tarball: https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.25.2.tgz} - - moo-color@1.0.3: - resolution: {integrity: sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==, tarball: https://registry.npmmirror.com/moo-color/-/moo-color-1.0.3.tgz} - - moo@0.5.2: - resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==, tarball: https://registry.npmmirror.com/moo/-/moo-0.5.2.tgz} - - move-concurrently@1.0.1: - resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==, tarball: https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz} - deprecated: This package is no longer supported. - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, tarball: https://registry.npmmirror.com/mri/-/mri-1.2.0.tgz} - engines: {node: '>=4'} - - mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==, tarball: https://registry.npmmirror.com/mrmime/-/mrmime-2.0.0.tgz} - engines: {node: '>=10'} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, tarball: https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz} - - multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==, tarball: https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz} - hasBin: true - - multimap@1.1.0: - resolution: {integrity: sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==, tarball: https://registry.npmmirror.com/multimap/-/multimap-1.1.0.tgz} - - mute-stream@0.0.7: - resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==, tarball: https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.7.tgz} - - mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==, tarball: https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz} - - mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==, tarball: https://registry.npmmirror.com/mute-stream/-/mute-stream-1.0.0.tgz} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, tarball: https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz} - - nan@2.22.0: - resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==, tarball: https://registry.npmmirror.com/nan/-/nan-2.22.0.tgz} - - nano-css@5.6.2: - resolution: {integrity: sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==, tarball: https://registry.npmmirror.com/nano-css/-/nano-css-5.6.2.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - nanoid@2.1.11: - resolution: {integrity: sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-2.1.11.tgz} - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - nanomatch@1.2.13: - resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==, tarball: https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz} - engines: {node: '>=0.10.0'} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, tarball: https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz} - - nearley@2.20.1: - resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==, tarball: https://registry.npmmirror.com/nearley/-/nearley-2.20.1.tgz} - hasBin: true - - needle@3.3.1: - resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==, tarball: https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz} - engines: {node: '>= 4.4.x'} - hasBin: true - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, tarball: https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz} - engines: {node: '>= 0.6'} - - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==, tarball: https://registry.npmmirror.com/negotiator/-/negotiator-0.6.4.tgz} - engines: {node: '>= 0.6'} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, tarball: https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz} - - new-github-release-url@2.0.0: - resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==, tarball: https://registry.npmmirror.com/new-github-release-url/-/new-github-release-url-2.0.0.tgz} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==, tarball: https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz} - - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, tarball: https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz} - - node-abort-controller@3.1.1: - resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==, tarball: https://registry.npmmirror.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz} - - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==, tarball: https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz} - - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==, tarball: https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz} - engines: {node: '>=10.5.0'} - - node-fetch-npm@2.0.4: - resolution: {integrity: sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==, tarball: https://registry.npmmirror.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz} - engines: {node: '>=4'} - deprecated: This module is not used anymore, npm uses minipass-fetch for its fetch implementation now - - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==, tarball: https://registry.npmmirror.com/node-fetch/-/node-fetch-3.3.2.tgz} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==, tarball: https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz} - engines: {node: '>= 6.13.0'} - - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, tarball: https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz} - - node-libs-browser-okam@2.2.5: - resolution: {integrity: sha512-kD+WXACEThc6C5DA146KoCNbubjpXeYzXDrukvtXWr6MRzV3uvHCI0eb/GuugWVYnMoD4g3/uaIzvDYOpC4QWw==, tarball: https://registry.npmmirror.com/node-libs-browser-okam/-/node-libs-browser-okam-2.2.5.tgz} - - node-libs-browser@2.2.1: - resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==, tarball: https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz} - - node-notifier@8.0.2: - resolution: {integrity: sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==, tarball: https://registry.npmmirror.com/node-notifier/-/node-notifier-8.0.2.tgz} - - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.18.tgz} - - nopt@1.0.10: - resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==, tarball: https://registry.npmmirror.com/nopt/-/nopt-1.0.10.tgz} - hasBin: true - - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, tarball: https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz} - - normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==, tarball: https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz} - engines: {node: '>=10'} - - normalize-package-data@6.0.2: - resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==, tarball: https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz} - engines: {node: ^16.14.0 || >=18.0.0} - - normalize-path@1.0.0: - resolution: {integrity: sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - normalize-path@2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz} - engines: {node: '>=0.10.0'} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, tarball: https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz} - engines: {node: '>=0.10.0'} - - normalize-selector@0.2.0: - resolution: {integrity: sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==, tarball: https://registry.npmmirror.com/normalize-selector/-/normalize-selector-0.2.0.tgz} - - normalize-url@1.9.1: - resolution: {integrity: sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==, tarball: https://registry.npmmirror.com/normalize-url/-/normalize-url-1.9.1.tgz} - engines: {node: '>=4'} - - normalize-url@4.5.1: - resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==, tarball: https://registry.npmmirror.com/normalize-url/-/normalize-url-4.5.1.tgz} - engines: {node: '>=8'} - - np@10.0.7: - resolution: {integrity: sha512-vIPKQwOYKpQU40PU5x/vLfN2haj8ObxMvR1QGt7EZnBPWdm4WEbHdumYAnMV7AeR9kACsMqcqAP37sAo5cW5jA==, tarball: https://registry.npmmirror.com/np/-/np-10.0.7.tgz} - engines: {git: '>=2.11.0', node: '>=18', npm: '>=9', pnpm: '>=8', yarn: '>=1.7.0'} - hasBin: true - - npm-conf@1.1.3: - resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==, tarball: https://registry.npmmirror.com/npm-conf/-/npm-conf-1.1.3.tgz} - engines: {node: '>=4'} - - npm-name@8.0.0: - resolution: {integrity: sha512-DIuCGcKYYhASAZW6Xh/tiaGMko8IHOHe0n3zOA7SzTi0Yvy00x8L7sa5yNiZ75Ny58O/KeRtNouy8Ut6gPbKiw==, tarball: https://registry.npmmirror.com/npm-name/-/npm-name-8.0.0.tgz} - engines: {node: '>=18'} - - npm-package-arg@5.1.2: - resolution: {integrity: sha512-wJBsrf0qpypPT7A0LART18hCdyhpCMxeTtcb0X4IZO2jsP6Om7EHN1d9KSKiqD+KVH030RVNpWS9thk+pb7wzA==, tarball: https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-5.1.2.tgz} - - npm-pick-manifest@1.0.4: - resolution: {integrity: sha512-MKxNdeyOZysPRTTbHtW0M5Fw38Jo/3ARsoGw5qjCfS+XGjvNB/Gb4qtAZUFmKPM2mVum+eX559eHvKywU856BQ==, tarball: https://registry.npmmirror.com/npm-pick-manifest/-/npm-pick-manifest-1.0.4.tgz} - - npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==, tarball: https://registry.npmmirror.com/npm-run-all/-/npm-run-all-4.1.5.tgz} - engines: {node: '>= 4'} - hasBin: true - - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz} - engines: {node: '>=4'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz} - engines: {node: '>=8'} - - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.3.0.tgz} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - nprogress@0.2.0: - resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==, tarball: https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz} - - nth-check@1.0.2: - resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==, tarball: https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz} - - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, tarball: https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz} - - num2fraction@1.2.2: - resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==, tarball: https://registry.npmmirror.com/num2fraction/-/num2fraction-1.2.2.tgz} - - number-is-nan@1.0.1: - resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==, tarball: https://registry.npmmirror.com/number-is-nan/-/number-is-nan-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - nwsapi@2.2.13: - resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==, tarball: https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.13.tgz} - - oauth-sign@0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==, tarball: https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, tarball: https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz} - engines: {node: '>=0.10.0'} - - object-copy@0.1.0: - resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==, tarball: https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz} - engines: {node: '>=0.10.0'} - - object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, tarball: https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz} - - object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==, tarball: https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.3.tgz} - engines: {node: '>= 0.4'} - - object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==, tarball: https://registry.npmmirror.com/object-is/-/object-is-1.1.6.tgz} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, tarball: https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz} - engines: {node: '>= 0.4'} - - object-visit@1.0.1: - resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==, tarball: https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==, tarball: https://registry.npmmirror.com/object.assign/-/object.assign-4.1.5.tgz} - engines: {node: '>= 0.4'} - - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==, tarball: https://registry.npmmirror.com/object.entries/-/object.entries-1.1.8.tgz} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==, tarball: https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.8.tgz} - engines: {node: '>= 0.4'} - - object.getownpropertydescriptors@2.1.8: - resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==, tarball: https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz} - engines: {node: '>= 0.8'} - - object.getprototypeof@1.0.6: - resolution: {integrity: sha512-gUiHHFVGLDayJsXfudx6KQEA6iMhPnsmAqL0vdBXhtKzTupcgNTGDJfW1a8xw81jjyWN07IRsVsCKyTn9wiJvQ==, tarball: https://registry.npmmirror.com/object.getprototypeof/-/object.getprototypeof-1.0.6.tgz} - engines: {node: '>= 0.4'} - - object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==, tarball: https://registry.npmmirror.com/object.hasown/-/object.hasown-1.1.4.tgz} - engines: {node: '>= 0.4'} - - object.pick@1.3.0: - resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==, tarball: https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz} - engines: {node: '>=0.10.0'} - - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==, tarball: https://registry.npmmirror.com/object.values/-/object.values-1.2.0.tgz} - engines: {node: '>= 0.4'} - - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==, tarball: https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz} - - omit-deep@0.3.0: - resolution: {integrity: sha512-Lbl/Ma59sss2b15DpnWnGmECBRL8cRl/PjPbPMVW+Y8zIQzRrwMaI65Oy6HvxyhYeILVKBJb2LWeG81bj5zbMg==, tarball: https://registry.npmmirror.com/omit-deep/-/omit-deep-0.3.0.tgz} - engines: {node: '>=0.10.0'} - - on-exit-leak-free@0.2.0: - resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==, tarball: https://registry.npmmirror.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, tarball: https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz} - engines: {node: '>= 0.8'} - - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==, tarball: https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz} - - onetime@2.0.1: - resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==, tarball: https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz} - engines: {node: '>=4'} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, tarball: https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz} - engines: {node: '>=6'} - - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, tarball: https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz} - engines: {node: '>=12'} - - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==, tarball: https://registry.npmmirror.com/onetime/-/onetime-7.0.0.tgz} - engines: {node: '>=18'} - - open@10.1.0: - resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==, tarball: https://registry.npmmirror.com/open/-/open-10.1.0.tgz} - engines: {node: '>=18'} - - open@6.4.0: - resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==, tarball: https://registry.npmmirror.com/open/-/open-6.4.0.tgz} - engines: {node: '>=8'} - - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, tarball: https://registry.npmmirror.com/open/-/open-8.4.2.tgz} - engines: {node: '>=12'} - - open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==, tarball: https://registry.npmmirror.com/open/-/open-9.1.0.tgz} - engines: {node: '>=14.16'} - - opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==, tarball: https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz} - hasBin: true - - optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==, tarball: https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz} - engines: {node: '>= 0.8.0'} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, tarball: https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz} - engines: {node: '>= 0.8.0'} - - ora@1.4.0: - resolution: {integrity: sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==, tarball: https://registry.npmmirror.com/ora/-/ora-1.4.0.tgz} - engines: {node: '>=4'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==, tarball: https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz} - engines: {node: '>=10'} - - org-regex@1.0.0: - resolution: {integrity: sha512-7bqkxkEJwzJQUAlyYniqEZ3Ilzjh0yoa62c7gL6Ijxj5bEpPL+8IE1Z0PFj0ywjjXQcdrwR51g9MIcLezR0hKQ==, tarball: https://registry.npmmirror.com/org-regex/-/org-regex-1.0.0.tgz} - engines: {node: '>=8'} - - os-browserify@0.3.0: - resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==, tarball: https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz} - - os-homedir@1.0.2: - resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==, tarball: https://registry.npmmirror.com/os-homedir/-/os-homedir-1.0.2.tgz} - engines: {node: '>=0.10.0'} - - os-locale@5.0.0: - resolution: {integrity: sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==, tarball: https://registry.npmmirror.com/os-locale/-/os-locale-5.0.0.tgz} - engines: {node: '>=10'} - - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, tarball: https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz} - engines: {node: '>=0.10.0'} - - osenv@0.1.5: - resolution: {integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==, tarball: https://registry.npmmirror.com/osenv/-/osenv-0.1.5.tgz} - deprecated: This package is no longer supported. - - outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==, tarball: https://registry.npmmirror.com/outdent/-/outdent-0.5.0.tgz} - - p-cancelable@1.1.0: - resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==, tarball: https://registry.npmmirror.com/p-cancelable/-/p-cancelable-1.1.0.tgz} - engines: {node: '>=6'} - - p-defer@1.0.0: - resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==, tarball: https://registry.npmmirror.com/p-defer/-/p-defer-1.0.0.tgz} - engines: {node: '>=4'} - - p-each-series@2.2.0: - resolution: {integrity: sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==, tarball: https://registry.npmmirror.com/p-each-series/-/p-each-series-2.2.0.tgz} - engines: {node: '>=8'} - - p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==, tarball: https://registry.npmmirror.com/p-filter/-/p-filter-2.1.0.tgz} - engines: {node: '>=8'} - - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, tarball: https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz} - engines: {node: '>=4'} - - p-is-promise@2.1.0: - resolution: {integrity: sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==, tarball: https://registry.npmmirror.com/p-is-promise/-/p-is-promise-2.1.0.tgz} - engines: {node: '>=6'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz} - engines: {node: '>=10'} - - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz} - engines: {node: '>=6'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz} - engines: {node: '>=8'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz} - engines: {node: '>=10'} - - p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==, tarball: https://registry.npmmirror.com/p-map/-/p-map-2.1.0.tgz} - engines: {node: '>=6'} - - p-map@5.5.0: - resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==, tarball: https://registry.npmmirror.com/p-map/-/p-map-5.5.0.tgz} - engines: {node: '>=12'} - - p-map@7.0.2: - resolution: {integrity: sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==, tarball: https://registry.npmmirror.com/p-map/-/p-map-7.0.2.tgz} - engines: {node: '>=18'} - - p-memoize@7.1.1: - resolution: {integrity: sha512-DZ/bONJILHkQ721hSr/E9wMz5Am/OTJ9P6LhLFo2Tu+jL8044tgc9LwHO8g4PiaYePnlVVRAJcKmgy8J9MVFrA==, tarball: https://registry.npmmirror.com/p-memoize/-/p-memoize-7.1.1.tgz} - engines: {node: '>=14.16'} - - p-retry@6.2.0: - resolution: {integrity: sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==, tarball: https://registry.npmmirror.com/p-retry/-/p-retry-6.2.0.tgz} - engines: {node: '>=16.17'} - - p-timeout@6.1.3: - resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==, tarball: https://registry.npmmirror.com/p-timeout/-/p-timeout-6.1.3.tgz} - engines: {node: '>=14.16'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, tarball: https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz} - engines: {node: '>=6'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==, tarball: https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz} - - package-json@10.0.1: - resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==, tarball: https://registry.npmmirror.com/package-json/-/package-json-10.0.1.tgz} - engines: {node: '>=18'} - - package-json@4.0.1: - resolution: {integrity: sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==, tarball: https://registry.npmmirror.com/package-json/-/package-json-4.0.1.tgz} - engines: {node: '>=4'} - - package-manager-detector@0.2.2: - resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==, tarball: https://registry.npmmirror.com/package-manager-detector/-/package-manager-detector-0.2.2.tgz} - - pacote@2.7.38: - resolution: {integrity: sha512-XxHUyHQB7QCVBxoXeVu0yKxT+2PvJucsc0+1E+6f95lMUxEAYERgSAc71ckYXrYr35Ew3xFU/LrhdIK21GQFFA==, tarball: https://registry.npmmirror.com/pacote/-/pacote-2.7.38.tgz} - - pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==, tarball: https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz} - - parallel-transform@1.2.0: - resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==, tarball: https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz} - - param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==, tarball: https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, tarball: https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz} - engines: {node: '>=6'} - - parse-asn1@5.1.7: - resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==, tarball: https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.7.tgz} - engines: {node: '>= 0.10'} - - parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==, tarball: https://registry.npmmirror.com/parse-entities/-/parse-entities-2.0.0.tgz} - - parse-entities@4.0.1: - resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==, tarball: https://registry.npmmirror.com/parse-entities/-/parse-entities-4.0.1.tgz} - - parse-git-config@0.2.0: - resolution: {integrity: sha512-amapZFADOJtHvX2URcRfbzG2OFcW+UAwmdK2kht2N2vsH5Py65VxI5yZTlD2DjmxVhTz6htFoVCxROYUJaYOXQ==, tarball: https://registry.npmmirror.com/parse-git-config/-/parse-git-config-0.2.0.tgz} - engines: {node: '>=0.10.0'} - - parse-git-config@1.1.1: - resolution: {integrity: sha512-S3LGXJZVSy/hswvbSkfdbKBRVsnqKrVu6j8fcvdtJ4TxosSELyQDsJPuGPXuZ+EyuYuJd3O4uAF8gcISR0OFrQ==, tarball: https://registry.npmmirror.com/parse-git-config/-/parse-git-config-1.1.1.tgz} - engines: {node: '>=0.10.0'} - - parse-github-url@1.0.3: - resolution: {integrity: sha512-tfalY5/4SqGaV/GIGzWyHnFjlpTPTNpENR9Ea2lLldSJ8EWXMsvacWucqY3m3I4YPtas15IxTLQVQ5NSYXPrww==, tarball: https://registry.npmmirror.com/parse-github-url/-/parse-github-url-1.0.3.tgz} - engines: {node: '>= 0.10'} - hasBin: true - - parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz} - engines: {node: '>=4'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz} - engines: {node: '>=8'} - - parse-json@8.1.0: - resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-8.1.0.tgz} - engines: {node: '>=18'} - - parse-node-version@1.0.1: - resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==, tarball: https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz} - engines: {node: '>= 0.10'} - - parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==, tarball: https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==, tarball: https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz} - - parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==, tarball: https://registry.npmmirror.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz} - - parse5@4.0.0: - resolution: {integrity: sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==, tarball: https://registry.npmmirror.com/parse5/-/parse5-4.0.0.tgz} - - parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==, tarball: https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz} - - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==, tarball: https://registry.npmmirror.com/parse5/-/parse5-7.2.1.tgz} - - parseley@0.12.1: - resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==, tarball: https://registry.npmmirror.com/parseley/-/parseley-0.12.1.tgz} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, tarball: https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz} - engines: {node: '>= 0.8'} - - pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==, tarball: https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz} - - pascalcase@0.1.1: - resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==, tarball: https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz} - engines: {node: '>=0.10.0'} - - path-browserify@0.0.1: - resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==, tarball: https://registry.npmmirror.com/path-browserify/-/path-browserify-0.0.1.tgz} - - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz} - engines: {node: '>=4'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz} - engines: {node: '>=8'} - - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-5.0.0.tgz} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, tarball: https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - path-is-inside@1.0.2: - resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==, tarball: https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz} - - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==, tarball: https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz} - engines: {node: '>=4'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, tarball: https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz} - engines: {node: '>=8'} - - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, tarball: https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz} - engines: {node: '>=12'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==, tarball: https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz} - engines: {node: '>=16 || 14 >=14.18'} - - path-to-regexp@0.1.10: - resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==, tarball: https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz} - - path-to-regexp@1.7.0: - resolution: {integrity: sha512-nifX1uj4S9IrK/w3Xe7kKvNEepXivANs9ng60Iq7PU/BlouV3yL/VUhFqTuTq33ykwUqoNcTeGo5vdOBP4jS/Q==, tarball: https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz} - - path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==, tarball: https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz} - engines: {node: '>=4'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, tarball: https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz} - engines: {node: '>=8'} - - pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==, tarball: https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz} - engines: {node: '>=0.12'} - - pdfast@0.2.0: - resolution: {integrity: sha512-cq6TTu6qKSFUHwEahi68k/kqN2mfepjkGrG9Un70cgdRRKLKY6Rf8P8uvP2NvZktaQZNF3YE7agEkLj0vGK9bA==, tarball: https://registry.npmmirror.com/pdfast/-/pdfast-0.2.0.tgz} - - peberminta@0.9.0: - resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==, tarball: https://registry.npmmirror.com/peberminta/-/peberminta-0.9.0.tgz} - - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==, tarball: https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz} - - performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==, tarball: https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz} - - picocolors@0.2.1: - resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz} - engines: {node: '>=8.6'} - - picomatch@3.0.1: - resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-3.0.1.tgz} - engines: {node: '>=10'} - - pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==, tarball: https://registry.npmmirror.com/pidtree/-/pidtree-0.3.1.tgz} - engines: {node: '>=0.10'} - hasBin: true - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, tarball: https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz} - engines: {node: '>=0.10.0'} - - pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==, tarball: https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz} - engines: {node: '>=4'} - - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, tarball: https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz} - engines: {node: '>=6'} - - pinkie-promise@2.0.1: - resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==, tarball: https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz} - engines: {node: '>=0.10.0'} - - pinkie@2.0.4: - resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==, tarball: https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz} - engines: {node: '>=0.10.0'} - - pino-abstract-transport@0.5.0: - resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==, tarball: https://registry.npmmirror.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz} - - pino-std-serializers@4.0.0: - resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==, tarball: https://registry.npmmirror.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz} - - pino@7.11.0: - resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==, tarball: https://registry.npmmirror.com/pino/-/pino-7.11.0.tgz} - hasBin: true - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==, tarball: https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz} - engines: {node: '>= 6'} - - piscina@4.7.0: - resolution: {integrity: sha512-b8hvkpp9zS0zsfa939b/jXbe64Z2gZv0Ha7FYPNUiDIB1y2AtxcOZdfP8xN8HFjUaqQiT9gRlfjAsoL8vdJ1Iw==, tarball: https://registry.npmmirror.com/piscina/-/piscina-4.7.0.tgz} - - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, tarball: https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz} - engines: {node: '>=8'} - - pkg-dir@8.0.0: - resolution: {integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==, tarball: https://registry.npmmirror.com/pkg-dir/-/pkg-dir-8.0.0.tgz} - engines: {node: '>=18'} - - pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==, tarball: https://registry.npmmirror.com/pkg-up/-/pkg-up-3.1.0.tgz} - engines: {node: '>=8'} - - plur@4.0.0: - resolution: {integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==, tarball: https://registry.npmmirror.com/plur/-/plur-4.0.0.tgz} - engines: {node: '>=10'} - - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==, tarball: https://registry.npmmirror.com/pluralize/-/pluralize-8.0.0.tgz} - engines: {node: '>=4'} - - pn@1.1.0: - resolution: {integrity: sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==, tarball: https://registry.npmmirror.com/pn/-/pn-1.1.0.tgz} - - point-in-polygon@1.1.0: - resolution: {integrity: sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==, tarball: https://registry.npmmirror.com/point-in-polygon/-/point-in-polygon-1.1.0.tgz} - - posix-character-classes@0.1.1: - resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==, tarball: https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz} - engines: {node: '>=0.10.0'} - - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==, tarball: https://registry.npmmirror.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz} - engines: {node: '>= 0.4'} - - postcss-attribute-case-insensitive@5.0.2: - resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==, tarball: https://registry.npmmirror.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-clamp@4.1.0: - resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==, tarball: https://registry.npmmirror.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz} - engines: {node: '>=7.6.0'} - peerDependencies: - postcss: ^8.4.6 - - postcss-color-functional-notation@4.2.4: - resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==, tarball: https://registry.npmmirror.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-color-hex-alpha@8.0.4: - resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==, tarball: https://registry.npmmirror.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - - postcss-color-rebeccapurple@7.1.1: - resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==, tarball: https://registry.npmmirror.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-custom-media@8.0.2: - resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==, tarball: https://registry.npmmirror.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - - postcss-custom-properties@12.1.11: - resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==, tarball: https://registry.npmmirror.com/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-custom-selectors@6.0.3: - resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==, tarball: https://registry.npmmirror.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - - postcss-dir-pseudo-class@6.0.5: - resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==, tarball: https://registry.npmmirror.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-double-position-gradients@3.1.2: - resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==, tarball: https://registry.npmmirror.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-env-function@4.0.6: - resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==, tarball: https://registry.npmmirror.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - - postcss-flexbugs-fixes@5.0.2: - resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==, tarball: https://registry.npmmirror.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz} - peerDependencies: - postcss: ^8.1.4 - - postcss-focus-visible@6.0.4: - resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==, tarball: https://registry.npmmirror.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - - postcss-focus-within@5.0.4: - resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==, tarball: https://registry.npmmirror.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - - postcss-font-variant@5.0.0: - resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==, tarball: https://registry.npmmirror.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz} - peerDependencies: - postcss: ^8.1.0 - - postcss-gap-properties@3.0.5: - resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==, tarball: https://registry.npmmirror.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-html@0.36.0: - resolution: {integrity: sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==, tarball: https://registry.npmmirror.com/postcss-html/-/postcss-html-0.36.0.tgz} - peerDependencies: - postcss: '>=5.0.0' - postcss-syntax: '>=0.36.0' - - postcss-image-set-function@4.0.7: - resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==, tarball: https://registry.npmmirror.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-initial@4.0.1: - resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==, tarball: https://registry.npmmirror.com/postcss-initial/-/postcss-initial-4.0.1.tgz} - peerDependencies: - postcss: ^8.0.0 - - postcss-lab-function@4.2.1: - resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==, tarball: https://registry.npmmirror.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-less@3.1.4: - resolution: {integrity: sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==, tarball: https://registry.npmmirror.com/postcss-less/-/postcss-less-3.1.4.tgz} - engines: {node: '>=6.14.4'} - - postcss-less@4.0.1: - resolution: {integrity: sha512-C92S4sHlbDpefJ2QQJjrucCcypq3+KZPstjfuvgOCNnGx0tF9h8hXgAlOIATGAxMXZXaF+nVp+/Mi8pCAWdSmw==, tarball: https://registry.npmmirror.com/postcss-less/-/postcss-less-4.0.1.tgz} - engines: {node: '>=10'} - - postcss-logical@5.0.4: - resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==, tarball: https://registry.npmmirror.com/postcss-logical/-/postcss-logical-5.0.4.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - - postcss-media-minmax@5.0.0: - resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==, tarball: https://registry.npmmirror.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.1.0 - - postcss-media-query-parser@0.2.3: - resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==, tarball: https://registry.npmmirror.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz} - - postcss-modules-extract-imports@3.1.0: - resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==, tarball: https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-local-by-default@4.1.0: - resolution: {integrity: sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==, tarball: https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.1.0.tgz} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-scope@3.2.1: - resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==, tarball: https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-values@4.0.0: - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==, tarball: https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-nesting@10.2.0: - resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==, tarball: https://registry.npmmirror.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-opacity-percentage@1.1.3: - resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==, tarball: https://registry.npmmirror.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-overflow-shorthand@3.0.4: - resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==, tarball: https://registry.npmmirror.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-page-break@3.0.4: - resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==, tarball: https://registry.npmmirror.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz} - peerDependencies: - postcss: ^8 - - postcss-place@7.0.5: - resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==, tarball: https://registry.npmmirror.com/postcss-place/-/postcss-place-7.0.5.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-prefix-selector@1.16.0: - resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==, tarball: https://registry.npmmirror.com/postcss-prefix-selector/-/postcss-prefix-selector-1.16.0.tgz} - peerDependencies: - postcss: '>4 <9' - - postcss-preset-env@7.5.0: - resolution: {integrity: sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ==, tarball: https://registry.npmmirror.com/postcss-preset-env/-/postcss-preset-env-7.5.0.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - - postcss-pseudo-class-any-link@7.1.6: - resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==, tarball: https://registry.npmmirror.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - - postcss-replace-overflow-wrap@4.0.0: - resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==, tarball: https://registry.npmmirror.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz} - peerDependencies: - postcss: ^8.0.3 - - postcss-resolve-nested-selector@0.1.6: - resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==, tarball: https://registry.npmmirror.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz} - - postcss-safe-parser@4.0.2: - resolution: {integrity: sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==, tarball: https://registry.npmmirror.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz} - engines: {node: '>=6.0.0'} - - postcss-sass@0.4.4: - resolution: {integrity: sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==, tarball: https://registry.npmmirror.com/postcss-sass/-/postcss-sass-0.4.4.tgz} - - postcss-scss@2.1.1: - resolution: {integrity: sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==, tarball: https://registry.npmmirror.com/postcss-scss/-/postcss-scss-2.1.1.tgz} - engines: {node: '>=6.0.0'} - - postcss-selector-not@5.0.0: - resolution: {integrity: sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==, tarball: https://registry.npmmirror.com/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz} - peerDependencies: - postcss: ^8.1.0 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz} - engines: {node: '>=4'} - - postcss-selector-parser@7.0.0: - resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz} - engines: {node: '>=4'} - - postcss-sorting@6.0.0: - resolution: {integrity: sha512-bYJ0vgAiGbjCBKi7B07CzsBc9eM84nLEbavUmwNp8rAa+PNyrgdH+6PpnqTtciLuUs99c4rFQQmCaYgeBQYmSQ==, tarball: https://registry.npmmirror.com/postcss-sorting/-/postcss-sorting-6.0.0.tgz} - peerDependencies: - postcss: ^8.0.4 - - postcss-syntax@0.36.2: - resolution: {integrity: sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==, tarball: https://registry.npmmirror.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz} - peerDependencies: - postcss: '>=5.0.0' - postcss-html: '*' - postcss-jsx: '*' - postcss-less: '*' - postcss-markdown: '*' - postcss-scss: '*' - peerDependenciesMeta: - postcss-html: - optional: true - postcss-jsx: - optional: true - postcss-less: - optional: true - postcss-markdown: - optional: true - postcss-scss: - optional: true - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, tarball: https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz} - - postcss@7.0.39: - resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==, tarball: https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz} - engines: {node: '>=6.0.0'} - - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.38.tgz} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.49.tgz} - engines: {node: ^10 || ^12 || >=14} - - prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==, tarball: https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz} - engines: {node: '>= 0.8.0'} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, tarball: https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz} - engines: {node: '>= 0.8.0'} - - prepend-http@1.0.4: - resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==, tarball: https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz} - engines: {node: '>=0.10.0'} - - prepend-http@2.0.0: - resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==, tarball: https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz} - engines: {node: '>=4'} - - prettier-plugin-organize-imports@3.2.4: - resolution: {integrity: sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==, tarball: https://registry.npmmirror.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.4.tgz} - peerDependencies: - '@volar/vue-language-plugin-pug': ^1.0.4 - '@volar/vue-typescript': ^1.0.4 - prettier: '>=2.0' - typescript: '>=2.9' - peerDependenciesMeta: - '@volar/vue-language-plugin-pug': - optional: true - '@volar/vue-typescript': - optional: true - - prettier-plugin-organize-imports@4.1.0: - resolution: {integrity: sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==, tarball: https://registry.npmmirror.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz} - peerDependencies: - prettier: '>=2.0' - typescript: '>=2.9' - vue-tsc: ^2.1.0 - peerDependenciesMeta: - vue-tsc: - optional: true - - prettier-plugin-packagejson@2.3.0: - resolution: {integrity: sha512-2SAPMMk1UDkqsB7DifWKcwCm6VC52JXMrzLHfbcQHJRWhRCj9zziOy+s+2XOyPBeyqFqS+A/1IKzOrxKFTo6pw==, tarball: https://registry.npmmirror.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.3.0.tgz} - peerDependencies: - prettier: '>= 1.16.0' - peerDependenciesMeta: - prettier: - optional: true - - prettier-plugin-packagejson@2.4.3: - resolution: {integrity: sha512-kPeeviJiwy0BgOSk7No8NmzzXfW4R9FYWni6ziA5zc1kGVVrKnBzMZdu2TUhI+I7h8/5Htt3vARYOk7KKJTTNQ==, tarball: https://registry.npmmirror.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.4.3.tgz} - peerDependencies: - prettier: '>= 1.16.0' - peerDependenciesMeta: - prettier: - optional: true - - prettier-plugin-packagejson@2.5.3: - resolution: {integrity: sha512-ATMEEXr+ywls1kgrZEWl4SBPEm0uDdyDAjyNzUC0/Z8WZTD3RqbJcQDR+Dau+wYkW9KHK6zqQIsFyfn+9aduWg==, tarball: https://registry.npmmirror.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.3.tgz} - peerDependencies: - prettier: '>= 1.16.0' - peerDependenciesMeta: - prettier: - optional: true - - prettier-plugin-two-style-order@1.0.1: - resolution: {integrity: sha512-ETltO2FRR/Pxc7bsgz2XwuzWSPwafl7/v5+5Rria4S579CTas7dya+xsmbkix0q1tYQiuRjVVdfGnCKlH/aOuQ==, tarball: https://registry.npmmirror.com/prettier-plugin-two-style-order/-/prettier-plugin-two-style-order-1.0.1.tgz} - peerDependencies: - prettier: '>= 2.0.0' - - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, tarball: https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz} - engines: {node: '>=10.13.0'} - hasBin: true - - pretty-error@4.0.0: - resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==, tarball: https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz} - - pretty-format@24.9.0: - resolution: {integrity: sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==, tarball: https://registry.npmmirror.com/pretty-format/-/pretty-format-24.9.0.tgz} - engines: {node: '>= 6'} - - pretty-format@26.6.2: - resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==, tarball: https://registry.npmmirror.com/pretty-format/-/pretty-format-26.6.2.tgz} - engines: {node: '>= 10'} - - pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==, tarball: https://registry.npmmirror.com/pretty-format/-/pretty-format-27.5.1.tgz} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - - pretty-quick@3.3.1: - resolution: {integrity: sha512-3b36UXfYQ+IXXqex6mCca89jC8u0mYLqFAN5eTQKoXO6oCQYcIVYZEB/5AlBHI7JPYygReM2Vv6Vom/Gln7fBg==, tarball: https://registry.npmmirror.com/pretty-quick/-/pretty-quick-3.3.1.tgz} - engines: {node: '>=10.13'} - hasBin: true - peerDependencies: - prettier: ^2.0.0 - - prism-react-renderer@1.3.5: - resolution: {integrity: sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==, tarball: https://registry.npmmirror.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz} - peerDependencies: - react: ^18.0.1 - - prism-themes@1.9.0: - resolution: {integrity: sha512-tX2AYsehKDw1EORwBps+WhBFKc2kxfoFpQAjxBndbZKr4fRmMkv47XN0BghC/K1qwodB1otbe4oF23vUTFDokw==, tarball: https://registry.npmmirror.com/prism-themes/-/prism-themes-1.9.0.tgz} - - prismjs@1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==, tarball: https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz} - engines: {node: '>=6'} - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, tarball: https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz} - - process-okam@0.11.10: - resolution: {integrity: sha512-p8e5nl6/OCeMalVb9dSojND5B9m/nq64WsyUfRmrTdLMKcNYcDN++/2I8WV1mTQDqrh2PQ6tIIb2A7/A38eSvw==, tarball: https://registry.npmmirror.com/process-okam/-/process-okam-0.11.10.tgz} - engines: {node: '>= 0.6.0'} - - process-warning@1.0.0: - resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==, tarball: https://registry.npmmirror.com/process-warning/-/process-warning-1.0.0.tgz} - - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==, tarball: https://registry.npmmirror.com/process/-/process-0.11.10.tgz} - engines: {node: '>= 0.6.0'} - - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, tarball: https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz} - engines: {node: '>=0.4.0'} - - promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==, tarball: https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - - promise-retry@1.1.1: - resolution: {integrity: sha512-StEy2osPr28o17bIW776GtwO6+Q+M9zPiZkYfosciUUMYqjhU/ffwRAH0zN2+uvGyUsn8/YICIHRzLbPacpZGw==, tarball: https://registry.npmmirror.com/promise-retry/-/promise-retry-1.1.1.tgz} - engines: {node: '>=0.12'} - - promise@7.0.4: - resolution: {integrity: sha512-8z1gTSL9cMgqCx8zvMYhzT0eQURAQNSQqR8B2hGfCYkAzt1vjReVdKBv4YwGw3OXAPaxfm4aR0gLoBUon4VmmA==, tarball: https://registry.npmmirror.com/promise/-/promise-7.0.4.tgz} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, tarball: https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz} - engines: {node: '>= 6'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, tarball: https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz} - - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==, tarball: https://registry.npmmirror.com/property-information/-/property-information-6.5.0.tgz} - - proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==, tarball: https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz} - - protoduck@4.0.0: - resolution: {integrity: sha512-9sxuz0YTU/68O98xuDn8NBxTVH9EuMhrBTxZdiBL0/qxRmWhB/5a8MagAebDa+98vluAZTs8kMZibCdezbRCeQ==, tarball: https://registry.npmmirror.com/protoduck/-/protoduck-4.0.0.tgz} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, tarball: https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz} - engines: {node: '>= 0.10'} - - proxy-compare@2.6.0: - resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==, tarball: https://registry.npmmirror.com/proxy-compare/-/proxy-compare-2.6.0.tgz} - - prr@1.0.1: - resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==, tarball: https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz} - - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, tarball: https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz} - - psl@1.10.0: - resolution: {integrity: sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA==, tarball: https://registry.npmmirror.com/psl/-/psl-1.10.0.tgz} - - public-encrypt@4.0.3: - resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==, tarball: https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz} - - pump@1.0.3: - resolution: {integrity: sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==, tarball: https://registry.npmmirror.com/pump/-/pump-1.0.3.tgz} - - pump@2.0.1: - resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==, tarball: https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz} - - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==, tarball: https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz} - - pumpify@1.5.1: - resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==, tarball: https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz} - - punycode-okam@1.4.1: - resolution: {integrity: sha512-e4mSfzGfrVBJmhjp+8PHjXIz5WrvEEWB2FT+RJ6YS/ozGttTcnocuj0CtMo3dujWYe2708bTd79zeIrKBtRzCg==, tarball: https://registry.npmmirror.com/punycode-okam/-/punycode-okam-1.4.1.tgz} - - punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==, tarball: https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, tarball: https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz} - engines: {node: '>=6'} - - pupa@3.1.0: - resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==, tarball: https://registry.npmmirror.com/pupa/-/pupa-3.1.0.tgz} - engines: {node: '>=12.20'} - - q@1.5.1: - resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==, tarball: https://registry.npmmirror.com/q/-/q-1.5.1.tgz} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - deprecated: |- - You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) - - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==, tarball: https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz} - engines: {node: '>=0.6'} - - qs@6.5.3: - resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==, tarball: https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz} - engines: {node: '>=0.6'} - - query-string@4.3.4: - resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==, tarball: https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz} - engines: {node: '>=0.10.0'} - - query-string@6.14.1: - resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==, tarball: https://registry.npmmirror.com/query-string/-/query-string-6.14.1.tgz} - engines: {node: '>=6'} - - querystring-es3@0.2.1: - resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==, tarball: https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz} - engines: {node: '>=0.4.x'} - - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, tarball: https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz} - - queue@6.0.1: - resolution: {integrity: sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg==, tarball: https://registry.npmmirror.com/queue/-/queue-6.0.1.tgz} - - quick-format-unescaped@4.0.4: - resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==, tarball: https://registry.npmmirror.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz} - - quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==, tarball: https://registry.npmmirror.com/quick-lru/-/quick-lru-4.0.1.tgz} - engines: {node: '>=8'} - - quickselect@2.0.0: - resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==, tarball: https://registry.npmmirror.com/quickselect/-/quickselect-2.0.0.tgz} - - raf@3.4.1: - resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==, tarball: https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz} - - railroad-diagrams@1.0.0: - resolution: {integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==, tarball: https://registry.npmmirror.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz} - - ramda@0.29.0: - resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==, tarball: https://registry.npmmirror.com/ramda/-/ramda-0.29.0.tgz} - - randexp@0.4.6: - resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==, tarball: https://registry.npmmirror.com/randexp/-/randexp-0.4.6.tgz} - engines: {node: '>=0.12'} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, tarball: https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz} - - randomfill@1.0.4: - resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==, tarball: https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, tarball: https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz} - engines: {node: '>= 0.6'} - - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==, tarball: https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz} - engines: {node: '>= 0.8'} - - raw-loader@4.0.2: - resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==, tarball: https://registry.npmmirror.com/raw-loader/-/raw-loader-4.0.2.tgz} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - - rbush@3.0.1: - resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==, tarball: https://registry.npmmirror.com/rbush/-/rbush-3.0.1.tgz} - - rc-align@4.0.15: - resolution: {integrity: sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA==, tarball: https://registry.npmmirror.com/rc-align/-/rc-align-4.0.15.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-cascader@3.30.0: - resolution: {integrity: sha512-rrzSbk1Bdqbu+pDwiLCLHu72+lwX9BZ28+JKzoi0DWZ4N29QYFeip8Gctl33QVd2Xg3Rf14D3yAOG76ElJw16w==, tarball: https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.30.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-cascader@3.7.3: - resolution: {integrity: sha512-KBpT+kzhxDW+hxPiNk4zaKa99+Lie2/8nnI11XF+FIOPl4Bj9VlFZi61GrnWzhLGA7VEN+dTxAkNOjkySDa0dA==, tarball: https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.7.3.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-checkbox@3.0.1: - resolution: {integrity: sha512-k7nxDWxYF+jDI0ZcCvuvj71xONmWRVe5+1MKcERRR9MRyP3tZ69b+yUCSXXh+sik4/Hc9P5wHr2nnUoGS2zBjA==, tarball: https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.0.1.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-checkbox@3.3.0: - resolution: {integrity: sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==, tarball: https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.3.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-collapse@3.4.2: - resolution: {integrity: sha512-jpTwLgJzkhAgp2Wpi3xmbTbbYExg6fkptL67Uu5LCRVEj6wqmy0DHTjjeynsjOLsppHGHu41t1ELntZ0lEvS/Q==, tarball: https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.4.2.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-collapse@3.9.0: - resolution: {integrity: sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==, tarball: https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.9.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-dialog@9.0.4: - resolution: {integrity: sha512-pmnPRZKd9CGzGgf4a1ysBvMhxm8Afx5fF6M7AzLtJ0qh8X1bshurDlqnK4MBNAB4hAeAMMbz6Ytb1rkGMvKFbQ==, tarball: https://registry.npmmirror.com/rc-dialog/-/rc-dialog-9.0.4.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-dialog@9.6.0: - resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==, tarball: https://registry.npmmirror.com/rc-dialog/-/rc-dialog-9.6.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-drawer@4.4.3: - resolution: {integrity: sha512-FYztwRs3uXnFOIf1hLvFxIQP9MiZJA+0w+Os8dfDh/90X7z/HqP/Yg+noLCIeHEbKln1Tqelv8ymCAN24zPcfQ==, tarball: https://registry.npmmirror.com/rc-drawer/-/rc-drawer-4.4.3.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-drawer@6.3.0: - resolution: {integrity: sha512-uBZVb3xTAR+dBV53d/bUhTctCw3pwcwJoM7g5aX+7vgwt2zzVzoJ6aqFjYJpBlZ9zp0dVYN8fV+hykFE7c4lig==, tarball: https://registry.npmmirror.com/rc-drawer/-/rc-drawer-6.3.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-drawer@7.2.0: - resolution: {integrity: sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==, tarball: https://registry.npmmirror.com/rc-drawer/-/rc-drawer-7.2.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-dropdown@4.0.1: - resolution: {integrity: sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g==, tarball: https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.0.1.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-dropdown@4.1.0: - resolution: {integrity: sha512-VZjMunpBdlVzYpEdJSaV7WM7O0jf8uyDjirxXLZRNZ+tAC+NzD3PXPEtliFwGzVwBBdCmGuSqiS9DWcOLxQ9tw==, tarball: https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.1.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-dropdown@4.2.0: - resolution: {integrity: sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==, tarball: https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.2.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-field-form@1.38.2: - resolution: {integrity: sha512-O83Oi1qPyEv31Sg+Jwvsj6pXc8uQI2BtIAkURr5lvEYHVggXJhdU/nynK8wY1gbw0qR48k731sN5ON4egRCROA==, tarball: https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.38.2.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-field-form@2.5.0: - resolution: {integrity: sha512-trTezNK0ThFQkKTy3KmsP6tY1TPMm0O5H/YviB+QLyfpdcMFuYs/aPn1uDbpdQupBd6dE6X73bzITcPS97zhJQ==, tarball: https://registry.npmmirror.com/rc-field-form/-/rc-field-form-2.5.0.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-footer@0.6.8: - resolution: {integrity: sha512-JBZ+xcb6kkex8XnBd4VHw1ZxjV6kmcwUumSHaIFdka2qzMCo7Klcy4sI6G0XtUpG/vtpislQCc+S9Bc+NLHYMg==, tarball: https://registry.npmmirror.com/rc-footer/-/rc-footer-0.6.8.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-image@5.13.0: - resolution: {integrity: sha512-iZTOmw5eWo2+gcrJMMcnd7SsxVHl3w5xlyCgsULUdJhJbnuI8i/AL0tVOsE7aLn9VfOh1qgDT3mC2G75/c7mqg==, tarball: https://registry.npmmirror.com/rc-image/-/rc-image-5.13.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-image@7.11.0: - resolution: {integrity: sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==, tarball: https://registry.npmmirror.com/rc-image/-/rc-image-7.11.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-input-number@7.3.11: - resolution: {integrity: sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA==, tarball: https://registry.npmmirror.com/rc-input-number/-/rc-input-number-7.3.11.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-input-number@9.3.0: - resolution: {integrity: sha512-JQ363ywqRyxwgVxpg2z2kja3CehTpYdqR7emJ/6yJjRdbvo+RvfE83fcpBCIJRq3zLp8SakmEXq60qzWyZ7Usw==, tarball: https://registry.npmmirror.com/rc-input-number/-/rc-input-number-9.3.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-input@0.1.4: - resolution: {integrity: sha512-FqDdNz+fV2dKNgfXzcSLKvC+jEs1709t7nD+WdfjrdSaOcefpgc7BUJYadc3usaING+b7ediMTfKxuJBsEFbXA==, tarball: https://registry.npmmirror.com/rc-input/-/rc-input-0.1.4.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-input@1.6.3: - resolution: {integrity: sha512-wI4NzuqBS8vvKr8cljsvnTUqItMfG1QbJoxovCgL+DX4eVUcHIjVwharwevIxyy7H/jbLryh+K7ysnJr23aWIA==, tarball: https://registry.npmmirror.com/rc-input/-/rc-input-1.6.3.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-mentions@1.13.1: - resolution: {integrity: sha512-FCkaWw6JQygtOz0+Vxz/M/NWqrWHB9LwqlY2RtcuFqWJNFK9njijOOzTSsBGANliGufVUzx/xuPHmZPBV0+Hgw==, tarball: https://registry.npmmirror.com/rc-mentions/-/rc-mentions-1.13.1.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-mentions@2.17.0: - resolution: {integrity: sha512-sfHy+qLvc+p8jx8GUsujZWXDOIlIimp6YQz7N5ONQ6bHsa2kyG+BLa5k2wuxgebBbH97is33wxiyq5UkiXRpHA==, tarball: https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.17.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-menu@9.12.4: - resolution: {integrity: sha512-t2NcvPLV1mFJzw4F21ojOoRVofK2rWhpKPx69q2raUsiHPDP6DDevsBILEYdsIegqBeSXoWs2bf6CueBKg3BFg==, tarball: https://registry.npmmirror.com/rc-menu/-/rc-menu-9.12.4.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-menu@9.16.0: - resolution: {integrity: sha512-vAL0yqPkmXWk3+YKRkmIR8TYj3RVdEt3ptG2jCJXWNAvQbT0VJJdRyHZ7kG/l1JsZlB+VJq/VcYOo69VR4oD+w==, tarball: https://registry.npmmirror.com/rc-menu/-/rc-menu-9.16.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-menu@9.8.4: - resolution: {integrity: sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw==, tarball: https://registry.npmmirror.com/rc-menu/-/rc-menu-9.8.4.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-motion@2.9.3: - resolution: {integrity: sha512-rkW47ABVkic7WEB0EKJqzySpvDqwl60/tdkY7hWP7dYnh5pm0SzJpo54oW3TDUGXV5wfxXFmMkxrzRRbotQ0+w==, tarball: https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.3.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-notification@4.6.1: - resolution: {integrity: sha512-NSmFYwrrdY3+un1GvDAJQw62Xi9LNMSsoQyo95tuaYrcad5Bn9gJUL8AREufRxSQAQnr64u3LtP3EUyLYT6bhw==, tarball: https://registry.npmmirror.com/rc-notification/-/rc-notification-4.6.1.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-notification@5.6.2: - resolution: {integrity: sha512-Id4IYMoii3zzrG0lB0gD6dPgJx4Iu95Xu0BQrhHIbp7ZnAZbLqdqQ73aIWH0d0UFcElxwaKjnzNovTjo7kXz7g==, tarball: https://registry.npmmirror.com/rc-notification/-/rc-notification-5.6.2.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-overflow@1.3.2: - resolution: {integrity: sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==, tarball: https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.3.2.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-pagination@3.2.0: - resolution: {integrity: sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w==, tarball: https://registry.npmmirror.com/rc-pagination/-/rc-pagination-3.2.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-pagination@4.3.0: - resolution: {integrity: sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g==, tarball: https://registry.npmmirror.com/rc-pagination/-/rc-pagination-4.3.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-picker@2.7.6: - resolution: {integrity: sha512-H9if/BUJUZBOhPfWcPeT15JUI3/ntrG9muzERrXDkSoWmDj4yzmBvumozpxYrHwjcKnjyDGAke68d+whWwvhHA==, tarball: https://registry.npmmirror.com/rc-picker/-/rc-picker-2.7.6.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-picker@4.7.2: - resolution: {integrity: sha512-KShWVIdrncIKBZ1rm6E2s4Di9jlpcm38EYIZ472skXqKUz8YKlWQgewG5dT+HUjfon+tLs7dp5kmWUe0bW7Gqw==, tarball: https://registry.npmmirror.com/rc-picker/-/rc-picker-4.7.2.tgz} - engines: {node: '>=8.x'} - peerDependencies: - date-fns: '>= 2.x' - dayjs: '>= 1.x' - luxon: '>= 3.x' - moment: '>= 2.x' - react: ^18.0.1 - react-dom: ^18.0.1 - peerDependenciesMeta: - date-fns: - optional: true - dayjs: - optional: true - luxon: - optional: true - moment: - optional: true - - rc-progress@3.4.2: - resolution: {integrity: sha512-iAGhwWU+tsayP+Jkl9T4+6rHeQTG9kDz8JAHZk4XtQOcYN5fj9H34NXNEdRdZx94VUDHMqCb1yOIvi8eJRh67w==, tarball: https://registry.npmmirror.com/rc-progress/-/rc-progress-3.4.2.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-progress@4.0.0: - resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==, tarball: https://registry.npmmirror.com/rc-progress/-/rc-progress-4.0.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-rate@2.13.0: - resolution: {integrity: sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw==, tarball: https://registry.npmmirror.com/rc-rate/-/rc-rate-2.13.0.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-rate@2.9.3: - resolution: {integrity: sha512-2THssUSnRhtqIouQIIXqsZGzRczvp4WsH4WvGuhiwm+LG2fVpDUJliP9O1zeDOZvYfBE/Bup4SgHun/eCkbjgQ==, tarball: https://registry.npmmirror.com/rc-rate/-/rc-rate-2.9.3.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-resize-observer@1.4.0: - resolution: {integrity: sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q==, tarball: https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.4.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-segmented@2.3.0: - resolution: {integrity: sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==, tarball: https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.3.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-segmented@2.5.0: - resolution: {integrity: sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw==, tarball: https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.5.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-select@14.1.18: - resolution: {integrity: sha512-4JgY3oG2Yz68ECMUSCON7mtxuJvCSj+LJpHEg/AONaaVBxIIrmI/ZTuMJkyojall/X50YdBe5oMKqHHPNiPzEg==, tarball: https://registry.npmmirror.com/rc-select/-/rc-select-14.1.18.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-select@14.16.3: - resolution: {integrity: sha512-51+j6s3fJJJXB7E+B6W1hM4Tjzv1B/Decooz9ilgegDBt3ZAth1b/xMwYCTrT5BbG2e53XACQsyDib2+3Ro1fg==, tarball: https://registry.npmmirror.com/rc-select/-/rc-select-14.16.3.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-slider@10.0.1: - resolution: {integrity: sha512-igTKF3zBet7oS/3yNiIlmU8KnZ45npmrmHlUUio8PNbIhzMcsh+oE/r2UD42Y6YD2D/s+kzCQkzQrPD6RY435Q==, tarball: https://registry.npmmirror.com/rc-slider/-/rc-slider-10.0.1.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-slider@11.1.7: - resolution: {integrity: sha512-ytYbZei81TX7otdC0QvoYD72XSlxvTihNth5OeZ6PMXyEDq/vHdWFulQmfDGyXK1NwKwSlKgpvINOa88uT5g2A==, tarball: https://registry.npmmirror.com/rc-slider/-/rc-slider-11.1.7.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-steps@5.0.0: - resolution: {integrity: sha512-9TgRvnVYirdhbV0C3syJFj9EhCRqoJAsxt4i1rED5o8/ZcSv5TLIYyo4H8MCjLPvbe2R+oBAm/IYBEtC+OS1Rw==, tarball: https://registry.npmmirror.com/rc-steps/-/rc-steps-5.0.0.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-steps@6.0.1: - resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==, tarball: https://registry.npmmirror.com/rc-steps/-/rc-steps-6.0.1.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-switch@3.2.2: - resolution: {integrity: sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A==, tarball: https://registry.npmmirror.com/rc-switch/-/rc-switch-3.2.2.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-switch@4.1.0: - resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==, tarball: https://registry.npmmirror.com/rc-switch/-/rc-switch-4.1.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-table@7.26.0: - resolution: {integrity: sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ==, tarball: https://registry.npmmirror.com/rc-table/-/rc-table-7.26.0.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-table@7.48.1: - resolution: {integrity: sha512-Z4mDKjWg+xz/Ezdw6ivWcbqRpaJ0QfCORRoRrlrw65KSGZLK8OcTdacH22/fyGb8L4It/0/9qcMm8VrVAk/WBw==, tarball: https://registry.npmmirror.com/rc-table/-/rc-table-7.48.1.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-tabs@12.15.0: - resolution: {integrity: sha512-aXFLRo7jo531Jed1LgRqrF0VmRnzM/Qki25PknM3S04gqyxpDaHNFpPba05pHhn+d1N+54qIi0IcY1odrCrF2A==, tarball: https://registry.npmmirror.com/rc-tabs/-/rc-tabs-12.15.0.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-tabs@12.5.10: - resolution: {integrity: sha512-Ay0l0jtd4eXepFH9vWBvinBjqOpqzcsJTerBGwJy435P2S90Uu38q8U/mvc1sxUEVOXX5ZCFbxcWPnfG3dH+tQ==, tarball: https://registry.npmmirror.com/rc-tabs/-/rc-tabs-12.5.10.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-tabs@15.4.0: - resolution: {integrity: sha512-llKuyiAVqmXm2z7OrmhX5cNb2ueZaL8ZyA2P4R+6/72NYYcbEgOXibwHiQCFY2RiN3swXl53SIABi2CumUS02g==, tarball: https://registry.npmmirror.com/rc-tabs/-/rc-tabs-15.4.0.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-textarea@0.4.7: - resolution: {integrity: sha512-IQPd1CDI3mnMlkFyzt2O4gQ2lxUsnBAeJEoZGJnkkXgORNqyM9qovdrCj9NzcRfpHgLdzaEbU3AmobNFGUznwQ==, tarball: https://registry.npmmirror.com/rc-textarea/-/rc-textarea-0.4.7.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-textarea@1.8.2: - resolution: {integrity: sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw==, tarball: https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.8.2.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-tooltip@5.2.2: - resolution: {integrity: sha512-jtQzU/18S6EI3lhSGoDYhPqNpWajMtS5VV/ld1LwyfrDByQpYmw/LW6U7oFXXLukjfDHQ7Ju705A82PRNFWYhg==, tarball: https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-5.2.2.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-tooltip@6.2.1: - resolution: {integrity: sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg==, tarball: https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.2.1.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-tree-select@5.24.4: - resolution: {integrity: sha512-MzljkSkk7weKOcE853UtYlXB6uyUEzcEQhhpaCwE6jQPbmBUgGiRURuKWpYUnM/dXrwTTlCK969M6Pgjj35MLA==, tarball: https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.24.4.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-tree-select@5.5.5: - resolution: {integrity: sha512-k2av7jF6tW9bIO4mQhaVdV4kJ1c54oxV3/hHVU+oD251Gb5JN+m1RbJFTMf1o0rAFqkvto33rxMdpafaGKQRJw==, tarball: https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.5.5.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-tree@5.10.1: - resolution: {integrity: sha512-FPXb3tT/u39mgjr6JNlHaUTYfHkVGW56XaGDahDpEFLGsnPxGcVLNTjcqoQb/GNbSCycl7tD7EvIymwOTP0+Yw==, tarball: https://registry.npmmirror.com/rc-tree/-/rc-tree-5.10.1.tgz} - engines: {node: '>=10.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-tree@5.7.12: - resolution: {integrity: sha512-LXA5nY2hG5koIAlHW5sgXgLpOMz+bFRbnZZ+cCg0tQs4Wv1AmY7EDi1SK7iFXhslYockbqUerQan82jljoaItg==, tarball: https://registry.npmmirror.com/rc-tree/-/rc-tree-5.7.12.tgz} - engines: {node: '>=10.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-trigger@5.3.4: - resolution: {integrity: sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw==, tarball: https://registry.npmmirror.com/rc-trigger/-/rc-trigger-5.3.4.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-upload@4.3.6: - resolution: {integrity: sha512-Bt7ESeG5tT3IY82fZcP+s0tQU2xmo1W6P3S8NboUUliquJLQYLkUcsaExi3IlBVr43GQMCjo30RA2o0i70+NjA==, tarball: https://registry.npmmirror.com/rc-upload/-/rc-upload-4.3.6.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-upload@4.8.1: - resolution: {integrity: sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==, tarball: https://registry.npmmirror.com/rc-upload/-/rc-upload-4.8.1.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-util@5.43.0: - resolution: {integrity: sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==, tarball: https://registry.npmmirror.com/rc-util/-/rc-util-5.43.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc-virtual-list@3.15.0: - resolution: {integrity: sha512-dF2YQztqrU3ijAeWOqscTshCEr7vpimzSqAVjO1AyAmaqcHulaXpnGR0ptK5PXfxTUy48VkJOiglMIxlkYGs0w==, tarball: https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.15.0.tgz} - engines: {node: '>=8.x'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==, tarball: https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz} - hasBin: true - - react-copy-to-clipboard@5.1.0: - resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==, tarball: https://registry.npmmirror.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz} - peerDependencies: - react: ^18.0.1 - - react-dev-utils@12.0.1: - resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==, tarball: https://registry.npmmirror.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=2.7' - webpack: '>=4' - peerDependenciesMeta: - typescript: - optional: true - - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==, tarball: https://registry.npmmirror.com/react-dom/-/react-dom-18.3.1.tgz} - peerDependencies: - react: ^18.0.1 - - react-error-boundary@3.1.4: - resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==, tarball: https://registry.npmmirror.com/react-error-boundary/-/react-error-boundary-3.1.4.tgz} - engines: {node: '>=10', npm: '>=6'} - peerDependencies: - react: ^18.0.1 - - react-error-boundary@4.1.2: - resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==, tarball: https://registry.npmmirror.com/react-error-boundary/-/react-error-boundary-4.1.2.tgz} - peerDependencies: - react: ^18.0.1 - - react-error-overlay@6.0.11: - resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==, tarball: https://registry.npmmirror.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz} - - react-error-overlay@6.0.9: - resolution: {integrity: sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==, tarball: https://registry.npmmirror.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz} - - react-fast-compare@3.2.2: - resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==, tarball: https://registry.npmmirror.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz} - - react-github-button@0.1.11: - resolution: {integrity: sha512-KL/kieQiR5DXd1RxWMegr4Igyz9+Lm6ZVwjpN5rQyttz/sdEq8DF1R/vzLl2f58nChJe0sKE3U3A7QRK+Zb01w==, tarball: https://registry.npmmirror.com/react-github-button/-/react-github-button-0.1.11.tgz} - - react-helmet-async@1.3.0: - resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==, tarball: https://registry.npmmirror.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - react-helmet@6.1.0: - resolution: {integrity: sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==, tarball: https://registry.npmmirror.com/react-helmet/-/react-helmet-6.1.0.tgz} - peerDependencies: - react: ^18.0.1 - - react-intl@6.8.7: - resolution: {integrity: sha512-Ocv8Tg6fXqBdVdkkYohQ79T9rJls3G1lmDSjhqHdK9873BdQFLSeITGgwuGWTRBd6Mg5FL33TBen4FtujCTP0g==, tarball: https://registry.npmmirror.com/react-intl/-/react-intl-6.8.7.tgz} - peerDependencies: - react: ^18.0.1 - typescript: ^4.7 || 5 - peerDependenciesMeta: - typescript: - optional: true - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, tarball: https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz} - - react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==, tarball: https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==, tarball: https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz} - - react-lifecycles-compat@3.0.4: - resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==, tarball: https://registry.npmmirror.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz} - - react-loading-skeleton@3.5.0: - resolution: {integrity: sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ==, tarball: https://registry.npmmirror.com/react-loading-skeleton/-/react-loading-skeleton-3.5.0.tgz} - peerDependencies: - react: ^18.0.1 - - react-markdown@9.0.1: - resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==, tarball: https://registry.npmmirror.com/react-markdown/-/react-markdown-9.0.1.tgz} - peerDependencies: - '@types/react': '>=18' - react: ^18.0.1 - - react-merge-refs@1.1.0: - resolution: {integrity: sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==, tarball: https://registry.npmmirror.com/react-merge-refs/-/react-merge-refs-1.1.0.tgz} - - react-reconciler@0.26.2: - resolution: {integrity: sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==, tarball: https://registry.npmmirror.com/react-reconciler/-/react-reconciler-0.26.2.tgz} - engines: {node: '>=0.10.0'} - peerDependencies: - react: ^18.0.1 - - react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==, tarball: https://registry.npmmirror.com/react-refresh/-/react-refresh-0.14.0.tgz} - engines: {node: '>=0.10.0'} - - react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==, tarball: https://registry.npmmirror.com/react-refresh/-/react-refresh-0.14.2.tgz} - engines: {node: '>=0.10.0'} - - react-router-dom@6.28.0: - resolution: {integrity: sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==, tarball: https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.28.0.tgz} - engines: {node: '>=14.0.0'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - react-router-dom@6.3.0: - resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==, tarball: https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.3.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - react-router@6.28.0: - resolution: {integrity: sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==, tarball: https://registry.npmmirror.com/react-router/-/react-router-6.28.0.tgz} - engines: {node: '>=14.0.0'} - peerDependencies: - react: ^18.0.1 - - react-router@6.3.0: - resolution: {integrity: sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==, tarball: https://registry.npmmirror.com/react-router/-/react-router-6.3.0.tgz} - peerDependencies: - react: ^18.0.1 - - react-shallow-renderer@16.15.0: - resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==, tarball: https://registry.npmmirror.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz} - peerDependencies: - react: ^18.0.1 - - react-side-effect@2.1.2: - resolution: {integrity: sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==, tarball: https://registry.npmmirror.com/react-side-effect/-/react-side-effect-2.1.2.tgz} - peerDependencies: - react: ^18.0.1 - - react-simple-code-editor@0.13.1: - resolution: {integrity: sha512-XYeVwRZwgyKtjNIYcAEgg2FaQcCZwhbarnkJIV20U2wkCU9q/CPFBo8nRXrK4GXUz3AvbqZFsZRrpUTkqqEYyQ==, tarball: https://registry.npmmirror.com/react-simple-code-editor/-/react-simple-code-editor-0.13.1.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - react-slick@0.29.0: - resolution: {integrity: sha512-TGdOKE+ZkJHHeC4aaoH85m8RnFyWqdqRfAGkhd6dirmATXMZWAxOpTLmw2Ll/jPTQ3eEG7ercFr/sbzdeYCJXA==, tarball: https://registry.npmmirror.com/react-slick/-/react-slick-0.29.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - react-split-pane@0.1.92: - resolution: {integrity: sha512-GfXP1xSzLMcLJI5BM36Vh7GgZBpy+U/X0no+VM3fxayv+p1Jly5HpMofZJraeaMl73b3hvlr+N9zJKvLB/uz9w==, tarball: https://registry.npmmirror.com/react-split-pane/-/react-split-pane-0.1.92.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - react-style-proptype@3.2.2: - resolution: {integrity: sha512-ywYLSjNkxKHiZOqNlso9PZByNEY+FTyh3C+7uuziK0xFXu9xzdyfHwg4S9iyiRRoPCR4k2LqaBBsWVmSBwCWYQ==, tarball: https://registry.npmmirror.com/react-style-proptype/-/react-style-proptype-3.2.2.tgz} - - react-test-renderer@18.3.1: - resolution: {integrity: sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==, tarball: https://registry.npmmirror.com/react-test-renderer/-/react-test-renderer-18.3.1.tgz} - peerDependencies: - react: ^18.0.1 - - react-universal-interface@0.6.2: - resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==, tarball: https://registry.npmmirror.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz} - peerDependencies: - react: ^18.0.1 - tslib: 2.6.1 - - react-use@17.5.1: - resolution: {integrity: sha512-LG/uPEVRflLWMwi3j/sZqR00nF6JGqTTDblkXK2nzXsIvij06hXl1V/MZIlwj1OKIQUtlh1l9jK8gLsRyCQxMg==, tarball: https://registry.npmmirror.com/react-use/-/react-use-17.5.1.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==, tarball: https://registry.npmmirror.com/react/-/react-18.3.1.tgz} - engines: {node: '>=0.10.0'} - - read-package-up@11.0.0: - resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==, tarball: https://registry.npmmirror.com/read-package-up/-/read-package-up-11.0.0.tgz} - engines: {node: '>=18'} - - read-pkg-up@4.0.0: - resolution: {integrity: sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==, tarball: https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz} - engines: {node: '>=6'} - - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==, tarball: https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz} - engines: {node: '>=8'} - - read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==, tarball: https://registry.npmmirror.com/read-pkg/-/read-pkg-3.0.0.tgz} - engines: {node: '>=4'} - - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==, tarball: https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz} - engines: {node: '>=8'} - - read-pkg@9.0.1: - resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==, tarball: https://registry.npmmirror.com/read-pkg/-/read-pkg-9.0.1.tgz} - engines: {node: '>=18'} - - read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==, tarball: https://registry.npmmirror.com/read-yaml-file/-/read-yaml-file-1.1.0.tgz} - engines: {node: '>=6'} - - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==, tarball: https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==, tarball: https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz} - engines: {node: '>= 6'} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz} - engines: {node: '>=8.10.0'} - - readdirp@4.0.2: - resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-4.0.2.tgz} - engines: {node: '>= 14.16.0'} - - reading-time@1.5.0: - resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==, tarball: https://registry.npmmirror.com/reading-time/-/reading-time-1.5.0.tgz} - - real-require@0.1.0: - resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==, tarball: https://registry.npmmirror.com/real-require/-/real-require-0.1.0.tgz} - engines: {node: '>= 12.13.0'} - - realpath-native@1.1.0: - resolution: {integrity: sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==, tarball: https://registry.npmmirror.com/realpath-native/-/realpath-native-1.1.0.tgz} - engines: {node: '>=4'} - - rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==, tarball: https://registry.npmmirror.com/rechoir/-/rechoir-0.6.2.tgz} - engines: {node: '>= 0.10'} - - rechoir@0.8.0: - resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==, tarball: https://registry.npmmirror.com/rechoir/-/rechoir-0.8.0.tgz} - engines: {node: '>= 10.13.0'} - - recursive-readdir@2.2.3: - resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==, tarball: https://registry.npmmirror.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz} - engines: {node: '>=6.0.0'} - - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==, tarball: https://registry.npmmirror.com/redent/-/redent-3.0.0.tgz} - engines: {node: '>=8'} - - reduce@1.0.3: - resolution: {integrity: sha512-0Dtt3Bgj34/yKFzE5N9V6/HYyP3gb+E3TLs/hMr/wGgkCIzYa+7G4hNrE/P+en52OJT+pLUgmba9DQF3AB+2LQ==, tarball: https://registry.npmmirror.com/reduce/-/reduce-1.0.3.tgz} - engines: {node: '>= 0.4'} - - redux@4.2.1: - resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==, tarball: https://registry.npmmirror.com/redux/-/redux-4.2.1.tgz} - - reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==, tarball: https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz} - engines: {node: '>= 0.4'} - - regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==, tarball: https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz} - engines: {node: '>=4'} - - regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==, tarball: https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz} - engines: {node: '>=4'} - - regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, tarball: https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz} - - regenerator-runtime@0.10.5: - resolution: {integrity: sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz} - - regenerator-runtime@0.11.1: - resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz} - - regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz} - - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz} - - regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==, tarball: https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz} - - regex-not@1.0.2: - resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==, tarball: https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz} - engines: {node: '>=0.10.0'} - - regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==, tarball: https://registry.npmmirror.com/regexp-tree/-/regexp-tree-0.1.27.tgz} - hasBin: true - - regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==, tarball: https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz} - engines: {node: '>= 0.4'} - - regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==, tarball: https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz} - engines: {node: '>=8'} - - regexpu-core@6.1.1: - resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==, tarball: https://registry.npmmirror.com/regexpu-core/-/regexpu-core-6.1.1.tgz} - engines: {node: '>=4'} - - registry-auth-token@3.4.0: - resolution: {integrity: sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==, tarball: https://registry.npmmirror.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz} - - registry-auth-token@5.0.2: - resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==, tarball: https://registry.npmmirror.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz} - engines: {node: '>=14'} - - registry-url@3.1.0: - resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==, tarball: https://registry.npmmirror.com/registry-url/-/registry-url-3.1.0.tgz} - engines: {node: '>=0.10.0'} - - registry-url@6.0.1: - resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==, tarball: https://registry.npmmirror.com/registry-url/-/registry-url-6.0.1.tgz} - engines: {node: '>=12'} - - regjsgen@0.8.0: - resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==, tarball: https://registry.npmmirror.com/regjsgen/-/regjsgen-0.8.0.tgz} - - regjsparser@0.11.2: - resolution: {integrity: sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==, tarball: https://registry.npmmirror.com/regjsparser/-/regjsparser-0.11.2.tgz} - hasBin: true - - rehype-autolink-headings@6.1.1: - resolution: {integrity: sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA==, tarball: https://registry.npmmirror.com/rehype-autolink-headings/-/rehype-autolink-headings-6.1.1.tgz} - - rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==, tarball: https://registry.npmmirror.com/rehype-raw/-/rehype-raw-7.0.0.tgz} - - rehype-remove-comments@5.0.0: - resolution: {integrity: sha512-sfiVT+u1in19sxo9vv/SDQVbHE2mADScNrpeVsUxBFl14zOMZnfPb6l4hR+lXqe10G13UFVqv5pt8zDbCR4JYQ==, tarball: https://registry.npmmirror.com/rehype-remove-comments/-/rehype-remove-comments-5.0.0.tgz} - - rehype-stringify@9.0.4: - resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==, tarball: https://registry.npmmirror.com/rehype-stringify/-/rehype-stringify-9.0.4.tgz} - - relateurl@0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==, tarball: https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz} - engines: {node: '>= 0.10'} - - remark-directive@2.0.1: - resolution: {integrity: sha512-oosbsUAkU/qmUE78anLaJePnPis4ihsE7Agp0T/oqTzvTea8pOiaYEtfInU/+xMOVTS9PN5AhGOiaIVe4GD8gw==, tarball: https://registry.npmmirror.com/remark-directive/-/remark-directive-2.0.1.tgz} - - remark-frontmatter@4.0.1: - resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==, tarball: https://registry.npmmirror.com/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz} - - remark-gfm@3.0.1: - resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==, tarball: https://registry.npmmirror.com/remark-gfm/-/remark-gfm-3.0.1.tgz} - - remark-gfm@4.0.0: - resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==, tarball: https://registry.npmmirror.com/remark-gfm/-/remark-gfm-4.0.0.tgz} - - remark-parse@10.0.2: - resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==, tarball: https://registry.npmmirror.com/remark-parse/-/remark-parse-10.0.2.tgz} - - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==, tarball: https://registry.npmmirror.com/remark-parse/-/remark-parse-11.0.0.tgz} - - remark-parse@9.0.0: - resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==, tarball: https://registry.npmmirror.com/remark-parse/-/remark-parse-9.0.0.tgz} - - remark-rehype@10.1.0: - resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==, tarball: https://registry.npmmirror.com/remark-rehype/-/remark-rehype-10.1.0.tgz} - - remark-rehype@11.1.1: - resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==, tarball: https://registry.npmmirror.com/remark-rehype/-/remark-rehype-11.1.1.tgz} - - remark-stringify@10.0.3: - resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==, tarball: https://registry.npmmirror.com/remark-stringify/-/remark-stringify-10.0.3.tgz} - - remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==, tarball: https://registry.npmmirror.com/remark-stringify/-/remark-stringify-11.0.0.tgz} - - remark-stringify@9.0.1: - resolution: {integrity: sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==, tarball: https://registry.npmmirror.com/remark-stringify/-/remark-stringify-9.0.1.tgz} - - remark@13.0.0: - resolution: {integrity: sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==, tarball: https://registry.npmmirror.com/remark/-/remark-13.0.0.tgz} - - remote-origin-url@0.4.0: - resolution: {integrity: sha512-HYhdsT2pNd0LP4Osb0vtQ1iassxIc3Yk1oze7j8dMJFciMkW8e0rdg9E/mOunqtSVHSzvMfwLDIYzPnEDmpk6Q==, tarball: https://registry.npmmirror.com/remote-origin-url/-/remote-origin-url-0.4.0.tgz} - engines: {node: '>= 0.8.0'} - - remote-origin-url@0.5.3: - resolution: {integrity: sha512-crQ7Xk1m/F2IiwBx5oTqk/c0hjoumrEz+a36+ZoVupskQRE/q7pAwHKsTNeiZ31sbSTELvVlVv4h1W0Xo5szKg==, tarball: https://registry.npmmirror.com/remote-origin-url/-/remote-origin-url-0.5.3.tgz} - engines: {node: '>= 0.8.0'} - - remove-trailing-separator@1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==, tarball: https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz} - - rename-keys@1.2.0: - resolution: {integrity: sha512-U7XpAktpbSgHTRSNRrjKSrjYkZKuhUukfoBlXWXUExCAqhzh1TU3BDRAfJmarcl5voKS+pbKU9MvyLWKZ4UEEg==, tarball: https://registry.npmmirror.com/rename-keys/-/rename-keys-1.2.0.tgz} - engines: {node: '>= 0.8.0'} - - renderkid@3.0.0: - resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==, tarball: https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz} - - repeat-element@1.1.4: - resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==, tarball: https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz} - engines: {node: '>=0.10.0'} - - repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==, tarball: https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz} - engines: {node: '>=0.10'} - - request-promise-core@1.1.4: - resolution: {integrity: sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==, tarball: https://registry.npmmirror.com/request-promise-core/-/request-promise-core-1.1.4.tgz} - engines: {node: '>=0.10.0'} - peerDependencies: - request: ^2.34 - - request-promise-native@1.0.9: - resolution: {integrity: sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==, tarball: https://registry.npmmirror.com/request-promise-native/-/request-promise-native-1.0.9.tgz} - engines: {node: '>=0.12.0'} - deprecated: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142 - peerDependencies: - request: ^2.34 - - request@2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==, tarball: https://registry.npmmirror.com/request/-/request-2.88.2.tgz} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, tarball: https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz} - engines: {node: '>=0.10.0'} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, tarball: https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz} - engines: {node: '>=0.10.0'} - - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, tarball: https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, tarball: https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz} - - reserved-words@0.1.2: - resolution: {integrity: sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==, tarball: https://registry.npmmirror.com/reserved-words/-/reserved-words-0.1.2.tgz} - - resize-observer-polyfill@1.5.1: - resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==, tarball: https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz} - - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, tarball: https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz} - engines: {node: '>=8'} - - resolve-dir@0.1.1: - resolution: {integrity: sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==, tarball: https://registry.npmmirror.com/resolve-dir/-/resolve-dir-0.1.1.tgz} - engines: {node: '>=0.10.0'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz} - engines: {node: '>=4'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz} - engines: {node: '>=8'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, tarball: https://registry.npmmirror.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz} - - resolve-url@0.2.1: - resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==, tarball: https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz} - deprecated: https://github.com/lydell/resolve-url#deprecated - - resolve@1.1.7: - resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.1.7.tgz} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz} - hasBin: true - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==, tarball: https://registry.npmmirror.com/resolve/-/resolve-2.0.0-next.5.tgz} - hasBin: true - - responselike@1.0.2: - resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==, tarball: https://registry.npmmirror.com/responselike/-/responselike-1.0.2.tgz} - - restore-cursor@2.0.0: - resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==, tarball: https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz} - engines: {node: '>=4'} - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, tarball: https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz} - engines: {node: '>=8'} - - ret@0.1.15: - resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==, tarball: https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz} - engines: {node: '>=0.12'} - - retry@0.10.1: - resolution: {integrity: sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ==, tarball: https://registry.npmmirror.com/retry/-/retry-0.10.1.tgz} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==, tarball: https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz} - engines: {node: '>= 4'} - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - right-align@0.1.3: - resolution: {integrity: sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==, tarball: https://registry.npmmirror.com/right-align/-/right-align-0.1.3.tgz} - engines: {node: '>=0.10.0'} - - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rimraf@5.0.1: - resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-5.0.1.tgz} - engines: {node: '>=14'} - hasBin: true - - ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==, tarball: https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz} - - roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==, tarball: https://registry.npmmirror.com/roarr/-/roarr-2.15.4.tgz} - engines: {node: '>=8.0'} - - rollup-plugin-visualizer@5.9.0: - resolution: {integrity: sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==, tarball: https://registry.npmmirror.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz} - engines: {node: '>=14'} - hasBin: true - peerDependencies: - rollup: 2.x || 3.x - peerDependenciesMeta: - rollup: - optional: true - - rollup@0.25.8: - resolution: {integrity: sha512-a2S4Bh3bgrdO4BhKr2E4nZkjTvrJ2m2bWjMTzVYtoqSCn0HnuxosXnaJUHrMEziOWr3CzL9GjilQQKcyCQpJoA==, tarball: https://registry.npmmirror.com/rollup/-/rollup-0.25.8.tgz} - hasBin: true - - rollup@3.29.5: - resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==, tarball: https://registry.npmmirror.com/rollup/-/rollup-3.29.5.tgz} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - - rollup@4.25.0: - resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==, tarball: https://registry.npmmirror.com/rollup/-/rollup-4.25.0.tgz} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rst-selector-parser@2.2.3: - resolution: {integrity: sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==, tarball: https://registry.npmmirror.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz} - - rsvp@4.8.5: - resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==, tarball: https://registry.npmmirror.com/rsvp/-/rsvp-4.8.5.tgz} - engines: {node: 6.* || >= 7.*} - - rtl-css-js@1.16.1: - resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==, tarball: https://registry.npmmirror.com/rtl-css-js/-/rtl-css-js-1.16.1.tgz} - - run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==, tarball: https://registry.npmmirror.com/run-applescript/-/run-applescript-5.0.0.tgz} - engines: {node: '>=12'} - - run-applescript@7.0.0: - resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==, tarball: https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz} - engines: {node: '>=18'} - - run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==, tarball: https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz} - engines: {node: '>=0.12.0'} - - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==, tarball: https://registry.npmmirror.com/run-async/-/run-async-3.0.0.tgz} - engines: {node: '>=0.12.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz} - - run-queue@1.0.3: - resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==, tarball: https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz} - - rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==, tarball: https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz} - - rxjs@6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==, tarball: https://registry.npmmirror.com/rxjs/-/rxjs-6.6.7.tgz} - engines: {npm: '>=2.0.0'} - - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==, tarball: https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz} - - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, tarball: https://registry.npmmirror.com/sade/-/sade-1.8.1.tgz} - engines: {node: '>=6'} - - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==, tarball: https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz} - engines: {node: '>=0.4'} - - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz} - - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==, tarball: https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz} - engines: {node: '>= 0.4'} - - safe-regex@1.1.0: - resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==, tarball: https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz} - - safe-regex@2.1.1: - resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==, tarball: https://registry.npmmirror.com/safe-regex/-/safe-regex-2.1.1.tgz} - - safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==, tarball: https://registry.npmmirror.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz} - engines: {node: '>=10'} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, tarball: https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz} - - sane@4.1.0: - resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==, tarball: https://registry.npmmirror.com/sane/-/sane-4.1.0.tgz} - engines: {node: 6.* || 8.* || >= 10.*} - deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added - hasBin: true - - sass@1.80.6: - resolution: {integrity: sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==, tarball: https://registry.npmmirror.com/sass/-/sass-1.80.6.tgz} - engines: {node: '>=14.0.0'} - hasBin: true - - sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==, tarball: https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz} - - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==, tarball: https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz} - - saxes@5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==, tarball: https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz} - engines: {node: '>=10'} - - scheduler@0.20.2: - resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==, tarball: https://registry.npmmirror.com/scheduler/-/scheduler-0.20.2.tgz} - - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==, tarball: https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz} - - schema-utils@2.7.0: - resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.0.tgz} - engines: {node: '>= 8.9.0'} - - schema-utils@2.7.1: - resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz} - engines: {node: '>= 8.9.0'} - - schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz} - engines: {node: '>= 10.13.0'} - - schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz} - engines: {node: '>= 12.13.0'} - - scoped-regex@3.0.0: - resolution: {integrity: sha512-yEsN6TuxZhZ1Tl9iB81frTNS292m0I/IG7+w8lTvfcJQP2x3vnpOoevjBoE3Np5A6KnZM2+RtVenihj9t6NiYg==, tarball: https://registry.npmmirror.com/scoped-regex/-/scoped-regex-3.0.0.tgz} - engines: {node: '>=12'} - - screenfull@5.2.0: - resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==, tarball: https://registry.npmmirror.com/screenfull/-/screenfull-5.2.0.tgz} - engines: {node: '>=0.10.0'} - - scroll-into-view-if-needed@2.2.31: - resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==, tarball: https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz} - - scroll-into-view-if-needed@3.1.0: - resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==, tarball: https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz} - - search-insights@2.17.2: - resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==, tarball: https://registry.npmmirror.com/search-insights/-/search-insights-2.17.2.tgz} - - selderee@0.11.0: - resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==, tarball: https://registry.npmmirror.com/selderee/-/selderee-0.11.0.tgz} - - select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==, tarball: https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz} - - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==, tarball: https://registry.npmmirror.com/selfsigned/-/selfsigned-2.4.1.tgz} - engines: {node: '>=10'} - - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==, tarball: https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz} - - semver-diff@2.1.0: - resolution: {integrity: sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==, tarball: https://registry.npmmirror.com/semver-diff/-/semver-diff-2.1.0.tgz} - engines: {node: '>=0.10.0'} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==, tarball: https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, tarball: https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz} - hasBin: true - - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==, tarball: https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz} - engines: {node: '>=10'} - hasBin: true - - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==, tarball: https://registry.npmmirror.com/send/-/send-0.19.0.tgz} - engines: {node: '>= 0.8.0'} - - serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==, tarball: https://registry.npmmirror.com/serialize-error/-/serialize-error-7.0.1.tgz} - engines: {node: '>=10'} - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==, tarball: https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz} - - serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==, tarball: https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz} - engines: {node: '>= 0.8.0'} - - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==, tarball: https://registry.npmmirror.com/serve-static/-/serve-static-1.16.2.tgz} - engines: {node: '>= 0.8.0'} - - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, tarball: https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, tarball: https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, tarball: https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz} - engines: {node: '>= 0.4'} - - set-harmonic-interval@1.0.1: - resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==, tarball: https://registry.npmmirror.com/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz} - engines: {node: '>=6.9'} - - set-value@2.0.1: - resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==, tarball: https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz} - engines: {node: '>=0.10.0'} - - setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==, tarball: https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz} - - setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==, tarball: https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, tarball: https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz} - - sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==, tarball: https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz} - hasBin: true - - shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==, tarball: https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz} - engines: {node: '>=8'} - - shallowequal@1.1.0: - resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==, tarball: https://registry.npmmirror.com/shallowequal/-/shallowequal-1.1.0.tgz} - - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz} - engines: {node: '>=0.10.0'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz} - engines: {node: '>=8'} - - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, tarball: https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, tarball: https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz} - engines: {node: '>=8'} - - shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==, tarball: https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz} - - shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==, tarball: https://registry.npmmirror.com/shelljs/-/shelljs-0.8.5.tgz} - engines: {node: '>=4'} - hasBin: true - - shellwords@0.1.1: - resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==, tarball: https://registry.npmmirror.com/shellwords/-/shellwords-0.1.1.tgz} - - shortid@2.2.16: - resolution: {integrity: sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==, tarball: https://registry.npmmirror.com/shortid/-/shortid-2.2.16.tgz} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==, tarball: https://registry.npmmirror.com/side-channel/-/side-channel-1.0.6.tgz} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, tarball: https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, tarball: https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz} - engines: {node: '>=14'} - - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==, tarball: https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz} - - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==, tarball: https://registry.npmmirror.com/sirv/-/sirv-2.0.4.tgz} - engines: {node: '>= 10'} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, tarball: https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz} - - sitemap@7.1.2: - resolution: {integrity: sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==, tarball: https://registry.npmmirror.com/sitemap/-/sitemap-7.1.2.tgz} - engines: {node: '>=12.0.0', npm: '>=5.6.0'} - hasBin: true - - size-sensor@1.0.2: - resolution: {integrity: sha512-2NCmWxY7A9pYKGXNBfteo4hy14gWu47rg5692peVMst6lQLPKrVjhY+UTEsPI5ceFRJSl3gVgMYaUi/hKuaiKw==, tarball: https://registry.npmmirror.com/size-sensor/-/size-sensor-1.0.2.tgz} - - slash@2.0.0: - resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==, tarball: https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz} - engines: {node: '>=6'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, tarball: https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz} - engines: {node: '>=8'} - - slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==, tarball: https://registry.npmmirror.com/slash/-/slash-4.0.0.tgz} - engines: {node: '>=12'} - - slice-ansi@0.0.4: - resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-0.0.4.tgz} - engines: {node: '>=0.10.0'} - - slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz} - engines: {node: '>=10'} - - slick-carousel@1.8.1: - resolution: {integrity: sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==, tarball: https://registry.npmmirror.com/slick-carousel/-/slick-carousel-1.8.1.tgz} - peerDependencies: - jquery: '>=1.8.0' - - smart-buffer@1.1.15: - resolution: {integrity: sha512-1+8bxygjTsNfvQe0/0pNBesTOlSHtOeG6b6LYbvsZCCHDKYZ40zcQo6YTnZBWrBSLWOCbrHljLdEmGMYebu7aQ==, tarball: https://registry.npmmirror.com/smart-buffer/-/smart-buffer-1.1.15.tgz} - engines: {node: '>= 0.10.15', npm: '>= 1.3.5'} - - snapdragon-node@2.1.1: - resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==, tarball: https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz} - engines: {node: '>=0.10.0'} - - snapdragon-util@3.0.1: - resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==, tarball: https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz} - engines: {node: '>=0.10.0'} - - snapdragon@0.8.2: - resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==, tarball: https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz} - engines: {node: '>=0.10.0'} - - sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==, tarball: https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz} - - socks-proxy-agent@3.0.1: - resolution: {integrity: sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==, tarball: https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz} - - socks@1.1.10: - resolution: {integrity: sha512-ArX4vGPULWjKDKgUnW8YzfI2uXW7kzgkJuB0GnFBA/PfT3exrrOk+7Wk2oeb894Qf20u1PWv9LEgrO0Z82qAzA==, tarball: https://registry.npmmirror.com/socks/-/socks-1.1.10.tgz} - engines: {node: '>= 0.10.0', npm: '>= 1.3.5'} - deprecated: If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0 - - sonic-boom@2.8.0: - resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==, tarball: https://registry.npmmirror.com/sonic-boom/-/sonic-boom-2.8.0.tgz} - - sort-keys@1.1.2: - resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==, tarball: https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz} - engines: {node: '>=0.10.0'} - - sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==, tarball: https://registry.npmmirror.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz} - - sort-package-json@1.57.0: - resolution: {integrity: sha512-FYsjYn2dHTRb41wqnv+uEqCUvBpK3jZcTp9rbz2qDTmel7Pmdtf+i2rLaaPMRZeSVM60V3Se31GyWFpmKs4Q5Q==, tarball: https://registry.npmmirror.com/sort-package-json/-/sort-package-json-1.57.0.tgz} - hasBin: true - - sort-package-json@2.10.1: - resolution: {integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==, tarball: https://registry.npmmirror.com/sort-package-json/-/sort-package-json-2.10.1.tgz} - hasBin: true - - sort-package-json@2.4.1: - resolution: {integrity: sha512-Nd3rgLBJcZ4iw7tpuOhwBupG6SvUDU0Fy1cZGAMorA2JmDUb+29Dg5phJK9gapa2Ak9d15w/RuMl/viwX+nKwQ==, tarball: https://registry.npmmirror.com/sort-package-json/-/sort-package-json-2.4.1.tgz} - hasBin: true - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz} - engines: {node: '>=0.10.0'} - - source-map-resolve@0.5.3: - resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==, tarball: https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated - - source-map-resolve@0.6.0: - resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==, tarball: https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated - - source-map-support@0.3.3: - resolution: {integrity: sha512-9O4+y9n64RewmFoKUZ/5Tx9IHIcXM6Q+RTSw6ehnqybUz4a7iwR3Eaw80uLtqqQ5D0C+5H03D4KKGo9PdP33Gg==, tarball: https://registry.npmmirror.com/source-map-support/-/source-map-support-0.3.3.tgz} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, tarball: https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz} - - source-map-url@0.4.1: - resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==, tarball: https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz} - deprecated: See https://github.com/lydell/source-map-url#deprecated - - source-map@0.1.32: - resolution: {integrity: sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.1.32.tgz} - engines: {node: '>=0.8.0'} - - source-map@0.5.6: - resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.6.tgz} - engines: {node: '>=0.10.0'} - - source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz} - engines: {node: '>=0.10.0'} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz} - engines: {node: '>=0.10.0'} - - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz} - engines: {node: '>= 8'} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==, tarball: https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz} - - spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==, tarball: https://registry.npmmirror.com/spawndamnit/-/spawndamnit-2.0.0.tgz} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==, tarball: https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==, tarball: https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, tarball: https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz} - - spdx-license-ids@3.0.20: - resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==, tarball: https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz} - - spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==, tarball: https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz} - - spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==, tarball: https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz} - engines: {node: '>=6.0.0'} - - specificity@0.4.1: - resolution: {integrity: sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==, tarball: https://registry.npmmirror.com/specificity/-/specificity-0.4.1.tgz} - hasBin: true - - split-on-first@1.1.0: - resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==, tarball: https://registry.npmmirror.com/split-on-first/-/split-on-first-1.1.0.tgz} - engines: {node: '>=6'} - - split-string@3.1.0: - resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==, tarball: https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz} - engines: {node: '>=0.10.0'} - - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==, tarball: https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz} - engines: {node: '>= 10.x'} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, tarball: https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz} - - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==, tarball: https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.1.3.tgz} - - sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==, tarball: https://registry.npmmirror.com/sshpk/-/sshpk-1.18.0.tgz} - engines: {node: '>=0.10.0'} - hasBin: true - - ssri@4.1.6: - resolution: {integrity: sha512-WUbCdgSAMQjTFZRWvSPpauryvREEA+Krn19rx67UlJEJx/M192ZHxMmJXjZ4tkdFm+Sb0SXGlENeQVlA5wY7kA==, tarball: https://registry.npmmirror.com/ssri/-/ssri-4.1.6.tgz} - - ssri@5.3.0: - resolution: {integrity: sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==, tarball: https://registry.npmmirror.com/ssri/-/ssri-5.3.0.tgz} - - stable@0.1.8: - resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==, tarball: https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - - stack-generator@2.0.10: - resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==, tarball: https://registry.npmmirror.com/stack-generator/-/stack-generator-2.0.10.tgz} - - stack-utils@1.0.5: - resolution: {integrity: sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==, tarball: https://registry.npmmirror.com/stack-utils/-/stack-utils-1.0.5.tgz} - engines: {node: '>=8'} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==, tarball: https://registry.npmmirror.com/stack-utils/-/stack-utils-2.0.6.tgz} - engines: {node: '>=10'} - - stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==, tarball: https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz} - - stacktrace-gps@3.1.2: - resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==, tarball: https://registry.npmmirror.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz} - - stacktrace-js@2.0.2: - resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==, tarball: https://registry.npmmirror.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz} - - state-local@1.0.7: - resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==, tarball: https://registry.npmmirror.com/state-local/-/state-local-1.0.7.tgz} - - static-extend@0.1.2: - resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==, tarball: https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz} - engines: {node: '>=0.10.0'} - - statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==, tarball: https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz} - engines: {node: '>= 0.6'} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==, tarball: https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz} - engines: {node: '>= 0.8'} - - stealthy-require@1.1.1: - resolution: {integrity: sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==, tarball: https://registry.npmmirror.com/stealthy-require/-/stealthy-require-1.1.1.tgz} - engines: {node: '>=0.10.0'} - - stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==, tarball: https://registry.npmmirror.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz} - engines: {node: '>= 0.4'} - - stream-browserify@2.0.2: - resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==, tarball: https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz} - - stream-each@1.2.3: - resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==, tarball: https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz} - - stream-http@2.8.3: - resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==, tarball: https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz} - - stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==, tarball: https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.3.tgz} - - strict-uri-encode@1.1.0: - resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==, tarball: https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz} - engines: {node: '>=0.10.0'} - - strict-uri-encode@2.0.0: - resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==, tarball: https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz} - engines: {node: '>=4'} - - string-convert@0.2.1: - resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==, tarball: https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz} - - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==, tarball: https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz} - engines: {node: '>=10'} - - string-width@1.0.2: - resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==, tarball: https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz} - engines: {node: '>=0.10.0'} - - string-width@2.1.1: - resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==, tarball: https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz} - engines: {node: '>=4'} - - string-width@3.1.0: - resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==, tarball: https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz} - engines: {node: '>=6'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, tarball: https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, tarball: https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz} - engines: {node: '>=12'} - - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==, tarball: https://registry.npmmirror.com/string-width/-/string-width-7.2.0.tgz} - engines: {node: '>=18'} - - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==, tarball: https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz} - engines: {node: '>= 0.4'} - - string.prototype.padend@3.1.6: - resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==, tarball: https://registry.npmmirror.com/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==, tarball: https://registry.npmmirror.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz} - - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==, tarball: https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==, tarball: https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, tarball: https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz} - engines: {node: '>= 0.4'} - - string_decoder-okam@1.3.0: - resolution: {integrity: sha512-N5lJgLJ02sIs9xNyqPgIywlGaLUW6s5cYRpnmM3gbfhGA3sggW0+E2go26D7oZgEH7jHpXDe+ArDrBXeCaP9QA==, tarball: https://registry.npmmirror.com/string_decoder-okam/-/string_decoder-okam-1.3.0.tgz} - - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, tarball: https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, tarball: https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz} - - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==, tarball: https://registry.npmmirror.com/stringify-entities/-/stringify-entities-4.0.4.tgz} - - strip-ansi@3.0.1: - resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz} - engines: {node: '>=0.10.0'} - - strip-ansi@4.0.0: - resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz} - engines: {node: '>=4'} - - strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz} - engines: {node: '>=6'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz} - engines: {node: '>=8'} - - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz} - engines: {node: '>=12'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, tarball: https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz} - engines: {node: '>=4'} - - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, tarball: https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz} - engines: {node: '>=8'} - - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==, tarball: https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, tarball: https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz} - engines: {node: '>=6'} - - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, tarball: https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz} - engines: {node: '>=12'} - - strip-indent@2.0.0: - resolution: {integrity: sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==, tarball: https://registry.npmmirror.com/strip-indent/-/strip-indent-2.0.0.tgz} - engines: {node: '>=4'} - - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==, tarball: https://registry.npmmirror.com/strip-indent/-/strip-indent-3.0.0.tgz} - engines: {node: '>=8'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==, tarball: https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz} - engines: {node: '>=0.10.0'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, tarball: https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz} - engines: {node: '>=8'} - - strip-outer@1.0.1: - resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==, tarball: https://registry.npmmirror.com/strip-outer/-/strip-outer-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - strip-url-auth@1.0.1: - resolution: {integrity: sha512-++41PnXftlL3pvI6lpvhSEO+89g1kIJC4MYB5E6yH+WHa5InIqz51yGd1YOGd7VNSNdoEOfzTMqbAM/2PbgaHQ==, tarball: https://registry.npmmirror.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - stubborn-fs@1.2.5: - resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==, tarball: https://registry.npmmirror.com/stubborn-fs/-/stubborn-fs-1.2.5.tgz} - - style-loader@3.3.4: - resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==, tarball: https://registry.npmmirror.com/style-loader/-/style-loader-3.3.4.tgz} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - - style-search@0.1.0: - resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==, tarball: https://registry.npmmirror.com/style-search/-/style-search-0.1.0.tgz} - - style-to-object@0.4.4: - resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==, tarball: https://registry.npmmirror.com/style-to-object/-/style-to-object-0.4.4.tgz} - - style-to-object@1.0.8: - resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==, tarball: https://registry.npmmirror.com/style-to-object/-/style-to-object-1.0.8.tgz} - - styled-components@6.1.13: - resolution: {integrity: sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==, tarball: https://registry.npmmirror.com/styled-components/-/styled-components-6.1.13.tgz} - engines: {node: '>= 16'} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - stylelint-config-css-modules@2.3.0: - resolution: {integrity: sha512-nSxwaJMv9wBrTAi+O4qXubyi1AR9eB36tJpY0uaFhKgEc3fwWGUzUK1Edl8AQHAoU7wmUeKtsuYjblyRP/V7rw==, tarball: https://registry.npmmirror.com/stylelint-config-css-modules/-/stylelint-config-css-modules-2.3.0.tgz} - peerDependencies: - stylelint: 11.x - 14.x - - stylelint-config-prettier@8.0.2: - resolution: {integrity: sha512-TN1l93iVTXpF9NJstlvP7nOu9zY2k+mN0NSFQ/VEGz15ZIP9ohdDZTtCWHs5LjctAhSAzaILULGbgiM0ItId3A==, tarball: https://registry.npmmirror.com/stylelint-config-prettier/-/stylelint-config-prettier-8.0.2.tgz} - engines: {node: '>= 10', npm: '>= 5'} - hasBin: true - peerDependencies: - stylelint: '>=11.0.0' - - stylelint-config-recommended@3.0.0: - resolution: {integrity: sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==, tarball: https://registry.npmmirror.com/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz} - peerDependencies: - stylelint: '>=10.1.0' - - stylelint-config-recommended@7.0.0: - resolution: {integrity: sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==, tarball: https://registry.npmmirror.com/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz} - peerDependencies: - stylelint: ^14.4.0 - - stylelint-config-standard@20.0.0: - resolution: {integrity: sha512-IB2iFdzOTA/zS4jSVav6z+wGtin08qfj+YyExHB3LF9lnouQht//YyB0KZq9gGz5HNPkddHOzcY8HsUey6ZUlA==, tarball: https://registry.npmmirror.com/stylelint-config-standard/-/stylelint-config-standard-20.0.0.tgz} - peerDependencies: - stylelint: '>=10.1.0' - - stylelint-config-standard@25.0.0: - resolution: {integrity: sha512-21HnP3VSpaT1wFjFvv9VjvOGDtAviv47uTp3uFmzcN+3Lt+RYRv6oAplLaV51Kf792JSxJ6svCJh/G18E9VnCA==, tarball: https://registry.npmmirror.com/stylelint-config-standard/-/stylelint-config-standard-25.0.0.tgz} - peerDependencies: - stylelint: ^14.4.0 - - stylelint-declaration-block-no-ignored-properties@2.8.0: - resolution: {integrity: sha512-Ws8Cav7Y+SPN0JsV407LrnNXWOrqGjxShf+37GBtnU/C58Syve9c0+I/xpLcFOosST3ternykn3Lp77f3ITnFw==, tarball: https://registry.npmmirror.com/stylelint-declaration-block-no-ignored-properties/-/stylelint-declaration-block-no-ignored-properties-2.8.0.tgz} - engines: {node: '>=6'} - peerDependencies: - stylelint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - - stylelint@13.13.1: - resolution: {integrity: sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==, tarball: https://registry.npmmirror.com/stylelint/-/stylelint-13.13.1.tgz} - engines: {node: '>=10.13.0'} - hasBin: true - - stylis@4.3.2: - resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==, tarball: https://registry.npmmirror.com/stylis/-/stylis-4.3.2.tgz} - - stylis@4.3.4: - resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==, tarball: https://registry.npmmirror.com/stylis/-/stylis-4.3.4.tgz} - - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==, tarball: https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - sugarss@2.0.0: - resolution: {integrity: sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==, tarball: https://registry.npmmirror.com/sugarss/-/sugarss-2.0.0.tgz} - - sumchecker@3.0.1: - resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==, tarball: https://registry.npmmirror.com/sumchecker/-/sumchecker-3.0.1.tgz} - engines: {node: '>= 8.0'} - - supports-color@2.0.0: - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz} - engines: {node: '>=0.8.0'} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz} - engines: {node: '>=4'} - - supports-color@6.1.0: - resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz} - engines: {node: '>=6'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz} - engines: {node: '>=10'} - - supports-color@9.4.0: - resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-9.4.0.tgz} - engines: {node: '>=12'} - - supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==, tarball: https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz} - engines: {node: '>= 0.4'} - - svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==, tarball: https://registry.npmmirror.com/svg-parser/-/svg-parser-2.0.4.tgz} - - svg-path-parser@1.1.0: - resolution: {integrity: sha512-jGCUqcQyXpfe38R7RFfhrMyfXcBmpMNJI/B+4CE9/Unkh98UporAc461GTthv+TVDuZXsBx7/WiwJb1Oh4tt4A==, tarball: https://registry.npmmirror.com/svg-path-parser/-/svg-path-parser-1.1.0.tgz} - - svg-pathdata@5.0.5: - resolution: {integrity: sha512-TAAvLNSE3fEhyl/Da19JWfMAdhSXTYeviXsLSoDT1UM76ADj5ndwAPX1FKQEgB/gFMPavOy6tOqfalXKUiXrow==, tarball: https://registry.npmmirror.com/svg-pathdata/-/svg-pathdata-5.0.5.tgz} - engines: {node: '>=6.9.5'} - - svg-tags@1.0.0: - resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==, tarball: https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz} - - svgo-browser@1.3.8: - resolution: {integrity: sha512-yOgDNIcewFZN3+jXdWeh/rQzbWJjCq1dTHphLz2r4T4AfTm+nqCxZ5B89v9bjQbFKA/s/k7TUc7J90+pP2HTyw==, tarball: https://registry.npmmirror.com/svgo-browser/-/svgo-browser-1.3.8.tgz} - engines: {node: '>=4.0.0'} - hasBin: true - - svgo@2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==, tarball: https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz} - engines: {node: '>=10.13.0'} - hasBin: true - - svgson@4.1.0: - resolution: {integrity: sha512-DodISxHtdLKUghDYA+PGK4Qq350+CbBAkdvGLkBFSmWd9WKSg4dijgjB1IiRPTmsUCd+a7KYe+ILHtklYgQyzQ==, tarball: https://registry.npmmirror.com/svgson/-/svgson-4.1.0.tgz} - - symbol-observable@1.2.0: - resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==, tarball: https://registry.npmmirror.com/symbol-observable/-/symbol-observable-1.2.0.tgz} - engines: {node: '>=0.10.0'} - - symbol-observable@4.0.0: - resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==, tarball: https://registry.npmmirror.com/symbol-observable/-/symbol-observable-4.0.0.tgz} - engines: {node: '>=0.10'} - - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==, tarball: https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz} - - synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==, tarball: https://registry.npmmirror.com/synckit/-/synckit-0.8.5.tgz} - engines: {node: ^14.18.0 || >=16.0.0} - - synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==, tarball: https://registry.npmmirror.com/synckit/-/synckit-0.9.2.tgz} - engines: {node: ^14.18.0 || >=16.0.0} - - systemjs@6.15.1: - resolution: {integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==, tarball: https://registry.npmmirror.com/systemjs/-/systemjs-6.15.1.tgz} - - table@6.8.2: - resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==, tarball: https://registry.npmmirror.com/table/-/table-6.8.2.tgz} - engines: {node: '>=10.0.0'} - - tapable@1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==, tarball: https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz} - engines: {node: '>=6'} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, tarball: https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz} - engines: {node: '>=6'} - - tape@4.17.0: - resolution: {integrity: sha512-KCuXjYxCZ3ru40dmND+oCLsXyuA8hoseu2SS404Px5ouyS0A99v8X/mdiLqsR5MTAyamMBN7PRwt2Dv3+xGIxw==, tarball: https://registry.npmmirror.com/tape/-/tape-4.17.0.tgz} - hasBin: true - - tar-fs@1.16.3: - resolution: {integrity: sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==, tarball: https://registry.npmmirror.com/tar-fs/-/tar-fs-1.16.3.tgz} - - tar-stream@1.6.2: - resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==, tarball: https://registry.npmmirror.com/tar-stream/-/tar-stream-1.6.2.tgz} - engines: {node: '>= 0.8.0'} - - temp-dir@3.0.0: - resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==, tarball: https://registry.npmmirror.com/temp-dir/-/temp-dir-3.0.0.tgz} - engines: {node: '>=14.16'} - - tempfile@5.0.0: - resolution: {integrity: sha512-bX655WZI/F7EoTDw9JvQURqAXiPHi8o8+yFxPF2lWYyz1aHnmMRuXWqL6YB6GmeO0o4DIYWHLgGNi/X64T+X4Q==, tarball: https://registry.npmmirror.com/tempfile/-/tempfile-5.0.0.tgz} - engines: {node: '>=14.18'} - - term-size@1.2.0: - resolution: {integrity: sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==, tarball: https://registry.npmmirror.com/term-size/-/term-size-1.2.0.tgz} - engines: {node: '>=4'} - - term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==, tarball: https://registry.npmmirror.com/term-size/-/term-size-2.2.1.tgz} - engines: {node: '>=8'} - - terminal-link@2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==, tarball: https://registry.npmmirror.com/terminal-link/-/terminal-link-2.1.1.tgz} - engines: {node: '>=8'} - - terminal-link@3.0.0: - resolution: {integrity: sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==, tarball: https://registry.npmmirror.com/terminal-link/-/terminal-link-3.0.0.tgz} - engines: {node: '>=12'} - - terser-webpack-plugin@5.3.10: - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==, tarball: https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - - terser@5.36.0: - resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==, tarball: https://registry.npmmirror.com/terser/-/terser-5.36.0.tgz} - engines: {node: '>=10'} - hasBin: true - - test-exclude@5.2.3: - resolution: {integrity: sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==, tarball: https://registry.npmmirror.com/test-exclude/-/test-exclude-5.2.3.tgz} - engines: {node: '>=6'} - - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==, tarball: https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz} - engines: {node: '>=8'} - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, tarball: https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz} - - textextensions@2.6.0: - resolution: {integrity: sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==, tarball: https://registry.npmmirror.com/textextensions/-/textextensions-2.6.0.tgz} - engines: {node: '>=0.8'} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, tarball: https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, tarball: https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz} - - thingies@1.21.0: - resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==, tarball: https://registry.npmmirror.com/thingies/-/thingies-1.21.0.tgz} - engines: {node: '>=10.18'} - peerDependencies: - tslib: 2.6.1 - - thread-stream@0.15.2: - resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==, tarball: https://registry.npmmirror.com/thread-stream/-/thread-stream-0.15.2.tgz} - - throat@4.1.0: - resolution: {integrity: sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==, tarball: https://registry.npmmirror.com/throat/-/throat-4.1.0.tgz} - - throat@5.0.0: - resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==, tarball: https://registry.npmmirror.com/throat/-/throat-5.0.0.tgz} - - throttle-debounce@3.0.1: - resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==, tarball: https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz} - engines: {node: '>=10'} - - throttle-debounce@5.0.2: - resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==, tarball: https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz} - engines: {node: '>=12.22'} - - through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==, tarball: https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz} - - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, tarball: https://registry.npmmirror.com/through/-/through-2.3.8.tgz} - - thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==, tarball: https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz} - - timed-out@4.0.1: - resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==, tarball: https://registry.npmmirror.com/timed-out/-/timed-out-4.0.1.tgz} - engines: {node: '>=0.10.0'} - - timers-browserify@2.0.12: - resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==, tarball: https://registry.npmmirror.com/timers-browserify/-/timers-browserify-2.0.12.tgz} - engines: {node: '>=0.6.0'} - - titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==, tarball: https://registry.npmmirror.com/titleize/-/titleize-3.0.0.tgz} - engines: {node: '>=12'} - - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, tarball: https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz} - engines: {node: '>=0.6.0'} - - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==, tarball: https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz} - - to-arraybuffer@1.0.1: - resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==, tarball: https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz} - - to-buffer@1.1.1: - resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==, tarball: https://registry.npmmirror.com/to-buffer/-/to-buffer-1.1.1.tgz} - - to-factory@1.0.0: - resolution: {integrity: sha512-JVYrY42wMG7ddf+wBUQR/uHGbjUHZbLisJ8N62AMm0iTZ0p8YTcZLzdtomU0+H+wa99VbkyvQGB3zxB7NDzgIQ==, tarball: https://registry.npmmirror.com/to-factory/-/to-factory-1.0.0.tgz} - - to-fast-properties@1.0.3: - resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz} - engines: {node: '>=0.10.0'} - - to-object-path@0.3.0: - resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==, tarball: https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz} - engines: {node: '>=0.10.0'} - - to-readable-stream@1.0.0: - resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==, tarball: https://registry.npmmirror.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz} - engines: {node: '>=6'} - - to-regex-range@2.1.1: - resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz} - engines: {node: '>=0.10.0'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz} - engines: {node: '>=8.0'} - - to-regex@3.0.2: - resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==, tarball: https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz} - engines: {node: '>=0.10.0'} - - to-vfile@7.2.4: - resolution: {integrity: sha512-2eQ+rJ2qGbyw3senPI0qjuM7aut8IYXK6AEoOWb+fJx/mQYzviTckm1wDjq91QYHAPBTYzmdJXxMFA6Mk14mdw==, tarball: https://registry.npmmirror.com/to-vfile/-/to-vfile-7.2.4.tgz} - - toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==, tarball: https://registry.npmmirror.com/toggle-selection/-/toggle-selection-1.0.6.tgz} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, tarball: https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz} - engines: {node: '>=0.6'} - - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, tarball: https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz} - engines: {node: '>=6'} - - tough-cookie@2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==, tarball: https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz} - engines: {node: '>=0.8'} - - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==, tarball: https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.1.4.tgz} - engines: {node: '>=6'} - - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==, tarball: https://registry.npmmirror.com/tr46/-/tr46-1.0.1.tgz} - - tr46@2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==, tarball: https://registry.npmmirror.com/tr46/-/tr46-2.1.0.tgz} - engines: {node: '>=8'} - - transformation-matrix@2.16.1: - resolution: {integrity: sha512-tdtC3wxVEuzU7X/ydL131Q3JU5cPMEn37oqVLITjRDSDsnSHVFzW2JiCLfZLIQEgWzZHdSy3J6bZzvKEN24jGA==, tarball: https://registry.npmmirror.com/transformation-matrix/-/transformation-matrix-2.16.1.tgz} - - tree-dump@1.0.2: - resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==, tarball: https://registry.npmmirror.com/tree-dump/-/tree-dump-1.0.2.tgz} - engines: {node: '>=10.0'} - peerDependencies: - tslib: 2.6.1 - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==, tarball: https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz} - - trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==, tarball: https://registry.npmmirror.com/trim-newlines/-/trim-newlines-3.0.1.tgz} - engines: {node: '>=8'} - - trim-repeated@1.0.0: - resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==, tarball: https://registry.npmmirror.com/trim-repeated/-/trim-repeated-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - trim-right@1.0.1: - resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==, tarball: https://registry.npmmirror.com/trim-right/-/trim-right-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - trough@1.0.5: - resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==, tarball: https://registry.npmmirror.com/trough/-/trough-1.0.5.tgz} - - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==, tarball: https://registry.npmmirror.com/trough/-/trough-2.2.0.tgz} - - ts-easing@0.2.0: - resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==, tarball: https://registry.npmmirror.com/ts-easing/-/ts-easing-0.2.0.tgz} - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==, tarball: https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz} - - ts-loader@9.5.1: - resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==, tarball: https://registry.npmmirror.com/ts-loader/-/ts-loader-9.5.1.tgz} - engines: {node: '>=12.0.0'} - peerDependencies: - typescript: '*' - webpack: ^5.0.0 - - ts-toolbelt@9.6.0: - resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==, tarball: https://registry.npmmirror.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz} - - tsconfig-paths-webpack-plugin@4.1.0: - resolution: {integrity: sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==, tarball: https://registry.npmmirror.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz} - engines: {node: '>=10.13.0'} - - tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==, tarball: https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz} - engines: {node: '>=6'} - - tslib@2.6.1: - resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.6.1.tgz} - - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==, tarball: https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - - tsx@3.12.2: - resolution: {integrity: sha512-ykAEkoBg30RXxeOMVeZwar+JH632dZn9EUJVyJwhfag62k6UO/dIyJEV58YuLF6e5BTdV/qmbQrpkWqjq9cUnQ==, tarball: https://registry.npmmirror.com/tsx/-/tsx-3.12.2.tgz} - hasBin: true - - tty-browserify@0.0.0: - resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==, tarball: https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz} - - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==, tarball: https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz} - - tunnel@0.0.6: - resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==, tarball: https://registry.npmmirror.com/tunnel/-/tunnel-0.0.6.tgz} - engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - - tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==, tarball: https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz} - - type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==, tarball: https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz} - engines: {node: '>= 0.8.0'} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, tarball: https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz} - engines: {node: '>= 0.8.0'} - - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, tarball: https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz} - engines: {node: '>=4'} - - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.13.1.tgz} - engines: {node: '>=10'} - - type-fest@0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.18.1.tgz} - engines: {node: '>=10'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz} - engines: {node: '>=10'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz} - engines: {node: '>=10'} - - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz} - engines: {node: '>=8'} - - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz} - engines: {node: '>=8'} - - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-1.4.0.tgz} - engines: {node: '>=10'} - - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-2.19.0.tgz} - engines: {node: '>=12.20'} - - type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-3.13.1.tgz} - engines: {node: '>=14.16'} - - type-fest@4.26.1: - resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-4.26.1.tgz} - engines: {node: '>=16'} - - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==, tarball: https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz} - engines: {node: '>= 0.6'} - - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==, tarball: https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==, tarball: https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==, tarball: https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==, tarball: https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.6.tgz} - engines: {node: '>= 0.4'} - - typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==, tarball: https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz} - - typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==, tarball: https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz} - - typedoc-default-themes@0.10.2: - resolution: {integrity: sha512-zo09yRj+xwLFE3hyhJeVHWRSPuKEIAsFK5r2u47KL/HBKqpwdUSanoaz5L34IKiSATFrjG5ywmIu98hPVMfxZg==, tarball: https://registry.npmmirror.com/typedoc-default-themes/-/typedoc-default-themes-0.10.2.tgz} - engines: {node: '>= 8'} - - typedoc-plugin-markdown@2.4.2: - resolution: {integrity: sha512-BBH+9/Uq5XbsqfzCDl8Jq4iaLXRMXRuAHZRFarAZX7df8+F3vUjDx/WHWoWqbZ/XUFzduLC2Iuy2qwsJX8SQ7A==, tarball: https://registry.npmmirror.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.4.2.tgz} - engines: {node: '>= 8.0.0'} - peerDependencies: - typedoc: '>=0.17.0' - - typedoc@0.17.8: - resolution: {integrity: sha512-/OyrHCJ8jtzu+QZ+771YaxQ9s4g5Z3XsQE3Ma7q+BL392xxBn4UMvvCdVnqKC2T/dz03/VXSLVKOP3lHmDdc/w==, tarball: https://registry.npmmirror.com/typedoc/-/typedoc-0.17.8.tgz} - engines: {node: '>= 8.0.0'} - hasBin: true - peerDependencies: - typescript: '>=3.8.3' - - types-ramda@0.29.10: - resolution: {integrity: sha512-5PJiW/eiTPyXXBYGZOYGezMl6qj7keBiZheRwfjJZY26QPHsNrjfJnz0mru6oeqqoTHOni893Jfd6zyUXfQRWg==, tarball: https://registry.npmmirror.com/types-ramda/-/types-ramda-0.29.10.tgz} - - typescript@3.9.10: - resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==, tarball: https://registry.npmmirror.com/typescript/-/typescript-3.9.10.tgz} - engines: {node: '>=4.2.0'} - hasBin: true - - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==, tarball: https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz} - engines: {node: '>=4.2.0'} - hasBin: true - - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==, tarball: https://registry.npmmirror.com/typescript/-/typescript-5.6.3.tgz} - engines: {node: '>=14.17'} - hasBin: true - - uglify-js@2.8.29: - resolution: {integrity: sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-2.8.29.tgz} - engines: {node: '>=0.8.0'} - hasBin: true - - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.19.3.tgz} - engines: {node: '>=0.8.0'} - hasBin: true - - uglify-to-browserify@1.0.2: - resolution: {integrity: sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==, tarball: https://registry.npmmirror.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz} - - umi@4.3.31: - resolution: {integrity: sha512-rrMLo3yZR2MCGoBwUwf/snf1OS43U/9Df3e3Ojru58iPuMB/U/F62hkyGVU2yew5+FsjjT0lYUq/0LKQttGZgA==, tarball: https://registry.npmmirror.com/umi/-/umi-4.3.31.tgz} - engines: {node: '>=14'} - hasBin: true - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, tarball: https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz} - - undici@6.20.1: - resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==, tarball: https://registry.npmmirror.com/undici/-/undici-6.20.1.tgz} - engines: {node: '>=18.17'} - - unfetch@5.0.0: - resolution: {integrity: sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==, tarball: https://registry.npmmirror.com/unfetch/-/unfetch-5.0.0.tgz} - - unicode-canonical-property-names-ecmascript@2.0.1: - resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==, tarball: https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz} - engines: {node: '>=4'} - - unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, tarball: https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz} - engines: {node: '>=4'} - - unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==, tarball: https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz} - engines: {node: '>=4'} - - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==, tarball: https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz} - engines: {node: '>=4'} - - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==, tarball: https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz} - engines: {node: '>=18'} - - unified@10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==, tarball: https://registry.npmmirror.com/unified/-/unified-10.1.2.tgz} - - unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==, tarball: https://registry.npmmirror.com/unified/-/unified-11.0.5.tgz} - - unified@9.2.2: - resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==, tarball: https://registry.npmmirror.com/unified/-/unified-9.2.2.tgz} - - union-value@1.0.1: - resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==, tarball: https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - unique-filename@1.1.1: - resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==, tarball: https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz} - - unique-slug@2.0.2: - resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==, tarball: https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz} - - unique-string@1.0.0: - resolution: {integrity: sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==, tarball: https://registry.npmmirror.com/unique-string/-/unique-string-1.0.0.tgz} - engines: {node: '>=4'} - - unist-util-filter@4.0.1: - resolution: {integrity: sha512-RynicUM/vbOSTSiUK+BnaK9XMfmQUh6gyi7L6taNgc7FIf84GukXVV3ucGzEN/PhUUkdP5hb1MmXc+3cvPUm5Q==, tarball: https://registry.npmmirror.com/unist-util-filter/-/unist-util-filter-4.0.1.tgz} - - unist-util-find-all-after@3.0.2: - resolution: {integrity: sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==, tarball: https://registry.npmmirror.com/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz} - - unist-util-generated@2.0.1: - resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==, tarball: https://registry.npmmirror.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz} - - unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==, tarball: https://registry.npmmirror.com/unist-util-is/-/unist-util-is-4.1.0.tgz} - - unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==, tarball: https://registry.npmmirror.com/unist-util-is/-/unist-util-is-5.2.1.tgz} - - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==, tarball: https://registry.npmmirror.com/unist-util-is/-/unist-util-is-6.0.0.tgz} - - unist-util-position@4.0.4: - resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==, tarball: https://registry.npmmirror.com/unist-util-position/-/unist-util-position-4.0.4.tgz} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==, tarball: https://registry.npmmirror.com/unist-util-position/-/unist-util-position-5.0.0.tgz} - - unist-util-stringify-position@2.0.3: - resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==, tarball: https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz} - - unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==, tarball: https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==, tarball: https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz} - - unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==, tarball: https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz} - - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==, tarball: https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz} - - unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==, tarball: https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz} - - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==, tarball: https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz} - - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, tarball: https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz} - engines: {node: '>= 4.0.0'} - - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==, tarball: https://registry.npmmirror.com/universalify/-/universalify-0.2.0.tgz} - engines: {node: '>= 4.0.0'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, tarball: https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz} - engines: {node: '>= 10.0.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, tarball: https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz} - engines: {node: '>= 0.8'} - - unquote@1.1.1: - resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==, tarball: https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz} - - unset-value@0.1.2: - resolution: {integrity: sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==, tarball: https://registry.npmmirror.com/unset-value/-/unset-value-0.1.2.tgz} - engines: {node: '>=0.10.0'} - - unset-value@1.0.0: - resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==, tarball: https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==, tarball: https://registry.npmmirror.com/untildify/-/untildify-4.0.0.tgz} - engines: {node: '>=8'} - - unzip-response@2.0.1: - resolution: {integrity: sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==, tarball: https://registry.npmmirror.com/unzip-response/-/unzip-response-2.0.1.tgz} - engines: {node: '>=4'} - - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==, tarball: https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-notifier@2.5.0: - resolution: {integrity: sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==, tarball: https://registry.npmmirror.com/update-notifier/-/update-notifier-2.5.0.tgz} - engines: {node: '>=4'} - - update-notifier@7.3.1: - resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==, tarball: https://registry.npmmirror.com/update-notifier/-/update-notifier-7.3.1.tgz} - engines: {node: '>=18'} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, tarball: https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz} - - uri-parse@1.0.0: - resolution: {integrity: sha512-1bKQJbPelvvdyR2yPrtDfvu/+6E8MI1hWWNd5UKvZOVufwtsb63HSzuCyVwooLmfFvnbSlCCq1fF58Mx+X7GZw==, tarball: https://registry.npmmirror.com/uri-parse/-/uri-parse-1.0.0.tgz} - - urix@0.1.0: - resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==, tarball: https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz} - deprecated: Please see https://github.com/lydell/urix#deprecated - - url-okam@0.11.1: - resolution: {integrity: sha512-AM6OVeZNwKiirK3IwKxHuopgjX1jB0F8srK9OlCXN+wdmTNg6vgnN9xyQ5abhxq8Oj/kTleLU8OCfZ1FaEW37w==, tarball: https://registry.npmmirror.com/url-okam/-/url-okam-0.11.1.tgz} - - url-parse-lax@1.0.0: - resolution: {integrity: sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==, tarball: https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz} - engines: {node: '>=0.10.0'} - - url-parse-lax@3.0.0: - resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==, tarball: https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz} - engines: {node: '>=4'} - - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==, tarball: https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz} - - url@0.11.4: - resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==, tarball: https://registry.npmmirror.com/url/-/url-0.11.4.tgz} - engines: {node: '>= 0.4'} - - use-isomorphic-layout-effect@1.1.2: - resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==, tarball: https://registry.npmmirror.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz} - peerDependencies: - '@types/react': '*' - react: ^18.0.1 - peerDependenciesMeta: - '@types/react': - optional: true - - use-sync-external-store@1.2.0: - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==, tarball: https://registry.npmmirror.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz} - peerDependencies: - react: ^18.0.1 - - use@3.1.1: - resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==, tarball: https://registry.npmmirror.com/use/-/use-3.1.1.tgz} - engines: {node: '>=0.10.0'} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, tarball: https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz} - - util-okam@0.11.1: - resolution: {integrity: sha512-e2bG47F03vYx2MbA6znK6t6dwffnXGsVzh8BLpi0pcQ7dDRQf0zSAQ9IR7M+aoozALNibw8eCY53gEK8bBpSjg==, tarball: https://registry.npmmirror.com/util-okam/-/util-okam-0.11.1.tgz} - - util.promisify@1.0.1: - resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==, tarball: https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.1.tgz} - - util.promisify@1.1.2: - resolution: {integrity: sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA==, tarball: https://registry.npmmirror.com/util.promisify/-/util.promisify-1.1.2.tgz} - - util@0.10.3: - resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==, tarball: https://registry.npmmirror.com/util/-/util-0.10.3.tgz} - - util@0.10.4: - resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==, tarball: https://registry.npmmirror.com/util/-/util-0.10.4.tgz} - - util@0.11.1: - resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==, tarball: https://registry.npmmirror.com/util/-/util-0.11.1.tgz} - - utila@0.4.0: - resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==, tarball: https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz} - - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==, tarball: https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz} - engines: {node: '>= 0.4.0'} - - uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==, tarball: https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, tarball: https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz} - hasBin: true - - uvu@0.5.6: - resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==, tarball: https://registry.npmmirror.com/uvu/-/uvu-0.5.6.tgz} - engines: {node: '>=8'} - hasBin: true - - v8-compile-cache@2.3.0: - resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==, tarball: https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz} - - v8-compile-cache@2.4.0: - resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==, tarball: https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz} - - v8-to-istanbul@7.1.2: - resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==, tarball: https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz} - engines: {node: '>=10.10.0'} - - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, tarball: https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz} - - validate-npm-package-name@3.0.0: - resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==, tarball: https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz} - - validate-npm-package-name@5.0.1: - resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==, tarball: https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - valtio@1.13.2: - resolution: {integrity: sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A==, tarball: https://registry.npmmirror.com/valtio/-/valtio-1.13.2.tgz} - engines: {node: '>=12.20.0'} - peerDependencies: - '@types/react': '>=16.8' - react: ^18.0.1 - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, tarball: https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz} - engines: {node: '>= 0.8'} - - verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==, tarball: https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz} - engines: {'0': node >=0.6.0} - - vfile-location@4.1.0: - resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==, tarball: https://registry.npmmirror.com/vfile-location/-/vfile-location-4.1.0.tgz} - - vfile-location@5.0.3: - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==, tarball: https://registry.npmmirror.com/vfile-location/-/vfile-location-5.0.3.tgz} - - vfile-message@2.0.4: - resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==, tarball: https://registry.npmmirror.com/vfile-message/-/vfile-message-2.0.4.tgz} - - vfile-message@3.1.4: - resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==, tarball: https://registry.npmmirror.com/vfile-message/-/vfile-message-3.1.4.tgz} - - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==, tarball: https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.2.tgz} - - vfile-reporter@7.0.5: - resolution: {integrity: sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==, tarball: https://registry.npmmirror.com/vfile-reporter/-/vfile-reporter-7.0.5.tgz} - - vfile-sort@3.0.1: - resolution: {integrity: sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==, tarball: https://registry.npmmirror.com/vfile-sort/-/vfile-sort-3.0.1.tgz} - - vfile-statistics@2.0.1: - resolution: {integrity: sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==, tarball: https://registry.npmmirror.com/vfile-statistics/-/vfile-statistics-2.0.1.tgz} - - vfile@4.2.1: - resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==, tarball: https://registry.npmmirror.com/vfile/-/vfile-4.2.1.tgz} - - vfile@5.3.7: - resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==, tarball: https://registry.npmmirror.com/vfile/-/vfile-5.3.7.tgz} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==, tarball: https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz} - - video-react@0.16.0: - resolution: {integrity: sha512-138NHPS8bmgqCYVCdbv2GVFhXntemNHWGw9AN8iJSzr3jizXMmWJd2LTBppr4hZJUbyW1A1tPZ3CQXZUaexMVA==, tarball: https://registry.npmmirror.com/video-react/-/video-react-0.16.0.tgz} - peerDependencies: - react: ^18.0.1 - react-dom: ^18.0.1 - - vite@4.5.2: - resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==, tarball: https://registry.npmmirror.com/vite/-/vite-4.5.2.tgz} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vite@5.4.11: - resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==, tarball: https://registry.npmmirror.com/vite/-/vite-5.4.11.tgz} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vm-browserify@1.1.2: - resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==, tarball: https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz} - - w3c-hr-time@1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==, tarball: https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - - w3c-xmlserializer@2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==, tarball: https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz} - engines: {node: '>=10'} - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==, tarball: https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz} - - watchpack@2.4.2: - resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==, tarball: https://registry.npmmirror.com/watchpack/-/watchpack-2.4.2.tgz} - engines: {node: '>=10.13.0'} - - wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==, tarball: https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz} - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, tarball: https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz} - - web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==, tarball: https://registry.npmmirror.com/web-namespaces/-/web-namespaces-2.0.1.tgz} - - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==, tarball: https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz} - engines: {node: '>= 8'} - - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz} - - webidl-conversions@5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz} - engines: {node: '>=8'} - - webidl-conversions@6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz} - engines: {node: '>=10.4'} - - webpack-5-chain@8.0.1: - resolution: {integrity: sha512-Tu1w80WA2Z+X6e7KzGy+cc0A0z+npVJA/fh55q2azMJ030gqz343Kx+yNAstDCeugsepmtDWY2J2IBRW/O+DEA==, tarball: https://registry.npmmirror.com/webpack-5-chain/-/webpack-5-chain-8.0.1.tgz} - engines: {node: '>=10'} - - webpack-bundle-analyzer@4.10.2: - resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==, tarball: https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz} - engines: {node: '>= 10.13.0'} - hasBin: true - - webpack-cli@5.1.4: - resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==, tarball: https://registry.npmmirror.com/webpack-cli/-/webpack-cli-5.1.4.tgz} - engines: {node: '>=14.15.0'} - hasBin: true - peerDependencies: - '@webpack-cli/generators': '*' - webpack: 5.x.x - webpack-bundle-analyzer: '*' - webpack-dev-server: '*' - peerDependenciesMeta: - '@webpack-cli/generators': - optional: true - webpack-bundle-analyzer: - optional: true - webpack-dev-server: - optional: true - - webpack-dev-middleware@7.4.2: - resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==, tarball: https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz} - engines: {node: '>= 18.12.0'} - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - - webpack-dev-server@5.1.0: - resolution: {integrity: sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==, tarball: https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-5.1.0.tgz} - engines: {node: '>= 18.12.0'} - hasBin: true - peerDependencies: - webpack: ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - - webpack-merge@5.10.0: - resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==, tarball: https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.10.0.tgz} - engines: {node: '>=10.0.0'} - - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, tarball: https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz} - engines: {node: '>=10.13.0'} - - webpack@5.96.1: - resolution: {integrity: sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==, tarball: https://registry.npmmirror.com/webpack/-/webpack-5.96.1.tgz} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - - websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==, tarball: https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz} - engines: {node: '>=0.8.0'} - - websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==, tarball: https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz} - engines: {node: '>=0.8.0'} - - whatwg-encoding@1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==, tarball: https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz} - - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==, tarball: https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz} - engines: {node: '>=18'} - - whatwg-fetch@3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==, tarball: https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz} - - whatwg-mimetype@2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==, tarball: https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz} - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==, tarball: https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz} - engines: {node: '>=18'} - - whatwg-url@6.5.0: - resolution: {integrity: sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-6.5.0.tgz} - - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-7.1.0.tgz} - - whatwg-url@8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-8.7.0.tgz} - engines: {node: '>=10'} - - when-exit@2.1.3: - resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==, tarball: https://registry.npmmirror.com/when-exit/-/when-exit-2.1.3.tgz} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, tarball: https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz} - - which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==, tarball: https://registry.npmmirror.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==, tarball: https://registry.npmmirror.com/which-collection/-/which-collection-1.0.2.tgz} - engines: {node: '>= 0.4'} - - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==, tarball: https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz} - - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==, tarball: https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.15.tgz} - engines: {node: '>= 0.4'} - - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, tarball: https://registry.npmmirror.com/which/-/which-1.3.1.tgz} - hasBin: true - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, tarball: https://registry.npmmirror.com/which/-/which-2.0.2.tgz} - engines: {node: '>= 8'} - hasBin: true - - widest-line@2.0.1: - resolution: {integrity: sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==, tarball: https://registry.npmmirror.com/widest-line/-/widest-line-2.0.1.tgz} - engines: {node: '>=4'} - - widest-line@5.0.0: - resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==, tarball: https://registry.npmmirror.com/widest-line/-/widest-line-5.0.0.tgz} - engines: {node: '>=18'} - - wildcard@2.0.1: - resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==, tarball: https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz} - - window-size@0.1.0: - resolution: {integrity: sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==, tarball: https://registry.npmmirror.com/window-size/-/window-size-0.1.0.tgz} - engines: {node: '>= 0.8.0'} - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, tarball: https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz} - engines: {node: '>=0.10.0'} - - wordwrap@0.0.2: - resolution: {integrity: sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==, tarball: https://registry.npmmirror.com/wordwrap/-/wordwrap-0.0.2.tgz} - engines: {node: '>=0.4.0'} - - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==, tarball: https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz} - - workerize-loader@2.0.2: - resolution: {integrity: sha512-HoZ6XY4sHWxA2w0WpzgBwUiR3dv1oo7bS+oCwIpb6n54MclQ/7KXdXsVIChTCygyuHtVuGBO1+i3HzTt699UJQ==, tarball: https://registry.npmmirror.com/workerize-loader/-/workerize-loader-2.0.2.tgz} - peerDependencies: - webpack: '*' - - wrap-ansi@3.0.1: - resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz} - engines: {node: '>=4'} - - wrap-ansi@5.1.0: - resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz} - engines: {node: '>=6'} - - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz} - engines: {node: '>=8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz} - engines: {node: '>=12'} - - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz} - engines: {node: '>=18'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz} - - write-file-atomic@2.4.1: - resolution: {integrity: sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==, tarball: https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz} - - write-file-atomic@2.4.3: - resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==, tarball: https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz} - - write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==, tarball: https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz} - - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==, tarball: https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - ws@5.2.4: - resolution: {integrity: sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ==, tarball: https://registry.npmmirror.com/ws/-/ws-5.2.4.tgz} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==, tarball: https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==, tarball: https://registry.npmmirror.com/ws/-/ws-8.18.0.tgz} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xdg-basedir@3.0.0: - resolution: {integrity: sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==, tarball: https://registry.npmmirror.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz} - engines: {node: '>=4'} - - xdg-basedir@5.1.0: - resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==, tarball: https://registry.npmmirror.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz} - engines: {node: '>=12'} - - xml-lexer@0.2.2: - resolution: {integrity: sha512-G0i98epIwiUEiKmMcavmVdhtymW+pCAohMRgybyIME9ygfVu8QheIi+YoQh3ngiThsT0SQzJT4R0sKDEv8Ou0w==, tarball: https://registry.npmmirror.com/xml-lexer/-/xml-lexer-0.2.2.tgz} - - xml-name-validator@3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==, tarball: https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz} - - xml-reader@2.4.3: - resolution: {integrity: sha512-xWldrIxjeAMAu6+HSf9t50ot1uL5M+BtOidRCWHXIeewvSeIpscWCsp4Zxjk8kHHhdqFBrfK8U0EJeCcnyQ/gA==, tarball: https://registry.npmmirror.com/xml-reader/-/xml-reader-2.4.3.tgz} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==, tarball: https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz} - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, tarball: https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz} - engines: {node: '>=0.4'} - - y18n@3.2.2: - resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==, tarball: https://registry.npmmirror.com/y18n/-/y18n-3.2.2.tgz} - - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, tarball: https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, tarball: https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz} - engines: {node: '>=10'} - - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, tarball: https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, tarball: https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, tarball: https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz} - engines: {node: '>= 6'} - - yargs-parser@13.1.2: - resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz} - - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz} - engines: {node: '>=6'} - - yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz} - engines: {node: '>=10'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz} - engines: {node: '>=12'} - - yargs@13.3.2: - resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==, tarball: https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz} - - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, tarball: https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz} - engines: {node: '>=8'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, tarball: https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz} - engines: {node: '>=12'} - - yargs@3.10.0: - resolution: {integrity: sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==, tarball: https://registry.npmmirror.com/yargs/-/yargs-3.10.0.tgz} - - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==, tarball: https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, tarball: https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz} - engines: {node: '>=10'} - - yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==, tarball: https://registry.npmmirror.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz} - engines: {node: '>=18'} - - yorkie@2.0.0: - resolution: {integrity: sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==, tarball: https://registry.npmmirror.com/yorkie/-/yorkie-2.0.0.tgz} - engines: {node: '>=4'} - - zepto@1.2.0: - resolution: {integrity: sha512-C1x6lfvBICFTQIMgbt3JqMOno3VOtkWat/xEakLTOurskYIHPmzJrzd1e8BnmtdDVJlGuk5D+FxyCA8MPmkIyA==, tarball: https://registry.npmmirror.com/zepto/-/zepto-1.2.0.tgz} - - zod-validation-error@2.1.0: - resolution: {integrity: sha512-VJh93e2wb4c3tWtGgTa0OF/dTt/zoPCPzXq4V11ZjxmEAFaPi/Zss1xIZdEB5RD8GD00U0/iVXgqkF77RV7pdQ==, tarball: https://registry.npmmirror.com/zod-validation-error/-/zod-validation-error-2.1.0.tgz} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.18.0 - - zod@3.23.8: - resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==, tarball: https://registry.npmmirror.com/zod/-/zod-3.23.8.tgz} - - zwitch@1.0.5: - resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==, tarball: https://registry.npmmirror.com/zwitch/-/zwitch-1.0.5.tgz} - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==, tarball: https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz} - -snapshots: - - '@adobe/css-tools@4.4.0': {} - - '@algolia/autocomplete-core@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)': - dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2) - '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - search-insights - - '@algolia/autocomplete-plugin-algolia-insights@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)': - dependencies: - '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) - search-insights: 2.17.2 - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - '@algolia/autocomplete-preset-algolia@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)': - dependencies: - '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) - '@algolia/client-search': 5.13.0 - algoliasearch: 5.13.0 - - '@algolia/autocomplete-shared@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)': - dependencies: - '@algolia/client-search': 5.13.0 - algoliasearch: 5.13.0 - - '@algolia/client-abtesting@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/client-analytics@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/client-common@5.13.0': {} - - '@algolia/client-insights@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/client-personalization@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/client-query-suggestions@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/client-search@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/ingestion@1.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/monitoring@1.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/recommend@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/requester-browser-xhr@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - - '@algolia/requester-fetch@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - - '@algolia/requester-node-http@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@ant-design/charts-util@0.0.1-alpha.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@ant-design/charts-util@0.0.1-alpha.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - lodash: 4.17.21 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@ant-design/colors@6.0.0': - dependencies: - '@ctrl/tinycolor': 3.6.1 - - '@ant-design/colors@7.1.0': - dependencies: - '@ctrl/tinycolor': 3.6.1 - - '@ant-design/cssinjs-utils@1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@ant-design/cssinjs': 1.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@babel/runtime': 7.26.0 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@ant-design/cssinjs@1.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.26.0 - '@emotion/hash': 0.8.0 - '@emotion/unitless': 0.7.5 - classnames: 2.5.1 - csstype: 3.1.3 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - stylis: 4.3.4 - - '@ant-design/fast-color@2.0.6': - dependencies: - '@babel/runtime': 7.26.0 - - '@ant-design/graphs@2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))': - dependencies: - '@ant-design/charts-util': 0.0.1-alpha.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@antv/g6': 5.0.29(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))) - '@antv/g6-extension-react': 0.1.7(@antv/g6@5.0.29(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@antv/graphin': 3.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))) - lodash: 4.17.21 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - styled-components: 6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - transitivePeerDependencies: - - workerize-loader - - '@ant-design/icons-svg@4.4.2': {} - - '@ant-design/icons@4.8.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@ant-design/colors': 6.0.0 - '@ant-design/icons-svg': 4.4.2 - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - lodash: 4.17.21 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@ant-design/icons@5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@ant-design/colors': 7.1.0 - '@ant-design/icons-svg': 4.4.2 - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@ant-design/plots@2.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@ant-design/charts-util': 0.0.1-alpha.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@antv/event-emitter': 0.1.3 - '@antv/g': 6.1.7 - '@antv/g2': 5.2.7 - '@antv/g2-extension-plot': 0.2.1 - lodash: 4.17.21 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@ant-design/react-slick@1.0.2(react@18.3.1)': - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - json2mq: 0.2.0 - react: 18.3.1 - resize-observer-polyfill: 1.5.1 - throttle-debounce: 5.0.2 - - '@ant-design/react-slick@1.1.2(react@18.3.1)': - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - json2mq: 0.2.0 - react: 18.3.1 - resize-observer-polyfill: 1.5.1 - throttle-debounce: 5.0.2 - - '@antfu/install-pkg@0.1.1': - dependencies: - execa: 5.1.1 - find-up: 5.0.0 - - '@antfu/utils@0.7.10': {} - - '@antv/algorithm@0.1.26': - dependencies: - '@antv/util': 2.0.17 - tslib: 2.6.1 - - '@antv/component@2.1.1': - dependencies: - '@antv/g': 6.1.7 - '@antv/scale': 0.4.16 - '@antv/util': 3.3.10 - svg-path-parser: 1.1.0 - - '@antv/coord@0.4.7': - dependencies: - '@antv/scale': 0.4.16 - '@antv/util': 2.0.17 - gl-matrix: 3.4.3 - - '@antv/dumi-theme-antv@0.5.3(@algolia/client-search@5.13.0)(@babel/core@7.23.6)(@types/react@16.14.62)(dumi@2.4.13(@babel/core@7.23.6)(@swc/helpers@0.5.1)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.25.0)(stylelint@13.13.1)(sugarss@2.0.0)(terser@5.36.0)(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(jquery@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)': - dependencies: - '@ant-design/icons': 4.8.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.6) - '@babel/standalone': 7.26.2 - '@docsearch/css': 3.7.0 - '@docsearch/react': 3.7.0(@algolia/client-search@5.13.0)(@types/react@16.14.62)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2) - '@monaco-editor/react': 4.6.0(monaco-editor@0.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@stackblitz/sdk': 1.11.0 - antd: 4.24.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - classnames: 2.5.1 - codesandbox: 2.2.3 - d3-dsv: 3.0.1 - docsearch.js: 2.6.3 - dumi: 2.4.13(@babel/core@7.23.6)(@swc/helpers@0.5.1)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.25.0)(stylelint@13.13.1)(sugarss@2.0.0)(terser@5.36.0)(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) - front-matter: 4.0.2 - fs-extra: 10.1.0 - glob: 8.1.0 - hast: 1.0.0 - indent-string: 5.0.0 - insert-css: 2.0.0 - lodash-es: 4.17.21 - monaco-editor: 0.25.2 - parse-github-url: 1.0.3 - prettier: 2.8.8 - rc-drawer: 4.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-footer: 0.6.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-error-boundary: 3.1.4(react@18.3.1) - react-github-button: 0.1.11 - react-helmet: 6.1.0(react@18.3.1) - react-markdown: 9.0.1(@types/react@16.14.62)(react@18.3.1) - react-router-dom: 6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-slick: 0.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-split-pane: 0.1.92(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-use: 17.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - reading-time: 1.5.0 - rehype-raw: 7.0.0 - remark-gfm: 4.0.0 - semver: 7.6.3 - size-sensor: 1.0.2 - slick-carousel: 1.8.1(jquery@3.7.1) - unified: 10.1.2 - unist-util-visit: 4.1.2 - uri-parse: 1.0.0 - valtio: 1.13.2(@types/react@16.14.62)(react@18.3.1) - video-react: 0.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - transitivePeerDependencies: - - '@algolia/client-search' - - '@babel/core' - - '@types/react' - - jquery - - search-insights - - supports-color - - '@antv/event-emitter@0.1.3': {} - - '@antv/g-camera-api@2.0.21': - dependencies: - '@antv/g-lite': 2.2.2 - '@antv/util': 3.3.10 - '@babel/runtime': 7.26.0 - gl-matrix: 3.4.3 - tslib: 2.6.1 - - '@antv/g-canvas@2.0.24': - dependencies: - '@antv/g-lite': 2.2.2 - '@antv/g-plugin-canvas-path-generator': 2.1.2 - '@antv/g-plugin-canvas-picker': 2.1.3 - '@antv/g-plugin-canvas-renderer': 2.2.3 - '@antv/g-plugin-dom-interaction': 2.1.7 - '@antv/g-plugin-html-renderer': 2.1.7 - '@antv/g-plugin-image-loader': 2.1.3 - '@antv/util': 3.3.10 - '@babel/runtime': 7.26.0 - tslib: 2.6.1 - - '@antv/g-dom-mutation-observer-api@2.0.18': - dependencies: - '@antv/g-lite': 2.2.2 - '@babel/runtime': 7.26.0 - - '@antv/g-lite@2.2.2': - dependencies: - '@antv/g-math': 3.0.0 - '@antv/util': 3.3.10 - '@babel/runtime': 7.26.0 - d3-color: 3.1.0 - eventemitter3: 5.0.1 - gl-matrix: 3.4.3 - rbush: 3.0.1 - tslib: 2.6.1 - - '@antv/g-math@3.0.0': - dependencies: - '@antv/util': 3.3.10 - gl-matrix: 3.4.3 - tslib: 2.6.1 - - '@antv/g-plugin-canvas-path-generator@2.1.2': - dependencies: - '@antv/g-lite': 2.2.2 - '@antv/g-math': 3.0.0 - '@antv/util': 3.3.10 - '@babel/runtime': 7.26.0 - tslib: 2.6.1 - - '@antv/g-plugin-canvas-picker@2.1.3': - dependencies: - '@antv/g-lite': 2.2.2 - '@antv/g-math': 3.0.0 - '@antv/g-plugin-canvas-path-generator': 2.1.2 - '@antv/g-plugin-canvas-renderer': 2.2.3 - '@antv/util': 3.3.10 - '@babel/runtime': 7.26.0 - gl-matrix: 3.4.3 - tslib: 2.6.1 - - '@antv/g-plugin-canvas-renderer@2.2.3': - dependencies: - '@antv/g-lite': 2.2.2 - '@antv/g-math': 3.0.0 - '@antv/g-plugin-canvas-path-generator': 2.1.2 - '@antv/g-plugin-image-loader': 2.1.3 - '@antv/util': 3.3.10 - '@babel/runtime': 7.26.0 - gl-matrix: 3.4.3 - tslib: 2.6.1 - - '@antv/g-plugin-dom-interaction@2.1.7': - dependencies: - '@antv/g-lite': 2.2.2 - '@babel/runtime': 7.26.0 - tslib: 2.6.1 - - '@antv/g-plugin-dragndrop@2.0.18': - dependencies: - '@antv/g-lite': 2.2.2 - '@antv/util': 3.3.10 - '@babel/runtime': 7.26.0 - tslib: 2.6.1 - - '@antv/g-plugin-html-renderer@2.1.7': + /@antv/g-plugin-html-renderer@2.1.7: + resolution: {integrity: sha512-MPquXo9MT9QHUdbvgwcBr9msNv9Qh2slOKpc1fzwWG7/aLpmOAxTAhd3+Sjj8JuVXHYw25Q3seI8lMJSGwTWvw==} dependencies: '@antv/g-lite': 2.2.2 '@antv/util': 3.3.10 '@babel/runtime': 7.26.0 gl-matrix: 3.4.3 tslib: 2.6.1 + dev: false - '@antv/g-plugin-image-loader@2.1.3': + /@antv/g-plugin-image-loader@2.1.3: + resolution: {integrity: sha512-tHGFVx96DcXo5Q4pwuRnwSe0dZ9I3N+JS1An8zziYUDqHRZ7ukNablzKSsdchjr9v2PdkWtxN5jQ0d3nz7EtJQ==} dependencies: '@antv/g-lite': 2.2.2 '@antv/util': 3.3.10 '@babel/runtime': 7.26.0 gl-matrix: 3.4.3 tslib: 2.6.1 + dev: false - '@antv/g-plugin-svg-picker@2.0.20': + /@antv/g-plugin-svg-picker@2.0.20: + resolution: {integrity: sha512-gML0upmK24Bqr8REsuW8ZZqlKNHSEDtYlycFof36HDcKVNDWIf22ff5N3op1rCHkbny6XXjkIXoKulfQM6GHOA==} dependencies: '@antv/g-lite': 2.2.2 '@antv/g-plugin-svg-renderer': 2.2.2 '@babel/runtime': 7.26.0 tslib: 2.6.1 + dev: false - '@antv/g-plugin-svg-renderer@2.2.2': + /@antv/g-plugin-svg-renderer@2.2.2: + resolution: {integrity: sha512-fWQ5gVSxcZr+Ip95wVeHY2WtoWnsyGDqj+lkxK1aAq0uzqI2qIVyawUc86R87Bv4UVY9b0B5KCtig5F5SGGwAg==} dependencies: '@antv/g-lite': 2.2.2 '@antv/util': 3.3.10 '@babel/runtime': 7.26.0 gl-matrix: 3.4.3 tslib: 2.6.1 + dev: false - '@antv/g-svg@2.0.20': + /@antv/g-svg@2.0.20: + resolution: {integrity: sha512-KMb5VzQ3nZpBBwH+sRIJGh/umfEpv4SmDWwV/Yy4nAn0X91yq++qEiIDCnq9QSXHOESV6Si7XJbo4WtX5G7TPw==} dependencies: '@antv/g-lite': 2.2.2 '@antv/g-plugin-dom-interaction': 2.1.7 @@ -13516,22 +920,28 @@ snapshots: '@antv/util': 3.3.10 '@babel/runtime': 7.26.0 tslib: 2.6.1 + dev: false - '@antv/g-web-animations-api@2.1.7': + /@antv/g-web-animations-api@2.1.7: + resolution: {integrity: sha512-yx7ZwLUgiglCe7sSisloWesO8gwgNwTGeDE0fTHhk1kZmO0BxZ8q6/VxlmLgXTyqdRso+6wfsTo2HukMURJSNw==} dependencies: '@antv/g-lite': 2.2.2 '@antv/util': 3.3.10 '@babel/runtime': 7.26.0 tslib: 2.6.1 + dev: false - '@antv/g2-extension-plot@0.2.1': + /@antv/g2-extension-plot@0.2.1: + resolution: {integrity: sha512-WNv/LIUNJLwlfG8XXmKUbje9PbImtJqh36UDvuOk/uu+kmP/uMyHAXsBuu0yCOWdQgBVTVwoxszxJOCnY4mVfg==} dependencies: '@antv/g2': 5.2.7 '@antv/util': 3.3.10 d3-array: 3.2.4 d3-hierarchy: 3.1.2 + dev: false - '@antv/g2@5.2.7': + /@antv/g2@5.2.7: + resolution: {integrity: sha512-bOU7ZJfa735KCqIsWWwlFtn3pc8TwJIckBhy7X8PFcxTuMIXzgqOt7vbMMdF4psBHMyIIOCDAo8zf9rGhgjEzA==} dependencies: '@antv/component': 2.1.1 '@antv/coord': 0.4.7 @@ -13553,17 +963,25 @@ snapshots: flru: 1.0.2 fmin: 0.0.2 pdfast: 0.2.0 + dev: false - '@antv/g6-extension-react@0.1.7(@antv/g6@5.0.29(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@antv/g6-extension-react@0.1.7(@antv/g6@5.0.30)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-fKk1weq2odHSTi5i8iSg9/keDPbufryA2TZ2X2j+qkSAwxJ7WtURagV/7/CUN9r1tMMk1eoiuzQZXdvc72a1GA==} + peerDependencies: + '@antv/g6': ^5.0.22 + react: '>=16.8' + react-dom: '>=16.8' dependencies: '@antv/g': 6.1.7 '@antv/g-svg': 2.0.20 - '@antv/g6': 5.0.29(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))) + '@antv/g6': 5.0.30(workerize-loader@2.0.2) '@antv/react-g': 2.0.23(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: false - '@antv/g6@5.0.29(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))': + /@antv/g6@5.0.30(workerize-loader@2.0.2): + resolution: {integrity: sha512-QEpNNAz/DcSnyHMJJ1UNSVjKgbfJ0zhwHcq8I/+f/mZl87oK1GlcRi8FCVcPGBb+W3OH8xfH5GIjPxEPma1kxg==} dependencies: '@antv/algorithm': 0.1.26 '@antv/component': 2.1.1 @@ -13573,41 +991,54 @@ snapshots: '@antv/g-plugin-dragndrop': 2.0.18 '@antv/graphlib': 2.0.3 '@antv/hierarchy': 0.6.14 - '@antv/layout': 1.2.14-beta.9(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))) + '@antv/layout': 1.2.14-beta.9(workerize-loader@2.0.2) '@antv/util': 3.3.10 bubblesets-js: 2.3.4 hull.js: 1.0.6 transitivePeerDependencies: - workerize-loader + dev: false - '@antv/g@6.1.7': + /@antv/g@6.1.7: + resolution: {integrity: sha512-qv8YnBKqX3Yjs85U9OnBa6E92tNAI3cKrBhDrI5EikzjVPqfcVQLx0P5Zo8uzCYt7m9jFpJCi/iaGvWX/fA14Q==} dependencies: '@antv/g-camera-api': 2.0.21 '@antv/g-dom-mutation-observer-api': 2.0.18 '@antv/g-lite': 2.2.2 '@antv/g-web-animations-api': 2.1.7 '@babel/runtime': 7.26.0 + dev: false - '@antv/graphin@3.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))': + /@antv/graphin@3.0.4(react-dom@18.3.1)(react@18.3.1)(workerize-loader@2.0.2): + resolution: {integrity: sha512-7ce6RDI5Z6ud93yiyS7b+mmFrHJhlkwwNo53kb7P7KoCsnV7ioMONDE6Gw0ROeMSR6TwHtxGZUhHw9wxnPp82Q==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@antv/g6': 5.0.29(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))) + '@antv/g6': 5.0.30(workerize-loader@2.0.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - workerize-loader + dev: false - '@antv/graphlib@2.0.3': + /@antv/graphlib@2.0.3: + resolution: {integrity: sha512-EtQR+DIfsYy28tumTnH560v7yIzXZq0nSgFBZh76mMiV1oHEN1L4p6JKu7IMtILH14mDqzmYYYFetYoAODoQUw==} dependencies: '@antv/event-emitter': 0.1.3 + dev: false - '@antv/hierarchy@0.6.14': {} + /@antv/hierarchy@0.6.14: + resolution: {integrity: sha512-V3uknf7bhynOqQDw2sg+9r9DwZ9pc6k/EcqyTFdfXB1+ydr7urisP0MipIuimucvQKN+Qkd+d6w601r1UIroqQ==} + dev: false - '@antv/layout@1.2.14-beta.9(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))': + /@antv/layout@1.2.14-beta.9(workerize-loader@2.0.2): + resolution: {integrity: sha512-wPlwBFMtq2lWZFc89/7Lzb8fjHnyKVZZ9zBb2h+zZIP0YWmVmHRE8+dqCiPKOyOGUXEdDtn813f1g107dCHZlg==} dependencies: '@antv/event-emitter': 0.1.3 '@antv/graphlib': 2.0.3 '@antv/util': 3.3.10 - '@naoak/workerize-transferable': 0.1.0(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))) + '@naoak/workerize-transferable': 0.1.0(workerize-loader@2.0.2) comlink: 4.4.2 d3-force: 3.0.0 d3-force-3d: 3.0.5 @@ -13618,8 +1049,12 @@ snapshots: tslib: 2.6.1 transitivePeerDependencies: - workerize-loader + dev: false - '@antv/react-g@2.0.23(react@18.3.1)': + /@antv/react-g@2.0.23(react@18.3.1): + resolution: {integrity: sha512-Cur5/B6kRRK7kxj5USsEobKcGAGoWG9fDltVJ/3m95kMN95Ayx2rbVFxc5NavTrnmhxO4OUkRIyb0PDBFApfQA==} + peerDependencies: + react: ^16.13.1 dependencies: '@antv/g': 6.1.7 '@antv/util': 3.3.10 @@ -13629,37 +1064,52 @@ snapshots: react-reconciler: 0.26.2(react@18.3.1) scheduler: 0.20.2 tslib: 2.6.1 + dev: false - '@antv/scale@0.4.16': + /@antv/scale@0.4.16: + resolution: {integrity: sha512-5wg/zB5kXHxpTV5OYwJD3ja6R8yTiqIOkjOhmpEJiowkzRlbEC/BOyMvNUq5fqFIHnMCE9woO7+c3zxEQCKPjw==} dependencies: '@antv/util': 3.3.10 color-string: 1.9.1 fecha: 4.2.3 + dev: false - '@antv/util@2.0.17': + /@antv/util@2.0.17: + resolution: {integrity: sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==} dependencies: csstype: 3.1.3 tslib: 2.6.1 - '@antv/util@3.3.10': + /@antv/util@3.3.10: + resolution: {integrity: sha512-basGML3DFA3O87INnzvDStjzS+n0JLEhRnRsDzP9keiXz8gT1z/fTdmJAZFOzMMWxy+HKbi7NbSt0+8vz/OsBQ==} dependencies: fast-deep-equal: 3.1.3 gl-matrix: 3.4.3 tslib: 2.6.1 + dev: false - '@babel/code-frame@7.12.11': + /@babel/code-frame@7.12.11: + resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: '@babel/highlight': 7.25.9 + dev: true - '@babel/code-frame@7.26.2': + /@babel/code-frame@7.26.2: + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.2': {} + /@babel/compat-data@7.26.2: + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} + engines: {node: '>=6.9.0'} + dev: true - '@babel/core@7.23.6': + /@babel/core@7.23.6: + resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} + engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 @@ -13678,8 +1128,11 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - '@babel/core@7.26.0': + /@babel/core@7.26.0: + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 @@ -13698,59 +1151,90 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - '@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@7.32.0)': + /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@7.32.0): + resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 dependencies: '@babel/core': 7.23.6 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 7.32.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 + dev: true - '@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@7.32.0)': + /@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@7.32.0): + resolution: {integrity: sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 dependencies: '@babel/core': 7.26.0 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 7.32.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 + dev: true - '@babel/generator@7.2.0': + /@babel/generator@7.2.0: + resolution: {integrity: sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==} dependencies: '@babel/types': 7.26.0 jsesc: 2.5.2 lodash: 4.17.21 source-map: 0.5.7 trim-right: 1.0.1 + dev: true - '@babel/generator@7.26.2': + /@babel/generator@7.26.2: + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} + engines: {node: '>=6.9.0'} dependencies: '@babel/parser': 7.26.2 '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 + dev: true - '@babel/helper-annotate-as-pure@7.25.9': + /@babel/helper-annotate-as-pure@7.25.9: + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.26.0 + dev: true - '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': + /@babel/helper-builder-binary-assignment-operator-visitor@7.25.9: + resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==} + engines: {node: '>=6.9.0'} dependencies: '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-compilation-targets@7.25.9': + /@babel/helper-compilation-targets@7.25.9: + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} dependencies: '@babel/compat-data': 7.26.2 '@babel/helper-validator-option': 7.25.9 browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 + dev: true - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + /@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 @@ -13762,22 +1246,24 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.23.6)': - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.25.9 - regexpu-core: 6.1.1 - semver: 6.3.1 - - '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.26.0)': + /@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 6.1.1 semver: 6.3.1 + dev: true - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0)': + /@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0): + resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 @@ -13787,22 +1273,33 @@ snapshots: resolve: 1.22.8 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-member-expression-to-functions@7.25.9': + /@babel/helper-member-expression-to-functions@7.25.9: + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} dependencies: '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-module-imports@7.25.9': + /@babel/helper-module-imports@7.25.9: + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} dependencies: '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-module-transforms@7.26.0(@babel/core@7.23.6)': + /@babel/helper-module-transforms@7.26.0(@babel/core@7.23.6): + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.23.6 '@babel/helper-module-imports': 7.25.9 @@ -13810,8 +1307,13 @@ snapshots: '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 @@ -13819,14 +1321,25 @@ snapshots: '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-optimise-call-expression@7.25.9': + /@babel/helper-optimise-call-expression@7.25.9: + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.26.0 + dev: true - '@babel/helper-plugin-utils@7.25.9': {} + /@babel/helper-plugin-utils@7.25.9: + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': + /@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 @@ -13834,8 +1347,13 @@ snapshots: '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': + /@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-member-expression-to-functions': 7.25.9 @@ -13843,70 +1361,117 @@ snapshots: '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-simple-access@7.25.9': + /@babel/helper-simple-access@7.25.9: + resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} + engines: {node: '>=6.9.0'} dependencies: '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + /@babel/helper-skip-transparent-expression-wrappers@7.25.9: + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} dependencies: '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-string-parser@7.25.9': {} + /@babel/helper-string-parser@7.25.9: + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-validator-identifier@7.25.9': {} + /@babel/helper-validator-identifier@7.25.9: + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': {} + /@babel/helper-validator-option@7.25.9: + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-wrap-function@7.25.9': + /@babel/helper-wrap-function@7.25.9: + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.25.9 '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color + dev: true - '@babel/helpers@7.26.0': + /@babel/helpers@7.26.0: + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.25.9 '@babel/types': 7.26.0 + dev: true - '@babel/highlight@7.25.9': + /@babel/highlight@7.25.9: + resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} + engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 + dev: true - '@babel/parser@7.26.2': + /@babel/parser@7.26.2: + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + engines: {node: '>=6.0.0'} + hasBin: true dependencies: '@babel/types': 7.26.0 + dev: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 @@ -13914,24 +1479,40 @@ snapshots: '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.26.0)': + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.26.0): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) @@ -13939,243 +1520,301 @@ snapshots: '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.26.0)': + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.26.0): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + dev: true - '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) - - '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - - '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6)': - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6)': - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6)': - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.6)': - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.23.6)': + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.26.0): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) + dev: true - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.26.0): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + dev: true - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6)': + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.26.0): + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6)': + /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.26.0): + resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + dev: true - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6)': + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6)': + /@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': + /@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6)': + /@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': + /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6)': + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6)': + /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6)': + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.6)': + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6)': + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.6)': + /@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.23.6) + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 @@ -14183,8 +1822,13 @@ snapshots: '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 @@ -14192,34 +1836,59 @@ snapshots: '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': + /@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 @@ -14230,68 +1899,123 @@ snapshots: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/template': 7.25.9 + dev: true - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-flow-strip-types@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-flow-strip-types@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0) + dev: true - '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 @@ -14299,45 +2023,80 @@ snapshots: '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.6)': + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.26.0): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.23.6) + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-simple-access': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) @@ -14345,8 +2104,13 @@ snapshots: '@babel/helper-simple-access': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) @@ -14355,78 +2119,138 @@ snapshots: '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + dev: true - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 @@ -14434,35 +2258,65 @@ snapshots: '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 @@ -14472,31 +2326,56 @@ snapshots: '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 regenerator-transform: 0.15.2 + dev: true - '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': + /@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 @@ -14507,36 +2386,66 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 @@ -14546,36 +2455,64 @@ snapshots: '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color + dev: true - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': + /@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 + dev: true - '@babel/polyfill@7.12.1': + /@babel/polyfill@7.12.1: + resolution: {integrity: sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==} + deprecated: 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information. dependencies: core-js: 2.6.12 regenerator-runtime: 0.13.11 + dev: true - '@babel/preset-env@7.26.0(@babel/core@7.26.0)': + /@babel/preset-env@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.26.2 '@babel/core': 7.26.0 @@ -14649,15 +2586,24 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/types': 7.26.0 esutils: 2.0.3 + dev: true - '@babel/preset-react@7.25.9(@babel/core@7.26.0)': + /@babel/preset-react@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 @@ -14668,8 +2614,13 @@ snapshots: '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color + dev: true - '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': + /@babel/preset-typescript@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 @@ -14679,24 +2630,38 @@ snapshots: '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color + dev: true - '@babel/runtime@7.23.6': + /@babel/runtime@7.23.6: + resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} + engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 + dev: true - '@babel/runtime@7.26.0': + /@babel/runtime@7.26.0: + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - '@babel/standalone@7.26.2': {} + /@babel/standalone@7.26.2: + resolution: {integrity: sha512-i2VbegsRfwa9yq3xmfDX3tG2yh9K0cCqwpSyVG2nPxifh0EOnucAZUeO/g4lW2Zfg03aPJNtPfxQbDHzXc7H+w==} + engines: {node: '>=6.9.0'} + dev: true - '@babel/template@7.25.9': + /@babel/template@7.25.9: + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.26.2 '@babel/types': 7.26.0 + dev: true - '@babel/traverse@7.25.9': + /@babel/traverse@7.25.9: + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.26.2 '@babel/generator': 7.26.2 @@ -14707,17 +2672,26 @@ snapshots: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true - '@babel/types@7.26.0': + /@babel/types@7.26.0: + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + dev: true - '@bcoe/v8-coverage@0.2.3': {} + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true - '@bloomberg/record-tuple-polyfill@0.0.4': {} + /@bloomberg/record-tuple-polyfill@0.0.4: + resolution: {integrity: sha512-h0OYmPR3A5Dfbetra/GzxBAzQk8sH7LhRkRUTdagX6nrtlUgJGYCTv4bBK33jsTQw9HDd8PE2x1Ma+iRKEDUsw==} + dev: true - '@changesets/apply-release-plan@7.0.5': + /@changesets/apply-release-plan@7.0.5: + resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==} dependencies: '@changesets/config': 3.0.3 '@changesets/get-version-range-type': 0.4.0 @@ -14732,8 +2706,10 @@ snapshots: prettier: 2.8.8 resolve-from: 5.0.0 semver: 7.6.3 + dev: true - '@changesets/assemble-release-plan@6.0.4': + /@changesets/assemble-release-plan@6.0.4: + resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==} dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.2 @@ -14741,12 +2717,17 @@ snapshots: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 semver: 7.6.3 + dev: true - '@changesets/changelog-git@0.2.0': + /@changesets/changelog-git@0.2.0: + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} dependencies: '@changesets/types': 6.0.0 + dev: true - '@changesets/cli@2.27.9': + /@changesets/cli@2.27.9: + resolution: {integrity: sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==} + hasBin: true dependencies: '@changesets/apply-release-plan': 7.0.5 '@changesets/assemble-release-plan': 6.0.4 @@ -14776,8 +2757,10 @@ snapshots: semver: 7.6.3 spawndamnit: 2.0.0 term-size: 2.2.1 + dev: true - '@changesets/config@3.0.3': + /@changesets/config@3.0.3: + resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==} dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.2 @@ -14786,19 +2769,25 @@ snapshots: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.8 + dev: true - '@changesets/errors@0.2.0': + /@changesets/errors@0.2.0: + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} dependencies: extendable-error: 0.1.7 + dev: true - '@changesets/get-dependents-graph@2.1.2': + /@changesets/get-dependents-graph@2.1.2: + resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} dependencies: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 semver: 7.6.3 + dev: true - '@changesets/get-release-plan@4.0.4': + /@changesets/get-release-plan@4.0.4: + resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==} dependencies: '@changesets/assemble-release-plan': 6.0.4 '@changesets/config': 3.0.3 @@ -14806,34 +2795,46 @@ snapshots: '@changesets/read': 0.6.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 + dev: true - '@changesets/get-version-range-type@0.4.0': {} + /@changesets/get-version-range-type@0.4.0: + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + dev: true - '@changesets/git@3.0.1': + /@changesets/git@3.0.1: + resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==} dependencies: '@changesets/errors': 0.2.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 micromatch: 4.0.8 spawndamnit: 2.0.0 + dev: true - '@changesets/logger@0.1.1': + /@changesets/logger@0.1.1: + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} dependencies: picocolors: 1.1.1 + dev: true - '@changesets/parse@0.4.0': + /@changesets/parse@0.4.0: + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} dependencies: '@changesets/types': 6.0.0 js-yaml: 3.14.1 + dev: true - '@changesets/pre@2.0.1': + /@changesets/pre@2.0.1: + resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} dependencies: '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 + dev: true - '@changesets/read@0.6.1': + /@changesets/read@0.6.1: + resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==} dependencies: '@changesets/git': 3.0.1 '@changesets/logger': 0.1.1 @@ -14842,114 +2843,214 @@ snapshots: fs-extra: 7.0.1 p-filter: 2.1.0 picocolors: 1.1.1 + dev: true - '@changesets/should-skip-package@0.1.1': + /@changesets/should-skip-package@0.1.1: + resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} dependencies: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 + dev: true - '@changesets/types@4.1.0': {} + /@changesets/types@4.1.0: + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + dev: true - '@changesets/types@6.0.0': {} + /@changesets/types@6.0.0: + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + dev: true - '@changesets/write@0.3.2': + /@changesets/write@0.3.2: + resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} dependencies: '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.8 + dev: true - '@cnakazawa/watch@1.0.4': + /@cnakazawa/watch@1.0.4: + resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} + engines: {node: '>=0.1.95'} + hasBin: true dependencies: exec-sh: 0.3.6 minimist: 1.2.8 + dev: true - '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)': + /@conventional-changelog/git-client@1.0.1(conventional-commits-parser@6.0.0): + resolution: {integrity: sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==} + engines: {node: '>=18'} + peerDependencies: + conventional-commits-filter: ^5.0.0 + conventional-commits-parser: ^6.0.0 + peerDependenciesMeta: + conventional-commits-filter: + optional: true + conventional-commits-parser: + optional: true dependencies: '@types/semver': 7.5.8 - semver: 7.6.3 - optionalDependencies: - conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 + semver: 7.6.3 + dev: false - '@csstools/postcss-color-function@1.1.1(postcss@8.4.49)': + /@csstools/postcss-color-function@1.1.1(postcss@8.4.49): + resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - '@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.49)': + /@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.49): + resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - '@csstools/postcss-hwb-function@1.0.2(postcss@8.4.49)': + /@csstools/postcss-hwb-function@1.0.2(postcss@8.4.49): + resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - '@csstools/postcss-ic-unit@1.0.1(postcss@8.4.49)': + /@csstools/postcss-ic-unit@1.0.1(postcss@8.4.49): + resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - '@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.49)': + /@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.49): + resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2) postcss: 8.4.49 postcss-selector-parser: 6.1.2 + dev: true - '@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.49)': + /@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.49): + resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - '@csstools/postcss-oklab-function@1.1.1(postcss@8.4.49)': + /@csstools/postcss-oklab-function@1.1.1(postcss@8.4.49): + resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - '@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.49)': + /@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.49): + resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - '@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.49)': + /@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.49): + resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - '@csstools/postcss-unset-value@1.0.2(postcss@8.4.49)': + /@csstools/postcss-unset-value@1.0.2(postcss@8.4.49): + resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 + dev: true - '@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.1.2)': + /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.1.2): + resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.10 dependencies: postcss-selector-parser: 6.1.2 + dev: true - '@ctrl/tinycolor@3.6.1': {} + /@ctrl/tinycolor@3.6.1: + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} - '@discoveryjs/json-ext@0.5.7': {} + /@discoveryjs/json-ext@0.5.7: + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} - '@docsearch/css@3.7.0': {} + /@docsearch/css@3.8.0: + resolution: {integrity: sha512-pieeipSOW4sQ0+bE5UFC51AOZp9NGxg89wAlZ1BAQFaiRAGK1IKUaPQ0UGZeNctJXyqZ1UvBtOQh2HH+U5GtmA==} + dev: true - '@docsearch/react@3.7.0(@algolia/client-search@5.13.0)(@types/react@16.14.62)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)': + /@docsearch/react@3.8.0(@algolia/client-search@5.13.0)(@types/react@16.14.62)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2): + resolution: {integrity: sha512-WnFK720+iwTVt94CxY3u+FgX6exb3BfN5kE9xUY6uuAH/9W/UFboBZFLlrw/zxFRHoHZCOXRtOylsXF+6LHI+Q==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true dependencies: - '@algolia/autocomplete-core': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2) - '@algolia/autocomplete-preset-algolia': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) - '@docsearch/css': 3.7.0 - algoliasearch: 5.13.0 - optionalDependencies: + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) + '@docsearch/css': 3.8.0 '@types/react': 16.14.62 + algoliasearch: 5.13.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) search-insights: 2.17.2 transitivePeerDependencies: - '@algolia/client-search' + dev: true - '@electron/get@1.14.1': + /@electron/get@1.14.1: + resolution: {integrity: sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==} + engines: {node: '>=8.6'} dependencies: debug: 4.3.7 env-paths: 2.2.1 @@ -14963,244 +3064,677 @@ snapshots: global-tunnel-ng: 2.7.1 transitivePeerDependencies: - supports-color + dev: true - '@emotion/hash@0.8.0': {} + /@emotion/hash@0.8.0: + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} - '@emotion/is-prop-valid@1.2.2': + /@emotion/is-prop-valid@1.2.2: + resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} dependencies: '@emotion/memoize': 0.8.1 + dev: false - '@emotion/memoize@0.8.1': {} + /@emotion/memoize@0.8.1: + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + dev: false - '@emotion/unitless@0.7.5': {} + /@emotion/unitless@0.7.5: + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} - '@emotion/unitless@0.8.1': {} + /@emotion/unitless@0.8.1: + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + dev: false - '@esbuild-kit/cjs-loader@2.4.4': + /@esbuild-kit/cjs-loader@2.4.4: + resolution: {integrity: sha512-NfsJX4PdzhwSkfJukczyUiZGc7zNNWZcEAyqeISpDnn0PTfzMJR1aR8xAIPskBejIxBJbIgCCMzbaYa9SXepIg==} + deprecated: 'Merged into tsx: https://tsx.is' dependencies: '@esbuild-kit/core-utils': 3.3.2 get-tsconfig: 4.8.1 + dev: true - '@esbuild-kit/core-utils@3.3.2': + /@esbuild-kit/core-utils@3.3.2: + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + deprecated: 'Merged into tsx: https://tsx.is' dependencies: esbuild: 0.18.20 source-map-support: 0.5.21 + dev: true - '@esbuild-kit/esm-loader@2.6.5': + /@esbuild-kit/esm-loader@2.6.5: + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + deprecated: 'Merged into tsx: https://tsx.is' dependencies: '@esbuild-kit/core-utils': 3.3.2 get-tsconfig: 4.8.1 + dev: true - '@esbuild/aix-ppc64@0.21.4': + /@esbuild/aix-ppc64@0.21.4: + resolution: {integrity: sha512-Zrm+B33R4LWPLjDEVnEqt2+SLTATlru1q/xYKVn8oVTbiRBGmK2VIMoIYGJDGyftnGaC788IuzGFAlb7IQ0Y8A==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true optional: true - '@esbuild/aix-ppc64@0.21.5': + /@esbuild/aix-ppc64@0.21.5: + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true optional: true - '@esbuild/android-arm64@0.18.20': + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true optional: true - '@esbuild/android-arm64@0.21.4': + /@esbuild/android-arm64@0.21.4: + resolution: {integrity: sha512-fYFnz+ObClJ3dNiITySBUx+oNalYUT18/AryMxfovLkYWbutXsct3Wz2ZWAcGGppp+RVVX5FiXeLYGi97umisA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true optional: true - '@esbuild/android-arm64@0.21.5': + /@esbuild/android-arm64@0.21.5: + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true optional: true - '@esbuild/android-arm@0.18.20': + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true optional: true - '@esbuild/android-arm@0.21.4': + /@esbuild/android-arm@0.21.4: + resolution: {integrity: sha512-E7H/yTd8kGQfY4z9t3nRPk/hrhaCajfA3YSQSBrst8B+3uTcgsi8N+ZWYCaeIDsiVs6m65JPCaQN/DxBRclF3A==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true optional: true - '@esbuild/android-arm@0.21.5': + /@esbuild/android-arm@0.21.5: + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true optional: true - '@esbuild/android-x64@0.18.20': + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true optional: true - '@esbuild/android-x64@0.21.4': + /@esbuild/android-x64@0.21.4: + resolution: {integrity: sha512-mDqmlge3hFbEPbCWxp4fM6hqq7aZfLEHZAKGP9viq9wMUBVQx202aDIfc3l+d2cKhUJM741VrCXEzRFhPDKH3Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true optional: true - '@esbuild/android-x64@0.21.5': + /@esbuild/android-x64@0.21.5: + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true optional: true - '@esbuild/darwin-arm64@0.18.20': + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@esbuild/darwin-arm64@0.21.4': + /@esbuild/darwin-arm64@0.21.4: + resolution: {integrity: sha512-72eaIrDZDSiWqpmCzVaBD58c8ea8cw/U0fq/PPOTqE3c53D0xVMRt2ooIABZ6/wj99Y+h4ksT/+I+srCDLU9TA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@esbuild/darwin-arm64@0.21.5': + /@esbuild/darwin-arm64@0.21.5: + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@esbuild/darwin-x64@0.18.20': + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@esbuild/darwin-x64@0.21.4': + /@esbuild/darwin-x64@0.21.4: + resolution: {integrity: sha512-uBsuwRMehGmw1JC7Vecu/upOjTsMhgahmDkWhGLWxIgUn2x/Y4tIwUZngsmVb6XyPSTXJYS4YiASKPcm9Zitag==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@esbuild/darwin-x64@0.21.5': + /@esbuild/darwin-x64@0.21.5: + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@esbuild/freebsd-arm64@0.18.20': + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - '@esbuild/freebsd-arm64@0.21.4': + /@esbuild/freebsd-arm64@0.21.4: + resolution: {integrity: sha512-8JfuSC6YMSAEIZIWNL3GtdUT5NhUA/CMUCpZdDRolUXNAXEE/Vbpe6qlGLpfThtY5NwXq8Hi4nJy4YfPh+TwAg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - '@esbuild/freebsd-arm64@0.21.5': + /@esbuild/freebsd-arm64@0.21.5: + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - '@esbuild/freebsd-x64@0.18.20': + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - '@esbuild/freebsd-x64@0.21.4': + /@esbuild/freebsd-x64@0.21.4: + resolution: {integrity: sha512-8d9y9eQhxv4ef7JmXny7591P/PYsDFc4+STaxC1GBv0tMyCdyWfXu2jBuqRsyhY8uL2HU8uPyscgE2KxCY9imQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - '@esbuild/freebsd-x64@0.21.5': + /@esbuild/freebsd-x64@0.21.5: + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-arm64@0.18.20': + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-arm64@0.21.4': + /@esbuild/linux-arm64@0.21.4: + resolution: {integrity: sha512-/GLD2orjNU50v9PcxNpYZi+y8dJ7e7/LhQukN3S4jNDXCKkyyiyAz9zDw3siZ7Eh1tRcnCHAo/WcqKMzmi4eMQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-arm64@0.21.5': + /@esbuild/linux-arm64@0.21.5: + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-arm@0.18.20': + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-arm@0.21.4': + /@esbuild/linux-arm@0.21.4: + resolution: {integrity: sha512-2rqFFefpYmpMs+FWjkzSgXg5vViocqpq5a1PSRgT0AvSgxoXmGF17qfGAzKedg6wAwyM7UltrKVo9kxaJLMF/g==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-arm@0.21.5': + /@esbuild/linux-arm@0.21.5: + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-ia32@0.18.20': + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-ia32@0.21.4': + /@esbuild/linux-ia32@0.21.4: + resolution: {integrity: sha512-pNftBl7m/tFG3t2m/tSjuYeWIffzwAZT9m08+9DPLizxVOsUl8DdFzn9HvJrTQwe3wvJnwTdl92AonY36w/25g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-ia32@0.21.5': + /@esbuild/linux-ia32@0.21.5: + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-loong64@0.18.20': + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-loong64@0.21.4': + /@esbuild/linux-loong64@0.21.4: + resolution: {integrity: sha512-cSD2gzCK5LuVX+hszzXQzlWya6c7hilO71L9h4KHwqI4qeqZ57bAtkgcC2YioXjsbfAv4lPn3qe3b00Zt+jIfQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-loong64@0.21.5': + /@esbuild/linux-loong64@0.21.5: + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-mips64el@0.18.20': + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-mips64el@0.21.4': + /@esbuild/linux-mips64el@0.21.4: + resolution: {integrity: sha512-qtzAd3BJh7UdbiXCrg6npWLYU0YpufsV9XlufKhMhYMJGJCdfX/G6+PNd0+v877X1JG5VmjBLUiFB0o8EUSicA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-mips64el@0.21.5': + /@esbuild/linux-mips64el@0.21.5: + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-ppc64@0.18.20': + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-ppc64@0.21.4': + /@esbuild/linux-ppc64@0.21.4: + resolution: {integrity: sha512-yB8AYzOTaL0D5+2a4xEy7OVvbcypvDR05MsB/VVPVA7nL4hc5w5Dyd/ddnayStDgJE59fAgNEOdLhBxjfx5+dg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-ppc64@0.21.5': + /@esbuild/linux-ppc64@0.21.5: + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-riscv64@0.18.20': + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-riscv64@0.21.4': + /@esbuild/linux-riscv64@0.21.4: + resolution: {integrity: sha512-Y5AgOuVzPjQdgU59ramLoqSSiXddu7F3F+LI5hYy/d1UHN7K5oLzYBDZe23QmQJ9PIVUXwOdKJ/jZahPdxzm9w==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-riscv64@0.21.5': + /@esbuild/linux-riscv64@0.21.5: + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-s390x@0.18.20': + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-s390x@0.21.4': + /@esbuild/linux-s390x@0.21.4: + resolution: {integrity: sha512-Iqc/l/FFwtt8FoTK9riYv9zQNms7B8u+vAI/rxKuN10HgQIXaPzKZc479lZ0x6+vKVQbu55GdpYpeNWzjOhgbA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-s390x@0.21.5': + /@esbuild/linux-s390x@0.21.5: + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-x64@0.18.20': + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-x64@0.21.4': + /@esbuild/linux-x64@0.21.4: + resolution: {integrity: sha512-Td9jv782UMAFsuLZINfUpoF5mZIbAj+jv1YVtE58rFtfvoKRiKSkRGQfHTgKamLVT/fO7203bHa3wU122V/Bdg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/linux-x64@0.21.5': + /@esbuild/linux-x64@0.21.5: + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@esbuild/netbsd-x64@0.18.20': + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true optional: true - '@esbuild/netbsd-x64@0.21.4': + /@esbuild/netbsd-x64@0.21.4: + resolution: {integrity: sha512-Awn38oSXxsPMQxaV0Ipb7W/gxZtk5Tx3+W+rAPdZkyEhQ6968r9NvtkjhnhbEgWXYbgV+JEONJ6PcdBS+nlcpA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true optional: true - '@esbuild/netbsd-x64@0.21.5': + /@esbuild/netbsd-x64@0.21.5: + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true optional: true - '@esbuild/openbsd-x64@0.18.20': + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true optional: true - '@esbuild/openbsd-x64@0.21.4': + /@esbuild/openbsd-x64@0.21.4: + resolution: {integrity: sha512-IsUmQeCY0aU374R82fxIPu6vkOybWIMc3hVGZ3ChRwL9hA1TwY+tS0lgFWV5+F1+1ssuvvXt3HFqe8roCip8Hg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true optional: true - '@esbuild/openbsd-x64@0.21.5': + /@esbuild/openbsd-x64@0.21.5: + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true optional: true - '@esbuild/sunos-x64@0.18.20': + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true optional: true - '@esbuild/sunos-x64@0.21.4': + /@esbuild/sunos-x64@0.21.4: + resolution: {integrity: sha512-hsKhgZ4teLUaDA6FG/QIu2q0rI6I36tZVfM4DBZv3BG0mkMIdEnMbhc4xwLvLJSS22uWmaVkFkqWgIS0gPIm+A==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true optional: true - '@esbuild/sunos-x64@0.21.5': + /@esbuild/sunos-x64@0.21.5: + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true optional: true - '@esbuild/win32-arm64@0.18.20': + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@esbuild/win32-arm64@0.21.4': + /@esbuild/win32-arm64@0.21.4: + resolution: {integrity: sha512-UUfMgMoXPoA/bvGUNfUBFLCh0gt9dxZYIx9W4rfJr7+hKe5jxxHmfOK8YSH4qsHLLN4Ck8JZ+v7Q5fIm1huErg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@esbuild/win32-arm64@0.21.5': + /@esbuild/win32-arm64@0.21.5: + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@esbuild/win32-ia32@0.18.20': + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true optional: true - '@esbuild/win32-ia32@0.21.4': + /@esbuild/win32-ia32@0.21.4: + resolution: {integrity: sha512-yIxbspZb5kGCAHWm8dexALQ9en1IYDfErzjSEq1KzXFniHv019VT3mNtTK7t8qdy4TwT6QYHI9sEZabONHg+aw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true optional: true - '@esbuild/win32-ia32@0.21.5': + /@esbuild/win32-ia32@0.21.5: + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true optional: true - '@esbuild/win32-x64@0.18.20': + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@esbuild/win32-x64@0.21.4': + /@esbuild/win32-x64@0.21.4: + resolution: {integrity: sha512-sywLRD3UK/qRJt0oBwdpYLBibk7KiRfbswmWRDabuncQYSlf8aLEEUor/oP6KRz8KEG+HoiVLBhPRD5JWjS8Sg==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@esbuild/win32-x64@0.21.5': + /@esbuild/win32-x64@0.21.5: + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@7.32.0)': + /@eslint-community/eslint-utils@4.4.1(eslint@7.32.0): + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 7.32.0 eslint-visitor-keys: 3.4.3 + dev: true - '@eslint/eslintrc@0.4.3': + /@eslint/eslintrc@0.4.3: + resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 debug: 4.3.7 @@ -15213,16 +3747,23 @@ snapshots: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color + dev: true - '@floating-ui/core@0.6.2': {} + /@floating-ui/core@0.6.2: + resolution: {integrity: sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg==} + dev: true - '@floating-ui/dom@0.4.5': + /@floating-ui/dom@0.4.5: + resolution: {integrity: sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==} dependencies: '@floating-ui/core': 0.6.2 + dev: true - '@floating-ui/react-dom-interactions@0.3.1(@types/react@16.14.62)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@floating-ui/react-dom-interactions@0.3.1(@types/react@16.14.62)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-tP2KEh7EHJr5hokSBHcPGojb+AorDNUf0NYfZGg/M+FsMvCOOsSEeEF0O1NDfETIzDnpbHnCs0DuvCFhSMSStg==} + deprecated: Package renamed to @floating-ui/react dependencies: - '@floating-ui/react-dom': 0.6.3(@types/react@16.14.62)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/react-dom': 0.6.3(@types/react@16.14.62)(react-dom@18.3.1)(react@18.3.1) aria-hidden: 1.2.4 point-in-polygon: 1.1.0 use-isomorphic-layout-effect: 1.1.2(@types/react@16.14.62)(react@18.3.1) @@ -15230,8 +3771,13 @@ snapshots: - '@types/react' - react - react-dom + dev: true - '@floating-ui/react-dom@0.6.3(@types/react@16.14.62)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@floating-ui/react-dom@0.6.3(@types/react@16.14.62)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-hC+pS5D6AgS2wWjbmSQ6UR6Kpy+drvWGJIri6e1EDGADTPsCaa4KzCgmCczHrQeInx9tqs81EyDmbKJYY2swKg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' dependencies: '@floating-ui/dom': 0.4.5 react: 18.3.1 @@ -15239,45 +3785,66 @@ snapshots: use-isomorphic-layout-effect: 1.1.2(@types/react@16.14.62)(react@18.3.1) transitivePeerDependencies: - '@types/react' + dev: true - '@formatjs/ecma402-abstract@2.2.3': + /@formatjs/ecma402-abstract@2.2.3: + resolution: {integrity: sha512-aElGmleuReGnk2wtYOzYFmNWYoiWWmf1pPPCYg0oiIQSJj0mjc4eUfzUXaSOJ4S8WzI/cLqnCTWjqz904FT2OQ==} dependencies: '@formatjs/fast-memoize': 2.2.3 '@formatjs/intl-localematcher': 0.5.7 tslib: 2.6.1 + dev: true - '@formatjs/fast-memoize@2.2.3': + /@formatjs/fast-memoize@2.2.3: + resolution: {integrity: sha512-3jeJ+HyOfu8osl3GNSL4vVHUuWFXR03Iz9jjgI7RwjG6ysu/Ymdr0JRCPHfF5yGbTE6JCrd63EpvX1/WybYRbA==} dependencies: tslib: 2.6.1 + dev: true - '@formatjs/icu-messageformat-parser@2.9.3': + /@formatjs/icu-messageformat-parser@2.9.3: + resolution: {integrity: sha512-9L99QsH14XjOCIp4TmbT8wxuffJxGK8uLNO1zNhLtcZaVXvv626N0s4A2qgRCKG3dfYWx9psvGlFmvyVBa6u/w==} dependencies: '@formatjs/ecma402-abstract': 2.2.3 '@formatjs/icu-skeleton-parser': 1.8.7 tslib: 2.6.1 + dev: true - '@formatjs/icu-skeleton-parser@1.8.7': + /@formatjs/icu-skeleton-parser@1.8.7: + resolution: {integrity: sha512-fI+6SmS2g7h3srfAKSWa5dwreU5zNEfon2uFo99OToiLF6yxGE+WikvFSbsvMAYkscucvVmTYNlWlaDPp0n5HA==} dependencies: '@formatjs/ecma402-abstract': 2.2.3 tslib: 2.6.1 + dev: true - '@formatjs/intl-displaynames@6.8.4': + /@formatjs/intl-displaynames@6.8.4: + resolution: {integrity: sha512-HDVNBspDAOW0yTWluWTPHX2fk/9iBO4oST4R96f/IUaPGsFtjsHrpakwc+XDRPa3U5RniSEU2z34ZY0W78+E6Q==} dependencies: '@formatjs/ecma402-abstract': 2.2.3 '@formatjs/intl-localematcher': 0.5.7 tslib: 2.6.1 + dev: true - '@formatjs/intl-listformat@7.7.4': + /@formatjs/intl-listformat@7.7.4: + resolution: {integrity: sha512-lipFspH2MZcoeXxR6WSR/Jy9unzJ/iT0w+gbL8vgv25Ap0S9cUtcDVAce4ECEKI1bDtAvEU3b6+9Dha27gAikA==} dependencies: '@formatjs/ecma402-abstract': 2.2.3 '@formatjs/intl-localematcher': 0.5.7 tslib: 2.6.1 + dev: true - '@formatjs/intl-localematcher@0.5.7': + /@formatjs/intl-localematcher@0.5.7: + resolution: {integrity: sha512-GGFtfHGQVFe/niOZp24Kal5b2i36eE2bNL0xi9Sg/yd0TR8aLjcteApZdHmismP5QQax1cMnZM9yWySUUjJteA==} dependencies: tslib: 2.6.1 + dev: true - '@formatjs/intl@2.10.14(typescript@3.9.10)': + /@formatjs/intl@2.10.14(typescript@3.9.10): + resolution: {integrity: sha512-4CA1EO75i/mSMHdjwfpgRj3Rsdsm6WjALeu/nlzYhBmAPxGu/Ha5GIRHAet5SO05TnpmqxmEGOsskWqFm0IeoA==} + peerDependencies: + typescript: ^4.7 || 5 + peerDependenciesMeta: + typescript: + optional: true dependencies: '@formatjs/ecma402-abstract': 2.2.3 '@formatjs/fast-memoize': 2.2.3 @@ -15286,24 +3853,37 @@ snapshots: '@formatjs/intl-listformat': 7.7.4 intl-messageformat: 10.7.6 tslib: 2.6.1 - optionalDependencies: typescript: 3.9.10 + dev: true - '@humanwhocodes/config-array@0.5.0': + /@humanwhocodes/config-array@0.5.0: + resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color + dev: true - '@humanwhocodes/object-schema@1.2.1': {} + /@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + deprecated: Use @eslint/object-schema instead + dev: true - '@hutson/parse-repository-url@5.0.0': {} + /@hutson/parse-repository-url@5.0.0: + resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==} + engines: {node: '>=10.13.0'} + dev: false - '@iconify/types@2.0.0': {} + /@iconify/types@2.0.0: + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + dev: true - '@iconify/utils@2.1.1': + /@iconify/utils@2.1.1: + resolution: {integrity: sha512-H8xz74JDzDw8f0qLxwIaxFMnFkbXTZNWEufOk3WxaLFHV4h0A2FjIDgNk5LzC0am4jssnjdeJJdRs3UFu3582Q==} dependencies: '@antfu/install-pkg': 0.1.1 '@antfu/utils': 0.7.10 @@ -15313,35 +3893,53 @@ snapshots: local-pkg: 0.4.3 transitivePeerDependencies: - supports-color + dev: true - '@inquirer/figures@1.0.8': {} + /@inquirer/figures@1.0.8: + resolution: {integrity: sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==} + engines: {node: '>=18'} + dev: true - '@isaacs/cliui@8.0.2': + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} dependencies: string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 + string-width-cjs: /string-width@4.2.3 strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 + strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true - '@istanbuljs/load-nyc-config@1.1.0': + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} dependencies: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 js-yaml: 3.14.1 resolve-from: 5.0.0 + dev: true - '@istanbuljs/schema@0.1.3': {} + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true - '@jest/console@24.9.0': + /@jest/console@24.9.0: + resolution: {integrity: sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==} + engines: {node: '>= 6'} dependencies: '@jest/source-map': 24.9.0 chalk: 2.4.2 slash: 2.0.0 + dev: true - '@jest/console@26.6.2': + /@jest/console@26.6.2: + resolution: {integrity: sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@types/node': 14.18.63 @@ -15349,8 +3947,11 @@ snapshots: jest-message-util: 26.6.2 jest-util: 26.6.2 slash: 3.0.0 + dev: true - '@jest/core@26.6.3': + /@jest/core@26.6.3: + resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/console': 26.6.2 '@jest/reporters': 26.6.2 @@ -15386,12 +3987,18 @@ snapshots: - supports-color - ts-node - utf-8-validate + dev: true - '@jest/create-cache-key-function@29.7.0': + /@jest/create-cache-key-function@29.7.0: + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 + dev: true - '@jest/environment@24.9.0': + /@jest/environment@24.9.0: + resolution: {integrity: sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==} + engines: {node: '>= 6'} dependencies: '@jest/fake-timers': 24.9.0 '@jest/transform': 24.9.0 @@ -15399,23 +4006,39 @@ snapshots: jest-mock: 24.9.0 transitivePeerDependencies: - supports-color + dev: true - '@jest/environment@26.6.2': + /@jest/environment@26.6.2: + resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 '@types/node': 14.18.63 jest-mock: 26.6.2 + dev: true + + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true - '@jest/fake-timers@24.9.0': + /@jest/fake-timers@24.9.0: + resolution: {integrity: sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==} + engines: {node: '>= 6'} dependencies: '@jest/types': 24.9.0 jest-message-util: 24.9.0 jest-mock: 24.9.0 transitivePeerDependencies: - supports-color + dev: true - '@jest/fake-timers@26.6.2': + /@jest/fake-timers@26.6.2: + resolution: {integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@sinonjs/fake-timers': 6.0.1 @@ -15423,14 +4046,20 @@ snapshots: jest-message-util: 26.6.2 jest-mock: 26.6.2 jest-util: 26.6.2 + dev: true - '@jest/globals@26.6.2': + /@jest/globals@26.6.2: + resolution: {integrity: sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/environment': 26.6.2 '@jest/types': 26.6.2 expect: 26.6.2 + dev: true - '@jest/reporters@26.6.2': + /@jest/reporters@26.6.2: + resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==} + engines: {node: '>= 10.14.2'} dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 26.6.2 @@ -15460,37 +4089,55 @@ snapshots: node-notifier: 8.0.2 transitivePeerDependencies: - supports-color + dev: true - '@jest/schemas@29.6.3': + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.27.8 + dev: true - '@jest/source-map@24.9.0': + /@jest/source-map@24.9.0: + resolution: {integrity: sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==} + engines: {node: '>= 6'} dependencies: callsites: 3.1.0 graceful-fs: 4.2.11 source-map: 0.6.1 + dev: true - '@jest/source-map@26.6.2': + /@jest/source-map@26.6.2: + resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==} + engines: {node: '>= 10.14.2'} dependencies: callsites: 3.1.0 graceful-fs: 4.2.11 source-map: 0.6.1 + dev: true - '@jest/test-result@24.9.0': + /@jest/test-result@24.9.0: + resolution: {integrity: sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==} + engines: {node: '>= 6'} dependencies: '@jest/console': 24.9.0 '@jest/types': 24.9.0 '@types/istanbul-lib-coverage': 2.0.6 + dev: true - '@jest/test-result@26.6.2': + /@jest/test-result@26.6.2: + resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/console': 26.6.2 '@jest/types': 26.6.2 '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 + dev: true - '@jest/test-sequencer@24.9.0': + /@jest/test-sequencer@24.9.0: + resolution: {integrity: sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==} + engines: {node: '>= 6'} dependencies: '@jest/test-result': 24.9.0 jest-haste-map: 24.9.0 @@ -15500,8 +4147,11 @@ snapshots: - bufferutil - supports-color - utf-8-validate + dev: true - '@jest/test-sequencer@26.6.3': + /@jest/test-sequencer@26.6.3: + resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/test-result': 26.6.2 graceful-fs: 4.2.11 @@ -15514,8 +4164,11 @@ snapshots: - supports-color - ts-node - utf-8-validate + dev: true - '@jest/transform@24.9.0': + /@jest/transform@24.9.0: + resolution: {integrity: sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==} + engines: {node: '>= 6'} dependencies: '@babel/core': 7.26.0 '@jest/types': 24.9.0 @@ -15535,8 +4188,11 @@ snapshots: write-file-atomic: 2.4.1 transitivePeerDependencies: - supports-color + dev: true - '@jest/transform@26.6.2': + /@jest/transform@26.6.2: + resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} + engines: {node: '>= 10.14.2'} dependencies: '@babel/core': 7.26.0 '@jest/types': 26.6.2 @@ -15555,8 +4211,11 @@ snapshots: write-file-atomic: 3.0.3 transitivePeerDependencies: - supports-color + dev: true - '@jest/transform@29.7.0': + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.26.0 '@jest/types': 29.6.3 @@ -15575,30 +4234,42 @@ snapshots: write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color + dev: true - '@jest/types@24.9.0': + /@jest/types@24.9.0: + resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==} + engines: {node: '>= 6'} dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 1.1.2 '@types/yargs': 13.0.12 + dev: true - '@jest/types@26.6.2': + /@jest/types@26.6.2: + resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} + engines: {node: '>= 10.14.2'} dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 14.18.63 + '@types/node': 22.9.0 '@types/yargs': 15.0.19 chalk: 4.1.2 + dev: true - '@jest/types@27.5.1': + /@jest/types@27.5.1: + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 14.18.63 + '@types/node': 22.9.0 '@types/yargs': 16.0.9 chalk: 4.1.2 + dev: true - '@jest/types@29.6.3': + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 @@ -15606,34 +4277,52 @@ snapshots: '@types/node': 14.18.63 '@types/yargs': 17.0.33 chalk: 4.1.2 + dev: true - '@jridgewell/gen-mapping@0.3.5': + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/resolve-uri@3.1.2': {} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': {} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.6': + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/sourcemap-codec@1.5.0': {} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/trace-mapping@0.3.25': + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@jsonjoy.com/base64@1.1.2(tslib@2.6.1)': + /@jsonjoy.com/base64@1.1.2(tslib@2.6.1): + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' dependencies: tslib: 2.6.1 - '@jsonjoy.com/json-pack@1.1.0(tslib@2.6.1)': + /@jsonjoy.com/json-pack@1.1.0(tslib@2.6.1): + resolution: {integrity: sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' dependencies: '@jsonjoy.com/base64': 1.1.2(tslib@2.6.1) '@jsonjoy.com/util': 1.5.0(tslib@2.6.1) @@ -15641,39 +4330,63 @@ snapshots: thingies: 1.21.0(tslib@2.6.1) tslib: 2.6.1 - '@jsonjoy.com/util@1.5.0(tslib@2.6.1)': + /@jsonjoy.com/util@1.5.0(tslib@2.6.1): + resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' dependencies: tslib: 2.6.1 - '@leichtgewicht/ip-codec@2.0.5': {} + /@leichtgewicht/ip-codec@2.0.5: + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@ljharb/resumer@0.0.1': + /@ljharb/resumer@0.0.1: + resolution: {integrity: sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw==} + engines: {node: '>= 0.4'} dependencies: '@ljharb/through': 2.3.13 + dev: false - '@ljharb/through@2.3.13': + /@ljharb/through@2.3.13: + resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 + dev: false - '@loadable/component@5.15.2(react@18.3.1)': + /@loadable/component@5.15.2(react@18.3.1): + resolution: {integrity: sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw==} + engines: {node: '>=8'} + peerDependencies: + react: '>=16.3.0' dependencies: '@babel/runtime': 7.23.6 hoist-non-react-statics: 3.3.2 react: 18.3.1 react-is: 16.13.1 + dev: true - '@makotot/ghostui@2.0.0(react@18.3.1)': + /@makotot/ghostui@2.0.0(react@18.3.1): + resolution: {integrity: sha512-LD6OeMv+yGjpYZNjh34yDTCIE1NegqOtJq5gm4wX6op3QL7K5psTVzMjkWzseBoYj0XOD4g+UJVIZTprfoOPGg==} + engines: {node: '>=10'} + peerDependencies: + react: '>=16' dependencies: react: 18.3.1 + dev: true - '@manypkg/find-root@1.1.0': + /@manypkg/find-root@1.1.0: + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: '@babel/runtime': 7.26.0 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 + dev: true - '@manypkg/get-packages@1.1.3': + /@manypkg/get-packages@1.1.3: + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: '@babel/runtime': 7.26.0 '@changesets/types': 4.1.0 @@ -15681,72 +4394,186 @@ snapshots: fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 + dev: true - '@monaco-editor/loader@1.4.0(monaco-editor@0.25.2)': + /@monaco-editor/loader@1.4.0(monaco-editor@0.25.2): + resolution: {integrity: sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==} + peerDependencies: + monaco-editor: '>= 0.21.0 < 1' dependencies: monaco-editor: 0.25.2 state-local: 1.0.7 + dev: true - '@monaco-editor/react@4.6.0(monaco-editor@0.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@monaco-editor/react@4.6.0(monaco-editor@0.25.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw==} + peerDependencies: + monaco-editor: '>= 0.25.0 < 1' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@monaco-editor/loader': 1.4.0(monaco-editor@0.25.2) monaco-editor: 0.25.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - '@naoak/workerize-transferable@0.1.0(workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))': + /@naoak/workerize-transferable@0.1.0(workerize-loader@2.0.2): + resolution: {integrity: sha512-fDLfuP71IPNP5+zSfxFb52OHgtjZvauRJWbVnpzQ7G7BjcbLjTny0OW1d3ZO806XKpLWNKmeeW3MhE0sy8iwYQ==} + peerDependencies: + workerize-loader: '*' dependencies: - workerize-loader: 2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) + workerize-loader: 2.0.2(webpack@5.96.1) + dev: false - '@napi-rs/nice-android-arm-eabi@1.0.1': + /@napi-rs/nice-android-arm-eabi@1.0.1: + resolution: {integrity: sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-android-arm64@1.0.1': + /@napi-rs/nice-android-arm64@1.0.1: + resolution: {integrity: sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-darwin-arm64@1.0.1': + /@napi-rs/nice-darwin-arm64@1.0.1: + resolution: {integrity: sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-darwin-x64@1.0.1': + /@napi-rs/nice-darwin-x64@1.0.1: + resolution: {integrity: sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-freebsd-x64@1.0.1': + /@napi-rs/nice-freebsd-x64@1.0.1: + resolution: {integrity: sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-linux-arm-gnueabihf@1.0.1': + /@napi-rs/nice-linux-arm-gnueabihf@1.0.1: + resolution: {integrity: sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-linux-arm64-gnu@1.0.1': + /@napi-rs/nice-linux-arm64-gnu@1.0.1: + resolution: {integrity: sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-linux-arm64-musl@1.0.1': + /@napi-rs/nice-linux-arm64-musl@1.0.1: + resolution: {integrity: sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-linux-ppc64-gnu@1.0.1': + /@napi-rs/nice-linux-ppc64-gnu@1.0.1: + resolution: {integrity: sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-linux-riscv64-gnu@1.0.1': + /@napi-rs/nice-linux-riscv64-gnu@1.0.1: + resolution: {integrity: sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-linux-s390x-gnu@1.0.1': + /@napi-rs/nice-linux-s390x-gnu@1.0.1: + resolution: {integrity: sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-linux-x64-gnu@1.0.1': + /@napi-rs/nice-linux-x64-gnu@1.0.1: + resolution: {integrity: sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-linux-x64-musl@1.0.1': + /@napi-rs/nice-linux-x64-musl@1.0.1: + resolution: {integrity: sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-win32-arm64-msvc@1.0.1': + /@napi-rs/nice-win32-arm64-msvc@1.0.1: + resolution: {integrity: sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-win32-ia32-msvc@1.0.1': + /@napi-rs/nice-win32-ia32-msvc@1.0.1: + resolution: {integrity: sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice-win32-x64-msvc@1.0.1': + /@napi-rs/nice-win32-x64-msvc@1.0.1: + resolution: {integrity: sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@napi-rs/nice@1.0.1': + /@napi-rs/nice@1.0.1: + resolution: {integrity: sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==} + engines: {node: '>= 10'} + requiresBuild: true optionalDependencies: '@napi-rs/nice-android-arm-eabi': 1.0.1 '@napi-rs/nice-android-arm64': 1.0.1 @@ -15764,64 +4591,157 @@ snapshots: '@napi-rs/nice-win32-arm64-msvc': 1.0.1 '@napi-rs/nice-win32-ia32-msvc': 1.0.1 '@napi-rs/nice-win32-x64-msvc': 1.0.1 + dev: true optional: true - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: eslint-scope: 5.1.1 + dev: true - '@nodelib/fs.scandir@2.1.5': + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 + dev: true - '@nodelib/fs.stat@2.0.5': {} + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true - '@nodelib/fs.walk@1.2.8': + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + dev: true - '@parcel/watcher-android-arm64@2.5.0': + /@parcel/watcher-android-arm64@2.5.0: + resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-darwin-arm64@2.5.0': + /@parcel/watcher-darwin-arm64@2.5.0: + resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-darwin-x64@2.5.0': + /@parcel/watcher-darwin-x64@2.5.0: + resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-freebsd-x64@2.5.0': + /@parcel/watcher-freebsd-x64@2.5.0: + resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-linux-arm-glibc@2.5.0': + /@parcel/watcher-linux-arm-glibc@2.5.0: + resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-linux-arm-musl@2.5.0': + /@parcel/watcher-linux-arm-musl@2.5.0: + resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.0': + /@parcel/watcher-linux-arm64-glibc@2.5.0: + resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-linux-arm64-musl@2.5.0': + /@parcel/watcher-linux-arm64-musl@2.5.0: + resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-linux-x64-glibc@2.5.0': + /@parcel/watcher-linux-x64-glibc@2.5.0: + resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-linux-x64-musl@2.5.0': + /@parcel/watcher-linux-x64-musl@2.5.0: + resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-win32-arm64@2.5.0': + /@parcel/watcher-win32-arm64@2.5.0: + resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-win32-ia32@2.5.0': + /@parcel/watcher-win32-ia32@2.5.0: + resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true optional: true - '@parcel/watcher-win32-x64@2.5.0': + /@parcel/watcher-win32-x64@2.5.0: + resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@parcel/watcher@2.5.0': + /@parcel/watcher@2.5.0: + resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} + engines: {node: '>= 10.0.0'} + requiresBuild: true dependencies: detect-libc: 1.0.3 is-glob: 4.0.3 @@ -15841,14 +4761,24 @@ snapshots: '@parcel/watcher-win32-arm64': 2.5.0 '@parcel/watcher-win32-ia32': 2.5.0 '@parcel/watcher-win32-x64': 2.5.0 + dev: true optional: true - '@pkgjs/parseargs@0.11.0': + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true optional: true - '@pkgr/core@0.1.1': {} + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dev: true - '@pkgr/utils@2.4.2': + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dependencies: cross-spawn: 7.0.5 fast-glob: 3.3.2 @@ -15856,203 +4786,392 @@ snapshots: open: 9.1.0 picocolors: 1.1.1 tslib: 2.6.1 + dev: true - '@pnpm/config.env-replace@1.1.0': {} + /@pnpm/config.env-replace@1.1.0: + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + dev: true - '@pnpm/network.ca-file@1.0.2': + /@pnpm/network.ca-file@1.0.2: + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} dependencies: graceful-fs: 4.2.10 + dev: true - '@pnpm/npm-conf@2.3.1': + /@pnpm/npm-conf@2.3.1: + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} dependencies: '@pnpm/config.env-replace': 1.1.0 '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 + dev: true - '@polka/url@1.0.0-next.28': {} + /@polka/url@1.0.0-next.28: + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} - '@rc-component/async-validator@5.0.4': + /@rc-component/async-validator@5.0.4: + resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==} + engines: {node: '>=14.x'} dependencies: '@babel/runtime': 7.26.0 - '@rc-component/color-picker@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@rc-component/color-picker@2.0.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@ant-design/fast-color': 2.0.6 '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@rc-component/context@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@rc-component/context@1.4.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@rc-component/mini-decimal@1.1.0': + /@rc-component/mini-decimal@1.1.0: + resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} + engines: {node: '>=8.x'} dependencies: '@babel/runtime': 7.26.0 - '@rc-component/mutate-observer@1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@rc-component/mutate-observer@1.1.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@rc-component/portal@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@rc-component/portal@1.1.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@rc-component/qrcode@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@rc-component/qrcode@1.0.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@rc-component/tour@1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@rc-component/tour@1.15.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) + '@rc-component/trigger': 2.2.5(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@rc-component/trigger@1.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@rc-component/trigger@1.18.3(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Ksr25pXreYe1gX6ayZ1jLrOrl9OAUHUqnuhEx6MeHnNa1zVM5Y2Aj3Q35UrER0ns8D2cJYtmJtVli+i+4eKrvA==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) classnames: 2.3.2 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - '@rc-component/trigger@2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@rc-component/trigger@2.2.5(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-F1EJ4KjFpGAHAjuKvOyZB/6IZDkVx0bHl0M4fQM5wXcmm7lgTgVSSnR3bXwdmS6jOJGHOqfDxIJW3WUvwMIXhQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@remix-run/router@1.21.0': {} + /@remix-run/router@1.21.0: + resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==} + engines: {node: '>=14.0.0'} + dev: true - '@rollup/rollup-android-arm-eabi@4.25.0': + /@rollup/rollup-android-arm-eabi@4.25.0: + resolution: {integrity: sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-android-arm64@4.25.0': + /@rollup/rollup-android-arm64@4.25.0: + resolution: {integrity: sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-darwin-arm64@4.25.0': + /@rollup/rollup-darwin-arm64@4.25.0: + resolution: {integrity: sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-darwin-x64@4.25.0': + /@rollup/rollup-darwin-x64@4.25.0: + resolution: {integrity: sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-freebsd-arm64@4.25.0': + /@rollup/rollup-freebsd-arm64@4.25.0: + resolution: {integrity: sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-freebsd-x64@4.25.0': + /@rollup/rollup-freebsd-x64@4.25.0: + resolution: {integrity: sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.25.0': + /@rollup/rollup-linux-arm-gnueabihf@4.25.0: + resolution: {integrity: sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-arm-musleabihf@4.25.0': + /@rollup/rollup-linux-arm-musleabihf@4.25.0: + resolution: {integrity: sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-arm64-gnu@4.25.0': + /@rollup/rollup-linux-arm64-gnu@4.25.0: + resolution: {integrity: sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-arm64-musl@4.25.0': + /@rollup/rollup-linux-arm64-musl@4.25.0: + resolution: {integrity: sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': + /@rollup/rollup-linux-powerpc64le-gnu@4.25.0: + resolution: {integrity: sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-riscv64-gnu@4.25.0': + /@rollup/rollup-linux-riscv64-gnu@4.25.0: + resolution: {integrity: sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-s390x-gnu@4.25.0': + /@rollup/rollup-linux-s390x-gnu@4.25.0: + resolution: {integrity: sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-x64-gnu@4.25.0': + /@rollup/rollup-linux-x64-gnu@4.25.0: + resolution: {integrity: sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-x64-musl@4.25.0': + /@rollup/rollup-linux-x64-musl@4.25.0: + resolution: {integrity: sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-win32-arm64-msvc@4.25.0': + /@rollup/rollup-win32-arm64-msvc@4.25.0: + resolution: {integrity: sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-win32-ia32-msvc@4.25.0': + /@rollup/rollup-win32-ia32-msvc@4.25.0: + resolution: {integrity: sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-win32-x64-msvc@4.25.0': + /@rollup/rollup-win32-x64-msvc@4.25.0: + resolution: {integrity: sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@samverschueren/stream-to-observable@0.3.1(rxjs@6.6.7)': + /@samverschueren/stream-to-observable@0.3.1(rxjs@6.6.7): + resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zen-observable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zen-observable: + optional: true dependencies: any-observable: 0.3.0(rxjs@6.6.7) - optionalDependencies: rxjs: 6.6.7 transitivePeerDependencies: - zenObservable + dev: true - '@selderee/plugin-htmlparser2@0.11.0': + /@selderee/plugin-htmlparser2@0.11.0: + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} dependencies: domhandler: 5.0.3 selderee: 0.11.0 + dev: true - '@sinclair/typebox@0.27.8': {} + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true - '@sindresorhus/is@0.14.0': {} + /@sindresorhus/is@0.14.0: + resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} + engines: {node: '>=6'} + dev: true - '@sinonjs/commons@1.8.6': + /@sinonjs/commons@1.8.6: + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} dependencies: type-detect: 4.0.8 + dev: true - '@sinonjs/fake-timers@6.0.1': + /@sinonjs/fake-timers@6.0.1: + resolution: {integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==} dependencies: '@sinonjs/commons': 1.8.6 + dev: true - '@sketch-hq/sketch-file-format-ts@6.5.0': {} + /@sketch-hq/sketch-file-format-ts@6.5.0: + resolution: {integrity: sha512-shaGl4ttFDpHjYBoMaZpciOtsi/lKvJ3VfcBYk6+PjjbFs6H5GxPAyhbiSqy3Vmx30aos284pd88QzD3rE6iag==} + dev: true - '@stackblitz/sdk@1.11.0': {} + /@stackblitz/sdk@1.11.0: + resolution: {integrity: sha512-DFQGANNkEZRzFk1/rDP6TcFdM82ycHE+zfl9C/M/jXlH68jiqHWHFMQURLELoD8koxvu/eW5uhg94NSAZlYrUQ==} + dev: true - '@stylelint/postcss-css-in-js@0.37.3(postcss-syntax@0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39))(postcss@7.0.39)': + /@stylelint/postcss-css-in-js@0.37.3(postcss-syntax@0.36.2)(postcss@7.0.39): + resolution: {integrity: sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + peerDependencies: + postcss: '>=7.0.0' + postcss-syntax: '>=0.36.2' dependencies: '@babel/core': 7.26.0 postcss: 7.0.39 postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39) transitivePeerDependencies: - supports-color + dev: true - '@stylelint/postcss-css-in-js@0.38.0(postcss-syntax@0.36.2(postcss@8.4.49))(postcss@8.4.49)': + /@stylelint/postcss-css-in-js@0.38.0(postcss-syntax@0.36.2)(postcss@8.4.49): + resolution: {integrity: sha512-XOz5CAe49kS95p5yRd+DAIWDojTjfmyAQ4bbDlXMdbZTQ5t0ThjSLvWI6JI2uiS7MFurVBkZ6zUqcimzcLTBoQ==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + peerDependencies: + postcss: '>=7.0.0' + postcss-syntax: '>=0.36.2' dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.23.6 postcss: 8.4.49 - postcss-syntax: 0.36.2(postcss@8.4.49) + postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39) transitivePeerDependencies: - supports-color + dev: true - '@stylelint/postcss-markdown@0.36.2(postcss-syntax@0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39))(postcss@7.0.39)': + /@stylelint/postcss-markdown@0.36.2(postcss-syntax@0.36.2)(postcss@7.0.39): + resolution: {integrity: sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==} + deprecated: 'Use the original unforked package instead: postcss-markdown' + peerDependencies: + postcss: '>=7.0.0' + postcss-syntax: '>=0.36.2' dependencies: postcss: 7.0.39 postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39) @@ -16060,40 +5179,85 @@ snapshots: unist-util-find-all-after: 3.0.2 transitivePeerDependencies: - supports-color + dev: true - '@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.26.0)': + /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 + dev: true - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.0)': + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.0): + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 + dev: true - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.0)': + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.0): + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 + dev: true - '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.26.0)': + /@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 + dev: true - '@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.26.0)': + /@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 + dev: true - '@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.26.0)': + /@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 + dev: true - '@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.26.0)': + /@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 + dev: true - '@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.26.0)': + /@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} + engines: {node: '>=12'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 + dev: true - '@svgr/babel-preset@6.5.1(@babel/core@7.26.0)': + /@svgr/babel-preset@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.26.0) @@ -16104,8 +5268,11 @@ snapshots: '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.26.0) '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.26.0) '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.26.0) + dev: true - '@svgr/core@6.5.1': + /@svgr/core@6.5.1: + resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} + engines: {node: '>=10'} dependencies: '@babel/core': 7.26.0 '@svgr/babel-preset': 6.5.1(@babel/core@7.26.0) @@ -16114,13 +5281,21 @@ snapshots: cosmiconfig: 7.1.0 transitivePeerDependencies: - supports-color + dev: true - '@svgr/hast-util-to-babel-ast@6.5.1': + /@svgr/hast-util-to-babel-ast@6.5.1: + resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} + engines: {node: '>=10'} dependencies: '@babel/types': 7.26.0 entities: 4.5.0 + dev: true - '@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1)': + /@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1): + resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==} + engines: {node: '>=10'} + peerDependencies: + '@svgr/core': ^6.0.0 dependencies: '@babel/core': 7.26.0 '@svgr/babel-preset': 6.5.1(@babel/core@7.26.0) @@ -16129,45 +5304,199 @@ snapshots: svg-parser: 2.0.4 transitivePeerDependencies: - supports-color + dev: true - '@svgr/plugin-svgo@6.5.1(@svgr/core@6.5.1)': + /@svgr/plugin-svgo@6.5.1(@svgr/core@6.5.1): + resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==} + engines: {node: '>=10'} + peerDependencies: + '@svgr/core': '*' dependencies: '@svgr/core': 6.5.1 cosmiconfig: 7.1.0 deepmerge: 4.3.1 svgo: 2.8.0 + dev: true + + /@swc/core-darwin-arm64@1.4.2: + resolution: {integrity: sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@swc/core-darwin-arm64@1.9.2: + resolution: {integrity: sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@swc/core-darwin-x64@1.4.2: + resolution: {integrity: sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@swc/core-darwin-x64@1.9.2: + resolution: {integrity: sha512-9gD+bwBz8ZByjP6nZTXe/hzd0tySIAjpDHgkFiUrc+5zGF+rdTwhcNrzxNHJmy6mw+PW38jqII4uspFHUqqxuQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@swc/core-linux-arm-gnueabihf@1.4.2: + resolution: {integrity: sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@swc/core-linux-arm-gnueabihf@1.9.2: + resolution: {integrity: sha512-kYq8ief1Qrn+WmsTWAYo4r+Coul4dXN6cLFjiPZ29Cv5pyU+GFvSPAB4bEdMzwy99rCR0u2P10UExaeCjurjvg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-linux-arm64-gnu@1.4.2: + resolution: {integrity: sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true - '@swc/core-darwin-arm64@1.4.2': + /@swc/core-linux-arm64-gnu@1.9.2: + resolution: {integrity: sha512-n0W4XiXlmEIVqxt+rD3ZpkogsEWUk1jJ+i5bQNgB+1JuWh0fBE8c/blDgTQXa0GB5lTPVDZQussgdNOCnAZwiA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-linux-arm64-musl@1.4.2: + resolution: {integrity: sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@swc/core-linux-arm64-musl@1.9.2: + resolution: {integrity: sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-linux-x64-gnu@1.4.2: + resolution: {integrity: sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@swc/core-darwin-x64@1.4.2': + /@swc/core-linux-x64-gnu@1.9.2: + resolution: {integrity: sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true optional: true - '@swc/core-linux-arm-gnueabihf@1.4.2': + /@swc/core-linux-x64-musl@1.4.2: + resolution: {integrity: sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@swc/core-linux-arm64-gnu@1.4.2': + /@swc/core-linux-x64-musl@1.9.2: + resolution: {integrity: sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true optional: true - '@swc/core-linux-arm64-musl@1.4.2': + /@swc/core-win32-arm64-msvc@1.4.2: + resolution: {integrity: sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@swc/core-linux-x64-gnu@1.4.2': + /@swc/core-win32-arm64-msvc@1.9.2: + resolution: {integrity: sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + requiresBuild: true optional: true - '@swc/core-linux-x64-musl@1.4.2': + /@swc/core-win32-ia32-msvc@1.4.2: + resolution: {integrity: sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true optional: true - '@swc/core-win32-arm64-msvc@1.4.2': + /@swc/core-win32-ia32-msvc@1.9.2: + resolution: {integrity: sha512-nLWBi4vZDdM/LkiQmPCakof8Dh1/t5EM7eudue04V1lIcqx9YHVRS3KMwEaCoHLGg0c312Wm4YgrWQd9vwZ5zQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + requiresBuild: true optional: true - '@swc/core-win32-ia32-msvc@1.4.2': + /@swc/core-win32-x64-msvc@1.4.2: + resolution: {integrity: sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@swc/core-win32-x64-msvc@1.4.2': + /@swc/core-win32-x64-msvc@1.9.2: + resolution: {integrity: sha512-ik/k+JjRJBFkXARukdU82tSVx0CbExFQoQ78qTO682esbYXzjdB5eLVkoUbwen299pnfr88Kn4kyIqFPTje8Xw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true optional: true - '@swc/core@1.4.2(@swc/helpers@0.5.1)': + /@swc/core@1.4.2: + resolution: {integrity: sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 @@ -16182,30 +5511,74 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.4.2 '@swc/core-win32-ia32-msvc': 1.4.2 '@swc/core-win32-x64-msvc': 1.4.2 - '@swc/helpers': 0.5.1 + dev: true - '@swc/counter@0.1.3': {} - - '@swc/helpers@0.5.1': + /@swc/core@1.9.2: + resolution: {integrity: sha512-dYyEkO6mRYtZFpnOsnYzv9rY69fHAHoawYOjGOEcxk9WYtaJhowMdP/w6NcOKnz2G7GlZaenjkzkMa6ZeQeMsg==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.15 + optionalDependencies: + '@swc/core-darwin-arm64': 1.9.2 + '@swc/core-darwin-x64': 1.9.2 + '@swc/core-linux-arm-gnueabihf': 1.9.2 + '@swc/core-linux-arm64-gnu': 1.9.2 + '@swc/core-linux-arm64-musl': 1.9.2 + '@swc/core-linux-x64-gnu': 1.9.2 + '@swc/core-linux-x64-musl': 1.9.2 + '@swc/core-win32-arm64-msvc': 1.9.2 + '@swc/core-win32-ia32-msvc': 1.9.2 + '@swc/core-win32-x64-msvc': 1.9.2 + + /@swc/counter@0.1.3: + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + /@swc/helpers@0.5.1: + resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} dependencies: tslib: 2.6.1 + dev: true - '@swc/jest@0.2.37(@swc/core@1.4.2(@swc/helpers@0.5.1))': + /@swc/jest@0.2.37(@swc/core@1.9.2): + resolution: {integrity: sha512-CR2BHhmXKGxTiFr21DYPRHQunLkX3mNIFGFkxBGji6r9uyIR5zftTOVYj1e0sFNMV2H7mf/+vpaglqaryBtqfQ==} + engines: {npm: '>= 7.0.0'} + peerDependencies: + '@swc/core': '*' dependencies: '@jest/create-cache-key-function': 29.7.0 - '@swc/core': 1.4.2(@swc/helpers@0.5.1) + '@swc/core': 1.9.2 '@swc/counter': 0.1.3 jsonc-parser: 3.3.1 + dev: true - '@swc/types@0.1.12': + /@swc/types@0.1.12: + resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} dependencies: '@swc/counter': 0.1.3 + dev: true - '@szmarczak/http-timer@1.1.2': + /@swc/types@0.1.15: + resolution: {integrity: sha512-XKaZ+dzDIQ9Ot9o89oJQ/aluI17+VvUnIpYJTcZtvv1iYX6MzHh3Ik2CSR7MdPKpPwfZXHBeCingb2b4PoDVdw==} + dependencies: + '@swc/counter': 0.1.3 + + /@szmarczak/http-timer@1.1.2: + resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + engines: {node: '>=6'} dependencies: defer-to-connect: 1.1.3 + dev: true - '@testing-library/jest-dom@5.17.0': + /@testing-library/jest-dom@5.17.0: + resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} + engines: {node: '>=8', npm: '>=6', yarn: '>=1'} dependencies: '@adobe/css-tools': 4.4.0 '@babel/runtime': 7.26.0 @@ -16216,8 +5589,20 @@ snapshots: dom-accessibility-api: 0.5.16 lodash: 4.17.21 redent: 3.0.0 + dev: true - '@testing-library/react-hooks@7.0.2(react-dom@18.3.1(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)': + /@testing-library/react-hooks@7.0.2(react@18.3.1): + resolution: {integrity: sha512-dYxpz8u9m4q1TuzfcUApqi8iFfR6R0FaMbr2hjZJy1uC8z+bO/K4v8Gs9eogGKYQop7QsrBTFkv/BCF7MzD2Cg==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + react-test-renderer: '>=16.9.0' + peerDependenciesMeta: + react-dom: + optional: true + react-test-renderer: + optional: true dependencies: '@babel/runtime': 7.26.0 '@types/react': 18.3.12 @@ -16225,330 +5610,502 @@ snapshots: '@types/react-test-renderer': 18.3.0 react: 18.3.1 react-error-boundary: 3.1.4(react@18.3.1) - optionalDependencies: - react-dom: 18.3.1(react@18.3.1) - react-test-renderer: 18.3.1(react@18.3.1) + dev: true - '@tootallnate/once@1.1.2': {} + /@tootallnate/once@1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: true - '@trysound/sax@0.2.0': {} + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: true - '@types/babel__core@7.20.5': + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: '@babel/parser': 7.26.2 '@babel/types': 7.26.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 + dev: true - '@types/babel__generator@7.6.8': + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: '@babel/types': 7.26.0 + dev: true - '@types/babel__template@7.4.4': + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: '@babel/parser': 7.26.2 '@babel/types': 7.26.0 + dev: true - '@types/babel__traverse@7.20.6': + /@types/babel__traverse@7.20.6: + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} dependencies: '@babel/types': 7.26.0 + dev: true - '@types/body-parser@1.19.5': + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 '@types/node': 14.18.63 - '@types/bonjour@3.5.13': + /@types/bonjour@3.5.13: + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: '@types/node': 14.18.63 - '@types/cheerio@0.22.35': + /@types/cheerio@0.22.35: + resolution: {integrity: sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA==} dependencies: '@types/node': 14.18.63 + dev: true - '@types/connect-history-api-fallback@1.5.4': + /@types/connect-history-api-fallback@1.5.4: + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: '@types/express-serve-static-core': 5.0.1 '@types/node': 14.18.63 - '@types/connect@3.4.38': + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: '@types/node': 14.18.63 - '@types/debug@4.1.12': + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: '@types/ms': 0.7.34 - '@types/enzyme@3.10.18': + /@types/enzyme@3.10.18: + resolution: {integrity: sha512-RaO/TyyHZvXkpzinbMTZmd/S5biU4zxkvDsn22ujC29t9FMSzq8tnn8f2MxQ2P8GVhFRG5jTAL05DXKyTtpEQQ==} dependencies: '@types/cheerio': 0.22.35 '@types/react': 16.14.62 + dev: true - '@types/eslint-scope@3.7.7': + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: '@types/eslint': 9.6.1 '@types/estree': 1.0.6 - '@types/eslint@7.29.0': + /@types/eslint@7.29.0: + resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==} dependencies: '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 + dev: true - '@types/eslint@9.6.1': + /@types/eslint@9.6.1: + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} dependencies: '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 - '@types/estree-jsx@1.0.5': + /@types/estree-jsx@1.0.5: + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} dependencies: '@types/estree': 1.0.6 + dev: true - '@types/estree@1.0.6': {} + /@types/estree@1.0.6: + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/express-serve-static-core@4.19.6': + /@types/express-serve-static-core@4.19.6: + resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} dependencies: '@types/node': 14.18.63 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - '@types/express-serve-static-core@5.0.1': + /@types/express-serve-static-core@5.0.1: + resolution: {integrity: sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==} dependencies: '@types/node': 14.18.63 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - '@types/express@4.17.21': + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.19.6 '@types/qs': 6.9.17 '@types/serve-static': 1.15.7 - '@types/fs-extra@11.0.1': + /@types/fs-extra@11.0.1: + resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 14.18.63 + '@types/node': 22.9.0 + dev: true - '@types/glob@7.2.0': + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 14.18.63 + dev: true - '@types/graceful-fs@4.1.9': + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: '@types/node': 14.18.63 + dev: true - '@types/hapi__joi@17.1.9': {} + /@types/hapi__joi@17.1.9: + resolution: {integrity: sha512-oOMFT8vmCTFncsF1engrs04jatz8/Anwx3De9uxnOK4chgSEgWBvFtpSoJo8u3784JNO+ql5tzRR6phHoRnscQ==} + dev: true - '@types/hast@2.3.10': + /@types/hast@2.3.10: + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} dependencies: '@types/unist': 2.0.11 + dev: true - '@types/hast@3.0.4': + /@types/hast@3.0.4: + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} dependencies: '@types/unist': 3.0.3 + dev: true - '@types/hoist-non-react-statics@3.3.5': + /@types/hoist-non-react-statics@3.3.5: + resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} dependencies: - '@types/react': 18.3.12 + '@types/react': 16.14.62 hoist-non-react-statics: 3.3.2 + dev: true - '@types/html-minifier-terser@6.1.0': {} + /@types/html-minifier-terser@6.1.0: + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + dev: true - '@types/http-errors@2.0.4': {} + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - '@types/http-proxy@1.17.15': + /@types/http-proxy@1.17.15: + resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} dependencies: '@types/node': 14.18.63 - '@types/istanbul-lib-coverage@2.0.6': {} + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true - '@types/istanbul-lib-report@3.0.3': + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} dependencies: '@types/istanbul-lib-coverage': 2.0.6 + dev: true - '@types/istanbul-reports@1.1.2': + /@types/istanbul-reports@1.1.2: + resolution: {integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==} dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-lib-report': 3.0.3 + dev: true - '@types/istanbul-reports@3.0.4': + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} dependencies: '@types/istanbul-lib-report': 3.0.3 + dev: true - '@types/jest@26.0.24': + /@types/jest@26.0.24: + resolution: {integrity: sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==} dependencies: jest-diff: 26.6.2 pretty-format: 26.6.2 + dev: true - '@types/js-cookie@2.2.7': {} + /@types/jest@29.5.14: + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + dev: true + + /@types/js-cookie@2.2.7: + resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} + dev: true - '@types/json-schema@7.0.15': {} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/jsonfile@6.1.4': + /@types/jsonfile@6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 14.18.63 + '@types/node': 22.9.0 + dev: true - '@types/keyv@3.1.4': + /@types/keyv@3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: '@types/node': 14.18.63 + dev: true - '@types/lodash@4.17.13': {} + /@types/lodash@4.17.13: + resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} + dev: true - '@types/mdast@3.0.15': + /@types/mdast@3.0.15: + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} dependencies: '@types/unist': 2.0.11 - '@types/mdast@4.0.4': + /@types/mdast@4.0.4: + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} dependencies: '@types/unist': 3.0.3 + dev: true - '@types/mime@1.3.5': {} + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/minimatch@5.1.2': {} + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true - '@types/minimist@1.2.5': {} + /@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + dev: true - '@types/ms@0.7.34': {} + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node-forge@1.3.11': + /@types/node-forge@1.3.11: + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: '@types/node': 14.18.63 - '@types/node@12.20.55': {} + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: true + + /@types/node@14.18.63: + resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} - '@types/node@14.18.63': {} + /@types/node@17.0.45: + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + dev: true - '@types/node@17.0.45': {} + /@types/node@22.9.0: + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + dependencies: + undici-types: 6.19.8 + dev: true - '@types/normalize-package-data@2.4.4': {} + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/parse-json@4.0.2': {} + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: true - '@types/parse5@6.0.3': {} + /@types/parse5@6.0.3: + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + dev: true - '@types/prettier@2.7.3': {} + /@types/prettier@2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + dev: true - '@types/prop-types@15.7.13': {} + /@types/prop-types@15.7.13: + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + dev: true - '@types/q@1.5.8': {} + /@types/q@1.5.8: + resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} + dev: true - '@types/qs@6.9.17': {} + /@types/qs@6.9.17: + resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} - '@types/ramda@0.29.3': + /@types/ramda@0.29.3: + resolution: {integrity: sha512-Yh/RHkjN0ru6LVhSQtTkCRo6HXkfL9trot/2elzM/yXLJmbLm2v6kJc8yftTnwv1zvUob6TEtqI2cYjdqG3U0Q==} dependencies: types-ramda: 0.29.10 + dev: true - '@types/range-parser@1.2.7': {} + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react-dom@16.9.24': + /@types/react-dom@16.9.24: + resolution: {integrity: sha512-Gcmq2JTDheyWn/1eteqyzzWKSqDjYU6KYsIvH7thb7CR5OYInAWOX+7WnKf6PaU/cbdOc4szJItcDEJO7UGmfA==} dependencies: '@types/react': 16.14.62 + dev: true - '@types/react-dom@18.3.1': + /@types/react-dom@18.3.1: + resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} dependencies: '@types/react': 18.3.12 + dev: true - '@types/react-test-renderer@18.3.0': + /@types/react-test-renderer@18.3.0: + resolution: {integrity: sha512-HW4MuEYxfDbOHQsVlY/XtOvNHftCVEPhJF2pQXXwcUiUF+Oyb0usgp48HSgpK5rt8m9KZb22yqOeZm+rrVG8gw==} dependencies: '@types/react': 18.3.12 + dev: true - '@types/react@16.14.62': + /@types/react@16.14.62: + resolution: {integrity: sha512-BWf7hqninZav6nerxXj+NeZT/mTpDeG6Lk2zREHAy63CrnXoOGPGtNqTFYFN/sqpSaREDP5otVV88axIXmKfGA==} dependencies: '@types/prop-types': 15.7.13 '@types/scheduler': 0.16.8 csstype: 3.1.3 + dev: true - '@types/react@18.3.12': + /@types/react@18.3.12: + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} dependencies: '@types/prop-types': 15.7.13 csstype: 3.1.3 + dev: true - '@types/resolve@1.20.6': {} + /@types/resolve@1.20.6: + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} + dev: true - '@types/responselike@1.0.3': + /@types/responselike@1.0.3: + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: '@types/node': 14.18.63 + dev: true - '@types/retry@0.12.2': {} + /@types/retry@0.12.2: + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} - '@types/sax@1.2.7': + /@types/sax@1.2.7: + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} dependencies: - '@types/node': 14.18.63 + '@types/node': 17.0.45 + dev: true - '@types/scheduler@0.16.8': {} + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + dev: true - '@types/semver@7.5.8': {} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - '@types/send@0.17.4': + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 '@types/node': 14.18.63 - '@types/serve-index@1.9.4': + /@types/serve-index@1.9.4: + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} dependencies: '@types/express': 4.17.21 - '@types/serve-static@1.15.7': + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 '@types/node': 14.18.63 '@types/send': 0.17.4 - '@types/sockjs@0.3.36': + /@types/sockjs@0.3.36: + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: '@types/node': 14.18.63 - '@types/stack-utils@1.0.1': {} + /@types/stack-utils@1.0.1: + resolution: {integrity: sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==} + dev: true - '@types/stack-utils@2.0.3': {} + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: true - '@types/styled-components@5.1.34': + /@types/styled-components@5.1.34: + resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} dependencies: '@types/hoist-non-react-statics': 3.3.5 - '@types/react': 18.3.12 + '@types/react': 16.14.62 csstype: 3.1.3 + dev: true - '@types/stylis@4.2.5': {} + /@types/stylis@4.2.5: + resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==} + dev: false - '@types/supports-color@8.1.3': {} + /@types/supports-color@8.1.3: + resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} + dev: true - '@types/testing-library__jest-dom@5.14.9': + /@types/testing-library__jest-dom@5.14.9: + resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} dependencies: - '@types/jest': 26.0.24 + '@types/jest': 29.5.14 + dev: true - '@types/unist@2.0.11': {} + /@types/unist@2.0.11: + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - '@types/unist@3.0.3': {} + /@types/unist@3.0.3: + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + dev: true - '@types/webpack-env@1.18.5': {} + /@types/webpack-env@1.18.5: + resolution: {integrity: sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==} + dev: true - '@types/ws@8.5.13': + /@types/ws@8.5.13: + resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} dependencies: '@types/node': 14.18.63 - '@types/yargs-parser@21.0.3': {} + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true - '@types/yargs@13.0.12': + /@types/yargs@13.0.12: + resolution: {integrity: sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==} dependencies: '@types/yargs-parser': 21.0.3 + dev: true - '@types/yargs@15.0.19': + /@types/yargs@15.0.19: + resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} dependencies: '@types/yargs-parser': 21.0.3 + dev: true - '@types/yargs@16.0.9': + /@types/yargs@16.0.9: + resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} dependencies: '@types/yargs-parser': 21.0.3 + dev: true - '@types/yargs@17.0.33': + /@types/yargs@17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} dependencies: '@types/yargs-parser': 21.0.3 + dev: true - '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@3.9.10))(eslint@7.32.0)(typescript@3.9.10)': + /@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@3.9.10): + resolution: {integrity: sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + '@typescript-eslint/parser': ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: '@typescript-eslint/experimental-utils': 4.33.0(eslint@7.32.0)(typescript@3.9.10) '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@3.9.10) @@ -16560,14 +6117,23 @@ snapshots: regexpp: 3.2.0 semver: 7.6.3 tsutils: 3.21.0(typescript@3.9.10) - optionalDependencies: typescript: 3.9.10 transitivePeerDependencies: - supports-color + dev: true - '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.6.3))(eslint@7.32.0)(typescript@5.6.3)': + /@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@4.9.5): + resolution: {integrity: sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + '@typescript-eslint/parser': ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@typescript-eslint/experimental-utils': 4.33.0(eslint@7.32.0)(typescript@5.6.3) + '@typescript-eslint/experimental-utils': 4.33.0(eslint@7.32.0)(typescript@4.9.5) '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@5.6.3) '@typescript-eslint/scope-manager': 4.33.0 debug: 4.3.7 @@ -16576,13 +6142,17 @@ snapshots: ignore: 5.3.2 regexpp: 3.2.0 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color + dev: true - '@typescript-eslint/experimental-utils@4.33.0(eslint@7.32.0)(typescript@3.9.10)': + /@typescript-eslint/experimental-utils@4.33.0(eslint@7.32.0)(typescript@3.9.10): + resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: '*' dependencies: '@types/json-schema': 7.0.15 '@typescript-eslint/scope-manager': 4.33.0 @@ -16594,72 +6164,100 @@ snapshots: transitivePeerDependencies: - supports-color - typescript + dev: true - '@typescript-eslint/experimental-utils@4.33.0(eslint@7.32.0)(typescript@4.9.5)': - dependencies: - '@types/json-schema': 7.0.15 - '@typescript-eslint/scope-manager': 4.33.0 - '@typescript-eslint/types': 4.33.0 - '@typescript-eslint/typescript-estree': 4.33.0(typescript@5.6.3) - eslint: 7.32.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@7.32.0) - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/experimental-utils@4.33.0(eslint@7.32.0)(typescript@5.6.3)': + /@typescript-eslint/experimental-utils@4.33.0(eslint@7.32.0)(typescript@4.9.5): + resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: '*' dependencies: '@types/json-schema': 7.0.15 '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 - '@typescript-eslint/typescript-estree': 4.33.0(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5) eslint: 7.32.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0(eslint@7.32.0) transitivePeerDependencies: - supports-color - typescript + dev: true - '@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@3.9.10)': + /@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@3.9.10): + resolution: {integrity: sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 '@typescript-eslint/typescript-estree': 4.33.0(typescript@3.9.10) debug: 4.3.7 eslint: 7.32.0 - optionalDependencies: typescript: 3.9.10 transitivePeerDependencies: - supports-color + dev: true - '@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.6.3)': + /@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.6.3): + resolution: {integrity: sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 '@typescript-eslint/typescript-estree': 4.33.0(typescript@5.6.3) debug: 4.3.7 eslint: 7.32.0 - optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color + dev: true - '@typescript-eslint/scope-manager@4.33.0': + /@typescript-eslint/scope-manager@4.33.0: + resolution: {integrity: sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: '@typescript-eslint/types': 4.33.0 '@typescript-eslint/visitor-keys': 4.33.0 + dev: true - '@typescript-eslint/scope-manager@5.62.0': + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 + dev: true - '@typescript-eslint/types@4.33.0': {} + /@typescript-eslint/types@4.33.0: + resolution: {integrity: sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dev: true - '@typescript-eslint/types@5.62.0': {} + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - '@typescript-eslint/typescript-estree@4.33.0(typescript@3.9.10)': + /@typescript-eslint/typescript-estree@4.33.0(typescript@3.9.10): + resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: '@typescript-eslint/types': 4.33.0 '@typescript-eslint/visitor-keys': 4.33.0 @@ -16668,12 +6266,40 @@ snapshots: is-glob: 4.0.3 semver: 7.6.3 tsutils: 3.21.0(typescript@3.9.10) - optionalDependencies: typescript: 3.9.10 transitivePeerDependencies: - supports-color + dev: true + + /@typescript-eslint/typescript-estree@4.33.0(typescript@4.9.5): + resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 4.33.0 + '@typescript-eslint/visitor-keys': 4.33.0 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.3 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/typescript-estree@4.33.0(typescript@5.6.3)': + /@typescript-eslint/typescript-estree@4.33.0(typescript@5.6.3): + resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: '@typescript-eslint/types': 4.33.0 '@typescript-eslint/visitor-keys': 4.33.0 @@ -16682,12 +6308,19 @@ snapshots: is-glob: 4.0.3 semver: 7.6.3 tsutils: 3.21.0(typescript@5.6.3) - optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color + dev: true - '@typescript-eslint/typescript-estree@5.62.0(typescript@3.9.10)': + /@typescript-eslint/typescript-estree@5.62.0(typescript@3.9.10): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -16696,12 +6329,16 @@ snapshots: is-glob: 4.0.3 semver: 7.6.3 tsutils: 3.21.0(typescript@3.9.10) - optionalDependencies: typescript: 3.9.10 transitivePeerDependencies: - supports-color + dev: true - '@typescript-eslint/utils@5.62.0(eslint@7.32.0)(typescript@3.9.10)': + /@typescript-eslint/utils@5.62.0(eslint@7.32.0)(typescript@3.9.10): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@7.32.0) '@types/json-schema': 7.0.15 @@ -16715,24 +6352,34 @@ snapshots: transitivePeerDependencies: - supports-color - typescript + dev: true - '@typescript-eslint/visitor-keys@4.33.0': + /@typescript-eslint/visitor-keys@4.33.0: + resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: '@typescript-eslint/types': 4.33.0 eslint-visitor-keys: 2.1.0 + dev: true - '@typescript-eslint/visitor-keys@5.62.0': + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 + dev: true - '@umijs/ast@4.3.31': + /@umijs/ast@4.3.31: + resolution: {integrity: sha512-5kLHFwwpB6agbU+gFVgGMzFS69IEW7EmDqAQn45DINSW8H2iy6mm9cp4G0vf4xo/vU/bLqT9+39Uz+4YtZvkEg==} dependencies: '@umijs/bundler-utils': 4.3.31 transitivePeerDependencies: - supports-color + dev: true - '@umijs/babel-preset-umi@4.3.31': + /@umijs/babel-preset-umi@4.3.31: + resolution: {integrity: sha512-aoRRl5+FRwu5QL5cJK0kZY+rNcnvjDWJgnihBrSpUHqTu+kIX8iWQG3vb6m8qAeTSR1828XL5EsrZ37kvu/LZQ==} dependencies: '@babel/runtime': 7.23.6 '@bloomberg/record-tuple-polyfill': 0.0.4 @@ -16741,8 +6388,11 @@ snapshots: core-js: 3.34.0 transitivePeerDependencies: - supports-color + dev: true - '@umijs/bundler-esbuild@4.3.31': + /@umijs/bundler-esbuild@4.3.31: + resolution: {integrity: sha512-KgdnsKj9A00YWwrcvQCuoVpqaoviL3+yWarltkwWKInqDnHogOS30TiExAlpU0RhJIU3GNy6PVKJ/msAC/1OJA==} + hasBin: true dependencies: '@umijs/bundler-utils': 4.3.31 '@umijs/utils': 4.3.31 @@ -16752,8 +6402,10 @@ snapshots: postcss-preset-env: 7.5.0(postcss@8.4.49) transitivePeerDependencies: - supports-color + dev: true - '@umijs/bundler-mako@0.9.5': + /@umijs/bundler-mako@0.9.5: + resolution: {integrity: sha512-i9yTP/NHdogI9BXFMRTAQ9EISH4wb2VYtlV8iUAjI+8xAw0D27VrglH1RoNZebne948m3u3dihrw6LJ66AyJmg==} dependencies: '@umijs/bundler-utils': 4.3.31 '@umijs/mako': 0.9.5 @@ -16769,8 +6421,10 @@ snapshots: webpack-5-chain: 8.0.1 transitivePeerDependencies: - supports-color + dev: true - '@umijs/bundler-utils@4.3.31': + /@umijs/bundler-utils@4.3.31: + resolution: {integrity: sha512-A2+HpPZ1LntVxpdr/rIs6ovzEbjmgcLjg94QT6V75zg44XT7iGHp+ofC5jMdTvpt5fXBxsf2Q1KKXhf9sTfqWA==} dependencies: '@umijs/utils': 4.3.31 esbuild: 0.21.4 @@ -16779,19 +6433,22 @@ snapshots: spdy: 4.0.2 transitivePeerDependencies: - supports-color + dev: true - '@umijs/bundler-vite@4.3.31(@types/node@14.18.63)(lightningcss@1.22.1)(postcss@8.4.49)(rollup@4.25.0)(sass@1.80.6)(sugarss@2.0.0)(terser@5.36.0)': + /@umijs/bundler-vite@4.3.31(@types/node@14.18.63)(postcss@8.4.49)(sass@1.80.7): + resolution: {integrity: sha512-iQVybOIbNBRTKsN/QoP20+SCpFOSxjiZbKzu9VPf5prTwLlO0/AOc/HLFpTAiBWftIBbCYEXj6KPBlcL1OxJ2g==} + hasBin: true dependencies: '@svgr/core': 6.5.1 '@umijs/bundler-utils': 4.3.31 '@umijs/utils': 4.3.31 - '@vitejs/plugin-react': 4.0.0(vite@4.5.2(@types/node@14.18.63)(less@4.1.3)(lightningcss@1.22.1)(sass@1.80.6)(sugarss@2.0.0)(terser@5.36.0)) + '@vitejs/plugin-react': 4.0.0(vite@4.5.2) core-js: 3.34.0 less: 4.1.3 postcss-preset-env: 7.5.0(postcss@8.4.49) - rollup-plugin-visualizer: 5.9.0(rollup@4.25.0) + rollup-plugin-visualizer: 5.9.0 systemjs: 6.15.1 - vite: 4.5.2(@types/node@14.18.63)(less@4.1.3)(lightningcss@1.22.1)(sass@1.80.6)(sugarss@2.0.0)(terser@5.36.0) + vite: 4.5.2(@types/node@14.18.63)(less@4.1.3)(sass@1.80.7) transitivePeerDependencies: - '@types/node' - lightningcss @@ -16802,8 +6459,11 @@ snapshots: - sugarss - supports-color - terser + dev: true - '@umijs/bundler-webpack@4.3.31(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))': + /@umijs/bundler-webpack@4.3.31(typescript@3.9.10)(webpack-dev-server@5.1.0)(webpack@5.96.1): + resolution: {integrity: sha512-4UJrNYiax1ImET8Bk9Um+ChS1cyHFaU8QstI9INg97V1zpvAOFrIRHPUKAx/Vd5+BqUL3CX8KupkkT7laW42nQ==} + hasBin: true dependencies: '@svgr/core': 6.5.1 '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) @@ -16813,12 +6473,12 @@ snapshots: '@umijs/bundler-utils': 4.3.31 '@umijs/case-sensitive-paths-webpack-plugin': 1.0.1 '@umijs/mfsu': 4.3.31 - '@umijs/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(type-fest@4.26.1)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) + '@umijs/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(webpack-dev-server@5.1.0)(webpack@5.96.1) '@umijs/utils': 4.3.31 cors: 2.8.5 - css-loader: 6.7.1(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) + css-loader: 6.7.1(webpack@5.96.1) es5-imcompatible-versions: 0.1.90 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@3.9.10)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@3.9.10)(webpack@5.96.1) jest-worker: 29.4.3 lightningcss: 1.22.1 node-libs-browser: 2.2.1 @@ -16836,46 +6496,109 @@ snapshots: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve + dev: true - '@umijs/case-sensitive-paths-webpack-plugin@1.0.1': {} + /@umijs/case-sensitive-paths-webpack-plugin@1.0.1: + resolution: {integrity: sha512-kDKJ8yTarxwxGJDInG33hOpaQRZ//XpNuuznQ/1Mscypw6kappzFmrBr2dOYave++K7JHouoANF354UpbEQw0Q==} + dev: true - '@umijs/core@4.3.31': + /@umijs/core@4.3.31: + resolution: {integrity: sha512-vUwa4WNyrQijvk23JEP8cGKdSYasRtPwMELanBbsmh+5N2Oratn5ST4DBCstrq90o28RPnAl7XJ2nJkWQgY8hQ==} dependencies: '@umijs/bundler-utils': 4.3.31 '@umijs/utils': 4.3.31 transitivePeerDependencies: - supports-color + dev: true - '@umijs/did-you-know@1.0.3': {} + /@umijs/did-you-know@1.0.3: + resolution: {integrity: sha512-9EZ+rgY9+2HEaE+Z9dGkal2ccw8L4uuz77tCB5WpskW7NBZX5nOj82sqF/shEtA5tU3SWO/Mi4n35K3iONvDtw==} + dev: true - '@umijs/es-module-parser-darwin-arm64@0.0.7': + /@umijs/es-module-parser-darwin-arm64@0.0.7: + resolution: {integrity: sha512-1QeNupekuVYVvL4UHyCRq4ISP2PNk4rDd9UOPONW+KpqTyP9p7RfgGpwB0VLPaFSu2ADtm0XZyIaYEGPY6zuDw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@umijs/es-module-parser-darwin-x64@0.0.7': + /@umijs/es-module-parser-darwin-x64@0.0.7: + resolution: {integrity: sha512-FBFmfigmToPc9qBCW7wHiTYpqnLdPbAvoMGOydzAu2NspdPEF7TfILcr8vCPNbNe3vCobS+T/YM1dP+SagERlA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@umijs/es-module-parser-linux-arm-gnueabihf@0.0.7': + /@umijs/es-module-parser-linux-arm-gnueabihf@0.0.7: + resolution: {integrity: sha512-AXfmg3htkadLGsXUyiyrTig4omGCWIN4l+HS7Qapqv0wlfFYSpC0KPemjyBQgzXO70tDcT+1FNhGjIy+yr2pIQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@umijs/es-module-parser-linux-arm64-gnu@0.0.7': + /@umijs/es-module-parser-linux-arm64-gnu@0.0.7: + resolution: {integrity: sha512-2wSdChFc39fPJwvS8tRq+jx8qNlIwrjRk1hb3N5o0rJR+rqt+ceAyNPbYwpNBmUHW7xtmDQvJUeinvr7hIBP+w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@umijs/es-module-parser-linux-arm64-musl@0.0.7': + /@umijs/es-module-parser-linux-arm64-musl@0.0.7: + resolution: {integrity: sha512-cqQffARWkmQ3n1RYNKZR3aD6X8YaP6u1maASjDgPQOpZMAlv/OSDrM/7iGujWTs0PD0haockNG9/DcP6lgPHMw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@umijs/es-module-parser-linux-x64-gnu@0.0.7': + /@umijs/es-module-parser-linux-x64-gnu@0.0.7: + resolution: {integrity: sha512-PHrKHtT665Za0Ydjch4ACrNpRU+WIIden12YyF1CtMdhuLDSoU6UfdhF3NoDbgEUcXVDX/ftOqmj0SbH3R1uew==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@umijs/es-module-parser-linux-x64-musl@0.0.7': + /@umijs/es-module-parser-linux-x64-musl@0.0.7: + resolution: {integrity: sha512-cyZvUK5lcECLWzLp/eU1lFlCETcz+LEb+wrdARQSST1dgoIGZsT4cqM1WzYmdZNk3o883tiZizLt58SieEiHBQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@umijs/es-module-parser-win32-arm64-msvc@0.0.7': + /@umijs/es-module-parser-win32-arm64-msvc@0.0.7: + resolution: {integrity: sha512-V7WxnUI88RboSl0RWLNQeKBT7EDW35fW6Tn92zqtoHHxrhAIL9DtDyvC8REP4qTxeZ6Oej/Ax5I6IjsLx3yTOg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@umijs/es-module-parser-win32-x64-msvc@0.0.7': + /@umijs/es-module-parser-win32-x64-msvc@0.0.7: + resolution: {integrity: sha512-X3Pqy0l38hg6wMPquPeMHuoHU+Cx+wzyz32SVYCta+RPJQ7n9PjrEBiIuVAw5+GJZjSABN7LVr8u/n0RZT9EQA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@umijs/es-module-parser@0.0.7': + /@umijs/es-module-parser@0.0.7: + resolution: {integrity: sha512-x47CMi/Hw7Nkz3RXTUqlldH/UM+Tcmw2PziV3k+itJqTFJc8oVx3lzdUgCnG+eL3ZtmLPbOEBhPb30V0NytNDQ==} + engines: {node: '>= 10'} optionalDependencies: '@umijs/es-module-parser-darwin-arm64': 0.0.7 '@umijs/es-module-parser-darwin-x64': 0.0.7 @@ -16886,8 +6609,11 @@ snapshots: '@umijs/es-module-parser-linux-x64-musl': 0.0.7 '@umijs/es-module-parser-win32-arm64-msvc': 0.0.7 '@umijs/es-module-parser-win32-x64-msvc': 0.0.7 + dev: true - '@umijs/fabric@2.14.1': + /@umijs/fabric@2.14.1: + resolution: {integrity: sha512-fOyXcbViOB+/jW+g2rCiK9XjSZVn4OzFuMZpSCriCdR/KxhxLTokvJWFm3CzBEmg9vXfrBFQ4c/ykmqoVacHtw==} + hasBin: true dependencies: '@babel/core': 7.26.0 '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@7.32.0) @@ -16896,14 +6622,14 @@ snapshots: '@babel/preset-env': 7.26.0(@babel/core@7.26.0) '@babel/preset-react': 7.25.9(@babel/core@7.26.0) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) - '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.6.3))(eslint@7.32.0)(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@4.9.5) '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@5.6.3) chalk: 4.1.2 eslint: 7.32.0 eslint-config-prettier: 8.10.0(eslint@7.32.0) eslint-formatter-pretty: 4.1.0 eslint-plugin-babel: 5.3.1(eslint@7.32.0) - eslint-plugin-jest: 24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@4.9.5))(eslint@7.32.0)(typescript@4.9.5))(eslint@7.32.0)(typescript@4.9.5) + eslint-plugin-jest: 24.7.0(@typescript-eslint/eslint-plugin@4.33.0)(eslint@7.32.0)(typescript@4.9.5) eslint-plugin-promise: 6.6.0(eslint@7.32.0) eslint-plugin-react: 7.37.2(eslint@7.32.0) eslint-plugin-react-hooks: 4.6.2(eslint@7.32.0) @@ -16923,26 +6649,30 @@ snapshots: - postcss-jsx - postcss-markdown - supports-color + dev: true - '@umijs/history@5.3.1': + /@umijs/history@5.3.1: + resolution: {integrity: sha512-/e0cEGrR2bIWQD7pRl3dl9dcyRGeC9hoW0OCvUTT/hjY0EfUrkd6G8ZanVghPMpDuY5usxq9GVcvrT8KNXLWvA==} dependencies: '@babel/runtime': 7.23.6 query-string: 6.14.1 + dev: true - '@umijs/lint@4.3.31(eslint@7.32.0)(jest@26.6.3)(stylelint@13.13.1)(typescript@3.9.10)': + /@umijs/lint@4.3.31(eslint@7.32.0)(jest@26.6.3)(stylelint@14.16.1)(typescript@3.9.10): + resolution: {integrity: sha512-cPLC0o9tDhyOhRp5N1fPciL2u5eEKCZFfkKTd7MtgmSZ7wl0T9X8aMLzjtuq4hNQ6CtXje/dOHDVW8lYfMzLAA==} dependencies: '@babel/core': 7.23.6 '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@7.32.0) - '@stylelint/postcss-css-in-js': 0.38.0(postcss-syntax@0.36.2(postcss@8.4.49))(postcss@8.4.49) - '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@3.9.10))(eslint@7.32.0)(typescript@3.9.10) + '@stylelint/postcss-css-in-js': 0.38.0(postcss-syntax@0.36.2)(postcss@8.4.49) + '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@3.9.10) '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@3.9.10) '@umijs/babel-preset-umi': 4.3.31 - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@3.9.10))(eslint@7.32.0)(typescript@3.9.10))(eslint@7.32.0)(jest@26.6.3)(typescript@3.9.10) + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@4.33.0)(eslint@7.32.0)(jest@26.6.3)(typescript@3.9.10) eslint-plugin-react: 7.33.2(eslint@7.32.0) eslint-plugin-react-hooks: 4.6.0(eslint@7.32.0) postcss: 8.4.49 - postcss-syntax: 0.36.2(postcss@8.4.49) - stylelint-config-standard: 25.0.0(stylelint@13.13.1) + postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39) + stylelint-config-standard: 25.0.0(stylelint@14.16.1) transitivePeerDependencies: - eslint - jest @@ -16954,32 +6684,84 @@ snapshots: - stylelint - supports-color - typescript + dev: true - '@umijs/mako-darwin-arm64@0.9.5': + /@umijs/mako-darwin-arm64@0.9.5: + resolution: {integrity: sha512-2WCIp8ypVgIqXb8KS/pOp/elQYkT4bcqTLHsQx7FsMVS4iTDH3bIIfr2PbdBN6fgXZAZViync5kdk/vouy0zAA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@umijs/mako-darwin-x64@0.9.5': + /@umijs/mako-darwin-x64@0.9.5: + resolution: {integrity: sha512-DmubJdeQSmIdwIihvj5xmammm6erqgEUl/hxaBEKxTL/xuoFh8KXTCt8Q/Avk/M/o+tlSF6ffXQYCgTB+M2XeA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@umijs/mako-linux-arm64-gnu@0.9.5': + /@umijs/mako-linux-arm64-gnu@0.9.5: + resolution: {integrity: sha512-XXIwvHtsEkXvVFnWw4UCjFcbXvFOiq7SHFb4Puxd8zmROr5/dxrhukn9ta43VePMhb34mCdgWaC3vVITIz5DEg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@umijs/mako-linux-arm64-musl@0.9.5': + /@umijs/mako-linux-arm64-musl@0.9.5: + resolution: {integrity: sha512-Hwg44bT5FCP5AcQ0IpMzTDP4hypaB6KoNrG2QVeqxhnkitXkixpsex09vkaPYXrY5bQu/MkNoJCJDnhEJp/v/Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@umijs/mako-linux-x64-gnu@0.9.5': + /@umijs/mako-linux-x64-gnu@0.9.5: + resolution: {integrity: sha512-Dd+D9F/KVWnxVyKr/66kxscIKIVUMEFKrevZ10Z+VbiRmokXeTUNJkxfZ2tIj9h/pHqgVbSUykyWon1dQsQRlw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@umijs/mako-linux-x64-musl@0.9.5': + /@umijs/mako-linux-x64-musl@0.9.5: + resolution: {integrity: sha512-Aoj2pbdKg1NTHWd9vFNQiNHPeBo6gszTZSOJq9N44wI6dS92OuWd0z/NNG0LAu+fb2rMD3fCr1zHJbO7ietNxw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@umijs/mako-win32-ia32-msvc@0.9.5': + /@umijs/mako-win32-ia32-msvc@0.9.5: + resolution: {integrity: sha512-JjePjho+TzgeB02s6oXG8KEpjOojwSFtv3vS0xJhKO0SPv4j7zk0s+5KNv3ZLy2Hx1hKITvmtoQFx6CAmFrKEQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true optional: true - '@umijs/mako-win32-x64-msvc@0.9.5': + /@umijs/mako-win32-x64-msvc@0.9.5: + resolution: {integrity: sha512-5UUcvZlGiJ7FsvjfuV8pk5KbLFCsPZOQ0iFAjzXjoTOIBFQ8Zh6QI5pjiDpbnJWbcPX9NNmNGdgqayMfq1q60w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@umijs/mako@0.9.5': + /@umijs/mako@0.9.5: + resolution: {integrity: sha512-NNuPXHwkXifFRhRAlAgu/vYwGExNNJmExtonJTrao7Yr3QEwPToEgPtsJQrGVKZEEIn/IiTb2YDF/ZAzO84Pxw==} + engines: {node: '>= 16'} + hasBin: true dependencies: '@swc/helpers': 0.5.1 '@types/resolve': 1.20.6 @@ -17003,8 +6785,10 @@ snapshots: '@umijs/mako-linux-x64-musl': 0.9.5 '@umijs/mako-win32-ia32-msvc': 0.9.5 '@umijs/mako-win32-x64-msvc': 0.9.5 + dev: true - '@umijs/mfsu@4.3.31': + /@umijs/mfsu@4.3.31: + resolution: {integrity: sha512-fnUg1S24OvOa57TwBy9gDcb5q7zxLYTUcjjknn54Kj3ytl8xMn1ozK1Xhynq2tnqc8yqHC8H3r3cjdSZ4aMwsg==} dependencies: '@umijs/bundler-esbuild': 4.3.31 '@umijs/bundler-utils': 4.3.31 @@ -17013,12 +6797,16 @@ snapshots: is-equal: 1.7.0 transitivePeerDependencies: - supports-color + dev: true - '@umijs/plugin-run@4.3.31': + /@umijs/plugin-run@4.3.31: + resolution: {integrity: sha512-GSv3GPqpludK5KHH1EItHib/tg/hBv3XZH06dWfOGXKr5eUAojztN/dIMJD+0XFtFEmS1iiIJKgRtOrU1ofknQ==} dependencies: tsx: 3.12.2 + dev: true - '@umijs/preset-umi@4.3.31(@types/node@14.18.63)(@types/react@16.14.62)(lightningcss@1.22.1)(rollup@4.25.0)(sass@1.80.6)(sugarss@2.0.0)(terser@5.36.0)(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))': + /@umijs/preset-umi@4.3.31(@types/node@14.18.63)(@types/react@16.14.62)(sass@1.80.7)(typescript@3.9.10)(webpack-dev-server@5.1.0)(webpack@5.96.1): + resolution: {integrity: sha512-UmIdVkr2PkZsbJG1QaaqEvJAAMiG4RpoXoDdbo/IGMgCy6juaukkmEUcNa/nDG+Pm8oskQKUwBdNFY5jLqMaYg==} dependencies: '@iconify/utils': 2.1.1 '@svgr/core': 6.5.1 @@ -17027,27 +6815,27 @@ snapshots: '@umijs/bundler-esbuild': 4.3.31 '@umijs/bundler-mako': 0.9.5 '@umijs/bundler-utils': 4.3.31 - '@umijs/bundler-vite': 4.3.31(@types/node@14.18.63)(lightningcss@1.22.1)(postcss@8.4.49)(rollup@4.25.0)(sass@1.80.6)(sugarss@2.0.0)(terser@5.36.0) - '@umijs/bundler-webpack': 4.3.31(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) + '@umijs/bundler-vite': 4.3.31(@types/node@14.18.63)(postcss@8.4.49)(sass@1.80.7) + '@umijs/bundler-webpack': 4.3.31(typescript@3.9.10)(webpack-dev-server@5.1.0)(webpack@5.96.1) '@umijs/core': 4.3.31 '@umijs/did-you-know': 1.0.3 '@umijs/es-module-parser': 0.0.7 '@umijs/history': 5.3.1 '@umijs/mfsu': 4.3.31 '@umijs/plugin-run': 4.3.31 - '@umijs/renderer-react': 4.3.31(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@umijs/renderer-react': 4.3.31(react-dom@18.3.1)(react@18.3.1) '@umijs/server': 4.3.31 '@umijs/ui': 3.0.1 '@umijs/utils': 4.3.31 '@umijs/zod2ts': 4.3.31 babel-plugin-dynamic-import-node: 2.3.3 babel-plugin-react-compiler: 0.0.0-experimental-c23de8d-20240515 - click-to-react-component: 1.1.0(@types/react@16.14.62)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + click-to-react-component: 1.1.0(@types/react@16.14.62)(react-dom@18.3.1)(react@18.3.1) core-js: 3.34.0 current-script-polyfill: 1.0.0 enhanced-resolve: 5.9.3 fast-glob: 3.2.12 - html-webpack-plugin: 5.5.0(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) + html-webpack-plugin: 5.5.0(webpack@5.96.1) less-plugin-resolve: 1.0.2 path-to-regexp: 1.7.0 postcss: 8.4.49 @@ -17055,7 +6843,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.3.0(react@18.3.1) - react-router-dom: 6.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router-dom: 6.3.0(react-dom@18.3.1)(react@18.3.1) regenerator-runtime: 0.13.11 transitivePeerDependencies: - '@types/node' @@ -17075,8 +6863,33 @@ snapshots: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve + dev: true - '@umijs/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.0)(type-fest@4.26.1)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)))': + /@umijs/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.0)(webpack-dev-server@5.1.0)(webpack@5.96.1): + resolution: {integrity: sha512-RtFvB+/GmjRhpHcqNgnw8iWZpTlxOnmNxi8eDcecxMmxmSgeDj25LV0jr4Q6rOhv3GTIfVGBhkwz+khGT5tfmg==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <5.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 @@ -17088,103 +6901,135 @@ snapshots: react-refresh: 0.14.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)) - optionalDependencies: - type-fest: 4.26.1 - webpack-dev-server: 5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + webpack-dev-server: 5.1.0(webpack-cli@5.1.4)(webpack@5.96.1) + dev: true - '@umijs/renderer-react@4.3.31(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@umijs/renderer-react@4.3.31(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-mEWeSvv/XQHgBh8jzdRYgEykqGysLy2KJwBwClzNS1PdTsA9x6yPTHYmC0/LTkaUieJEpZbCSZMJ8G0gVXoJDw==} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' dependencies: '@babel/runtime': 7.23.6 '@loadable/component': 5.15.2(react@18.3.1) history: 5.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-router-dom: 6.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-helmet-async: 1.3.0(react-dom@18.3.1)(react@18.3.1) + react-router-dom: 6.3.0(react-dom@18.3.1)(react@18.3.1) + dev: true - '@umijs/server@4.3.31': + /@umijs/server@4.3.31: + resolution: {integrity: sha512-dR1sjPeenTsdYRNeh8eF+ilN+aOuxdBi6OG6sywBAsq2y9NgSOS7+xS9K80rzrelaYm654S1JnGQjYzTQBZODw==} dependencies: '@umijs/bundler-utils': 4.3.31 history: 5.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router-dom: 6.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router-dom: 6.3.0(react-dom@18.3.1)(react@18.3.1) transitivePeerDependencies: - supports-color + dev: true - '@umijs/test@4.3.31(@babel/core@7.23.6)': + /@umijs/test@4.3.31(@babel/core@7.26.0): + resolution: {integrity: sha512-4W1qYAcgWYp2Gd2lHCh+ZyMUJ6yZQiLrhdclX04D6iZi2zx+fQeBE3/wWJoBdFmu/gi6J6US8T9D6va4ddxp3g==} dependencies: - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.26.0) '@jest/types': 27.5.1 '@umijs/bundler-utils': 4.3.31 '@umijs/utils': 4.3.31 - babel-jest: 29.7.0(@babel/core@7.23.6) + babel-jest: 29.7.0(@babel/core@7.26.0) esbuild: 0.21.4 identity-obj-proxy: 3.0.0 isomorphic-unfetch: 4.0.2 transitivePeerDependencies: - '@babel/core' - supports-color + dev: true - '@umijs/ui@3.0.1': {} + /@umijs/ui@3.0.1: + resolution: {integrity: sha512-zcz37AJH0xt/6XVVbyO/hmsK9Hq4vH23HZ4KYVi5A8rbM9KeJkJigTS7ELOdArawZhVNGe+h3a5Oixs4a2QsWw==} + dev: true - '@umijs/utils@4.3.31': + /@umijs/utils@4.3.31: + resolution: {integrity: sha512-UyJbN9f0jWlTrVbHb8/3ckpkEApEfRskSSZD9sAL4QMs99i1+9MJnO/GowpyGJUY+9ZhgwIhsc2AJ35r21v2kg==} dependencies: chokidar: 3.5.3 pino: 7.11.0 + dev: true - '@umijs/zod2ts@4.3.31': {} + /@umijs/zod2ts@4.3.31: + resolution: {integrity: sha512-CPZTG8UfMAc9E60QBYLOJ5KA0FGcl6D08YaRgLQFmUdWyHgCXBR2ZHHCWMHPgUXLd5dlokJ49/jFPxKEKfdcDA==} + dev: true - '@ungap/structured-clone@1.2.0': {} + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true - '@vitejs/plugin-react@4.0.0(vite@4.5.2(@types/node@14.18.63)(less@4.1.3)(lightningcss@1.22.1)(sass@1.80.6)(sugarss@2.0.0)(terser@5.36.0))': + /@vitejs/plugin-react@4.0.0(vite@4.5.2): + resolution: {integrity: sha512-HX0XzMjL3hhOYm+0s95pb0Z7F8O81G7joUHgfDd/9J/ZZf5k4xX6QAMFkKsHFxaHlf6X7GD7+XuaZ66ULiJuhQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) react-refresh: 0.14.2 - vite: 4.5.2(@types/node@14.18.63)(less@4.1.3)(lightningcss@1.22.1)(sass@1.80.6)(sugarss@2.0.0)(terser@5.36.0) + vite: 4.5.2(@types/node@14.18.63)(less@4.1.3)(sass@1.80.7) transitivePeerDependencies: - supports-color + dev: true - '@webassemblyjs/ast@1.14.1': + /@webassemblyjs/ast@1.14.1: + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} dependencies: '@webassemblyjs/helper-numbers': 1.13.2 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + /@webassemblyjs/floating-point-hex-parser@1.13.2: + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - '@webassemblyjs/helper-api-error@1.13.2': {} + /@webassemblyjs/helper-api-error@1.13.2: + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - '@webassemblyjs/helper-buffer@1.14.1': {} + /@webassemblyjs/helper-buffer@1.14.1: + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - '@webassemblyjs/helper-numbers@1.13.2': + /@webassemblyjs/helper-numbers@1.13.2: + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.13.2 '@webassemblyjs/helper-api-error': 1.13.2 '@xtuc/long': 4.2.2 - '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + /@webassemblyjs/helper-wasm-bytecode@1.13.2: + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - '@webassemblyjs/helper-wasm-section@1.14.1': + /@webassemblyjs/helper-wasm-section@1.14.1: + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/ieee754@1.13.2': + /@webassemblyjs/ieee754@1.13.2: + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} dependencies: '@xtuc/ieee754': 1.2.0 - '@webassemblyjs/leb128@1.13.2': + /@webassemblyjs/leb128@1.13.2: + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} dependencies: '@xtuc/long': 4.2.2 - '@webassemblyjs/utf8@1.13.2': {} + /@webassemblyjs/utf8@1.13.2: + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - '@webassemblyjs/wasm-edit@1.14.1': + /@webassemblyjs/wasm-edit@1.14.1: + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 @@ -17195,7 +7040,8 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 '@webassemblyjs/wast-printer': 1.14.1 - '@webassemblyjs/wasm-gen@1.14.1': + /@webassemblyjs/wasm-gen@1.14.1: + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 @@ -17203,14 +7049,16 @@ snapshots: '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 - '@webassemblyjs/wasm-opt@1.14.1': + /@webassemblyjs/wasm-opt@1.14.1: + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 '@webassemblyjs/wasm-gen': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - '@webassemblyjs/wasm-parser@1.14.1': + /@webassemblyjs/wasm-parser@1.14.1: + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-api-error': 1.13.2 @@ -17219,126 +7067,223 @@ snapshots: '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 - '@webassemblyjs/wast-printer@1.14.1': + /@webassemblyjs/wast-printer@1.14.1: + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} dependencies: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4))': + /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.96.1): + resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x dependencies: - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4))': + /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.96.1): + resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x dependencies: - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4))': + /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.1.0)(webpack@5.96.1): + resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true dependencies: - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1) - optionalDependencies: webpack-dev-server: 5.1.0(webpack-cli@5.1.4)(webpack@5.96.1) - '@xobotyi/scrollbar-width@1.9.5': {} + /@xobotyi/scrollbar-width@1.9.5: + resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} + dev: true - '@xtuc/ieee754@1.2.0': {} + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - '@xtuc/long@4.2.2': {} + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - abab@2.0.6: {} + /abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + dev: true - abbrev@1.1.1: {} + /abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + dev: true - accepts@1.3.8: + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-globals@4.3.4: + /acorn-globals@4.3.4: + resolution: {integrity: sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==} dependencies: acorn: 6.4.2 acorn-walk: 6.2.0 + dev: true - acorn-globals@6.0.0: + /acorn-globals@6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 + dev: true - acorn-jsx@5.3.2(acorn@7.4.1): + /acorn-jsx@5.3.2(acorn@7.4.1): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 7.4.1 + dev: true - acorn-walk@6.2.0: {} + /acorn-walk@6.2.0: + resolution: {integrity: sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==} + engines: {node: '>=0.4.0'} + dev: true - acorn-walk@7.2.0: {} + /acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: true - acorn-walk@8.3.4: + /acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} dependencies: acorn: 8.14.0 - acorn@5.7.4: {} + /acorn@5.7.4: + resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true - acorn@6.4.2: {} + /acorn@6.4.2: + resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true - acorn@7.4.1: {} + /acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true - acorn@8.14.0: {} + /acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true - add-stream@1.0.0: {} + /add-stream@1.0.0: + resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} + dev: false - address@1.2.2: {} + /address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + dev: true - agent-base@4.3.0: + /agent-base@4.3.0: + resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==} + engines: {node: '>= 4.0.0'} dependencies: es6-promisify: 5.0.0 + dev: true - agent-base@6.0.2: + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} dependencies: debug: 4.3.7 transitivePeerDependencies: - supports-color + dev: true - agentkeepalive@2.2.0: {} + /agentkeepalive@2.2.0: + resolution: {integrity: sha512-TnB6ziK363p7lR8QpeLC8aMr8EGYBKZTpgzQLfqTs3bR0Oo5VbKdwKf8h0dSzsYrB7lSCgfJnMZKqShvlq5Oyg==} + engines: {node: '>= 0.10.0'} + dev: true - agentkeepalive@3.5.3: + /agentkeepalive@3.5.3: + resolution: {integrity: sha512-yqXL+k5rr8+ZRpOAntkaaRgWgE5o8ESAj5DyRmVTCSoZxXmqemb9Dd7T4i5UzwuERdLAJUy6XzR9zFVuf0kzkw==} + engines: {node: '>= 4.0.0'} dependencies: humanize-ms: 1.2.1 + dev: true - aggregate-error@4.0.1: + /aggregate-error@4.0.1: + resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} + engines: {node: '>=12'} dependencies: clean-stack: 4.2.0 indent-string: 5.0.0 + dev: true - ajv-formats@2.1.1(ajv@8.17.1): - optionalDependencies: + /ajv-formats@2.1.1(ajv@8.17.1): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: ajv: 8.17.1 - ajv-keywords@3.5.2(ajv@6.12.6): + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 dependencies: ajv: 6.12.6 - ajv-keywords@5.1.0(ajv@8.17.1): + /ajv-keywords@5.1.0(ajv@8.17.1): + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 dependencies: ajv: 8.17.1 fast-deep-equal: 3.1.3 - ajv@6.12.6: + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.17.1: + /ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.0.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@3.35.1: + /algoliasearch@3.35.1: + resolution: {integrity: sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ==} + engines: {node: '>=0.8'} dependencies: agentkeepalive: 2.2.0 debug: 2.6.9 @@ -17357,8 +7302,11 @@ snapshots: tunnel-agent: 0.6.0 transitivePeerDependencies: - supports-color + dev: true - algoliasearch@5.13.0: + /algoliasearch@5.13.0: + resolution: {integrity: sha512-04lyQX3Ev/oLYQx+aagamQDXvkUUfX1mwrLrus15+9fNaYj28GDxxEzbwaRfvmHFcZyoxvup7mMtDTTw8SrTEQ==} + engines: {node: '>= 14.0.0'} dependencies: '@algolia/client-abtesting': 5.13.0 '@algolia/client-analytics': 5.13.0 @@ -17373,67 +7321,127 @@ snapshots: '@algolia/requester-browser-xhr': 5.13.0 '@algolia/requester-fetch': 5.13.0 '@algolia/requester-node-http': 5.13.0 + dev: true - align-text@0.1.4: + /align-text@0.1.4: + resolution: {integrity: sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==} + engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 longest: 1.0.1 repeat-string: 1.6.1 + dev: false - amdefine@1.0.1: {} + /amdefine@1.0.1: + resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} + engines: {node: '>=0.4.2'} + dev: false - animated-scroll-to@2.3.0: {} + /animated-scroll-to@2.3.0: + resolution: {integrity: sha512-PT/5MSKCWQaK2kuOl2HT2KJMuJEvUS4/TgMhWy82c2EmF74/CIkvPBPKOvd8nMYP6Higo7xCn49/iSW9BccMoQ==} + dev: true - ansi-align@2.0.0: + /ansi-align@2.0.0: + resolution: {integrity: sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==} dependencies: string-width: 2.1.1 + dev: true - ansi-align@3.0.1: + /ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: string-width: 4.2.3 + dev: true - ansi-colors@4.1.3: {} + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: true - ansi-escapes@3.2.0: {} + /ansi-escapes@3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} + dev: true - ansi-escapes@4.3.2: + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.21.3 + dev: true - ansi-escapes@5.0.0: + /ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} dependencies: type-fest: 1.4.0 + dev: true - ansi-html-community@0.0.8: {} + /ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true - ansi-regex@2.1.1: {} + /ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} - ansi-regex@3.0.1: {} + /ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + dev: true - ansi-regex@4.1.1: {} + /ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + dev: true - ansi-regex@5.0.1: {} + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true - ansi-regex@6.1.0: {} + /ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + dev: true - ansi-styles@2.2.1: {} + /ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} - ansi-styles@3.2.1: + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: color-convert: 1.9.3 + dev: true - ansi-styles@4.3.0: + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: true - ansi-styles@5.2.0: {} + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true - ansi-styles@6.2.1: {} + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true - antd@4.24.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /antd@4.24.16(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-zZrK4UYxHtU6tGOOf0uG/kBRx1kTvypfuSB3GqE/SBQxFhZ/TZ+yj7Z1qwI8vGfMtUUJdLeuoCAqGDa1zPsXnQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@ant-design/colors': 6.0.0 - '@ant-design/icons': 4.8.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/icons': 4.8.3(react-dom@18.3.1)(react@18.3.1) '@ant-design/react-slick': 1.0.2(react@18.3.1) '@babel/runtime': 7.26.0 '@ctrl/tinycolor': 3.6.1 @@ -17441,92 +7449,97 @@ snapshots: copy-to-clipboard: 3.3.3 lodash: 4.17.21 moment: 2.30.1 - rc-cascader: 3.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-checkbox: 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-collapse: 3.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-dialog: 9.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-drawer: 6.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-dropdown: 4.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-field-form: 1.38.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-image: 5.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-input: 0.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-input-number: 7.3.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-mentions: 1.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-menu: 9.8.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-notification: 4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-pagination: 3.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-picker: 2.7.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-progress: 3.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-rate: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-segmented: 2.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-select: 14.1.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-slider: 10.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-steps: 5.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-switch: 3.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-table: 7.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tabs: 12.5.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-textarea: 0.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tooltip: 5.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree: 5.7.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree-select: 5.5.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-trigger: 5.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-upload: 4.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-cascader: 3.7.3(react-dom@18.3.1)(react@18.3.1) + rc-checkbox: 3.0.1(react-dom@18.3.1)(react@18.3.1) + rc-collapse: 3.4.2(react-dom@18.3.1)(react@18.3.1) + rc-dialog: 9.0.4(react-dom@18.3.1)(react@18.3.1) + rc-drawer: 6.3.0(react-dom@18.3.1)(react@18.3.1) + rc-dropdown: 4.0.1(react-dom@18.3.1)(react@18.3.1) + rc-field-form: 1.38.2(react-dom@18.3.1)(react@18.3.1) + rc-image: 5.13.0(react-dom@18.3.1)(react@18.3.1) + rc-input: 0.1.4(react-dom@18.3.1)(react@18.3.1) + rc-input-number: 7.3.11(react-dom@18.3.1)(react@18.3.1) + rc-mentions: 1.13.1(react-dom@18.3.1)(react@18.3.1) + rc-menu: 9.8.4(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-notification: 4.6.1(react-dom@18.3.1)(react@18.3.1) + rc-pagination: 3.2.0(react-dom@18.3.1)(react@18.3.1) + rc-picker: 2.7.6(react-dom@18.3.1)(react@18.3.1) + rc-progress: 3.4.2(react-dom@18.3.1)(react@18.3.1) + rc-rate: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-segmented: 2.3.0(react-dom@18.3.1)(react@18.3.1) + rc-select: 14.1.18(react-dom@18.3.1)(react@18.3.1) + rc-slider: 10.0.1(react-dom@18.3.1)(react@18.3.1) + rc-steps: 5.0.0(react-dom@18.3.1)(react@18.3.1) + rc-switch: 3.2.2(react-dom@18.3.1)(react@18.3.1) + rc-table: 7.26.0(react-dom@18.3.1)(react@18.3.1) + rc-tabs: 12.5.10(react-dom@18.3.1)(react@18.3.1) + rc-textarea: 0.4.7(react-dom@18.3.1)(react@18.3.1) + rc-tooltip: 5.2.2(react-dom@18.3.1)(react@18.3.1) + rc-tree: 5.7.12(react-dom@18.3.1)(react@18.3.1) + rc-tree-select: 5.5.5(react-dom@18.3.1)(react@18.3.1) + rc-trigger: 5.3.4(react-dom@18.3.1)(react@18.3.1) + rc-upload: 4.3.6(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 2.2.31 + dev: true - antd@5.22.0(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /antd@5.22.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-hZE8riK8+LWsXUnPpbluvBxjnwXRh34s1yIND7g5WUV/AVZtPjt81jOoXCbKw5SJ8ORIx2o7nlaa4PJ3Luwisg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@ant-design/colors': 7.1.0 - '@ant-design/cssinjs': 1.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@ant-design/cssinjs-utils': 1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@ant-design/icons': 5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/cssinjs': 1.21.1(react-dom@18.3.1)(react@18.3.1) + '@ant-design/cssinjs-utils': 1.1.1(react-dom@18.3.1)(react@18.3.1) + '@ant-design/icons': 5.5.1(react-dom@18.3.1)(react@18.3.1) '@ant-design/react-slick': 1.1.2(react@18.3.1) '@babel/runtime': 7.26.0 '@ctrl/tinycolor': 3.6.1 - '@rc-component/color-picker': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rc-component/mutate-observer': 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rc-component/qrcode': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rc-component/tour': 1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/color-picker': 2.0.1(react-dom@18.3.1)(react@18.3.1) + '@rc-component/mutate-observer': 1.1.0(react-dom@18.3.1)(react@18.3.1) + '@rc-component/qrcode': 1.0.0(react-dom@18.3.1)(react@18.3.1) + '@rc-component/tour': 1.15.1(react-dom@18.3.1)(react@18.3.1) + '@rc-component/trigger': 2.2.5(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 copy-to-clipboard: 3.3.3 dayjs: 1.11.13 - rc-cascader: 3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-checkbox: 3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-collapse: 3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-drawer: 7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-dropdown: 4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-field-form: 2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-image: 7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-input-number: 9.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-mentions: 2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-menu: 9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-notification: 5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-pagination: 4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-picker: 4.7.2(date-fns@2.30.0)(dayjs@1.11.13)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-progress: 4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-rate: 2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-segmented: 2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-select: 14.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-slider: 11.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-steps: 6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-switch: 4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-table: 7.48.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tabs: 15.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tooltip: 6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree: 5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree-select: 5.24.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-upload: 4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-cascader: 3.30.0(react-dom@18.3.1)(react@18.3.1) + rc-checkbox: 3.3.0(react-dom@18.3.1)(react@18.3.1) + rc-collapse: 3.9.0(react-dom@18.3.1)(react@18.3.1) + rc-dialog: 9.6.0(react-dom@18.3.1)(react@18.3.1) + rc-drawer: 7.2.0(react-dom@18.3.1)(react@18.3.1) + rc-dropdown: 4.2.0(react-dom@18.3.1)(react@18.3.1) + rc-field-form: 2.5.0(react-dom@18.3.1)(react@18.3.1) + rc-image: 7.11.0(react-dom@18.3.1)(react@18.3.1) + rc-input: 1.6.3(react-dom@18.3.1)(react@18.3.1) + rc-input-number: 9.3.0(react-dom@18.3.1)(react@18.3.1) + rc-mentions: 2.17.0(react-dom@18.3.1)(react@18.3.1) + rc-menu: 9.16.0(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-notification: 5.6.2(react-dom@18.3.1)(react@18.3.1) + rc-pagination: 4.3.0(react-dom@18.3.1)(react@18.3.1) + rc-picker: 4.7.2(dayjs@1.11.13)(react-dom@18.3.1)(react@18.3.1) + rc-progress: 4.0.0(react-dom@18.3.1)(react@18.3.1) + rc-rate: 2.13.0(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-segmented: 2.5.0(react-dom@18.3.1)(react@18.3.1) + rc-select: 14.16.3(react-dom@18.3.1)(react@18.3.1) + rc-slider: 11.1.7(react-dom@18.3.1)(react@18.3.1) + rc-steps: 6.0.1(react-dom@18.3.1)(react@18.3.1) + rc-switch: 4.1.0(react-dom@18.3.1)(react@18.3.1) + rc-table: 7.48.1(react-dom@18.3.1)(react@18.3.1) + rc-tabs: 15.4.0(react-dom@18.3.1)(react@18.3.1) + rc-textarea: 1.8.2(react-dom@18.3.1)(react@18.3.1) + rc-tooltip: 6.2.1(react-dom@18.3.1)(react@18.3.1) + rc-tree: 5.10.1(react-dom@18.3.1)(react@18.3.1) + rc-tree-select: 5.24.4(react-dom@18.3.1)(react@18.3.1) + rc-upload: 4.8.1(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 3.1.0 @@ -17536,199 +7549,337 @@ snapshots: - luxon - moment - any-observable@0.3.0(rxjs@6.6.7): - optionalDependencies: + /any-observable@0.3.0(rxjs@6.6.7): + resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zenObservable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zenObservable: + optional: true + dependencies: rxjs: 6.6.7 + dev: true - any-promise@1.3.0: {} + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true - anymatch@2.0.0: + /anymatch@2.0.0: + resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} dependencies: micromatch: 3.1.10 normalize-path: 2.1.1 transitivePeerDependencies: - supports-color + dev: true - anymatch@3.1.3: + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - aproba@1.2.0: {} + /aproba@1.2.0: + resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} + dev: true - arg@5.0.2: {} + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true - argparse@1.0.10: + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 + dev: true - argparse@2.0.1: {} + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true - aria-hidden@1.2.4: + /aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} dependencies: tslib: 2.6.1 + dev: true - aria-query@5.3.2: {} + /aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + dev: true - arr-diff@4.0.0: {} + /arr-diff@4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: true - arr-flatten@1.1.0: {} + /arr-flatten@1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + dev: true - arr-union@3.1.0: {} + /arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: true - array-buffer-byte-length@1.0.1: + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 - array-equal@1.0.2: {} + /array-equal@1.0.2: + resolution: {integrity: sha512-gUHx76KtnhEgB3HOuFYiCm3FIdEs6ocM2asHvNTkfu/Y09qQVrrVVaOKENmS2KkSaGoxgXNqC+ZVtR/n0MOkSA==} + dev: true - array-flatten@1.1.1: {} + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-ify@1.0.0: {} + /array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + dev: false - array-includes@3.1.8: + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 + dev: true - array-tree-filter@2.1.0: {} + /array-tree-filter@2.1.0: + resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==} + dev: true - array-union@1.0.2: + /array-union@1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} dependencies: array-uniq: 1.0.3 + dev: true - array-union@2.1.0: {} + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true - array-uniq@1.0.3: {} + /array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + dev: true - array-unique@0.3.2: {} + /array-unique@0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: true - array.prototype.filter@1.0.4: + /array.prototype.filter@1.0.4: + resolution: {integrity: sha512-r+mCJ7zXgXElgR4IRC+fkvNCeoaavWBs6EdCso5Tbcf+iEMKzBU/His60lt34WEZ9vlb8wDkZvQGcVI5GwkfoQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-array-method-boxes-properly: 1.0.0 es-object-atoms: 1.0.0 is-string: 1.0.7 + dev: true - array.prototype.findlast@1.2.5: + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 + dev: true - array.prototype.flat@1.3.2: + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-shim-unscopables: 1.0.2 + dev: true - array.prototype.flatmap@1.3.2: + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-shim-unscopables: 1.0.2 + dev: true - array.prototype.reduce@1.0.7: + /array.prototype.reduce@1.0.7: + resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-array-method-boxes-properly: 1.0.0 es-errors: 1.3.0 es-object-atoms: 1.0.0 is-string: 1.0.7 + dev: true - array.prototype.tosorted@1.1.4: + /array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 + dev: true - arraybuffer.prototype.slice@1.0.3: + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - arrify@1.0.1: {} + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true - asap@2.0.6: {} + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: false - asn1.js@4.10.1: + /asn1.js@4.10.1: + resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} dependencies: bn.js: 4.12.1 inherits: 2.0.4 minimalistic-assert: 1.0.1 + dev: true - asn1@0.2.6: + /asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: safer-buffer: 2.1.2 + dev: true - assert-okam@1.5.0: + /assert-okam@1.5.0: + resolution: {integrity: sha512-pchhPo40i8GsTj/7h6P8LSSzwRErnh2nCEiwXNTxy4VYw6lSesSac4rTKqwsA+fOZdj6FT81Mb9U1vIZEua1EQ==} dependencies: object-assign: 4.1.1 util: 0.10.3 + dev: true - assert-plus@1.0.0: {} + /assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + dev: true - assert@1.5.1: + /assert@1.5.1: + resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==} dependencies: object.assign: 4.1.5 util: 0.10.4 + dev: true - assign-symbols@1.0.0: {} + /assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: true - astral-regex@2.0.0: {} + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true - astring@1.9.0: {} + /astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + dev: true - async-limiter@1.0.1: {} + /async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + dev: true - async-validator@4.2.5: {} + /async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + dev: true - async@2.6.4: + /async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: lodash: 4.17.21 + dev: true - async@3.2.6: {} + /async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + dev: true - asynckit@0.4.0: {} + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true - at-least-node@1.0.0: {} + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true - atob@2.1.2: {} + /atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: true - atomic-sleep@1.0.0: {} + /atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: true - atomically@2.0.3: + /atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} dependencies: stubborn-fs: 1.2.5 when-exit: 2.1.3 + dev: true - autocomplete.js@0.36.0: + /autocomplete.js@0.36.0: + resolution: {integrity: sha512-jEwUXnVMeCHHutUt10i/8ZiRaCb0Wo+ZyKxeGsYwBDtw6EJHqEeDrq4UwZRD8YBSvp3g6klP678il2eeiVXN2Q==} dependencies: immediate: 3.3.0 + dev: true - autoprefixer@10.4.20(postcss@8.4.49): + /autoprefixer@10.4.20(postcss@8.4.49): + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 dependencies: browserslist: 4.24.2 caniuse-lite: 1.0.30001680 @@ -17737,8 +7888,11 @@ snapshots: picocolors: 1.1.1 postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - autoprefixer@9.8.8: + /autoprefixer@9.8.8: + resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==} + hasBin: true dependencies: browserslist: 4.24.2 caniuse-lite: 1.0.30001680 @@ -17747,23 +7901,37 @@ snapshots: picocolors: 0.2.1 postcss: 7.0.39 postcss-value-parser: 4.2.0 + dev: true - available-typed-arrays@1.0.7: + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} dependencies: possible-typed-array-names: 1.0.0 - aws-sign2@0.7.0: {} + /aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + dev: true - aws4@1.13.2: {} + /aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + dev: true - axios@0.18.1: + /axios@0.18.1: + resolution: {integrity: sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==} + deprecated: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410 dependencies: follow-redirects: 1.5.10 is-buffer: 2.0.5 transitivePeerDependencies: - supports-color + dev: true - babel-jest@24.9.0(@babel/core@7.26.0): + /babel-jest@24.9.0(@babel/core@7.26.0): + resolution: {integrity: sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==} + engines: {node: '>= 6'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@jest/transform': 24.9.0 @@ -17775,8 +7943,13 @@ snapshots: slash: 2.0.0 transitivePeerDependencies: - supports-color + dev: true - babel-jest@26.6.3(@babel/core@7.26.0): + /babel-jest@26.6.3(@babel/core@7.26.0): + resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==} + engines: {node: '>= 10.14.2'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@jest/transform': 26.6.2 @@ -17789,34 +7962,50 @@ snapshots: slash: 3.0.0 transitivePeerDependencies: - supports-color + dev: true - babel-jest@29.7.0(@babel/core@7.23.6): + /babel-jest@29.7.0(@babel/core@7.26.0): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.6) + babel-preset-jest: 29.6.3(@babel/core@7.26.0) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color + dev: true - babel-loader@8.4.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)): + /babel-loader@8.4.1(@babel/core@7.26.0)(webpack@5.96.1): + resolution: {integrity: sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' dependencies: '@babel/core': 7.26.0 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + dev: true - babel-plugin-dynamic-import-node@2.3.3: + /babel-plugin-dynamic-import-node@2.3.3: + resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} dependencies: object.assign: 4.1.5 + dev: true - babel-plugin-istanbul@5.2.0: + /babel-plugin-istanbul@5.2.0: + resolution: {integrity: sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==} + engines: {node: '>=6'} dependencies: '@babel/helper-plugin-utils': 7.25.9 find-up: 3.0.0 @@ -17824,8 +8013,11 @@ snapshots: test-exclude: 5.2.3 transitivePeerDependencies: - supports-color + dev: true - babel-plugin-istanbul@6.1.1: + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} dependencies: '@babel/helper-plugin-utils': 7.25.9 '@istanbuljs/load-nyc-config': 1.1.0 @@ -17834,36 +8026,56 @@ snapshots: test-exclude: 6.0.0 transitivePeerDependencies: - supports-color + dev: true - babel-plugin-jest-hoist@24.9.0: + /babel-plugin-jest-hoist@24.9.0: + resolution: {integrity: sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==} + engines: {node: '>= 6'} dependencies: '@types/babel__traverse': 7.20.6 + dev: true - babel-plugin-jest-hoist@26.6.2: + /babel-plugin-jest-hoist@26.6.2: + resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} + engines: {node: '>= 10.14.2'} dependencies: '@babel/template': 7.25.9 '@babel/types': 7.26.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 + dev: true - babel-plugin-jest-hoist@29.6.3: + /babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.25.9 '@babel/types': 7.26.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 + dev: true - babel-plugin-macros@3.1.0: + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} dependencies: '@babel/runtime': 7.26.0 cosmiconfig: 7.1.0 resolve: 1.22.8 + dev: true - babel-plugin-named-asset-import@0.3.8(@babel/core@7.26.0): + /babel-plugin-named-asset-import@0.3.8(@babel/core@7.26.0): + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 dependencies: '@babel/core': 7.26.0 + dev: true - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): + /babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): + resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.26.2 '@babel/core': 7.26.0 @@ -17871,23 +8083,33 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): + /babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) core-js-compat: 3.39.0 transitivePeerDependencies: - supports-color + dev: true - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): + /babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): + resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.26.0 '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) transitivePeerDependencies: - supports-color + dev: true - babel-plugin-react-compiler@0.0.0-experimental-c23de8d-20240515: + /babel-plugin-react-compiler@0.0.0-experimental-c23de8d-20240515: + resolution: {integrity: sha512-0XN2gmpT55QtAz5n7d5g91y1AuO9tRhWBaLgCRyc4ExHrlr7+LfxW+YTb3mOwxngkkiggwM8HyYsaEK9MqhnlQ==} dependencies: '@babel/generator': 7.2.0 '@babel/types': 7.26.0 @@ -17896,35 +8118,24 @@ snapshots: pretty-format: 24.9.0 zod: 3.23.8 zod-validation-error: 2.1.0(zod@3.23.8) + dev: true - babel-plugin-transform-react-remove-prop-types@0.4.24: {} + /babel-plugin-transform-react-remove-prop-types@0.4.24: + resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} + dev: true - babel-polyfill@6.26.0: + /babel-polyfill@6.26.0: + resolution: {integrity: sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==} dependencies: babel-runtime: 6.26.0 core-js: 2.6.12 regenerator-runtime: 0.10.5 + dev: true - babel-preset-current-node-syntax@1.1.0(@babel/core@7.23.6): - dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.23.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) - - babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): + /babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) @@ -17942,26 +8153,43 @@ snapshots: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) + dev: true - babel-preset-jest@24.9.0(@babel/core@7.26.0): + /babel-preset-jest@24.9.0(@babel/core@7.26.0): + resolution: {integrity: sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==} + engines: {node: '>= 6'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) babel-plugin-jest-hoist: 24.9.0 + dev: true - babel-preset-jest@26.6.2(@babel/core@7.26.0): + /babel-preset-jest@26.6.2(@babel/core@7.26.0): + resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} + engines: {node: '>= 10.14.2'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 babel-plugin-jest-hoist: 26.6.2 babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + dev: true - babel-preset-jest@29.6.3(@babel/core@7.23.6): + /babel-preset-jest@29.6.3(@babel/core@7.26.0): + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.26.0 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.23.6) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + dev: true - babel-preset-react-app@10.0.1: + /babel-preset-react-app@10.0.1: + resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} dependencies: '@babel/core': 7.26.0 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.0) @@ -17982,30 +8210,45 @@ snapshots: babel-plugin-transform-react-remove-prop-types: 0.4.24 transitivePeerDependencies: - supports-color + dev: true - babel-runtime@6.26.0: + /babel-runtime@6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} dependencies: core-js: 2.6.12 regenerator-runtime: 0.11.1 + dev: true - babel-types@6.26.0: + /babel-types@6.26.0: + resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==} dependencies: babel-runtime: 6.26.0 esutils: 2.0.3 lodash: 4.17.21 to-fast-properties: 1.0.3 + dev: true - bail@1.0.5: {} + /bail@1.0.5: + resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} + dev: true - bail@2.0.2: {} + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - balanced-match@1.0.2: {} + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@2.0.0: {} + /balanced-match@2.0.0: + resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + dev: true - base64-js@1.5.1: {} + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true - base@0.11.2: + /base@0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} dependencies: cache-base: 1.0.1 class-utils: 0.3.6 @@ -18014,48 +8257,78 @@ snapshots: isobject: 3.0.1 mixin-deep: 1.3.2 pascalcase: 0.1.1 + dev: true - batch@0.6.1: {} + /batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - bcrypt-pbkdf@1.0.2: + /bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} dependencies: tweetnacl: 0.14.5 + dev: true - better-path-resolve@1.0.0: + /better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} dependencies: is-windows: 1.0.2 + dev: true - big-integer@1.6.52: {} + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: true - big.js@5.2.2: {} + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - binary-extensions@2.3.0: {} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} - binaryextensions@2.3.0: {} + /binaryextensions@2.3.0: + resolution: {integrity: sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==} + engines: {node: '>=0.8'} + dev: true - bindings@1.5.0: + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} dependencies: file-uri-to-path: 1.0.0 + dev: true optional: true - bl@1.2.3: + /bl@1.2.3: + resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} dependencies: readable-stream: 2.3.8 safe-buffer: 5.2.1 + dev: true - bl@4.1.0: + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 + dev: true - bluebird@3.7.2: {} + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true - bn.js@4.12.1: {} + /bn.js@4.12.1: + resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} + dev: true - bn.js@5.2.1: {} + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: true - body-parser@1.20.3: + /body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -18072,17 +8345,25 @@ snapshots: transitivePeerDependencies: - supports-color - bonjour-service@1.2.1: + /bonjour-service@1.2.1: + resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} dependencies: fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 - boolbase@1.0.0: {} + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: true - boolean@3.2.0: + /boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dev: true optional: true - boxen@1.3.0: + /boxen@1.3.0: + resolution: {integrity: sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==} + engines: {node: '>=4'} dependencies: ansi-align: 2.0.0 camelcase: 4.1.0 @@ -18091,8 +8372,11 @@ snapshots: string-width: 2.1.1 term-size: 1.2.0 widest-line: 2.0.1 + dev: true - boxen@8.0.1: + /boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} dependencies: ansi-align: 3.0.1 camelcase: 8.0.0 @@ -18102,21 +8386,30 @@ snapshots: type-fest: 4.26.1 widest-line: 5.0.0 wrap-ansi: 9.0.0 + dev: true - bplist-parser@0.2.0: + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} dependencies: big-integer: 1.6.52 + dev: true - brace-expansion@1.1.11: + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 + dev: true - braces@2.3.2: + /braces@2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} dependencies: arr-flatten: 1.1.0 array-unique: 0.3.2 @@ -18130,20 +8423,30 @@ snapshots: to-regex: 3.0.2 transitivePeerDependencies: - supports-color + dev: true - braces@3.0.3: + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} dependencies: fill-range: 7.1.1 - brorand@1.1.0: {} + /brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: true - browser-process-hrtime@1.0.0: {} + /browser-process-hrtime@1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + dev: true - browser-resolve@1.11.3: + /browser-resolve@1.11.3: + resolution: {integrity: sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==} dependencies: resolve: 1.1.7 + dev: true - browserify-aes@1.2.0: + /browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} dependencies: buffer-xor: 1.0.3 cipher-base: 1.0.4 @@ -18151,27 +8454,37 @@ snapshots: evp_bytestokey: 1.0.3 inherits: 2.0.4 safe-buffer: 5.2.1 + dev: true - browserify-cipher@1.0.1: + /browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} dependencies: browserify-aes: 1.2.0 browserify-des: 1.0.2 evp_bytestokey: 1.0.3 + dev: true - browserify-des@1.0.2: + /browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} dependencies: cipher-base: 1.0.4 des.js: 1.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 + dev: true - browserify-rsa@4.1.1: + /browserify-rsa@4.1.1: + resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==} + engines: {node: '>= 0.10'} dependencies: bn.js: 5.2.1 randombytes: 2.1.0 safe-buffer: 5.2.1 + dev: true - browserify-sign@4.2.3: + /browserify-sign@4.2.3: + resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} + engines: {node: '>= 0.12'} dependencies: bn.js: 5.2.1 browserify-rsa: 4.1.1 @@ -18183,71 +8496,110 @@ snapshots: parse-asn1: 5.1.7 readable-stream: 2.3.8 safe-buffer: 5.2.1 + dev: true - browserify-zlib@0.2.0: + /browserify-zlib@0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} dependencies: pako: 1.0.11 + dev: true - browserslist@4.24.2: + /browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true dependencies: caniuse-lite: 1.0.30001680 - electron-to-chromium: 1.5.56 + electron-to-chromium: 1.5.57 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) - bser@2.1.1: + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 + dev: true - bubblesets-js@2.3.4: {} + /bubblesets-js@2.3.4: + resolution: {integrity: sha512-DyMjHmpkS2+xcFNtyN00apJYL3ESdp9fTrkDr5+9Qg/GPqFmcWgGsK1akZnttE1XFxJ/VMy4DNNGMGYtmFp1Sg==} + dev: false - buffer-alloc-unsafe@1.1.0: {} + /buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + dev: true - buffer-alloc@1.2.0: + /buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} dependencies: buffer-alloc-unsafe: 1.1.0 buffer-fill: 1.0.0 + dev: true - buffer-crc32@0.2.13: {} + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true - buffer-fill@1.0.0: {} + /buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + dev: true - buffer-from@1.1.2: {} + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer-okam@4.9.2: + /buffer-okam@4.9.2: + resolution: {integrity: sha512-t+vozme+an7flUs6GXHGMiP3PdodTse1NgRHSDWioIFJAtmMlj3pj7qD20Mkr9hZy0+9HA4R0xcumpMewrRdZQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 isarray: 1.0.0 + dev: true - buffer-xor@1.0.3: {} + /buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: true - buffer@4.9.2: + /buffer@4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 isarray: 1.0.0 + dev: true - buffer@5.7.1: + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: true - builtin-status-codes@3.0.0: {} + /builtin-status-codes@3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + dev: true - builtins@1.0.3: {} + /builtins@1.0.3: + resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} + dev: true - bundle-name@3.0.0: + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} dependencies: run-applescript: 5.0.0 + dev: true - bundle-name@4.1.0: + /bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} dependencies: run-applescript: 7.0.0 - bytes@3.1.2: {} + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} - cacache@10.0.4: + /cacache@10.0.4: + resolution: {integrity: sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==} dependencies: bluebird: 3.7.2 chownr: 1.1.4 @@ -18262,8 +8614,10 @@ snapshots: ssri: 5.3.0 unique-filename: 1.1.1 y18n: 4.0.3 + dev: true - cacache@9.3.0: + /cacache@9.3.0: + resolution: {integrity: sha512-Vbi8J1XfC8v+FbQ6QkOtKXsHpPnB0i9uMeYFJoj40EbdOsEqWB3DPpNjfsnYBkqOPYA8UvrqH6FZPpBP0zdN7g==} dependencies: bluebird: 3.7.2 chownr: 1.1.4 @@ -18278,8 +8632,11 @@ snapshots: ssri: 4.1.6 unique-filename: 1.1.1 y18n: 3.2.2 + dev: true - cache-base@1.0.1: + /cache-base@1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} dependencies: collection-visit: 1.0.0 component-emitter: 1.3.1 @@ -18290,8 +8647,11 @@ snapshots: to-object-path: 0.3.0 union-value: 1.0.1 unset-value: 1.0.0 + dev: true - cacheable-request@6.1.0: + /cacheable-request@6.1.0: + resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} + engines: {node: '>=8'} dependencies: clone-response: 1.0.3 get-stream: 5.2.0 @@ -18300,8 +8660,11 @@ snapshots: lowercase-keys: 2.0.0 normalize-url: 4.5.1 responselike: 1.0.2 + dev: true - call-bind@1.0.7: + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 @@ -18309,53 +8672,97 @@ snapshots: get-intrinsic: 1.2.4 set-function-length: 1.2.2 - callsites@3.1.0: {} + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true - camel-case@4.1.2: + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 tslib: 2.6.1 + dev: true - camelcase-keys@6.2.2: + /camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} dependencies: camelcase: 5.3.1 map-obj: 4.3.0 quick-lru: 4.0.1 + dev: true - camelcase@1.2.1: {} + /camelcase@1.2.1: + resolution: {integrity: sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==} + engines: {node: '>=0.10.0'} + dev: false - camelcase@4.1.0: {} + /camelcase@4.1.0: + resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} + engines: {node: '>=4'} + dev: true - camelcase@5.3.1: {} + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true - camelcase@6.3.0: {} + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true - camelcase@8.0.0: {} + /camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + dev: true - camelize@1.0.1: {} + /camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + dev: false - caniuse-lite@1.0.30001680: {} + /caniuse-lite@1.0.30001680: + resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} - capture-exit@2.0.0: + /capture-exit@2.0.0: + resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} + engines: {node: 6.* || 8.* || >= 10.*} dependencies: rsvp: 4.8.5 + dev: true - capture-stack-trace@1.0.2: {} + /capture-stack-trace@1.0.2: + resolution: {integrity: sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==} + engines: {node: '>=0.10.0'} + dev: true - caseless@0.12.0: {} + /caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + dev: true - ccount@2.0.1: {} + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: true - center-align@0.1.3: + /center-align@0.1.3: + resolution: {integrity: sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==} + engines: {node: '>=0.10.0'} dependencies: align-text: 0.1.4 lazy-cache: 1.0.4 + dev: false - chalk-template@1.1.0: + /chalk-template@1.1.0: + resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==} + engines: {node: '>=14.16'} dependencies: chalk: 5.3.0 + dev: true - chalk@1.1.3: + /chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} dependencies: ansi-styles: 2.2.1 escape-string-regexp: 1.0.5 @@ -18363,43 +8770,74 @@ snapshots: strip-ansi: 3.0.1 supports-color: 2.0.0 - chalk@2.4.2: + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 + dev: true - chalk@3.0.0: + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true - chalk@4.1.2: + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true - chalk@5.3.0: {} + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true - char-regex@1.0.2: {} + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: true - character-entities-html4@2.1.0: {} + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: true - character-entities-legacy@1.1.4: {} + /character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + dev: true - character-entities-legacy@3.0.0: {} + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: true - character-entities@1.2.4: {} + /character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + dev: true - character-entities@2.0.2: {} + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - character-reference-invalid@1.1.4: {} + /character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + dev: true - character-reference-invalid@2.0.1: {} + /character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + dev: true - chardet@0.7.0: {} + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true - cheerio-select@2.1.0: + /cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} dependencies: boolbase: 1.0.0 css-select: 5.1.0 @@ -18407,8 +8845,11 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.1.0 + dev: true - cheerio@1.0.0: + /cheerio@1.0.0: + resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + engines: {node: '>=18.17'} dependencies: cheerio-select: 2.1.0 dom-serializer: 2.0.0 @@ -18421,8 +8862,11 @@ snapshots: parse5-parser-stream: 7.1.2 undici: 6.20.1 whatwg-mimetype: 4.0.0 + dev: true - chokidar@3.5.3: + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 braces: 3.0.3 @@ -18433,8 +8877,11 @@ snapshots: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 + dev: true - chokidar@3.6.0: + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 braces: 3.0.3 @@ -18446,146 +8893,245 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chokidar@4.0.1: + /chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} dependencies: readdirp: 4.0.2 + dev: true - chownr@1.1.4: {} + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true - chrome-trace-event@1.0.4: {} + /chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} - ci-info@1.6.0: {} + /ci-info@1.6.0: + resolution: {integrity: sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==} + dev: true - ci-info@2.0.0: {} + /ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: true - ci-info@3.9.0: {} + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true - cipher-base@1.0.4: + /cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + dev: true - cjs-module-lexer@0.6.0: {} + /cjs-module-lexer@0.6.0: + resolution: {integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==} + dev: true - class-utils@0.3.6: + /class-utils@0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} dependencies: arr-union: 3.1.0 define-property: 0.2.5 isobject: 3.0.1 static-extend: 0.1.2 + dev: true - classnames@2.3.2: {} + /classnames@2.3.2: + resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} - classnames@2.5.1: {} + /classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - clean-css@5.3.3: + /clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} dependencies: source-map: 0.6.1 + dev: true - clean-regexp@1.0.0: + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} dependencies: escape-string-regexp: 1.0.5 + dev: true - clean-stack@4.2.0: + /clean-stack@4.2.0: + resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} + engines: {node: '>=12'} dependencies: escape-string-regexp: 5.0.0 + dev: true - cli-boxes@1.0.0: {} + /cli-boxes@1.0.0: + resolution: {integrity: sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==} + engines: {node: '>=0.10.0'} + dev: true - cli-boxes@3.0.0: {} + /cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + dev: true - cli-cursor@2.1.0: + /cli-cursor@2.1.0: + resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} + engines: {node: '>=4'} dependencies: restore-cursor: 2.0.0 + dev: true - cli-cursor@3.1.0: + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 + dev: true - cli-spinners@1.3.1: {} + /cli-spinners@1.3.1: + resolution: {integrity: sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==} + engines: {node: '>=4'} + dev: true - cli-spinners@2.9.2: {} + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: true - cli-truncate@0.2.1: + /cli-truncate@0.2.1: + resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==} + engines: {node: '>=0.10.0'} dependencies: slice-ansi: 0.0.4 string-width: 1.0.2 + dev: true - cli-width@2.2.1: {} + /cli-width@2.2.1: + resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} + dev: true - cli-width@3.0.0: {} + /cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true - cli-width@4.1.0: {} + /cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + dev: true - click-to-react-component@1.1.0(@types/react@16.14.62)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /click-to-react-component@1.1.0(@types/react@16.14.62)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-/DjZemufS1BkxyRgZL3r7HXVVOFRWVQi5Xd4EBnjxZMwrHEh0OlUVA2N9CjXkZ0x8zMf8dL1cKnnx+xUWUg4VA==} + peerDependencies: + react: '>=16.8.0' dependencies: - '@floating-ui/react-dom-interactions': 0.3.1(@types/react@16.14.62)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/react-dom-interactions': 0.3.1(@types/react@16.14.62)(react-dom@18.3.1)(react@18.3.1) htm: 3.1.1 react: 18.3.1 react-merge-refs: 1.1.0 transitivePeerDependencies: - '@types/react' - react-dom + dev: true - cliui@2.1.0: + /cliui@2.1.0: + resolution: {integrity: sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==} dependencies: center-align: 0.1.3 right-align: 0.1.3 wordwrap: 0.0.2 + dev: false - cliui@5.0.0: + /cliui@5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} dependencies: string-width: 3.1.0 strip-ansi: 5.2.0 wrap-ansi: 5.1.0 + dev: true - cliui@6.0.0: + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 + dev: true - cliui@8.0.1: + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + dev: true - clone-deep@4.0.1: + /clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} dependencies: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 - clone-regexp@2.2.0: + /clone-regexp@2.2.0: + resolution: {integrity: sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==} + engines: {node: '>=6'} dependencies: is-regexp: 2.1.0 + dev: true - clone-response@1.0.3: + /clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: mimic-response: 1.0.1 + dev: true - clone@1.0.4: {} + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true - co@4.6.0: {} + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true - coa@2.0.2: + /coa@2.0.2: + resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} + engines: {node: '>= 4.0'} dependencies: '@types/q': 1.5.8 chalk: 2.4.2 q: 1.5.1 + dev: true - code-point-at@1.1.0: {} + /code-point-at@1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + dev: true - codesandbox-import-util-types@2.2.3: {} + /codesandbox-import-util-types@2.2.3: + resolution: {integrity: sha512-Qj00p60oNExthP2oR3vvXmUGjukij+rxJGuiaKM6tyUmSyimdZsqHI/TUvFFClAffk9s7hxGnQgWQ8KCce27qQ==} + dev: true - codesandbox-import-utils@2.2.3: + /codesandbox-import-utils@2.2.3: + resolution: {integrity: sha512-ymtmcgZKU27U+nM2qUb21aO8Ut/u2S9s6KorOgG81weP+NA0UZkaHKlaRqbLJ9h4i/4FLvwmEXYAnTjNmp6ogg==} dependencies: codesandbox-import-util-types: 2.2.3 istextorbinary: 2.6.0 lz-string: 1.5.0 + dev: true - codesandbox@2.2.3: + /codesandbox@2.2.3: + resolution: {integrity: sha512-IAkWFk6UUglOhSemI7UFgNNL/jgg+1YjVEIllFULLgsaHhFnY51pCqAifMNuAd5d9Zp4Nk/xMgrEaGNV0L4Xlg==} + hasBin: true dependencies: axios: 0.18.1 chalk: 2.4.2 @@ -18610,72 +9156,123 @@ snapshots: update-notifier: 2.5.0 transitivePeerDependencies: - supports-color + dev: true - collect-v8-coverage@1.0.2: {} + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: true - collection-visit@1.0.0: + /collection-visit@1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} dependencies: map-visit: 1.0.0 object-visit: 1.0.1 + dev: true - color-convert@1.9.3: + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 + dev: true - color-convert@2.0.1: + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + dev: true - color-name@1.1.3: {} + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true - color-name@1.1.4: {} + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-string@1.9.1: + /color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - color@3.2.1: + /color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} dependencies: color-convert: 1.9.3 color-string: 1.9.1 + dev: true + + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true - colorette@2.0.20: {} + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - combined-stream@1.0.8: + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 + dev: true - comlink@4.4.2: {} + /comlink@4.4.2: + resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==} - comma-separated-tokens@2.0.3: {} + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: true - commander@10.0.1: {} + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} - commander@2.20.3: {} + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@4.1.1: {} + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true - commander@7.2.0: {} + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} - commander@8.3.0: {} + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: true - common-path-prefix@3.0.0: {} + /common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: true - commondir@1.0.1: {} + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true - compare-func@2.0.0: + /compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 + dev: false - component-emitter@1.3.1: {} + /component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + dev: true - compressible@2.0.18: + /compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} dependencies: mime-db: 1.53.0 - compression@1.7.5: + /compression@1.7.5: + resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} + engines: {node: '>= 0.8.0'} dependencies: bytes: 3.1.2 compressible: 2.0.18 @@ -18687,25 +9284,36 @@ snapshots: transitivePeerDependencies: - supports-color - compute-scroll-into-view@1.0.20: {} + /compute-scroll-into-view@1.0.20: + resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} + dev: true - compute-scroll-into-view@3.1.0: {} + /compute-scroll-into-view@3.1.0: + resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} - concat-map@0.0.1: {} + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - concat-stream@1.6.2: + /concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} dependencies: buffer-from: 1.1.2 inherits: 2.0.4 readable-stream: 2.3.8 typedarray: 0.0.6 + dev: true - config-chain@1.1.13: + /config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} dependencies: ini: 1.3.8 proto-list: 1.2.4 + dev: true - configstore@3.1.5: + /configstore@3.1.5: + resolution: {integrity: sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==} + engines: {node: '>=4'} dependencies: dot-prop: 4.2.1 graceful-fs: 4.2.11 @@ -18713,93 +9321,152 @@ snapshots: unique-string: 1.0.0 write-file-atomic: 2.4.3 xdg-basedir: 3.0.0 + dev: true - configstore@7.0.0: + /configstore@7.0.0: + resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} + engines: {node: '>=18'} dependencies: atomically: 2.0.3 dot-prop: 9.0.0 graceful-fs: 4.2.11 xdg-basedir: 5.1.0 + dev: true - connect-history-api-fallback@2.0.0: {} + /connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} - console-browserify@1.2.0: {} + /console-browserify@1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + dev: true - constants-browserify@1.0.0: {} + /constants-browserify@1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + dev: true - content-disposition@0.5.4: + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 - content-type@1.0.5: {} + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} - contour_plot@0.0.1: {} + /contour_plot@0.0.1: + resolution: {integrity: sha512-Nil2HI76Xux6sVGORvhSS8v66m+/h5CwFkBJDO+U5vWaMdNC0yXNCsGDPbzPhvqOEU5koebhdEvD372LI+IyLw==} + dev: false - conventional-changelog-angular@8.0.0: + /conventional-changelog-angular@8.0.0: + resolution: {integrity: sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==} + engines: {node: '>=18'} dependencies: compare-func: 2.0.0 + dev: false - conventional-changelog-atom@5.0.0: {} + /conventional-changelog-atom@5.0.0: + resolution: {integrity: sha512-WfzCaAvSCFPkznnLgLnfacRAzjgqjLUjvf3MftfsJzQdDICqkOOpcMtdJF3wTerxSpv2IAAjX8doM3Vozqle3g==} + engines: {node: '>=18'} + dev: false - conventional-changelog-cli@5.0.0(conventional-commits-filter@5.0.0): + /conventional-changelog-cli@5.0.0: + resolution: {integrity: sha512-9Y8fucJe18/6ef6ZlyIlT2YQUbczvoQZZuYmDLaGvcSBP+M6h+LAvf7ON7waRxKJemcCII8Yqu5/8HEfskTxJQ==} + engines: {node: '>=18'} + hasBin: true dependencies: add-stream: 1.0.0 - conventional-changelog: 6.0.0(conventional-commits-filter@5.0.0) + conventional-changelog: 6.0.0 meow: 13.2.0 tempfile: 5.0.0 transitivePeerDependencies: - conventional-commits-filter + dev: false - conventional-changelog-codemirror@5.0.0: {} + /conventional-changelog-codemirror@5.0.0: + resolution: {integrity: sha512-8gsBDI5Y3vrKUCxN6Ue8xr6occZ5nsDEc4C7jO/EovFGozx8uttCAyfhRrvoUAWi2WMm3OmYs+0mPJU7kQdYWQ==} + engines: {node: '>=18'} + dev: false - conventional-changelog-conventionalcommits@8.0.0: + /conventional-changelog-conventionalcommits@8.0.0: + resolution: {integrity: sha512-eOvlTO6OcySPyyyk8pKz2dP4jjElYunj9hn9/s0OB+gapTO8zwS9UQWrZ1pmF2hFs3vw1xhonOLGcGjy/zgsuA==} + engines: {node: '>=18'} dependencies: compare-func: 2.0.0 + dev: false - conventional-changelog-core@8.0.0(conventional-commits-filter@5.0.0): + /conventional-changelog-core@8.0.0: + resolution: {integrity: sha512-EATUx5y9xewpEe10UEGNpbSHRC6cVZgO+hXQjofMqpy+gFIrcGvH3Fl6yk2VFKh7m+ffenup2N7SZJYpyD9evw==} + engines: {node: '>=18'} dependencies: '@hutson/parse-repository-url': 5.0.0 add-stream: 1.0.0 conventional-changelog-writer: 8.0.0 conventional-commits-parser: 6.0.0 - git-raw-commits: 5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) - git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) + git-raw-commits: 5.0.0(conventional-commits-parser@6.0.0) + git-semver-tags: 8.0.0(conventional-commits-parser@6.0.0) hosted-git-info: 7.0.2 normalize-package-data: 6.0.2 read-package-up: 11.0.0 read-pkg: 9.0.1 transitivePeerDependencies: - conventional-commits-filter + dev: false - conventional-changelog-ember@5.0.0: {} + /conventional-changelog-ember@5.0.0: + resolution: {integrity: sha512-RPflVfm5s4cSO33GH/Ey26oxhiC67akcxSKL8CLRT3kQX2W3dbE19sSOM56iFqUJYEwv9mD9r6k79weWe1urfg==} + engines: {node: '>=18'} + dev: false - conventional-changelog-eslint@6.0.0: {} + /conventional-changelog-eslint@6.0.0: + resolution: {integrity: sha512-eiUyULWjzq+ybPjXwU6NNRflApDWlPEQEHvI8UAItYW/h22RKkMnOAtfCZxMmrcMO1OKUWtcf2MxKYMWe9zJuw==} + engines: {node: '>=18'} + dev: false - conventional-changelog-express@5.0.0: {} + /conventional-changelog-express@5.0.0: + resolution: {integrity: sha512-D8Q6WctPkQpvr2HNCCmwU5GkX22BVHM0r4EW8vN0230TSyS/d6VQJDAxGb84lbg0dFjpO22MwmsikKL++Oo/oQ==} + engines: {node: '>=18'} + dev: false - conventional-changelog-jquery@6.0.0: {} + /conventional-changelog-jquery@6.0.0: + resolution: {integrity: sha512-2kxmVakyehgyrho2ZHBi90v4AHswkGzHuTaoH40bmeNqUt20yEkDOSpw8HlPBfvEQBwGtbE+5HpRwzj6ac2UfA==} + engines: {node: '>=18'} + dev: false - conventional-changelog-jshint@5.0.0: + /conventional-changelog-jshint@5.0.0: + resolution: {integrity: sha512-gGNphSb/opc76n2eWaO6ma4/Wqu3tpa2w7i9WYqI6Cs2fncDSI2/ihOfMvXveeTTeld0oFvwMVNV+IYQIk3F3g==} + engines: {node: '>=18'} dependencies: compare-func: 2.0.0 + dev: false - conventional-changelog-preset-loader@5.0.0: {} + /conventional-changelog-preset-loader@5.0.0: + resolution: {integrity: sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==} + engines: {node: '>=18'} + dev: false - conventional-changelog-writer@8.0.0: + /conventional-changelog-writer@8.0.0: + resolution: {integrity: sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==} + engines: {node: '>=18'} + hasBin: true dependencies: '@types/semver': 7.5.8 conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 semver: 7.6.3 + dev: false - conventional-changelog@6.0.0(conventional-commits-filter@5.0.0): + /conventional-changelog@6.0.0: + resolution: {integrity: sha512-tuUH8H/19VjtD9Ig7l6TQRh+Z0Yt0NZ6w/cCkkyzUbGQTnUEmKfGtkC9gGfVgCfOL1Rzno5NgNF4KY8vR+Jo3w==} + engines: {node: '>=18'} dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-atom: 5.0.0 conventional-changelog-codemirror: 5.0.0 conventional-changelog-conventionalcommits: 8.0.0 - conventional-changelog-core: 8.0.0(conventional-commits-filter@5.0.0) + conventional-changelog-core: 8.0.0 conventional-changelog-ember: 5.0.0 conventional-changelog-eslint: 6.0.0 conventional-changelog-express: 5.0.0 @@ -18808,26 +9475,45 @@ snapshots: conventional-changelog-preset-loader: 5.0.0 transitivePeerDependencies: - conventional-commits-filter + dev: false - conventional-commits-filter@5.0.0: {} + /conventional-commits-filter@5.0.0: + resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} + engines: {node: '>=18'} + dev: false - conventional-commits-parser@6.0.0: + /conventional-commits-parser@6.0.0: + resolution: {integrity: sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==} + engines: {node: '>=18'} + hasBin: true dependencies: meow: 13.2.0 + dev: false - convert-source-map@1.9.0: {} + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true - convert-source-map@2.0.0: {} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true - cookie-signature@1.0.6: {} + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - cookie@0.7.1: {} + /cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} - copy-anything@2.0.6: + /copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} dependencies: is-what: 3.14.1 + dev: true - copy-concurrently@1.0.5: + /copy-concurrently@1.0.5: + resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==} + deprecated: This package is no longer supported. dependencies: aproba: 1.2.0 fs-write-stream-atomic: 1.0.10 @@ -18835,75 +9521,119 @@ snapshots: mkdirp: 0.5.6 rimraf: 2.7.1 run-queue: 1.0.3 + dev: true - copy-descriptor@0.1.1: {} + /copy-descriptor@0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: true - copy-to-clipboard@3.3.3: + /copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} dependencies: toggle-selection: 1.0.6 - core-js-compat@3.39.0: + /core-js-compat@3.39.0: + resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} dependencies: browserslist: 4.24.2 + dev: true - core-js-pure@3.39.0: {} + /core-js-pure@3.39.0: + resolution: {integrity: sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==} + requiresBuild: true + dev: true - core-js@2.6.12: {} + /core-js@2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + requiresBuild: true + dev: true - core-js@3.34.0: {} + /core-js@3.34.0: + resolution: {integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==} + requiresBuild: true + dev: true - core-util-is@1.0.2: {} + /core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + dev: true - core-util-is@1.0.3: {} + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cors@2.8.5: + /cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} dependencies: object-assign: 4.1.1 vary: 1.1.2 + dev: true - cosmiconfig@6.0.0: + /cosmiconfig@6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} dependencies: '@types/parse-json': 4.0.2 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 + dev: true - cosmiconfig@7.1.0: + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} dependencies: '@types/parse-json': 4.0.2 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 + dev: true - cosmiconfig@8.3.6(typescript@5.6.3): + /cosmiconfig@8.3.6(typescript@5.6.3): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - optionalDependencies: typescript: 5.6.3 + dev: true - create-ecdh@4.0.4: + /create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: bn.js: 4.12.1 elliptic: 6.6.0 + dev: true - create-error-class@3.0.2: + /create-error-class@3.0.2: + resolution: {integrity: sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==} + engines: {node: '>=0.10.0'} dependencies: capture-stack-trace: 1.0.2 + dev: true - create-hash@1.2.0: + /create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: cipher-base: 1.0.4 inherits: 2.0.4 md5.js: 1.3.5 ripemd160: 2.0.2 sha.js: 2.4.11 + dev: true - create-hmac@1.1.7: + /create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} dependencies: cipher-base: 1.0.4 create-hash: 1.2.0 @@ -18911,32 +9641,46 @@ snapshots: ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 + dev: true - cross-env@7.0.3: + /cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true dependencies: cross-spawn: 7.0.5 + dev: true - cross-spawn@5.1.0: + /cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: lru-cache: 4.1.5 shebang-command: 1.2.0 which: 1.3.1 + dev: true - cross-spawn@6.0.5: + /cross-spawn@6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} dependencies: nice-try: 1.0.5 path-key: 2.0.1 semver: 5.7.2 shebang-command: 1.2.0 which: 1.3.1 + dev: true - cross-spawn@7.0.5: + /cross-spawn@7.0.5: + resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - crypto-browserify@3.12.1: + /crypto-browserify@3.12.1: + resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} + engines: {node: '>= 0.10'} dependencies: browserify-cipher: 1.0.1 browserify-sign: 4.2.3 @@ -18950,26 +9694,62 @@ snapshots: public-encrypt: 4.0.3 randombytes: 2.1.0 randomfill: 1.0.4 + dev: true - crypto-random-string@1.0.0: {} + /crypto-random-string@1.0.0: + resolution: {integrity: sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==} + engines: {node: '>=4'} + dev: true - css-blank-pseudo@3.0.3(postcss@8.4.49): + /css-blank-pseudo@3.0.3(postcss@8.4.49): + resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 dependencies: postcss: 8.4.49 postcss-selector-parser: 6.1.2 + dev: true + + /css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + dev: false - css-color-keywords@1.0.0: {} + /css-functions-list@3.2.3: + resolution: {integrity: sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==} + engines: {node: '>=12 || >=16'} + dev: true - css-has-pseudo@3.0.4(postcss@8.4.49): + /css-has-pseudo@3.0.4(postcss@8.4.49): + resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 dependencies: postcss: 8.4.49 postcss-selector-parser: 6.1.2 + dev: true - css-in-js-utils@3.1.0: + /css-in-js-utils@3.1.0: + resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} dependencies: hyphenate-style-name: 1.1.0 + dev: true - css-loader@6.11.0(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)): + /css-loader@6.11.0(webpack@5.96.1): + resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 @@ -18979,10 +9759,14 @@ snapshots: postcss-modules-values: 4.0.0(postcss@8.4.49) postcss-value-parser: 4.2.0 semver: 7.6.3 - optionalDependencies: - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + dev: true - css-loader@6.7.1(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))): + /css-loader@6.7.1(webpack@5.96.1): + resolution: {integrity: sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 @@ -18992,250 +9776,432 @@ snapshots: postcss-modules-values: 4.0.0(postcss@8.4.49) postcss-value-parser: 4.2.0 semver: 7.6.3 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + dev: true - css-prefers-color-scheme@6.0.3(postcss@8.4.49): + /css-prefers-color-scheme@6.0.3(postcss@8.4.49): + resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 dependencies: postcss: 8.4.49 + dev: true - css-select-base-adapter@0.1.1: {} + /css-select-base-adapter@0.1.1: + resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} + dev: true - css-select@2.1.0: + /css-select@2.1.0: + resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} dependencies: boolbase: 1.0.0 css-what: 3.4.2 domutils: 1.7.0 nth-check: 1.0.2 + dev: true - css-select@4.3.0: + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} dependencies: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 4.3.1 domutils: 2.8.0 nth-check: 2.1.1 + dev: true - css-select@5.1.0: + /css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} dependencies: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 domutils: 3.1.0 nth-check: 2.1.1 + dev: true - css-to-react-native@3.2.0: + /css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} dependencies: camelize: 1.0.1 css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 + dev: false - css-tree@1.0.0-alpha.37: + /css-tree@1.0.0-alpha.37: + resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} + engines: {node: '>=8.0.0'} dependencies: mdn-data: 2.0.4 source-map: 0.6.1 + dev: true - css-tree@1.1.3: + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} dependencies: mdn-data: 2.0.14 source-map: 0.6.1 + dev: true - css-what@3.4.2: {} + /css-what@3.4.2: + resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} + engines: {node: '>= 6'} + dev: true - css-what@6.1.0: {} + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: true - css.escape@1.5.1: {} + /css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + dev: true - css@3.0.0: + /css@3.0.0: + resolution: {integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==} dependencies: inherits: 2.0.4 source-map: 0.6.1 source-map-resolve: 0.6.0 + dev: true - cssdb@6.6.3: {} + /cssdb@6.6.3: + resolution: {integrity: sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==} + dev: true - cssesc@3.0.0: {} + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true - cssfontparser@1.2.1: {} + /cssfontparser@1.2.1: + resolution: {integrity: sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg==} + dev: true - csso@4.2.0: + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} dependencies: css-tree: 1.1.3 + dev: true - cssom@0.3.8: {} + /cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: true - cssom@0.4.4: {} + /cssom@0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + dev: true - cssstyle@1.4.0: + /cssstyle@1.4.0: + resolution: {integrity: sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==} dependencies: cssom: 0.3.8 + dev: true - cssstyle@2.3.0: + /cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} dependencies: cssom: 0.3.8 + dev: true - csstype@3.1.3: {} + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - current-script-polyfill@1.0.0: {} + /current-script-polyfill@1.0.0: + resolution: {integrity: sha512-qv8s+G47V6Hq+g2kRE5th+ASzzrL7b6l+tap1DHKK25ZQJv3yIFhH96XaQ7NGL+zRW3t/RDbweJf/dJDe5Z5KA==} + dev: true - cwd@0.9.1: + /cwd@0.9.1: + resolution: {integrity: sha512-4+0D+ojEasdLndYX4Cqff057I/Jp6ysXpwKkdLQLnZxV8f6IYZmZtTP5uqD91a/kWqejoc0sSqK4u8wpTKCh8A==} + engines: {node: '>=0.8'} dependencies: find-pkg: 0.1.2 + dev: true - cyclist@1.0.2: {} + /cyclist@1.0.2: + resolution: {integrity: sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==} + dev: true - d3-array@3.2.4: + /d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} dependencies: internmap: 2.0.3 + dev: false - d3-binarytree@1.0.2: {} + /d3-binarytree@1.0.2: + resolution: {integrity: sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==} + dev: false - d3-color@3.1.0: {} + /d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} - d3-dispatch@3.0.1: {} + /d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + dev: false - d3-dsv@3.0.1: + /d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true dependencies: commander: 7.2.0 iconv-lite: 0.6.3 rw: 1.3.3 - d3-force-3d@3.0.5: + /d3-force-3d@3.0.5: + resolution: {integrity: sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==} + engines: {node: '>=12'} dependencies: d3-binarytree: 1.0.2 d3-dispatch: 3.0.1 d3-octree: 1.0.2 d3-quadtree: 3.0.1 d3-timer: 3.0.1 + dev: false - d3-force@3.0.0: + /d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} dependencies: d3-dispatch: 3.0.1 d3-quadtree: 3.0.1 d3-timer: 3.0.1 + dev: false - d3-format@3.1.0: {} + /d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + dev: false - d3-geo@3.1.1: + /d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} dependencies: d3-array: 3.2.4 + dev: false - d3-hierarchy@3.1.2: {} + /d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + dev: false - d3-interpolate@3.0.1: + /d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} dependencies: d3-color: 3.1.0 - d3-octree@1.0.2: {} + /d3-octree@1.0.2: + resolution: {integrity: sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==} + dev: false - d3-path@3.1.0: {} + /d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + dev: false - d3-quadtree@3.0.1: {} + /d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + dev: false - d3-regression@1.3.10: {} + /d3-regression@1.3.10: + resolution: {integrity: sha512-PF8GWEL70cHHWpx2jUQXc68r1pyPHIA+St16muk/XRokETzlegj5LriNKg7o4LR0TySug4nHYPJNNRz/W+/Niw==} + dev: true - d3-scale-chromatic@3.1.0: + /d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} dependencies: d3-color: 3.1.0 d3-interpolate: 3.0.1 + dev: false - d3-shape@3.2.0: + /d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} dependencies: d3-path: 3.1.0 + dev: false - d3-timer@3.0.1: {} + /d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + dev: false - dagre@0.8.5: + /dagre@0.8.5: + resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==} dependencies: graphlib: 2.1.8 lodash: 4.17.21 + dev: false - dashdash@1.14.1: + /dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} dependencies: assert-plus: 1.0.0 + dev: true - data-uri-to-buffer@4.0.1: {} + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true - data-urls@1.1.0: + /data-urls@1.1.0: + resolution: {integrity: sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==} dependencies: abab: 2.0.6 whatwg-mimetype: 2.3.0 whatwg-url: 7.1.0 + dev: true - data-urls@2.0.0: + /data-urls@2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} dependencies: abab: 2.0.6 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 + dev: true - data-view-buffer@1.0.1: + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - data-view-byte-length@1.0.1: + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - data-view-byte-offset@1.0.0: + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - datauri@3.0.0: + /datauri@3.0.0: + resolution: {integrity: sha512-NeDFuUPV1YCpCn8MUIcDk1QnuyenUHs7f4Q5P0n9FFA0neKFrfEH9esR+YMW95BplbYfdmjbs0Pl/ZGAaM2QHQ==} + engines: {node: '>= 8'} dependencies: image-size: 0.8.3 mimer: 1.1.0 + dev: true - date-fns@1.30.1: {} + /date-fns@1.30.1: + resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} + dev: true - date-fns@2.30.0: + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} dependencies: '@babel/runtime': 7.26.0 + dev: true - dayjs@1.11.13: {} + /dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - debounce@1.2.1: {} + /debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - debug@2.6.9: + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.0.0 - debug@3.1.0: + /debug@3.1.0: + resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.0.0 + dev: true - debug@3.2.7: + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.1.3 + dev: true - debug@4.3.7: + /debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.1.3 - decamelize-keys@1.1.1: + /decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} dependencies: decamelize: 1.2.0 map-obj: 1.0.1 + dev: true - decamelize@1.2.0: {} + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} - decimal.js@10.4.3: {} + /decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: true - decode-named-character-reference@1.0.2: + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} dependencies: character-entities: 2.0.2 - decode-uri-component@0.2.2: {} + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: true - decompress-response@3.3.0: + /decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} dependencies: mimic-response: 1.0.1 + dev: true - deep-equal@1.1.2: + /deep-equal@1.1.2: + resolution: {integrity: sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==} + engines: {node: '>= 0.4'} dependencies: is-arguments: 1.1.1 is-date-object: 1.0.5 @@ -19243,77 +10209,128 @@ snapshots: object-is: 1.1.6 object-keys: 1.1.1 regexp.prototype.flags: 1.5.3 + dev: false - deep-extend@0.6.0: {} + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true - deep-is@0.1.4: {} + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true - deep-rename-keys@0.2.1: + /deep-rename-keys@0.2.1: + resolution: {integrity: sha512-RHd9ABw4Fvk+gYDWqwOftG849x0bYOySl/RgX0tLI9i27ZIeSO91mLZJEp7oPHOMFqHvpgu21YptmDt0FYD/0A==} + engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 rename-keys: 1.2.0 + dev: true - deepmerge@1.5.2: {} + /deepmerge@1.5.2: + resolution: {integrity: sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==} + engines: {node: '>=0.10.0'} + dev: true - deepmerge@4.3.1: {} + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true - default-browser-id@3.0.0: + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} dependencies: bplist-parser: 0.2.0 untildify: 4.0.0 + dev: true - default-browser-id@5.0.0: {} + /default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} - default-browser@4.0.0: + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} dependencies: bundle-name: 3.0.0 default-browser-id: 3.0.0 execa: 7.2.0 titleize: 3.0.0 + dev: true - default-browser@5.2.1: + /default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} dependencies: bundle-name: 4.1.0 default-browser-id: 5.0.0 - defaults@1.0.4: + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 + dev: true - defer-to-connect@1.1.3: {} + /defer-to-connect@1.1.3: + resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + dev: true - define-data-property@1.1.4: + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - define-lazy-prop@2.0.0: {} + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true - define-lazy-prop@3.0.0: {} + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} - define-properties@1.2.1: + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - define-property@0.2.5: + /define-property@0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} dependencies: is-descriptor: 0.1.7 + dev: true - define-property@1.0.0: + /define-property@1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} dependencies: is-descriptor: 1.0.3 + dev: true - define-property@2.0.2: + /define-property@2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} dependencies: is-descriptor: 1.0.3 isobject: 3.0.1 + dev: true - defined@1.0.1: {} + /defined@1.0.1: + resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + dev: false - del@7.1.0: + /del@7.1.0: + resolution: {integrity: sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==} + engines: {node: '>=14.16'} dependencies: globby: 13.2.2 graceful-fs: 4.2.11 @@ -19323,76 +10340,147 @@ snapshots: p-map: 5.5.0 rimraf: 3.0.2 slash: 4.0.0 + dev: true - delayed-stream@1.0.0: {} + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true - depd@1.1.2: {} + /depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} - depd@2.0.0: {} + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} - dequal@2.0.3: {} + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} - derive-valtio@0.1.0(valtio@1.13.2(@types/react@16.14.62)(react@18.3.1)): + /derive-valtio@0.1.0(valtio@1.13.2): + resolution: {integrity: sha512-OCg2UsLbXK7GmmpzMXhYkdO64vhJ1ROUUGaTFyHjVwEdMEcTTRj7W1TxLbSBxdY8QLBPCcp66MTyaSy0RpO17A==} + peerDependencies: + valtio: '*' dependencies: valtio: 1.13.2(@types/react@16.14.62)(react@18.3.1) + dev: true - des.js@1.1.0: + /des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 + dev: true - destroy@1.2.0: {} + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-indent@6.1.0: {} + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true - detect-indent@7.0.1: {} + /detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + dev: true - detect-libc@1.0.3: {} + /detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + dev: true - detect-newline@2.1.0: {} + /detect-newline@2.1.0: + resolution: {integrity: sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==} + engines: {node: '>=0.10.0'} + dev: true - detect-newline@3.1.0: {} + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true - detect-newline@4.0.1: {} + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - detect-node@2.1.0: {} + /detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - detect-port-alt@1.1.6: + /detect-port-alt@1.1.6: + resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} + engines: {node: '>= 4.2.1'} + hasBin: true dependencies: address: 1.2.2 debug: 2.6.9 transitivePeerDependencies: - supports-color + dev: true - devlop@1.1.0: + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} dependencies: dequal: 2.0.3 + dev: true + + /diff-sequences@24.9.0: + resolution: {integrity: sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==} + engines: {node: '>= 6'} + dev: true - diff-sequences@24.9.0: {} + /diff-sequences@26.6.2: + resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} + engines: {node: '>= 10.14.2'} + dev: true - diff-sequences@26.6.2: {} + /diff-sequences@27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true - diff-sequences@27.5.1: {} + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true - diff@5.2.0: {} + /diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} - diffie-hellman@5.0.3: + /diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: bn.js: 4.12.1 miller-rabin: 4.0.1 randombytes: 2.1.0 + dev: true - dir-glob@3.0.1: + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 + dev: true - discontinuous-range@1.0.0: {} + /discontinuous-range@1.0.0: + resolution: {integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==} + dev: true - dns-packet@5.6.1: + /dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} dependencies: '@leichtgewicht/ip-codec': 2.0.5 - docsearch.js@2.6.3: + /docsearch.js@2.6.3: + resolution: {integrity: sha512-GN+MBozuyz664ycpZY0ecdQE0ND/LSgJKhTLA0/v3arIS3S1Rpf2OJz6A35ReMsm91V5apcmzr5/kM84cvUg+A==} + deprecated: This package has been deprecated and is no longer maintained. Please use @docsearch/js. dependencies: algoliasearch: 3.35.1 autocomplete.js: 0.36.0 @@ -19403,116 +10491,188 @@ snapshots: zepto: 1.2.0 transitivePeerDependencies: - supports-color + dev: true - doctrine@2.1.0: + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 + dev: true - doctrine@3.0.0: + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 + dev: true - dom-accessibility-api@0.5.16: {} + /dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dev: true - dom-align@1.12.4: {} + /dom-align@1.12.4: + resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==} + dev: true - dom-converter@0.2.0: + /dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} dependencies: utila: 0.4.0 + dev: true - dom-serializer@0.2.2: + /dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} dependencies: domelementtype: 2.3.0 entities: 2.2.0 + dev: true - dom-serializer@1.4.1: + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} dependencies: domelementtype: 2.3.0 domhandler: 4.3.1 entities: 2.2.0 + dev: true - dom-serializer@2.0.0: + /dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 + dev: true - dom-walk@0.1.2: {} + /dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + dev: true - domain-browser@1.2.0: {} + /domain-browser@1.2.0: + resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} + engines: {node: '>=0.4', npm: '>=1.2'} + dev: true - domelementtype@1.3.1: {} + /domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: true - domelementtype@2.3.0: {} + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true - domexception@1.0.1: + /domexception@1.0.1: + resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==} + deprecated: Use your platform's native DOMException instead dependencies: webidl-conversions: 4.0.2 + dev: true - domexception@2.0.1: + /domexception@2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + deprecated: Use your platform's native DOMException instead dependencies: webidl-conversions: 5.0.0 + dev: true - domhandler@2.4.2: + /domhandler@2.4.2: + resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} dependencies: domelementtype: 1.3.1 + dev: true - domhandler@4.3.1: + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 + dev: true - domhandler@5.0.3: + /domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 + dev: true - domutils@1.7.0: + /domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} dependencies: dom-serializer: 0.2.2 domelementtype: 1.3.1 + dev: true - domutils@2.8.0: + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} dependencies: dom-serializer: 1.4.1 domelementtype: 2.3.0 domhandler: 4.3.1 + dev: true - domutils@3.1.0: + /domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 + dev: true - dot-case@3.0.4: + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 tslib: 2.6.1 + dev: true - dot-prop@4.2.1: + /dot-prop@4.2.1: + resolution: {integrity: sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==} + engines: {node: '>=4'} dependencies: is-obj: 1.0.1 + dev: true - dot-prop@5.3.0: + /dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} dependencies: is-obj: 2.0.0 + dev: false - dot-prop@9.0.0: + /dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} dependencies: type-fest: 4.26.1 + dev: true - dotignore@0.1.2: + /dotignore@0.1.2: + resolution: {integrity: sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==} + hasBin: true dependencies: minimatch: 3.1.2 + dev: false - dumi-afx-deps@1.0.0-alpha.20: {} + /dumi-afx-deps@1.0.0-alpha.20: + resolution: {integrity: sha512-PRSJlHuJkyHDET7Hukykx/hLULkgUBX5q2CutMG5EDI3eJLzJlX634wNll10m3at1uomcDAVudL7Dgh5UOJ7IQ==} + dev: true - dumi-assets-types@2.3.0: {} + /dumi-assets-types@2.3.0: + resolution: {integrity: sha512-mM6UoGTgTNoo8lA4dwaIwoeSGT+4PeQeiFylr2+kCB5z3/7NEf7lIM4tqrAsEyzecE/HX0+w7Z78hnFZQ9k5vQ==} + dev: true - dumi@2.4.13(@babel/core@7.23.6)(@swc/helpers@0.5.1)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.25.0)(stylelint@13.13.1)(sugarss@2.0.0)(terser@5.36.0)(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))): + /dumi@2.4.13(@babel/core@7.26.0)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(prettier@2.8.8)(react-dom@18.3.1)(react@18.3.1)(stylelint@14.16.1)(typescript@3.9.10)(webpack-dev-server@5.1.0)(webpack@5.96.1): + resolution: {integrity: sha512-cOeFrY7MgdcVJpRn4+v5Kb9LJbPz55FekwuPLKUyphw/fJFe/Chu0+bTV619VlQtIZUPelnob0vHmoBE4eT9nw==} + hasBin: true + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' dependencies: '@ant-design/icons-svg': 4.4.2 '@makotot/ghostui': 2.0.0(react@18.3.1) '@stackblitz/sdk': 1.11.0 - '@swc/core': 1.4.2(@swc/helpers@0.5.1) + '@swc/core': 1.4.2 '@types/hast': 2.3.10 '@types/mdast': 3.0.15 '@umijs/bundler-utils': 4.3.31 @@ -19548,19 +10708,19 @@ snapshots: prism-react-renderer: 1.3.5(react@18.3.1) prism-themes: 1.9.0 prismjs: 1.29.0 - raw-loader: 4.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tabs: 12.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tooltip: 6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree: 5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + raw-loader: 4.0.2(webpack@5.96.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-tabs: 12.15.0(react-dom@18.3.1)(react@18.3.1) + rc-tooltip: 6.2.1(react-dom@18.3.1)(react@18.3.1) + rc-tree: 5.10.1(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-copy-to-clipboard: 5.1.0(react@18.3.1) react-dom: 18.3.1(react@18.3.1) react-error-boundary: 4.1.2(react@18.3.1) react-intl: 6.8.7(react@18.3.1)(typescript@3.9.10) react-loading-skeleton: 3.5.0(react@18.3.1) - react-simple-code-editor: 0.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-simple-code-editor: 0.13.1(react-dom@18.3.1)(react@18.3.1) rehype-autolink-headings: 6.1.1 rehype-remove-comments: 5.0.0 rehype-stringify: 9.0.4 @@ -19569,10 +10729,10 @@ snapshots: remark-gfm: 3.0.1 remark-parse: 10.0.2 remark-rehype: 10.1.0 - sass: 1.80.6 + sass: 1.80.7 sitemap: 7.1.2 sucrase: 3.35.0 - umi: 4.3.31(@babel/core@7.23.6)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.25.0)(sass@1.80.6)(stylelint@13.13.1)(sugarss@2.0.0)(terser@5.36.0)(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) + umi: 4.3.31(@babel/core@7.26.0)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(prettier@2.8.8)(react-dom@18.3.1)(react@18.3.1)(sass@1.80.7)(stylelint@14.16.1)(typescript@3.9.10)(webpack-dev-server@5.1.0)(webpack@5.96.1) unified: 10.1.2 unist-util-visit: 4.1.2 unist-util-visit-parents: 5.1.3 @@ -19609,56 +10769,86 @@ snapshots: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve + dev: true - duplexer3@0.1.5: {} + /duplexer3@0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + dev: true - duplexer@0.1.2: {} + /duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - duplexify@3.7.1: + /duplexify@3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 2.3.8 stream-shift: 1.0.3 + dev: true - duplexify@4.1.3: + /duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 3.6.2 stream-shift: 1.0.3 + dev: true - eastasianwidth@0.2.0: {} + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true - ecc-jsbn@0.1.2: + /ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 + dev: true - editions@2.3.1: + /editions@2.3.1: + resolution: {integrity: sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==} + engines: {node: '>=0.8'} dependencies: errlop: 2.2.0 semver: 6.3.1 + dev: true - ee-first@1.1.1: {} + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - ejs@3.1.10: + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true dependencies: jake: 10.9.2 + dev: true - electron-to-chromium@1.5.56: {} + /electron-to-chromium@1.5.57: + resolution: {integrity: sha512-xS65H/tqgOwUBa5UmOuNSLuslDo7zho0y/lgQw35pnrqiZh7UOWHCeL/Bt6noJATbA6tpQJGCifsFsIRZj1Fqg==} - electron@11.5.0: + /electron@11.5.0: + resolution: {integrity: sha512-WjNDd6lGpxyiNjE3LhnFCAk/D9GIj1rU3GSDealVShhkkkPR3Vh4q8ErXGDl1OAO/faomVa10KoFPUN/pLbNxg==} + engines: {node: '>= 8.6'} + hasBin: true + requiresBuild: true dependencies: '@electron/get': 1.14.1 '@types/node': 12.20.55 extract-zip: 1.7.0 transitivePeerDependencies: - supports-color + dev: true - elegant-spinner@1.0.1: {} + /elegant-spinner@1.0.1: + resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} + engines: {node: '>=0.10.0'} + dev: true - elliptic@6.6.0: + /elliptic@6.6.0: + resolution: {integrity: sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==} dependencies: bn.js: 4.12.1 brorand: 1.1.0 @@ -19667,83 +10857,143 @@ snapshots: inherits: 2.0.4 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + dev: true - email-addresses@3.1.0: {} + /email-addresses@3.1.0: + resolution: {integrity: sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==} + dev: true - emittery@0.7.2: {} + /emittery@0.7.2: + resolution: {integrity: sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==} + engines: {node: '>=10'} + dev: true - emoji-regex@10.4.0: {} + /emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + dev: true - emoji-regex@7.0.3: {} + /emoji-regex@7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + dev: true - emoji-regex@8.0.0: {} + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true - emoji-regex@9.2.2: {} + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true - emojis-list@3.0.0: {} + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} - encodeurl@1.0.2: {} + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} - encodeurl@2.0.0: {} + /encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} - encoding-sniffer@0.2.0: + /encoding-sniffer@0.2.0: + resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} dependencies: iconv-lite: 0.6.3 whatwg-encoding: 3.1.1 + dev: true - encoding@0.1.13: + /encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} dependencies: iconv-lite: 0.6.3 + dev: true - end-of-stream@1.4.4: + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 + dev: true - enhanced-resolve@5.17.1: + /enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - enhanced-resolve@5.9.3: + /enhanced-resolve@5.9.3: + resolution: {integrity: sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==} + engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 + dev: true - enquire.js@2.1.6: {} + /enquire.js@2.1.6: + resolution: {integrity: sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==} + dev: true - enquirer@2.4.1: + /enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 strip-ansi: 6.0.1 + dev: true - entities@1.1.2: {} + /entities@1.1.2: + resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} + dev: true - entities@2.2.0: {} + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true - entities@4.5.0: {} + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: true - env-paths@2.2.1: {} + /env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + dev: true - envify@4.1.0: + /envify@4.1.0: + resolution: {integrity: sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==} + hasBin: true dependencies: esprima: 4.0.1 through: 2.3.8 + dev: true - envinfo@7.14.0: {} + /envinfo@7.14.0: + resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} + engines: {node: '>=4'} + hasBin: true - enzyme-shallow-equal@1.0.7: + /enzyme-shallow-equal@1.0.7: + resolution: {integrity: sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg==} dependencies: hasown: 2.0.2 object-is: 1.1.6 + dev: true - enzyme-to-json@3.6.2(enzyme@3.11.0): + /enzyme-to-json@3.6.2(enzyme@3.11.0): + resolution: {integrity: sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==} + engines: {node: '>=6.0.0'} + peerDependencies: + enzyme: ^3.4.0 dependencies: '@types/cheerio': 0.22.35 enzyme: 3.11.0 lodash: 4.17.21 react-is: 16.13.1 + dev: true - enzyme@3.11.0: + /enzyme@3.11.0: + resolution: {integrity: sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==} dependencies: array.prototype.flat: 1.3.2 cheerio: 1.0.0 @@ -19767,25 +11017,41 @@ snapshots: raf: 3.4.1 rst-selector-parser: 2.2.3 string.prototype.trim: 1.2.9 + dev: true - err-code@1.1.2: {} + /err-code@1.1.2: + resolution: {integrity: sha512-CJAN+O0/yA1CKfRn9SXOGctSpEM7DCon/r/5r2eXFMY2zCCJBasFhcM5I+1kh3Ap11FsQCX+vGHceNPvpWKhoA==} + dev: true - errlop@2.2.0: {} + /errlop@2.2.0: + resolution: {integrity: sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==} + engines: {node: '>=0.8'} + dev: true - errno@0.1.8: + /errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + requiresBuild: true dependencies: prr: 1.0.1 + dev: true optional: true - error-ex@1.3.2: + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 + dev: true - error-stack-parser@2.1.4: + /error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} dependencies: stackframe: 1.3.4 + dev: true - es-abstract@1.23.3: + /es-abstract@1.23.4: + resolution: {integrity: sha512-HR1gxH5OaiN7XH7uiWH0RLw0RcFySiSoW1ctxmD1ahTw3uGBtkmm/ng0tDU1OtYx5OK6EOL5Y6O21cDflG3Jcg==} + engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 @@ -19834,15 +11100,22 @@ snapshots: unbox-primitive: 1.0.2 which-typed-array: 1.1.15 - es-array-method-boxes-properly@1.0.0: {} + /es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true - es-define-property@1.0.0: + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 - es-errors@1.3.0: {} + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} - es-get-iterator@1.1.3: + /es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 @@ -19853,12 +11126,15 @@ snapshots: is-string: 1.0.7 isarray: 2.0.5 stop-iteration-iterator: 1.0.0 + dev: true - es-iterator-helpers@1.2.0: + /es-iterator-helpers@1.2.0: + resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-errors: 1.3.0 es-set-tostringtag: 2.0.3 function-bind: 1.1.2 @@ -19871,41 +11147,63 @@ snapshots: internal-slot: 1.0.7 iterator.prototype: 1.1.3 safe-array-concat: 1.1.2 + dev: true - es-module-lexer@1.5.4: {} + /es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - es-object-atoms@1.0.0: + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.0.3: + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.2 - es-shim-unscopables@1.0.2: + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: hasown: 2.0.2 + dev: true - es-to-primitive@1.2.1: + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - es5-imcompatible-versions@0.1.90: {} + /es5-imcompatible-versions@0.1.90: + resolution: {integrity: sha512-2MPI0t/VV4j/oz1qbMekb4gCW81dewTpM2XJHKnPpZiPGu+1rVWmhTnwcq1vt8AFwWrkNF4RE7OZ9ibnKFYKwg==} + dev: true - es6-error@4.1.1: + /es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + dev: true optional: true - es6-promise@4.2.8: {} + /es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: true - es6-promisify@5.0.0: + /es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} dependencies: es6-promise: 4.2.8 + dev: true - esbuild@0.18.20: + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.18.20 '@esbuild/android-arm64': 0.18.20 @@ -19929,8 +11227,13 @@ snapshots: '@esbuild/win32-arm64': 0.18.20 '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 + dev: true - esbuild@0.21.4: + /esbuild@0.21.4: + resolution: {integrity: sha512-sFMcNNrj+Q0ZDolrp5pDhH0nRPN9hLIM3fRPwgbLYJeSHHgnXSnbV3xYgSVuOeLWH9c73VwmEverVzupIv5xuA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true optionalDependencies: '@esbuild/aix-ppc64': 0.21.4 '@esbuild/android-arm': 0.21.4 @@ -19955,8 +11258,13 @@ snapshots: '@esbuild/win32-arm64': 0.21.4 '@esbuild/win32-ia32': 0.21.4 '@esbuild/win32-x64': 0.21.4 + dev: true - esbuild@0.21.5: + /esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 '@esbuild/android-arm': 0.21.5 @@ -19981,22 +11289,42 @@ snapshots: '@esbuild/win32-arm64': 0.21.5 '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + dev: true - escalade@3.2.0: {} + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} - escape-goat@4.0.0: {} + /escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + dev: true - escape-html@1.0.3: {} + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@1.0.5: {} + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: {} + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true - escape-string-regexp@4.0.0: {} + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} - escape-string-regexp@5.0.0: {} + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true - escodegen@1.14.3: + /escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true dependencies: esprima: 4.0.1 estraverse: 4.3.0 @@ -20004,25 +11332,40 @@ snapshots: optionator: 0.8.3 optionalDependencies: source-map: 0.6.1 + dev: true - escodegen@2.1.0: + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 + dev: true - eslint-ast-utils@1.1.0: + /eslint-ast-utils@1.1.0: + resolution: {integrity: sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==} + engines: {node: '>=4'} dependencies: lodash.get: 4.4.2 lodash.zip: 4.2.0 + dev: true - eslint-config-prettier@8.10.0(eslint@7.32.0): + /eslint-config-prettier@8.10.0(eslint@7.32.0): + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' dependencies: eslint: 7.32.0 + dev: true - eslint-formatter-pretty@4.1.0: + /eslint-formatter-pretty@4.1.0: + resolution: {integrity: sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==} + engines: {node: '>=10'} dependencies: '@types/eslint': 7.29.0 ansi-escapes: 4.3.2 @@ -20032,46 +11375,90 @@ snapshots: plur: 4.0.0 string-width: 4.2.3 supports-hyperlinks: 2.3.0 + dev: true - eslint-plugin-babel@5.3.1(eslint@7.32.0): + /eslint-plugin-babel@5.3.1(eslint@7.32.0): + resolution: {integrity: sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==} + engines: {node: '>=4'} + peerDependencies: + eslint: '>=4.0.0' dependencies: eslint: 7.32.0 eslint-rule-composer: 0.3.0 + dev: true - eslint-plugin-jest@24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@4.9.5))(eslint@7.32.0)(typescript@4.9.5))(eslint@7.32.0)(typescript@4.9.5): + /eslint-plugin-jest@24.7.0(@typescript-eslint/eslint-plugin@4.33.0)(eslint@7.32.0)(typescript@4.9.5): + resolution: {integrity: sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==} + engines: {node: '>=10'} + peerDependencies: + '@typescript-eslint/eslint-plugin': '>= 4' + eslint: '>=5' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true dependencies: + '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@4.9.5) '@typescript-eslint/experimental-utils': 4.33.0(eslint@7.32.0)(typescript@4.9.5) eslint: 7.32.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.6.3))(eslint@7.32.0)(typescript@5.6.3) transitivePeerDependencies: - supports-color - typescript + dev: true - eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@3.9.10))(eslint@7.32.0)(typescript@3.9.10))(eslint@7.32.0)(jest@26.6.3)(typescript@3.9.10): + /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@4.33.0)(eslint@7.32.0)(jest@26.6.3)(typescript@3.9.10): + resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true dependencies: + '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@3.9.10) '@typescript-eslint/utils': 5.62.0(eslint@7.32.0)(typescript@3.9.10) eslint: 7.32.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@3.9.10))(eslint@7.32.0)(typescript@3.9.10) jest: 26.6.3 transitivePeerDependencies: - supports-color - typescript + dev: true - eslint-plugin-promise@6.6.0(eslint@7.32.0): + /eslint-plugin-promise@6.6.0(eslint@7.32.0): + resolution: {integrity: sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: eslint: 7.32.0 + dev: true - eslint-plugin-react-hooks@4.6.0(eslint@7.32.0): + /eslint-plugin-react-hooks@4.6.0(eslint@7.32.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: eslint: 7.32.0 + dev: true - eslint-plugin-react-hooks@4.6.2(eslint@7.32.0): + /eslint-plugin-react-hooks@4.6.2(eslint@7.32.0): + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: eslint: 7.32.0 + dev: true - eslint-plugin-react@7.33.2(eslint@7.32.0): + /eslint-plugin-react@7.33.2(eslint@7.32.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -20090,8 +11477,13 @@ snapshots: resolve: 2.0.0-next.5 semver: 6.3.1 string.prototype.matchall: 4.0.11 + dev: true - eslint-plugin-react@7.37.2(eslint@7.32.0): + /eslint-plugin-react@7.37.2(eslint@7.32.0): + resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -20112,8 +11504,13 @@ snapshots: semver: 6.3.1 string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 + dev: true - eslint-plugin-unicorn@20.1.0(eslint@7.32.0): + /eslint-plugin-unicorn@20.1.0(eslint@7.32.0): + resolution: {integrity: sha512-XQxLBJT/gnwyRR6cfYsIK1AdekQchAt5tmcsnldevGjgR2xoZsRUa5/i6e0seNHy2RoT57CkTnbVHwHF8No8LA==} + engines: {node: '>=10'} + peerDependencies: + eslint: '>=7.0.0' dependencies: ci-info: 2.0.0 clean-regexp: 1.0.0 @@ -20131,17 +11528,28 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - supports-color + dev: true - eslint-rule-composer@0.3.0: {} + /eslint-rule-composer@0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} + dev: true - eslint-rule-docs@1.1.235: {} + /eslint-rule-docs@1.1.235: + resolution: {integrity: sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==} + dev: true - eslint-scope@5.1.1: + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-template-visitor@2.3.2(eslint@7.32.0): + /eslint-template-visitor@2.3.2(eslint@7.32.0): + resolution: {integrity: sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==} + peerDependencies: + eslint: '>=7.0.0' dependencies: '@babel/core': 7.26.0 '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@7.32.0) @@ -20151,23 +11559,45 @@ snapshots: multimap: 1.1.0 transitivePeerDependencies: - supports-color + dev: true - eslint-utils@2.1.0: + /eslint-utils@2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} dependencies: eslint-visitor-keys: 1.3.0 + dev: true - eslint-utils@3.0.0(eslint@7.32.0): + /eslint-utils@3.0.0(eslint@7.32.0): + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' dependencies: eslint: 7.32.0 eslint-visitor-keys: 2.1.0 + dev: true - eslint-visitor-keys@1.3.0: {} + /eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: true - eslint-visitor-keys@2.1.0: {} + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true - eslint-visitor-keys@3.4.3: {} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - eslint@7.32.0: + /eslint@7.32.0: + resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} + engines: {node: ^10.12.0 || >=12.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true dependencies: '@babel/code-frame': 7.12.11 '@eslint/eslintrc': 0.4.3 @@ -20211,70 +11641,121 @@ snapshots: v8-compile-cache: 2.4.0 transitivePeerDependencies: - supports-color + dev: true - espree@7.3.1: + /espree@7.3.1: + resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) eslint-visitor-keys: 1.3.0 + dev: true - esprima@4.0.1: {} + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true - esquery@1.6.0: + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 + dev: true - esrecurse@4.3.0: + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 - estraverse@4.3.0: {} + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} - estraverse@5.3.0: {} + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} - estree-util-attach-comments@2.1.1: + /estree-util-attach-comments@2.1.1: + resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} dependencies: '@types/estree': 1.0.6 + dev: true - estree-util-is-identifier-name@2.1.0: {} + /estree-util-is-identifier-name@2.1.0: + resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + dev: true - estree-util-is-identifier-name@3.0.0: {} + /estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + dev: true - estree-util-to-js@1.2.0: + /estree-util-to-js@1.2.0: + resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} dependencies: '@types/estree-jsx': 1.0.5 astring: 1.9.0 source-map: 0.7.4 + dev: true - estree-util-visit@1.2.1: + /estree-util-visit@1.2.1: + resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} dependencies: '@types/estree-jsx': 1.0.5 '@types/unist': 2.0.11 + dev: true - esutils@2.0.3: {} + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true - etag@1.8.1: {} + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} - eventemitter3@2.0.3: {} + /eventemitter3@2.0.3: + resolution: {integrity: sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==} + dev: true - eventemitter3@4.0.7: {} + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - eventemitter3@5.0.1: {} + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: false - events-okam@3.3.0: {} + /events-okam@3.3.0: + resolution: {integrity: sha512-6iR7z9hAJEwrT+D2Ywg6Fx62HSmN86OlcvPdrnq1JBeFr30dMF6l+j7M3VabjHfIi2KMtF8rO0J1rIZEfwMAwg==} + engines: {node: '>=0.8.x'} + dev: true - events@1.1.1: {} + /events@1.1.1: + resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} + engines: {node: '>=0.4.x'} + dev: true - events@3.3.0: {} + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} - evp_bytestokey@1.0.3: + /evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 + dev: true - exec-sh@0.3.6: {} + /exec-sh@0.3.6: + resolution: {integrity: sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==} + dev: true - execa@0.7.0: + /execa@0.7.0: + resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} + engines: {node: '>=4'} dependencies: cross-spawn: 5.1.0 get-stream: 3.0.0 @@ -20283,8 +11764,11 @@ snapshots: p-finally: 1.0.0 signal-exit: 3.0.7 strip-eof: 1.0.0 + dev: true - execa@0.8.0: + /execa@0.8.0: + resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==} + engines: {node: '>=4'} dependencies: cross-spawn: 5.1.0 get-stream: 3.0.0 @@ -20293,8 +11777,11 @@ snapshots: p-finally: 1.0.0 signal-exit: 3.0.7 strip-eof: 1.0.0 + dev: true - execa@1.0.0: + /execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} dependencies: cross-spawn: 6.0.5 get-stream: 4.1.0 @@ -20303,8 +11790,11 @@ snapshots: p-finally: 1.0.0 signal-exit: 3.0.7 strip-eof: 1.0.0 + dev: true - execa@4.1.0: + /execa@4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} dependencies: cross-spawn: 7.0.5 get-stream: 5.2.0 @@ -20315,8 +11805,11 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 + dev: true - execa@5.1.1: + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} dependencies: cross-spawn: 7.0.5 get-stream: 6.0.1 @@ -20327,8 +11820,11 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 + dev: true - execa@7.2.0: + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: cross-spawn: 7.0.5 get-stream: 6.0.1 @@ -20339,8 +11835,11 @@ snapshots: onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 + dev: true - execa@8.0.1: + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} dependencies: cross-spawn: 7.0.5 get-stream: 8.0.1 @@ -20351,16 +11850,28 @@ snapshots: onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 + dev: true - execall@2.0.0: + /execall@2.0.0: + resolution: {integrity: sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==} + engines: {node: '>=8'} dependencies: clone-regexp: 2.2.0 + dev: true - exit-hook@4.0.0: {} + /exit-hook@4.0.0: + resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==} + engines: {node: '>=18'} + dev: true - exit@0.1.2: {} + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: true - expand-brackets@2.1.4: + /expand-brackets@2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} dependencies: debug: 2.6.9 define-property: 0.2.5 @@ -20371,12 +11882,18 @@ snapshots: to-regex: 3.0.2 transitivePeerDependencies: - supports-color + dev: true - expand-tilde@1.2.2: + /expand-tilde@1.2.2: + resolution: {integrity: sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==} + engines: {node: '>=0.10.0'} dependencies: os-homedir: 1.0.2 + dev: true - expect@24.9.0: + /expect@24.9.0: + resolution: {integrity: sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==} + engines: {node: '>= 6'} dependencies: '@jest/types': 24.9.0 ansi-styles: 3.2.1 @@ -20386,8 +11903,11 @@ snapshots: jest-regex-util: 24.9.0 transitivePeerDependencies: - supports-color + dev: true - expect@26.6.2: + /expect@26.6.2: + resolution: {integrity: sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 ansi-styles: 4.3.0 @@ -20395,16 +11915,33 @@ snapshots: jest-matcher-utils: 26.6.2 jest-message-util: 26.6.2 jest-regex-util: 26.0.0 + dev: true + + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + dev: true - express-http-proxy@2.1.1: + /express-http-proxy@2.1.1: + resolution: {integrity: sha512-4aRQRqDQU7qNPV5av0/hLcyc0guB9UP71nCYrQEYml7YphTo8tmWf3nDZWdTJMMjFikyz9xKXaURor7Chygdwg==} + engines: {node: '>=6.0.0'} dependencies: debug: 3.2.7 es6-promise: 4.2.8 raw-body: 2.5.2 transitivePeerDependencies: - supports-color + dev: true - express@4.21.1: + /express@4.21.1: + resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} + engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -20440,26 +11977,40 @@ snapshots: transitivePeerDependencies: - supports-color - extend-shallow@2.0.1: + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} dependencies: is-extendable: 0.1.1 + dev: true - extend-shallow@3.0.2: + /extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} dependencies: assign-symbols: 1.0.0 is-extendable: 1.0.1 + dev: true - extend@3.0.2: {} + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - extendable-error@0.1.7: {} + /extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + dev: true - external-editor@3.1.0: + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 + dev: true - extglob@2.0.4: + /extglob@2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} dependencies: array-unique: 0.3.2 define-property: 1.0.0 @@ -20471,8 +12022,11 @@ snapshots: to-regex: 3.0.2 transitivePeerDependencies: - supports-color + dev: true - extract-zip@1.7.0: + /extract-zip@1.7.0: + resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} + hasBin: true dependencies: concat-stream: 1.6.2 debug: 2.6.9 @@ -20480,132 +12034,215 @@ snapshots: yauzl: 2.10.0 transitivePeerDependencies: - supports-color + dev: true - extsprintf@1.3.0: {} + /extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + dev: true - fast-deep-equal@3.1.3: {} + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.2.12: + /fast-glob@3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 + dev: true - fast-glob@3.3.2: + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 + dev: true - fast-json-stable-stringify@2.1.0: {} + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-levenshtein@2.0.6: {} + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true - fast-redact@3.5.0: {} + /fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + dev: true - fast-shallow-equal@1.0.0: {} + /fast-shallow-equal@1.0.0: + resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} + dev: true - fast-uri@3.0.3: {} + /fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} - fastest-levenshtein@1.0.16: {} + /fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} - fastest-stable-stringify@2.0.2: {} + /fastest-stable-stringify@2.0.2: + resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} + dev: true - fastq@1.17.1: + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 + dev: true - fault@2.0.1: + /fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} dependencies: format: 0.2.2 - faye-websocket@0.11.4: + /faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} dependencies: websocket-driver: 0.7.4 - fb-watchman@2.0.2: + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 + dev: true - fd-slicer@1.1.0: + /fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} dependencies: pend: 1.2.0 + dev: true - fecha@4.2.3: {} + /fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - fetch-blob@3.2.0: + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + dev: true - figures@1.7.0: + /figures@1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} dependencies: escape-string-regexp: 1.0.5 object-assign: 4.1.1 + dev: true - figures@2.0.0: + /figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} dependencies: escape-string-regexp: 1.0.5 + dev: true - figures@3.2.0: + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 + dev: true - file-entry-cache@6.0.1: + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.2.0 + dev: true - file-name@0.1.0: {} + /file-name@0.1.0: + resolution: {integrity: sha512-Q8SskhjF4eUk/xoQkmubwLkoHwOTv6Jj/WGtOVLKkZ0vvM+LipkSXugkn1F/+mjWXU32AXLZB3qaz0arUzgtRw==} + engines: {node: '>=0.10.0'} + dev: true - file-system-cache@2.4.4: + /file-system-cache@2.4.4: + resolution: {integrity: sha512-vCYhn8pb5nlC3Gs2FFCOkmf4NEg2Ym3ulJwkmS9o6p9oRShGj6CwTMFvpgZihBlsh373NaM0XgAgDHXQIlS4LQ==} dependencies: '@types/fs-extra': 11.0.1 '@types/ramda': 0.29.3 fs-extra: 11.1.1 ramda: 0.29.0 + dev: true - file-uri-to-path@1.0.0: + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: true optional: true - filelist@1.0.4: + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.6 + dev: true - filename-reserved-regex@1.0.0: {} + /filename-reserved-regex@1.0.0: + resolution: {integrity: sha512-UZArj7+U+2reBBVCvVmRlyq9D7EYQdUtuNN+1iz7pF1jGcJ2L0TjiRCxsTZfj2xFbM4c25uGCUDpKTHA7L2TKg==} + engines: {node: '>=0.10.0'} + dev: true - filenamify-url@1.0.0: + /filenamify-url@1.0.0: + resolution: {integrity: sha512-O9K9JcZeF5VdZWM1qR92NSv1WY2EofwudQayPx5dbnnFl9k0IcZha4eV/FGkjnBK+1irOQInij0yiooCHu/0Fg==} + engines: {node: '>=0.10.0'} dependencies: filenamify: 1.2.1 humanize-url: 1.0.1 + dev: true - filenamify@1.2.1: + /filenamify@1.2.1: + resolution: {integrity: sha512-DKVP0WQcB7WaIMSwDETqImRej2fepPqvXQjaVib7LRZn9Rxn5UbvK2tYTqGf1A1DkIprQQkG4XSQXSOZp7Q3GQ==} + engines: {node: '>=0.10.0'} dependencies: filename-reserved-regex: 1.0.0 strip-outer: 1.0.1 trim-repeated: 1.0.0 + dev: true - filesize@3.6.1: {} + /filesize@3.6.1: + resolution: {integrity: sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==} + engines: {node: '>= 0.4.0'} + dev: true - filesize@8.0.7: {} + /filesize@8.0.7: + resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} + engines: {node: '>= 0.4.0'} + dev: true - fill-range@4.0.0: + /fill-range@4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} dependencies: extend-shallow: 2.0.1 is-number: 3.0.0 repeat-string: 1.6.1 to-regex-range: 2.1.1 + dev: true - fill-range@7.1.1: + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - filter-obj@1.1.0: {} + /filter-obj@1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + dev: true - finalhandler@1.3.1: + /finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} dependencies: debug: 2.6.9 encodeurl: 2.0.0 @@ -20617,86 +12254,152 @@ snapshots: transitivePeerDependencies: - supports-color - find-cache-dir@3.3.2: + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} dependencies: commondir: 1.0.1 make-dir: 3.1.0 pkg-dir: 4.2.0 + dev: true - find-file-up@0.1.3: + /find-file-up@0.1.3: + resolution: {integrity: sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==} + engines: {node: '>=0.10.0'} dependencies: fs-exists-sync: 0.1.0 resolve-dir: 0.1.1 + dev: true - find-pkg@0.1.2: + /find-pkg@0.1.2: + resolution: {integrity: sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==} + engines: {node: '>=0.10.0'} dependencies: find-file-up: 0.1.3 + dev: true - find-up-simple@1.0.0: {} + /find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} - find-up@3.0.0: + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} dependencies: locate-path: 3.0.0 + dev: true - find-up@4.1.0: + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - find-up@5.0.0: + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + dev: true - flat-cache@3.2.0: + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 + dev: true - flat@5.0.2: {} + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true - flatted@3.3.1: {} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + dev: true - flru@1.0.2: {} + /flru@1.0.2: + resolution: {integrity: sha512-kWyh8ADvHBFz6ua5xYOPnUroZTT/bwWfrCeL0Wj1dzG4/YOmOcfJ99W8dOVyyynJN35rZ9aCOtHChqQovV7yog==} + engines: {node: '>=6'} + dev: false - flush-write-stream@1.1.1: + /flush-write-stream@1.1.1: + resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} dependencies: inherits: 2.0.4 readable-stream: 2.3.8 + dev: true - fmin@0.0.2: + /fmin@0.0.2: + resolution: {integrity: sha512-sSi6DzInhl9d8yqssDfGZejChO8d2bAGIpysPsvYsxFe898z89XhCZg6CPNV3nhUhFefeC/AXZK2bAJxlBjN6A==} dependencies: contour_plot: 0.0.1 json2module: 0.0.3 rollup: 0.25.8 tape: 4.17.0 uglify-js: 2.8.29 + dev: false - follow-redirects@1.15.9: {} + /follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true - follow-redirects@1.5.10: + /follow-redirects@1.5.10: + resolution: {integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==} + engines: {node: '>=4.0'} dependencies: debug: 3.1.0 transitivePeerDependencies: - supports-color + dev: true - for-each@0.3.3: + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 - for-in@1.0.2: {} + /for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: true - foreach@2.0.6: {} + /foreach@2.0.6: + resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} + dev: true - foreground-child@3.3.0: + /foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} dependencies: cross-spawn: 7.0.5 signal-exit: 4.1.0 + dev: true - forever-agent@0.6.1: {} + /forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + dev: true - fork-ts-checker-webpack-plugin@6.5.3(eslint@7.32.0)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)): + /fork-ts-checker-webpack-plugin@6.5.3(eslint@7.32.0)(typescript@5.6.3)(webpack@5.96.1): + resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true dependencies: '@babel/code-frame': 7.26.2 '@types/json-schema': 7.0.15 @@ -20704,6 +12407,7 @@ snapshots: chokidar: 3.6.0 cosmiconfig: 6.0.0 deepmerge: 4.3.1 + eslint: 7.32.0 fs-extra: 9.1.0 glob: 7.2.3 memfs: 3.5.3 @@ -20712,11 +12416,15 @@ snapshots: semver: 7.6.3 tapable: 1.1.3 typescript: 5.6.3 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) - optionalDependencies: - eslint: 7.32.0 + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + dev: true - fork-ts-checker-webpack-plugin@8.0.0(typescript@3.9.10)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))): + /fork-ts-checker-webpack-plugin@8.0.0(typescript@3.9.10)(webpack@5.96.1): + resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 @@ -20731,128 +12439,210 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 3.9.10 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + dev: true - form-data@2.3.3: + /form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + dev: true - form-data@3.0.2: + /form-data@3.0.2: + resolution: {integrity: sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==} + engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + dev: true - format@0.2.2: {} + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} - formdata-polyfill@4.0.10: + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} dependencies: fetch-blob: 3.2.0 + dev: true - forwarded@0.2.0: {} + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} - fraction.js@4.3.7: {} + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true - fragment-cache@0.2.1: + /fragment-cache@0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} dependencies: map-cache: 0.2.2 + dev: true - fresh@0.5.2: {} + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} - from2@2.3.0: + /from2@2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} dependencies: inherits: 2.0.4 readable-stream: 2.3.8 + dev: true - front-matter@4.0.2: + /front-matter@4.0.2: + resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} dependencies: js-yaml: 3.14.1 + dev: true - fs-constants@1.0.0: {} + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true - fs-exists-sync@0.1.0: {} + /fs-exists-sync@0.1.0: + resolution: {integrity: sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==} + engines: {node: '>=0.10.0'} + dev: true - fs-extra@10.1.0: + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 + dev: true - fs-extra@11.1.1: + /fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 + dev: true - fs-extra@3.0.1: + /fs-extra@3.0.1: + resolution: {integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==} dependencies: graceful-fs: 4.2.11 jsonfile: 3.0.1 universalify: 0.1.2 + dev: true - fs-extra@7.0.1: + /fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 + dev: true - fs-extra@8.1.0: + /fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 + dev: true - fs-extra@9.1.0: + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 + dev: true - fs-monkey@1.0.6: {} + /fs-monkey@1.0.6: + resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + dev: true - fs-write-stream-atomic@1.0.10: + /fs-write-stream-atomic@1.0.10: + resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==} + deprecated: This package is no longer supported. dependencies: graceful-fs: 4.2.11 iferr: 0.1.5 imurmurhash: 0.1.4 readable-stream: 2.3.8 + dev: true - fs.realpath@1.0.0: {} + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@1.2.13: + /fsevents@1.2.13: + resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} + engines: {node: '>= 4.0'} + os: [darwin] + deprecated: Upgrade to fsevents v2 to mitigate potential security issues + requiresBuild: true dependencies: bindings: 1.5.0 nan: 2.22.0 + dev: true optional: true - fsevents@2.3.3: + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true optional: true - function-bind@1.1.2: {} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 functions-have-names: 1.2.3 - functional-red-black-tree@1.0.1: {} + /functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + dev: true - functions-have-names@1.2.3: {} + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - genfun@4.0.1: {} + /genfun@4.0.1: + resolution: {integrity: sha512-48yv1eDS5Qrz6cbSDBBik0u7jCgC/eA9eZrl9MIN1LfKzFTuGt6EHgr31YM8yT9cjb5BplXb4Iz3VtOYmgt8Jg==} + dev: true - gensync@1.0.0-beta.2: {} + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true - get-caller-file@2.0.5: {} + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true - get-east-asian-width@1.3.0: {} + /get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + dev: true - get-intrinsic@1.2.4: + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 function-bind: 1.1.2 @@ -20860,47 +12650,85 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 - get-package-type@0.1.0: {} + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true - get-stdin@8.0.0: {} + /get-stdin@8.0.0: + resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} + engines: {node: '>=10'} + dev: true - get-stdin@9.0.0: {} + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true - get-stream@3.0.0: {} + /get-stream@3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} + dev: true - get-stream@4.1.0: + /get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} dependencies: pump: 3.0.2 + dev: true - get-stream@5.2.0: + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} dependencies: pump: 3.0.2 + dev: true - get-stream@6.0.1: {} + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true - get-stream@8.0.1: {} + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true - get-symbol-description@1.0.2: + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.5: + /get-tsconfig@4.7.5: + resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} dependencies: resolve-pkg-maps: 1.0.0 + dev: true - get-tsconfig@4.8.1: + /get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} dependencies: resolve-pkg-maps: 1.0.0 + dev: true - get-value@2.0.6: {} + /get-value@2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: true - getpass@0.1.7: + /getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} dependencies: assert-plus: 1.0.0 + dev: true - gh-pages@2.2.0: + /gh-pages@2.2.0: + resolution: {integrity: sha512-c+yPkNOPMFGNisYg9r4qvsMIjVYikJv7ImFOhPIVPt0+AcRUamZ7zkGRLHz7FKB0xrlZ+ddSOJsZv9XAFVXLmA==} + engines: {node: '>=6'} + hasBin: true dependencies: async: 2.6.4 commander: 2.20.3 @@ -20908,59 +12736,95 @@ snapshots: filenamify-url: 1.0.0 fs-extra: 8.1.0 globby: 6.1.0 + dev: true - git-branch@1.0.0: {} + /git-branch@1.0.0: + resolution: {integrity: sha512-ZTzuqw5Df8fyLXQWrX6hK+4FpNCdKzMcERlxENEGO5aKcLmG7MAszhrMhluUKNKmOS/JAGijDMQDXDCDw1mE/A==} + engines: {node: '>=0.8'} + dev: true - git-config-path@1.0.1: + /git-config-path@1.0.1: + resolution: {integrity: sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==} + engines: {node: '>=0.10.0'} dependencies: extend-shallow: 2.0.1 fs-exists-sync: 0.1.0 homedir-polyfill: 1.0.3 + dev: true - git-hooks-list@1.0.3: {} + /git-hooks-list@1.0.3: + resolution: {integrity: sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==} + dev: true - git-hooks-list@3.1.0: {} + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + dev: true - git-raw-commits@5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0): + /git-raw-commits@5.0.0(conventional-commits-parser@6.0.0): + resolution: {integrity: sha512-I2ZXrXeOc0KrCvC7swqtIFXFN+rbjnC7b2T943tvemIOVNl+XP8YnA9UVwqFhzzLClnSA60KR/qEjLpXzs73Qg==} + engines: {node: '>=18'} + hasBin: true dependencies: - '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) + '@conventional-changelog/git-client': 1.0.1(conventional-commits-parser@6.0.0) meow: 13.2.0 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser + dev: false - git-repo-name@0.6.0: + /git-repo-name@0.6.0: + resolution: {integrity: sha512-DF4XxB6H+Te79JA08/QF/IjIv+j+0gF990WlgAX3SXXU2irfqvBc/xxlAIh6eJWYaKz45MrrGVBFS0Qc4bBz5g==} + engines: {node: '>=0.8'} dependencies: cwd: 0.9.1 file-name: 0.1.0 lazy-cache: 1.0.4 remote-origin-url: 0.5.3 + dev: true - git-semver-tags@8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0): + /git-semver-tags@8.0.0(conventional-commits-parser@6.0.0): + resolution: {integrity: sha512-N7YRIklvPH3wYWAR2vysaqGLPRcpwQ0GKdlqTiVN5w1UmCdaeY3K8s6DMKRCh54DDdzyt/OAB6C8jgVtb7Y2Fg==} + engines: {node: '>=18'} + hasBin: true dependencies: - '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) + '@conventional-changelog/git-client': 1.0.1(conventional-commits-parser@6.0.0) meow: 13.2.0 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser + dev: false - git-username@0.5.1: + /git-username@0.5.1: + resolution: {integrity: sha512-xjUjrj3i4kup2A3a/ZVZB1Nt0PUX7SU7KeVqIbXPdslT7NbNfyO04JMxBv4gar77JePdS+A6f05jG1Viy6+U1w==} + engines: {node: '>=0.8'} dependencies: remote-origin-url: 0.4.0 + dev: true - github-slugger@1.5.0: {} + /github-slugger@1.5.0: + resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + dev: true - github-url-from-git@1.5.0: {} + /github-url-from-git@1.5.0: + resolution: {integrity: sha512-WWOec4aRI7YAykQ9+BHmzjyNlkfJFG8QLXnDTsLz/kZefq7qkzdfo4p6fkYYMIq1aj+gZcQs/1HQhQh3DPPxlQ==} + dev: true - gl-matrix@3.4.3: {} + /gl-matrix@3.4.3: + resolution: {integrity: sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==} + dev: false - glob-parent@5.1.2: + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - glob-to-regexp@0.4.1: {} + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.4.5: + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true dependencies: foreground-child: 3.3.0 jackspeak: 3.4.3 @@ -20968,8 +12832,11 @@ snapshots: minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + dev: true - glob@7.2.3: + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -20978,15 +12845,22 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@8.1.0: + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 minimatch: 5.1.6 once: 1.4.0 + dev: true - global-agent@3.0.0: + /global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} + requiresBuild: true dependencies: boolean: 3.2.0 es6-error: 4.1.1 @@ -20994,63 +12868,98 @@ snapshots: roarr: 2.15.4 semver: 7.6.3 serialize-error: 7.0.1 + dev: true optional: true - global-directory@4.0.1: + /global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} dependencies: ini: 4.1.1 + dev: true - global-dirs@0.1.1: + /global-dirs@0.1.1: + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} dependencies: ini: 1.3.8 + dev: true - global-modules@0.2.3: + /global-modules@0.2.3: + resolution: {integrity: sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==} + engines: {node: '>=0.10.0'} dependencies: global-prefix: 0.1.5 is-windows: 0.2.0 + dev: true - global-modules@2.0.0: + /global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} dependencies: global-prefix: 3.0.0 + dev: true - global-prefix@0.1.5: + /global-prefix@0.1.5: + resolution: {integrity: sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==} + engines: {node: '>=0.10.0'} dependencies: homedir-polyfill: 1.0.3 ini: 1.3.8 is-windows: 0.2.0 which: 1.3.1 + dev: true - global-prefix@3.0.0: + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} dependencies: ini: 1.3.8 kind-of: 6.0.3 which: 1.3.1 + dev: true - global-tunnel-ng@2.7.1: + /global-tunnel-ng@2.7.1: + resolution: {integrity: sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==} + engines: {node: '>=0.10'} + requiresBuild: true dependencies: encodeurl: 1.0.2 lodash: 4.17.21 npm-conf: 1.1.3 tunnel: 0.0.6 + dev: true optional: true - global@4.4.0: + /global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} dependencies: min-document: 2.19.0 process: 0.11.10 + dev: true - globals@11.12.0: {} + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true - globals@13.24.0: + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.20.2 + dev: true - globalthis@1.0.4: + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 gopd: 1.0.1 - globby@10.0.0: + /globby@10.0.0: + resolution: {integrity: sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==} + engines: {node: '>=8'} dependencies: '@types/glob': 7.2.0 array-union: 2.1.0 @@ -21060,8 +12969,11 @@ snapshots: ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 + dev: true - globby@11.1.0: + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -21069,34 +12981,50 @@ snapshots: ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 + dev: true - globby@13.2.2: + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 + dev: true - globby@6.1.0: + /globby@6.1.0: + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} + engines: {node: '>=0.10.0'} dependencies: array-union: 1.0.2 glob: 7.2.3 object-assign: 4.1.1 pify: 2.3.0 pinkie-promise: 2.0.1 + dev: true - globjoin@0.1.4: {} + /globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + dev: true - gonzales-pe@4.3.0: + /gonzales-pe@4.3.0: + resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} + engines: {node: '>=0.6.0'} + hasBin: true dependencies: minimist: 1.2.8 + dev: true - gopd@1.0.1: + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.4 - got@6.7.1: + /got@6.7.1: + resolution: {integrity: sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==} + engines: {node: '>=4'} dependencies: '@types/keyv': 3.1.4 '@types/responselike': 1.0.3 @@ -21111,8 +13039,11 @@ snapshots: timed-out: 4.0.1 unzip-response: 2.0.1 url-parse-lax: 1.0.0 + dev: true - got@9.6.0: + /got@9.6.0: + resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} + engines: {node: '>=8.6'} dependencies: '@sindresorhus/is': 0.14.0 '@szmarczak/http-timer': 1.1.2 @@ -21127,25 +13058,39 @@ snapshots: p-cancelable: 1.1.0 to-readable-stream: 1.0.0 url-parse-lax: 3.0.0 + dev: true - graceful-fs@4.2.10: {} + /graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true - graceful-fs@4.2.11: {} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphlib@2.1.8: + /graphlib@2.1.8: + resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} dependencies: lodash: 4.17.21 + dev: false - growly@1.3.0: + /growly@1.3.0: + resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} + dev: true optional: true - gzip-size@6.0.0: + /gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} dependencies: duplexer: 0.1.2 - handle-thing@2.0.1: {} + /handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - handlebars@4.7.8: + /handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -21154,75 +13099,124 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - har-schema@2.0.0: {} + /har-schema@2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + dev: true - har-validator@5.1.5: + /har-validator@5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported dependencies: ajv: 6.12.6 har-schema: 2.0.0 + dev: true - hard-rejection@2.1.0: {} + /hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + dev: true - harmony-reflect@1.6.2: {} + /harmony-reflect@1.6.2: + resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} + dev: true - has-ansi@2.0.0: + /has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 - has-bigints@1.0.2: {} + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - has-flag@3.0.0: {} + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true - has-flag@4.0.0: {} + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} - has-property-descriptors@1.0.2: + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: es-define-property: 1.0.0 - has-proto@1.0.3: {} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} - has-symbols@1.0.3: {} + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} - has-tostringtag@1.0.2: + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - has-value@0.3.1: + /has-value@0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} dependencies: get-value: 2.0.6 has-values: 0.1.4 isobject: 2.1.0 + dev: true - has-value@1.0.0: + /has-value@1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} dependencies: get-value: 2.0.6 has-values: 1.0.0 isobject: 3.0.1 + dev: true - has-values@0.1.4: {} + /has-values@0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: true - has-values@1.0.0: + /has-values@1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} dependencies: is-number: 3.0.0 kind-of: 4.0.0 + dev: true - has@1.0.4: {} + /has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} + engines: {node: '>= 0.4.0'} - hash-base@3.0.4: + /hash-base@3.0.4: + resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==} + engines: {node: '>=4'} dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + dev: true - hash.js@1.1.7: + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 + dev: true - hasown@2.0.2: + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 - hast-util-from-parse5@7.1.2: + /hast-util-from-parse5@7.1.2: + resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} dependencies: '@types/hast': 2.3.10 '@types/unist': 2.0.11 @@ -21231,8 +13225,10 @@ snapshots: vfile: 5.3.7 vfile-location: 4.1.0 web-namespaces: 2.0.1 + dev: true - hast-util-from-parse5@8.0.1: + /hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -21242,31 +13238,45 @@ snapshots: vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 + dev: true - hast-util-has-property@2.0.1: {} + /hast-util-has-property@2.0.1: + resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==} + dev: true - hast-util-heading-rank@2.1.1: + /hast-util-heading-rank@2.1.1: + resolution: {integrity: sha512-iAuRp+ESgJoRFJbSyaqsfvJDY6zzmFoEnL1gtz1+U8gKtGGj1p0CVlysuUAUjq95qlZESHINLThwJzNGmgGZxA==} dependencies: '@types/hast': 2.3.10 + dev: true - hast-util-is-conditional-comment@2.0.0: + /hast-util-is-conditional-comment@2.0.0: + resolution: {integrity: sha512-U66gW8ZWQdxP4ZjTEZ3xZT72y6rIKJqV4At5QmC1ItBbQyZyVkuTp8QkQwhxsbkHdzpifiZdQWrDipc9ByqhRg==} dependencies: '@types/hast': 2.3.10 + dev: true - hast-util-is-element@2.1.3: + /hast-util-is-element@2.1.3: + resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==} dependencies: '@types/hast': 2.3.10 '@types/unist': 2.0.11 + dev: true - hast-util-parse-selector@3.1.1: + /hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} dependencies: '@types/hast': 2.3.10 + dev: true - hast-util-parse-selector@4.0.0: + /hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} dependencies: '@types/hast': 3.0.4 + dev: true - hast-util-raw@7.2.3: + /hast-util-raw@7.2.3: + resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} dependencies: '@types/hast': 2.3.10 '@types/parse5': 6.0.3 @@ -21279,8 +13289,10 @@ snapshots: vfile: 5.3.7 web-namespaces: 2.0.1 zwitch: 2.0.4 + dev: true - hast-util-raw@8.0.0: + /hast-util-raw@8.0.0: + resolution: {integrity: sha512-bKbaUxMNLjZMMowgcrc4l3aQSPiMLiceZD+mp+AKF8Si0mtyR2DYVdxzS2XBxXYDeW/VvfZy40lNxHRiY6MMTg==} dependencies: '@types/hast': 2.3.10 extend: 3.0.2 @@ -21294,8 +13306,10 @@ snapshots: vfile: 5.3.7 web-namespaces: 2.0.1 zwitch: 2.0.4 + dev: true - hast-util-raw@9.0.4: + /hast-util-raw@9.0.4: + resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -21310,8 +13324,10 @@ snapshots: vfile: 6.0.3 web-namespaces: 2.0.1 zwitch: 2.0.4 + dev: true - hast-util-to-estree@2.3.3: + /hast-util-to-estree@2.3.3: + resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} dependencies: '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 @@ -21330,8 +13346,10 @@ snapshots: zwitch: 2.0.4 transitivePeerDependencies: - supports-color + dev: true - hast-util-to-html@8.0.4: + /hast-util-to-html@8.0.4: + resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} dependencies: '@types/hast': 2.3.10 '@types/unist': 2.0.11 @@ -21344,8 +13362,10 @@ snapshots: space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 + dev: true - hast-util-to-jsx-runtime@2.3.2: + /hast-util-to-jsx-runtime@2.3.2: + resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==} dependencies: '@types/estree': 1.0.6 '@types/hast': 3.0.4 @@ -21364,8 +13384,10 @@ snapshots: vfile-message: 4.0.2 transitivePeerDependencies: - supports-color + dev: true - hast-util-to-parse5@7.1.0: + /hast-util-to-parse5@7.1.0: + resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} dependencies: '@types/hast': 2.3.10 comma-separated-tokens: 2.0.3 @@ -21373,8 +13395,10 @@ snapshots: space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 + dev: true - hast-util-to-parse5@8.0.0: + /hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} dependencies: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -21383,109 +13407,169 @@ snapshots: space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 + dev: true - hast-util-to-string@2.0.0: + /hast-util-to-string@2.0.0: + resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} dependencies: '@types/hast': 2.3.10 + dev: true - hast-util-whitespace@2.0.1: {} + /hast-util-whitespace@2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + dev: true - hast-util-whitespace@3.0.0: + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} dependencies: '@types/hast': 3.0.4 + dev: true - hast@1.0.0: {} + /hast@1.0.0: + resolution: {integrity: sha512-vFUqlRV5C+xqP76Wwq2SrM0kipnmpxJm7OfvVXpB35Fp+Fn4MV+ozr+JZr5qFvyR1q/U+Foim2x+3P+x9S1PLA==} + deprecated: Renamed to rehype + dev: true - hastscript@7.2.0: + /hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} dependencies: '@types/hast': 2.3.10 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 3.1.1 property-information: 6.5.0 space-separated-tokens: 2.0.2 + dev: true - hastscript@8.0.0: + /hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} dependencies: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 property-information: 6.5.0 space-separated-tokens: 2.0.2 + dev: true - he@1.2.0: {} + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true - heti-findandreplacedomtext@0.5.0: {} + /heti-findandreplacedomtext@0.5.0: + resolution: {integrity: sha512-GFZjqU8LAdu1uR72GqrReI+lzNLMlcWtvdz1TKNJiofyo1mfTecFYSZEoEbcLcRMl+KwEldnNQoS4BwO8wtg0A==} + dev: true - heti@0.9.4: + /heti@0.9.4: + resolution: {integrity: sha512-DI1A/R6VabM8wulXrGVbeHZNZ8jJUm+Pwn+PEYZcNBxAO+4mXWPEX+Xu9R/YrHETGcevNrLO34m/99ZCnFnlhw==} dependencies: heti-findandreplacedomtext: 0.5.0 + dev: true - highlight.js@10.7.3: {} + /highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + dev: true - history@5.3.0: + /history@5.3.0: + resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: '@babel/runtime': 7.23.6 + dev: true - hmac-drbg@1.0.1: + /hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} dependencies: hash.js: 1.1.7 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + dev: true - hogan.js@3.0.2: + /hogan.js@3.0.2: + resolution: {integrity: sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==} + hasBin: true dependencies: mkdirp: 0.3.0 nopt: 1.0.10 + dev: true - hoist-non-react-statics@3.3.2: + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 + dev: true - homedir-polyfill@1.0.3: + /homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} dependencies: parse-passwd: 1.0.0 + dev: true - hosted-git-info@2.8.9: {} + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true - hosted-git-info@4.1.0: + /hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 + dev: true - hosted-git-info@6.1.1: + /hosted-git-info@6.1.1: + resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: lru-cache: 7.18.3 + dev: true - hosted-git-info@7.0.2: + /hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} dependencies: lru-cache: 10.4.3 - hpack.js@2.1.6: + /hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} dependencies: inherits: 2.0.4 obuf: 1.1.2 readable-stream: 2.3.8 wbuf: 1.7.3 - htm@3.1.1: {} + /htm@3.1.1: + resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==} + dev: true - html-element-map@1.3.1: + /html-element-map@1.3.1: + resolution: {integrity: sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==} dependencies: array.prototype.filter: 1.0.4 call-bind: 1.0.7 + dev: true - html-encoding-sniffer@1.0.2: + /html-encoding-sniffer@1.0.2: + resolution: {integrity: sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==} dependencies: whatwg-encoding: 1.0.5 + dev: true - html-encoding-sniffer@2.0.1: + /html-encoding-sniffer@2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} dependencies: whatwg-encoding: 1.0.5 + dev: true - html-entities@2.5.2: {} + /html-entities@2.5.2: + resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} - html-escaper@2.0.2: {} + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - html-minifier-terser@6.1.0: + /html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true dependencies: camel-case: 4.1.2 clean-css: 5.3.3 @@ -21494,33 +13578,53 @@ snapshots: param-case: 3.0.4 relateurl: 0.2.7 terser: 5.36.0 + dev: true - html-tags@3.3.1: {} + /html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + dev: true - html-to-text@9.0.5: + /html-to-text@9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} dependencies: '@selderee/plugin-htmlparser2': 0.11.0 deepmerge: 4.3.1 dom-serializer: 2.0.0 htmlparser2: 8.0.2 selderee: 0.11.0 + dev: true - html-url-attributes@3.0.1: {} + /html-url-attributes@3.0.1: + resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} + dev: true - html-void-elements@2.0.1: {} + /html-void-elements@2.0.1: + resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + dev: true - html-void-elements@3.0.0: {} + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + dev: true - html-webpack-plugin@5.5.0(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))): + /html-webpack-plugin@5.5.0(webpack@5.96.1): + resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} + engines: {node: '>=10.13.0'} + peerDependencies: + webpack: ^5.20.0 dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + dev: true - html2sketch@1.0.2: + /html2sketch@1.0.2: + resolution: {integrity: sha512-/P9NcVH9yBhrOkcnaFkAbWJifDO8Ii+CTIxy9gE6trSQvo2OH++TKQIP5MICEoWvgXpVhZ6botj7P63Krl1/gg==} + engines: {node: '>=14.0.0'} dependencies: '@sketch-hq/sketch-file-format-ts': 6.5.0 color: 3.2.1 @@ -21530,8 +13634,10 @@ snapshots: svgson: 4.1.0 transformation-matrix: 2.16.1 uuid: 8.3.2 + dev: true - htmlparser2@3.10.1: + /htmlparser2@3.10.1: + resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} dependencies: domelementtype: 1.3.1 domhandler: 2.4.2 @@ -21539,42 +13645,58 @@ snapshots: entities: 1.1.2 inherits: 2.0.4 readable-stream: 3.6.2 + dev: true - htmlparser2@6.1.0: + /htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} dependencies: domelementtype: 2.3.0 domhandler: 4.3.1 domutils: 2.8.0 entities: 2.2.0 + dev: true - htmlparser2@8.0.2: + /htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.1.0 entities: 4.5.0 + dev: true - htmlparser2@9.1.0: + /htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.1.0 entities: 4.5.0 + dev: true - http-cache-semantics@3.8.1: {} + /http-cache-semantics@3.8.1: + resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==} + dev: true - http-cache-semantics@4.1.1: {} + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: true - http-deceiver@1.2.7: {} + /http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - http-errors@1.6.3: + /http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} dependencies: depd: 1.1.2 inherits: 2.0.3 setprototypeof: 1.1.0 statuses: 1.5.0 - http-errors@2.0.0: + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} dependencies: depd: 2.0.0 inherits: 2.0.4 @@ -21582,36 +13704,51 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-parser-js@0.5.8: {} + /http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - http-proxy-agent@2.1.0: + /http-proxy-agent@2.1.0: + resolution: {integrity: sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==} + engines: {node: '>= 4.5.0'} dependencies: agent-base: 4.3.0 debug: 3.1.0 transitivePeerDependencies: - supports-color + dev: true - http-proxy-agent@4.0.1: + /http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 debug: 4.3.7 transitivePeerDependencies: - supports-color + dev: true - http-proxy-middleware@2.0.7(@types/express@4.17.21): + /http-proxy-middleware@2.0.7(@types/express@4.17.21): + resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true dependencies: + '@types/express': 4.17.21 '@types/http-proxy': 1.17.15 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.8 - optionalDependencies: - '@types/express': 4.17.21 transitivePeerDependencies: - debug - http-proxy@1.18.1: + /http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 follow-redirects: 1.15.9 @@ -21619,152 +13756,281 @@ snapshots: transitivePeerDependencies: - debug - http-signature@1.2.0: + /http-signature@1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} dependencies: assert-plus: 1.0.0 jsprim: 1.4.2 sshpk: 1.18.0 + dev: true - https-browserify@1.0.0: {} + /https-browserify@1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + dev: true - https-proxy-agent@2.2.4: + /https-proxy-agent@2.2.4: + resolution: {integrity: sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==} + engines: {node: '>= 4.5.0'} dependencies: agent-base: 4.3.0 debug: 3.2.7 transitivePeerDependencies: - supports-color + dev: true - https-proxy-agent@5.0.1: + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 debug: 4.3.7 transitivePeerDependencies: - supports-color + dev: true - hull.js@1.0.6: {} + /hull.js@1.0.6: + resolution: {integrity: sha512-TC7e9sHYOaCVms0sn2hN7buxnaGfcl9h5EPVoVX9DTPoMpqQiS9bf3tmGDgiNaMVHBD91RAvWjCxrJ5Jx8BI5A==} + deprecated: This package is no longer published on npmjs.com, you are using a deprecated and vulnerable version. Do not use it. Check package homepage on GitHub to see how to fetch the latest version. + dev: false - human-id@1.0.2: {} + /human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + dev: true - human-signals@1.1.1: {} + /human-signals@1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + dev: true - human-signals@2.1.0: {} + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true - human-signals@4.3.1: {} + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true - human-signals@5.0.0: {} + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true - humanize-ms@1.2.1: + /humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: ms: 2.1.3 + dev: true - humanize-url@1.0.1: + /humanize-url@1.0.1: + resolution: {integrity: sha512-RtgTzXCPVb/te+e82NDhAc5paj+DuKSratIGAr+v+HZK24eAQ8LMoBGYoL7N/O+9iEc33AKHg45dOMKw3DNldQ==} + engines: {node: '>=0.10.0'} dependencies: normalize-url: 1.9.1 strip-url-auth: 1.0.1 + dev: true - humps@2.0.1: {} + /humps@2.0.1: + resolution: {integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==} + dev: true - hyperdyperid@1.2.0: {} + /hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} - hyphenate-style-name@1.1.0: {} + /hyphenate-style-name@1.1.0: + resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} + dev: true - iconv-lite@0.4.24: + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - iconv-lite@0.6.3: + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.49): + /icss-utils@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: postcss: 8.4.49 + dev: true - identity-obj-proxy@3.0.0: + /identity-obj-proxy@3.0.0: + resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} + engines: {node: '>=4'} dependencies: harmony-reflect: 1.6.2 + dev: true - ieee754@1.2.1: {} + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true - iferr@0.1.5: {} + /iferr@0.1.5: + resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==} + dev: true - ignore-walk@6.0.5: + /ignore-walk@6.0.5: + resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: minimatch: 9.0.5 + dev: true - ignore@4.0.6: {} + /ignore@4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} + dev: true - ignore@5.3.2: {} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + dev: true - image-size@0.5.5: + /image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + requiresBuild: true + dev: true optional: true - image-size@0.8.3: + /image-size@0.8.3: + resolution: {integrity: sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg==} + engines: {node: '>=6.9.0'} + hasBin: true dependencies: queue: 6.0.1 + dev: true - immediate@3.3.0: {} + /immediate@3.3.0: + resolution: {integrity: sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==} + dev: true - immer@9.0.21: {} + /immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + dev: true - immutable@4.3.7: {} + /immutable@5.0.2: + resolution: {integrity: sha512-1NU7hWZDkV7hJ4PJ9dur9gTNQ4ePNPN4k9/0YhwjzykTi/+3Q5pF93YU5QoVj8BuOnhLgaY8gs0U2pj4kSYVcw==} + dev: true - import-fresh@3.3.0: + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 + dev: true - import-lazy@2.1.0: {} + /import-lazy@2.1.0: + resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} + engines: {node: '>=4'} + dev: true - import-lazy@4.0.0: {} + /import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + dev: true - import-local@3.2.0: + /import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - import-modules@2.1.0: {} + /import-modules@2.1.0: + resolution: {integrity: sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==} + engines: {node: '>=8'} + dev: true - imurmurhash@0.1.4: {} + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true - indent-string@3.2.0: {} + /indent-string@3.2.0: + resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==} + engines: {node: '>=4'} + dev: true - indent-string@4.0.0: {} + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true - indent-string@5.0.0: {} + /indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + dev: true - index-to-position@0.1.2: {} + /index-to-position@0.1.2: + resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} + engines: {node: '>=18'} - inflight@1.0.6: + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 - inherits@2.0.1: {} + /inherits@2.0.1: + resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + dev: true - inherits@2.0.3: {} + /inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - inherits@2.0.4: {} + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@1.3.8: {} + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true - ini@4.1.1: {} + /ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true - inline-style-parser@0.1.1: {} + /inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + dev: true - inline-style-parser@0.2.4: {} + /inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + dev: true - inline-style-prefixer@7.0.1: + /inline-style-prefixer@7.0.1: + resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} dependencies: css-in-js-utils: 3.1.0 + dev: true - inquirer-autosubmit-prompt@0.2.0: + /inquirer-autosubmit-prompt@0.2.0: + resolution: {integrity: sha512-mzNrusCk5L6kSzlN0Ioddn8yzrhYNLli+Sn2ZxMuLechMYAzakiFCIULxsxlQb5YKzthLGfrFACcWoAvM7p04Q==} dependencies: chalk: 2.4.2 inquirer: 6.5.2 rxjs: 6.6.7 + dev: true - inquirer@6.5.2: + /inquirer@6.5.2: + resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} + engines: {node: '>=6.0.0'} dependencies: ansi-escapes: 3.2.0 chalk: 2.4.2 @@ -21779,8 +14045,11 @@ snapshots: string-width: 2.1.1 strip-ansi: 5.2.0 through: 2.3.8 + dev: true - inquirer@7.3.3: + /inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -21795,8 +14064,11 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 + dev: true - inquirer@9.3.7: + /inquirer@9.3.7: + resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==} + engines: {node: '>=18'} dependencies: '@inquirer/figures': 1.0.8 ansi-escapes: 4.3.2 @@ -21810,146 +14082,244 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 + dev: true - insert-css@2.0.0: {} + /insert-css@2.0.0: + resolution: {integrity: sha512-xGq5ISgcUP5cvGkS2MMFLtPDBtrtQPSFfC6gA6U8wHKqfjTIMZLZNxOItQnoSjdOzlXOLU/yD32RKC4SvjNbtA==} - internal-slot@1.0.7: + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.6 - internmap@2.0.3: {} + /internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + dev: false - interpret@1.4.0: {} + /interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true - interpret@3.1.1: {} + /interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} - intl-messageformat@10.7.6: + /intl-messageformat@10.7.6: + resolution: {integrity: sha512-IsMU/hqyy3FJwNJ0hxDfY2heJ7MteSuFvcnCebxRp67di4Fhx1gKKE+qS0bBwUF8yXkX9SsPUhLeX/B6h5SKUA==} dependencies: '@formatjs/ecma402-abstract': 2.2.3 '@formatjs/fast-memoize': 2.2.3 '@formatjs/icu-messageformat-parser': 2.9.3 tslib: 2.6.1 + dev: true - invariant@2.2.4: + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: loose-envify: 1.4.0 + dev: true - invert-kv@3.0.1: {} + /invert-kv@3.0.1: + resolution: {integrity: sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==} + engines: {node: '>=8'} + dev: true - ip@1.1.9: {} + /ip@1.1.9: + resolution: {integrity: sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==} + dev: true - ipaddr.js@1.9.1: {} + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} - ipaddr.js@2.2.0: {} + /ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + engines: {node: '>= 10'} - irregular-plurals@3.5.0: {} + /irregular-plurals@3.5.0: + resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} + engines: {node: '>=8'} + dev: true - is-accessor-descriptor@1.0.1: + /is-accessor-descriptor@1.0.1: + resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} + engines: {node: '>= 0.10'} dependencies: hasown: 2.0.2 + dev: true - is-alphabetical@1.0.4: {} + /is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + dev: true - is-alphabetical@2.0.1: {} + /is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + dev: true - is-alphanumerical@1.0.4: + /is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} dependencies: is-alphabetical: 1.0.4 is-decimal: 1.0.4 + dev: true - is-alphanumerical@2.0.1: + /is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} dependencies: is-alphabetical: 2.0.1 is-decimal: 2.0.1 + dev: true - is-any-array@2.0.1: {} + /is-any-array@2.0.1: + resolution: {integrity: sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==} + dev: false - is-arguments@1.1.1: + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - is-array-buffer@3.0.4: + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - is-arrayish@0.2.1: {} + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true - is-arrayish@0.3.2: {} + /is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-arrow-function@2.0.3: + /is-arrow-function@2.0.3: + resolution: {integrity: sha512-iDStzcT1FJMzx+TjCOK//uDugSe/Mif/8a+T0htydQ3qkJGvSweTZpVYz4hpJH0baloSPiAFQdA8WslAgJphvQ==} + engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.7 + dev: true - is-async-function@2.0.0: + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 + dev: true - is-bigint@1.0.4: + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 - is-binary-path@2.1.0: + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.1.2: + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - is-buffer@1.1.6: {} + /is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - is-buffer@2.0.5: {} + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} - is-callable@1.2.7: {} + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} - is-ci@1.2.1: + /is-ci@1.2.1: + resolution: {integrity: sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==} + hasBin: true dependencies: ci-info: 1.6.0 + dev: true - is-ci@2.0.0: + /is-ci@2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true dependencies: ci-info: 2.0.0 + dev: true - is-core-module@2.15.1: + /is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 - is-data-descriptor@1.0.1: + /is-data-descriptor@1.0.1: + resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} + engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 + dev: true - is-data-view@1.0.1: + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} dependencies: is-typed-array: 1.1.13 - is-date-object@1.0.5: + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 - is-decimal@1.0.4: {} + /is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + dev: true - is-decimal@2.0.1: {} + /is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + dev: true - is-descriptor@0.1.7: + /is-descriptor@0.1.7: + resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} + engines: {node: '>= 0.4'} dependencies: is-accessor-descriptor: 1.0.1 is-data-descriptor: 1.0.1 + dev: true - is-descriptor@1.0.3: + /is-descriptor@1.0.3: + resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} + engines: {node: '>= 0.4'} dependencies: is-accessor-descriptor: 1.0.1 is-data-descriptor: 1.0.1 + dev: true - is-docker@2.2.1: {} + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true - is-docker@3.0.0: {} + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true - is-equal@1.7.0: + /is-equal@1.7.0: + resolution: {integrity: sha512-hErktGR9jmoYXNWlbrwGjc8eHh09mbY6TWSTTFtnMcKaCuSMN8z+Ni5ma/8mkbVpe4CbB7V6kN1MkCg9bCx5bA==} + engines: {node: '>= 0.4'} dependencies: es-get-iterator: 1.1.3 es-to-primitive: 1.2.1 @@ -21973,223 +14343,434 @@ snapshots: object.getprototypeof: 1.0.6 which-boxed-primitive: 1.0.2 which-collection: 1.0.2 + dev: true - is-extendable@0.1.1: {} + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: true - is-extendable@1.0.1: + /is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} dependencies: is-plain-object: 2.0.4 + dev: true - is-extglob@2.1.1: {} + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} - is-finalizationregistry@1.0.2: + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: call-bind: 1.0.7 + dev: true - is-fullwidth-code-point@1.0.0: + /is-fullwidth-code-point@1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} dependencies: number-is-nan: 1.0.1 + dev: true - is-fullwidth-code-point@2.0.0: {} + /is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: true - is-fullwidth-code-point@3.0.0: {} + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true - is-generator-fn@2.1.0: {} + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true - is-generator-function@1.0.10: + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 + dev: true - is-glob@4.0.3: + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - is-hexadecimal@1.0.4: {} + /is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + dev: true - is-hexadecimal@2.0.1: {} + /is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + dev: true - is-in-ci@1.0.0: {} + /is-in-ci@1.0.0: + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} + engines: {node: '>=18'} + hasBin: true + dev: true - is-inside-container@1.0.0: + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true dependencies: is-docker: 3.0.0 - is-installed-globally@0.1.0: + /is-installed-globally@0.1.0: + resolution: {integrity: sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==} + engines: {node: '>=4'} dependencies: global-dirs: 0.1.1 is-path-inside: 1.0.1 + dev: true - is-installed-globally@1.0.0: + /is-installed-globally@1.0.0: + resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} + engines: {node: '>=18'} dependencies: global-directory: 4.0.1 is-path-inside: 4.0.0 + dev: true - is-interactive@1.0.0: {} + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true - is-interactive@2.0.0: {} + /is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + dev: true - is-map@2.0.3: {} + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + dev: true - is-negative-zero@2.0.3: {} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} - is-network-error@1.1.0: {} + /is-network-error@1.1.0: + resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + engines: {node: '>=16'} - is-npm@1.0.0: {} + /is-npm@1.0.0: + resolution: {integrity: sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg==} + engines: {node: '>=0.10.0'} + dev: true - is-npm@6.0.0: {} + /is-npm@6.0.0: + resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - is-number-object@1.0.7: + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 - is-number@3.0.0: + /is-number@3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 + dev: true - is-number@7.0.0: {} + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} - is-obj@1.0.1: {} + /is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + dev: true - is-obj@2.0.0: {} + /is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: false - is-observable@1.1.0: + /is-observable@1.1.0: + resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==} + engines: {node: '>=4'} dependencies: symbol-observable: 1.2.0 + dev: true - is-path-cwd@3.0.0: {} + /is-path-cwd@3.0.0: + resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - is-path-inside@1.0.1: + /is-path-inside@1.0.1: + resolution: {integrity: sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==} + engines: {node: '>=0.10.0'} dependencies: path-is-inside: 1.0.2 + dev: true - is-path-inside@4.0.0: {} + /is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + dev: true - is-plain-obj@1.1.0: {} + /is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true - is-plain-obj@2.1.0: {} + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: true - is-plain-obj@3.0.0: {} + /is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} - is-plain-obj@4.1.0: {} + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} - is-plain-object@2.0.4: + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 - is-potential-custom-element-name@1.0.1: {} + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: true + + /is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: true - is-promise@2.2.2: {} + /is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + dev: true - is-redirect@1.0.0: {} + /is-redirect@1.0.0: + resolution: {integrity: sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==} + engines: {node: '>=0.10.0'} + dev: true - is-regex@1.1.4: + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - is-regexp@2.1.0: {} + /is-regexp@2.1.0: + resolution: {integrity: sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==} + engines: {node: '>=6'} + dev: true - is-retry-allowed@1.2.0: {} + /is-retry-allowed@1.2.0: + resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} + engines: {node: '>=0.10.0'} + dev: true - is-root@2.1.0: {} + /is-root@2.1.0: + resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} + engines: {node: '>=6'} + dev: true - is-scoped@3.0.0: + /is-scoped@3.0.0: + resolution: {integrity: sha512-ezxLUq30kiTvP0w/5n9tj4qTOKlrA07Oty1hwTQ+lcqw11x6uc8sp7VRb2OVGRzKfCHZ2A22T5Zsau/Q2Akb0g==} + engines: {node: '>=12'} dependencies: scoped-regex: 3.0.0 + dev: true - is-set@2.0.3: {} + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + dev: true - is-shared-array-buffer@1.0.3: + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 - is-stream@1.1.0: {} + /is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + dev: true - is-stream@2.0.1: {} + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true - is-stream@3.0.0: {} + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - is-string@1.0.7: + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 - is-subdir@1.2.0: + /is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} dependencies: better-path-resolve: 1.0.0 + dev: true - is-subset@0.1.1: {} + /is-subset@0.1.1: + resolution: {integrity: sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==} + dev: true - is-symbol@1.0.4: + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - is-typed-array@1.1.13: + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.15 - is-typedarray@1.0.0: {} + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: true - is-unicode-supported@0.1.0: {} + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true - is-unicode-supported@1.3.0: {} + /is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + dev: true - is-url-superb@6.1.0: {} + /is-url-superb@6.1.0: + resolution: {integrity: sha512-LXdhGlYqUPdvEyIhWPEEwYYK3yrUiPcBjmFGlZNv1u5GtIL5qQRf7ddDyPNAvsMFqdzS923FROpTQU97tLe3JQ==} + engines: {node: '>=12'} + dev: true - is-weakmap@2.0.2: {} + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + dev: true - is-weakref@1.0.2: + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.7 - is-weakset@2.0.3: + /is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 + dev: true - is-what@3.14.1: {} + /is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + dev: true - is-windows@0.2.0: {} + /is-windows@0.2.0: + resolution: {integrity: sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==} + engines: {node: '>=0.10.0'} + dev: true - is-windows@1.0.2: {} + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true - is-wsl@1.1.0: {} + /is-wsl@1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + dev: true - is-wsl@2.2.0: + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} dependencies: is-docker: 2.2.1 + dev: true - is-wsl@3.1.0: + /is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} dependencies: is-inside-container: 1.0.0 - isarray@0.0.1: {} + /isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: true - isarray@1.0.0: {} + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isarray@2.0.5: {} + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isexe@2.0.0: {} + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isobject@2.1.0: + /isobject@2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} dependencies: isarray: 1.0.0 + dev: true - isobject@3.0.1: {} + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} - isomorphic-unfetch@4.0.2: + /isomorphic-unfetch@4.0.2: + resolution: {integrity: sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==} dependencies: node-fetch: 3.3.2 unfetch: 5.0.0 + dev: true - isstream@0.1.2: {} + /isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + dev: true - issue-regex@4.3.0: {} + /issue-regex@4.3.0: + resolution: {integrity: sha512-7731a/t2llyrk8Hdwl1x3LkhIFGzxHQGpJA7Ur9cIRViakQF2y25Lwhx8Ziy1B068+kBYUmYPBzw5uo3DdWrdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - istanbul-lib-coverage@2.0.5: {} + /istanbul-lib-coverage@2.0.5: + resolution: {integrity: sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==} + engines: {node: '>=6'} + dev: true - istanbul-lib-coverage@3.2.2: {} + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true - istanbul-lib-instrument@3.3.0: + /istanbul-lib-instrument@3.3.0: + resolution: {integrity: sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==} + engines: {node: '>=6'} dependencies: '@babel/generator': 7.26.2 '@babel/parser': 7.26.2 @@ -22200,8 +14781,11 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - istanbul-lib-instrument@4.0.3: + /istanbul-lib-instrument@4.0.3: + resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} + engines: {node: '>=8'} dependencies: '@babel/core': 7.26.0 '@istanbuljs/schema': 0.1.3 @@ -22209,8 +14793,11 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - istanbul-lib-instrument@5.2.1: + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} dependencies: '@babel/core': 7.26.0 '@babel/parser': 7.26.2 @@ -22219,67 +14806,99 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - istanbul-lib-report@3.0.1: + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} dependencies: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 + dev: true - istanbul-lib-source-maps@4.0.1: + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} dependencies: debug: 4.3.7 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color + dev: true - istanbul-reports@3.1.7: + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + dev: true - istextorbinary@2.6.0: + /istextorbinary@2.6.0: + resolution: {integrity: sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA==} + engines: {node: '>=0.12'} dependencies: binaryextensions: 2.3.0 editions: 2.3.1 textextensions: 2.6.0 + dev: true - iterator.prototype@1.1.3: + /iterator.prototype@1.1.3: + resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 get-intrinsic: 1.2.4 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 + dev: true - jackspeak@3.4.3: + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 + dev: true - jake@10.9.2: + /jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true dependencies: async: 3.2.6 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 + dev: true - javascript-stringify@2.1.0: {} + /javascript-stringify@2.1.0: + resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} + dev: true - jest-canvas-mock@2.5.2: + /jest-canvas-mock@2.5.2: + resolution: {integrity: sha512-vgnpPupjOL6+L5oJXzxTxFrlGEIbHdZqFU+LFNdtLxZ3lRDCl17FlTMM7IatoRQkrcyOTMlDinjUguqmQ6bR2A==} dependencies: cssfontparser: 1.2.1 moo-color: 1.0.3 + dev: true - jest-changed-files@26.6.2: + /jest-changed-files@26.6.2: + resolution: {integrity: sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 execa: 4.1.0 throat: 5.0.0 + dev: true - jest-cli@26.6.3: + /jest-cli@26.6.3: + resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==} + engines: {node: '>= 10.14.2'} + hasBin: true dependencies: '@jest/core': 26.6.3 '@jest/test-result': 26.6.2 @@ -22300,8 +14919,11 @@ snapshots: - supports-color - ts-node - utf-8-validate + dev: true - jest-config@24.9.0: + /jest-config@24.9.0: + resolution: {integrity: sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==} + engines: {node: '>= 6'} dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 24.9.0 @@ -22324,8 +14946,16 @@ snapshots: - bufferutil - supports-color - utf-8-validate + dev: true - jest-config@26.6.3: + /jest-config@26.6.3: + resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==} + engines: {node: '>= 10.14.2'} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 26.6.3 @@ -22350,37 +14980,65 @@ snapshots: - canvas - supports-color - utf-8-validate + dev: true - jest-diff@24.9.0: + /jest-diff@24.9.0: + resolution: {integrity: sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==} + engines: {node: '>= 6'} dependencies: chalk: 2.4.2 diff-sequences: 24.9.0 jest-get-type: 24.9.0 pretty-format: 24.9.0 + dev: true - jest-diff@26.6.2: + /jest-diff@26.6.2: + resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} + engines: {node: '>= 10.14.2'} dependencies: chalk: 4.1.2 diff-sequences: 26.6.2 jest-get-type: 26.3.0 pretty-format: 26.6.2 + dev: true - jest-diff@27.5.1: + /jest-diff@27.5.1: + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: chalk: 4.1.2 diff-sequences: 27.5.1 jest-get-type: 27.5.1 pretty-format: 27.5.1 + dev: true + + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true - jest-docblock@24.9.0: + /jest-docblock@24.9.0: + resolution: {integrity: sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==} + engines: {node: '>= 6'} dependencies: detect-newline: 2.1.0 + dev: true - jest-docblock@26.0.0: + /jest-docblock@26.0.0: + resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} + engines: {node: '>= 10.14.2'} dependencies: detect-newline: 3.1.0 + dev: true - jest-each@24.9.0: + /jest-each@24.9.0: + resolution: {integrity: sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==} + engines: {node: '>= 6'} dependencies: '@jest/types': 24.9.0 chalk: 2.4.2 @@ -22389,16 +15047,23 @@ snapshots: pretty-format: 24.9.0 transitivePeerDependencies: - supports-color + dev: true - jest-each@26.6.2: + /jest-each@26.6.2: + resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 chalk: 4.1.2 jest-get-type: 26.3.0 jest-util: 26.6.2 pretty-format: 26.6.2 + dev: true - jest-electron@0.1.12(jest@26.6.3): + /jest-electron@0.1.12(jest@26.6.3): + resolution: {integrity: sha512-10Hjr1kpyWz5cj9Xs/Xfb8yvF1LZPVmyEMHu/A/VhgvIV5yiP9uD8FHNc4HAfEnZHM+wvpR5YfveBTUAiNfwnA==} + peerDependencies: + jest: ^24.0.0 dependencies: electron: 11.5.0 jest: 26.6.3 @@ -22415,8 +15080,11 @@ snapshots: - bufferutil - supports-color - utf-8-validate + dev: true - jest-environment-jsdom@24.9.0: + /jest-environment-jsdom@24.9.0: + resolution: {integrity: sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==} + engines: {node: '>= 6'} dependencies: '@jest/environment': 24.9.0 '@jest/fake-timers': 24.9.0 @@ -22428,8 +15096,11 @@ snapshots: - bufferutil - supports-color - utf-8-validate + dev: true - jest-environment-jsdom@26.6.2: + /jest-environment-jsdom@26.6.2: + resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 @@ -22443,8 +15114,11 @@ snapshots: - canvas - supports-color - utf-8-validate + dev: true - jest-environment-node@24.9.0: + /jest-environment-node@24.9.0: + resolution: {integrity: sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==} + engines: {node: '>= 6'} dependencies: '@jest/environment': 24.9.0 '@jest/fake-timers': 24.9.0 @@ -22453,8 +15127,11 @@ snapshots: jest-util: 24.9.0 transitivePeerDependencies: - supports-color + dev: true - jest-environment-node@26.6.2: + /jest-environment-node@26.6.2: + resolution: {integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 @@ -22462,21 +15139,41 @@ snapshots: '@types/node': 14.18.63 jest-mock: 26.6.2 jest-util: 26.6.2 + dev: true - jest-extended@1.2.1: + /jest-extended@1.2.1: + resolution: {integrity: sha512-eKZR5iDpyTkcDesj16FpIPnjAWQNUB81ZFQW08EIddM6iqO7DjRIi39td9qol+1dpJS4Mqr9Qzp8ZMhanbSeug==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: expect: 26.6.2 jest-diff: 27.5.1 jest-get-type: 27.5.1 jest-matcher-utils: 27.5.1 + dev: true + + /jest-get-type@24.9.0: + resolution: {integrity: sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==} + engines: {node: '>= 6'} + dev: true - jest-get-type@24.9.0: {} + /jest-get-type@26.3.0: + resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} + engines: {node: '>= 10.14.2'} + dev: true - jest-get-type@26.3.0: {} + /jest-get-type@27.5.1: + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true - jest-get-type@27.5.1: {} + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true - jest-haste-map@24.9.0: + /jest-haste-map@24.9.0: + resolution: {integrity: sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==} + engines: {node: '>= 6'} dependencies: '@jest/types': 24.9.0 anymatch: 2.0.0 @@ -22493,8 +15190,11 @@ snapshots: fsevents: 1.2.13 transitivePeerDependencies: - supports-color + dev: true - jest-haste-map@26.6.2: + /jest-haste-map@26.6.2: + resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.9 @@ -22513,12 +15213,15 @@ snapshots: fsevents: 2.3.3 transitivePeerDependencies: - supports-color + dev: true - jest-haste-map@29.7.0: + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 14.18.63 + '@types/node': 22.9.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -22529,8 +15232,11 @@ snapshots: walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 + dev: true - jest-jasmine2@24.9.0: + /jest-jasmine2@24.9.0: + resolution: {integrity: sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==} + engines: {node: '>= 6'} dependencies: '@babel/traverse': 7.25.9 '@jest/environment': 24.9.0 @@ -22552,8 +15258,11 @@ snapshots: - bufferutil - supports-color - utf-8-validate + dev: true - jest-jasmine2@26.6.3: + /jest-jasmine2@26.6.3: + resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==} + engines: {node: '>= 10.14.2'} dependencies: '@babel/traverse': 7.25.9 '@jest/environment': 26.6.2 @@ -22579,43 +15288,75 @@ snapshots: - supports-color - ts-node - utf-8-validate + dev: true - jest-leak-detector@24.9.0: + /jest-leak-detector@24.9.0: + resolution: {integrity: sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==} + engines: {node: '>= 6'} dependencies: jest-get-type: 24.9.0 pretty-format: 24.9.0 + dev: true - jest-leak-detector@26.6.2: + /jest-leak-detector@26.6.2: + resolution: {integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==} + engines: {node: '>= 10.14.2'} dependencies: jest-get-type: 26.3.0 pretty-format: 26.6.2 + dev: true - jest-less-loader@0.1.2(less@4.2.0): + /jest-less-loader@0.1.2(less@4.2.0): + resolution: {integrity: sha512-J04E9UnTq00I+maz9KADl/CtC+5ee2HhKPVo1ALRW3xVzmzx6ltY9L9IlupacE6uA5n/rPs1+aZexFt+1xFM/A==} + peerDependencies: + less: ^3.10.3 dependencies: less: 4.2.0 + dev: true - jest-matcher-utils@24.9.0: + /jest-matcher-utils@24.9.0: + resolution: {integrity: sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==} + engines: {node: '>= 6'} dependencies: chalk: 2.4.2 jest-diff: 24.9.0 jest-get-type: 24.9.0 pretty-format: 24.9.0 + dev: true - jest-matcher-utils@26.6.2: + /jest-matcher-utils@26.6.2: + resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==} + engines: {node: '>= 10.14.2'} dependencies: chalk: 4.1.2 jest-diff: 26.6.2 jest-get-type: 26.3.0 pretty-format: 26.6.2 + dev: true - jest-matcher-utils@27.5.1: + /jest-matcher-utils@27.5.1: + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: chalk: 4.1.2 jest-diff: 27.5.1 jest-get-type: 27.5.1 pretty-format: 27.5.1 + dev: true + + /jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true - jest-message-util@24.9.0: + /jest-message-util@24.9.0: + resolution: {integrity: sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==} + engines: {node: '>= 6'} dependencies: '@babel/code-frame': 7.26.2 '@jest/test-result': 24.9.0 @@ -22627,8 +15368,11 @@ snapshots: stack-utils: 1.0.5 transitivePeerDependencies: - supports-color + dev: true - jest-message-util@26.6.2: + /jest-message-util@26.6.2: + resolution: {integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==} + engines: {node: '>= 10.14.2'} dependencies: '@babel/code-frame': 7.26.2 '@jest/types': 26.6.2 @@ -22639,47 +15383,102 @@ snapshots: pretty-format: 26.6.2 slash: 3.0.0 stack-utils: 2.0.6 + dev: true + + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true - jest-mock@24.9.0: + /jest-mock@24.9.0: + resolution: {integrity: sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==} + engines: {node: '>= 6'} dependencies: '@jest/types': 24.9.0 + dev: true - jest-mock@26.6.2: + /jest-mock@26.6.2: + resolution: {integrity: sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@types/node': 14.18.63 + dev: true - jest-pnp-resolver@1.2.3(jest-resolve@24.9.0): - optionalDependencies: + /jest-pnp-resolver@1.2.3(jest-resolve@24.9.0): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: jest-resolve: 24.9.0 + dev: true - jest-pnp-resolver@1.2.3(jest-resolve@26.6.2): - optionalDependencies: + /jest-pnp-resolver@1.2.3(jest-resolve@26.6.2): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: jest-resolve: 26.6.2 + dev: true - jest-regex-util@24.9.0: {} + /jest-regex-util@24.9.0: + resolution: {integrity: sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==} + engines: {node: '>= 6'} + dev: true - jest-regex-util@26.0.0: {} + /jest-regex-util@26.0.0: + resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} + engines: {node: '>= 10.14.2'} + dev: true - jest-regex-util@29.6.3: {} + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true - jest-resolve-dependencies@26.6.3: + /jest-resolve-dependencies@26.6.3: + resolution: {integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 jest-regex-util: 26.0.0 jest-snapshot: 26.6.2 transitivePeerDependencies: - supports-color + dev: true - jest-resolve@24.9.0: + /jest-resolve@24.9.0: + resolution: {integrity: sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==} + engines: {node: '>= 6'} dependencies: '@jest/types': 24.9.0 browser-resolve: 1.11.3 chalk: 2.4.2 jest-pnp-resolver: 1.2.3(jest-resolve@24.9.0) realpath-native: 1.1.0 + dev: true - jest-resolve@26.6.2: + /jest-resolve@26.6.2: + resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 chalk: 4.1.2 @@ -22689,8 +15488,11 @@ snapshots: read-pkg-up: 7.0.1 resolve: 1.22.8 slash: 3.0.0 + dev: true - jest-runner@24.9.0: + /jest-runner@24.9.0: + resolution: {integrity: sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==} + engines: {node: '>= 6'} dependencies: '@jest/console': 24.9.0 '@jest/environment': 24.9.0 @@ -22715,8 +15517,11 @@ snapshots: - bufferutil - supports-color - utf-8-validate + dev: true - jest-runner@26.6.3: + /jest-runner@26.6.3: + resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/console': 26.6.2 '@jest/environment': 26.6.2 @@ -22744,8 +15549,12 @@ snapshots: - supports-color - ts-node - utf-8-validate + dev: true - jest-runtime@24.9.0: + /jest-runtime@24.9.0: + resolution: {integrity: sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==} + engines: {node: '>= 6'} + hasBin: true dependencies: '@jest/console': 24.9.0 '@jest/environment': 24.9.0 @@ -22774,8 +15583,12 @@ snapshots: - bufferutil - supports-color - utf-8-validate + dev: true - jest-runtime@26.6.3: + /jest-runtime@26.6.3: + resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==} + engines: {node: '>= 10.14.2'} + hasBin: true dependencies: '@jest/console': 26.6.2 '@jest/environment': 26.6.2 @@ -22810,15 +15623,24 @@ snapshots: - supports-color - ts-node - utf-8-validate + dev: true - jest-serializer@24.9.0: {} + /jest-serializer@24.9.0: + resolution: {integrity: sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==} + engines: {node: '>= 6'} + dev: true - jest-serializer@26.6.2: + /jest-serializer@26.6.2: + resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} + engines: {node: '>= 10.14.2'} dependencies: '@types/node': 14.18.63 graceful-fs: 4.2.11 + dev: true - jest-snapshot@24.9.0: + /jest-snapshot@24.9.0: + resolution: {integrity: sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==} + engines: {node: '>= 6'} dependencies: '@babel/types': 7.26.0 '@jest/types': 24.9.0 @@ -22835,8 +15657,11 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - jest-snapshot@26.6.2: + /jest-snapshot@26.6.2: + resolution: {integrity: sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==} + engines: {node: '>= 10.14.2'} dependencies: '@babel/types': 7.26.0 '@jest/types': 26.6.2 @@ -22856,8 +15681,11 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - supports-color + dev: true - jest-util@24.9.0: + /jest-util@24.9.0: + resolution: {integrity: sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==} + engines: {node: '>= 6'} dependencies: '@jest/console': 24.9.0 '@jest/fake-timers': 24.9.0 @@ -22873,8 +15701,11 @@ snapshots: source-map: 0.6.1 transitivePeerDependencies: - supports-color + dev: true - jest-util@26.6.2: + /jest-util@26.6.2: + resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@types/node': 14.18.63 @@ -22882,17 +15713,23 @@ snapshots: graceful-fs: 4.2.11 is-ci: 2.0.0 micromatch: 4.0.8 + dev: true - jest-util@29.7.0: + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 14.18.63 + '@types/node': 22.9.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 + dev: true - jest-validate@24.9.0: + /jest-validate@24.9.0: + resolution: {integrity: sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==} + engines: {node: '>= 6'} dependencies: '@jest/types': 24.9.0 camelcase: 5.3.1 @@ -22900,8 +15737,11 @@ snapshots: jest-get-type: 24.9.0 leven: 3.1.0 pretty-format: 24.9.0 + dev: true - jest-validate@26.6.2: + /jest-validate@26.6.2: + resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 camelcase: 6.3.0 @@ -22909,8 +15749,11 @@ snapshots: jest-get-type: 26.3.0 leven: 3.1.0 pretty-format: 26.6.2 + dev: true - jest-watcher@26.6.2: + /jest-watcher@26.6.2: + resolution: {integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==} + engines: {node: '>= 10.14.2'} dependencies: '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 @@ -22919,39 +15762,57 @@ snapshots: chalk: 4.1.2 jest-util: 26.6.2 string-length: 4.0.2 + dev: true - jest-worker@24.9.0: + /jest-worker@24.9.0: + resolution: {integrity: sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==} + engines: {node: '>= 6'} dependencies: merge-stream: 2.0.0 supports-color: 6.1.0 + dev: true - jest-worker@26.6.2: + /jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} dependencies: '@types/node': 14.18.63 merge-stream: 2.0.0 supports-color: 7.2.0 + dev: true - jest-worker@27.5.1: + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} dependencies: '@types/node': 14.18.63 merge-stream: 2.0.0 supports-color: 8.1.1 - jest-worker@29.4.3: + /jest-worker@29.4.3: + resolution: {integrity: sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 14.18.63 + '@types/node': 22.9.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 + dev: true - jest-worker@29.7.0: + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 14.18.63 + '@types/node': 22.9.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 + dev: true - jest@26.6.3: + /jest@26.6.3: + resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==} + engines: {node: '>= 10.14.2'} + hasBin: true dependencies: '@jest/core': 26.6.3 import-local: 3.2.0 @@ -22962,25 +15823,40 @@ snapshots: - supports-color - ts-node - utf-8-validate + dev: true - jquery@3.7.1: {} + /jquery@3.7.1: + resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} + dev: true - js-cookie@2.2.1: {} + /js-cookie@2.2.1: + resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} + dev: true - js-tokens@4.0.0: {} + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.1: + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 + dev: true - js-yaml@4.1.0: + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true dependencies: argparse: 2.0.1 + dev: true - jsbn@0.1.1: {} + /jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + dev: true - jsdom@11.12.0: + /jsdom@11.12.0: + resolution: {integrity: sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==} dependencies: abab: 2.0.6 acorn: 5.7.4 @@ -23011,8 +15887,16 @@ snapshots: transitivePeerDependencies: - bufferutil - utf-8-validate + dev: true - jsdom@16.7.0: + /jsdom@16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true dependencies: abab: 2.0.6 acorn: 8.14.0 @@ -23045,138 +15929,244 @@ snapshots: - bufferutil - supports-color - utf-8-validate + dev: true - jsesc@2.5.2: {} + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true - jsesc@3.0.2: {} + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true - json-buffer@3.0.0: {} + /json-buffer@3.0.0: + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} + dev: true - json-buffer@3.0.1: {} + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true - json-parse-better-errors@1.0.2: {} + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: true - json-parse-even-better-errors@2.3.1: {} + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-traverse@0.4.1: {} + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: {} + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-schema@0.4.0: {} + /json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: true - json-stable-stringify-without-jsonify@1.0.1: {} + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true - json-stringify-safe@5.0.1: {} + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: true - json2module@0.0.3: + /json2module@0.0.3: + resolution: {integrity: sha512-qYGxqrRrt4GbB8IEOy1jJGypkNsjWoIMlZt4bAsmUScCA507Hbc2p1JOhBzqn45u3PWafUgH2OnzyNU7udO/GA==} + hasBin: true dependencies: rw: 1.3.3 + dev: false - json2mq@0.2.0: + /json2mq@0.2.0: + resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} dependencies: string-convert: 0.2.1 - json5@2.2.3: {} + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true - jsonc-parser@3.3.1: {} + /jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + dev: true - jsonfile@3.0.1: + /jsonfile@3.0.1: + resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==} optionalDependencies: graceful-fs: 4.2.11 + dev: true - jsonfile@4.0.0: + /jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 + dev: true - jsonfile@6.1.0: + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 + dev: true - jsprim@1.4.2: + /jsprim@1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} dependencies: assert-plus: 1.0.0 extsprintf: 1.3.0 json-schema: 0.4.0 verror: 1.10.0 + dev: true - jsx-ast-utils@3.3.5: + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} dependencies: array-includes: 3.1.8 array.prototype.flat: 1.3.2 object.assign: 4.1.5 object.values: 1.2.0 + dev: true - keyv@3.1.0: + /keyv@3.1.0: + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} dependencies: json-buffer: 3.0.0 + dev: true - keyv@4.5.4: + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 + dev: true - kind-of@3.2.2: + /kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 - kind-of@4.0.0: + /kind-of@4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} - kind-of@6.0.3: {} + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true - kleur@3.0.3: {} + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} - kleur@4.1.5: {} + /klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + dev: true - klona@2.0.6: {} + /known-css-properties@0.21.0: + resolution: {integrity: sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==} + dev: true - known-css-properties@0.21.0: {} + /known-css-properties@0.26.0: + resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==} + dev: true - kolorist@1.8.0: {} + /kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + dev: true - ky@1.7.2: {} + /ky@1.7.2: + resolution: {integrity: sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==} + engines: {node: '>=18'} + dev: true - latest-version@3.1.0: + /latest-version@3.1.0: + resolution: {integrity: sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==} + engines: {node: '>=4'} dependencies: package-json: 4.0.1 + dev: true - latest-version@9.0.0: + /latest-version@9.0.0: + resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} + engines: {node: '>=18'} dependencies: package-json: 10.0.1 + dev: true - launch-editor@2.9.1: + /launch-editor@2.9.1: + resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} dependencies: picocolors: 1.1.1 shell-quote: 1.8.1 - lazy-cache@1.0.4: {} + /lazy-cache@1.0.4: + resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==} + engines: {node: '>=0.10.0'} - lcid@3.1.1: + /lcid@3.1.1: + resolution: {integrity: sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==} + engines: {node: '>=8'} dependencies: invert-kv: 3.0.1 + dev: true - leac@0.6.0: {} + /leac@0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + dev: true - left-pad@1.3.0: {} + /left-pad@1.3.0: + resolution: {integrity: sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==} + deprecated: use String.prototype.padStart() + dev: true - less-loader@10.2.0(less@4.2.0)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)): + /less-loader@10.2.0(less@4.2.0)(webpack@5.96.1): + resolution: {integrity: sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + less: ^3.5.0 || ^4.0.0 + webpack: ^5.0.0 dependencies: klona: 2.0.6 less: 4.2.0 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + dev: true - less-plugin-npm-import@2.1.0: + /less-plugin-npm-import@2.1.0: + resolution: {integrity: sha512-f7pVkEooRq2/jge/M/Y+spoPXj5rRIY30q1as+3kZsDG8Rs+loNJUCVQjzXB9Ao/9FeIJULiq2zrXymv+OMTbw==} + engines: {node: '>=0.4.2'} dependencies: promise: 7.0.4 resolve: 1.1.7 + dev: false - less-plugin-resolve@1.0.2: + /less-plugin-resolve@1.0.2: + resolution: {integrity: sha512-e1AHq0XNTU8S3d9JCc8CFYajoUBr0EK3pcuLT5PogyBBeE0knzZJL105kKKSZWfq2lQLq3/uEDrMK3JPq+fHaA==} dependencies: enhanced-resolve: 5.17.1 + dev: true - less@4.1.3: + /less@4.1.3: + resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==} + engines: {node: '>=6'} + hasBin: true dependencies: copy-anything: 2.0.6 parse-node-version: 1.0.1 @@ -23189,8 +16179,12 @@ snapshots: mime: 1.6.0 needle: 3.3.1 source-map: 0.6.1 + dev: true - less@4.2.0: + /less@4.2.0: + resolution: {integrity: sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==} + engines: {node: '>=6'} + hasBin: true dependencies: copy-anything: 2.0.6 parse-node-version: 1.0.1 @@ -23203,47 +16197,113 @@ snapshots: mime: 1.6.0 needle: 3.3.1 source-map: 0.6.1 + dev: true - leven@3.1.0: {} + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true - levn@0.3.0: + /levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 + dev: true - levn@0.4.1: + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + dev: true - lightningcss-darwin-arm64@1.22.1: + /lightningcss-darwin-arm64@1.22.1: + resolution: {integrity: sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - lightningcss-darwin-x64@1.22.1: + /lightningcss-darwin-x64@1.22.1: + resolution: {integrity: sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - lightningcss-freebsd-x64@1.22.1: + /lightningcss-freebsd-x64@1.22.1: + resolution: {integrity: sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - lightningcss-linux-arm-gnueabihf@1.22.1: + /lightningcss-linux-arm-gnueabihf@1.22.1: + resolution: {integrity: sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - lightningcss-linux-arm64-gnu@1.22.1: + /lightningcss-linux-arm64-gnu@1.22.1: + resolution: {integrity: sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - lightningcss-linux-arm64-musl@1.22.1: + /lightningcss-linux-arm64-musl@1.22.1: + resolution: {integrity: sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - lightningcss-linux-x64-gnu@1.22.1: + /lightningcss-linux-x64-gnu@1.22.1: + resolution: {integrity: sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - lightningcss-linux-x64-musl@1.22.1: + /lightningcss-linux-x64-musl@1.22.1: + resolution: {integrity: sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - lightningcss-win32-x64-msvc@1.22.1: + /lightningcss-win32-x64-msvc@1.22.1: + resolution: {integrity: sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - lightningcss@1.22.1: + /lightningcss@1.22.1: + resolution: {integrity: sha512-Fy45PhibiNXkm0cK5FJCbfO8Y6jUpD/YcHf/BtuI+jvYYqSXKF4muk61jjE8YxCR9y+hDYIWSzHTc+bwhDE6rQ==} + engines: {node: '>= 12.0.0'} dependencies: detect-libc: 1.0.3 optionalDependencies: @@ -23256,19 +16316,32 @@ snapshots: lightningcss-linux-x64-gnu: 1.22.1 lightningcss-linux-x64-musl: 1.22.1 lightningcss-win32-x64-msvc: 1.22.1 + dev: true - lines-and-columns@1.2.4: {} + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true - listr-input@0.2.1: + /listr-input@0.2.1: + resolution: {integrity: sha512-oa8iVG870qJq+OuuMK3DjGqFcwsK1SDu+kULp9kEq09TY231aideIZenr3lFOQdASpAr6asuyJBbX62/a3IIhg==} + engines: {node: '>=6'} dependencies: inquirer: 7.3.3 inquirer-autosubmit-prompt: 0.2.0 rxjs: 6.6.7 through: 2.3.8 + dev: true - listr-silent-renderer@1.1.1: {} + /listr-silent-renderer@1.1.1: + resolution: {integrity: sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==} + engines: {node: '>=4'} + dev: true - listr-update-renderer@0.5.0(listr@0.14.3): + /listr-update-renderer@0.5.0(listr@0.14.3): + resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==} + engines: {node: '>=6'} + peerDependencies: + listr: ^0.14.2 dependencies: chalk: 1.1.3 cli-truncate: 0.2.1 @@ -23279,15 +16352,21 @@ snapshots: log-symbols: 1.0.2 log-update: 2.3.0 strip-ansi: 3.0.1 + dev: true - listr-verbose-renderer@0.5.0: + /listr-verbose-renderer@0.5.0: + resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==} + engines: {node: '>=4'} dependencies: chalk: 2.4.2 cli-cursor: 2.1.0 date-fns: 1.30.1 figures: 2.0.0 + dev: true - listr@0.14.3: + /listr@0.14.3: + resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==} + engines: {node: '>=6'} dependencies: '@samverschueren/stream-to-observable': 0.3.1(rxjs@6.6.7) is-observable: 1.1.0 @@ -23301,149 +16380,259 @@ snapshots: transitivePeerDependencies: - zen-observable - zenObservable + dev: true - load-json-file@4.0.0: + /load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} dependencies: graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 + dev: true - load-script@1.0.0: {} + /load-script@1.0.0: + resolution: {integrity: sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==} + dev: true - loader-runner@4.3.0: {} + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} - loader-utils@2.0.4: + /loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} dependencies: big.js: 5.2.2 emojis-list: 3.0.0 json5: 2.2.3 - loader-utils@3.3.1: {} + /loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + dev: true - local-pkg@0.4.3: {} + /local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + dev: true - locate-path@3.0.0: + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} dependencies: p-locate: 3.0.0 path-exists: 3.0.0 + dev: true - locate-path@5.0.0: + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 - locate-path@6.0.0: + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 + dev: true - lodash-es@4.17.21: {} + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: true - lodash.debounce@4.0.8: {} + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true - lodash.escape@4.0.1: {} + /lodash.escape@4.0.1: + resolution: {integrity: sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==} + dev: true - lodash.flattendeep@4.4.0: {} + /lodash.flattendeep@4.4.0: + resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} + dev: true - lodash.get@4.4.2: {} + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true - lodash.isequal@4.5.0: {} + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: true - lodash.merge@4.6.2: {} + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true - lodash.sortby@4.7.0: {} + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true - lodash.startcase@4.4.0: {} + /lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true - lodash.throttle@4.1.1: {} + /lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + dev: true - lodash.truncate@4.4.2: {} + /lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: true - lodash.zip@4.2.0: {} + /lodash.zip@4.2.0: + resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==} + dev: true - lodash@4.17.21: {} + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@1.0.2: + /log-symbols@1.0.2: + resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==} + engines: {node: '>=0.10.0'} dependencies: chalk: 1.1.3 + dev: true - log-symbols@2.2.0: + /log-symbols@2.2.0: + resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} + engines: {node: '>=4'} dependencies: chalk: 2.4.2 + dev: true - log-symbols@4.1.0: + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 + dev: true - log-symbols@6.0.0: + /log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} dependencies: chalk: 5.3.0 is-unicode-supported: 1.3.0 + dev: true - log-update@2.3.0: + /log-update@2.3.0: + resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==} + engines: {node: '>=4'} dependencies: ansi-escapes: 3.2.0 cli-cursor: 2.1.0 wrap-ansi: 3.0.1 + dev: true - longest-streak@2.0.4: {} + /longest-streak@2.0.4: + resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} + dev: true - longest-streak@3.1.0: {} + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - longest@1.0.1: {} + /longest@1.0.1: + resolution: {integrity: sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==} + engines: {node: '>=0.10.0'} + dev: false - loose-envify@1.4.0: + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true dependencies: js-tokens: 4.0.0 - lower-case@2.0.2: + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: tslib: 2.6.1 + dev: true - lowercase-keys@1.0.1: {} + /lowercase-keys@1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + dev: true - lowercase-keys@2.0.0: {} + /lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + dev: true - lru-cache@10.4.3: {} + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@4.1.5: + /lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: pseudomap: 1.0.2 yallist: 2.1.2 + dev: true - lru-cache@5.1.1: + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 + dev: true - lru-cache@6.0.0: + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: yallist: 4.0.0 + dev: true - lru-cache@7.18.3: {} + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: true - lunr@2.3.9: {} + /lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + dev: true - lz-string@1.5.0: {} + /lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + dev: true - make-dir@1.3.0: + /make-dir@1.3.0: + resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} + engines: {node: '>=4'} dependencies: pify: 3.0.0 + dev: true - make-dir@2.1.0: + /make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + requiresBuild: true dependencies: pify: 4.0.1 semver: 5.7.2 + dev: true optional: true - make-dir@3.1.0: + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} dependencies: semver: 6.3.1 + dev: true - make-dir@4.0.0: + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} dependencies: semver: 7.6.3 + dev: true - make-fetch-happen@2.6.0: + /make-fetch-happen@2.6.0: + resolution: {integrity: sha512-FFq0lNI0ax+n9IWzWpH8A4JdgYiAp2DDYIZ3rsaav8JDe8I+72CzK6PQW/oom15YDZpV5bYW/9INd6nIJ2ZfZw==} dependencies: agentkeepalive: 3.5.3 cacache: 10.0.4 @@ -23458,49 +16647,83 @@ snapshots: ssri: 5.3.0 transitivePeerDependencies: - supports-color + dev: true - makeerror@1.0.12: + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 + dev: true - map-age-cleaner@0.1.3: + /map-age-cleaner@0.1.3: + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} dependencies: p-defer: 1.0.0 + dev: true - map-cache@0.2.2: {} + /map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true - map-obj@1.0.1: {} + /map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true - map-obj@4.3.0: {} + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true - map-visit@1.0.0: + /map-visit@1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} dependencies: object-visit: 1.0.1 + dev: true - markdown-table@3.0.4: {} + /markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + dev: true - marked@1.0.0: {} + /marked@1.0.0: + resolution: {integrity: sha512-Wo+L1pWTVibfrSr+TTtMuiMfNzmZWiOPeO7rZsQUY5bgsxpHesBEcIWJloWVTFnrMXnf/TL30eTFSGJddmQAng==} + engines: {node: '>= 8.16.2'} + hasBin: true + dev: true - matcher@3.0.0: + /matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} dependencies: escape-string-regexp: 4.0.0 + dev: true optional: true - mathml-tag-names@2.1.3: {} + /mathml-tag-names@2.1.3: + resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + dev: true - md5.js@1.3.5: + /md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: hash-base: 3.0.4 inherits: 2.0.4 safe-buffer: 5.2.1 + dev: true - mdast-util-definitions@5.1.2: + /mdast-util-definitions@5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: '@types/mdast': 3.0.15 '@types/unist': 2.0.11 unist-util-visit: 4.1.2 + dev: true - mdast-util-directive@2.2.4: + /mdast-util-directive@2.2.4: + resolution: {integrity: sha512-sK3ojFP+jpj1n7Zo5ZKvoxP1MvLyzVG63+gm40Z/qI00avzdPCYxt7RBMgofwAva9gBjbDBWVRB/i+UD+fUCzQ==} dependencies: '@types/mdast': 3.0.15 '@types/unist': 2.0.11 @@ -23511,22 +16734,28 @@ snapshots: unist-util-visit-parents: 5.1.3 transitivePeerDependencies: - supports-color + dev: true - mdast-util-find-and-replace@2.2.2: + /mdast-util-find-and-replace@2.2.2: + resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} dependencies: '@types/mdast': 3.0.15 escape-string-regexp: 5.0.0 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 + dev: true - mdast-util-find-and-replace@3.0.1: + /mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + dev: true - mdast-util-from-markdown@0.8.5: + /mdast-util-from-markdown@0.8.5: + resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} dependencies: '@types/mdast': 3.0.15 mdast-util-to-string: 2.0.0 @@ -23535,8 +16764,10 @@ snapshots: unist-util-stringify-position: 2.0.3 transitivePeerDependencies: - supports-color + dev: true - mdast-util-from-markdown@1.3.1: + /mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} dependencies: '@types/mdast': 3.0.15 '@types/unist': 2.0.11 @@ -23553,14 +16784,15 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-from-markdown@2.0.2: + /mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 decode-named-character-reference: 1.0.2 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.0 + micromark: 4.0.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 @@ -23569,35 +16801,44 @@ snapshots: unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color + dev: true - mdast-util-frontmatter@1.0.1: + /mdast-util-frontmatter@1.0.1: + resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 micromark-extension-frontmatter: 1.1.1 - mdast-util-gfm-autolink-literal@1.0.3: + /mdast-util-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} dependencies: '@types/mdast': 3.0.15 ccount: 2.0.1 mdast-util-find-and-replace: 2.2.2 micromark-util-character: 1.2.0 + dev: true - mdast-util-gfm-autolink-literal@2.0.1: + /mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} dependencies: '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 mdast-util-find-and-replace: 3.0.1 micromark-util-character: 2.1.1 + dev: true - mdast-util-gfm-footnote@1.0.2: + /mdast-util-gfm-footnote@1.0.2: + resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 micromark-util-normalize-identifier: 1.1.0 + dev: true - mdast-util-gfm-footnote@2.0.0: + /mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 @@ -23606,21 +16847,27 @@ snapshots: micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color + dev: true - mdast-util-gfm-strikethrough@1.0.3: + /mdast-util-gfm-strikethrough@1.0.3: + resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 + dev: true - mdast-util-gfm-strikethrough@2.0.0: + /mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} dependencies: '@types/mdast': 4.0.4 mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + dev: true - mdast-util-gfm-table@1.0.7: + /mdast-util-gfm-table@1.0.7: + resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} dependencies: '@types/mdast': 3.0.15 markdown-table: 3.0.4 @@ -23628,8 +16875,10 @@ snapshots: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color + dev: true - mdast-util-gfm-table@2.0.0: + /mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 @@ -23638,13 +16887,17 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + dev: true - mdast-util-gfm-task-list-item@1.0.2: + /mdast-util-gfm-task-list-item@1.0.2: + resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 + dev: true - mdast-util-gfm-task-list-item@2.0.0: + /mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 @@ -23652,8 +16905,10 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + dev: true - mdast-util-gfm@2.0.2: + /mdast-util-gfm@2.0.2: + resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} dependencies: mdast-util-from-markdown: 1.3.1 mdast-util-gfm-autolink-literal: 1.0.3 @@ -23664,8 +16919,10 @@ snapshots: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color + dev: true - mdast-util-gfm@3.0.0: + /mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} dependencies: mdast-util-from-markdown: 2.0.2 mdast-util-gfm-autolink-literal: 2.0.1 @@ -23676,8 +16933,10 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + dev: true - mdast-util-mdx-expression@1.3.2: + /mdast-util-mdx-expression@1.3.2: + resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 @@ -23686,8 +16945,10 @@ snapshots: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color + dev: true - mdast-util-mdx-expression@2.0.1: + /mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 @@ -23697,8 +16958,10 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + dev: true - mdast-util-mdx-jsx@3.1.3: + /mdast-util-mdx-jsx@3.1.3: + resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 @@ -23714,8 +16977,10 @@ snapshots: vfile-message: 4.0.2 transitivePeerDependencies: - supports-color + dev: true - mdast-util-mdxjs-esm@1.3.1: + /mdast-util-mdxjs-esm@1.3.1: + resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 @@ -23724,8 +16989,10 @@ snapshots: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color + dev: true - mdast-util-mdxjs-esm@2.0.1: + /mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 @@ -23735,18 +17002,23 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + dev: true - mdast-util-phrasing@3.0.1: + /mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} dependencies: '@types/mdast': 3.0.15 unist-util-is: 5.2.1 - mdast-util-phrasing@4.1.0: + /mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} dependencies: '@types/mdast': 4.0.4 unist-util-is: 6.0.0 + dev: true - mdast-util-to-hast@12.3.0: + /mdast-util-to-hast@12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} dependencies: '@types/hast': 2.3.10 '@types/mdast': 3.0.15 @@ -23756,8 +17028,10 @@ snapshots: unist-util-generated: 2.0.1 unist-util-position: 4.0.4 unist-util-visit: 4.1.2 + dev: true - mdast-util-to-hast@13.2.0: + /mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 @@ -23768,8 +17042,10 @@ snapshots: unist-util-position: 5.0.0 unist-util-visit: 5.0.0 vfile: 6.0.3 + dev: true - mdast-util-to-markdown@0.6.5: + /mdast-util-to-markdown@0.6.5: + resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==} dependencies: '@types/unist': 2.0.11 longest-streak: 2.0.4 @@ -23777,8 +17053,10 @@ snapshots: parse-entities: 2.0.0 repeat-string: 1.6.1 zwitch: 1.0.5 + dev: true - mdast-util-to-markdown@1.5.0: + /mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} dependencies: '@types/mdast': 3.0.15 '@types/unist': 2.0.11 @@ -23789,7 +17067,8 @@ snapshots: unist-util-visit: 4.1.2 zwitch: 2.0.4 - mdast-util-to-markdown@2.1.2: + /mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 @@ -23800,45 +17079,72 @@ snapshots: micromark-util-decode-string: 2.0.1 unist-util-visit: 5.0.0 zwitch: 2.0.4 + dev: true - mdast-util-to-string@2.0.0: {} + /mdast-util-to-string@2.0.0: + resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} + dev: true - mdast-util-to-string@3.2.0: + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} dependencies: '@types/mdast': 3.0.15 - mdast-util-to-string@4.0.0: + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} dependencies: '@types/mdast': 4.0.4 + dev: true - mdn-data@2.0.14: {} + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true - mdn-data@2.0.4: {} + /mdn-data@2.0.4: + resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} + dev: true - media-typer@0.3.0: {} + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} - mem@5.1.1: + /mem@5.1.1: + resolution: {integrity: sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==} + engines: {node: '>=8'} dependencies: map-age-cleaner: 0.1.3 mimic-fn: 2.1.0 p-is-promise: 2.1.0 + dev: true - memfs@3.5.3: + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} dependencies: fs-monkey: 1.0.6 + dev: true - memfs@4.14.0: + /memfs@4.14.0: + resolution: {integrity: sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==} + engines: {node: '>= 4.0.0'} dependencies: '@jsonjoy.com/json-pack': 1.1.0(tslib@2.6.1) '@jsonjoy.com/util': 1.5.0(tslib@2.6.1) tree-dump: 1.0.2(tslib@2.6.1) tslib: 2.6.1 - memorystream@0.3.1: {} + /memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + dev: true - meow@13.2.0: {} + /meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} - meow@9.0.0: + /meow@9.0.0: + resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} + engines: {node: '>=10'} dependencies: '@types/minimist': 1.2.5 camelcase-keys: 6.2.2 @@ -23852,16 +17158,25 @@ snapshots: trim-newlines: 3.0.1 type-fest: 0.18.1 yargs-parser: 20.2.9 + dev: true - merge-descriptors@1.0.3: {} + /merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - merge-stream@2.0.0: {} + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: {} + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true - methods@1.1.2: {} + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} - micromark-core-commonmark@1.1.0: + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} dependencies: decode-named-character-reference: 1.0.2 micromark-factory-destination: 1.1.0 @@ -23880,7 +17195,8 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 - micromark-core-commonmark@2.0.1: + /micromark-core-commonmark@2.0.2: + resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==} dependencies: decode-named-character-reference: 1.0.2 devlop: 1.1.0 @@ -23898,8 +17214,10 @@ snapshots: micromark-util-subtokenize: 2.0.2 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-extension-directive@2.2.1: + /micromark-extension-directive@2.2.1: + resolution: {integrity: sha512-ZFKZkNaEqAP86IghX1X7sE8NNnx6kFNq9mSBRvEHjArutTCJZ3LYg6VH151lXVb1JHpmIcW/7rX25oMoIHuSug==} dependencies: micromark-factory-space: 1.1.0 micromark-factory-whitespace: 1.1.0 @@ -23908,29 +17226,36 @@ snapshots: micromark-util-types: 1.1.0 parse-entities: 4.0.1 uvu: 0.5.6 + dev: true - micromark-extension-frontmatter@1.1.1: + /micromark-extension-frontmatter@1.1.1: + resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} dependencies: fault: 2.0.1 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-extension-gfm-autolink-literal@1.0.5: + /micromark-extension-gfm-autolink-literal@1.0.5: + resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} dependencies: micromark-util-character: 1.2.0 micromark-util-sanitize-uri: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + dev: true - micromark-extension-gfm-autolink-literal@2.1.0: + /micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} dependencies: micromark-util-character: 2.1.1 micromark-util-sanitize-uri: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-extension-gfm-footnote@1.1.2: + /micromark-extension-gfm-footnote@1.1.2: + resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} dependencies: micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -23940,19 +17265,23 @@ snapshots: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 + dev: true - micromark-extension-gfm-footnote@2.1.0: + /micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} dependencies: devlop: 1.1.0 - micromark-core-commonmark: 2.0.1 + micromark-core-commonmark: 2.0.2 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-normalize-identifier: 2.0.1 micromark-util-sanitize-uri: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-extension-gfm-strikethrough@1.0.7: + /micromark-extension-gfm-strikethrough@1.0.7: + resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} dependencies: micromark-util-chunked: 1.1.0 micromark-util-classify-character: 1.1.0 @@ -23960,8 +17289,10 @@ snapshots: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 + dev: true - micromark-extension-gfm-strikethrough@2.1.0: + /micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.1 @@ -23969,48 +17300,62 @@ snapshots: micromark-util-resolve-all: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-extension-gfm-table@1.0.7: + /micromark-extension-gfm-table@1.0.7: + resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 + dev: true - micromark-extension-gfm-table@2.1.0: + /micromark-extension-gfm-table@2.1.0: + resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==} dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-extension-gfm-tagfilter@1.0.2: + /micromark-extension-gfm-tagfilter@1.0.2: + resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} dependencies: micromark-util-types: 1.1.0 + dev: true - micromark-extension-gfm-tagfilter@2.0.0: + /micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} dependencies: micromark-util-types: 2.0.1 + dev: true - micromark-extension-gfm-task-list-item@1.0.5: + /micromark-extension-gfm-task-list-item@1.0.5: + resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 + dev: true - micromark-extension-gfm-task-list-item@2.1.0: + /micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-extension-gfm@2.0.3: + /micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} dependencies: micromark-extension-gfm-autolink-literal: 1.0.5 micromark-extension-gfm-footnote: 1.1.2 @@ -24020,8 +17365,10 @@ snapshots: micromark-extension-gfm-task-list-item: 1.0.5 micromark-util-combine-extensions: 1.1.0 micromark-util-types: 1.1.0 + dev: true - micromark-extension-gfm@3.0.0: + /micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} dependencies: micromark-extension-gfm-autolink-literal: 2.1.0 micromark-extension-gfm-footnote: 2.1.0 @@ -24031,199 +17378,260 @@ snapshots: micromark-extension-gfm-task-list-item: 2.1.0 micromark-util-combine-extensions: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-factory-destination@1.1.0: + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-factory-destination@2.0.1: + /micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} dependencies: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-factory-label@1.1.0: + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - micromark-factory-label@2.0.1: + /micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} dependencies: devlop: 1.1.0 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-factory-space@1.1.0: + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} dependencies: micromark-util-character: 1.2.0 micromark-util-types: 1.1.0 - micromark-factory-space@2.0.1: + /micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} dependencies: micromark-util-character: 2.1.1 micromark-util-types: 2.0.1 + dev: true - micromark-factory-title@1.1.0: + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-factory-title@2.0.1: + /micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} dependencies: micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-factory-whitespace@1.1.0: + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-factory-whitespace@2.0.1: + /micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} dependencies: micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-util-character@1.2.0: + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} dependencies: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-util-character@2.1.1: + /micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} dependencies: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-util-chunked@1.1.0: + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: micromark-util-symbol: 1.1.0 - micromark-util-chunked@2.0.1: + /micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} dependencies: micromark-util-symbol: 2.0.1 + dev: true - micromark-util-classify-character@1.1.0: + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-util-classify-character@2.0.1: + /micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} dependencies: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-util-combine-extensions@1.1.0: + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} dependencies: micromark-util-chunked: 1.1.0 micromark-util-types: 1.1.0 - micromark-util-combine-extensions@2.0.1: + /micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} dependencies: micromark-util-chunked: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-util-decode-numeric-character-reference@1.1.0: + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} dependencies: micromark-util-symbol: 1.1.0 - micromark-util-decode-numeric-character-reference@2.0.2: + /micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} dependencies: micromark-util-symbol: 2.0.1 + dev: true - micromark-util-decode-string@1.1.0: + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 1.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 - micromark-util-decode-string@2.0.1: + /micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 + dev: true - micromark-util-encode@1.1.0: {} + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - micromark-util-encode@2.0.1: {} + /micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + dev: true - micromark-util-html-tag-name@1.2.0: {} + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} - micromark-util-html-tag-name@2.0.1: {} + /micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + dev: true - micromark-util-normalize-identifier@1.1.0: + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} dependencies: micromark-util-symbol: 1.1.0 - micromark-util-normalize-identifier@2.0.1: + /micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} dependencies: micromark-util-symbol: 2.0.1 + dev: true - micromark-util-resolve-all@1.1.0: + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} dependencies: micromark-util-types: 1.1.0 - micromark-util-resolve-all@2.0.1: + /micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} dependencies: micromark-util-types: 2.0.1 + dev: true - micromark-util-sanitize-uri@1.2.0: + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} dependencies: micromark-util-character: 1.2.0 micromark-util-encode: 1.1.0 micromark-util-symbol: 1.1.0 - micromark-util-sanitize-uri@2.0.1: + /micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} dependencies: micromark-util-character: 2.1.1 micromark-util-encode: 2.0.1 micromark-util-symbol: 2.0.1 + dev: true - micromark-util-subtokenize@1.1.0: + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} dependencies: micromark-util-chunked: 1.1.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - micromark-util-subtokenize@2.0.2: + /micromark-util-subtokenize@2.0.2: + resolution: {integrity: sha512-xKxhkB62vwHUuuxHe9Xqty3UaAsizV2YKq5OV344u3hFBbf8zIYrhYOWhAQb94MtMPkjTOzzjJ/hid9/dR5vFA==} dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 + dev: true - micromark-util-symbol@1.1.0: {} + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - micromark-util-symbol@2.0.1: {} + /micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + dev: true - micromark-util-types@1.1.0: {} + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - micromark-util-types@2.0.1: {} + /micromark-util-types@2.0.1: + resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} + dev: true - micromark@2.11.4: + /micromark@2.11.4: + resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} dependencies: debug: 4.3.7 parse-entities: 2.0.0 transitivePeerDependencies: - supports-color + dev: true - micromark@3.2.0: + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: '@types/debug': 4.1.12 debug: 4.3.7 @@ -24245,13 +17653,14 @@ snapshots: transitivePeerDependencies: - supports-color - micromark@4.0.0: + /micromark@4.0.1: + resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==} dependencies: '@types/debug': 4.1.12 debug: 4.3.7 decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-core-commonmark: 2.0.1 + micromark-core-commonmark: 2.0.2 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-chunked: 2.0.1 @@ -24266,8 +17675,11 @@ snapshots: micromark-util-types: 2.0.1 transitivePeerDependencies: - supports-color + dev: true - micromatch@3.1.10: + /micromatch@3.1.10: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 @@ -24284,72 +17696,129 @@ snapshots: to-regex: 3.0.2 transitivePeerDependencies: - supports-color + dev: true - micromatch@4.0.8: + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} dependencies: braces: 3.0.3 picomatch: 2.3.1 - miller-rabin@4.0.1: + /miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true dependencies: bn.js: 4.12.1 brorand: 1.1.0 + dev: true - mime-db@1.52.0: {} + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} - mime-db@1.53.0: {} + /mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} - mime-types@2.1.35: + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - mime@1.6.0: {} + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true - mimer@1.1.0: {} + /mimer@1.1.0: + resolution: {integrity: sha512-y9dVfy2uiycQvDNiAYW6zp49ZhFlXDMr5wfdOiMbdzGM/0N5LNR6HTUn3un+WUQcM0koaw8FMTG1bt5EnHJdvQ==} + engines: {node: '>= 6.0'} + hasBin: true + dev: true - mimic-fn@1.2.0: {} + /mimic-fn@1.2.0: + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} + engines: {node: '>=4'} + dev: true - mimic-fn@2.1.0: {} + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true - mimic-fn@4.0.0: {} + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true - mimic-function@5.0.1: {} + /mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + dev: true - mimic-response@1.0.1: {} + /mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + dev: true - min-document@2.19.0: + /min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} dependencies: dom-walk: 0.1.2 + dev: true - min-indent@1.0.1: {} + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true - minimalistic-assert@1.0.1: {} + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimalistic-crypto-utils@1.0.1: {} + /minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: true - minimatch@3.1.2: + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - minimatch@5.1.6: + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 + dev: true - minimatch@9.0.5: + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 + dev: true - minimist-options@4.1.0: + /minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} dependencies: arrify: 1.0.1 is-plain-obj: 1.1.0 kind-of: 6.0.3 + dev: true - minimist@1.2.8: {} + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: {} + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true - mississippi@1.3.1: + /mississippi@1.3.1: + resolution: {integrity: sha512-/6rB8YXFbAtsUVRphIRQqB0+9c7VaPHCjVtvto+JqwVxgz8Zz+I+f68/JgQ+Pb4VlZb2svA9OtdXnHHsZz7ltg==} dependencies: concat-stream: 1.6.2 duplexify: 3.7.1 @@ -24361,8 +17830,11 @@ snapshots: pumpify: 1.5.1 stream-each: 1.2.3 through2: 2.0.5 + dev: true - mississippi@2.0.0: + /mississippi@2.0.0: + resolution: {integrity: sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==} + engines: {node: '>=4.0.0'} dependencies: concat-stream: 1.6.2 duplexify: 3.7.1 @@ -24374,38 +17846,58 @@ snapshots: pumpify: 1.5.1 stream-each: 1.2.3 through2: 2.0.5 + dev: true - mixin-deep@1.3.2: + /mixin-deep@1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} dependencies: for-in: 1.0.2 is-extendable: 1.0.1 + dev: true - mkdirp@0.3.0: {} + /mkdirp@0.3.0: + resolution: {integrity: sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==} + deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) + dev: true - mkdirp@0.5.6: + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true dependencies: minimist: 1.2.8 + dev: true - ml-array-max@1.2.4: + /ml-array-max@1.2.4: + resolution: {integrity: sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==} dependencies: is-any-array: 2.0.1 + dev: false - ml-array-min@1.2.3: + /ml-array-min@1.2.3: + resolution: {integrity: sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==} dependencies: is-any-array: 2.0.1 + dev: false - ml-array-rescale@1.3.7: + /ml-array-rescale@1.3.7: + resolution: {integrity: sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==} dependencies: is-any-array: 2.0.1 ml-array-max: 1.2.4 ml-array-min: 1.2.3 + dev: false - ml-matrix@6.12.0: + /ml-matrix@6.12.0: + resolution: {integrity: sha512-AGfR+pWaC0GmzjUnB6BfwhndPEUGz0i7QUYdqNuw1zhTov/vSRJ9pP2hs6BoGpaSbtXgrKjZz2zjD1M0xuur6A==} dependencies: is-any-array: 2.0.1 ml-array-rescale: 1.3.7 + dev: false - mock-property@1.0.3: + /mock-property@1.0.3: + resolution: {integrity: sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ==} + engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 functions-have-names: 1.2.3 @@ -24413,18 +17905,29 @@ snapshots: has-property-descriptors: 1.0.2 hasown: 2.0.2 isarray: 2.0.5 + dev: false - moment@2.30.1: {} + /moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + dev: true - monaco-editor@0.25.2: {} + /monaco-editor@0.25.2: + resolution: {integrity: sha512-5iylzSJevCnzJn9UVsW8yOZ3yHjmAs4TfvH3zsbftKiFKmHG0xirGN6DK9Kk04VSWxYCZZAIafYJoNJJMAU1KA==} + dev: true - moo-color@1.0.3: + /moo-color@1.0.3: + resolution: {integrity: sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==} dependencies: color-name: 1.1.4 + dev: true - moo@0.5.2: {} + /moo@0.5.2: + resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} + dev: true - move-concurrently@1.0.1: + /move-concurrently@1.0.1: + resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==} + deprecated: This package is no longer supported. dependencies: aproba: 1.2.0 copy-concurrently: 1.0.5 @@ -24432,38 +17935,64 @@ snapshots: mkdirp: 0.5.6 rimraf: 2.7.1 run-queue: 1.0.3 + dev: true - mri@1.2.0: {} + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} - mrmime@2.0.0: {} + /mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} - ms@2.0.0: {} + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.3: {} + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multicast-dns@7.2.5: + /multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true dependencies: dns-packet: 5.6.1 thunky: 1.1.0 - multimap@1.1.0: {} + /multimap@1.1.0: + resolution: {integrity: sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==} + dev: true - mute-stream@0.0.7: {} + /mute-stream@0.0.7: + resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} + dev: true - mute-stream@0.0.8: {} + /mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true - mute-stream@1.0.0: {} + /mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true - mz@2.7.0: + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + dev: true - nan@2.22.0: + /nan@2.22.0: + resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} + dev: true optional: true - nano-css@5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /nano-css@5.6.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==} + peerDependencies: + react: '*' + react-dom: '*' dependencies: '@jridgewell/sourcemap-codec': 1.5.0 css-tree: 1.1.3 @@ -24475,12 +18004,20 @@ snapshots: rtl-css-js: 1.16.1 stacktrace-js: 2.0.2 stylis: 4.3.4 + dev: true - nanoid@2.1.11: {} + /nanoid@2.1.11: + resolution: {integrity: sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==} + dev: true - nanoid@3.3.7: {} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true - nanomatch@1.2.13: + /nanomatch@1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 @@ -24495,63 +18032,105 @@ snapshots: to-regex: 3.0.2 transitivePeerDependencies: - supports-color + dev: true - natural-compare@1.4.0: {} + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true - nearley@2.20.1: + /nearley@2.20.1: + resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} + hasBin: true dependencies: commander: 2.20.3 moo: 0.5.2 railroad-diagrams: 1.0.0 randexp: 0.4.6 + dev: true - needle@3.3.1: + /needle@3.3.1: + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + engines: {node: '>= 4.4.x'} + hasBin: true + requiresBuild: true dependencies: iconv-lite: 0.6.3 sax: 1.4.1 + dev: true optional: true - negotiator@0.6.3: {} + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} - negotiator@0.6.4: {} + /negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} - neo-async@2.6.2: {} + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - new-github-release-url@2.0.0: + /new-github-release-url@2.0.0: + resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: type-fest: 2.19.0 + dev: true - nice-try@1.0.5: {} + /nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + dev: true - no-case@3.0.4: + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 tslib: 2.6.1 + dev: true - node-abort-controller@3.1.1: {} + /node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: true - node-addon-api@7.1.1: + /node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + dev: true optional: true - node-domexception@1.0.0: {} + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: true - node-fetch-npm@2.0.4: + /node-fetch-npm@2.0.4: + resolution: {integrity: sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==} + engines: {node: '>=4'} + deprecated: This module is not used anymore, npm uses minipass-fetch for its fetch implementation now dependencies: encoding: 0.1.13 json-parse-better-errors: 1.0.2 safe-buffer: 5.2.1 + dev: true - node-fetch@3.3.2: + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + dev: true - node-forge@1.3.1: {} + /node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} - node-int64@0.4.0: {} + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true - node-libs-browser-okam@2.2.5: + /node-libs-browser-okam@2.2.5: + resolution: {integrity: sha512-kD+WXACEThc6C5DA146KoCNbubjpXeYzXDrukvtXWr6MRzV3uvHCI0eb/GuugWVYnMoD4g3/uaIzvDYOpC4QWw==} dependencies: assert-okam: 1.5.0 browserify-zlib: 0.2.0 @@ -24576,8 +18155,10 @@ snapshots: url-okam: 0.11.1 util-okam: 0.11.1 vm-browserify: 1.1.2 + dev: true - node-libs-browser@2.2.1: + /node-libs-browser@2.2.1: + resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} dependencies: assert: 1.5.1 browserify-zlib: 0.2.0 @@ -24602,8 +18183,11 @@ snapshots: url: 0.11.4 util: 0.11.1 vm-browserify: 1.1.2 + dev: true - node-notifier@8.0.2: + /node-notifier@8.0.2: + resolution: {integrity: sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==} + requiresBuild: true dependencies: growly: 1.3.0 is-wsl: 2.2.0 @@ -24611,56 +18195,90 @@ snapshots: shellwords: 0.1.1 uuid: 8.3.2 which: 2.0.2 + dev: true optional: true - node-releases@2.0.18: {} + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - nopt@1.0.10: + /nopt@1.0.10: + resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} + hasBin: true dependencies: abbrev: 1.1.1 + dev: true - normalize-package-data@2.5.0: + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 + dev: true - normalize-package-data@3.0.3: + /normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 is-core-module: 2.15.1 semver: 7.6.3 validate-npm-package-license: 3.0.4 + dev: true - normalize-package-data@6.0.2: + /normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} dependencies: hosted-git-info: 7.0.2 semver: 7.6.3 validate-npm-package-license: 3.0.4 - normalize-path@1.0.0: {} + /normalize-path@1.0.0: + resolution: {integrity: sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==} + engines: {node: '>=0.10.0'} + dev: true - normalize-path@2.1.1: + /normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} dependencies: remove-trailing-separator: 1.1.0 + dev: true - normalize-path@3.0.0: {} + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} - normalize-range@0.1.2: {} + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true - normalize-selector@0.2.0: {} + /normalize-selector@0.2.0: + resolution: {integrity: sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==} + dev: true - normalize-url@1.9.1: + /normalize-url@1.9.1: + resolution: {integrity: sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==} + engines: {node: '>=4'} dependencies: object-assign: 4.1.1 prepend-http: 1.0.4 query-string: 4.3.4 sort-keys: 1.1.2 + dev: true - normalize-url@4.5.1: {} + /normalize-url@4.5.1: + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} + engines: {node: '>=8'} + dev: true - np@10.0.7(typescript@5.6.3): + /np@10.0.7(typescript@5.6.3): + resolution: {integrity: sha512-vIPKQwOYKpQU40PU5x/vLfN2haj8ObxMvR1QGt7EZnBPWdm4WEbHdumYAnMV7AeR9kACsMqcqAP37sAo5cW5jA==} + engines: {git: '>=2.11.0', node: '>=18', npm: '>=9', pnpm: '>=8', yarn: '>=1.7.0'} + hasBin: true dependencies: chalk: 5.3.0 chalk-template: 1.1.0 @@ -24702,14 +18320,20 @@ snapshots: - typescript - zen-observable - zenObservable + dev: true - npm-conf@1.1.3: + /npm-conf@1.1.3: + resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==} + engines: {node: '>=4'} dependencies: config-chain: 1.1.13 pify: 3.0.0 + dev: true optional: true - npm-name@8.0.0: + /npm-name@8.0.0: + resolution: {integrity: sha512-DIuCGcKYYhASAZW6Xh/tiaGMko8IHOHe0n3zOA7SzTi0Yvy00x8L7sa5yNiZ75Ny58O/KeRtNouy8Ut6gPbKiw==} + engines: {node: '>=18'} dependencies: is-scoped: 3.0.0 is-url-superb: 6.1.0 @@ -24720,20 +18344,28 @@ snapshots: registry-auth-token: 5.0.2 registry-url: 6.0.1 validate-npm-package-name: 5.0.1 + dev: true - npm-package-arg@5.1.2: + /npm-package-arg@5.1.2: + resolution: {integrity: sha512-wJBsrf0qpypPT7A0LART18hCdyhpCMxeTtcb0X4IZO2jsP6Om7EHN1d9KSKiqD+KVH030RVNpWS9thk+pb7wzA==} dependencies: hosted-git-info: 2.8.9 osenv: 0.1.5 semver: 5.7.2 validate-npm-package-name: 3.0.0 + dev: true - npm-pick-manifest@1.0.4: + /npm-pick-manifest@1.0.4: + resolution: {integrity: sha512-MKxNdeyOZysPRTTbHtW0M5Fw38Jo/3ARsoGw5qjCfS+XGjvNB/Gb4qtAZUFmKPM2mVum+eX559eHvKywU856BQ==} dependencies: npm-package-arg: 5.1.2 semver: 5.7.2 + dev: true - npm-run-all@4.1.5: + /npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true dependencies: ansi-styles: 3.2.1 chalk: 2.4.2 @@ -24744,175 +18376,277 @@ snapshots: read-pkg: 3.0.0 shell-quote: 1.8.1 string.prototype.padend: 3.1.6 + dev: true - npm-run-path@2.0.2: + /npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} dependencies: path-key: 2.0.1 + dev: true - npm-run-path@4.0.1: + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: path-key: 3.1.1 + dev: true - npm-run-path@5.3.0: + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 + dev: true - nprogress@0.2.0: {} + /nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + dev: true - nth-check@1.0.2: + /nth-check@1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} dependencies: boolbase: 1.0.0 + dev: true - nth-check@2.1.1: + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: boolbase: 1.0.0 + dev: true - num2fraction@1.2.2: {} + /num2fraction@1.2.2: + resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==} + dev: true - number-is-nan@1.0.1: {} + /number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + dev: true - nwsapi@2.2.13: {} + /nwsapi@2.2.13: + resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} + dev: true - oauth-sign@0.9.0: {} + /oauth-sign@0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + dev: true - object-assign@4.1.1: {} + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} - object-copy@0.1.0: + /object-copy@0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} dependencies: copy-descriptor: 0.1.1 define-property: 0.2.5 kind-of: 3.2.2 + dev: true - object-inspect@1.12.3: {} + /object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: false - object-inspect@1.13.3: {} + /object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} - object-is@1.1.6: + /object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - object-keys@1.1.1: {} + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} - object-visit@1.0.1: + /object-visit@1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 + dev: true - object.assign@4.1.5: + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - object.entries@1.1.8: + /object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 + dev: true - object.fromentries@2.0.8: + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-object-atoms: 1.0.0 + dev: true - object.getownpropertydescriptors@2.1.8: + /object.getownpropertydescriptors@2.1.8: + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} + engines: {node: '>= 0.8'} dependencies: array.prototype.reduce: 1.0.7 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-object-atoms: 1.0.0 gopd: 1.0.1 safe-array-concat: 1.1.2 + dev: true - object.getprototypeof@1.0.6: + /object.getprototypeof@1.0.6: + resolution: {integrity: sha512-gUiHHFVGLDayJsXfudx6KQEA6iMhPnsmAqL0vdBXhtKzTupcgNTGDJfW1a8xw81jjyWN07IRsVsCKyTn9wiJvQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 reflect.getprototypeof: 1.0.6 + dev: true - object.hasown@1.1.4: + /object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-object-atoms: 1.0.0 + dev: true - object.pick@1.3.0: + /object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 + dev: true - object.values@1.2.0: + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 + dev: true - obuf@1.1.2: {} + /obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - omit-deep@0.3.0: + /omit-deep@0.3.0: + resolution: {integrity: sha512-Lbl/Ma59sss2b15DpnWnGmECBRL8cRl/PjPbPMVW+Y8zIQzRrwMaI65Oy6HvxyhYeILVKBJb2LWeG81bj5zbMg==} + engines: {node: '>=0.10.0'} dependencies: is-plain-object: 2.0.4 unset-value: 0.1.2 + dev: true - on-exit-leak-free@0.2.0: {} + /on-exit-leak-free@0.2.0: + resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + dev: true - on-finished@2.4.1: + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 - on-headers@1.0.2: {} + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} - once@1.4.0: + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - onetime@2.0.1: + /onetime@2.0.1: + resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} + engines: {node: '>=4'} dependencies: mimic-fn: 1.2.0 + dev: true - onetime@5.1.2: + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 + dev: true - onetime@6.0.0: + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 + dev: true - onetime@7.0.0: + /onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} dependencies: mimic-function: 5.0.1 + dev: true - open@10.1.0: + /open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} dependencies: default-browser: 5.2.1 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 is-wsl: 3.1.0 - open@6.4.0: + /open@6.4.0: + resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} + engines: {node: '>=8'} dependencies: is-wsl: 1.1.0 + dev: true - open@8.4.2: + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 + dev: true - open@9.1.0: + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} dependencies: default-browser: 4.0.0 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 is-wsl: 2.2.0 + dev: true - opener@1.5.2: {} + /opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true - optionator@0.8.3: + /optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -24920,8 +18654,11 @@ snapshots: prelude-ls: 1.1.2 type-check: 0.3.2 word-wrap: 1.2.5 + dev: true - optionator@0.9.4: + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -24929,15 +18666,21 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 word-wrap: 1.2.5 + dev: true - ora@1.4.0: + /ora@1.4.0: + resolution: {integrity: sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==} + engines: {node: '>=4'} dependencies: chalk: 2.4.2 cli-cursor: 2.1.0 cli-spinners: 1.3.1 log-symbols: 2.2.0 + dev: true - ora@5.4.1: + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -24948,104 +18691,185 @@ snapshots: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 + dev: true - org-regex@1.0.0: {} + /org-regex@1.0.0: + resolution: {integrity: sha512-7bqkxkEJwzJQUAlyYniqEZ3Ilzjh0yoa62c7gL6Ijxj5bEpPL+8IE1Z0PFj0ywjjXQcdrwR51g9MIcLezR0hKQ==} + engines: {node: '>=8'} + dev: true - os-browserify@0.3.0: {} + /os-browserify@0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + dev: true - os-homedir@1.0.2: {} + /os-homedir@1.0.2: + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} + engines: {node: '>=0.10.0'} + dev: true - os-locale@5.0.0: + /os-locale@5.0.0: + resolution: {integrity: sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==} + engines: {node: '>=10'} dependencies: execa: 4.1.0 lcid: 3.1.1 mem: 5.1.1 + dev: true - os-tmpdir@1.0.2: {} + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true - osenv@0.1.5: + /osenv@0.1.5: + resolution: {integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==} + deprecated: This package is no longer supported. dependencies: os-homedir: 1.0.2 os-tmpdir: 1.0.2 + dev: true - outdent@0.5.0: {} + /outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + dev: true - p-cancelable@1.1.0: {} + /p-cancelable@1.1.0: + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} + dev: true - p-defer@1.0.0: {} + /p-defer@1.0.0: + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} + dev: true - p-each-series@2.2.0: {} + /p-each-series@2.2.0: + resolution: {integrity: sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==} + engines: {node: '>=8'} + dev: true - p-filter@2.1.0: + /p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} dependencies: p-map: 2.1.0 + dev: true - p-finally@1.0.0: {} + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: true - p-is-promise@2.1.0: {} + /p-is-promise@2.1.0: + resolution: {integrity: sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==} + engines: {node: '>=6'} + dev: true - p-limit@2.3.0: + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 - p-limit@3.1.0: + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: true - p-locate@3.0.0: + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} dependencies: p-limit: 2.3.0 + dev: true - p-locate@4.1.0: + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 - p-locate@5.0.0: + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 + dev: true - p-map@2.1.0: {} + /p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: true - p-map@5.5.0: + /p-map@5.5.0: + resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} + engines: {node: '>=12'} dependencies: aggregate-error: 4.0.1 + dev: true - p-map@7.0.2: {} + /p-map@7.0.2: + resolution: {integrity: sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==} + engines: {node: '>=18'} + dev: true - p-memoize@7.1.1: + /p-memoize@7.1.1: + resolution: {integrity: sha512-DZ/bONJILHkQ721hSr/E9wMz5Am/OTJ9P6LhLFo2Tu+jL8044tgc9LwHO8g4PiaYePnlVVRAJcKmgy8J9MVFrA==} + engines: {node: '>=14.16'} dependencies: mimic-fn: 4.0.0 type-fest: 3.13.1 + dev: true - p-retry@6.2.0: + /p-retry@6.2.0: + resolution: {integrity: sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==} + engines: {node: '>=16.17'} dependencies: '@types/retry': 0.12.2 is-network-error: 1.1.0 retry: 0.13.1 - p-timeout@6.1.3: {} + /p-timeout@6.1.3: + resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==} + engines: {node: '>=14.16'} + dev: true - p-try@2.2.0: {} + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} - package-json-from-dist@1.0.1: {} + /package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + dev: true - package-json@10.0.1: + /package-json@10.0.1: + resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} + engines: {node: '>=18'} dependencies: ky: 1.7.2 registry-auth-token: 5.0.2 registry-url: 6.0.1 semver: 7.6.3 + dev: true - package-json@4.0.1: + /package-json@4.0.1: + resolution: {integrity: sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==} + engines: {node: '>=4'} dependencies: got: 6.7.1 registry-auth-token: 3.4.0 registry-url: 3.1.0 semver: 5.7.2 + dev: true - package-manager-detector@0.2.2: {} + /package-manager-detector@0.2.2: + resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} + dev: true - pacote@2.7.38: + /pacote@2.7.38: + resolution: {integrity: sha512-XxHUyHQB7QCVBxoXeVu0yKxT+2PvJucsc0+1E+6f95lMUxEAYERgSAc71ckYXrYr35Ew3xFU/LrhdIK21GQFFA==} dependencies: bluebird: 3.7.2 cacache: 9.3.0 @@ -25070,25 +18894,37 @@ snapshots: which: 1.3.1 transitivePeerDependencies: - supports-color + dev: true - pako@1.0.11: {} + /pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + dev: true - parallel-transform@1.2.0: + /parallel-transform@1.2.0: + resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} dependencies: cyclist: 1.0.2 inherits: 2.0.4 readable-stream: 2.3.8 + dev: true - param-case@3.0.4: + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 tslib: 2.6.1 + dev: true - parent-module@1.0.1: + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 + dev: true - parse-asn1@5.1.7: + /parse-asn1@5.1.7: + resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} + engines: {node: '>= 0.10'} dependencies: asn1.js: 4.10.1 browserify-aes: 1.2.0 @@ -25096,8 +18932,10 @@ snapshots: hash-base: 3.0.4 pbkdf2: 3.1.2 safe-buffer: 5.2.1 + dev: true - parse-entities@2.0.0: + /parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} dependencies: character-entities: 1.2.4 character-entities-legacy: 1.1.4 @@ -25105,8 +18943,10 @@ snapshots: is-alphanumerical: 1.0.4 is-decimal: 1.0.4 is-hexadecimal: 1.0.4 + dev: true - parse-entities@4.0.1: + /parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} dependencies: '@types/unist': 2.0.11 character-entities: 2.0.2 @@ -25116,156 +18956,279 @@ snapshots: is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + dev: true - parse-git-config@0.2.0: + /parse-git-config@0.2.0: + resolution: {integrity: sha512-amapZFADOJtHvX2URcRfbzG2OFcW+UAwmdK2kht2N2vsH5Py65VxI5yZTlD2DjmxVhTz6htFoVCxROYUJaYOXQ==} + engines: {node: '>=0.10.0'} dependencies: ini: 1.3.8 + dev: true - parse-git-config@1.1.1: + /parse-git-config@1.1.1: + resolution: {integrity: sha512-S3LGXJZVSy/hswvbSkfdbKBRVsnqKrVu6j8fcvdtJ4TxosSELyQDsJPuGPXuZ+EyuYuJd3O4uAF8gcISR0OFrQ==} + engines: {node: '>=0.10.0'} dependencies: extend-shallow: 2.0.1 fs-exists-sync: 0.1.0 git-config-path: 1.0.1 ini: 1.3.8 + dev: true - parse-github-url@1.0.3: {} + /parse-github-url@1.0.3: + resolution: {integrity: sha512-tfalY5/4SqGaV/GIGzWyHnFjlpTPTNpENR9Ea2lLldSJ8EWXMsvacWucqY3m3I4YPtas15IxTLQVQ5NSYXPrww==} + engines: {node: '>= 0.10'} + hasBin: true + dev: true - parse-json@4.0.0: + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 + dev: true - parse-json@5.2.0: + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + dev: true - parse-json@8.1.0: + /parse-json@8.1.0: + resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} + engines: {node: '>=18'} dependencies: '@babel/code-frame': 7.26.2 index-to-position: 0.1.2 type-fest: 4.26.1 - parse-node-version@1.0.1: {} + /parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + dev: true - parse-passwd@1.0.0: {} + /parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + dev: true - parse5-htmlparser2-tree-adapter@7.1.0: + /parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} dependencies: domhandler: 5.0.3 parse5: 7.2.1 + dev: true - parse5-parser-stream@7.1.2: + /parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} dependencies: parse5: 7.2.1 + dev: true - parse5@4.0.0: {} + /parse5@4.0.0: + resolution: {integrity: sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==} + dev: true - parse5@6.0.1: {} + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: true - parse5@7.2.1: + /parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} dependencies: entities: 4.5.0 + dev: true - parseley@0.12.1: + /parseley@0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} dependencies: leac: 0.6.0 peberminta: 0.9.0 + dev: true - parseurl@1.3.3: {} + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} - pascal-case@3.1.2: + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 tslib: 2.6.1 + dev: true - pascalcase@0.1.1: {} + /pascalcase@0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: true - path-browserify@0.0.1: {} + /path-browserify@0.0.1: + resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} + dev: true - path-exists@3.0.0: {} + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: true - path-exists@4.0.0: {} + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} - path-exists@5.0.0: {} + /path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - path-is-absolute@1.0.1: {} + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} - path-is-inside@1.0.2: {} + /path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + dev: true - path-key@2.0.1: {} + /path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + dev: true - path-key@3.1.1: {} + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} - path-key@4.0.0: {} + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true - path-parse@1.0.7: {} + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} dependencies: lru-cache: 10.4.3 minipass: 7.1.2 + dev: true - path-to-regexp@0.1.10: {} + /path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} - path-to-regexp@1.7.0: + /path-to-regexp@1.7.0: + resolution: {integrity: sha512-nifX1uj4S9IrK/w3Xe7kKvNEepXivANs9ng60Iq7PU/BlouV3yL/VUhFqTuTq33ykwUqoNcTeGo5vdOBP4jS/Q==} dependencies: isarray: 0.0.1 + dev: true - path-type@3.0.0: + /path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} dependencies: pify: 3.0.0 + dev: true - path-type@4.0.0: {} + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true - pbkdf2@3.1.2: + /pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} dependencies: create-hash: 1.2.0 create-hmac: 1.1.7 ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 + dev: true - pdfast@0.2.0: {} + /pdfast@0.2.0: + resolution: {integrity: sha512-cq6TTu6qKSFUHwEahi68k/kqN2mfepjkGrG9Un70cgdRRKLKY6Rf8P8uvP2NvZktaQZNF3YE7agEkLj0vGK9bA==} + dev: false - peberminta@0.9.0: {} + /peberminta@0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + dev: true - pend@1.2.0: {} + /pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: true - performance-now@2.1.0: {} + /performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: true - picocolors@0.2.1: {} + /picocolors@0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + dev: true - picocolors@1.1.1: {} + /picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: {} + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} - picomatch@3.0.1: {} + /picomatch@3.0.1: + resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} + engines: {node: '>=10'} + dev: true - pidtree@0.3.1: {} + /pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + dev: true - pify@2.3.0: {} + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true - pify@3.0.0: {} + /pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: true - pify@4.0.1: {} + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true - pinkie-promise@2.0.1: + /pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} dependencies: pinkie: 2.0.4 + dev: true - pinkie@2.0.4: {} + /pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + dev: true - pino-abstract-transport@0.5.0: + /pino-abstract-transport@0.5.0: + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} dependencies: duplexify: 4.1.3 split2: 4.2.0 + dev: true - pino-std-serializers@4.0.0: {} + /pino-std-serializers@4.0.0: + resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + dev: true - pino@7.11.0: + /pino@7.11.0: + resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} + hasBin: true dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 @@ -25278,206 +19241,402 @@ snapshots: safe-stable-stringify: 2.5.0 sonic-boom: 2.8.0 thread-stream: 0.15.2 + dev: true - pirates@4.0.6: {} + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true - piscina@4.7.0: + /piscina@4.7.0: + resolution: {integrity: sha512-b8hvkpp9zS0zsfa939b/jXbe64Z2gZv0Ha7FYPNUiDIB1y2AtxcOZdfP8xN8HFjUaqQiT9gRlfjAsoL8vdJ1Iw==} optionalDependencies: '@napi-rs/nice': 1.0.1 + dev: true - pkg-dir@4.2.0: + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 - pkg-dir@8.0.0: + /pkg-dir@8.0.0: + resolution: {integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==} + engines: {node: '>=18'} dependencies: find-up-simple: 1.0.0 + dev: true - pkg-up@3.1.0: + /pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} dependencies: find-up: 3.0.0 + dev: true - plur@4.0.0: + /plur@4.0.0: + resolution: {integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==} + engines: {node: '>=10'} dependencies: irregular-plurals: 3.5.0 + dev: true - pluralize@8.0.0: {} + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true - pn@1.1.0: {} + /pn@1.1.0: + resolution: {integrity: sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==} + dev: true - point-in-polygon@1.1.0: {} + /point-in-polygon@1.1.0: + resolution: {integrity: sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==} + dev: true - posix-character-classes@0.1.1: {} + /posix-character-classes@0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: true - possible-typed-array-names@1.0.0: {} + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} - postcss-attribute-case-insensitive@5.0.2(postcss@8.4.49): + /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.49): + resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-selector-parser: 6.1.2 + dev: true - postcss-clamp@4.1.0(postcss@8.4.49): + /postcss-clamp@4.1.0(postcss@8.4.49): + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-color-functional-notation@4.2.4(postcss@8.4.49): + /postcss-color-functional-notation@4.2.4(postcss@8.4.49): + resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-color-hex-alpha@8.0.4(postcss@8.4.49): + /postcss-color-hex-alpha@8.0.4(postcss@8.4.49): + resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-color-rebeccapurple@7.1.1(postcss@8.4.49): + /postcss-color-rebeccapurple@7.1.1(postcss@8.4.49): + resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-custom-media@8.0.2(postcss@8.4.49): + /postcss-custom-media@8.0.2(postcss@8.4.49): + resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-custom-properties@12.1.11(postcss@8.4.49): + /postcss-custom-properties@12.1.11(postcss@8.4.49): + resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-custom-selectors@6.0.3(postcss@8.4.49): + /postcss-custom-selectors@6.0.3(postcss@8.4.49): + resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 dependencies: postcss: 8.4.49 postcss-selector-parser: 6.1.2 + dev: true - postcss-dir-pseudo-class@6.0.5(postcss@8.4.49): + /postcss-dir-pseudo-class@6.0.5(postcss@8.4.49): + resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-selector-parser: 6.1.2 + dev: true - postcss-double-position-gradients@3.1.2(postcss@8.4.49): + /postcss-double-position-gradients@3.1.2(postcss@8.4.49): + resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-env-function@4.0.6(postcss@8.4.49): + /postcss-env-function@4.0.6(postcss@8.4.49): + resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-flexbugs-fixes@5.0.2(postcss@8.4.49): + /postcss-flexbugs-fixes@5.0.2(postcss@8.4.49): + resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} + peerDependencies: + postcss: ^8.1.4 dependencies: postcss: 8.4.49 + dev: true - postcss-focus-visible@6.0.4(postcss@8.4.49): + /postcss-focus-visible@6.0.4(postcss@8.4.49): + resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 dependencies: postcss: 8.4.49 postcss-selector-parser: 6.1.2 + dev: true - postcss-focus-within@5.0.4(postcss@8.4.49): + /postcss-focus-within@5.0.4(postcss@8.4.49): + resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 dependencies: postcss: 8.4.49 postcss-selector-parser: 6.1.2 + dev: true - postcss-font-variant@5.0.0(postcss@8.4.49): + /postcss-font-variant@5.0.0(postcss@8.4.49): + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 dependencies: postcss: 8.4.49 + dev: true - postcss-gap-properties@3.0.5(postcss@8.4.49): + /postcss-gap-properties@3.0.5(postcss@8.4.49): + resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 + dev: true - postcss-html@0.36.0(postcss-syntax@0.36.2)(postcss@7.0.39): + /postcss-html@0.36.0(postcss-syntax@0.36.2)(postcss@7.0.39): + resolution: {integrity: sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==} + peerDependencies: + postcss: '>=5.0.0' + postcss-syntax: '>=0.36.0' dependencies: htmlparser2: 3.10.1 postcss: 7.0.39 postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39) + dev: true - postcss-image-set-function@4.0.7(postcss@8.4.49): + /postcss-image-set-function@4.0.7(postcss@8.4.49): + resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-initial@4.0.1(postcss@8.4.49): + /postcss-initial@4.0.1(postcss@8.4.49): + resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} + peerDependencies: + postcss: ^8.0.0 dependencies: postcss: 8.4.49 + dev: true - postcss-lab-function@4.2.1(postcss@8.4.49): + /postcss-lab-function@4.2.1(postcss@8.4.49): + resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-less@3.1.4: + /postcss-less@3.1.4: + resolution: {integrity: sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==} + engines: {node: '>=6.14.4'} dependencies: postcss: 7.0.39 + dev: true - postcss-less@4.0.1: + /postcss-less@4.0.1: + resolution: {integrity: sha512-C92S4sHlbDpefJ2QQJjrucCcypq3+KZPstjfuvgOCNnGx0tF9h8hXgAlOIATGAxMXZXaF+nVp+/Mi8pCAWdSmw==} + engines: {node: '>=10'} dependencies: postcss: 8.4.49 + dev: true - postcss-logical@5.0.4(postcss@8.4.49): + /postcss-logical@5.0.4(postcss@8.4.49): + resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 dependencies: postcss: 8.4.49 + dev: true - postcss-media-minmax@5.0.0(postcss@8.4.49): + /postcss-media-minmax@5.0.0(postcss@8.4.49): + resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.1.0 dependencies: postcss: 8.4.49 + dev: true - postcss-media-query-parser@0.2.3: {} + /postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + dev: true - postcss-modules-extract-imports@3.1.0(postcss@8.4.49): + /postcss-modules-extract-imports@3.1.0(postcss@8.4.49): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: postcss: 8.4.49 + dev: true - postcss-modules-local-by-default@4.1.0(postcss@8.4.49): + /postcss-modules-local-by-default@4.1.0(postcss@8.4.49): + resolution: {integrity: sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 postcss-selector-parser: 7.0.0 postcss-value-parser: 4.2.0 + dev: true - postcss-modules-scope@3.2.1(postcss@8.4.49): + /postcss-modules-scope@3.2.1(postcss@8.4.49): + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: postcss: 8.4.49 postcss-selector-parser: 7.0.0 + dev: true - postcss-modules-values@4.0.0(postcss@8.4.49): + /postcss-modules-values@4.0.0(postcss@8.4.49): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 + dev: true - postcss-nesting@10.2.0(postcss@8.4.49): + /postcss-nesting@10.2.0(postcss@8.4.49): + resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2) postcss: 8.4.49 postcss-selector-parser: 6.1.2 + dev: true - postcss-opacity-percentage@1.1.3(postcss@8.4.49): + /postcss-opacity-percentage@1.1.3(postcss@8.4.49): + resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 + dev: true - postcss-overflow-shorthand@3.0.4(postcss@8.4.49): + /postcss-overflow-shorthand@3.0.4(postcss@8.4.49): + resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-page-break@3.0.4(postcss@8.4.49): + /postcss-page-break@3.0.4(postcss@8.4.49): + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 dependencies: postcss: 8.4.49 + dev: true - postcss-place@7.0.5(postcss@8.4.49): + /postcss-place@7.0.5(postcss@8.4.49): + resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-value-parser: 4.2.0 + dev: true - postcss-prefix-selector@1.16.0(postcss@8.4.49): + /postcss-prefix-selector@1.16.0(postcss@8.4.49): + resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==} + peerDependencies: + postcss: '>4 <9' dependencies: postcss: 8.4.49 + dev: true - postcss-preset-env@7.5.0(postcss@8.4.49): + /postcss-preset-env@7.5.0(postcss@8.4.49): + resolution: {integrity: sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 dependencies: '@csstools/postcss-color-function': 1.1.1(postcss@8.4.49) '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.49) @@ -25525,155 +19684,307 @@ snapshots: postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.49) postcss-selector-not: 5.0.0(postcss@8.4.49) postcss-value-parser: 4.2.0 + dev: true - postcss-pseudo-class-any-link@7.1.6(postcss@8.4.49): + /postcss-pseudo-class-any-link@7.1.6(postcss@8.4.49): + resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.49 postcss-selector-parser: 6.1.2 + dev: true - postcss-replace-overflow-wrap@4.0.0(postcss@8.4.49): + /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.49): + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 dependencies: postcss: 8.4.49 + dev: true - postcss-resolve-nested-selector@0.1.6: {} + /postcss-resolve-nested-selector@0.1.6: + resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} + dev: true - postcss-safe-parser@4.0.2: + /postcss-safe-parser@4.0.2: + resolution: {integrity: sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==} + engines: {node: '>=6.0.0'} dependencies: postcss: 7.0.39 + dev: true + + /postcss-safe-parser@6.0.0(postcss@8.4.49): + resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.3.3 + dependencies: + postcss: 8.4.49 + dev: true - postcss-sass@0.4.4: + /postcss-sass@0.4.4: + resolution: {integrity: sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==} dependencies: gonzales-pe: 4.3.0 postcss: 7.0.39 + dev: true - postcss-scss@2.1.1: + /postcss-scss@2.1.1: + resolution: {integrity: sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==} + engines: {node: '>=6.0.0'} dependencies: postcss: 7.0.39 + dev: true - postcss-selector-not@5.0.0(postcss@8.4.49): + /postcss-selector-not@5.0.0(postcss@8.4.49): + resolution: {integrity: sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==} + peerDependencies: + postcss: ^8.1.0 dependencies: balanced-match: 1.0.2 postcss: 8.4.49 + dev: true - postcss-selector-parser@6.1.2: + /postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 + dev: true - postcss-selector-parser@7.0.0: + /postcss-selector-parser@7.0.0: + resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} + engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 + dev: true - postcss-sorting@6.0.0(postcss@8.4.49): + /postcss-sorting@6.0.0(postcss@8.4.49): + resolution: {integrity: sha512-bYJ0vgAiGbjCBKi7B07CzsBc9eM84nLEbavUmwNp8rAa+PNyrgdH+6PpnqTtciLuUs99c4rFQQmCaYgeBQYmSQ==} + peerDependencies: + postcss: ^8.0.4 dependencies: lodash: 4.17.21 postcss: 8.4.49 + dev: true - postcss-syntax@0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39): + /postcss-syntax@0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39): + resolution: {integrity: sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==} + peerDependencies: + postcss: '>=5.0.0' + postcss-html: '*' + postcss-jsx: '*' + postcss-less: '*' + postcss-markdown: '*' + postcss-scss: '*' + peerDependenciesMeta: + postcss-html: + optional: true + postcss-jsx: + optional: true + postcss-less: + optional: true + postcss-markdown: + optional: true + postcss-scss: + optional: true dependencies: postcss: 7.0.39 - optionalDependencies: postcss-html: 0.36.0(postcss-syntax@0.36.2)(postcss@7.0.39) postcss-less: 3.1.4 postcss-scss: 2.1.1 + dev: true - postcss-syntax@0.36.2(postcss@8.4.49): - dependencies: - postcss: 8.4.49 - - postcss-value-parser@4.2.0: {} + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@7.0.39: + /postcss@7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} dependencies: picocolors: 0.2.1 source-map: 0.6.1 + dev: true - postcss@8.4.38: + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.1.1 source-map-js: 1.2.1 + dev: false - postcss@8.4.49: + /postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.1.1 source-map-js: 1.2.1 + dev: true - prelude-ls@1.1.2: {} + /prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + dev: true - prelude-ls@1.2.1: {} + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true - prepend-http@1.0.4: {} + /prepend-http@1.0.4: + resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==} + engines: {node: '>=0.10.0'} + dev: true - prepend-http@2.0.0: {} + /prepend-http@2.0.0: + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} + engines: {node: '>=4'} + dev: true - prettier-plugin-organize-imports@3.2.4(prettier@2.8.8)(typescript@3.9.10): + /prettier-plugin-organize-imports@3.2.4(prettier@2.8.8)(typescript@3.9.10): + resolution: {integrity: sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==} + peerDependencies: + '@volar/vue-language-plugin-pug': ^1.0.4 + '@volar/vue-typescript': ^1.0.4 + prettier: '>=2.0' + typescript: '>=2.9' + peerDependenciesMeta: + '@volar/vue-language-plugin-pug': + optional: true + '@volar/vue-typescript': + optional: true dependencies: prettier: 2.8.8 typescript: 3.9.10 + dev: true - prettier-plugin-organize-imports@4.1.0(prettier@2.8.8)(typescript@5.6.3): + /prettier-plugin-organize-imports@4.1.0(prettier@2.8.8)(typescript@5.6.3): + resolution: {integrity: sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==} + peerDependencies: + prettier: '>=2.0' + typescript: '>=2.9' + vue-tsc: ^2.1.0 + peerDependenciesMeta: + vue-tsc: + optional: true dependencies: prettier: 2.8.8 typescript: 5.6.3 + dev: true - prettier-plugin-packagejson@2.3.0(prettier@2.8.8): + /prettier-plugin-packagejson@2.3.0(prettier@2.8.8): + resolution: {integrity: sha512-2SAPMMk1UDkqsB7DifWKcwCm6VC52JXMrzLHfbcQHJRWhRCj9zziOy+s+2XOyPBeyqFqS+A/1IKzOrxKFTo6pw==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true dependencies: - sort-package-json: 1.57.0 - optionalDependencies: prettier: 2.8.8 + sort-package-json: 1.57.0 + dev: true - prettier-plugin-packagejson@2.4.3(prettier@2.8.8): + /prettier-plugin-packagejson@2.4.3(prettier@2.8.8): + resolution: {integrity: sha512-kPeeviJiwy0BgOSk7No8NmzzXfW4R9FYWni6ziA5zc1kGVVrKnBzMZdu2TUhI+I7h8/5Htt3vARYOk7KKJTTNQ==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true dependencies: + prettier: 2.8.8 sort-package-json: 2.4.1 synckit: 0.8.5 - optionalDependencies: - prettier: 2.8.8 + dev: true - prettier-plugin-packagejson@2.5.3(prettier@2.8.8): + /prettier-plugin-packagejson@2.5.3(prettier@2.8.8): + resolution: {integrity: sha512-ATMEEXr+ywls1kgrZEWl4SBPEm0uDdyDAjyNzUC0/Z8WZTD3RqbJcQDR+Dau+wYkW9KHK6zqQIsFyfn+9aduWg==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true dependencies: + prettier: 2.8.8 sort-package-json: 2.10.1 synckit: 0.9.2 - optionalDependencies: - prettier: 2.8.8 + dev: true - prettier-plugin-two-style-order@1.0.1(prettier@2.8.8): + /prettier-plugin-two-style-order@1.0.1(prettier@2.8.8): + resolution: {integrity: sha512-ETltO2FRR/Pxc7bsgz2XwuzWSPwafl7/v5+5Rria4S579CTas7dya+xsmbkix0q1tYQiuRjVVdfGnCKlH/aOuQ==} + peerDependencies: + prettier: '>= 2.0.0' dependencies: postcss: 8.4.49 postcss-less: 4.0.1 postcss-sorting: 6.0.0(postcss@8.4.49) prettier: 2.8.8 + dev: true - prettier@2.8.8: {} + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true - pretty-error@4.0.0: + /pretty-error@4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} dependencies: lodash: 4.17.21 renderkid: 3.0.0 + dev: true - pretty-format@24.9.0: + /pretty-format@24.9.0: + resolution: {integrity: sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==} + engines: {node: '>= 6'} dependencies: '@jest/types': 24.9.0 ansi-regex: 4.1.1 ansi-styles: 3.2.1 react-is: 16.13.1 + dev: true - pretty-format@26.6.2: + /pretty-format@26.6.2: + resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} + engines: {node: '>= 10'} dependencies: '@jest/types': 26.6.2 ansi-regex: 5.0.1 ansi-styles: 4.3.0 react-is: 17.0.2 + dev: true - pretty-format@27.5.1: + /pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 17.0.2 + dev: true + + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + dev: true - pretty-quick@3.3.1(prettier@2.8.8): + /pretty-quick@3.3.1(prettier@2.8.8): + resolution: {integrity: sha512-3b36UXfYQ+IXXqex6mCca89jC8u0mYLqFAN5eTQKoXO6oCQYcIVYZEB/5AlBHI7JPYygReM2Vv6Vom/Gln7fBg==} + engines: {node: '>=10.13'} + hasBin: true + peerDependencies: + prettier: ^2.0.0 dependencies: execa: 4.1.0 find-up: 4.1.0 @@ -25683,74 +19994,130 @@ snapshots: picomatch: 3.0.1 prettier: 2.8.8 tslib: 2.6.1 + dev: true - prism-react-renderer@1.3.5(react@18.3.1): + /prism-react-renderer@1.3.5(react@18.3.1): + resolution: {integrity: sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==} + peerDependencies: + react: '>=0.14.9' dependencies: react: 18.3.1 + dev: true - prism-themes@1.9.0: {} + /prism-themes@1.9.0: + resolution: {integrity: sha512-tX2AYsehKDw1EORwBps+WhBFKc2kxfoFpQAjxBndbZKr4fRmMkv47XN0BghC/K1qwodB1otbe4oF23vUTFDokw==} + dev: true - prismjs@1.29.0: {} + /prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + dev: true - process-nextick-args@2.0.1: {} + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - process-okam@0.11.10: {} + /process-okam@0.11.10: + resolution: {integrity: sha512-p8e5nl6/OCeMalVb9dSojND5B9m/nq64WsyUfRmrTdLMKcNYcDN++/2I8WV1mTQDqrh2PQ6tIIb2A7/A38eSvw==} + engines: {node: '>= 0.6.0'} + dev: true - process-warning@1.0.0: {} + /process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + dev: true - process@0.11.10: {} + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true - progress@2.0.3: {} + /progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true - promise-inflight@1.0.1(bluebird@3.7.2): - optionalDependencies: + /promise-inflight@1.0.1(bluebird@3.7.2): + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dependencies: bluebird: 3.7.2 + dev: true - promise-retry@1.1.1: + /promise-retry@1.1.1: + resolution: {integrity: sha512-StEy2osPr28o17bIW776GtwO6+Q+M9zPiZkYfosciUUMYqjhU/ffwRAH0zN2+uvGyUsn8/YICIHRzLbPacpZGw==} + engines: {node: '>=0.12'} dependencies: err-code: 1.1.2 retry: 0.10.1 + dev: true - promise@7.0.4: + /promise@7.0.4: + resolution: {integrity: sha512-8z1gTSL9cMgqCx8zvMYhzT0eQURAQNSQqR8B2hGfCYkAzt1vjReVdKBv4YwGw3OXAPaxfm4aR0gLoBUon4VmmA==} dependencies: asap: 2.0.6 + dev: false - prompts@2.4.2: + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} dependencies: kleur: 3.0.3 sisteransi: 1.0.5 + dev: true - prop-types@15.8.1: + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + dev: true - property-information@6.5.0: {} + /property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + dev: true - proto-list@1.2.4: {} + /proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + dev: true - protoduck@4.0.0: + /protoduck@4.0.0: + resolution: {integrity: sha512-9sxuz0YTU/68O98xuDn8NBxTVH9EuMhrBTxZdiBL0/qxRmWhB/5a8MagAebDa+98vluAZTs8kMZibCdezbRCeQ==} dependencies: genfun: 4.0.1 + dev: true - proxy-addr@2.0.7: + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-compare@2.6.0: {} + /proxy-compare@2.6.0: + resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==} + dev: true - prr@1.0.1: + /prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + dev: true optional: true - pseudomap@1.0.2: {} + /pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: true - psl@1.10.0: + /psl@1.10.0: + resolution: {integrity: sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA==} dependencies: punycode: 2.3.1 + dev: true - public-encrypt@4.0.3: + /public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} dependencies: bn.js: 4.12.1 browserify-rsa: 4.1.1 @@ -25758,790 +20125,1229 @@ snapshots: parse-asn1: 5.1.7 randombytes: 2.1.0 safe-buffer: 5.2.1 + dev: true - pump@1.0.3: + /pump@1.0.3: + resolution: {integrity: sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 + dev: true - pump@2.0.1: + /pump@2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 + dev: true - pump@3.0.2: + /pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 + dev: true - pumpify@1.5.1: + /pumpify@1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} dependencies: duplexify: 3.7.1 inherits: 2.0.4 pump: 2.0.1 + dev: true - punycode-okam@1.4.1: {} + /punycode-okam@1.4.1: + resolution: {integrity: sha512-e4mSfzGfrVBJmhjp+8PHjXIz5WrvEEWB2FT+RJ6YS/ozGttTcnocuj0CtMo3dujWYe2708bTd79zeIrKBtRzCg==} + dev: true - punycode@1.4.1: {} + /punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + dev: true - punycode@2.3.1: {} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} - pupa@3.1.0: + /pupa@3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} dependencies: escape-goat: 4.0.0 + dev: true + + /q@1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + deprecated: |- + You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - q@1.5.1: {} + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) + dev: true - qs@6.13.0: + /qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 - qs@6.5.3: {} + /qs@6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + dev: true - query-string@4.3.4: + /query-string@4.3.4: + resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==} + engines: {node: '>=0.10.0'} dependencies: object-assign: 4.1.1 strict-uri-encode: 1.1.0 + dev: true - query-string@6.14.1: + /query-string@6.14.1: + resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} + engines: {node: '>=6'} dependencies: decode-uri-component: 0.2.2 filter-obj: 1.1.0 split-on-first: 1.1.0 strict-uri-encode: 2.0.0 + dev: true - querystring-es3@0.2.1: {} + /querystring-es3@0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + dev: true - querystringify@2.2.0: {} + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: true - queue-microtask@1.2.3: {} + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true - queue@6.0.1: + /queue@6.0.1: + resolution: {integrity: sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg==} dependencies: inherits: 2.0.4 + dev: true - quick-format-unescaped@4.0.4: {} + /quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: true - quick-lru@4.0.1: {} + /quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: true - quickselect@2.0.0: {} + /quickselect@2.0.0: + resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} + dev: false - raf@3.4.1: + /raf@3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} dependencies: performance-now: 2.1.0 + dev: true - railroad-diagrams@1.0.0: {} + /railroad-diagrams@1.0.0: + resolution: {integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==} + dev: true - ramda@0.29.0: {} + /ramda@0.29.0: + resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} + dev: true - randexp@0.4.6: + /randexp@0.4.6: + resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} + engines: {node: '>=0.12'} dependencies: discontinuous-range: 1.0.0 ret: 0.1.15 + dev: true - randombytes@2.1.0: + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 - randomfill@1.0.4: + /randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} dependencies: randombytes: 2.1.0 safe-buffer: 5.2.1 + dev: true - range-parser@1.2.1: {} + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} - raw-body@2.5.2: + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - raw-loader@4.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))): + /raw-loader@4.0.2(webpack@5.96.1): + resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + dev: true - rbush@3.0.1: + /rbush@3.0.1: + resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} dependencies: quickselect: 2.0.0 + dev: false - rc-align@4.0.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-align@4.0.15(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 dom-align: 1.12.4 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) resize-observer-polyfill: 1.5.1 + dev: true - rc-cascader@3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-cascader@3.30.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-rrzSbk1Bdqbu+pDwiLCLHu72+lwX9BZ28+JKzoi0DWZ4N29QYFeip8Gctl33QVd2Xg3Rf14D3yAOG76ElJw16w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-select: 14.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree: 5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-select: 14.16.3(react-dom@18.3.1)(react@18.3.1) + rc-tree: 5.10.1(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-cascader@3.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-cascader@3.7.3(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-KBpT+kzhxDW+hxPiNk4zaKa99+Lie2/8nnI11XF+FIOPl4Bj9VlFZi61GrnWzhLGA7VEN+dTxAkNOjkySDa0dA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 array-tree-filter: 2.1.0 classnames: 2.5.1 - rc-select: 14.1.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree: 5.7.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-select: 14.1.18(react-dom@18.3.1)(react@18.3.1) + rc-tree: 5.7.12(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-checkbox@3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-checkbox@3.0.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-k7nxDWxYF+jDI0ZcCvuvj71xONmWRVe5+1MKcERRR9MRyP3tZ69b+yUCSXXh+sik4/Hc9P5wHr2nnUoGS2zBjA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-checkbox@3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-checkbox@3.3.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-collapse@3.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-collapse@3.4.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-jpTwLgJzkhAgp2Wpi3xmbTbbYExg6fkptL67Uu5LCRVEj6wqmy0DHTjjeynsjOLsppHGHu41t1ELntZ0lEvS/Q==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) shallowequal: 1.1.0 + dev: true - rc-collapse@3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-collapse@3.9.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-dialog@9.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-dialog@9.0.4(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-pmnPRZKd9CGzGgf4a1ysBvMhxm8Afx5fF6M7AzLtJ0qh8X1bshurDlqnK4MBNAB4hAeAMMbz6Ytb1rkGMvKFbQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-dialog@9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-dialog@9.6.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-drawer@4.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-drawer@4.4.3(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-FYztwRs3uXnFOIf1hLvFxIQP9MiZJA+0w+Os8dfDh/90X7z/HqP/Yg+noLCIeHEbKln1Tqelv8ymCAN24zPcfQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-drawer@6.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-drawer@6.3.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-uBZVb3xTAR+dBV53d/bUhTctCw3pwcwJoM7g5aX+7vgwt2zzVzoJ6aqFjYJpBlZ9zp0dVYN8fV+hykFE7c4lig==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-drawer@7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-drawer@7.2.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-dropdown@4.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-dropdown@4.0.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g==} + peerDependencies: + react: '>=16.11.0' + react-dom: '>=16.11.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-trigger: 5.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-trigger: 5.3.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-dropdown@4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-dropdown@4.1.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-VZjMunpBdlVzYpEdJSaV7WM7O0jf8uyDjirxXLZRNZ+tAC+NzD3PXPEtliFwGzVwBBdCmGuSqiS9DWcOLxQ9tw==} + peerDependencies: + react: '>=16.11.0' + react-dom: '>=16.11.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/trigger': 1.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 1.18.3(react-dom@18.3.1)(react@18.3.1) classnames: 2.3.2 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-dropdown@4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-dropdown@4.2.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==} + peerDependencies: + react: '>=16.11.0' + react-dom: '>=16.11.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.5(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-field-form@1.38.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-field-form@1.38.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-O83Oi1qPyEv31Sg+Jwvsj6pXc8uQI2BtIAkURr5lvEYHVggXJhdU/nynK8wY1gbw0qR48k731sN5ON4egRCROA==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 async-validator: 4.2.5 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-field-form@2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-field-form@2.5.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-trTezNK0ThFQkKTy3KmsP6tY1TPMm0O5H/YviB+QLyfpdcMFuYs/aPn1uDbpdQupBd6dE6X73bzITcPS97zhJQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 '@rc-component/async-validator': 5.0.4 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-footer@0.6.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-footer@0.6.8(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-JBZ+xcb6kkex8XnBd4VHw1ZxjV6kmcwUumSHaIFdka2qzMCo7Klcy4sI6G0XtUpG/vtpislQCc+S9Bc+NLHYMg==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-image@5.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-image@5.13.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-iZTOmw5eWo2+gcrJMMcnd7SsxVHl3w5xlyCgsULUdJhJbnuI8i/AL0tVOsE7aLn9VfOh1qgDT3mC2G75/c7mqg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-dialog: 9.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dialog: 9.0.4(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-image@7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-image@7.11.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dialog: 9.6.0(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-input-number@7.3.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-input-number@7.3.11(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-input-number@9.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-input-number@9.3.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-JQ363ywqRyxwgVxpg2z2kja3CehTpYdqR7emJ/6yJjRdbvo+RvfE83fcpBCIJRq3zLp8SakmEXq60qzWyZ7Usw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 '@rc-component/mini-decimal': 1.1.0 classnames: 2.5.1 - rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input: 1.6.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-input@0.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-input@0.1.4(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-FqDdNz+fV2dKNgfXzcSLKvC+jEs1709t7nD+WdfjrdSaOcefpgc7BUJYadc3usaING+b7ediMTfKxuJBsEFbXA==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-input@1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-input@1.6.3(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-wI4NzuqBS8vvKr8cljsvnTUqItMfG1QbJoxovCgL+DX4eVUcHIjVwharwevIxyy7H/jbLryh+K7ysnJr23aWIA==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-mentions@1.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-mentions@1.13.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-FCkaWw6JQygtOz0+Vxz/M/NWqrWHB9LwqlY2RtcuFqWJNFK9njijOOzTSsBGANliGufVUzx/xuPHmZPBV0+Hgw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-menu: 9.8.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-textarea: 0.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-trigger: 5.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.8.4(react-dom@18.3.1)(react@18.3.1) + rc-textarea: 0.4.7(react-dom@18.3.1)(react@18.3.1) + rc-trigger: 5.3.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-mentions@2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-mentions@2.17.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-sfHy+qLvc+p8jx8GUsujZWXDOIlIimp6YQz7N5ONQ6bHsa2kyG+BLa5k2wuxgebBbH97is33wxiyq5UkiXRpHA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.5(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-menu: 9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input: 1.6.3(react-dom@18.3.1)(react@18.3.1) + rc-menu: 9.16.0(react-dom@18.3.1)(react@18.3.1) + rc-textarea: 1.8.2(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-menu@9.12.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-menu@9.12.4(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-t2NcvPLV1mFJzw4F21ojOoRVofK2rWhpKPx69q2raUsiHPDP6DDevsBILEYdsIegqBeSXoWs2bf6CueBKg3BFg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/trigger': 1.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 1.18.3(react-dom@18.3.1)(react@18.3.1) classnames: 2.3.2 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-overflow: 1.3.2(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-menu@9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-menu@9.16.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-vAL0yqPkmXWk3+YKRkmIR8TYj3RVdEt3ptG2jCJXWNAvQbT0VJJdRyHZ7kG/l1JsZlB+VJq/VcYOo69VR4oD+w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.5(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-overflow: 1.3.2(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-menu@9.8.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-menu@9.8.4(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-trigger: 5.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-overflow: 1.3.2(react-dom@18.3.1)(react@18.3.1) + rc-trigger: 5.3.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-motion@2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-motion@2.9.3(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-rkW47ABVkic7WEB0EKJqzySpvDqwl60/tdkY7hWP7dYnh5pm0SzJpo54oW3TDUGXV5wfxXFmMkxrzRRbotQ0+w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.3.2 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-notification@4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-notification@4.6.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-NSmFYwrrdY3+un1GvDAJQw62Xi9LNMSsoQyo95tuaYrcad5Bn9gJUL8AREufRxSQAQnr64u3LtP3EUyLYT6bhw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-notification@5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-notification@5.6.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Id4IYMoii3zzrG0lB0gD6dPgJx4Iu95Xu0BQrhHIbp7ZnAZbLqdqQ73aIWH0d0UFcElxwaKjnzNovTjo7kXz7g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-overflow@1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-overflow@1.3.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-pagination@3.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-pagination@3.2.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-pagination@4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-pagination@4.3.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-picker@2.7.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-picker@2.7.6(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-H9if/BUJUZBOhPfWcPeT15JUI3/ntrG9muzERrXDkSoWmDj4yzmBvumozpxYrHwjcKnjyDGAke68d+whWwvhHA==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 date-fns: 2.30.0 dayjs: 1.11.13 moment: 2.30.1 - rc-trigger: 5.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-trigger: 5.3.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) shallowequal: 1.1.0 + dev: true - rc-picker@4.7.2(date-fns@2.30.0)(dayjs@1.11.13)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-picker@4.7.2(dayjs@1.11.13)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-KShWVIdrncIKBZ1rm6E2s4Di9jlpcm38EYIZ472skXqKUz8YKlWQgewG5dT+HUjfon+tLs7dp5kmWUe0bW7Gqw==} + engines: {node: '>=8.x'} + peerDependencies: + date-fns: '>= 2.x' + dayjs: '>= 1.x' + luxon: '>= 3.x' + moment: '>= 2.x' + react: '>=16.9.0' + react-dom: '>=16.9.0' + peerDependenciesMeta: + date-fns: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true dependencies: '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.5(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + dayjs: 1.11.13 + rc-overflow: 1.3.2(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - date-fns: 2.30.0 - dayjs: 1.11.13 - moment: 2.30.1 - rc-progress@3.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-progress@3.4.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-iAGhwWU+tsayP+Jkl9T4+6rHeQTG9kDz8JAHZk4XtQOcYN5fj9H34NXNEdRdZx94VUDHMqCb1yOIvi8eJRh67w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-progress@4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-progress@4.0.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-rate@2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-rate@2.13.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-rate@2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-rate@2.9.3(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-2THssUSnRhtqIouQIIXqsZGzRczvp4WsH4WvGuhiwm+LG2fVpDUJliP9O1zeDOZvYfBE/Bup4SgHun/eCkbjgQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-resize-observer@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-resize-observer@1.4.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) resize-observer-polyfill: 1.5.1 - rc-segmented@2.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-segmented@2.3.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-segmented@2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-segmented@2.5.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-select@14.1.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-select@14.1.18(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-4JgY3oG2Yz68ECMUSCON7mtxuJvCSj+LJpHEg/AONaaVBxIIrmI/ZTuMJkyojall/X50YdBe5oMKqHHPNiPzEg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '*' + react-dom: '*' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-trigger: 5.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-virtual-list: 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-overflow: 1.3.2(react-dom@18.3.1)(react@18.3.1) + rc-trigger: 5.3.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) + rc-virtual-list: 3.15.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-select@14.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-select@14.16.3(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-51+j6s3fJJJXB7E+B6W1hM4Tjzv1B/Decooz9ilgegDBt3ZAth1b/xMwYCTrT5BbG2e53XACQsyDib2+3Ro1fg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '*' + react-dom: '*' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.5(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-virtual-list: 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-overflow: 1.3.2(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) + rc-virtual-list: 3.15.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-slider@10.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-slider@10.0.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-igTKF3zBet7oS/3yNiIlmU8KnZ45npmrmHlUUio8PNbIhzMcsh+oE/r2UD42Y6YD2D/s+kzCQkzQrPD6RY435Q==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) shallowequal: 1.1.0 + dev: true - rc-slider@11.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-slider@11.1.7(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-ytYbZei81TX7otdC0QvoYD72XSlxvTihNth5OeZ6PMXyEDq/vHdWFulQmfDGyXK1NwKwSlKgpvINOa88uT5g2A==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-steps@5.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-steps@5.0.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-9TgRvnVYirdhbV0C3syJFj9EhCRqoJAsxt4i1rED5o8/ZcSv5TLIYyo4H8MCjLPvbe2R+oBAm/IYBEtC+OS1Rw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-steps@6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-steps@6.0.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-switch@3.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-switch@3.2.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-switch@4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-switch@4.1.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-table@7.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-table@7.26.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) shallowequal: 1.1.0 + dev: true - rc-table@7.48.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-table@7.48.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Z4mDKjWg+xz/Ezdw6ivWcbqRpaJ0QfCORRoRrlrw65KSGZLK8OcTdacH22/fyGb8L4It/0/9qcMm8VrVAk/WBw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/context': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/context': 1.4.0(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-virtual-list: 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) + rc-virtual-list: 3.15.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-tabs@12.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-tabs@12.15.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-aXFLRo7jo531Jed1LgRqrF0VmRnzM/Qki25PknM3S04gqyxpDaHNFpPba05pHhn+d1N+54qIi0IcY1odrCrF2A==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.3.2 - rc-dropdown: 4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-menu: 9.12.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dropdown: 4.1.0(react-dom@18.3.1)(react@18.3.1) + rc-menu: 9.12.4(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-tabs@12.5.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-tabs@12.5.10(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Ay0l0jtd4eXepFH9vWBvinBjqOpqzcsJTerBGwJy435P2S90Uu38q8U/mvc1sxUEVOXX5ZCFbxcWPnfG3dH+tQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-dropdown: 4.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-menu: 9.8.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dropdown: 4.0.1(react-dom@18.3.1)(react@18.3.1) + rc-menu: 9.8.4(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-tabs@15.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-tabs@15.4.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-llKuyiAVqmXm2z7OrmhX5cNb2ueZaL8ZyA2P4R+6/72NYYcbEgOXibwHiQCFY2RiN3swXl53SIABi2CumUS02g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-dropdown: 4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-menu: 9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dropdown: 4.2.0(react-dom@18.3.1)(react@18.3.1) + rc-menu: 9.16.0(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-textarea@0.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-textarea@0.4.7(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-IQPd1CDI3mnMlkFyzt2O4gQ2lxUsnBAeJEoZGJnkkXgORNqyM9qovdrCj9NzcRfpHgLdzaEbU3AmobNFGUznwQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) shallowequal: 1.1.0 + dev: true - rc-textarea@1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-textarea@1.8.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input: 1.6.3(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-tooltip@5.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-tooltip@5.2.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-jtQzU/18S6EI3lhSGoDYhPqNpWajMtS5VV/ld1LwyfrDByQpYmw/LW6U7oFXXLukjfDHQ7Ju705A82PRNFWYhg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-trigger: 5.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-trigger: 5.3.4(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-tooltip@6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-tooltip@6.2.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.5(react-dom@18.3.1)(react@18.3.1) classnames: 2.5.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-tree-select@5.24.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-tree-select@5.24.4(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-MzljkSkk7weKOcE853UtYlXB6uyUEzcEQhhpaCwE6jQPbmBUgGiRURuKWpYUnM/dXrwTTlCK969M6Pgjj35MLA==} + peerDependencies: + react: '*' + react-dom: '*' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-select: 14.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree: 5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-select: 14.16.3(react-dom@18.3.1)(react@18.3.1) + rc-tree: 5.10.1(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-tree-select@5.5.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-tree-select@5.5.5(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-k2av7jF6tW9bIO4mQhaVdV4kJ1c54oxV3/hHVU+oD251Gb5JN+m1RbJFTMf1o0rAFqkvto33rxMdpafaGKQRJw==} + peerDependencies: + react: '*' + react-dom: '*' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-select: 14.1.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree: 5.7.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-select: 14.1.18(react-dom@18.3.1)(react@18.3.1) + rc-tree: 5.7.12(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-tree@5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-tree@5.10.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-FPXb3tT/u39mgjr6JNlHaUTYfHkVGW56XaGDahDpEFLGsnPxGcVLNTjcqoQb/GNbSCycl7tD7EvIymwOTP0+Yw==} + engines: {node: '>=10.x'} + peerDependencies: + react: '*' + react-dom: '*' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-virtual-list: 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) + rc-virtual-list: 3.15.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-tree@5.7.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-tree@5.7.12(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-LXA5nY2hG5koIAlHW5sgXgLpOMz+bFRbnZZ+cCg0tQs4Wv1AmY7EDi1SK7iFXhslYockbqUerQan82jljoaItg==} + engines: {node: '>=10.x'} + peerDependencies: + react: '*' + react-dom: '*' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-virtual-list: 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) + rc-virtual-list: 3.15.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-trigger@5.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-trigger@5.3.4(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-align: 4.0.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-align: 4.0.15(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-upload@4.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-upload@4.3.6(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Bt7ESeG5tT3IY82fZcP+s0tQU2xmo1W6P3S8NboUUliquJLQYLkUcsaExi3IlBVr43GQMCjo30RA2o0i70+NjA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - rc-upload@4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-upload@4.8.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-util@5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-util@5.43.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-is: 18.3.1 - rc-virtual-list@3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /rc-virtual-list@3.15.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-dF2YQztqrU3ijAeWOqscTshCEr7vpimzSqAVjO1AyAmaqcHulaXpnGR0ptK5PXfxTUy48VkJOiglMIxlkYGs0w==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 - rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc@1.2.8: + /rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true dependencies: deep-extend: 0.6.0 ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 + dev: true - react-copy-to-clipboard@5.1.0(react@18.3.1): + /react-copy-to-clipboard@5.1.0(react@18.3.1): + resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==} + peerDependencies: + react: ^15.3.0 || 16 || 17 || 18 dependencies: copy-to-clipboard: 3.3.3 prop-types: 15.8.1 react: 18.3.1 + dev: true - react-dev-utils@12.0.1(eslint@7.32.0)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)): + /react-dev-utils@12.0.1(eslint@7.32.0)(typescript@5.6.3)(webpack@5.96.1): + resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=2.7' + webpack: '>=4' + peerDependenciesMeta: + typescript: + optional: true dependencies: '@babel/code-frame': 7.26.2 address: 1.2.2 @@ -26552,7 +21358,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@7.32.0)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@7.32.0)(typescript@5.6.3)(webpack@5.96.1) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -26567,41 +21373,65 @@ snapshots: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) - optionalDependencies: typescript: 5.6.3 + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) transitivePeerDependencies: - eslint - supports-color - vue-template-compiler + dev: true - react-dom@18.3.1(react@18.3.1): + /react-dom@18.3.1(react@18.3.1): + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 dependencies: loose-envify: 1.4.0 react: 18.3.1 scheduler: 0.23.2 - react-error-boundary@3.1.4(react@18.3.1): + /react-error-boundary@3.1.4(react@18.3.1): + resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + react: '>=16.13.1' dependencies: '@babel/runtime': 7.26.0 react: 18.3.1 + dev: true - react-error-boundary@4.1.2(react@18.3.1): + /react-error-boundary@4.1.2(react@18.3.1): + resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==} + peerDependencies: + react: '>=16.13.1' dependencies: '@babel/runtime': 7.26.0 react: 18.3.1 + dev: true - react-error-overlay@6.0.11: {} + /react-error-overlay@6.0.11: + resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} + dev: true - react-error-overlay@6.0.9: {} + /react-error-overlay@6.0.9: + resolution: {integrity: sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==} + dev: true - react-fast-compare@3.2.2: {} + /react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + dev: true - react-github-button@0.1.11: + /react-github-button@0.1.11: + resolution: {integrity: sha512-KL/kieQiR5DXd1RxWMegr4Igyz9+Lm6ZVwjpN5rQyttz/sdEq8DF1R/vzLl2f58nChJe0sKE3U3A7QRK+Zb01w==} dependencies: prop-types: 15.8.1 + dev: true - react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /react-helmet-async@1.3.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: '@babel/runtime': 7.23.6 invariant: 2.2.4 @@ -26610,16 +21440,28 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-fast-compare: 3.2.2 shallowequal: 1.1.0 + dev: true - react-helmet@6.1.0(react@18.3.1): + /react-helmet@6.1.0(react@18.3.1): + resolution: {integrity: sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==} + peerDependencies: + react: '>=16.3.0' dependencies: object-assign: 4.1.1 prop-types: 15.8.1 react: 18.3.1 react-fast-compare: 3.2.2 react-side-effect: 2.1.2(react@18.3.1) + dev: true - react-intl@6.8.7(react@18.3.1)(typescript@3.9.10): + /react-intl@6.8.7(react@18.3.1)(typescript@3.9.10): + resolution: {integrity: sha512-Ocv8Tg6fXqBdVdkkYohQ79T9rJls3G1lmDSjhqHdK9873BdQFLSeITGgwuGWTRBd6Mg5FL33TBen4FtujCTP0g==} + peerDependencies: + react: ^16.6.0 || 17 || 18 + typescript: ^4.7 || 5 + peerDependenciesMeta: + typescript: + optional: true dependencies: '@formatjs/ecma402-abstract': 2.2.3 '@formatjs/icu-messageformat-parser': 2.9.3 @@ -26627,27 +21469,42 @@ snapshots: '@formatjs/intl-displaynames': 6.8.4 '@formatjs/intl-listformat': 7.7.4 '@types/hoist-non-react-statics': 3.3.5 - '@types/react': 18.3.12 + '@types/react': 16.14.62 hoist-non-react-statics: 3.3.2 intl-messageformat: 10.7.6 react: 18.3.1 tslib: 2.6.1 - optionalDependencies: typescript: 3.9.10 + dev: true - react-is@16.13.1: {} + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true - react-is@17.0.2: {} + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: true - react-is@18.3.1: {} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-lifecycles-compat@3.0.4: {} + /react-lifecycles-compat@3.0.4: + resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + dev: true - react-loading-skeleton@3.5.0(react@18.3.1): + /react-loading-skeleton@3.5.0(react@18.3.1): + resolution: {integrity: sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ==} + peerDependencies: + react: '>=16.8.0' dependencies: react: 18.3.1 + dev: true - react-markdown@9.0.1(@types/react@16.14.62)(react@18.3.1): + /react-markdown@9.0.1(@types/react@16.14.62)(react@18.3.1): + resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' dependencies: '@types/hast': 3.0.4 '@types/react': 16.14.62 @@ -26663,60 +21520,111 @@ snapshots: vfile: 6.0.3 transitivePeerDependencies: - supports-color + dev: true - react-merge-refs@1.1.0: {} + /react-merge-refs@1.1.0: + resolution: {integrity: sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==} + dev: true - react-reconciler@0.26.2(react@18.3.1): + /react-reconciler@0.26.2(react@18.3.1): + resolution: {integrity: sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^17.0.2 dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react: 18.3.1 scheduler: 0.20.2 + dev: false - react-refresh@0.14.0: {} + /react-refresh@0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + dev: true - react-refresh@0.14.2: {} + /react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + dev: true - react-router-dom@6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /react-router-dom@6.28.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' dependencies: '@remix-run/router': 1.21.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.28.0(react@18.3.1) + dev: true - react-router-dom@6.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /react-router-dom@6.3.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' dependencies: history: 5.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.3.0(react@18.3.1) + dev: true - react-router@6.28.0(react@18.3.1): + /react-router@6.28.0(react@18.3.1): + resolution: {integrity: sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' dependencies: '@remix-run/router': 1.21.0 react: 18.3.1 + dev: true - react-router@6.3.0(react@18.3.1): + /react-router@6.3.0(react@18.3.1): + resolution: {integrity: sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==} + peerDependencies: + react: '>=16.8' dependencies: history: 5.3.0 react: 18.3.1 + dev: true - react-shallow-renderer@16.15.0(react@18.3.1): + /react-shallow-renderer@16.15.0(react@18.3.1): + resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: object-assign: 4.1.1 react: 18.3.1 react-is: 18.3.1 + dev: true - react-side-effect@2.1.2(react@18.3.1): + /react-side-effect@2.1.2(react@18.3.1): + resolution: {integrity: sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==} + peerDependencies: + react: ^16.3.0 || ^17.0.0 || ^18.0.0 dependencies: react: 18.3.1 + dev: true - react-simple-code-editor@0.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /react-simple-code-editor@0.13.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-XYeVwRZwgyKtjNIYcAEgg2FaQcCZwhbarnkJIV20U2wkCU9q/CPFBo8nRXrK4GXUz3AvbqZFsZRrpUTkqqEYyQ==} + peerDependencies: + react: '*' + react-dom: '*' dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: true - react-slick@0.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /react-slick@0.29.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-TGdOKE+ZkJHHeC4aaoH85m8RnFyWqdqRfAGkhd6dirmATXMZWAxOpTLmw2Ll/jPTQ3eEG7ercFr/sbzdeYCJXA==} + peerDependencies: + react: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: classnames: 2.5.1 enquire.js: 2.1.6 @@ -26725,32 +21633,53 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) resize-observer-polyfill: 1.5.1 + dev: true - react-split-pane@0.1.92(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /react-split-pane@0.1.92(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-GfXP1xSzLMcLJI5BM36Vh7GgZBpy+U/X0no+VM3fxayv+p1Jly5HpMofZJraeaMl73b3hvlr+N9zJKvLB/uz9w==} + peerDependencies: + react: ^16.0.0-0 + react-dom: ^16.0.0-0 dependencies: prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-lifecycles-compat: 3.0.4 react-style-proptype: 3.2.2 + dev: true - react-style-proptype@3.2.2: + /react-style-proptype@3.2.2: + resolution: {integrity: sha512-ywYLSjNkxKHiZOqNlso9PZByNEY+FTyh3C+7uuziK0xFXu9xzdyfHwg4S9iyiRRoPCR4k2LqaBBsWVmSBwCWYQ==} dependencies: prop-types: 15.8.1 + dev: true - react-test-renderer@18.3.1(react@18.3.1): + /react-test-renderer@18.3.1(react@18.3.1): + resolution: {integrity: sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==} + peerDependencies: + react: ^18.3.1 dependencies: react: 18.3.1 react-is: 18.3.1 react-shallow-renderer: 16.15.0(react@18.3.1) scheduler: 0.23.2 + dev: true - react-universal-interface@0.6.2(react@18.3.1)(tslib@2.6.1): + /react-universal-interface@0.6.2(react@18.3.1)(tslib@2.6.1): + resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} + peerDependencies: + react: '*' + tslib: '*' dependencies: react: 18.3.1 tslib: 2.6.1 + dev: true - react-use@17.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /react-use@17.5.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-LG/uPEVRflLWMwi3j/sZqR00nF6JGqTTDblkXK2nzXsIvij06hXl1V/MZIlwj1OKIQUtlh1l9jK8gLsRyCQxMg==} + peerDependencies: + react: '*' + react-dom: '*' dependencies: '@types/js-cookie': 2.2.7 '@xobotyi/scrollbar-width': 1.9.5 @@ -26758,7 +21687,7 @@ snapshots: fast-deep-equal: 3.1.3 fast-shallow-equal: 1.0.0 js-cookie: 2.2.1 - nano-css: 5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + nano-css: 5.6.2(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-universal-interface: 0.6.2(react@18.3.1)(tslib@2.6.1) @@ -26768,42 +21697,61 @@ snapshots: throttle-debounce: 3.0.1 ts-easing: 0.2.0 tslib: 2.6.1 + dev: true - react@18.3.1: + /react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 - read-package-up@11.0.0: + /read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} + engines: {node: '>=18'} dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 type-fest: 4.26.1 - read-pkg-up@4.0.0: + /read-pkg-up@4.0.0: + resolution: {integrity: sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==} + engines: {node: '>=6'} dependencies: find-up: 3.0.0 read-pkg: 3.0.0 + dev: true - read-pkg-up@7.0.1: + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 + dev: true - read-pkg@3.0.0: + /read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 path-type: 3.0.0 + dev: true - read-pkg@5.2.0: + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 + dev: true - read-pkg@9.0.1: + /read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 @@ -26811,14 +21759,18 @@ snapshots: type-fest: 4.26.1 unicorn-magic: 0.1.0 - read-yaml-file@1.1.0: + /read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} dependencies: graceful-fs: 4.2.11 js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 + dev: true - readable-stream@2.3.8: + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -26828,100 +21780,164 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 - readable-stream@3.6.2: + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - readdirp@3.6.0: + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - readdirp@4.0.2: {} + /readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + dev: true - reading-time@1.5.0: {} + /reading-time@1.5.0: + resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} + dev: true - real-require@0.1.0: {} + /real-require@0.1.0: + resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + engines: {node: '>= 12.13.0'} + dev: true - realpath-native@1.1.0: + /realpath-native@1.1.0: + resolution: {integrity: sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==} + engines: {node: '>=4'} dependencies: util.promisify: 1.1.2 + dev: true - rechoir@0.6.2: + /rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} dependencies: resolve: 1.22.8 + dev: true - rechoir@0.8.0: + /rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} dependencies: resolve: 1.22.8 - recursive-readdir@2.2.3: + /recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} dependencies: minimatch: 3.1.2 + dev: true - redent@3.0.0: + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 + dev: true - reduce@1.0.3: + /reduce@1.0.3: + resolution: {integrity: sha512-0Dtt3Bgj34/yKFzE5N9V6/HYyP3gb+E3TLs/hMr/wGgkCIzYa+7G4hNrE/P+en52OJT+pLUgmba9DQF3AB+2LQ==} + engines: {node: '>= 0.4'} dependencies: object-keys: 1.1.1 + dev: true - redux@4.2.1: + /redux@4.2.1: + resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} dependencies: '@babel/runtime': 7.26.0 + dev: true - reflect.getprototypeof@1.0.6: + /reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-errors: 1.3.0 get-intrinsic: 1.2.4 globalthis: 1.0.4 which-builtin-type: 1.1.4 + dev: true - regenerate-unicode-properties@10.1.1: + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} dependencies: regenerate: 1.4.2 + dev: true - regenerate-unicode-properties@10.2.0: + /regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} dependencies: regenerate: 1.4.2 + dev: true - regenerate@1.4.2: {} + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true - regenerator-runtime@0.10.5: {} + /regenerator-runtime@0.10.5: + resolution: {integrity: sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==} + dev: true - regenerator-runtime@0.11.1: {} + /regenerator-runtime@0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + dev: true - regenerator-runtime@0.13.11: {} + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true - regenerator-runtime@0.14.1: {} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regenerator-transform@0.15.2: + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: '@babel/runtime': 7.26.0 + dev: true - regex-not@1.0.2: + /regex-not@1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} dependencies: extend-shallow: 3.0.2 safe-regex: 1.1.0 + dev: true - regexp-tree@0.1.27: {} + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true - regexp.prototype.flags@1.5.3: + /regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - regexpp@3.2.0: {} + /regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true - regexpu-core@6.1.1: + /regexpu-core@6.1.1: + resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} + engines: {node: '>=4'} dependencies: regenerate: 1.4.2 regenerate-unicode-properties: 10.2.0 @@ -26929,31 +21945,49 @@ snapshots: regjsparser: 0.11.2 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.0 + dev: true - registry-auth-token@3.4.0: + /registry-auth-token@3.4.0: + resolution: {integrity: sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==} dependencies: rc: 1.2.8 safe-buffer: 5.2.1 + dev: true - registry-auth-token@5.0.2: + /registry-auth-token@5.0.2: + resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + engines: {node: '>=14'} dependencies: '@pnpm/npm-conf': 2.3.1 + dev: true - registry-url@3.1.0: + /registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} dependencies: rc: 1.2.8 + dev: true - registry-url@6.0.1: + /registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} dependencies: rc: 1.2.8 + dev: true - regjsgen@0.8.0: {} + /regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + dev: true - regjsparser@0.11.2: + /regjsparser@0.11.2: + resolution: {integrity: sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==} + hasBin: true dependencies: jsesc: 3.0.2 + dev: true - rehype-autolink-headings@6.1.1: + /rehype-autolink-headings@6.1.1: + resolution: {integrity: sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA==} dependencies: '@types/hast': 2.3.10 extend: 3.0.2 @@ -26962,29 +21996,40 @@ snapshots: hast-util-is-element: 2.1.3 unified: 10.1.2 unist-util-visit: 4.1.2 + dev: true - rehype-raw@7.0.0: + /rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} dependencies: '@types/hast': 3.0.4 hast-util-raw: 9.0.4 vfile: 6.0.3 + dev: true - rehype-remove-comments@5.0.0: + /rehype-remove-comments@5.0.0: + resolution: {integrity: sha512-sfiVT+u1in19sxo9vv/SDQVbHE2mADScNrpeVsUxBFl14zOMZnfPb6l4hR+lXqe10G13UFVqv5pt8zDbCR4JYQ==} dependencies: '@types/hast': 2.3.10 hast-util-is-conditional-comment: 2.0.0 unified: 10.1.2 unist-util-filter: 4.0.1 + dev: true - rehype-stringify@9.0.4: + /rehype-stringify@9.0.4: + resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==} dependencies: '@types/hast': 2.3.10 hast-util-to-html: 8.0.4 unified: 10.1.2 + dev: true - relateurl@0.2.7: {} + /relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: true - remark-directive@2.0.1: + /remark-directive@2.0.1: + resolution: {integrity: sha512-oosbsUAkU/qmUE78anLaJePnPis4ihsE7Agp0T/oqTzvTea8pOiaYEtfInU/+xMOVTS9PN5AhGOiaIVe4GD8gw==} dependencies: '@types/mdast': 3.0.15 mdast-util-directive: 2.2.4 @@ -26992,15 +22037,18 @@ snapshots: unified: 10.1.2 transitivePeerDependencies: - supports-color + dev: true - remark-frontmatter@4.0.1: + /remark-frontmatter@4.0.1: + resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} dependencies: '@types/mdast': 3.0.15 mdast-util-frontmatter: 1.0.1 micromark-extension-frontmatter: 1.1.1 unified: 10.1.2 - remark-gfm@3.0.1: + /remark-gfm@3.0.1: + resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} dependencies: '@types/mdast': 3.0.15 mdast-util-gfm: 2.0.2 @@ -27008,8 +22056,10 @@ snapshots: unified: 10.1.2 transitivePeerDependencies: - supports-color + dev: true - remark-gfm@4.0.0: + /remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} dependencies: '@types/mdast': 4.0.4 mdast-util-gfm: 3.0.0 @@ -27019,8 +22069,10 @@ snapshots: unified: 11.0.5 transitivePeerDependencies: - supports-color + dev: true - remark-parse@10.0.2: + /remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} dependencies: '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 @@ -27028,7 +22080,8 @@ snapshots: transitivePeerDependencies: - supports-color - remark-parse@11.0.0: + /remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} dependencies: '@types/mdast': 4.0.4 mdast-util-from-markdown: 2.0.2 @@ -27036,89 +22089,136 @@ snapshots: unified: 11.0.5 transitivePeerDependencies: - supports-color + dev: true - remark-parse@9.0.0: + /remark-parse@9.0.0: + resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==} dependencies: mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color + dev: true - remark-rehype@10.1.0: + /remark-rehype@10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} dependencies: '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-to-hast: 12.3.0 unified: 10.1.2 + dev: true - remark-rehype@11.1.1: + /remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 mdast-util-to-hast: 13.2.0 unified: 11.0.5 vfile: 6.0.3 + dev: true - remark-stringify@10.0.3: + /remark-stringify@10.0.3: + resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==} dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 unified: 10.1.2 + dev: false - remark-stringify@11.0.0: + /remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} dependencies: '@types/mdast': 4.0.4 mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + dev: true - remark-stringify@9.0.1: + /remark-stringify@9.0.1: + resolution: {integrity: sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==} dependencies: mdast-util-to-markdown: 0.6.5 + dev: true - remark@13.0.0: + /remark@13.0.0: + resolution: {integrity: sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==} dependencies: remark-parse: 9.0.0 remark-stringify: 9.0.1 unified: 9.2.2 transitivePeerDependencies: - supports-color + dev: true - remote-origin-url@0.4.0: + /remote-origin-url@0.4.0: + resolution: {integrity: sha512-HYhdsT2pNd0LP4Osb0vtQ1iassxIc3Yk1oze7j8dMJFciMkW8e0rdg9E/mOunqtSVHSzvMfwLDIYzPnEDmpk6Q==} + engines: {node: '>= 0.8.0'} dependencies: parse-git-config: 0.2.0 + dev: true - remote-origin-url@0.5.3: + /remote-origin-url@0.5.3: + resolution: {integrity: sha512-crQ7Xk1m/F2IiwBx5oTqk/c0hjoumrEz+a36+ZoVupskQRE/q7pAwHKsTNeiZ31sbSTELvVlVv4h1W0Xo5szKg==} + engines: {node: '>= 0.8.0'} dependencies: parse-git-config: 1.1.1 + dev: true - remove-trailing-separator@1.1.0: {} + /remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: true - rename-keys@1.2.0: {} + /rename-keys@1.2.0: + resolution: {integrity: sha512-U7XpAktpbSgHTRSNRrjKSrjYkZKuhUukfoBlXWXUExCAqhzh1TU3BDRAfJmarcl5voKS+pbKU9MvyLWKZ4UEEg==} + engines: {node: '>= 0.8.0'} + dev: true - renderkid@3.0.0: + /renderkid@3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} dependencies: css-select: 4.3.0 dom-converter: 0.2.0 htmlparser2: 6.1.0 lodash: 4.17.21 strip-ansi: 6.0.1 + dev: true - repeat-element@1.1.4: {} + /repeat-element@1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + dev: true - repeat-string@1.6.1: {} + /repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} - request-promise-core@1.1.4(request@2.88.2): + /request-promise-core@1.1.4(request@2.88.2): + resolution: {integrity: sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==} + engines: {node: '>=0.10.0'} + peerDependencies: + request: ^2.34 dependencies: lodash: 4.17.21 request: 2.88.2 + dev: true - request-promise-native@1.0.9(request@2.88.2): + /request-promise-native@1.0.9(request@2.88.2): + resolution: {integrity: sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==} + engines: {node: '>=0.12.0'} + deprecated: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142 + peerDependencies: + request: ^2.34 dependencies: request: 2.88.2 request-promise-core: 1.1.4(request@2.88.2) stealthy-require: 1.1.1 tough-cookie: 2.5.0 + dev: true - request@2.88.2: + /request@2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 dependencies: aws-sign2: 0.7.0 aws4: 1.13.2 @@ -27140,94 +22240,164 @@ snapshots: tough-cookie: 2.5.0 tunnel-agent: 0.6.0 uuid: 3.4.0 + dev: true - require-directory@2.1.1: {} + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true - require-from-string@2.0.2: {} + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: {} + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true - requires-port@1.0.0: {} + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - reserved-words@0.1.2: {} + /reserved-words@0.1.2: + resolution: {integrity: sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==} + dev: true - resize-observer-polyfill@1.5.1: {} + /resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} - resolve-cwd@3.0.0: + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 - resolve-dir@0.1.1: + /resolve-dir@0.1.1: + resolution: {integrity: sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==} + engines: {node: '>=0.10.0'} dependencies: expand-tilde: 1.2.2 global-modules: 0.2.3 + dev: true - resolve-from@4.0.0: {} + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true - resolve-from@5.0.0: {} + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: {} + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true - resolve-url@0.2.1: {} + /resolve-url@0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true - resolve@1.1.7: {} + /resolve@1.1.7: + resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} - resolve@1.22.8: + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true dependencies: is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true dependencies: is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true - responselike@1.0.2: + /responselike@1.0.2: + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} dependencies: lowercase-keys: 1.0.1 + dev: true - restore-cursor@2.0.0: + /restore-cursor@2.0.0: + resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} + engines: {node: '>=4'} dependencies: onetime: 2.0.1 signal-exit: 3.0.7 + dev: true - restore-cursor@3.1.0: + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 + dev: true - ret@0.1.15: {} + /ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: true - retry@0.10.1: {} + /retry@0.10.1: + resolution: {integrity: sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ==} + dev: true - retry@0.13.1: {} + /retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} - reusify@1.0.4: {} + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true - right-align@0.1.3: + /right-align@0.1.3: + resolution: {integrity: sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==} + engines: {node: '>=0.10.0'} dependencies: align-text: 0.1.4 + dev: false - rimraf@2.7.1: + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true dependencies: glob: 7.2.3 + dev: true - rimraf@3.0.2: + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true dependencies: glob: 7.2.3 + dev: true - rimraf@5.0.1: + /rimraf@5.0.1: + resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==} + engines: {node: '>=14'} + hasBin: true dependencies: glob: 10.4.5 + dev: true - ripemd160@2.0.2: + /ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: hash-base: 3.0.4 inherits: 2.0.4 + dev: true - roarr@2.15.4: + /roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} dependencies: boolean: 3.2.0 detect-node: 2.1.0 @@ -27235,28 +22405,46 @@ snapshots: json-stringify-safe: 5.0.1 semver-compare: 1.0.0 sprintf-js: 1.1.3 + dev: true optional: true - rollup-plugin-visualizer@5.9.0(rollup@4.25.0): + /rollup-plugin-visualizer@5.9.0: + resolution: {integrity: sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x + peerDependenciesMeta: + rollup: + optional: true dependencies: open: 8.4.2 picomatch: 2.3.1 source-map: 0.7.4 yargs: 17.7.2 - optionalDependencies: - rollup: 4.25.0 + dev: true - rollup@0.25.8: + /rollup@0.25.8: + resolution: {integrity: sha512-a2S4Bh3bgrdO4BhKr2E4nZkjTvrJ2m2bWjMTzVYtoqSCn0HnuxosXnaJUHrMEziOWr3CzL9GjilQQKcyCQpJoA==} + hasBin: true dependencies: chalk: 1.1.3 minimist: 1.2.8 source-map-support: 0.3.3 + dev: false - rollup@3.29.5: + /rollup@3.29.5: + resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true optionalDependencies: fsevents: 2.3.3 + dev: true - rollup@4.25.0: + /rollup@4.25.0: + resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true dependencies: '@types/estree': 1.0.6 optionalDependencies: @@ -27279,80 +22467,129 @@ snapshots: '@rollup/rollup-win32-ia32-msvc': 4.25.0 '@rollup/rollup-win32-x64-msvc': 4.25.0 fsevents: 2.3.3 + dev: true - rst-selector-parser@2.2.3: + /rst-selector-parser@2.2.3: + resolution: {integrity: sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==} dependencies: lodash.flattendeep: 4.4.0 nearley: 2.20.1 + dev: true - rsvp@4.8.5: {} + /rsvp@4.8.5: + resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} + engines: {node: 6.* || >= 7.*} + dev: true - rtl-css-js@1.16.1: + /rtl-css-js@1.16.1: + resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} dependencies: '@babel/runtime': 7.26.0 + dev: true - run-applescript@5.0.0: + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} dependencies: execa: 5.1.1 + dev: true - run-applescript@7.0.0: {} + /run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} - run-async@2.4.1: {} + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true - run-async@3.0.0: {} + /run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + dev: true - run-parallel@1.2.0: + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + dev: true - run-queue@1.0.3: + /run-queue@1.0.3: + resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==} dependencies: aproba: 1.2.0 + dev: true - rw@1.3.3: {} + /rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - rxjs@6.6.7: + /rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} dependencies: tslib: 2.6.1 + dev: true - rxjs@7.8.1: + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: tslib: 2.6.1 + dev: true - sade@1.8.1: + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} dependencies: mri: 1.2.0 - safe-array-concat@1.1.2: + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 - safe-buffer@5.1.2: {} + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - safe-buffer@5.2.1: {} + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.0.3: + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 - safe-regex@1.1.0: + /safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} dependencies: ret: 0.1.15 + dev: true - safe-regex@2.1.1: + /safe-regex@2.1.1: + resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} dependencies: regexp-tree: 0.1.27 + dev: true - safe-stable-stringify@2.5.0: {} + /safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + dev: true - safer-buffer@2.1.2: {} + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sane@4.1.0: + /sane@4.1.0: + resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==} + engines: {node: 6.* || 8.* || >= 10.*} + deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added + hasBin: true dependencies: '@cnakazawa/watch': 1.0.4 anymatch: 2.0.0 @@ -27365,96 +22602,153 @@ snapshots: walker: 1.0.8 transitivePeerDependencies: - supports-color + dev: true - sass@1.80.6: + /sass@1.80.7: + resolution: {integrity: sha512-MVWvN0u5meytrSjsU7AWsbhoXi1sc58zADXFllfZzbsBT1GHjjar6JwBINYPRrkx/zqnQ6uqbQuHgE95O+C+eQ==} + engines: {node: '>=14.0.0'} + hasBin: true dependencies: chokidar: 4.0.1 - immutable: 4.3.7 + immutable: 5.0.2 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.0 + dev: true - sax@1.2.4: {} + /sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: true - sax@1.4.1: {} + /sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + dev: true - saxes@5.0.1: + /saxes@5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} dependencies: xmlchars: 2.2.0 + dev: true - scheduler@0.20.2: + /scheduler@0.20.2: + resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 + dev: false - scheduler@0.23.2: + /scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} dependencies: loose-envify: 1.4.0 - schema-utils@2.7.0: + /schema-utils@2.7.0: + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} dependencies: '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true - schema-utils@2.7.1: + /schema-utils@2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} dependencies: '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true - schema-utils@3.3.0: + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@4.2.0: + /schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) - scoped-regex@3.0.0: {} + /scoped-regex@3.0.0: + resolution: {integrity: sha512-yEsN6TuxZhZ1Tl9iB81frTNS292m0I/IG7+w8lTvfcJQP2x3vnpOoevjBoE3Np5A6KnZM2+RtVenihj9t6NiYg==} + engines: {node: '>=12'} + dev: true - screenfull@5.2.0: {} + /screenfull@5.2.0: + resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} + engines: {node: '>=0.10.0'} + dev: true - scroll-into-view-if-needed@2.2.31: + /scroll-into-view-if-needed@2.2.31: + resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} dependencies: compute-scroll-into-view: 1.0.20 + dev: true - scroll-into-view-if-needed@3.1.0: + /scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} dependencies: compute-scroll-into-view: 3.1.0 - search-insights@2.17.2: {} + /search-insights@2.17.2: + resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==} + dev: true - selderee@0.11.0: + /selderee@0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} dependencies: parseley: 0.12.1 + dev: true - select-hose@2.0.0: {} + /select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - selfsigned@2.4.1: + /selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} dependencies: '@types/node-forge': 1.3.11 node-forge: 1.3.1 - semver-compare@1.0.0: + /semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + dev: true optional: true - semver-diff@2.1.0: + /semver-diff@2.1.0: + resolution: {integrity: sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==} + engines: {node: '>=0.10.0'} dependencies: semver: 5.7.2 + dev: true - semver@5.7.2: {} + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true - semver@6.3.1: {} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true - semver@7.6.3: {} + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true - send@0.19.0: + /send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} dependencies: debug: 2.6.9 depd: 2.0.0 @@ -27472,16 +22766,22 @@ snapshots: transitivePeerDependencies: - supports-color - serialize-error@7.0.1: + /serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} dependencies: type-fest: 0.13.1 + dev: true optional: true - serialize-javascript@6.0.2: + /serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} dependencies: randombytes: 2.1.0 - serve-index@1.9.1: + /serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 batch: 0.6.1 @@ -27493,7 +22793,9 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@1.16.2: + /serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 @@ -27502,9 +22804,13 @@ snapshots: transitivePeerDependencies: - supports-color - set-blocking@2.0.0: {} + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true - set-function-length@1.2.2: + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -27513,129 +22819,215 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 - set-function-name@2.0.2: + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - set-harmonic-interval@1.0.1: {} + /set-harmonic-interval@1.0.1: + resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} + engines: {node: '>=6.9'} + dev: true - set-value@2.0.1: + /set-value@2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} dependencies: extend-shallow: 2.0.1 is-extendable: 0.1.1 is-plain-object: 2.0.4 split-string: 3.1.0 + dev: true - setimmediate@1.0.5: {} + /setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true - setprototypeof@1.1.0: {} + /setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - setprototypeof@1.2.0: {} + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sha.js@2.4.11: + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + dev: true - shallow-clone@3.0.1: + /shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} dependencies: kind-of: 6.0.3 - shallowequal@1.1.0: {} + /shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - shebang-command@1.2.0: + /shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 + dev: true - shebang-command@2.0.0: + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} + /shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: true - shebang-regex@3.0.0: {} + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} - shell-quote@1.8.1: {} + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - shelljs@0.8.5: + /shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true dependencies: glob: 7.2.3 interpret: 1.4.0 rechoir: 0.6.2 + dev: true - shellwords@0.1.1: + /shellwords@0.1.1: + resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} + dev: true optional: true - shortid@2.2.16: + /shortid@2.2.16: + resolution: {integrity: sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dependencies: nanoid: 2.1.11 + dev: true - side-channel@1.0.6: + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.3 - signal-exit@3.0.7: {} + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true - signal-exit@4.1.0: {} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true - simple-swizzle@0.2.2: + /simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} dependencies: is-arrayish: 0.3.2 - sirv@2.0.4: + /sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} dependencies: '@polka/url': 1.0.0-next.28 mrmime: 2.0.0 totalist: 3.0.1 - sisteransi@1.0.5: {} + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true - sitemap@7.1.2: + /sitemap@7.1.2: + resolution: {integrity: sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==} + engines: {node: '>=12.0.0', npm: '>=5.6.0'} + hasBin: true dependencies: '@types/node': 17.0.45 '@types/sax': 1.2.7 arg: 5.0.2 sax: 1.4.1 + dev: true - size-sensor@1.0.2: {} + /size-sensor@1.0.2: + resolution: {integrity: sha512-2NCmWxY7A9pYKGXNBfteo4hy14gWu47rg5692peVMst6lQLPKrVjhY+UTEsPI5ceFRJSl3gVgMYaUi/hKuaiKw==} + dev: true - slash@2.0.0: {} + /slash@2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + dev: true - slash@3.0.0: {} + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true - slash@4.0.0: {} + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true - slice-ansi@0.0.4: {} + /slice-ansi@0.0.4: + resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==} + engines: {node: '>=0.10.0'} + dev: true - slice-ansi@4.0.0: + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 + dev: true - slick-carousel@1.8.1(jquery@3.7.1): + /slick-carousel@1.8.1(jquery@3.7.1): + resolution: {integrity: sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==} + peerDependencies: + jquery: '>=1.8.0' dependencies: jquery: 3.7.1 + dev: true - smart-buffer@1.1.15: {} + /smart-buffer@1.1.15: + resolution: {integrity: sha512-1+8bxygjTsNfvQe0/0pNBesTOlSHtOeG6b6LYbvsZCCHDKYZ40zcQo6YTnZBWrBSLWOCbrHljLdEmGMYebu7aQ==} + engines: {node: '>= 0.10.15', npm: '>= 1.3.5'} + dev: true - snapdragon-node@2.1.1: + /snapdragon-node@2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} dependencies: define-property: 1.0.0 isobject: 3.0.1 snapdragon-util: 3.0.1 + dev: true - snapdragon-util@3.0.1: + /snapdragon-util@3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 + dev: true - snapdragon@0.8.2: + /snapdragon@0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} dependencies: base: 0.11.2 debug: 2.6.9 @@ -27647,34 +23039,51 @@ snapshots: use: 3.1.1 transitivePeerDependencies: - supports-color + dev: true - sockjs@0.3.24: + /sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} dependencies: faye-websocket: 0.11.4 uuid: 8.3.2 websocket-driver: 0.7.4 - socks-proxy-agent@3.0.1: + /socks-proxy-agent@3.0.1: + resolution: {integrity: sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==} dependencies: agent-base: 4.3.0 socks: 1.1.10 + dev: true - socks@1.1.10: + /socks@1.1.10: + resolution: {integrity: sha512-ArX4vGPULWjKDKgUnW8YzfI2uXW7kzgkJuB0GnFBA/PfT3exrrOk+7Wk2oeb894Qf20u1PWv9LEgrO0Z82qAzA==} + engines: {node: '>= 0.10.0', npm: '>= 1.3.5'} + deprecated: If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0 dependencies: ip: 1.1.9 smart-buffer: 1.1.15 + dev: true - sonic-boom@2.8.0: + /sonic-boom@2.8.0: + resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} dependencies: atomic-sleep: 1.0.0 + dev: true - sort-keys@1.1.2: + /sort-keys@1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} dependencies: is-plain-obj: 1.1.0 + dev: true - sort-object-keys@1.1.3: {} + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + dev: true - sort-package-json@1.57.0: + /sort-package-json@1.57.0: + resolution: {integrity: sha512-FYsjYn2dHTRb41wqnv+uEqCUvBpK3jZcTp9rbz2qDTmel7Pmdtf+i2rLaaPMRZeSVM60V3Se31GyWFpmKs4Q5Q==} + hasBin: true dependencies: detect-indent: 6.1.0 detect-newline: 3.1.0 @@ -27682,8 +23091,11 @@ snapshots: globby: 10.0.0 is-plain-obj: 2.1.0 sort-object-keys: 1.1.3 + dev: true - sort-package-json@2.10.1: + /sort-package-json@2.10.1: + resolution: {integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==} + hasBin: true dependencies: detect-indent: 7.0.1 detect-newline: 4.0.1 @@ -27693,8 +23105,11 @@ snapshots: is-plain-obj: 4.1.0 semver: 7.6.3 sort-object-keys: 1.1.3 + dev: true - sort-package-json@2.4.1: + /sort-package-json@2.4.1: + resolution: {integrity: sha512-Nd3rgLBJcZ4iw7tpuOhwBupG6SvUDU0Fy1cZGAMorA2JmDUb+29Dg5phJK9gapa2Ak9d15w/RuMl/viwX+nKwQ==} + hasBin: true dependencies: detect-indent: 7.0.1 detect-newline: 4.0.1 @@ -27702,67 +23117,104 @@ snapshots: globby: 13.2.2 is-plain-obj: 4.1.0 sort-object-keys: 1.1.3 + dev: true - source-map-js@1.2.1: {} + /source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} - source-map-resolve@0.5.3: + /source-map-resolve@0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: atob: 2.1.2 decode-uri-component: 0.2.2 resolve-url: 0.2.1 source-map-url: 0.4.1 urix: 0.1.0 + dev: true - source-map-resolve@0.6.0: + /source-map-resolve@0.6.0: + resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: atob: 2.1.2 decode-uri-component: 0.2.2 + dev: true - source-map-support@0.3.3: + /source-map-support@0.3.3: + resolution: {integrity: sha512-9O4+y9n64RewmFoKUZ/5Tx9IHIcXM6Q+RTSw6ehnqybUz4a7iwR3Eaw80uLtqqQ5D0C+5H03D4KKGo9PdP33Gg==} dependencies: source-map: 0.1.32 + dev: false - source-map-support@0.5.21: + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - source-map-url@0.4.1: {} + /source-map-url@0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: true - source-map@0.1.32: + /source-map@0.1.32: + resolution: {integrity: sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ==} + engines: {node: '>=0.8.0'} dependencies: amdefine: 1.0.1 + dev: false - source-map@0.5.6: {} + /source-map@0.5.6: + resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} + engines: {node: '>=0.10.0'} + dev: true - source-map@0.5.7: {} + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} - source-map@0.6.1: {} + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} - source-map@0.7.4: {} + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true - space-separated-tokens@2.0.2: {} + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: true - spawndamnit@2.0.0: + /spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} dependencies: cross-spawn: 5.1.0 signal-exit: 3.0.7 + dev: true - spdx-correct@3.2.0: + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.20 - spdx-exceptions@2.5.0: {} + /spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - spdx-expression-parse@3.0.1: + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.20 - spdx-license-ids@3.0.20: {} + /spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} - spdy-transport@3.0.0: + /spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: debug: 4.3.7 detect-node: 2.1.0 @@ -27773,7 +23225,9 @@ snapshots: transitivePeerDependencies: - supports-color - spdy@4.0.2: + /spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} dependencies: debug: 4.3.7 handle-thing: 2.0.1 @@ -27783,22 +23237,41 @@ snapshots: transitivePeerDependencies: - supports-color - specificity@0.4.1: {} + /specificity@0.4.1: + resolution: {integrity: sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==} + hasBin: true + dev: true - split-on-first@1.1.0: {} + /split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + dev: true - split-string@3.1.0: + /split-string@3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} dependencies: extend-shallow: 3.0.2 + dev: true - split2@4.2.0: {} + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: true - sprintf-js@1.0.3: {} + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true - sprintf-js@1.1.3: + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true optional: true - sshpk@1.18.0: + /sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true dependencies: asn1: 0.2.6 assert-plus: 1.0.0 @@ -27809,130 +23282,205 @@ snapshots: jsbn: 0.1.1 safer-buffer: 2.1.2 tweetnacl: 0.14.5 + dev: true - ssri@4.1.6: + /ssri@4.1.6: + resolution: {integrity: sha512-WUbCdgSAMQjTFZRWvSPpauryvREEA+Krn19rx67UlJEJx/M192ZHxMmJXjZ4tkdFm+Sb0SXGlENeQVlA5wY7kA==} dependencies: safe-buffer: 5.2.1 + dev: true - ssri@5.3.0: + /ssri@5.3.0: + resolution: {integrity: sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==} dependencies: safe-buffer: 5.2.1 + dev: true - stable@0.1.8: {} + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true - stack-generator@2.0.10: + /stack-generator@2.0.10: + resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} dependencies: stackframe: 1.3.4 + dev: true - stack-utils@1.0.5: + /stack-utils@1.0.5: + resolution: {integrity: sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==} + engines: {node: '>=8'} dependencies: escape-string-regexp: 2.0.0 + dev: true - stack-utils@2.0.6: + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 + dev: true - stackframe@1.3.4: {} + /stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: true - stacktrace-gps@3.1.2: + /stacktrace-gps@3.1.2: + resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} dependencies: source-map: 0.5.6 stackframe: 1.3.4 + dev: true - stacktrace-js@2.0.2: + /stacktrace-js@2.0.2: + resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} dependencies: error-stack-parser: 2.1.4 stack-generator: 2.0.10 stacktrace-gps: 3.1.2 + dev: true - state-local@1.0.7: {} + /state-local@1.0.7: + resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} + dev: true - static-extend@0.1.2: + /static-extend@0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} dependencies: define-property: 0.2.5 object-copy: 0.1.0 + dev: true - statuses@1.5.0: {} + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} - statuses@2.0.1: {} + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} - stealthy-require@1.1.1: {} + /stealthy-require@1.1.1: + resolution: {integrity: sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==} + engines: {node: '>=0.10.0'} + dev: true - stop-iteration-iterator@1.0.0: + /stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} dependencies: internal-slot: 1.0.7 + dev: true - stream-browserify@2.0.2: + /stream-browserify@2.0.2: + resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} dependencies: inherits: 2.0.4 readable-stream: 2.3.8 + dev: true - stream-each@1.2.3: + /stream-each@1.2.3: + resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==} dependencies: end-of-stream: 1.4.4 stream-shift: 1.0.3 + dev: true - stream-http@2.8.3: + /stream-http@2.8.3: + resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==} dependencies: builtin-status-codes: 3.0.0 inherits: 2.0.4 readable-stream: 2.3.8 to-arraybuffer: 1.0.1 xtend: 4.0.2 + dev: true - stream-shift@1.0.3: {} + /stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + dev: true - strict-uri-encode@1.1.0: {} + /strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + dev: true - strict-uri-encode@2.0.0: {} + /strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + dev: true - string-convert@0.2.1: {} + /string-convert@0.2.1: + resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} - string-length@4.0.2: + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 + dev: true - string-width@1.0.2: + /string-width@1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} dependencies: code-point-at: 1.1.0 is-fullwidth-code-point: 1.0.0 strip-ansi: 3.0.1 + dev: true - string-width@2.1.1: + /string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} dependencies: is-fullwidth-code-point: 2.0.0 strip-ansi: 4.0.0 + dev: true - string-width@3.1.0: + /string-width@3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} dependencies: emoji-regex: 7.0.3 is-fullwidth-code-point: 2.0.0 strip-ansi: 5.2.0 + dev: true - string-width@4.2.3: + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + dev: true - string-width@5.1.2: + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 + dev: true - string-width@7.2.0: + /string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} dependencies: emoji-regex: 10.4.0 get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 + dev: true - string.prototype.matchall@4.0.11: + /string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-errors: 1.3.0 es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 @@ -27942,118 +23490,200 @@ snapshots: regexp.prototype.flags: 1.5.3 set-function-name: 2.0.2 side-channel: 1.0.6 + dev: true - string.prototype.padend@3.1.6: + /string.prototype.padend@3.1.6: + resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-object-atoms: 1.0.0 + dev: true - string.prototype.repeat@1.0.0: + /string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} dependencies: define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 + dev: true - string.prototype.trim@1.2.9: + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 es-object-atoms: 1.0.0 - string.prototype.trimend@1.0.8: + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - string.prototype.trimstart@1.0.8: + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - string_decoder-okam@1.3.0: + /string_decoder-okam@1.3.0: + resolution: {integrity: sha512-N5lJgLJ02sIs9xNyqPgIywlGaLUW6s5cYRpnmM3gbfhGA3sggW0+E2go26D7oZgEH7jHpXDe+ArDrBXeCaP9QA==} dependencies: safe-buffer: 5.2.1 + dev: true - string_decoder@1.1.1: + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 - string_decoder@1.3.0: + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - stringify-entities@4.0.4: + /stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + dev: true - strip-ansi@3.0.1: + /strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 - strip-ansi@4.0.0: + /strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} dependencies: ansi-regex: 3.0.1 + dev: true - strip-ansi@5.2.0: + /strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 + dev: true - strip-ansi@6.0.1: + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 + dev: true - strip-ansi@7.1.0: + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} dependencies: ansi-regex: 6.1.0 + dev: true - strip-bom@3.0.0: {} + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true - strip-bom@4.0.0: {} + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true - strip-eof@1.0.0: {} + /strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + dev: true - strip-final-newline@2.0.0: {} + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true - strip-final-newline@3.0.0: {} + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true - strip-indent@2.0.0: {} + /strip-indent@2.0.0: + resolution: {integrity: sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==} + engines: {node: '>=4'} + dev: true - strip-indent@3.0.0: + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} dependencies: min-indent: 1.0.1 + dev: true - strip-json-comments@2.0.1: {} + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: true - strip-json-comments@3.1.1: {} + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true - strip-outer@1.0.1: + /strip-outer@1.0.1: + resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} + engines: {node: '>=0.10.0'} dependencies: escape-string-regexp: 1.0.5 + dev: true - strip-url-auth@1.0.1: {} + /strip-url-auth@1.0.1: + resolution: {integrity: sha512-++41PnXftlL3pvI6lpvhSEO+89g1kIJC4MYB5E6yH+WHa5InIqz51yGd1YOGd7VNSNdoEOfzTMqbAM/2PbgaHQ==} + engines: {node: '>=0.10.0'} + dev: true - stubborn-fs@1.2.5: {} + /stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + dev: true - style-loader@3.3.4(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)): + /style-loader@3.3.4(webpack@5.96.1): + resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 dependencies: - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + dev: true - style-search@0.1.0: {} + /style-search@0.1.0: + resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} + dev: true - style-to-object@0.4.4: + /style-to-object@0.4.4: + resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} dependencies: inline-style-parser: 0.1.1 + dev: true - style-to-object@1.0.8: + /style-to-object@1.0.8: + resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} dependencies: inline-style-parser: 0.2.4 + dev: true - styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /styled-components@6.1.13(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==} + engines: {node: '>= 16'} + peerDependencies: + react: '>= 16.8.0' + react-dom: '>= 16.8.0' dependencies: '@emotion/is-prop-valid': 1.2.2 '@emotion/unitless': 0.8.1 @@ -28066,41 +23696,76 @@ snapshots: shallowequal: 1.1.0 stylis: 4.3.2 tslib: 2.6.1 + dev: false - stylelint-config-css-modules@2.3.0(stylelint@13.13.1): + /stylelint-config-css-modules@2.3.0(stylelint@13.13.1): + resolution: {integrity: sha512-nSxwaJMv9wBrTAi+O4qXubyi1AR9eB36tJpY0uaFhKgEc3fwWGUzUK1Edl8AQHAoU7wmUeKtsuYjblyRP/V7rw==} + peerDependencies: + stylelint: 11.x - 14.x dependencies: stylelint: 13.13.1 + dev: true - stylelint-config-prettier@8.0.2(stylelint@13.13.1): + /stylelint-config-prettier@8.0.2(stylelint@13.13.1): + resolution: {integrity: sha512-TN1l93iVTXpF9NJstlvP7nOu9zY2k+mN0NSFQ/VEGz15ZIP9ohdDZTtCWHs5LjctAhSAzaILULGbgiM0ItId3A==} + engines: {node: '>= 10', npm: '>= 5'} + hasBin: true + peerDependencies: + stylelint: '>=11.0.0' dependencies: stylelint: 13.13.1 + dev: true - stylelint-config-recommended@3.0.0(stylelint@13.13.1): + /stylelint-config-recommended@3.0.0(stylelint@13.13.1): + resolution: {integrity: sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==} + peerDependencies: + stylelint: '>=10.1.0' dependencies: stylelint: 13.13.1 + dev: true - stylelint-config-recommended@7.0.0(stylelint@13.13.1): + /stylelint-config-recommended@7.0.0(stylelint@14.16.1): + resolution: {integrity: sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==} + peerDependencies: + stylelint: ^14.4.0 dependencies: - stylelint: 13.13.1 + stylelint: 14.16.1 + dev: true - stylelint-config-standard@20.0.0(stylelint@13.13.1): + /stylelint-config-standard@20.0.0(stylelint@13.13.1): + resolution: {integrity: sha512-IB2iFdzOTA/zS4jSVav6z+wGtin08qfj+YyExHB3LF9lnouQht//YyB0KZq9gGz5HNPkddHOzcY8HsUey6ZUlA==} + peerDependencies: + stylelint: '>=10.1.0' dependencies: stylelint: 13.13.1 stylelint-config-recommended: 3.0.0(stylelint@13.13.1) + dev: true - stylelint-config-standard@25.0.0(stylelint@13.13.1): + /stylelint-config-standard@25.0.0(stylelint@14.16.1): + resolution: {integrity: sha512-21HnP3VSpaT1wFjFvv9VjvOGDtAviv47uTp3uFmzcN+3Lt+RYRv6oAplLaV51Kf792JSxJ6svCJh/G18E9VnCA==} + peerDependencies: + stylelint: ^14.4.0 dependencies: - stylelint: 13.13.1 - stylelint-config-recommended: 7.0.0(stylelint@13.13.1) + stylelint: 14.16.1 + stylelint-config-recommended: 7.0.0(stylelint@14.16.1) + dev: true - stylelint-declaration-block-no-ignored-properties@2.8.0(stylelint@13.13.1): + /stylelint-declaration-block-no-ignored-properties@2.8.0(stylelint@13.13.1): + resolution: {integrity: sha512-Ws8Cav7Y+SPN0JsV407LrnNXWOrqGjxShf+37GBtnU/C58Syve9c0+I/xpLcFOosST3ternykn3Lp77f3ITnFw==} + engines: {node: '>=6'} + peerDependencies: + stylelint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: stylelint: 13.13.1 + dev: true - stylelint@13.13.1: + /stylelint@13.13.1: + resolution: {integrity: sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==} + engines: {node: '>=10.13.0'} + hasBin: true dependencies: - '@stylelint/postcss-css-in-js': 0.37.3(postcss-syntax@0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39))(postcss@7.0.39) - '@stylelint/postcss-markdown': 0.36.2(postcss-syntax@0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39))(postcss@7.0.39) + '@stylelint/postcss-css-in-js': 0.37.3(postcss-syntax@0.36.2)(postcss@7.0.39) + '@stylelint/postcss-markdown': 0.36.2(postcss-syntax@0.36.2)(postcss@7.0.39) autoprefixer: 9.8.8 balanced-match: 2.0.0 chalk: 4.1.2 @@ -28151,12 +23816,66 @@ snapshots: - postcss-jsx - postcss-markdown - supports-color + dev: true + + /stylelint@14.16.1: + resolution: {integrity: sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2) + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 7.1.0 + css-functions-list: 3.2.3 + debug: 4.3.7 + fast-glob: 3.3.2 + fastest-levenshtein: 1.0.16 + file-entry-cache: 6.0.1 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 5.3.2 + import-lazy: 4.0.0 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.26.0 + mathml-tag-names: 2.1.3 + meow: 9.0.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.6 + postcss-safe-parser: 6.0.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + style-search: 0.1.0 + supports-hyperlinks: 2.3.0 + svg-tags: 1.0.0 + table: 6.8.2 + v8-compile-cache: 2.4.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: true - stylis@4.3.2: {} + /stylis@4.3.2: + resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} + dev: false - stylis@4.3.4: {} + /stylis@4.3.4: + resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} - sucrase@3.35.0: + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 @@ -28165,53 +23884,92 @@ snapshots: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 + dev: true - sugarss@2.0.0: + /sugarss@2.0.0: + resolution: {integrity: sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==} dependencies: postcss: 7.0.39 + dev: true - sumchecker@3.0.1: + /sumchecker@3.0.1: + resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} + engines: {node: '>= 8.0'} dependencies: debug: 4.3.7 transitivePeerDependencies: - supports-color + dev: true - supports-color@2.0.0: {} + /supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} - supports-color@5.5.0: + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true - supports-color@6.1.0: + /supports-color@6.1.0: + resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} + engines: {node: '>=6'} dependencies: has-flag: 3.0.0 + dev: true - supports-color@7.2.0: + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: true - supports-color@8.1.1: + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - supports-color@9.4.0: {} + /supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + dev: true - supports-hyperlinks@2.3.0: + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 supports-color: 7.2.0 + dev: true - supports-preserve-symlinks-flag@1.0.0: {} + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} - svg-parser@2.0.4: {} + /svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + dev: true - svg-path-parser@1.1.0: {} + /svg-path-parser@1.1.0: + resolution: {integrity: sha512-jGCUqcQyXpfe38R7RFfhrMyfXcBmpMNJI/B+4CE9/Unkh98UporAc461GTthv+TVDuZXsBx7/WiwJb1Oh4tt4A==} + dev: false - svg-pathdata@5.0.5: {} + /svg-pathdata@5.0.5: + resolution: {integrity: sha512-TAAvLNSE3fEhyl/Da19JWfMAdhSXTYeviXsLSoDT1UM76ADj5ndwAPX1FKQEgB/gFMPavOy6tOqfalXKUiXrow==} + engines: {node: '>=6.9.5'} + dev: true - svg-tags@1.0.0: {} + /svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + dev: true - svgo-browser@1.3.8: + /svgo-browser@1.3.8: + resolution: {integrity: sha512-yOgDNIcewFZN3+jXdWeh/rQzbWJjCq1dTHphLz2r4T4AfTm+nqCxZ5B89v9bjQbFKA/s/k7TUc7J90+pP2HTyw==} + engines: {node: '>=4.0.0'} + hasBin: true dependencies: chalk: 2.4.2 coa: 2.0.2 @@ -28225,8 +23983,12 @@ snapshots: stable: 0.1.8 unquote: 1.1.1 util.promisify: 1.0.1 + dev: true - svgo@2.8.0: + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true dependencies: '@trysound/sax': 0.2.0 commander: 7.2.0 @@ -28235,44 +23997,73 @@ snapshots: csso: 4.2.0 picocolors: 1.1.1 stable: 0.1.8 + dev: true - svgson@4.1.0: + /svgson@4.1.0: + resolution: {integrity: sha512-DodISxHtdLKUghDYA+PGK4Qq350+CbBAkdvGLkBFSmWd9WKSg4dijgjB1IiRPTmsUCd+a7KYe+ILHtklYgQyzQ==} dependencies: deep-rename-keys: 0.2.1 omit-deep: 0.3.0 xml-reader: 2.4.3 + dev: true - symbol-observable@1.2.0: {} + /symbol-observable@1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} + dev: true - symbol-observable@4.0.0: {} + /symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + dev: true - symbol-tree@3.2.4: {} + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: true - synckit@0.8.5: + /synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@pkgr/utils': 2.4.2 tslib: 2.6.1 + dev: true - synckit@0.9.2: + /synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@pkgr/core': 0.1.1 tslib: 2.6.1 + dev: true - systemjs@6.15.1: {} + /systemjs@6.15.1: + resolution: {integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==} + dev: true - table@6.8.2: + /table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} + engines: {node: '>=10.0.0'} dependencies: ajv: 8.17.1 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true - tapable@1.1.3: {} + /tapable@1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + dev: true - tapable@2.2.1: {} + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} - tape@4.17.0: + /tape@4.17.0: + resolution: {integrity: sha512-KCuXjYxCZ3ru40dmND+oCLsXyuA8hoseu2SS404Px5ouyS0A99v8X/mdiLqsR5MTAyamMBN7PRwt2Dv3+xGIxw==} + hasBin: true dependencies: '@ljharb/resumer': 0.0.1 '@ljharb/through': 2.3.13 @@ -28290,15 +24081,20 @@ snapshots: object-inspect: 1.12.3 resolve: 1.22.8 string.prototype.trim: 1.2.9 + dev: false - tar-fs@1.16.3: + /tar-fs@1.16.3: + resolution: {integrity: sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==} dependencies: chownr: 1.1.4 mkdirp: 0.5.6 pump: 1.0.3 tar-stream: 1.6.2 + dev: true - tar-stream@1.6.2: + /tar-stream@1.6.2: + resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} + engines: {node: '>= 0.8.0'} dependencies: bl: 1.2.3 buffer-alloc: 1.2.0 @@ -28307,208 +24103,352 @@ snapshots: readable-stream: 2.3.8 to-buffer: 1.1.1 xtend: 4.0.2 + dev: true - temp-dir@3.0.0: {} + /temp-dir@3.0.0: + resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} + engines: {node: '>=14.16'} + dev: false - tempfile@5.0.0: + /tempfile@5.0.0: + resolution: {integrity: sha512-bX655WZI/F7EoTDw9JvQURqAXiPHi8o8+yFxPF2lWYyz1aHnmMRuXWqL6YB6GmeO0o4DIYWHLgGNi/X64T+X4Q==} + engines: {node: '>=14.18'} dependencies: temp-dir: 3.0.0 + dev: false - term-size@1.2.0: + /term-size@1.2.0: + resolution: {integrity: sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==} + engines: {node: '>=4'} dependencies: execa: 0.7.0 + dev: true - term-size@2.2.1: {} + /term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + dev: true - terminal-link@2.1.1: + /terminal-link@2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} dependencies: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 + dev: true - terminal-link@3.0.0: + /terminal-link@3.0.0: + resolution: {integrity: sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==} + engines: {node: '>=12'} dependencies: ansi-escapes: 5.0.0 supports-hyperlinks: 2.3.0 + dev: true - terser-webpack-plugin@5.3.10(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.36.0 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)) - optionalDependencies: - '@swc/core': 1.4.2(@swc/helpers@0.5.1) - - terser-webpack-plugin@5.3.10(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)): + /terser-webpack-plugin@5.3.10(@swc/core@1.9.2)(webpack@5.96.1): + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 + '@swc/core': 1.9.2 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.36.0 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) - optionalDependencies: - '@swc/core': 1.4.2(@swc/helpers@0.5.1) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) - terser@5.36.0: + /terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} + engines: {node: '>=10'} + hasBin: true dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 - test-exclude@5.2.3: + /test-exclude@5.2.3: + resolution: {integrity: sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==} + engines: {node: '>=6'} dependencies: glob: 7.2.3 minimatch: 3.1.2 read-pkg-up: 4.0.0 require-main-filename: 2.0.0 + dev: true - test-exclude@6.0.0: + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 + dev: true - text-table@0.2.0: {} + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true - textextensions@2.6.0: {} + /textextensions@2.6.0: + resolution: {integrity: sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==} + engines: {node: '>=0.8'} + dev: true - thenify-all@1.6.0: + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 + dev: true - thenify@3.3.1: + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 + dev: true - thingies@1.21.0(tslib@2.6.1): + /thingies@1.21.0(tslib@2.6.1): + resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 dependencies: tslib: 2.6.1 - thread-stream@0.15.2: + /thread-stream@0.15.2: + resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} dependencies: real-require: 0.1.0 + dev: true - throat@4.1.0: {} + /throat@4.1.0: + resolution: {integrity: sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==} + dev: true - throat@5.0.0: {} + /throat@5.0.0: + resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} + dev: true - throttle-debounce@3.0.1: {} + /throttle-debounce@3.0.1: + resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} + engines: {node: '>=10'} + dev: true - throttle-debounce@5.0.2: {} + /throttle-debounce@5.0.2: + resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} + engines: {node: '>=12.22'} - through2@2.0.5: + /through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.8 xtend: 4.0.2 + dev: true - through@2.3.8: {} + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true - thunky@1.1.0: {} + /thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - timed-out@4.0.1: {} + /timed-out@4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} + engines: {node: '>=0.10.0'} + dev: true - timers-browserify@2.0.12: + /timers-browserify@2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} dependencies: setimmediate: 1.0.5 + dev: true - titleize@3.0.0: {} + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true - tmp@0.0.33: + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 + dev: true - tmpl@1.0.5: {} + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true - to-arraybuffer@1.0.1: {} + /to-arraybuffer@1.0.1: + resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} + dev: true - to-buffer@1.1.1: {} + /to-buffer@1.1.1: + resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + dev: true - to-factory@1.0.0: {} + /to-factory@1.0.0: + resolution: {integrity: sha512-JVYrY42wMG7ddf+wBUQR/uHGbjUHZbLisJ8N62AMm0iTZ0p8YTcZLzdtomU0+H+wa99VbkyvQGB3zxB7NDzgIQ==} + dev: true - to-fast-properties@1.0.3: {} + /to-fast-properties@1.0.3: + resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==} + engines: {node: '>=0.10.0'} + dev: true - to-object-path@0.3.0: + /to-object-path@0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 + dev: true - to-readable-stream@1.0.0: {} + /to-readable-stream@1.0.0: + resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + engines: {node: '>=6'} + dev: true - to-regex-range@2.1.1: + /to-regex-range@2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} dependencies: is-number: 3.0.0 repeat-string: 1.6.1 + dev: true - to-regex-range@5.0.1: + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - to-regex@3.0.2: + /to-regex@3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} dependencies: define-property: 2.0.2 extend-shallow: 3.0.2 regex-not: 1.0.2 safe-regex: 1.1.0 + dev: true - to-vfile@7.2.4: + /to-vfile@7.2.4: + resolution: {integrity: sha512-2eQ+rJ2qGbyw3senPI0qjuM7aut8IYXK6AEoOWb+fJx/mQYzviTckm1wDjq91QYHAPBTYzmdJXxMFA6Mk14mdw==} dependencies: is-buffer: 2.0.5 vfile: 5.3.7 + dev: false - toggle-selection@1.0.6: {} + /toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - toidentifier@1.0.1: {} + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} - totalist@3.0.1: {} + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} - tough-cookie@2.5.0: + /tough-cookie@2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} dependencies: psl: 1.10.0 punycode: 2.3.1 + dev: true - tough-cookie@4.1.4: + /tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} dependencies: psl: 1.10.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 + dev: true - tr46@1.0.1: + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: punycode: 2.3.1 + dev: true - tr46@2.1.0: + /tr46@2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} dependencies: punycode: 2.3.1 + dev: true - transformation-matrix@2.16.1: {} + /transformation-matrix@2.16.1: + resolution: {integrity: sha512-tdtC3wxVEuzU7X/ydL131Q3JU5cPMEn37oqVLITjRDSDsnSHVFzW2JiCLfZLIQEgWzZHdSy3J6bZzvKEN24jGA==} + dev: true - tree-dump@1.0.2(tslib@2.6.1): + /tree-dump@1.0.2(tslib@2.6.1): + resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' dependencies: tslib: 2.6.1 - trim-lines@3.0.1: {} + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: true - trim-newlines@3.0.1: {} + /trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + dev: true - trim-repeated@1.0.0: + /trim-repeated@1.0.0: + resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} + engines: {node: '>=0.10.0'} dependencies: escape-string-regexp: 1.0.5 + dev: true - trim-right@1.0.1: {} + /trim-right@1.0.1: + resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==} + engines: {node: '>=0.10.0'} + dev: true - trough@1.0.5: {} + /trough@1.0.5: + resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} + dev: true - trough@2.2.0: {} + /trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-easing@0.2.0: {} + /ts-easing@0.2.0: + resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} + dev: true - ts-interface-checker@0.1.13: {} + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true - ts-loader@9.5.1(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)): + /ts-loader@9.5.1(typescript@5.6.3)(webpack@5.96.1): + resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 dependencies: chalk: 4.1.2 enhanced-resolve: 5.17.1 @@ -28516,96 +24456,182 @@ snapshots: semver: 7.6.3 source-map: 0.7.4 typescript: 5.6.3 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + dev: true - ts-toolbelt@9.6.0: {} + /ts-toolbelt@9.6.0: + resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} + dev: true - tsconfig-paths-webpack-plugin@4.1.0: + /tsconfig-paths-webpack-plugin@4.1.0: + resolution: {integrity: sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==} + engines: {node: '>=10.13.0'} dependencies: chalk: 4.1.2 enhanced-resolve: 5.17.1 tsconfig-paths: 4.2.0 + dev: true - tsconfig-paths@4.2.0: + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} dependencies: json5: 2.2.3 minimist: 1.2.8 strip-bom: 3.0.0 + dev: true - tslib@2.6.1: {} + /tslib@2.6.1: + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} - tsutils@3.21.0(typescript@3.9.10): + /tsutils@3.21.0(typescript@3.9.10): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 2.6.1 typescript: 3.9.10 + dev: true + + /tsutils@3.21.0(typescript@4.9.5): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 2.6.1 + typescript: 4.9.5 + dev: true - tsutils@3.21.0(typescript@5.6.3): + /tsutils@3.21.0(typescript@5.6.3): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 2.6.1 typescript: 5.6.3 + dev: true - tsx@3.12.2: + /tsx@3.12.2: + resolution: {integrity: sha512-ykAEkoBg30RXxeOMVeZwar+JH632dZn9EUJVyJwhfag62k6UO/dIyJEV58YuLF6e5BTdV/qmbQrpkWqjq9cUnQ==} + hasBin: true dependencies: '@esbuild-kit/cjs-loader': 2.4.4 '@esbuild-kit/core-utils': 3.3.2 '@esbuild-kit/esm-loader': 2.6.5 optionalDependencies: fsevents: 2.3.3 + dev: true - tty-browserify@0.0.0: {} + /tty-browserify@0.0.0: + resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} + dev: true - tunnel-agent@0.6.0: + /tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: safe-buffer: 5.2.1 + dev: true - tunnel@0.0.6: + /tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + dev: true optional: true - tweetnacl@0.14.5: {} + /tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + dev: true - type-check@0.3.2: + /type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 + dev: true - type-check@0.4.0: + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 + dev: true - type-detect@4.0.8: {} + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true - type-fest@0.13.1: + /type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + dev: true optional: true - type-fest@0.18.1: {} + /type-fest@0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + dev: true - type-fest@0.20.2: {} + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true - type-fest@0.21.3: {} + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true - type-fest@0.6.0: {} + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true - type-fest@0.8.1: {} + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true - type-fest@1.4.0: {} + /type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: true - type-fest@2.19.0: {} + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true - type-fest@3.13.1: {} + /type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + dev: true - type-fest@4.26.1: {} + /type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + engines: {node: '>=16'} - type-is@1.6.18: + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - typed-array-buffer@1.0.2: + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-typed-array: 1.1.13 - typed-array-byte-length@1.0.1: + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 for-each: 0.3.3 @@ -28613,7 +24639,9 @@ snapshots: has-proto: 1.0.3 is-typed-array: 1.1.13 - typed-array-byte-offset@1.0.2: + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 @@ -28622,7 +24650,9 @@ snapshots: has-proto: 1.0.3 is-typed-array: 1.1.13 - typed-array-length@1.0.6: + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 for-each: 0.3.3 @@ -28631,23 +24661,40 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typedarray-to-buffer@3.1.5: + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 + dev: true - typedarray@0.0.6: {} + /typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true - typedoc-default-themes@0.10.2: + /typedoc-default-themes@0.10.2: + resolution: {integrity: sha512-zo09yRj+xwLFE3hyhJeVHWRSPuKEIAsFK5r2u47KL/HBKqpwdUSanoaz5L34IKiSATFrjG5ywmIu98hPVMfxZg==} + engines: {node: '>= 8'} dependencies: lunr: 2.3.9 + dev: true - typedoc-plugin-markdown@2.4.2(typedoc@0.17.8(typescript@3.9.10)): + /typedoc-plugin-markdown@2.4.2(typedoc@0.17.8): + resolution: {integrity: sha512-BBH+9/Uq5XbsqfzCDl8Jq4iaLXRMXRuAHZRFarAZX7df8+F3vUjDx/WHWoWqbZ/XUFzduLC2Iuy2qwsJX8SQ7A==} + engines: {node: '>= 8.0.0'} + peerDependencies: + typedoc: '>=0.17.0' dependencies: fs-extra: 9.1.0 handlebars: 4.7.8 typedoc: 0.17.8(typescript@3.9.10) + dev: true - typedoc@0.17.8(typescript@3.9.10): + /typedoc@0.17.8(typescript@3.9.10): + resolution: {integrity: sha512-/OyrHCJ8jtzu+QZ+771YaxQ9s4g5Z3XsQE3Ma7q+BL392xxBn4UMvvCdVnqKC2T/dz03/VXSLVKOP3lHmDdc/w==} + engines: {node: '>= 8.0.0'} + hasBin: true + peerDependencies: + typescript: '>=3.8.3' dependencies: fs-extra: 8.1.0 handlebars: 4.7.8 @@ -28660,41 +24707,70 @@ snapshots: shelljs: 0.8.5 typedoc-default-themes: 0.10.2 typescript: 3.9.10 + dev: true - types-ramda@0.29.10: + /types-ramda@0.29.10: + resolution: {integrity: sha512-5PJiW/eiTPyXXBYGZOYGezMl6qj7keBiZheRwfjJZY26QPHsNrjfJnz0mru6oeqqoTHOni893Jfd6zyUXfQRWg==} dependencies: ts-toolbelt: 9.6.0 + dev: true - typescript@3.9.10: {} + /typescript@3.9.10: + resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true - typescript@4.9.5: {} + /typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true - typescript@5.6.3: {} + /typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true - uglify-js@2.8.29: + /uglify-js@2.8.29: + resolution: {integrity: sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==} + engines: {node: '>=0.8.0'} + hasBin: true dependencies: source-map: 0.5.7 yargs: 3.10.0 optionalDependencies: uglify-to-browserify: 1.0.2 + dev: false - uglify-js@3.19.3: + /uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true optional: true - uglify-to-browserify@1.0.2: + /uglify-to-browserify@1.0.2: + resolution: {integrity: sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==} + requiresBuild: true + dev: false optional: true - umi@4.3.31(@babel/core@7.23.6)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.25.0)(sass@1.80.6)(stylelint@13.13.1)(sugarss@2.0.0)(terser@5.36.0)(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))): + /umi@4.3.31(@babel/core@7.26.0)(@types/node@14.18.63)(@types/react@16.14.62)(eslint@7.32.0)(jest@26.6.3)(prettier@2.8.8)(react-dom@18.3.1)(react@18.3.1)(sass@1.80.7)(stylelint@14.16.1)(typescript@3.9.10)(webpack-dev-server@5.1.0)(webpack@5.96.1): + resolution: {integrity: sha512-rrMLo3yZR2MCGoBwUwf/snf1OS43U/9Df3e3Ojru58iPuMB/U/F62hkyGVU2yew5+FsjjT0lYUq/0LKQttGZgA==} + engines: {node: '>=14'} + hasBin: true dependencies: '@babel/runtime': 7.23.6 '@umijs/bundler-utils': 4.3.31 - '@umijs/bundler-webpack': 4.3.31(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) + '@umijs/bundler-webpack': 4.3.31(typescript@3.9.10)(webpack-dev-server@5.1.0)(webpack@5.96.1) '@umijs/core': 4.3.31 - '@umijs/lint': 4.3.31(eslint@7.32.0)(jest@26.6.3)(stylelint@13.13.1)(typescript@3.9.10) - '@umijs/preset-umi': 4.3.31(@types/node@14.18.63)(@types/react@16.14.62)(lightningcss@1.22.1)(rollup@4.25.0)(sass@1.80.6)(sugarss@2.0.0)(terser@5.36.0)(type-fest@4.26.1)(typescript@3.9.10)(webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) - '@umijs/renderer-react': 4.3.31(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@umijs/lint': 4.3.31(eslint@7.32.0)(jest@26.6.3)(stylelint@14.16.1)(typescript@3.9.10) + '@umijs/preset-umi': 4.3.31(@types/node@14.18.63)(@types/react@16.14.62)(sass@1.80.7)(typescript@3.9.10)(webpack-dev-server@5.1.0)(webpack@5.96.1) + '@umijs/renderer-react': 4.3.31(react-dom@18.3.1)(react@18.3.1) '@umijs/server': 4.3.31 - '@umijs/test': 4.3.31(@babel/core@7.23.6) + '@umijs/test': 4.3.31(@babel/core@7.26.0) '@umijs/utils': 4.3.31 prettier-plugin-organize-imports: 3.2.4(prettier@2.8.8)(typescript@3.9.10) prettier-plugin-packagejson: 2.4.3(prettier@2.8.8) @@ -28730,32 +24806,58 @@ snapshots: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve + dev: true - unbox-primitive@1.0.2: + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - undici@6.20.1: {} + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + dev: true + + /undici@6.20.1: + resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==} + engines: {node: '>=18.17'} + dev: true - unfetch@5.0.0: {} + /unfetch@5.0.0: + resolution: {integrity: sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==} + dev: true - unicode-canonical-property-names-ecmascript@2.0.1: {} + /unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + dev: true - unicode-match-property-ecmascript@2.0.0: + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} dependencies: unicode-canonical-property-names-ecmascript: 2.0.1 unicode-property-aliases-ecmascript: 2.1.0 + dev: true - unicode-match-property-value-ecmascript@2.2.0: {} + /unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + dev: true - unicode-property-aliases-ecmascript@2.1.0: {} + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: true - unicorn-magic@0.1.0: {} + /unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} - unified@10.1.2: + /unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} dependencies: '@types/unist': 2.0.11 bail: 2.0.2 @@ -28765,7 +24867,8 @@ snapshots: trough: 2.2.0 vfile: 5.3.7 - unified@11.0.5: + /unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} dependencies: '@types/unist': 3.0.3 bail: 2.0.2 @@ -28774,8 +24877,10 @@ snapshots: is-plain-obj: 4.1.0 trough: 2.2.0 vfile: 6.0.3 + dev: true - unified@9.2.2: + /unified@9.2.2: + resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} dependencies: '@types/unist': 2.0.11 bail: 1.0.5 @@ -28784,121 +24889,189 @@ snapshots: is-plain-obj: 2.1.0 trough: 1.0.5 vfile: 4.2.1 + dev: true - union-value@1.0.1: + /union-value@1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} dependencies: arr-union: 3.1.0 get-value: 2.0.6 is-extendable: 0.1.1 set-value: 2.0.1 + dev: true - unique-filename@1.1.1: + /unique-filename@1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} dependencies: unique-slug: 2.0.2 + dev: true - unique-slug@2.0.2: + /unique-slug@2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} dependencies: imurmurhash: 0.1.4 + dev: true - unique-string@1.0.0: + /unique-string@1.0.0: + resolution: {integrity: sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==} + engines: {node: '>=4'} dependencies: crypto-random-string: 1.0.0 + dev: true - unist-util-filter@4.0.1: + /unist-util-filter@4.0.1: + resolution: {integrity: sha512-RynicUM/vbOSTSiUK+BnaK9XMfmQUh6gyi7L6taNgc7FIf84GukXVV3ucGzEN/PhUUkdP5hb1MmXc+3cvPUm5Q==} dependencies: '@types/unist': 2.0.11 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 + dev: true - unist-util-find-all-after@3.0.2: + /unist-util-find-all-after@3.0.2: + resolution: {integrity: sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==} dependencies: unist-util-is: 4.1.0 + dev: true - unist-util-generated@2.0.1: {} + /unist-util-generated@2.0.1: + resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + dev: true - unist-util-is@4.1.0: {} + /unist-util-is@4.1.0: + resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} + dev: true - unist-util-is@5.2.1: + /unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} dependencies: '@types/unist': 2.0.11 - unist-util-is@6.0.0: + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} dependencies: '@types/unist': 3.0.3 + dev: true - unist-util-position@4.0.4: + /unist-util-position@4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} dependencies: '@types/unist': 2.0.11 + dev: true - unist-util-position@5.0.0: + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} dependencies: '@types/unist': 3.0.3 + dev: true - unist-util-stringify-position@2.0.3: + /unist-util-stringify-position@2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} dependencies: '@types/unist': 2.0.11 + dev: true - unist-util-stringify-position@3.0.3: + /unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: '@types/unist': 2.0.11 - unist-util-stringify-position@4.0.0: + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} dependencies: '@types/unist': 3.0.3 + dev: true - unist-util-visit-parents@5.1.3: + /unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} dependencies: '@types/unist': 2.0.11 unist-util-is: 5.2.1 - unist-util-visit-parents@6.0.1: + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.0 + dev: true - unist-util-visit@4.1.2: + /unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} dependencies: '@types/unist': 2.0.11 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 - unist-util-visit@5.0.0: + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + dev: true - universalify@0.1.2: {} + /universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true - universalify@0.2.0: {} + /universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: true - universalify@2.0.1: {} + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true - unpipe@1.0.0: {} + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} - unquote@1.1.1: {} + /unquote@1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} + dev: true - unset-value@0.1.2: + /unset-value@0.1.2: + resolution: {integrity: sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==} + engines: {node: '>=0.10.0'} dependencies: has-value: 0.3.1 isobject: 3.0.1 + dev: true - unset-value@1.0.0: + /unset-value@1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} dependencies: has-value: 0.3.1 isobject: 3.0.1 + dev: true - untildify@4.0.0: {} + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true - unzip-response@2.0.1: {} + /unzip-response@2.0.1: + resolution: {integrity: sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==} + engines: {node: '>=4'} + dev: true - update-browserslist-db@1.1.1(browserslist@4.24.2): + /update-browserslist-db@1.1.1(browserslist@4.24.2): + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' dependencies: browserslist: 4.24.2 escalade: 3.2.0 picocolors: 1.1.1 - update-notifier@2.5.0: + /update-notifier@2.5.0: + resolution: {integrity: sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==} + engines: {node: '>=4'} dependencies: boxen: 1.3.0 chalk: 2.4.2 @@ -28910,8 +25083,11 @@ snapshots: latest-version: 3.1.0 semver-diff: 2.1.0 xdg-basedir: 3.0.0 + dev: true - update-notifier@7.3.1: + /update-notifier@7.3.1: + resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} + engines: {node: '>=18'} dependencies: boxen: 8.0.1 chalk: 5.3.0 @@ -28923,64 +25099,104 @@ snapshots: pupa: 3.1.0 semver: 7.6.3 xdg-basedir: 5.1.0 + dev: true - uri-js@4.4.1: + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.1 - uri-parse@1.0.0: {} + /uri-parse@1.0.0: + resolution: {integrity: sha512-1bKQJbPelvvdyR2yPrtDfvu/+6E8MI1hWWNd5UKvZOVufwtsb63HSzuCyVwooLmfFvnbSlCCq1fF58Mx+X7GZw==} + dev: true - urix@0.1.0: {} + /urix@0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true - url-okam@0.11.1: + /url-okam@0.11.1: + resolution: {integrity: sha512-AM6OVeZNwKiirK3IwKxHuopgjX1jB0F8srK9OlCXN+wdmTNg6vgnN9xyQ5abhxq8Oj/kTleLU8OCfZ1FaEW37w==} dependencies: punycode: 1.4.1 qs: 6.13.0 + dev: true - url-parse-lax@1.0.0: + /url-parse-lax@1.0.0: + resolution: {integrity: sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==} + engines: {node: '>=0.10.0'} dependencies: prepend-http: 1.0.4 + dev: true - url-parse-lax@3.0.0: + /url-parse-lax@3.0.0: + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} + engines: {node: '>=4'} dependencies: prepend-http: 2.0.0 + dev: true - url-parse@1.5.10: + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: querystringify: 2.2.0 requires-port: 1.0.0 + dev: true - url@0.11.4: + /url@0.11.4: + resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} + engines: {node: '>= 0.4'} dependencies: punycode: 1.4.1 qs: 6.13.0 + dev: true - use-isomorphic-layout-effect@1.1.2(@types/react@16.14.62)(react@18.3.1): + /use-isomorphic-layout-effect@1.1.2(@types/react@16.14.62)(react@18.3.1): + resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - react: 18.3.1 - optionalDependencies: '@types/react': 16.14.62 + react: 18.3.1 + dev: true - use-sync-external-store@1.2.0(react@18.3.1): + /use-sync-external-store@1.2.0(react@18.3.1): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: react: 18.3.1 + dev: true - use@3.1.1: {} + /use@3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: true - util-deprecate@1.0.2: {} + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - util-okam@0.11.1: + /util-okam@0.11.1: + resolution: {integrity: sha512-e2bG47F03vYx2MbA6znK6t6dwffnXGsVzh8BLpi0pcQ7dDRQf0zSAQ9IR7M+aoozALNibw8eCY53gEK8bBpSjg==} dependencies: inherits: 2.0.3 + dev: true - util.promisify@1.0.1: + /util.promisify@1.0.1: + resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} dependencies: define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.4 has-symbols: 1.0.3 object.getownpropertydescriptors: 2.1.8 + dev: true - util.promisify@1.1.2: + /util.promisify@1.1.2: + resolution: {integrity: sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA==} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -28989,98 +25205,156 @@ snapshots: has-symbols: 1.0.3 object.getownpropertydescriptors: 2.1.8 safe-array-concat: 1.1.2 + dev: true - util@0.10.3: + /util@0.10.3: + resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} dependencies: inherits: 2.0.1 + dev: true - util@0.10.4: + /util@0.10.4: + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} dependencies: inherits: 2.0.3 + dev: true - util@0.11.1: + /util@0.11.1: + resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==} dependencies: inherits: 2.0.3 + dev: true - utila@0.4.0: {} + /utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + dev: true - utils-merge@1.0.1: {} + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} - uuid@3.4.0: {} + /uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: true - uuid@8.3.2: {} + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true - uvu@0.5.6: + /uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true dependencies: dequal: 2.0.3 diff: 5.2.0 kleur: 4.1.5 sade: 1.8.1 - v8-compile-cache@2.3.0: {} + /v8-compile-cache@2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} + dev: true - v8-compile-cache@2.4.0: {} + /v8-compile-cache@2.4.0: + resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} + dev: true - v8-to-istanbul@7.1.2: + /v8-to-istanbul@7.1.2: + resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} + engines: {node: '>=10.10.0'} dependencies: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 1.9.0 source-map: 0.7.4 + dev: true - validate-npm-package-license@3.0.4: + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - validate-npm-package-name@3.0.0: + /validate-npm-package-name@3.0.0: + resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} dependencies: builtins: 1.0.3 + dev: true - validate-npm-package-name@5.0.1: {} + /validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true - valtio@1.13.2(@types/react@16.14.62)(react@18.3.1): + /valtio@1.13.2(@types/react@16.14.62)(react@18.3.1): + resolution: {integrity: sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=16.8' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true dependencies: - derive-valtio: 0.1.0(valtio@1.13.2(@types/react@16.14.62)(react@18.3.1)) - proxy-compare: 2.6.0 - use-sync-external-store: 1.2.0(react@18.3.1) - optionalDependencies: '@types/react': 16.14.62 + derive-valtio: 0.1.0(valtio@1.13.2) + proxy-compare: 2.6.0 react: 18.3.1 + use-sync-external-store: 1.2.0(react@18.3.1) + dev: true - vary@1.1.2: {} + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} - verror@1.10.0: + /verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} dependencies: assert-plus: 1.0.0 core-util-is: 1.0.2 extsprintf: 1.3.0 + dev: true - vfile-location@4.1.0: + /vfile-location@4.1.0: + resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} dependencies: '@types/unist': 2.0.11 vfile: 5.3.7 + dev: true - vfile-location@5.0.3: + /vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} dependencies: '@types/unist': 3.0.3 vfile: 6.0.3 + dev: true - vfile-message@2.0.4: + /vfile-message@2.0.4: + resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} dependencies: '@types/unist': 2.0.11 unist-util-stringify-position: 2.0.3 + dev: true - vfile-message@3.1.4: + /vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: '@types/unist': 2.0.11 unist-util-stringify-position: 3.0.3 - vfile-message@4.0.2: + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 + dev: true - vfile-reporter@7.0.5: + /vfile-reporter@7.0.5: + resolution: {integrity: sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==} dependencies: '@types/supports-color': 8.1.3 string-width: 5.1.2 @@ -29090,37 +25364,51 @@ snapshots: vfile-message: 3.1.4 vfile-sort: 3.0.1 vfile-statistics: 2.0.1 + dev: true - vfile-sort@3.0.1: + /vfile-sort@3.0.1: + resolution: {integrity: sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==} dependencies: vfile: 5.3.7 vfile-message: 3.1.4 + dev: true - vfile-statistics@2.0.1: + /vfile-statistics@2.0.1: + resolution: {integrity: sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==} dependencies: vfile: 5.3.7 vfile-message: 3.1.4 + dev: true - vfile@4.2.1: + /vfile@4.2.1: + resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} dependencies: '@types/unist': 2.0.11 is-buffer: 2.0.5 unist-util-stringify-position: 2.0.3 vfile-message: 2.0.4 + dev: true - vfile@5.3.7: + /vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} dependencies: '@types/unist': 2.0.11 is-buffer: 2.0.5 unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vfile@6.0.3: + /vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} dependencies: '@types/unist': 3.0.3 vfile-message: 4.0.2 + dev: true - video-react@0.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /video-react@0.16.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-138NHPS8bmgqCYVCdbv2GVFhXntemNHWGw9AN8iJSzr3jizXMmWJd2LTBppr4hZJUbyW1A1tPZ3CQXZUaexMVA==} + peerDependencies: + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: '@babel/runtime': 7.26.0 classnames: 2.5.1 @@ -29129,78 +25417,163 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) redux: 4.2.1 + dev: true - vite@4.5.2(@types/node@14.18.63)(less@4.1.3)(lightningcss@1.22.1)(sass@1.80.6)(sugarss@2.0.0)(terser@5.36.0): + /vite@4.5.2(@types/node@14.18.63)(less@4.1.3)(sass@1.80.7): + resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true dependencies: + '@types/node': 14.18.63 esbuild: 0.18.20 + less: 4.1.3 postcss: 8.4.49 rollup: 3.29.5 + sass: 1.80.7 optionalDependencies: - '@types/node': 14.18.63 fsevents: 2.3.3 - less: 4.1.3 - lightningcss: 1.22.1 - sass: 1.80.6 - sugarss: 2.0.0 - terser: 5.36.0 + dev: true - vite@5.4.11(@types/node@14.18.63)(less@4.2.0)(lightningcss@1.22.1)(sass@1.80.6)(sugarss@2.0.0)(terser@5.36.0): + /vite@5.4.11(@types/node@14.18.63)(less@4.2.0): + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true dependencies: + '@types/node': 14.18.63 esbuild: 0.21.5 + less: 4.2.0 postcss: 8.4.49 rollup: 4.25.0 optionalDependencies: - '@types/node': 14.18.63 fsevents: 2.3.3 - less: 4.2.0 - lightningcss: 1.22.1 - sass: 1.80.6 - sugarss: 2.0.0 - terser: 5.36.0 + dev: true - vm-browserify@1.1.2: {} + /vm-browserify@1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + dev: true - w3c-hr-time@1.0.2: + /w3c-hr-time@1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. dependencies: browser-process-hrtime: 1.0.0 + dev: true - w3c-xmlserializer@2.0.0: + /w3c-xmlserializer@2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} dependencies: xml-name-validator: 3.0.0 + dev: true - walker@1.0.8: + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 + dev: true - watchpack@2.4.2: + /watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - wbuf@1.7.3: + /wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} dependencies: minimalistic-assert: 1.0.1 - wcwidth@1.0.1: + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 + dev: true - web-namespaces@2.0.1: {} + /web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + dev: true - web-streams-polyfill@3.3.3: {} + /web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + dev: true - webidl-conversions@4.0.2: {} + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true - webidl-conversions@5.0.0: {} + /webidl-conversions@5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + dev: true - webidl-conversions@6.1.0: {} + /webidl-conversions@6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + dev: true - webpack-5-chain@8.0.1: + /webpack-5-chain@8.0.1: + resolution: {integrity: sha512-Tu1w80WA2Z+X6e7KzGy+cc0A0z+npVJA/fh55q2azMJ030gqz343Kx+yNAstDCeugsepmtDWY2J2IBRW/O+DEA==} + engines: {node: '>=10'} dependencies: deepmerge: 1.5.2 javascript-stringify: 2.1.0 + dev: true - webpack-bundle-analyzer@4.10.2: + /webpack-bundle-analyzer@4.10.2: + resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==} + engines: {node: '>= 10.13.0'} + hasBin: true dependencies: '@discoveryjs/json-ext': 0.5.7 acorn: 8.14.0 @@ -29218,12 +25591,27 @@ snapshots: - bufferutil - utf-8-validate - webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1): + /webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1): + resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} + engines: {node: '>=14.15.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + webpack: 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.96.1) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.96.1) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.1.0)(webpack@5.96.1) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.5 @@ -29232,25 +25620,19 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) - webpack-merge: 5.10.0 - optionalDependencies: + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) webpack-bundle-analyzer: 4.10.2 webpack-dev-server: 5.1.0(webpack-cli@5.1.4)(webpack@5.96.1) + webpack-merge: 5.10.0 - webpack-dev-middleware@7.4.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))): - dependencies: - colorette: 2.0.20 - memfs: 4.14.0 - mime-types: 2.1.35 - on-finished: 2.4.1 - range-parser: 1.2.1 - schema-utils: 4.2.0 - optionalDependencies: - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)) - optional: true - - webpack-dev-middleware@7.4.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)): + /webpack-dev-middleware@7.4.2(webpack@5.96.1): + resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true dependencies: colorette: 2.0.20 memfs: 4.14.0 @@ -29258,10 +25640,20 @@ snapshots: on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.2.0 - optionalDependencies: - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) - webpack-dev-server@5.1.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))): + /webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.96.1): + resolution: {integrity: sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==} + engines: {node: '>= 18.12.0'} + hasBin: true + peerDependencies: + webpack: ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -29289,66 +25681,37 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) - ws: 8.18.0 - optionalDependencies: - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - optional: true - - webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.96.1): - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.7 - '@types/sockjs': 0.3.36 - '@types/ws': 8.5.13 - ansi-html-community: 0.0.8 - bonjour-service: 1.2.1 - chokidar: 3.6.0 - colorette: 2.0.20 - compression: 1.7.5 - connect-history-api-fallback: 2.0.0 - express: 4.21.1 - graceful-fs: 4.2.11 - html-entities: 2.5.2 - http-proxy-middleware: 2.0.7(@types/express@4.17.21) - ipaddr.js: 2.2.0 - launch-editor: 2.9.1 - open: 10.1.0 - p-retry: 6.2.0 - schema-utils: 4.2.0 - selfsigned: 2.4.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) + webpack-dev-middleware: 7.4.2(webpack@5.96.1) ws: 8.18.0 - optionalDependencies: - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-merge@5.10.0: + /webpack-merge@5.10.0: + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} + engines: {node: '>=10.0.0'} dependencies: clone-deep: 4.0.1 flat: 5.0.2 wildcard: 2.0.1 - webpack-sources@3.2.3: {} + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} - webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)): + /webpack@5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4): + resolution: {integrity: sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -29370,91 +25733,84 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))) + terser-webpack-plugin: 5.3.10(@swc/core@1.9.2)(webpack@5.96.1) watchpack: 2.4.2 - webpack-sources: 3.2.3 - optionalDependencies: webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1) - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4): - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.6 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.0 - browserslist: 4.24.2 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4)) - watchpack: 2.4.2 webpack-sources: 3.2.3 - optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - websocket-driver@0.7.4: + /websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} dependencies: http-parser-js: 0.5.8 safe-buffer: 5.2.1 websocket-extensions: 0.1.4 - websocket-extensions@0.1.4: {} + /websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} - whatwg-encoding@1.0.5: + /whatwg-encoding@1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} dependencies: iconv-lite: 0.4.24 + dev: true - whatwg-encoding@3.1.1: + /whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} dependencies: iconv-lite: 0.6.3 + dev: true - whatwg-fetch@3.6.20: {} + /whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + dev: true - whatwg-mimetype@2.3.0: {} + /whatwg-mimetype@2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + dev: true - whatwg-mimetype@4.0.0: {} + /whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + dev: true - whatwg-url@6.5.0: + /whatwg-url@6.5.0: + resolution: {integrity: sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==} dependencies: lodash.sortby: 4.7.0 tr46: 1.0.1 webidl-conversions: 4.0.2 + dev: true - whatwg-url@7.1.0: + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: lodash.sortby: 4.7.0 tr46: 1.0.1 webidl-conversions: 4.0.2 + dev: true - whatwg-url@8.7.0: + /whatwg-url@8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} dependencies: lodash: 4.17.21 tr46: 2.1.0 webidl-conversions: 6.1.0 + dev: true - when-exit@2.1.3: {} + /when-exit@2.1.3: + resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==} + dev: true - which-boxed-primitive@1.0.2: + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 @@ -29462,7 +25818,9 @@ snapshots: is-string: 1.0.7 is-symbol: 1.0.4 - which-builtin-type@1.1.4: + /which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + engines: {node: '>= 0.4'} dependencies: function.prototype.name: 1.1.6 has-tostringtag: 1.0.2 @@ -29476,17 +25834,25 @@ snapshots: which-boxed-primitive: 1.0.2 which-collection: 1.0.2 which-typed-array: 1.1.15 + dev: true - which-collection@1.0.2: + /which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} dependencies: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 is-weakset: 2.0.3 + dev: true - which-module@2.0.1: {} + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: true - which-typed-array@1.1.15: + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 @@ -29494,154 +25860,284 @@ snapshots: gopd: 1.0.1 has-tostringtag: 1.0.2 - which@1.3.1: + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true dependencies: isexe: 2.0.0 + dev: true - which@2.0.2: + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 - widest-line@2.0.1: + /widest-line@2.0.1: + resolution: {integrity: sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==} + engines: {node: '>=4'} dependencies: string-width: 2.1.1 + dev: true - widest-line@5.0.0: + /widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} dependencies: string-width: 7.2.0 + dev: true - wildcard@2.0.1: {} + /wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - window-size@0.1.0: {} + /window-size@0.1.0: + resolution: {integrity: sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==} + engines: {node: '>= 0.8.0'} + dev: false - word-wrap@1.2.5: {} + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true - wordwrap@0.0.2: {} + /wordwrap@0.0.2: + resolution: {integrity: sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==} + engines: {node: '>=0.4.0'} + dev: false - wordwrap@1.0.0: {} + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerize-loader@2.0.2(webpack@5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1))): + /workerize-loader@2.0.2(webpack@5.96.1): + resolution: {integrity: sha512-HoZ6XY4sHWxA2w0WpzgBwUiR3dv1oo7bS+oCwIpb6n54MclQ/7KXdXsVIChTCygyuHtVuGBO1+i3HzTt699UJQ==} + peerDependencies: + webpack: '*' dependencies: loader-utils: 2.0.4 - webpack: 5.96.1(@swc/core@1.4.2(@swc/helpers@0.5.1))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.1.0)(webpack@5.96.1)) + webpack: 5.96.1(@swc/core@1.9.2)(webpack-cli@5.1.4) + dev: false - wrap-ansi@3.0.1: + /wrap-ansi@3.0.1: + resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==} + engines: {node: '>=4'} dependencies: string-width: 2.1.1 strip-ansi: 4.0.0 + dev: true - wrap-ansi@5.1.0: + /wrap-ansi@5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} dependencies: ansi-styles: 3.2.1 string-width: 3.1.0 strip-ansi: 5.2.0 + dev: true - wrap-ansi@6.2.0: + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true - wrap-ansi@7.0.0: + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true - wrap-ansi@8.1.0: + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 + dev: true - wrap-ansi@9.0.0: + /wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} dependencies: ansi-styles: 6.2.1 string-width: 7.2.0 strip-ansi: 7.1.0 + dev: true - wrappy@1.0.2: {} + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@2.4.1: + /write-file-atomic@2.4.1: + resolution: {integrity: sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==} dependencies: graceful-fs: 4.2.11 imurmurhash: 0.1.4 signal-exit: 3.0.7 + dev: true - write-file-atomic@2.4.3: + /write-file-atomic@2.4.3: + resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} dependencies: graceful-fs: 4.2.11 imurmurhash: 0.1.4 signal-exit: 3.0.7 + dev: true - write-file-atomic@3.0.3: + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 + dev: true - write-file-atomic@4.0.2: + /write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 + dev: true - ws@5.2.4: + /ws@5.2.4: + resolution: {integrity: sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true dependencies: async-limiter: 1.0.1 + dev: true - ws@7.5.10: {} + /ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true - ws@8.18.0: {} + /ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true - xdg-basedir@3.0.0: {} + /xdg-basedir@3.0.0: + resolution: {integrity: sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==} + engines: {node: '>=4'} + dev: true - xdg-basedir@5.1.0: {} + /xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + dev: true - xml-lexer@0.2.2: + /xml-lexer@0.2.2: + resolution: {integrity: sha512-G0i98epIwiUEiKmMcavmVdhtymW+pCAohMRgybyIME9ygfVu8QheIi+YoQh3ngiThsT0SQzJT4R0sKDEv8Ou0w==} dependencies: eventemitter3: 2.0.3 + dev: true - xml-name-validator@3.0.0: {} + /xml-name-validator@3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + dev: true - xml-reader@2.4.3: + /xml-reader@2.4.3: + resolution: {integrity: sha512-xWldrIxjeAMAu6+HSf9t50ot1uL5M+BtOidRCWHXIeewvSeIpscWCsp4Zxjk8kHHhdqFBrfK8U0EJeCcnyQ/gA==} dependencies: eventemitter3: 2.0.3 xml-lexer: 0.2.2 + dev: true - xmlchars@2.2.0: {} + /xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: true - xtend@4.0.2: {} + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true - y18n@3.2.2: {} + /y18n@3.2.2: + resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==} + dev: true - y18n@4.0.3: {} + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true - y18n@5.0.8: {} + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true - yallist@2.1.2: {} + /yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: true - yallist@3.1.1: {} + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true - yallist@4.0.0: {} + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true - yaml@1.10.2: {} + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true - yargs-parser@13.1.2: + /yargs-parser@13.1.2: + resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 + dev: true - yargs-parser@18.1.3: + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 + dev: true - yargs-parser@20.2.9: {} + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true - yargs-parser@21.1.1: {} + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true - yargs@13.3.2: + /yargs@13.3.2: + resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} dependencies: cliui: 5.0.0 find-up: 3.0.0 @@ -29653,8 +26149,11 @@ snapshots: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 13.1.2 + dev: true - yargs@15.4.1: + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -29667,8 +26166,11 @@ snapshots: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 + dev: true - yargs@17.7.2: + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} dependencies: cliui: 8.0.1 escalade: 3.2.0 @@ -29677,38 +26179,65 @@ snapshots: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 + dev: true - yargs@3.10.0: + /yargs@3.10.0: + resolution: {integrity: sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==} dependencies: camelcase: 1.2.1 cliui: 2.1.0 decamelize: 1.2.0 window-size: 0.1.0 + dev: false - yauzl@2.10.0: + /yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 + dev: true - yocto-queue@0.1.0: {} + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true - yoctocolors-cjs@2.1.2: {} + /yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + dev: true - yorkie@2.0.0: + /yorkie@2.0.0: + resolution: {integrity: sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==} + engines: {node: '>=4'} + requiresBuild: true dependencies: execa: 0.8.0 is-ci: 1.2.1 normalize-path: 1.0.0 strip-indent: 2.0.0 + dev: true - zepto@1.2.0: {} + /zepto@1.2.0: + resolution: {integrity: sha512-C1x6lfvBICFTQIMgbt3JqMOno3VOtkWat/xEakLTOurskYIHPmzJrzd1e8BnmtdDVJlGuk5D+FxyCA8MPmkIyA==} + dev: true - zod-validation-error@2.1.0(zod@3.23.8): + /zod-validation-error@2.1.0(zod@3.23.8): + resolution: {integrity: sha512-VJh93e2wb4c3tWtGgTa0OF/dTt/zoPCPzXq4V11ZjxmEAFaPi/Zss1xIZdEB5RD8GD00U0/iVXgqkF77RV7pdQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.18.0 dependencies: zod: 3.23.8 + dev: true - zod@3.23.8: {} + /zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + dev: true - zwitch@1.0.5: {} + /zwitch@1.0.5: + resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} + dev: true - zwitch@2.0.4: {} + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} diff --git a/site/docs/options/graphs/demos/fishbone/decision.tsx b/site/docs/options/graphs/demos/fishbone/decision.tsx new file mode 100644 index 000000000..d4b34c053 --- /dev/null +++ b/site/docs/options/graphs/demos/fishbone/decision.tsx @@ -0,0 +1,58 @@ +import React, { useEffect, useState } from 'react'; +import { G6, Fishbone, type FishboneOptions } from '@ant-design/graphs'; + +const { treeToGraphData } = G6; + +const data = { + id: 'Overcome procrastination', + children: [ + { + id: 'Perfectionism', + children: [ + { id: 'Correctly assess the difficulty of things' }, + { id: 'Complete first, then improve' }, + { id: 'Just do it' }, + ], + }, + { + id: 'Improve concentration', + children: [ + { id: 'Pomodoro Technique' }, + { id: 'Limited time, limited quantity, only do one thing at a time' }, + { id: 'Improve anti-interference ability, reduce interruptions' }, + ], + }, + { + id: 'Set a clear task management process', + children: [ + { id: 'Set priorities for completed tasks' }, + { id: 'Break down specific executable goals' }, + { id: 'Collect-sort-sort-execute feedback-summary' }, + ], + }, + { + id: 'Establish positive feedback', + children: [{ id: 'Do what you like' }, { id: 'Spiritual motivation' }, { id: 'Material motivation' }], + }, + { + id: 'Relax and enjoy', + children: [ + { id: 'Focus on process rather than results' }, + { id: 'Driven by needs rather than anxiety' }, + { id: 'Accept and understand' }, + ], + }, + ], +}; + + +export default () => { + const options: FishboneOptions = { + containerStyle: { height: '320px' }, + autoFit: 'view', + type: 'decision', + data: treeToGraphData(data), + }; + + return ; +}; diff --git a/site/docs/options/graphs/demos/fishbone/default.tsx b/site/docs/options/graphs/demos/fishbone/default.tsx new file mode 100644 index 000000000..53683a58f --- /dev/null +++ b/site/docs/options/graphs/demos/fishbone/default.tsx @@ -0,0 +1,64 @@ +import React from 'react'; +import { G6, Fishbone, type FishboneOptions } from '@ant-design/graphs'; + +const { treeToGraphData } = G6; + +const data = { + id: 'Product Profitability Below Expectations', + children: [ + { + id: 'Problem Description', + children: [ + { id: 'Brand Sales Volume' }, + { id: 'Market Capacity' }, + { id: 'Brand Market Share' }, + { id: 'Total Contribution Margin' }, + ], + }, + { + id: 'Brand Positioning', + children: [{ id: 'Packaging' }, { id: 'Brand Name' }, { id: 'Selling Price' }, { id: 'Product Specifications' }], + }, + { + id: 'Distribution Channels', + children: [{ id: 'Region' }, { id: 'Channel' }, { id: 'Customer Type' }, { id: 'Sales Personnel Coverage' }], + }, + { + id: 'Market Awareness', + children: [ + { id: 'Regional Weighting' }, + { id: 'Media Mix' }, + { id: 'Advertising Investment' }, + { id: 'Quality Perception' }, + ], + }, + { + id: 'Trial Purchase', + children: [ + { id: 'In-store Display' }, + { id: 'Promotion Type' }, + { id: 'Timing of Promotion' }, + { id: 'Supply Assurance' }, + ], + }, + { + id: 'Repeat Purchase', + children: [ + { id: 'Consumer Profile' }, + { id: 'Usage Occasion' }, + { id: 'Frequency of Use' }, + { id: 'Returns Due to Product Issues' }, + ], + }, + ], +}; + +export default () => { + const options: FishboneOptions = { + containerStyle: { height: '320px' }, + autoFit: 'view', + data: treeToGraphData(data), + }; + + return ; +}; diff --git a/site/docs/options/graphs/demos/fishbone/layout.tsx b/site/docs/options/graphs/demos/fishbone/layout.tsx new file mode 100644 index 000000000..f9702e20b --- /dev/null +++ b/site/docs/options/graphs/demos/fishbone/layout.tsx @@ -0,0 +1,70 @@ +import React from 'react'; +import { G6, Fishbone, type FishboneOptions } from '@ant-design/graphs'; + +const { treeToGraphData } = G6; + +const data = { + id: 'Product Profitability Below Expectations', + children: [ + { + id: 'Problem Description', + children: [ + { id: 'Brand Sales Volume' }, + { id: 'Market Capacity' }, + { id: 'Brand Market Share' }, + { id: 'Total Contribution Margin' }, + ], + }, + { + id: 'Brand Positioning', + children: [{ id: 'Packaging' }, { id: 'Brand Name' }, { id: 'Selling Price' }, { id: 'Product Specifications' }], + }, + { + id: 'Distribution Channels', + children: [{ id: 'Region' }, { id: 'Channel' }, { id: 'Customer Type' }, { id: 'Sales Personnel Coverage' }], + }, + { + id: 'Market Awareness', + children: [ + { id: 'Regional Weighting' }, + { id: 'Media Mix' }, + { id: 'Advertising Investment' }, + { id: 'Quality Perception' }, + ], + }, + { + id: 'Trial Purchase', + children: [ + { id: 'In-store Display' }, + { id: 'Promotion Type' }, + { id: 'Timing of Promotion' }, + { id: 'Supply Assurance' }, + ], + }, + { + id: 'Repeat Purchase', + children: [ + { id: 'Consumer Profile' }, + { id: 'Usage Occasion' }, + { id: 'Frequency of Use' }, + { id: 'Returns Due to Product Issues' }, + ], + }, + ], +}; + + +export default () => { + const options: FishboneOptions = { + containerStyle: { height: '320px' }, + autoFit: 'view', + data: treeToGraphData(data), + layout: { + hGap: 40, + vGap: 60, + getRibSep: (node) => node.depth === 0 ? 0 : -40 + } + }; + + return ; +}; diff --git a/site/docs/options/graphs/fishbone.en.md b/site/docs/options/graphs/fishbone.en.md new file mode 100644 index 000000000..de7e89d46 --- /dev/null +++ b/site/docs/options/graphs/fishbone.en.md @@ -0,0 +1,39 @@ +--- +category: Components +type: Graph +usage: relation +title: Fishbone +cover: https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*olIATZ-4qMEAAAAAAAAAAAAADmJ7AQ/original +--- + +The Fishbone diagram, also known as the Ishikawa diagram, is a systematic graphical tool for analyzing the root causes of problems. By breaking a problem down into various factors, it assists in identifying and resolving issues. + +```js +import { Fishbone } from '@ant-design/graphs'; +``` + +## When to Use + +The Fishbone analysis method, also referred to as cause-and-effect analysis, was developed by the Japanese management expert Kaoru Ishikawa. This method is designed to look beyond symptoms to uncover the underlying causes of a problem, helping to quickly identify the root causes that lead to the issue. + +The basic principle of the Fishbone method is to identify the main causes of a problem (represented as the fish’s head) and list them as primary branches (the fish’s spine). These main causes are then further subdivided into smaller causes (represented by the fish's branches). The analysis continues in this manner until the underlying causes are fully explored, leading to potential solutions or actionable steps. + +## Examples + +Cause-type Fishbone Diagram + +Decision-type Fishbone Diagram + +Adjust Layout Parameters + +## API + +Common props ref: [Common Graph Properties](./overview#common-graph-properties) + +| Property | Description | Type | Default Value | +| --- | --- | --- | --- | +| type | The type of the fishbone diagram | `'cause'` \| `'decision'` | `'cause'` | +| layout | Configuration for the layout of the fishbone diagram | [`FishboneLayoutOptions`](https://g6.antv.antgroup.com/api/layouts/fishbone) | `{ type: 'fishbone' }` | +| behaviors | Set user interaction events, also supports G6 built-in behaviors. For more details on behaviors, refer to [here](https://g6.antv.antgroup.com/en/manual/core-concept/behavior) | [`BehaviorOptions[]`](https://g6.antv.antgroup.com/en/api/behaviors/brush-select) \| `((existingBehaviors: BehaviorOptions[]) => BehaviorOptions[])` | - | +| plugins | Set canvas plugins for handling rendering logic and additional component rendering. Also supports G6 built-in plugins. For more details on plugins, refer to [here](https://g6.antv.antgroup.com/en/manual/core-concept/plugin) | [`PluginOptions[]`](https://g6.antv.antgroup.com/en/api/plugins/background) \| `((existingPlugins: PluginOptions[]) => PluginOptions[])` | - | +| transforms | Set data transformers to process user input data and convert it into internal flow data. Also supports G6 built-in data transformers. For more details on data transformation, refer to [here](https://g6.antv.antgroup.com/en/api/transforms/map-node-size) | [`TransformOptions[]`](https://g6.antv.antgroup.com/en/api/transforms/map-node-size) \| `((existingTransforms: TransformOptions[]) => TransformOptions[])` | - | diff --git a/site/docs/options/graphs/fishbone.zh.md b/site/docs/options/graphs/fishbone.zh.md new file mode 100644 index 000000000..ca66db575 --- /dev/null +++ b/site/docs/options/graphs/fishbone.zh.md @@ -0,0 +1,39 @@ +--- +category: Components +type: Graph +usage: relation +title: Fishbone 鱼骨图 +cover: https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*olIATZ-4qMEAAAAAAAAAAAAADmJ7AQ/original +--- + +鱼骨图,又名石川图,用于系统地分析问题根本原因的图表工具,通过将问题分解为多个因素,帮助识别和解决问题。 + +```js +import { Fishbone } from '@ant-design/graphs'; +``` + +## 何时使用 + +鱼骨分析法又名因果分析法,由日本管理大师石川馨先生发展而来,是一种透过现象看本质的分析方法,可以帮助我们快速找出引发问题的根本原因。 + +鱼骨分析法的基本原理是针对一个问题(作为鱼头),列明产生问题的大要因(鱼骨主干),从大要因继续深入细分,挖掘小要因(鱼骨分支),如此一层层挖掘分析下去,直至找出可以解决问题的方法或者行动的步骤。 + +## 代码演示 + +原因型鱼骨图 + +决策型鱼骨图 + +调整布局参数 + +## API + +通用配置参考:[图通用属性](./overview#图通用属性) + +| 属性 | 说明 | 类型 | 默认值 | +| --- | --- | --- | --- | +| type | 鱼骨图类型 | `'cause'` \| `'decision'` | `'cause'` | +| layout | 鱼骨布局配置 | [`FishboneLayoutOptions`](https://g6.antv.antgroup.com/api/layouts/fishbone) | `{ type: 'fishbone' }` | +| behaviors | 设置用户交互事件,同样支持 G6 内置交互。关于交互的详细介绍,请查阅[此处](https://g6.antv.antgroup.com/manual/core-concept/behavior) | [`BehaviorOptions[]`](https://g6.antv.antgroup.com/api/behaviors/brush-select) \| `((existingBehaviors: BehaviorOptions[]) => BehaviorOptions[])` | - | +| plugins | 设置画布插件,处理画布的渲染逻辑、额外组件渲染等,同样支持 G6 内置插件。关于插件的详细介绍,请查阅[此处](https://g6.antv.antgroup.com/manual/core-concept/plugin) | [`PluginOptions[]`](https://g6.antv.antgroup.com/api/plugins/background) \| `((existingPlugins: PluginOptions[]) => PluginOptions[])` | - | +| transforms | 设置数据转换器,处理用户输入数据并转换为适合后续处理的内部流转数据,同样支持 G6 内置数据转换器。关于数据转换的详细介绍,请查阅[此处](https://g6.antv.antgroup.com/api/transforms/map-node-size) | [`TransformOptions[]`](https://g6.antv.antgroup.com/api/transforms/map-node-size) \| `((existingTransforms: TransformOptions[]) => TransformOptions[])` | - | diff --git a/site/package.json b/site/package.json index 16a3c6211..5948db62e 100644 --- a/site/package.json +++ b/site/package.json @@ -29,29 +29,29 @@ }, "devDependencies": { "@antv/dumi-theme-antv": "^0.5.3", - "@types/lodash": "^4.17.7", - "@types/react": "^16.14.8", - "@types/react-dom": "^16.9.13", + "@types/lodash": "^4.17.13", + "@types/react": "^16.14.62", + "@types/react-dom": "^16.9.24", "@types/styled-components": "^5.1.34", "cross-env": "^7.0.3", "d3-interpolate": "^3.0.1", "d3-regression": "^1.3.10", - "dumi": "^2.1.14", + "dumi": "^2.4.13", "fecha": "^4.2.3", - "gh-pages": "^2.1.1", - "typedoc": "^0.17.6", - "typedoc-plugin-markdown": "^2.2.11", - "typescript": "^3.6.5" + "gh-pages": "^2.2.0", + "typedoc": "^0.17.8", + "typedoc-plugin-markdown": "^2.4.2", + "typescript": "^3.9.10" }, "dependencies": { "@ant-design/graphs": "workspace:*", "@ant-design/plots": "workspace:*", - "antd": "^5.20.5", + "antd": "^5.22.0", "insert-css": "^2.0.0", + "lodash": "^4.17.21", "rc-util": "^5.43.0", "react": "^18.3.1", "react-dom": "^18.3.1", - "lodash": "^4.17.21", "styled-components": "^6.1.13" } } From d8abaac963e8ca6a939c8856362091c087c604de Mon Sep 17 00:00:00 2001 From: Yuxin <55794321+yvonneyx@users.noreply.github.com> Date: Fri, 15 Nov 2024 14:31:08 +0800 Subject: [PATCH 254/268] chore: update graphs version (#2775) --- packages/graphs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphs/package.json b/packages/graphs/package.json index e13c63775..b6e29812d 100644 --- a/packages/graphs/package.json +++ b/packages/graphs/package.json @@ -1,6 +1,6 @@ { "name": "@ant-design/graphs", - "version": "2.0.0", + "version": "2.0.1", "description": "A React graph library based on Graphin", "keywords": [ "antv", From ff38dca052a1e7ec993925a1e350d390512b2204 Mon Sep 17 00:00:00 2001 From: Yuxin <55794321+yvonneyx@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:46:51 +0800 Subject: [PATCH 255/268] refactor: adjust default values for graph options (#2797) --- .../flow-direction-graph/options.tsx | 4 +-- .../src/components/flow-graph/options.tsx | 1 - .../src/components/indented-tree/options.tsx | 25 +++++++--------- .../src/components/mind-map/options.tsx | 29 ++++++++++--------- .../components/organization-chart/options.tsx | 7 ++--- .../demos/flow-graph-task-scheduling.tsx | 2 +- packages/graphs/tests/demos/flow-graph.tsx | 2 +- packages/graphs/tests/demos/index.tsx | 3 +- .../graphs/tests/demos/organization-chart.tsx | 10 +------ .../tests/demos/organization-chart2.tsx | 1 - .../demos/user-flow-direction-default.tsx | 13 +++++++++ .../tests/demos/user-flow-direction-graph.tsx | 1 - packages/graphs/tests/index.html | 1 + packages/graphs/tests/main.tsx | 2 +- 14 files changed, 49 insertions(+), 52 deletions(-) create mode 100644 packages/graphs/tests/demos/user-flow-direction-default.tsx diff --git a/packages/graphs/src/components/flow-direction-graph/options.tsx b/packages/graphs/src/components/flow-direction-graph/options.tsx index 1ae4ea519..c55faf472 100644 --- a/packages/graphs/src/components/flow-direction-graph/options.tsx +++ b/packages/graphs/src/components/flow-direction-graph/options.tsx @@ -5,7 +5,6 @@ import type { GraphOptions } from '../../types'; const { TextNode } = RCNode; export const DEFAULT_OPTIONS: GraphOptions = { - padding: [20, 0, 0, 50], node: { type: 'react', style: { @@ -34,8 +33,9 @@ export const DEFAULT_OPTIONS: GraphOptions = { }, }, layout: { - type: 'antv-dagre', + type: 'dagre', rankdir: 'LR', + animation: false, }, transforms: ['translate-react-node-origin'], }; diff --git a/packages/graphs/src/components/flow-graph/options.tsx b/packages/graphs/src/components/flow-graph/options.tsx index 904c6837e..8938ab44b 100644 --- a/packages/graphs/src/components/flow-graph/options.tsx +++ b/packages/graphs/src/components/flow-graph/options.tsx @@ -5,7 +5,6 @@ import type { FlowGraphOptions } from './types'; const { TextNode } = RCNode; export const DEFAULT_OPTIONS: FlowGraphOptions = { - padding: [20, 0, 0, 50], node: { type: 'react', style: { diff --git a/packages/graphs/src/components/indented-tree/options.tsx b/packages/graphs/src/components/indented-tree/options.tsx index 6bc4fc423..4afa62857 100644 --- a/packages/graphs/src/components/indented-tree/options.tsx +++ b/packages/graphs/src/components/indented-tree/options.tsx @@ -106,8 +106,7 @@ export const getIndentedTreeOptions = ({ }; return ; }, - size: (data: NodeData) => - getBoxedTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size, + size: (data: NodeData) => getBoxedTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size, }, }, edge: { @@ -129,8 +128,7 @@ export const getIndentedTreeOptions = ({ type: 'indented', indent: (node) => getIndent(node, 20), getWidth: (data) => getBoxedTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size[0], - getHeight: (data) => - getBoxedTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size[1], + getHeight: (data) => getBoxedTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size[1], getVGap: () => 14, }, }; @@ -152,21 +150,20 @@ export const getIndentedTreeOptions = ({ depth === 0 ? { type: 'filled', color: '#f1f4f5', style: { color: '#252525' } } : { - type: 'underlined', - style: { textAlign: getNodeTextAlign(this as unknown as Graph, data) }, - }, + type: 'underlined', + style: { textAlign: getNodeTextAlign(this as unknown as Graph, data) }, + }, ); return ; }, - size: (data: NodeData) => - getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size, + size: (data: NodeData) => getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size, ports: function (data: NodeData) { const side = getNodeSide(this as unknown as Graph, data); return side === 'left' ? [{ placement: 'bottom' }, { placement: 'bottom-right' }] : side === 'center' - ? [{ placement: 'bottom' }] - : [{ placement: 'bottom' }, { placement: 'bottom-left' }]; + ? [{ placement: 'bottom' }] + : [{ placement: 'bottom' }, { placement: 'bottom-left' }]; }, }, }, @@ -181,10 +178,8 @@ export const getIndentedTreeOptions = ({ layout: { type: 'indented', indent: (node) => getIndent(node, 20), - getWidth: (data) => - getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size[0], - getHeight: (data) => - getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size[1], + getWidth: (data) => getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size[0], + getHeight: (data) => getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size[1], getVGap: () => 12, }, transforms: (prev) => [ diff --git a/packages/graphs/src/components/mind-map/options.tsx b/packages/graphs/src/components/mind-map/options.tsx index 6959e11fb..d8664e755 100644 --- a/packages/graphs/src/components/mind-map/options.tsx +++ b/packages/graphs/src/components/mind-map/options.tsx @@ -103,13 +103,12 @@ export function getMindMapOptions({ depth === 0 ? { type: 'filled', color: '#f1f4f5', style: { color: '#252525' } } : depth === 1 - ? { type: 'filled' } - : { type: 'outlined' }, + ? { type: 'filled' } + : { type: 'outlined' }, ); return ; }, - size: (data: NodeData) => - getBoxedTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size, + size: (data: NodeData) => getBoxedTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size, dx: function (data: NodeData) { const side = getNodeSide(this as unknown as Graph, data); const size = getBoxedTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size; @@ -134,8 +133,7 @@ export function getMindMapOptions({ ], layout: { type: 'mindmap', - getHeight: (data) => - getBoxedTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size[1], + getHeight: (data) => getBoxedTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size[1], getVGap: () => 14, }, }; @@ -157,19 +155,22 @@ export function getMindMapOptions({ depth === 0 ? { type: 'filled', color: '#f1f4f5', style: { color: '#252525' } } : { - type: 'underlined', - style: side === 'left' ? { textAlign: 'right' } : side === 'center' ? { textAlign: 'center' } : {}, - }, + type: 'underlined', + style: side === 'left' ? { textAlign: 'right' } : side === 'center' ? { textAlign: 'center' } : {}, + }, ); return ; }, - size: (data: NodeData) => - getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size, + size: (data: NodeData) => getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size, dx: function (data: NodeData) { const side = getNodeSide(this as unknown as Graph, data); const size = getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size; return side === 'left' ? -size[0] : side === 'center' ? -size[0] / 2 : 0; }, + dy: function (data: NodeData) { + const size = getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size; + return size[1] / 2; + }, ports: function (data: NodeData) { const side = getNodeSide(this as unknown as Graph, data); return side === 'center' @@ -187,8 +188,7 @@ export function getMindMapOptions({ }, layout: { type: 'mindmap', - getHeight: (data) => - getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size[1], + getHeight: (data) => getLinearTextNodeStyle(idOf(data), minWidth, maxWidth, data.depth as number).size[1], getVGap: () => 12, }, transforms: (prev) => [ @@ -211,7 +211,8 @@ export function getMindMapOptions({ if (direction) { options.layout ||= {} as SingleLayoutOptions; - (options.layout as SingleLayoutOptions).direction = direction === 'alternate' ? 'H' : direction === 'left' ? 'RL' : 'LR'; + (options.layout as SingleLayoutOptions).direction = + direction === 'alternate' ? 'H' : direction === 'left' ? 'RL' : 'LR'; } return options; diff --git a/packages/graphs/src/components/organization-chart/options.tsx b/packages/graphs/src/components/organization-chart/options.tsx index 34349e626..588404698 100644 --- a/packages/graphs/src/components/organization-chart/options.tsx +++ b/packages/graphs/src/components/organization-chart/options.tsx @@ -5,7 +5,6 @@ import { OrganizationChartOptions } from './types'; const { TextNode } = RCNode; export const DEFAULT_OPTIONS: OrganizationChartOptions = { - padding: [20, 0, 0, 50], node: { type: 'react', style: { @@ -27,14 +26,12 @@ export const DEFAULT_OPTIONS: OrganizationChartOptions = { type: 'polyline', style: { lineWidth: 2, - router: { - type: 'orth', - }, + router: { type: 'orth' }, }, animation: false, }, layout: { - type: 'antv-dagre', + type: 'dagre', }, transforms: ['translate-react-node-origin'], }; diff --git a/packages/graphs/tests/demos/flow-graph-task-scheduling.tsx b/packages/graphs/tests/demos/flow-graph-task-scheduling.tsx index b83f3f9ef..ba863eeed 100644 --- a/packages/graphs/tests/demos/flow-graph-task-scheduling.tsx +++ b/packages/graphs/tests/demos/flow-graph-task-scheduling.tsx @@ -116,7 +116,7 @@ const TaskNode: React.FC<{ export const FlowGraphTaskScheduling = () => { const options: FlowGraphOptions = { - autoFit: 'center', + autoFit: 'view', data, node: { style: { diff --git a/packages/graphs/tests/demos/flow-graph.tsx b/packages/graphs/tests/demos/flow-graph.tsx index 0f9513d12..3c53d7275 100644 --- a/packages/graphs/tests/demos/flow-graph.tsx +++ b/packages/graphs/tests/demos/flow-graph.tsx @@ -7,7 +7,7 @@ const { TextNode } = RCNode; export const FlowGraph = () => { const options: FlowGraphOptions = { - autoFit: 'center', + autoFit: 'view', data, node: { style: { diff --git a/packages/graphs/tests/demos/index.tsx b/packages/graphs/tests/demos/index.tsx index ea1dae603..87285d1e0 100644 --- a/packages/graphs/tests/demos/index.tsx +++ b/packages/graphs/tests/demos/index.tsx @@ -1,4 +1,5 @@ export { Dendrogram } from './dendrogram'; +export { FishboneDefault } from './fishbone-default'; export { FlowGraph } from './flow-graph'; export { FlowGraphProductLaunch } from './flow-graph-product-launch'; export { FlowGraphTaskScheduling } from './flow-graph-task-scheduling'; @@ -12,5 +13,5 @@ export { MindMapLinear } from './mind-map-linear'; export { NetworkGraph } from './network-graph'; export { OrganizationChart } from './organization-chart'; export { OrganizationChart2 } from './organization-chart2'; +export { UserFlowDirectionDefault } from './user-flow-direction-default'; export { UserFlowDirectionGraph } from './user-flow-direction-graph'; -export { FishboneDefault } from './fishbone-default'; diff --git a/packages/graphs/tests/demos/organization-chart.tsx b/packages/graphs/tests/demos/organization-chart.tsx index 42e09c3b8..2cc9d4e19 100644 --- a/packages/graphs/tests/demos/organization-chart.tsx +++ b/packages/graphs/tests/demos/organization-chart.tsx @@ -1,9 +1,7 @@ import { OrganizationChart as OrganizationChartComponent, type OrganizationChartOptions } from '@ant-design/graphs'; -import { Graph } from '@antv/g6'; import React, { useEffect, useState } from 'react'; export const OrganizationChart = () => { - const [graph, setGraph] = useState(null); const [data, setData] = useState(undefined); useEffect(() => { @@ -17,11 +15,5 @@ export const OrganizationChart = () => { data, }; - useEffect(() => { - if (graph) { - console.log(graph); - } - }, [graph]); - - return ; + return ; }; diff --git a/packages/graphs/tests/demos/organization-chart2.tsx b/packages/graphs/tests/demos/organization-chart2.tsx index bf5d135f6..4c7a4c8fb 100644 --- a/packages/graphs/tests/demos/organization-chart2.tsx +++ b/packages/graphs/tests/demos/organization-chart2.tsx @@ -23,7 +23,6 @@ export const OrganizationChart2 = () => { const options: OrganizationChartOptions = { data, - padding: [40, 0, 0, 120], autoFit: 'view', node: { style: { diff --git a/packages/graphs/tests/demos/user-flow-direction-default.tsx b/packages/graphs/tests/demos/user-flow-direction-default.tsx new file mode 100644 index 000000000..c4629c28d --- /dev/null +++ b/packages/graphs/tests/demos/user-flow-direction-default.tsx @@ -0,0 +1,13 @@ +import type { GraphOptions } from '@ant-design/graphs'; +import { FlowDirectionGraph } from '@ant-design/graphs'; +import React from 'react'; +import data from '../datasets/user-flow.json'; + +export const UserFlowDirectionDefault = () => { + const options: GraphOptions = { + autoFit: 'view', + data, + }; + + return ; +}; diff --git a/packages/graphs/tests/demos/user-flow-direction-graph.tsx b/packages/graphs/tests/demos/user-flow-direction-graph.tsx index 6019335d8..8ba158dde 100644 --- a/packages/graphs/tests/demos/user-flow-direction-graph.tsx +++ b/packages/graphs/tests/demos/user-flow-direction-graph.tsx @@ -23,7 +23,6 @@ const transformData = (data) => { export const UserFlowDirectionGraph = () => { const options: GraphOptions = { autoFit: 'view', - padding: 20, data: transformData(data), node: { style: { diff --git a/packages/graphs/tests/index.html b/packages/graphs/tests/index.html index 5717fd0fe..5f1dfdd57 100644 --- a/packages/graphs/tests/index.html +++ b/packages/graphs/tests/index.html @@ -8,6 +8,7 @@ body { margin: 0; padding: 0; + background-color: #F6F8FA; } diff --git a/packages/graphs/tests/main.tsx b/packages/graphs/tests/main.tsx index 551f16ba2..6f054450e 100644 --- a/packages/graphs/tests/main.tsx +++ b/packages/graphs/tests/main.tsx @@ -9,7 +9,7 @@ const App = () => { const match = useMatch('/*'); return ( - + ({ label, value: label }))} - style={{ width: 200 }} + style={{ position: 'absolute', width: 200, left: 500 }} onChange={(value) => navigate(value)} /> diff --git a/packages/graphs/vite.config.ts b/packages/graphs/vite.config.ts index 80f073f47..4c1738c54 100644 --- a/packages/graphs/vite.config.ts +++ b/packages/graphs/vite.config.ts @@ -10,8 +10,7 @@ export default defineConfig({ plugins: [{ name: 'isolation' }], resolve: { alias: { - '@ant-design/graphs': path.resolve(__dirname, './src/index.ts'), - '@ant-design/graphs-util': path.resolve(__dirname, '../util/src/index.ts'), + '@ant-design/graphs': path.resolve(__dirname, './src/index.ts') }, }, }); diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 000000000..49fa49ca2 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,78 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// import dotenv from 'dotenv'; +// dotenv.config({ path: path.resolve(__dirname, '.env') }); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: './tests', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 5 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://localhost:8084', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + // { + // name: 'firefox', + // use: { ...devices['Desktop Firefox'] }, + // }, + + // { + // name: 'webkit', + // use: { ...devices['Desktop Safari'] }, + // }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + webServer: { + command: 'npm run dev:graphs', + url: 'http://localhost:8084', + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/site/examples/relations/dendrogram/demo/radial-dendrogram.js b/site/examples/relations/dendrogram/demo/radial-dendrogram.js index 4e1588e8a..6c3fd9549 100644 --- a/site/examples/relations/dendrogram/demo/radial-dendrogram.js +++ b/site/examples/relations/dendrogram/demo/radial-dendrogram.js @@ -1,16 +1,14 @@ -import { Dendrogram, G6 } from '@ant-design/graphs'; +import { Dendrogram } from '@ant-design/graphs'; import React, { useEffect, useState } from 'react'; import ReactDOM from 'react-dom'; -const { treeToGraphData } = G6; - const DemoDendrogram = () => { const [data, setData] = useState(undefined); useEffect(() => { fetch('https://gw.alipayobjects.com/os/antvdemo/assets/data/algorithm-category.json') .then((res) => res.json()) - .then((data) => setData(treeToGraphData(data))); + .then(setData); }, []); const options = { diff --git a/site/package.json b/site/package.json index 9dc6b6b51..c3e16e8e1 100644 --- a/site/package.json +++ b/site/package.json @@ -44,7 +44,7 @@ "dependencies": { "@ant-design/graphs": "workspace:*", "@ant-design/plots": "workspace:*", - "@antv/dumi-theme-antv": "0.5.5-beta.1", + "@antv/dumi-theme-antv": "^0.5.5", "antd": "^5.22.4", "dumi": "^2.4.16", "insert-css": "^2.0.0", diff --git a/tests/dendrogram.spec.ts b/tests/dendrogram.spec.ts new file mode 100644 index 000000000..90415f9e4 --- /dev/null +++ b/tests/dendrogram.spec.ts @@ -0,0 +1,30 @@ +import { test } from '@playwright/test'; +import { it } from './util'; + +test.beforeEach(async ({}, testInfo) => { + testInfo.snapshotSuffix = ''; +}); + +test('use Vertical as direction', async ({ page }) => { + await it(page, '/Dendrogram?direction=vertical&animation=false'); +}); + +test('use Horizontal as direction', async ({ page }) => { + await it(page, '/Dendrogram?direction=horizontal&animation=false'); +}); + +test('use Radial as direction', async ({ page }) => { + await it(page, '/Dendrogram?direction=radial&animation=false'); +}); + +test('Compact Vertical Dendrogram', async ({ page }) => { + await it(page, '/Dendrogram?direction=vertical&compact=true&animation=false'); +}); + +test('Compact Horizontal Dendrogram', async ({ page }) => { + await it(page, '/Dendrogram?direction=horizontal&compact=true&animation=false'); +}); + +test('Compact Radial Dendrogram', async ({ page }) => { + await it(page, '/Dendrogram?direction=radial&compact=true&animation=false'); +}); diff --git a/tests/dendrogram.spec.ts-snapshots/Compact-Horizontal-Dendrogram-1-chromium.png b/tests/dendrogram.spec.ts-snapshots/Compact-Horizontal-Dendrogram-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..c83ca9e75b659246d5196f9d68b075d7b7372491 GIT binary patch literal 40994 zcmYhj1yoh<_dI++328~`ZY2c~5D*b*rMp9sl2#f)3F%G|>F$yiBm_k1?oLSo5#G(` z`~R)=vJkGs<(%g{XZGxw**EB!(i2=P3M>RcaAjqrR1gH^@ai8XDttw%Qf3-Hp*X5M zkwl7rP^}{f9U?3BQ0;Zf*0ighs^(whH>(6H{TBUOHnm6u6;E$YvM3m{cEg36v?xMX4)N1Gk5vcOIf+!!hM+YNbp4#_)P+eS=R6j!vcQ z?f!Af(d=dQuSxtHH!R(Fcz8-5+_UDrNJ1h~Q&ZE@@R9uU55D|{SxEWDibMyiM{XbPhAJ65sU8G?pFObQRHWG)+~8r~et zwfgN&*Rv7^ou8jeN=jPvCZHh6f;PcHK{s%48od6wjTYrryfm> zjh-)Ga@fDCb6izQx@*}LK@V?4EDDH^_{B-v?5y`lq4sUk&5*-yjk@ z|NZDxAgFjTisCcvz!6TRp`ub~*ZblW)U!PB z;x5wF*JsX`i12t{oR^t)PE1Z-o^6(>ZHUL>id~)`L`6l3U!L=GaJ*a}$cl}P#kKph z)J=qsAD)y%aVmg@`cP8xZB5O+o25prZ|xU5v~_i9#l1X!q}<;=jf>Ej7j^a5VT_V7 zC3NV(cXqYUWcL~wyOh+(``lVX>gyW6GP^NaGFz-)uTiKKnV6V&GMx;UPen~_XnV4z z`O;v1{f|sP+>W`Ad2ig$K>flQJ95MMXfFRZBEV%Lx#81Ioo>NXE{{UjGMP86DRbK= zF=qnLy#ZCPaKe+wU&kN5-|=~|eC6HI`iXOtVauVo4z^LDk8Q$uq??h$lQmj$G%Dn` zl`Wn^{o`}IKU$&qN`C^n`D30~sBtz(xe--}N@J{VJYe%l#sX!wyW`K{=df_Kkz zF!M-ZKTEuO#EZF(sj!3jP(f13Oop;z^yUC}!c=6sNPGeQHu{sjooaM z<0>AqHD2+&GmQG_N722#JrtjxKYy;Rt#N7=AMVax_9pV9`ucR64XhuExb9qi1)jX^ zJuV~OF+4sy+H8N`R%^cqyWjC>V;Jt+e;0puiCC4c`%FwsY;9RDggFU6U}v}Nj$#f9 z3QF@l9v?OI?pr{^W{DSk`u2e=G&B@t zPWJs3g%XlJ%r+@w8_gi|9kGczGEQ6M-dG<4aa4xdJp zt_fDt$j$8x@D3g476A!KY+4#EHFc4iDImWmY&>aiaBw{UG{n;r-V zs9!9%_+EP?DJf_@7LkzfdVPSID7q%isQG-qXR$LJc2JR8bVT{9n?xIx!dezSuq%~Y zf^ha;c6PX5`_sz#j<$g1wvU&M;xA&XcWN9YNPa;0ReRqGnp zzS2T>R@&=+x81b`A49eV=6rUj3&l+>v1UUx+4yV?p6p}{@>E!n9ZxB<#PatSucV})(L9f++2rXJ zJ7GrGVBg5hm%V*Ye_>jxxQD3^-^4~p^4fY157f1v2bMJojIsGw-f-W^<*z;V8FsS> zm+flp4a31Yo{F52mwjF%rrhX9(k{H#9B$NBi|ZWZ4jKZ6P^7}zjL9=+O$Z%y63?RA*#<^l;M8ZI_Hwbt z_)NMG$lV=fGJ6J>YQ1b^^Ng=t-tz%fWtBqSrp3Fj3L$gD-a|9D%zR2$!w$7Lojnh< zNB{~ZzHe1L<)qNo#1|J=vonn_hHY`EPE$~x)#_9%p+H~5%db*YyvliVYV!Y><$&g$ z*vOl*nQsc^9%~fj%aR+$YI3r%JzHLmXa$CQsKPmE-_EjPRr5sxOMYFIN#&N%D^%VHmadW=$uz#a?C!V`HQ#obZ z5;2m^Kz!K86OP`aOQ>%osgNfmBsgtPI1gmXB0rnGFM$$WM@P@j%tRy<6mVkYrUAWx zU%mD78!ghsKo&bfRVQl#g|8{>$Xr%dvaz$!KUq#pPP((@-h~yX?WVHOU*9&E2Vw$trn6xw*Lq ztNqt}BF~Y`8m` z*ru9)wH~W`Ky6(q<4C5i*G%tUoL`zPLbIm8Ps7o$B8r&5+FFlbYpqMm+mQaXITogn z*>pf#=2^iE%nA*kOlbX=W%Rr_QG@Og5VG}v>^CX;9W|MeBqh98yxM};GV9z<|3OOs z+rPJY7+Tjp5^NNmve5bY!4Lapn{qP*-L3G+IC1s~=io*E|iFP3qu-2*?I}S-&Sv$`KQ-GuXwlY6v z`r(Ia7-IE4vkLEA=r;OA|0xVAO1{4aSJ8GJs~rJK35Zx3HEvqGavj5Iw6)iO5w&Lf zj)lu-2eZ*W3L8Q`wlT*iUzR7Xt(>Iq>~rfTo^)|7Rst z_o9rG{!E%OzrCY4JVt0%dUYN@U)XIr-YJx1IL;s0v)pQk>l_!6{EriMHQ#1uSMITS z_T0Cd+S0I1Nm!Fk$%I(o?{#&<>@rp|4$ojIENGlOfH^@E2z_00D1CIdhK9yIcfHH@ z#F>Ei`QDSPNnhccdg;NHg~k@ob0bVq~lomv&S;gw>*xM=5J=WMZND=W*#-F~yb)SZ0KPV8(gqb&g6ZmiUJIA5LdNtnlt*^Sn^V5TR=S`OA?lJ3Q?&kBT zgoImER1LP%!pN8!#Qtq; z{NswzqpFH*LJ?oBBvs_a$Dh*Ue(!G^v|g}&uWCJwI8VPSy}I@Cu>l7sXgl@#?9j4Ii;9@o z?B&ai%}vf&xq|$B>2Mm)-I)i-$-h6dgM)+DP*GuBuOUEDm-k*nWzcK(^31RT0fLl_ zjHo0vCFMO1dAa+a9Yb$WgC>MQ0bytF9vB!H8983~_MtPJ*09_x=w;KJO#WAJ_oGHi zQKad~;1tGdj%JIR-^-^09LmY8Aejowa85)^30Z}vaC7$CTdsk<_iB4NzYe=muuQE8MyyYqNYfkeLg(zj*M-4Yx1QlUhk-TiY)AYC7 zXzZ?mz`bDEt{b$IlQGu4W}44QWA1I0I-)I{h`dW@oZ$CO)$j05(f>{oe61m6;x=|6 zIqgS(CbaCnLMl9~w*tRt%wE9ulezP@)NnFz&%rR~T;1yPI8VGXW#r?YiSE+JqVDHiN)eKjEXN4q^Ib8rVTl_O z8GDBE>2to|u|<>2ZRgVLiSdN{TB@nkmK=r;{0XAkmWnyEl~UdQ9@`)%e|MXM7%eR= z0i@<%34#8#K3P)|8roN+Tl2N8t*EeYr9bU*?N>&V=ij*aco28af$zaFVPj&JmX-=R zEOh}YavL_?j_!u0`VZW0y}iBBtWUZ0zYL9z#w)PQHh5lU;OE@9{&j%xm^P?yH239W z=;1WkNQ1IWf+}Nqu*MTOBeasDw+i!YFK77i=`&GafxdyN7)18(?1<6e`t|Gn@81(< zNp_j-*UWlZnVG4nsS%Tq2)G@tJqf3|SwJfOcdJ4*M``c${7UcZ>A^;(rlvrdg!Y_O zDdqLrPkKW`!$bv_->ZxGs%bxSmr9y1CSpt+mK_$JivN>h_LG@^7vpd7ygEkn2LDG# zAdq&=aSws6R@8R%x3%_t`yOMhpf;DEOIqIZS}#4bL2hlqXnsq^(WSKI;Vu6ml<4|m zt;!d_pa<2{*AKuU-~T=T2*Jd{l9QE%wiC?q=X^Y9IsfLIVSDiN1c-HfVWw zqS5_NLqmht-|d<^y46c7D`A^G|FK%1Ee**_W5iq#CXcTG%B|63o-L5$4IhK5lo zLb5B1vhw(j1&5$xlM?9M=a{d;xb1GmU#2Bz9SCBGnOXdVZZg`jv!yU5C~zNoPTmw^ z2?p#MDLT8B4QNFo{=&SAc1@?!lQt3(nfpLpJ3BfqV84O3DD|%yxGOya!)NHJL7pM= zYYhwx%mq~#q=BmiV~B*Mf5;FCT7?39#JL4+X#d9t^=92szkmO}IzLMBnXLNfw08KM z*!iKMiZ5QQogS>xg8JIcnie6$1eXK({c2Z34L4_y#AYdbkLQyvCGU!bnK(WM5O>vb zd*G9ruE~=jnotS-JX00BJD@wY!q*avvk<(T^zLdO>*^S&gdg!bb7Mcc6CPXfn{& z-7HX(rhqS8ot<{L`}Uj}@hjq~JK^2M@HlWI6U9Kut;{8l9*>sv;s*YQi~D@V_s*&C zR!)514c&-#XFU|kaq@|eUf7$id7Ig^U8?(`b+Rl~(ZnpCu!5d4>op?e%0K(fH~U0m z6mC;#7xv^f+O_S>zx+1ny8-d)ea!-yB6=wW>&J9$zTJ%#mX?O=BXzd#zGxi$?VsoQ zmh%XgaYEW@c)8Btf|Riyud*TF5UJ$=-(s{J~@I898 z`|7V!88?yM2iG){bu-MAe23Ud@9n-gz*KN?e&c*6a^&jCYzMs>7Xl^G649s(@iA=F z&unB`qjrA8{a(7f`@dS?N+TP>VD8?esNeNABQK&KMc47xB=!h;+a--hew4>7bFoB9 z)DM>6{;sMLvRO>!rjFL6{8&QM`rWU8WP{NSQ?MTipY6VXW|}Z15_BBe@j|%`z2`&2 zJsemOL-p{d|7#1O3Q+VM>EGkL>EXr_;`Sso^h%g?fBwleF}0&U5s`Mo(Po^dNN z(&k?S^%K?V12}lSzL|^?h~(v)-igh{o2ur#>CH#jai}ufche0!x_)MGuve+eRDEnR zVNy4_>aNry>mJrP8A>rvbqtd`B*|?Bx%ta#*eE`1ex~M1Wfj>v16{$I&uTy7L(go# z86C;9PrbIN*x%QO<^x!K^Bo%|$mj-j4(9T!wv*M0bOclI|KIa%A3uJSn<8;`sg+c3 z<}H_RQ!o2aS^fIU_;MKs(lRsAJCMTXmFqs(&tX!d?(F?OF)DOgzfgy^j6Rs{_jQv6 z0p)W-+o8ag`Yg#5z7 zZm0XpY8*$P3~&FPiJWOw96izky>E4_=j&i!n0^Q2*;j;zyYML}?Snkx_yLGr&YBQ2 zQBDV19lIx1&~;>PXUFT`nKL5vX5S0|r_{J@2?Y-HxsA;oBq1qD`tjrKi7NSvkpNn+ zT4>5=y)QjGLdXwR`YNic(GgbG9I(c&`Don^3l6^Gx9aNZKyfAL<{aws&y*s$+9vqU zID(Xk1yJUKE5d=n%AF z5>nEgi7HM}Q4b*V^Yin7pSQ$3PJB?VL48~4O|0T7tGCdHh`)wF|gYZCCC;A&npj}Sm%UK6j+}bvOOIBiBuTzp|YX9z6 zIjs-)Vc_SVe3mJhD-AISe#*7wk(kOxI{Rvf*~EI+G3c~US|>?W^2xEa%b_$`$g6;l z!4FhYC!QQ7QX@PSj9Yb^w9+nlq_i9_B{G6|i~6H2UEVf?t<_-2y)Ht-*}?NR-sZ`q zfp%1w)x&x>1U2lur;DIO!)*=V{YTi{>8-Dq|H#j0OG#&^|I%2vWJ-@Yj`F)Tn#tNj zv)%8#+c~s#-t|7I$oLau@zU3i^$`X*(oDC8sGF$J+G5g_{UTIgGe`e8qpH$Y6z`Zg zHyS*XdhPFof!DM4|GxUfl;KfB)UC&N()L^!8f@`?(PbLLAE87awqXrq8raXDc+cEe zi)wFA-al9rn#cwhQXKz@NjInDdl3HI+CF{RzOGu%TTuID{^kNJong;J6qH`#@|!O6 zk@RgJ>%DkdZ0q#~pX3GG$%BUH;95OW|DfvTh7hbx0C+uZy<7WH#<=0os%w^N(op@J zp6S4;|J{Wc_v_=|a;Qm-i28wd=xXWoEKfTf8Ysbl(LEc?n*(GCQ%63&y*76G6$ewv zif2VKCdA{qs>wx9vc>qwJv^^@nfv78AuR*MaTu+^ab)-CGYR2Wkou64uZnYrYJ-XV z`_ud}|K_2;zy4apGTY?gl5DN|*tsq?Mr+&+iWjJS&xBTrH-Aj`cJ?aurhqy#vGytJ zepW&ok!+@%J_lcW&tRWmkaGJAhlj%(r=B0+l80qUHaEU(6z6*ZR4vtzJ2Z@bt^8-? zgT-h{)*iSq$4EJzRC5V^atAUjjlv4z+;}*~Z%NfrSa%Mfu`^EbrjMw3p^$9a% z?rl=Py!x%|poFo+5>K+jgI9q#dxS^EnJfR71(3f|aEiFS)xYQEJmY%Cwr?l6WKSIU zNJbW(gCcxZW46Dgw(=R`V4#(jo$B^YJ4qET_uFezDYr1Oq{Jb&@3KFM=EM;{D3=1pT06GC$GQ=p0X zw|G8PS09607JyF+r7~1%wkK1QQ3RFgF)WX8j6_KFATA z9dFm$PJe;k0XhoXnFeihag9tRxQH=HQEE94MYV0d2w*5DN?fyQQt0mB3ahl}?2E#h zzbju?pd6B3UOq52l_JH^jSn6i*oUVlCt6xsw+$L@AzXU3zmG-@JKNj0W}Cg?v@q~# zoE#nN!IcKiEq*fR2Z9R*MgUYy5n*8(VW+^ZEriEu?I&n44sfVopJ0>T&Mhfn6_YGB zXgu2*=SQ?^U(q9abq?=(miZDD5E)rnc5d$HWm>4dbD*RER-^l9!)Yb(W@Ly9WwHz1 z&d6vt8Gia>Q$feAe4@3RpM!UwI_oJfgKtsMc3<+nWpZ*vK~WJ!f+O~LV|X(oTui6h zdK}!U8TZ}B<(_yV6c!d1#OV2RG7^$1$TC2U0E_GtdNd3lP)wvpBfHIZ8xDSeA$Y!? zljipNHPQmVjYlJTa=5PgCbMi$oHh=U15Wn#vQM94_%t+#B6QK++n4Edq5Kys$##{~ z=tEj>Vt>Z#KA3H0KfM3?#AF4TjGw>zOn?ed=ygi7mr4mRKlte%Lf;i;eJr zJql;};LU#f@GuD?!=wUKAIw3BF1Ud#1D78i1LM!;D7T=X3nVWdy~p8&HvxewpEdna z0FbV3Mn;aL&M$GRWcfyi#B}m^Yep#u+pR$?hDQ3V>kL% zm^lE;A^+Of}pcOVt3)}WJ!<0L`6`VFZ ziKP4@NM^(J(IN_)@E>27iXACz6nu3?&%(w4Lfk12z`gGi+$dTtFt+X))D|bld3y0Q zV|)F&AoJJZ20@dJjr7$&6feWMz%5Dzi$d+?116LBy=|M`B&82ApoRnAwX$lqCU2=3 zrB6bsaz>C5i&BqUQfM!;?wl#AVc1TR;2Mx(Qg-CmJP^iIstR?6uyOcS#IJg z=UZDF($BSsf;^?8-#A9tYEB+8p&(<`Hk6U6V5PvmGc_?OEGh!N+|$#8hT58|oblrB z1l*3J;JweaUPJerUtD~Yr7}1$0I~^Wo+9-lrfT<&Hb;RkhJ}SGDJoV~RWWN&b3%86mmaZ)pNFSxhLy)YE(GjMuyZYv zC5UOjL&Lno5$~P#)@V=bc%%hzcc+ZIXBhg4`BUcIxC6;KIjnmops4tvEW{4u(7tp?!N-?l-3K((lO)3H^W?unl)sS4VmFfq+A_19~UiS)12qApQplOG0|# z*hObFhFw*o#9(`Sd%DSv)~aVMc$59M&9LOUf)2aTU?9LGY5jW;xEEfeM`owjND;0F z^^CK0NH>0&Jj`%i-!Zc^DSXC#pn~`6BzWdq4tB#V1{7Bi)i^jggCcPWgNCx?$>inb z7pjtzq0<L_sidH_z-?!lxt?k&XL>*wqozy^WB-S zef<3AN|!t16O%!*cYg~i9=~G8IG%bJLI`%9gr?R5toM{l;sU^MYD2`ieip?(zEPB$ zk5-Zzj9voTGEV&v4vTAQ3rQfm+2ZlPj*RS>zTJ>5l`<)cwcXGAan^Nce|H2fM?UhL zl$LzA%gqR^oY^}?O-u2swSLDSKjQjZ!wo;WUg?=2dHP6Iokf*4P{DLY_xzVFWXRc$ zuZn>c$~Ap@uaEgV*%@Qz=bhtO9Op-P!kF)DVzJ%I&~woZJ!oiiKP%^s=+|lGsM7%hunWJRDvEH)jRhzW0YbMsfvD(vr&dH`7o=6Rhk4TCz zPm4j_IN;_@J}etYqkC^>-)ksoQsR8=cVxqdzb7Uvb$Sv}-q+JN|c0 zQprz#JdN?|GA`yrPL?Vrs*Yg<`c^% z&9}OTgQppVeq_Z1c`!4L2h78H<4k6ezFPq$P6g9CXR!8|y0st{nN z1Qrg&`ef-VxahEp!rQYu_4?|5mnw|+1ZNsqStTbYi$J^x8T;aF_2R_~PtSjF|KU*! zOSLN`3*KR2K}VWSSCa2L&e$^l*{+!du1A1?Ork^uko&Ug;$vdW%+0~wZ*)5f)=F&#atY{-(gL?v zwcYH+*^w1;C6hXDs6DxS@T}*RmUNHSRuY|nLW#5k#I!aFm=+gg9PKk(n@0mgmfGxW zwn>KqgKlEJ`wD`REeHV+e}FegxPrcJ#B-~xtPE*c+`E!?3R!1MjURb>K8RdvzBsdr zl!=LnX*c2tlwV$5y(R%^CO9vkO@43RdVx{;Ibt3l1weZVt(1?C?}{7)UqV`-xNz%# zk;)mYv7MHSsn0JeQdCs*++UJ~CBGuV7w65@)uw!jl=o~El$6kY03SX+NF$)&*w`G&QA1L_~zl9b9U!K!&T&j4!BE zIZ*r?bsbut!3}X&!trYDN8g z-UZB^jDUcy#DQ7db*k1Lb{q|uB$bwfYfi%UrLaJdL4*t*F5?X-1v-v0X+T&M(v74M6KG@t=jwlnNs=y?8}EQYT; zxhW`woEJjgZ5pC7(ND#ccUa%W_^Q%Z$zD@ej7VXLN7=2zo{T2O{b7JseRevQRVg`V zHmVSAz#p7%{P&K`n;WRShxTu?e0fG5>Dv5yoG?`d(d@;7AL=x@Hx=XTy;t3znS~Wp zkceuh2Oa08kn+3Rl82ntoz{@z``UF{etGcaMs)p1Y0n8)s-5xYAA@70OMK))H3GB! zZ&A?-1b&hZe~|5>&lh+x6PH}N>t%&ft=46bRd>90o62!CDF&zS!NMa4(0<+&R&OZf zp$1)N-b@cr{D9*7;836ff+?1q6=|;rq%AOfSv-AM3Y-V$=vwHY&>;VPwW%Fx<6z%3cNL0Pc1Nus{xX_vi-wJTxCgeS_TG&H77S2 z85wR%(v-gpbD zYwvC_gcuZDsyZ%4h-EXk_`Dz`4^n>@m!ce}oE+zuxUXu*!jim@4+IGiGE1Mogh9^@ zOf)nk#AR#D7|4T($^K%vxECZCq-?4n0Ex8Zs~3QcH(PrA1E}hs?MYXVhZo8xt8J3` z%)bMAqRjPhH|v!eq1 z!5dVPlVd2ZfQW0&Y%`9f9#@6rq@u*7&>LpmNyVSe_BCk*>)-2ogLU(`y-zt0%p{K+ zb4nZ&Nd!EU?|Ai@mItU2E})YB^KagYr()YRH7Djqy|P*6~i_P`wiAi$}m+KEtL2gDg-xbNt^ zGW2s+dX@}=)eq*C8ntG!$DQVRuW}*H#+pR}kD;zQqM1CsH#z4!z54DbC}oahX?J1W zqTp*Y{ubr!GB?2QL7y*Qgg-m=gMJgpC`uD9mqj>jwjeY3S-AbCuI?m^VT_GwL5uSy zH4P9<-2FI2E^B0T^xj2Bou27`Z=bDm8pgun{L;$WbrRCoc2Jud=S^0&Pi1@T)$&>iiTGN)`>s&+yzac&4LPE zpu<(9k}xHp7`tr+EEIptbb&>cTo&gYT0ueaxU>t^Q@6Nh~JCk4|BUz$7Ax*O_ z<4SmQY%WfrED-MR*%k~%lamR3*qa$6sf-n3c14xku{iyjkH|c49jV--iu=V@xL05p zm^ZS`78UysU7A+;Zmp4k*4lvTEptvW2ebuf$|LCwlJpjsVp`sc&yO5w|(fZLKgkR;$Sm$>p)2o$!ZF=+F5)8HTK2R(8l>0ryy(jB-vW!PN z#nxts<8>zj+lV6NTC!>}2iG!qU%+Z#wOs+*k6p!HVGnYR8Sc)xZ#dLAi`{dQKOf*) zy=E{q%_#Gm9-3ksQUc-oKG?EU(Z3AAUFh?8vjsjMa7TdU zgjsW*Equd9V@yu%W-W@B-Pj0C-dUT_TbfNgea8J+xf>y%qAK(-jhrxc7)>EYTYW`8 zy|N&KO+C(UqG0DrRYH7!?3rv2TB7O0(74=ud^UF zrLU_8c2l)CDJXP6I56UY?GL(_QVJmrO%seKz0r<>ko@Dvk8j%D{6GSuI9^^}PELm) z7Cxl{oDsDD2Po$SL=1!#xFzTXt7jm80Ez#gU$NPbm9KIgfRIQFl!VTwn6iqBj-}}{ z4R84Q_y`dQVBsRo|BiKEykHAxL-9ewCN0#fQ^^u{&J;aT3z6u1X6TETsmf)}sfos1 zCczT<9X9pi`Z_s`kd+WEtgmaUtCP^uaz}U10F?$Z31k&u*LicK@$%v?U*Z;Y-X>*Q z260Op!v*cw>Cd{1cwhzy0)I*$McJdfA#KO_c|%4~5jU-$R?s@3LHau=2p~ZGUMt%_ zzQ+;F5G!ZSrw#XeYNglQr&f4INS?r2+`oSx9z)cQ*5kLY0*fx7g8~awIV@$oto;1o zZnKx`hDdj5b%-?DnTS>W4H+Wori?>&7HI^5wTG!OsXI4Mb*1)*Xu_YwkkWryYLAEL z?th0WC3gR7Z|_z`znJ^!e%ARRL`^cPt4Wa;casvwC&xEU$`UZy?yUYhwh6o{l zq5`97u$qpY<-=<}Ad3*UTp4%x0Pto_3vSRX;}D_Y#k4K@HpkM z8u5Mmh3m@lQU(=&VLS}@;zX4dB0(&93Jmmr%)J?8Oo~tzZh6TeKV}c8@{oZ+^8rNp zpp?U(*bBz$>FH@Gwa7?U*BVg6ppcLT*Ik-aC2^N?O;&fEK^-;+AfTqR)SWW!GW3+* z5IliD^F5Yx|0PFgepQ4_CUiZ2c4xhR&$Vu!veON>=0#Avji$r>p2Yc^^U<%l=1cr9 zI)axP&dvhionTB-B1|kSPOSi(GIJ@D(&5ancsaWon>5@rH>6sdgduqY z7$=(Fr~0VaZ^HK!b||7c^V>}#(6g>`?1g=Ff3U0WWov((5XSme8@tYH9*ZhsmCtbS z{BB`B>HD34{0WO0VIDMw^U9x0)c$RJNf6pIwYYcp)R2QXyQtT|Kwr0;q$;NNF`=b` zWLQQ~9iGLpIDd=P^8*klmGqcQ^8dvCq zk*%4=hhi=Sh@;)`-vfxd-wZCb&S7fT+bsCX6)dP{mPFX1Zi@0taNyR3&g0OdwJ|C?^Dq z$2O{JU;q*lCMG5x9xQmITox`PgoT^Id0TMS&={%TZQ^W>fq62}f?x;dspU7!gq^p; z(hD}odw7VZDj9;heVznDM)u%3s;`9C0(e}Y5xCBJKB-)VxChKt36ZEYzCveWkjW%S zM*E{}r117vBVDiVwrj|LVcq)q?Ckc>gLpem98od{+Od}7S$HFA5Xr*5R8LYyT@2%( z5M@QY5^`sb*Mt;yUJ|G2-4ZU(fx*&B_OxrJ7ubZBi;E)`5#@)5i|F|fSQY=lWpns} zEINXprw z{2poBJE*%{U`$N0M+|&lpyglec;Z{+ekOLxXu4k?;=PTcnpdghbXq5A z51F~Jr+X9)v;?#myFn)@xy}9r4nlPAROGBQab>s$& zwg~EGslu7c!>DaoA@0MZd&kWYS-+E#9~Kkbd%CV`_8(zylRm7hNe^Zkh{>`3D8UC} z_7Sf=*!bbKDqIrvYM3bi3Ma1^XRP&N8i zoLK7L_sy3DTOlnK0YxuaSs17T4yJ}t`Rm_*>+B@rR#8=DCX^jSOdi%vf$laikOe}| zCE~MS)f9B6h;rcriKsgLf0Hjn{|&irPF!P&*1v{io0&#RZEVg%5Gp(^;E_FfTBN?) zopaCvoT;)72o-d6 z8-i%S7pd>QAV}-K$ItJ6u!0-ije~=8n~e<&^goA(9%qMnMMXBClDX{8^cnF$V+{6& zvDI_#q7v^E?HAU&d1`-mm-l-&P8ovKZpZCkCse9>Hsy52ghcC`%4P^@soqzYL`r#b zz|*{m{pZN4oyrn9o*FixBgGypgrIC@Ru;s40WDBk09j!slaxzO=CH6cg#6Laju1qw zo;~|{)eBbut>gt=`1I@HRosg5-VV@c1e_1wloTqHqWeKoataDtgE{?h=fbgWZ){vK zd~EsTX8r@Y9yCfpuffg|JG-a-T>4brp<)Kw1{Rj-hlfWq)3@P*!z#bUaDfqVeru_I zh>yEI=alnnCB+&aoBlS@H~#%cM+j?#ndqvXdrL^O>a8@rt}ZU~a;sX@*o$tTLlB+R z!}U8xtMXb?X=3G4@7WnZG%k$lJ}RQeMTS`XNV$PTvnZnaK$tovJ|0x-3oyK4;MQ)Y z0mbM4+$|I5i?ynge=}6lh@$tHCs8(z}7>FVGe3069 zheQUHU;Wxw4_du_CFh#Nr)K`W$e(MfzFj8}%m+-=x_#u-)|vkv^?6UO0bvH4 z(5HGpR<(=uC>3XG8rSKbjb<2Fk-&e;0ac25p$L z4emLC39DAKQ2-JtXB9Vm-Np;f13N*cW~3Ms-N}#O>7$Z+KQUQcN!m<|Q>C@DS|+~6 z49s}F9__<=7a96#O?@q&u5|u2-LDc&7ypO^k=-4WtO`}u!4JmgWh1C81M~5gNml`u!@!VBARg9;H|C^AF#Kcs#$9m~Po~Esr+L>ROsXUch1n)z4-)Fq8p+*=yjAw~?_~uUeA>nHd zbl1YglQ{b4eaLZ0y?>pRSwUH(#~deiCD(0mK~@REUvG>(!J%f6UWIrwOsPP7&seq& zVggZ>?U=cT`n2*xDlu@V+<x`9^6OXxrFxZK6v&_8kN*CRx z>T#Ob>K7sD<0RGBBc*f<)O&~m>rm}sq?t1Y1{_dYqNK|*RoKiJVe&%q&EKK?dH!ox z4+YVm*`DV}Uk9rtEHpG$hRN60mz|w`xAD)69cTfdDX%OqkHdVGu<-XD-0lK&-o#!Y z)nGw`CzhCy@bkr85s`Z6T3K0GKqy6(fEPPaR{jMuE`)@Hf#vpK5LMRH{Q3PG@d3h4 zfSm~{DX>%)#UwRNO-(~XXgD7tbFYMO&`rPk-#}i$j4!0G0V`lO9+7$al$(>2Qp9EJ z>V;-}U{)qQx=xk2pXW8WgPt;1~Zo&JAhy>~d) ze;YS`*&}3Slh88DOv(zW2xZGGvPan|I|)&emh7@uwrml~$jC}48AX&;iRX2F@89$M z^Xs^e`}n5ox_qwBc)!o{wa!ZNM_T0-6;wejEo!@WC#!@~k_1635*gW!P6Yi%6*`%H z@%aBcz*gby_4W4$i{mrXl?2ib)7!0WefwcOm?1fuPmal~@YLj;0^#VdDD zPf<}(p?eApomrGd{IX%vy$+0-rgSsOZ|^(v94)y_lvh^(iU!Rc?Hs<&*1Nl$p0<)H z;WL+mu`4wJGK<}c0S^-rytX#|vh`{Izbu-VuAl4cR0IeN(}q_3=;#ReotvBcNqjuu zbb(mBp%Z#%s34a84#9o`rHuU5udt91d}oq;&~BaW@5Evw3CM25mGqqI>7xn_OTs=H zH+^NEe2UChdVKxN3*7`B`=U%zLLT_DmRn3j`m~RbHm2+6S5@_Uv^y9o3G78Up3c8> zEar)%0B?3r!_gKbhWww`zi3w>La7aZ)MF}c$gsDyfA$fBA8<=9C$?J=3A5;R+ z<>JGflhX2xsiCGO znF;Xw4~J(H+#_iE&K}_68Q$p~0eu!P6AKIU`|I!kpvd9m%+8FDX*Z{M_?>G^SjCdV z*KU95y-$%Z3XdvSsehswD5F(Zw4|5j{TKJ1k>`P4u+z?m#M41-=iLM`jTn6sI#&=| zx$bEhj?)3Dx^7HiZ_}@Z^w_YiRO#QqpOfaNkB;`eJ4-c#oRf(vmdZ3X zGMmdM;+|+c$$&l8ht-g_ZwI#3y)k(&)7wYh`!~`RCy1CJF2|EJQRVP5CttYr$h^(k&W(3@$5_^umLLjR@aWY_Onfq7?X@SC zcQ*k8{-%7T^uY?m62=_iPX#Z{l_xv`k|@{OTJv@2oEow+)A$P(sOF=%0B8x zzoMdn$N78HHwvxAg%1ZiJv{dTAV0FM=OMOhzkSR5r>dTlL|=*nyW{?Vl##O=2MpRK zS01kEIXb%a{o9ONYeA803pO`ej58~Cbsm@~8j_iR_H5-Q)z&rB9meuJgXFnoG=E4UY#CK!)T0-8 zuNurXvcVJq4K_ZVsFl`v>Q+Ik!VQSX`%}1^Yu4wl{*>1iPdAfrn%^Xo6z;FvQV9N^ zg2h)Mdrj#C>?YX+auQ0Z9c$E%!KG*Fyw`$hPnA6@AivG zyM_^w+mz?qmu$4D+_FBohdNJV|2_Qjo2YC=M7w#oR{M7MxL=!$*NwoN&-2bIGce2b($6=@GyPUTvCEyrR9QNUZcmV=8kqw% zNz*%_FY9fqPtIKuilgcN3+>?K_|@cVlAB-J{kpE+i7eY2ED`6q@9^8c0lvWV#yp~e ziMDo*%*+#782+=RRCK$|VS+5$=mwKFXlYe4-%dl$T4)=hed9t5yxU}D; zPj7U6N|Mw$bH(@MuQ=Q6sSSFU&y-`kSuttl4tNP+T$VN7^h!U!71no5|0ITYHDEUu z78dUJt--b+^Y3b72!$ihE3%ZLXxbFZfBrj0&Og_aHV=p~6BNzO%AK&v%kg(&?i~r4 zwYt1$?_|ANFW3KAjSy6KP2V?g|KG+O>!P*zhrr>_WWGn>5YoOFBCf*8g4G)vD!2d# zXm5bLVA%(9i^>231Xz!-;SCH7kWtdT>F$=3k%5$!fq?->TYvp;c~n%C*1liM%T*qq zZ|WYvYP_<(-rd7 z-@AA81TdPQh?mb3X+gxBLGg{&3f$|f+FD3AVG;%Nd~`D>?NJSFibKtK$l85}`$NXnxL7Co^toJ5MY!$uAIc48-pRVa5Hsu|dZr z{RVdL;o;%_{uOMHkP;6A9gJ1lnw^?z`n+uM%6Ib17tigjf89#kuMoF`YM`jJl$^lM z&Q3T)w9WYVtmB`?Mn`K33LsKZ3f#J|FCMFSZe86L5H=7ZTTs9N+}=sRiqEhUB}u@M zq_c8za&Gqa8<3BC6aqBEcj`uT5m;4A%TMshlLX<+qjG_`88K3SA*AvAYM?$T=?=IyI+1`~8qO&A+PD$w`x zvd-&iT!$U(;=r%w=H^faefjm9hk;5d;oiLxs03G5R=SQ|7h3FS%E|dqw&T`=)T5?z zBjK)%4;hU9#&H+C;ty)1|83g88*x^NAfoV_d1+268lC z*soX(TXt~i>; zWf^`fcHFUBTnN4LeTA)`#~=ci?*wUz^Jp%3YjH4<7k-(oJP*oIz7% zg=Hl(_v$^V&L*mwx%owf#U`CVIi=apN;4~Qe2;#Cp-GIUc|~> zxu5Xtj+IJJD*GR5=5@o#9YO(Gr!zhO_9Sfu*Lki|UGMQxi%OvwFg&FxqTW#uu|&aq zf2cr-Zs+#|qjQ{TMeCFm4hH2+X%$@1=I6HA*H z3kVK#9=+S@Oq~?8-SFOCyMiUw>Y~lB&>uC8nUA=tQzxx`rPi5FrcNXqcHj9KB-LlY zcV0B%<6En=uUY;({*24$-hOz@(4f{|ZtpFwhO2U#raL!zB7-CI2d#c+a6GL1yG_lL z$IHD_a%@{a{BTuSnt+|mpZ3BEep@-ubFCq>Hg5;ZUN{2g6;=N%Iw(tPvgI~sQIO&s(TWq9zc`F2#dPPet* z!Hg=sI?ch=-TovBlrBeRDdQGI1x|bvJn`{kmh2eUo-G|2aYZHhbkV|$+pimsp1&8p zKMXNYV0Mz_ui8N8&w_0KQ|;e<8N|R(EL(-f z#Zyo~wHy+~q6|d~q;}_{6_JDrYK2VM*qDP5u>Efx^*z=+(qIAs!aE8A-uhoeU`k2~ z#6egVKlJy575N?|QAY?uUv|mPj*^nnd!nlN2uHkuk)fVh%a>Cbl9Bov5>|aXh7QJd zu)IGl@$sOdzx<5zIoP!vI?{i>x+m-!qpMvgoOT{df?SSR4x#rW|ELKaO-fhH&m`_? zZoa9nGn1OwL3gp&DZjT)fYV?GqUDkjsz- zy?=kM*jOvQcMIvD2tOo37$_ZR3z1Lw5_}1`5snub8Da12I;Vdk3Jb*yJ1eW_&(#2Q z%o^$FrCboQC}NmL2*S1EMfL%@S3(h5o5L4d34|x_Za`9oehIrTbiD-}HmGQ`*nK#>bXOzwG?j7wPW_47&XmW~kCo$%^`t;E23DCnqQBA`oxiAqYqc=-rB`5^;_F zbhC3Bj&yng5oVvhLgdp99yxO4`0?vtQN`}aU<*dvB0$u@_qs;;ro^6o(*pu)DEc;* zKQAj~z7I62Lp6!Bx{1Pxj_1fB+#QLQHySTW;tRa#>VoxTuUXDo3mbWbySuMdVY}ep z(-|d$9o!~n%y^2iamJrq!+ohB6m&W>u2M!7&$_sxW&0ccG%2Bs1OeNVSrjMFG+Z7d z^1pgz-h#F@G*8+a+RaycN35aHKcM+wtAALT(dn(VO^k({s$6VXx+9SB^ zHCLuPKn8o*veSkmlgXso^Wc+rhS6jMKR-W04-gOB1Bh=rtN73G*VwoDd1vSG@6+s& zYG1#))scs*riQC`&ZQHz3@1ha{t} zB2JsBN<0s zl5Pqq!j9uD_wU~Ag_8Gqw@S=~x8a#a2}NYL*20_P@0Wbfcr<;V4B7GA!1dIwbAHn*9d~q}{WRsMtQQM4A+uWdUHF||!SSq;tfBkS(rP~2o!!wl z+i&ploM+K)TKe*IsjKrM@^>W^JL~M=cTl)-x?mvzq1^Yy3cAF4Z3J8ii zdv7|h^1~ITch8NPQZJdmSQL2Bv6RQ5FHITTLyDKHJN;UJo-tE|lE$TV`q43J#jN|8 zfjcXIdrqq4YZM@mkbDnxv71^xK{ZDu7KMo*=u`q{39A3R`8zb3p@s;MdB zl|HiJ=lSDZ2zA&XYE(A=k}3^>gaH~M$wy=F$NJwtwX$)}D7eebwI`Ry=IlYIPsy}$ zUqx(9T64~%CPwV^?yFG0NS^kDShzC3Kdqp9K`TZx^F1=1X{SGh?Yf(hYH=Vz^O9Ox zBt`Fi%|m-UrQ5gFW%QQ}7}vc;N~RO^j|*G=w+yH}Wo-wKyaAk|i&T&@H+X>x4; zqceXfnb*CoJPws4RTT^p(9jW^EIj@&gHBB=o2iZT4E6LJc+inSFX?bXu(5xrrRAZO zqchZ-Ho$BzU2=Brp91kCrY70!&oo;u*FZTEZyU4!HQ>(>ikvlq}sd@mNUrx zCH0>55zVpDlM$zev1eZc>p0cTB&Y$q$E&ooroKKYMaA*KL2radHa0fGu=-~@(GttY zJv3bR?|ZJ!8*s%SLaYMT=%Yz>AdnEd1B_7nvGm+#_?a6w6y@dploo%d=HxiG=KN5n z&xyP?BFbmU&veFi^L8cRhr%Lj5Pc1l(QK=AV;G=+~c?)X={@zx$i^QL>E&UfcD<(*QKyUcz0q)1ZzGwKs9KC$QQ;&mE3W0b#-$D^TI zxTtZcUEJ#Y!K1fc;ad4(?XY8TG7bR*&& zvz;*yotxV?d#BX7XnwU16V~$X6dhala!fE86DExR8 zx;}p)YK3ZPaGQ9RQT3U%OG-yL^25wOWcFpUGI8Bh=09+smoRSVO=w8qCEQZ8k+N<3 z+b7H?G7@=^L0BS#oMqrXZ|tPn&1&|;e)%%_2B;gFPK=>pI%d9L!XvsTUwTh|X*2x~ zCUfTL1YRo3ouD>BMQq$f305vq<-aOS0C79><;&*UsGIP|MeKbp+?Ot2&Xu;>uL1x8 zy9kX#X7!rtzm?KpzQNNbUkm3a#PH!41z*ilIQx^Bab6P+XXTvd& z$-}feMw#C<)s!0bX+1bkH380JzJ~~`tgNNi+rhUGtPtl%LPCO_^ZcAQ7zXEs{_TIC zwkLlx3DXaq(tT@A@wCSN!bbZQ>XDs=j-$m6f)fRFzPjIleie+Iw#YmX68p!@i++QY zrb0tsB2IsR`WwZ$I$ePWZ-mZ0l8Ll;Q6VRYoI$2w{MNs)hfG?x+?WgWqdv%VSVL@0 zM@dGIl#*Hwg-jsw_H9%63PKx=U)s@!tD2NK8o0YJfg_5#eVeG2+E}uN$sG(zQPCmF zP$phpUOqlWK0cKCP_kwZ5yror#v-77qEH{C%NF~E> zfi8q(qEAQZT}KDv`IB`ITqwEJj;FBM?xhpxnX#($9vceajN22TJBh*l_wJpuuqZfk z14@1@4?{ykVCY2Xu3WwPUpb1rb7X*n69e7J9Q7J0Hg`u5$`zplj+5^frrzkTpLO-H@hH;wm+vU<-Di^>ZPC!$XIyr0%5p3$edm1{!%Lk= zTBK{{;n{L2eEvqfd0=O^3L~-L6I-WXiF$2k_b!kEmG_x5oow{1pXH>bA3m;oq%3#+ zf|;3Ztw&s|@zT*)xn@>1UKJzxALh)i`M1mjbuWH0{YTUB>-EGh zGEKAWEN3?oirlh=d#70s`&D)4mg@SL`auG|QoQz#ay6vBze4v?3ctq>YI83W1EVF1 zdjiip&g3nmnI+8FO#Hq0*RD`5I8t%15Eh>m)$%e5y+HC>PM_ox--pZTD65q>FA%FR z;`?!a%mm+e$JPa>?YZ7|DmBr_{g7DObOIf}F>{J%ZEKPP_bXkgfxE0o9*ftA%@J@6 zS`WPWL2U02i>EXv%04P->!6BI@iZ1L$!%iS6h5-*7~TC!n=|*0#hXFZr`GMs?%4yh z@7@iw&}^?i`x@Xt!bT-xW0+{r?^iuS<*&f$I^1QpH%^~?ijw*}&F(*BG<(}*Ng}UN z^+p`MYrfMppPJBLQa2)Qn^%nn*CRAfX(7ocTh=YnWtL9Z;JZTw#p(TxFS|O8%kqTZ zz8h}+)ZEMeeCF2Kke_1;)CsDpcYVrEl*@FBWeYGzmoe`3Ngt`yb6IM;QpLk^I{e;E zN(aHa_BPgbj%TGE_N`y3dfGjMMzHkA2-;yJYrI=A`~9rck?O;8j;Xc!uGTgo*DhK8 z+X=ZhE+q+;(lM{!`E2zfhQ`jP`BSsrUj>@z=xEsjOI{|X!^m~5y0ADs{o3jf);(ik zmNT}G<~Yfy=w(A%e1_GSCC{>TeUB%KX=g%OYCog7|C*pbcW9;}SMpd<;#t%9 zLNv*cw4h&Z*ydqpQbfywr@q8Q;$e4wNJxlXx3K~wpAe4TPe?E^HN}5OPmU1Ta`2EJ z0yjNe|J{7I`|O=($1fMuMkN~PC?&Z5tE_zNyzljkapp)mC1Z&=QiA0H5`yBsMv($z zGsb0cBUgPhfkyJzluY@-Ew$&530nzzd>{v!H1c5`*@`sbs&vf+$+H#Tlv8e6`aSU4?gu=Ufj zb>-@;``hH#jq?=ua9O-!ZW$Qpc$Hpx9;aI<5~gT7#Kk`usyCSM{8r3T#~W*hUw5$L z?3TQQKL6wr?H-hKfWI+&K?=~lVWfhrY`qdu2)c}pIA#OX?;s?^*m}L%UHNM z_seI8rSvw3l%*`%K{q3N%N;^eZP;vX2twOOh9^57rGE zrCaw}iBDoN)KeJ;(ehp0^(QZvK#k`s>X{VQ=%9zA6?9+x*1G{`+fR6RqO0i%uag zZ~2uxK;n8j-7PC!;#vs{%7ZJZ4% z;qb5#DF-g$@QnBpa_YT@1s`tsNxL;g$SGxI-L^S0$VOh06kfKsx8q(`RX*JX zI_AP>zvb$2XndCF>u*@2a;CSkJ_xhLo z9!A_%dkr+lWa#T$c2QiWqecb&gr?5N%+A+Dnvlh=xumq~#pC`_z5J(7wHP2vus*~= zh#SRuwFx5<;VZb<**THJz2h zGIu6Xd@`LE*24Y!XOPbKTF1}V*S%^C!vh?)Ov-6H9_a1A98Y_(E$vp3?4ceP?OR<% zv$UI!3iFBu%rr#VE^>UGSaSQTp_uIE;t~_lwd}Y>;Af6}`_62!2LY-WIbwQjZ(`>z zZFAP0-T<9=7mQQz2F`9>8j8BkEA8DXcFe*N`-(JPwU&=?Vkrw40b%IBAYRMTgPMkhSojIW$tR6afymUL2 z2J6Dk9I13|W1eW|%Xi+7Gu^TSS^kGJWKGAB>D9jAf?8$%6$a_6AE>iPiyo*r{Ge8o z!j~63rn=+$2t{VCAmcmbsRE{uo{${x|NX13vBvq7f?-oi39%@PtK_6q@5W@*9lfgx z%x5i9N`1)F4kG3Ex%g@Mg&|D8O6G4d~(?3j=xd-=5kf^#;aOIxz}|tDXGKT@CYl z>V(#Z&!O?c9HZqU*V1c(TFhT!O(#;ir=7#t->-{nIF!-0UXkzj`LWv#YsQX|oSYL) zAr~s`ZS%R$hpT95y?r2NM#;c)fVph@l<%L?)o@cX^64rks6|ee8W6@%%;aK-8pFD$-C2vTJ`RA1UoN8Ow`x5gpnJ3U8{o|~e-P`@LqV`2DS%NBhJo}ji zccevWA-VL=${Z@5Bp7N!8H5mwf0&L0~h%JS>pl(VSV#Up1qF6iM3|hck z3L_a3W}g_A_p!ncI(iHZc&EPGzh>9$DL2U9^PofWSqZ*v$g3n|mq$>oa`E-&{%U5p z8hS0q+3Ju~IKJiXBkm0Y0~oLJ5fsWFpa{g1PJmUkwY8Oiz>MRUyLhCeq|oPJ5hfuN zd_@B;b@(vR7X9cEXXK^0UsC!vl(~UC>R#LTF(l-NY0&FNocW~ojJO;6+HdVH#q?Z_ zC}~w_ZQ2aZe|G%J7fob|Kq`;uZ^ZMznfV1WWvTqXNmVw*2%<%7RKInF7X`DAOHfnY zpN8QK)zXbrno60bFH~Aam$}8>TCKfkmh%~rdnrTJ%BB4`?FYZd2cYNAUgXx|Id8}u zeI0*tb)byhJYt2%&@0AX>sGF8`kh?niS_+1oN>370+I&DdM)u7&}97h6J#vhDUz)k zm7Am{nvkR|O1Jy_^IV=!p8Hy!I{wx#mB5PV61c)5v}j7IZnr}IUmLdM>D5yvNJ$eF ziU;tuhVR^okOmgE@0B~|wCwG}>h2UB;ILcyP^R;ToY_Y#cu;>e;y;v_c5inUd2Nt+ zV`EQRDM@gP`I(e)UVn<(poKZd*cEe505WyTlE-xEtD>o0aPwTtI3{d#rd&c*jQ_e@ zBCCH@*)O^W}b=`@q$+l;^o>uHeo z)!u4y0Q%1O+>Uzq3Xe|4cXJx7ox%t9oJ)qji9;%uraS=Xo)_=cl z%#}9&#FN}L=FpZ!Hp9Ar*FB|YO+E*8+o>R(0eD~JbnIceZOb;k_h`z`us>R^rxMhJ z&wnQOZZ)a=_iFllGF^zv%$brPh5^Ae>8;L$=xw~fN?Y|bd=&ELrs7P2{bqbr@I_HArrT0Rr`Vo%2hr2(2`-T8UfV{`A z{_Ps`TTh+ViwfZ9Xe0ahuADulc7T&GQ58K?@acl77*1CL5jZ%mm4{cMf@XEm*BT*3bp3?HaGwy4+ed!Q}^`wTlb{DggI{SLBr zU{N9?Ba2kCfr2_VR>#>{G_ezE+aIvB19wtAaRQF)&nYSV7@&zzCNV^R#CPkwOLd-#>Bh&w)sdK#REt1n!qV#MM+nWpdvfmH4f&imp%NxUq-+KN zM}^#&(10`#87z%lG2T#QeaZNSvVFYy!ukEXE>RN{AN9QW_(<)Zhbcu4CBPQKsGT zmGYy2C_s=V`Ayw?&EBp5a{pse!X`}Ii2aMXbH}0>&%Z`1oSsWRen1hHXIaljq(SSp zx2_RT&JLB>cHZ74LI~1GUl@LgoizdzWo~S85KOjT%8PQ&AEaY=G!SxNSGz$$f%S0Gn3p zn>TNWN^iv1ENvr;=EIve)X8(#{QN+Y?nYyTBf$uQwY9a%IwQHbuIU5UoVcZo*KSaK zl$AMrqpk7%jCo0S%@-dY(ch$}G#EtW<7o)`w+*PM28>+U$js&nwUd4LN7w=4KuF$c z_Y$xp7YhqC3SB@ckY`(i|AMZpjcDq*c<~qF66!(!fX4@`LPJA?v5emVZEPg1 zo5+!l2!8{B^;Zz8KfZp`k>d537iErAU-<7Ae57l_PEX4<%f55%)%#KvK~d!ybDLdw zx~gzDgGfZqOdUiJaL0|7oteA#jY<>mbA0r%Z22SE1(m;cKlJu^)Y%;eT#y~xvG;we zc+nGwcQQx*RbH1mf6=$>6!+Gw6!9&mAI|-({6Vhrq~?*oaWjk9-~;Hqz!_j;c~-DC zQj=R986A4EaHQC;j7F>G`Wu$W8gUgfgPLQ-_01pOKhU`@%~;2o>k{aWVjpw@%W6zn zbFb)zK-KhlY1$0&{&J;1G|WEcAp%k#Nve42UQz6y<98(l%zP=?vt)A8NOyqRlE2Ec zX2|_p)%F&7-I?IPc@jc&41eoR@7N!MX6K$@zevQ6U|%7uI`dRpRC>jje##}T@*4-M z-^p3bBhJKOYEISAeZ0}D^5N2#oO5(E!95&zQy1}bAihWES4Q_LE9iUC4L?t^(Vz~K z<>VXML4bbib{jPrMYyeJw6QQ5flS*}+0!Mig&WkX*UtHz+dY@@mjeexLzVeQNE5yM zNoqnuQ%!D>1luiEM@YnhjyoXP7hcsERJ*?C1t|u>SV)6e}= zATj$YTIK7RTU+_l=MUd-KVUk#HM?JPY&8Vi@&4HFxlR&{j$dnQb%*UDM^tJj3grQ} zEI?xT?Qr&ki!!-|jgMrVBJL8aoVCqfGn^<2dy(@WF231wAm8DXZ5m# zpKi(jJd@5y&l`44wW*sQw)@uu+Nz}{+pbCIAM!3E^B{ZZbus*el+X3x(|a;!QjSWQ z2YWv6NPIILBxg%OKngFO!snNl&qM1)6=dgf3=6^fn*DzU_Q~dm-0vr6Dt(vHSvY&g zSvh{Ux_CCzn0{qJB{L2kq(#G7O_3N#%(@PsG_>(JME^T5;WC+DJZd%@5-I`Zvu4--=|Xu@{}^OL%ciSVvQ& z_E~<5>U%_6L zw>tr7w8e0@O<#F(M;>O(qe(Xqe7ya)ew&P#+>8zgBp{&y+8t1KI|(5%oAK%qZ^H%wpHw%8bp74}AG zx!Ks*wDw&Ed;*~sVF^YdY%8+6)Ib`}E`T>wlEo+qBq*f&jf6Ml5(7fpYpQ*kNS@IZt)Dt=_c2Fp8?#5ehXk z=vbl?kJ+j7-nCNw=JLbJNu^wBKWMZC(Z`P;?P@L#7|@WFp*(rA4H;edFo^#24zObW z7%efU5u>)mvjeyP`M^_*;c$oP1moKg+mxgfcmobif)zw+=!{Z&?dd2_9R3P)4Zdbv zK1n1h0x$=krr*he**Z$4j6l4|yIaYv4_xCeZu-eMxF+u%-|xG3^q=mEeH_WQ8v>y2f!6 zw!o>E*NECk9)=flxD$W=l$4X}e)9$yKL37pNe^C{a^PHM_%CscPAc(GvWe)up0sg75#JjyVIIcIZFt=*D$XMA{;yIE}MPmc!YZSOX{5-QM}(W zH(j+1*q5VY#*aNz@Db-DJ1i+_iir0ZjT-mKkf!gj2EbEMIlGOaebQVDD|2$Eb z;m9$`$lkMVUdnon(i!#0A5@mnkn-VrZcwAG$D6=sywg}bw#bk(Y{o>4gM^Ot0%G`p zjS}PN(tBxXX$e*UWpB^Ope#{Rs>jL!Vg6^hGI4z1Tt3!auK_cT--7^kV)mU@(orv9 zHgL|xj&qP7=r*rc-WB9^)}JA_TBE<+JW**pBI#fU7keJ%wHBxyzaPszK1+C&=kQzKU82(QjX|^L zo6CWXzn?zP8GdwPJV$Ov|3|O}e>5)yY@siNr{HzFSauG(rmD1M_Y2z4Sn;ONpMkN_ zb30DjG~7!;w_?jRT_nlZC3Dxep3mKv**DH>F2Mp-%x)DaAMMaOMJ97T>=LxX%-MTD zfDjr$3Vyi5&-j=k{P_y2{%vKJme(^7KS9~(NrjGH=RYw}#&DgtS_De7>{yFbp7Uz! zB*d>F6>@5`_8g8${SA(3qF)g25y6%(VQOzW$ooGXmv41Wr5A7TA$Q`>UG=&3Cu`&J z8&2M=HZx=PTA(IPbM z7&`oZa3s32>+lU2eXwXKQ{9-g>3rdOo%F`pku|E`>&n)g*Z0e_82B2|7wbPzmH0qq zo9v!ufNG$(zG38>=_*xkzB0CKs$C?8Gjg&$Mr+D$ zwbU156$(O@D^6FeD)Zkb{yXF}Jzr{FD$CMn&(=OWpb&J<M$ao;V=Vj`;G(e?RGb#4cGU)HOIW>_DPm3@%sHk{HZ(da#X zClr<8T=#=B*Ogg1#2<9re)MW=#y~BECcmOqWZr?0<@NPp+g|}2%(Kw!VHIwVNVkg`Gz@N$eJo{ zx&jRKKTADvIOyOYo07ewBQ1gBCJ8b0`fS$|@sseY6M~)`=Aa{Bb|>g2gMDmaJ$nv_ zUewg$8(`0TH^F*1mqb~tql;bh9A84)>zSDZ{YOk%09P)y`D^nHf56z@i|P(}M~&Jc zUitzD8?LaNq~tjsAx3J{E^-7qutz9DP&m5!vju`tvj?Jp#HZ)7;Fh4&Uc}msae67Y zdi&;9z^89R6rOS}8++hxqQFZ{UH$jQ27J`J2^g`$!N}O-=?;~6dM}(`;nv0|L>}K* z=3ikcjcjjFj`z7R-0uAV#+EKRJj<(DK?^@7vm$w(czu|xaJG#}7LDK=bo5b?Ax>NU zHYmoc5UeYLCx#9PRbw_Z7V{%aNx;*tRgd^o_6Qct0jNUHHt)Tlv@%q1|53jDp+Wn8 zCN(*V$ePK!afTxGa5f|U-%ZJE|7tM*5>XnsD<%h8ke3gCNluu(OypTd{cZe-U4 z)@#cZE@*O+|8a23$D+BWcpra~C(cgeuJ8BX^CC}E2hw-!KeEreY@$Xol|$$oHPN#5 zgLd|mlzmwPyXHNqhb~IIY*c456Md3bFOjE_5&sn!=6BL^#nQxY#3p{vzbu#jT@CSr zHP&~ONK=J1$7-kpf-|BGWM|loXq*wQH7+Nlmk5VOU zmeb89tLQvA`+HE}f9<^3;8K%FfHvR22luPTjVwc@T)Y>C6xkH{vW^EbeuQ4ZoIW5Y z_r1-`wu4Y>*3!M(bBEnG?tGTl*f{Pg|BPAkVC*-aHsxwuLn zZP?H>ZdQv(&3wGN(>qgG=6U4dSL6LAZ5yQRU=7?pP+EBu^?$ztmLb8PZ%*vH|7?Yk z$>$Hrp^$hK;l!r5eBVGKPBy;_ z>f>38?*jXDo+S8|g??Dq?R)jwAy>`6v3RGk>>ON=9`HR>W6JO3yro{S`II+8!nI9VGy$?|^Xl`_6+#J` zwhZ2115$-1EgbwAqRa#{&S^G>`ol6tzv4Zg)A7t~_-^jf*GylD?+7E7J1&Fd{MVo3 z;uv3lMt_pyp9qAloPO!rb+{~IcUM%gjqM{wc}5hP7g?!96uO-D_pdf>J$%9RSF^P}=Wn)jx+0c}MS6cw0Pi|&|* z2Y%dO>xU?Adj%tsctpW`$&YdA{0Oqq2!6!bJJ`zgQnyN6n<>7HU6T+Ldy0?}61Dtk zUPA?pUeyTBEpztU-od8cwRcBFfm!Dp95uBr%6N5%O4nu1q@REmYXf1^h`>V-?@Mf7 zMDPxM3c4?-DMZ=6VUGnNhq**wU|q?pJT1!h*^(0aPqxBgD|78S+p+UU+{#lWqnuWb?%5|)1l04=s2!a@vPsyKR(Sk6aU z`xvQF^D{?=sR>{bz$qbSq+T3N5>MrqR9^4XjJ{g1{Eg`(h;Dq+r)%<>^M)4pxc>4=aY=# z<@h`9j=jw7?=#O}?hC9nQ*+CU|7zsUqRW8QDiizHSb(NM;NwiOpA^ilF}KV_^8Pcv zZ>FdTUp(Y@r(EDNZToO;a+85%Rk=TN;^ZV$loJUIMAR{A8;KOHU?HwG54KN_>SdPO}pm8_aoWY@@ z;YIU$fE7Ed0WR(I74gKsIM&OTFMq1^X#VhF9Uo5n3Fi;mKujOMhoNd99Z=^Ln3mnv z6uN=w@VKMUi(zWTzR<=>93Va$O`Y$`tlsM~w1@Ir2akiVR#PK-2Z7Z;1yi1DB;n-r zZDV5tlgw95Q8e-|a%t#*T#5pFO?d2);O$9fAPI!sYi}5oju(Q=6h!K*RI-A$G zVQs+7Pp!w&G|fdcEc-Y(Yflw51lmIoiF0NJ_5xB|I33`Po5hd_^}-{HfsV|NZ+1>#H|fUrb2CfdO5TmT_`+ehMO9u~s+W zEm3)S?b@|${oB?icv^#l9CArLg<`BnL^XD99TNg-{W>Qf8~2Pw#~`$*T(Y2ojYTZg@knqYYC?Q3=R3> z%HjAXEXj!Fzm#1xM#BLfTn;QHOxWa_4jq4^eo#s(B+@eec;-Qh>0Lac0YxIii`qqL z(FP|aEe@^D&GRq zAW_CVf}6F!i`~&-z(Q$iW@cIGK8YX$=feV6E}7Wa)*zIH=-w5!JS?8kv9Xrbo^!AK zekpD)eahp7_z4lv@P7pSTm5i56oi$hmsi4RXr|0W+00B$ftsC9O$D2UGuL{^8DH_8 zEBrhG=#rouLwkjra|;ezeBg5d(Js4}Vxpp_&zv#4W;^6uu6v-x@)68=E{KQ&_J&8} zHvkZ1(j%IEe9KwFtXxz{X&YCn_L@`f&704HOKj=x;gkWFl}7IbxH5@H`14+^bN;Kj z?lMDOHoMQ$*1qD4mlgR7C4c5j5!8k?8aEZXh|Vu#lh1GWP7F4&nI~jtXA^Vc3xcR& zieJ2AOj+rg`!g4;0N?HRvon zsWsloM((l^I_nAwk3iU5rDMC`x+)q&n!Q8jie;U0h@82jM`YQp_H_25guL{W2qN}U zJn)i@{J;fzJNw}sshn|@f?LylBJO*)l}5a@g%+>biHoqf-d?9%|wQK>LH!mTDph*SXFFnGJe zxNJeZSe8O3uiu4}td67UPN}YcUm=xHAbD$+gskdCoLmk%6wqX=cGKyw;j1%k};JHYV=8DShzmF7LY#iF>1RQOP^V z5_0dwDrZ3_5;o~E=e_(zPmDcH@20>$iEs-=NVUJ}Ka;pwSCb%9FqXGRg7G7l&?0rH z+Hcl&*@h41xMRT5ed+St;}@0kZz;#nIfdw_D26ZN?uM_!)VHWSij3Nv+oSU+!LyAlJ=iy=N>ea&e${#}Mj#xFRbT_h%$LpDFsUR4%;Le$nI5 zW_^T&ZO*tJx-~^bOL(wBQWJYt0#+G_YY7-PhNSxc{PDhz3P1`y|HN7^ND5j&Bex_%_8H1U|(8V-ph^0t`J= zLD(UoF`Y=N1ZbaC84k5|$j_zfDbmKb{cOXa!LN7G;_1=RoZAa`N;tTp@32`29~KxWIg4XX2IV zv!nVOKfEI^jPYZoOuZluU$)l1m(|sOx{?%7T_GxU9PwXBuzQhwLpZS$MY9+Rz|c^) zkJYQlOR2hW1En6eE8xeAA8U*z8&2-NE|l1b5p~m7s$RU9!FPhq4uv35$Pa3v)^}M| zJdrqAMBpyb;*Io!D^&q_39cplEU5fYgaA$0_<5`kb{HI#uED`W zdZM`@#f|RBVo&(x?rf%+UQlZ(muth7=dRT#tTu{^i{aM)HMDcG*H{93+NIH&4pi8zx)7c}%Ay;bhpDfFX!i*&NUBb<;m4*^`#X zG&!O)c9v>p+Lc6bhhsU1%jE`5&RtoGlJ(=?Cw)lUm7x$`xILlWzK00{?RBsUfH(d9 zr22BsV)J|KimXSv>OVq3Z;k~qt~%OLYer75Q&VjRfmi%U_i1rcm{Btpv|>FRxJv=} z`MCO&y1KDnWxZyAo6u1y>?WswqkhUafC*3_NGv}ZIgNBGl-fu3@SSG__QZNv^CFbwfx+gf^92Z?>t!=zQmY+Z7a_3dU`VYQ!8r-50u;CWv)BF-E>SCyo2T z=!&?1mMtdP`!z`nyL^=2uAF_CJnL|p zLeIFf`k3r=Qi%j{n4_2R$tQ86yy#+5V2xkYAM5q(rNIVV9T+(T1l+ExixoG|S>r!b zD%LC>bQfqhWb?ho_Z-F(JxBu%TjP&d`Jb+RHCA>dI5|1Y%D*Vk$mddSBIjPiR#Hly zLq9KBWQf5qEJLQsSnozhiIjGBjJ%H_+Ev-9nbH^Suw#d~py0U(NBln{w-8nZyD4`h z5(ykhKkUOcJfnz~+KJuk_bVH*E8g_8Bvy$Yz!yvd>4>)UMTFI*Hq;t^emlFcs7N~n z2>F*UiNsNP-!^e{LV_XjS*0?_&`6n>;51y7sZtjiR+EW6MtpxfjR>a4|czJuD61bJ- z9L$I2TNv8&*I)C2vSh)Vhp#^;3#bwrN5Wo`PQO`KXL`uhRi}jmE_Qu=J^WlCyhk7i zjJs%HZP98Z5(*8(JmrUf+l;<@7q^v;Q;k3$&MyM=|AKPQwNz_tm$a8$TT?XgV{hNe zf*7TH?{j+Jya|tu-C|nN8SaeJ;$eNYcrzsA&Y_y#$F{QbuUo~`jb|5}c+ui8WuJom z4V>(n8td7d5xyJ30ThoP>k@D!otmD;F~yKFFO``s5=o^}wL8o~n@nd&NBg_FS~!I+ ztKYnS4PQ^79#Ad=jR2y-&+m?$N0jaz=E{(7%7_F95|%oC!rJagb>aYM6B@v64Ae6h zoB*NMC$NJfP9T*D&oodZnmBagD80i3#tE#VQmv6ea=@I}gT)fJv+2ghiz$?!+)B|* zSS~M80>|1$&+6~rpY;L*B+%|)+k?05C5#Lur=GDh=~um9 z#-FV(Yx-zr&RtTzVW&WqIgsX~oYjl;NqliXdpZ-pWHZ>~GU>?qn({&GaO%6Y#@qqV zz>I9eq4NK|Me_wFcq-Wa+@bc-sj$XYwCPRz<)(&g@=^wo7{jmKZ2-mOOoqu&YaPmL$ CsBx13 literal 0 HcmV?d00001 diff --git a/tests/dendrogram.spec.ts-snapshots/Compact-Radial-Dendrogram-1-chromium.png b/tests/dendrogram.spec.ts-snapshots/Compact-Radial-Dendrogram-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..a1171b06c0f69a4553842f80b79d31b24c1044ce GIT binary patch literal 37524 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 Us4!9-GfgBZdQaq?knXep2dq`btpET3 literal 0 HcmV?d00001 diff --git a/tests/dendrogram.spec.ts-snapshots/use-Horizontal-as-direction-1-chromium.png b/tests/dendrogram.spec.ts-snapshots/use-Horizontal-as-direction-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..f190bb501017bab74ab2e398cd4072066731c1c8 GIT binary patch literal 37687 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 ThtJOl_&Ik*L%CSdJmCKT{B}-L literal 0 HcmV?d00001 diff --git a/tests/dendrogram.spec.ts-snapshots/use-Radial-as-direction-1-chromium.png b/tests/dendrogram.spec.ts-snapshots/use-Radial-as-direction-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..2eaa9438322b29b2a5fc757c3e72f4cfaa717548 GIT binary patch literal 28766 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 literal 0 HcmV?d00001 diff --git a/tests/dendrogram.spec.ts-snapshots/use-Vertical-as-direction-1-chromium.png b/tests/dendrogram.spec.ts-snapshots/use-Vertical-as-direction-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..502d7fa79470d327ef397655ae80b6095b939ffc GIT binary patch literal 32859 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 Lx}aE~U>@{8DTb-v literal 0 HcmV?d00001 diff --git a/tests/fishbone.spec.ts b/tests/fishbone.spec.ts new file mode 100644 index 000000000..c60673a49 --- /dev/null +++ b/tests/fishbone.spec.ts @@ -0,0 +1,14 @@ +import { test } from '@playwright/test'; +import { it } from './util'; + +test.beforeEach(async ({}, testInfo) => { + testInfo.snapshotSuffix = ''; +}); + +test('use Decision as type', async ({ page }) => { + await it(page, '/Fishbone?type=decision'); +}); + +test('use Cause as type', async ({ page }) => { + await it(page, '/Fishbone?type=cause'); +}); diff --git a/tests/fishbone.spec.ts-snapshots/use-Cause-as-type-1-chromium.png b/tests/fishbone.spec.ts-snapshots/use-Cause-as-type-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..22825693e9c2c6896b84dc09487b2925266bd16a GIT binary patch literal 12990 zcmeIZWmME__dkpQC=wv{LQzgdf=Onl?I_WsnK34Wp?PewvZLO?)3rl=sJMnG_C`{eiBX?R5D zi^4SgbIMIk{vknOAN?``!F2*fnFktPNo&*34Pq>gjyEWr31shUXb4_HkZHR<7&u$* z+GES@P-N5A#h+KQr>DiqtMFUQG$GT*Hm6#AA<{D8P4zQH-t4q<%%@M6I9VMYy5R3* zC}iL^zP6(Geh&P0c1ztiz+G#o-b+Fs{WK}jIZKd6DUYNeAV`yFVj#FGQ+4LAm*)@! zPcF`q6Ob@Zox1;iYwgwCn$S(f^jv57 zb!V)+Jbao_=~e1y`ckFdCE8)09<+6L+N7k;%+%MfNxTzRb9L3;_@=qT*m~^s)?jIA z{5vZBuLOE-%1~C~5aTtw(M4-lcI7WLx|*gNJ7<$buNdlBW1dcR4Cckv2Rh5UGN)AF zE;?!;R=trFr)&rFxz#^M8lKX;JuZ9mV@3-~n&1fsB4+_5vMVq~lzi-5$r>=~Rl)Rp z%hM_%wt`06V}5;!ow@(6^^+P42lVLYh{W0|9j1F4m4y;=+C0k#H8qFx%EWAou8k{G zk_s|YZ|XkV9o0ISMfm%yPVuMhq-l3MW(>Z}yK92mOs&9CE^DrOmWy`bcDDNB{2Q_;EdGd*(WSMO zP25AwSYvK+CBgBwPjsX!x0Jup) zU4pbMgM*B?O}&)&cRm@_|0X01K#wvczcayXm7U2VYG`Xw7i;7#^i84keJ@=gM(JDf zS)^#ULvFF6zPEarS94$a&uhexA6R1-P-KfzP&nr_swAUAd3D#<)i@f5{hwE=>V-8JlI(OzV|L>gm)ILq#fX#3%8m($<+CD}oE)(?QBPinO?@s^(p8)! z)?xZUw#RIGhfa15*U39-PW67!oaz!>jtpnis*wDV@`L^SH?z8pcJg>d9c7#9H=I9w$oDmAKw4f=IWb-R8 zVhyZu3&R+%4(vQfM*LEdV5G`gd)Z+h)!E&-T#?%FNi**v1qE5V8_wm*6ItDH z);UYW?7~$mL3tM<%`k^%2_BxcJ_@z;5CNiqkE>ahWuh!Bzxx?)-nunUfy=qk8ZRY; z%*n|)fBt-Ye0(KN4-WEKWPWbW9fL9~8teaX$E-8*mZYR)LqkJ*1e28K>W_uq#DIW+ zEagN>dir}-eMxC)X=jMZzgQ12v$8Jyj*wy$aW>J=&`?t9>5AbZCZ$drLwkr#!@GnX zCa%)Z=r;Nt5?-KOovI${?zY3A>Suhml<-yO{+1Um9m6ldkW47b`ljb$E>C$TxzNV%qr-@+{TR{nK z#{YO}Af1ZONa@j|lWQ!s=q@cQQ%x4bZuLvCv9hWpiEQL#rO*mkDvcEy#_<_9SoNpi zvFIZG%EGEDFSu7-U0pcspY3gf5>wgx_wRdoRgK%LsH!@_?OR)Cr>4%pg^7Et2*OJL zl$79kEgBoyRLaDx2K)awj(AOi_^+U#^l|%?d(T~EWMoWCOrAV>qNkVe&7{ij5dUYk znN2yteYWW}kp;dhq1W-M*)Nr{@5hq8(cs`-&St70B2 zq>T4|cqh5;9bw;Xw$jMUw>wN$=(34&apl>K6^@UOLxm-aBm6d6sbCp+nH3ckA3S(4 zO5=t=7+2Vj|0pr5bePN>Lu0+`2dr0zbJPtCrr`KnTU+pU-=*&#_3NiPRg$lA^(Be8 zn6|y8>6hHk?=%ky2^m~=hl-K#SQ(BNup%Xrh9!t#l#rQAMxcVpQ$Q-~v4%dw^kOjq046n=@B-mTy0fu_Gl4C@b3{OQj8yOIBfHrVMR0=htPL`D$7s zA|etkk>K%o`N1ROl1SSo2W44VS$KYYyn6L!sDi6&X;xO2{A=N$z9dn%gWV1Pm3i9< z2j$N*FDOGT;BNt|K6htl_Gz6iys}-gKU%x{sIh96se`Pl;Jl{HNWFBq0hJUke|?QH zFTq>tFnXlEwqE{Y^h;%R^xF^in5Su(c|>^@U8eJI7j#6^MYa0UII}HhjncLHri6sd z=X<7Gx@dkF3SB@r+LaPI+6~fI3VmD8HLg-mDj^IJNJtksv!5F~tK!l|$=+uj{)==q zTknl{D~*1dNV;f2P8#fY#oz|zSw_r7Q z)~D&NUKNB|ICX}Idh3eQI)_%)9*gLm(CGvTlhCr_&=RwDa(WTxu4oQ%DC5bBHGrE6 zhe^uIm-(MHy=o1mN>s{Z5chOPkFLcT`{`CWKTDPLwd_lxp{G9>(KeQqlXIMDkYHo8 zIzBptBdku8pCAX;+t=G0A99V0oI&g=T!2MabSY2CTQWM-l=>=GE{rHi>exG7ZYSk@ zt*G0A67;>Bn_HG@Dykld17I|+^KxkqXMpYB+nmo*NnV+*#leL>l$KUa5_umNhxpYJ z+|tqluiW3;doD)nXw7cP!Qt*WEr8hQ(5p}Vf{Xu1RH9k6xUeuW5zrAf{;8?Be3(b>qfI z-~Ao9x^?JE6%`d&WK8uUBirK#qHI6)gcqAg5RLNmNw(v^WY!ztl@2ovzH=S#<-_TN z0X?^Rg=I55*CryQj=Z4de0&bx-H--Q92y#Ge@nA9A7|Wfghz`dulGQ^_NS1YKOYJOt6_H=W5te{ZkJo_+^oB_6DdnrA_5%xKlE#(Jn^jv3@ z|Iyy!moI`K#vTL^0VefzcIIf7vCcCNwMzYP#)}&Y9M}5Y&CcOQydJPV7;8MTxJ?ai zVced#cG|SWXS0)SRJGfWLs)psv_vQM6O_B8-;^swV%W4~m&$98%a4Th*m|Mh9p}4Z zD!pqwP+g3U9Hd9E|)tfCiC4FlB{@0@%%dlq0 zR&Y1_tIU|MG&_tzYNr7t#&dw`KSn17Wue0jouI+xvO}D*QAApOKTdO53AT69ObLa& zs@>$WT74NKkYF}Xx=!oSlsuVW|6(#hu-!qqN<5n6zbe6*iv8MuJNPH>6P_s!I8rN3 z@6)6g1sv4>eeP@KRnq^y&qQ5Qc&gWOtDr$+VmRmYRVz*{H8nNI_B@izyVSLvRDH$R7ppm0 z;UNE(`i|G1pELrNUS3|@`W4)Kd>G(75HxEO<#hb!9cBHJwV+Iljg5(k10Tw_YXrgp#2Z$#lB?p zSP=y<7zG92+Spx_uLN$6-qjMVq<4syMbGq(Z*|od7yp?JWRi4WdIF8ypDZryi{A$J z0S-2-_3Ztd6hy?tQ+MyltOupN2+K`~Yz;;j^n9oBo z$anr~Nte!(lZS_eVYjzeXBz!YO@CFn{HEmA`P1)zG=$f*OJ4|Q5Kocv_k*3e!m1?V zci;s*47c7TLEB36BWT*Y8~EMI%E~TCpUDYTx7V=0zJ5HU-Sqi_4NpAWJ zeCbRp59jq*lep+1lacwx%Nts@40nI{S)a0S3%&cAL=)=F3$fgFx?H_y|KhL^f$vH9 z*}g6seUrZ*IpZ)AzbKvxkR9X(a25BGy98Dz98zpef#$Q{d@2jP{C}f zDF;7~k8C(N7Uj)mcSP6w`@gi)+$YpTcNu04J@@toJT8Dfhc-1bG6DcVRXQ0vIywSZ z6hCXG6|y~P5MY+J_V&QQz|fB1D{PX7+e1Jqx~U`8Zi}y8oxQY&9Ww?w?UP5fd5FGI z9x4EB!`HC;$>XwI80|F%hC_5wBW#5)++h@}vKVs59zexp|=SMvb zWvBdScz75P3zwDZSGwb#XIQ)QQ94ks($RNkmB;QI2sEmC8k~Tv58oba2 zm9`_f*o8zVqblcv^z3kc5KIlQY8b6h&4|ksBLmp5$^u)%>X|MwXDh44J7#Us4m6%_#ubCX$+w?1K}%~F=y^12gJzG8kFT~K_@v)(QNpUL zxX*KZ$CEO29?XW+@xd0jvV8r8o_IHqJy2RRE7!M^zB%ME&N{MyGSsLQal?)5FSCUR zOmO}XEbj~I++iflP0iJet?vFu5n6}G2vkW3iA~w9cF`pMqZ9)spQLy5YyE8<<=lim zikN}OmrDocISp!FudwiyxPL(>>#m)0g8F`u&@vX^qlCo1{WQG;ZbbehvqyAVASVA|C(a1xW3qn-!2F)te1*kx^0pd-HLLl>n&PGJ{3N{=YWb&mgh6Pmwd`q8gV@T5HkVsw1Sx|a{)ajL z+IU&JSjVLEZ?Yw!q;iqpBQ9U+iPbosxBBfcHZg_b(2ULtJ);#4kRv{-&gvLJN$;BR zQYiHWdrg?lJw#Gus73OSah2)Ulccj}JIw$Oy$TG(OqH1RBsvxD9)P*Qt%-Y{#bGe( z>qi5P#|(^&lJ-A}!7km~?-A%t5JK*+RYovK*!rGmEswrF5P!6XcyyU%ztPUPRY^&S zdX}=Ar;8|ZCm$fbBwap&QPlO%&u^HQ~ zy5snmr2Oh4A|g^#jRT0tUcP*}GFq@-gh1KA`hX9XHHV50K7Ss(-D9AKrq>s6ez@tK zqQ;|*KhG{bKL}=%F^4k7c`p5#M$8l#)#HI?R1}o*7w0W}@c<*3TEHqyqm+ci;h3?% zuUpRtIAgU)8r5qR=%*g+Eh1)oD?JkLLV{o! z)oITk+%aS1y^I}5XOP)hn{o18ufd{0VIKDg^pif{odt$3(y88*a$7u_=kr&r@)6~e zIzHOR%m6lNX=zPh(O}h4C=_hXy8rQ^g>ij+5$5|x={O(!au1C_h5a-qGa0QQHFm^VxSWDKbhoLOMXI0Q+M%of(EbC;f)BMDpC~2>Qpy?>z0I zlzSE-SkoE&HULtmdgcdk>n;ccA1CML_O{PTPS(`a)URK^RAgj%4(6gHY7zR}u|a!V zQYli6n&?sOLW3M|vxMr8s%8`xjmUTd%lPNMT~h0xME%a@X1m0OjF^q6zN*N>1dCic zC6oIgpyHCT!f;~Dgh1nc&Z-wV(t+gZ^2eSd^9u_*0P&QRl#VkczYi%SmxfDz!_wJ+ z1P=Fcm6Etlwp4mSXOr5UHCdS>f9Xni z2`wnGh(K~(DTagZ(xcqGYrEjLHld>WLW4dCZB>%@K&8W~rHCU6qf~G^`c6DY+e29N zXn|1~D>O0%o08Yud-+e{OiZx6Ym>)2X1xi&Pn|j?AHj4239=cg7}UooHY5_MpNh(U z*8J6|zG1qy5-cUGOSR{k95-nu19b!UCZs>Aqb5Xk1Q{q-`&+n^dd-m_3h z9XJ!JcPT544CZfaGKMt>T@%nexYl@P+Ywz|T-wRYyhlhV9M_r`Jth~Xcd(p=Kt*WD z82Qe}^vCiHnLfF8V=9j+($H<0xFs)91UZhRCsFKr-yFQ@9@n*QjBT!;cvh|?6cuwL zfUyjBJ=(0}#<aW?uyqqP!^KpcT5WM;I^lG+-y5#O10P1jZa=EBZR^X}L< zIO^Ox=>sDF81JBtU#+2#)t%7ThY!|*w2=6$|NL1Dk=tK?{q=lnVGoaAn46=Q^bz6b zcLfndLqh{8U~lD&-{cpYA%N_J-i1}Az+Vrm_sqU&knqnxe)Py2kkZW56l92HZ^AVy zszo$f9P$D1`AVsh5+Wi$-tjE_a+UOx;KY&UF-n*p zX+kM^AV8`C^!oAR2Q(vSDxe)9X=Cw98OI}quJ;wF!JLx%ekKd&dB3bomE?qk1aH9V zZvn)Z$x6(}K*miRZl=n`tk!c4(l^72arvyF`T2S5^3dYf7iR!Gg2KZo--8oiyLppa z@5_=FPSDCi?OpX}fNxMAC0Ye~RJ;b%Lbe+2?(U$RK*4}YV*MxJ)0cR<_p)cUIS`_& z>FMc8`*D89sj7~S4*%o*nNdFQR0VqFxv=;k(-QAGtc(?{Gy_VMbr9(Ge54H=dw1{uP~1bwUf~FmORYt`oyg+Tk^1tGMcYr$`^{W^c;>e z1PV9r1(&&f*h?i%Io(XoPuJ5$p+nNItGBw$8_hp?S3>x&KQFCok`scjeK$Z)7@r$a zsxD$97yX?mCcP^R39HFPu8ofrJ18X>d(249HT7kNogK#C_@e#_#ri zNbMlpp^)578@D$qF>QsIh}WA^s?wYCC^EpN0l&D0|iDkV29 z;E2M! zUFDu%T!iF`F08Gmrw8_9$z9A2Q9Q`_4AM<#M$SpT{Ht8%xeQIyeWm<2k50#}(biTJ zSQ=K$5Y|QLtv!h?5zy+eKEY|0@jRBoskPvjCjf38{!&S(HKumjxjT{veiy1NauS%Q z*53T*S*)yXo8;dw{2TD?45}wj{X-Hbr189>w!}gNp^tzKs$18g1-{ zD83-@dBkoA}LyMQPJ*NVl=9RK_lU|8cmUT!xA;)Ie%?%M7EarLm$JK&L2V2?^tsSV1$GwUMHQ_g-J1GB7mU$D*y)$UOxT@SFh& z`xs#M`s{4>d-o2slyf-OuWG%Zos@2y$nP?_Eg~+ie{5Hx(_`s2zOEsc{xoZU#zPK9 zN-%c>Ln85fb8c`!Yo4)gVf$T)N-}nXY{+A)(qf#ZY^R|1S!H6xlMvj~mWT$O&iaLVE3OUSHF$cg6l zNVGFw<$#)>UqhHtp&pg_ws$>id&y2-u1{!Q2!}4*L|;KBJD3?EA?zETn0uw=QV&|$ zJF*Mp1j&)V!-OFjtbz7}Iyz}BC{Y+Xf#-7f^n@V;@Vwss&e~YMZd6i|52T0CFa^eq z4f>Ui<+dYW(head-@(itp%ab-64sDNR;HL~~0{Y<<>3xN?%nz|4$49FCZR(S9%^SS1Uz$tVXNk1hf~*XXn7s;b%# zJ`e}k1MQLOv#Dr*^0NwO1S@S=WK<6;0V@S=24LjQ_3LS>sggx?n~%UyLfmzDczC>( zdJIa{3*3)bvLj#`pjP+yG2TjX9kuW;*jSaYH3^pDc-l+rkoj!>`6J@|^FCZZOrl_F zI}AkZyE_{QgKPl&knr&Jp{#zGwuCcD9gXTc!DF^C+JvDP^iOw32Q`eVVFU%>V&u0s z55z73vDee5PfyaMEJgITVBjz2>RFasihAX7nZ0YieTc8)fW&7@d|dthKd7-KI; z%R>p{rb<6OJWOnLQZ+rh$t)YJ60cN+l8}&erKDq{m05?@7z#2n=HBoKE3E?HmX(zi z6sZ-KsXJm~@|e+r2}+rzi^#33@x2RD$hkq?WD%EN5YTamA-y!D@?!@sbD0bN zOUu5==76CMVLqtSe^_1U>}+AYZT-VcTQ%3$Z+$`TE~Ig%ll@0`3Xy29)296!OETqd zObMM>w0|UOX3l^`d>Gf<=5z5nM+v9rSVQr;!iCFPF~^8JOj0X5IpUyw68$CHPwGab zYsTVfB*m}MPpHc?H9L%FIkOht?1y`7{zmN3e{GB#-x|Rf^k^U>(k}ZPF=NlHNd!qX zTh-Ld|B+W?n?Rn;PD;>^Ra7j+oijno=EVFs|Kw>e8IEMheK764p!H2=NHm=2Ca1WV z2ftLq=zA-=2D`p;E>A?B%B7Htd48MJx!UH_J+WxFvvGK4<`jnGpRWz*P~X_|=-A|K zbdM4G2VAS9L!}MTxB`44oBwg2ZS~AZ_UL+5VGeWp)0&;gL-D!S!WqT)#XRCZSZ`oh zsrnTIc?V0A1vg?G>@s@m`TsoS=!n7~I?~$bG@^IQ-=oJ`y7f0pWo5W2MR&vMRofU> zJmPv-2L0-;vMMCUsyXW>kjAW9-LM@+d0sv!hifUN_11@tWnQW6gV* znC|YD^!ho&cXDSw`|;(>s1G*8v<2KkX9zCc3N{YG47pl_2_hd2?gSzAtF1m5=yJ84 zMy8gnl^61r(73w4l`)RG#%8X>B>JBF!ZGKWxR4;9{ZdjR-p7I6@q(Sak(yGS*+!Qu zR1-#HbfwLQEp<1d-%j(YGerkU^OpuziFCg6{58kUSXjF8#pfE&Og%FNZ1-${Q0aj8sk-R6dh*hVg2s#09c)~$_58QCslIR!L1 zzgN}Og-~O<@p#hd zywHOm()?c4^o^X|avhK9WMqhVWA6CQy(f>`uh-Ae_V-w5_oZhd*mQu8nt zz1SS7`K%kgdVD-G#T_ic6HGOa7wS}s8j?~xAY7)tt{8VqSf5CORd-p<;3i>pWC|yh zilWQ=7UOrJcQ);63~F7we@i{-jcdzds+*6ar*Gl9A6XgFdebssu08mMe27|xh^$P; z1E%T*Ra&y>122vm*4D9%KOt3u?>?CiScL>#g=rRXtIqW|^c;1}ZTId_K5{9ghEL#d zv$|Y#`QBO7-ePc5r7+S>ZjQ41wC!GyRXP5W_+ns4L(NuQG_|ZuZ0fr>WY>F{=bz(x zjvkl_WJE=9i|$N1c8Xs1&^(>+X#Y(qHvfwqduW709?_=9+d7(?!Q+wo%;U1ZW)uvP z=kko_j$%va-@YP`q#^bbZ>mOD(l=Kf(Wda)XD<}S?%7wg7#A-R=z+ih{Iym+{2_$QIUs>Aeb}qoPy+1*8{|UPJEz=}meK zp(veDA~kgG!oAPA=l;FF56=@NnaO14oAs9UuHg4nL57UbqK*cF`dCXNyWoG1P)m-S-wKM)qA6Q4( zo!j{OC{-lom(zjJbw+$D~gCD%PgMUH3}%i>wnT`X|2<;ABRa zM^D~=@Lu%9Engdw6GRj%C%#^*qd!3@S$68pyEDiWPyhOL;RGqu|91M{68x_U{tE~# zkMJk&tEcuS*X68lGBhTPCd4le7Zr~um2n1iCg{dSWe{#1QZD_X7)T9-7qw}0#Z_Kg zp~jQ8C9rp$HR9S{7HbrXP}>x@2gLWgo|$o0*w(^dAFU_~xp?G7vdJLj9H3F`QmoF4 zma)}T$hAr*{B_u$teUKv7QrV>Wk~Z~Y^k+t$n^}BY_**f{`#$y>B;Lk3Q}bfBtc?_ zRuZ~*%Uo2-N)HkBk`2p=XFHeiH7=FS6PHDHkXaK`Jx3xV-_6w|4c6$9zAXhWa@tDD zg!YHxZ1=i6w@kXfHpv*HqKUc8Mk)(>zi9@LNH%m>zby2~%5`TGs5XAgPoBrqKbm-o zq{}FE!o$%Dn|0`3-(egq?6ezQs2Gr>-%6mxjUBv+d@R|p-Ja`$BzG+LOulkHT#klV zP*DP*T1vutB~+mD^dU-uS$92(nK+oG(Jx^TFVe8}oqt=nnI(r*zO@sY-y6H4iR{GS$B7HE1hf~78>d5RPQ?_NsDsnuFTGE8CtCbwMT4L zOVT@Si^p#{v(9;YnhqZ>j7qe-?Q-$zh^>t8-ZeMf9<;9-#-nIIm%ULvS_=RpebK58I zg?_&8u-(K?u9y@y!e7?5jx|Wk(to5t=J{j7Djg@R;$j&-(@&t z_U~NoKon#bU8~otvbcMo^u^9*t1ObQqo+8^cbZNIw;FLI%qadslIun_ZkF0^h7k86 z3!`E)GInH(%`kg8?e^6lXJ^isel=D*J9X0E@yc}OP-bmUs~Hz3Que^r`^wc_N>9S- zrh?TFW4g4lvA8F$pYvXRVv>G5Mr-2bt@2sM%B0$thh5UxS0&9{#1i=fxY?giP4de` zg(%fHhD3Ml<)er9-bZD+eZ~D;dUbb(mM%6sTwKS2*ehwkjLS3f*(tdNMq6u}Y-|1q zt%Kp(^2Ek4W6^=l>d!LRw3tmzTUyn1);6AWZFU7miXHsR3IU8%@(pJh2eS5f4Ab6- z0X4@sV^B&EDa`^MpgQ{LS}sp{1obIQFY4hNHA6}-}DI997c#Uei}=AnIz zx2rQ}m6=CSoF2ucr}qAiT*!qZK?(P9Dl--i=BaWPd5s|yig3SQNyDaMepDyeQE?IR z$zLh_L5_ZFJ5Rs${Q`4yc}IcP+?({UMr71Grd3oQ&#H24(Ue{x1#;7AY4&f@m!eRu+2nq_aMsL2bwOt*|(Zm*;mzoW* zi;LIXlndX$Pw3)B6H_Qy754j@S%)mR2sfFITxPz=FuL;z2$Z<*ZMhOw4u02@OFVoC zhmG*N#2Wo1b+#j>vZ6vE@=k4YGwbc!<_Ei*F@n}sL%C!7JL~jxbdLCOdRp2_&!fZA z2@mYh5TWHW^P@+PXa%jFC@SIyb7ID+wb8u-udVEKBO9G|Mo`EIw_&)1fJPqo-3>;M z?Zj90-qqFB85tS*`T1}LmJ`(n?}*OrZZ1ZA`qW)u*xu68^5)GOdQnHWwN}=*Z{MaV z#EldhccmqGxZu%*in21_7Fz47d^m%t=HLWjdlmr!0TGdr)>bxHEn#6{1i~HHpTR5> z6w71ySWj;fK^R@{6vaFkFhC>x@H{ z4(a7D4d>VE<%flZ!O=?0hjQTpFc=Ihl`}3QZMHK`(-A8nA>r=s9^mgk?oJrXc$U@~ zBZzw7MQq#|yU?BJwVcZ!@;d$N@z2kVg+6{)KYmV2iMjClOYFig7kX3f-o5+a!2>T6 z@~y3{l7l;Zj!VPTI!>?J!#OQSit_ijf z${4S+msmJ7iqc28lLRt$LsAN2)K`jCSBQ+T=J{%LbaWO3xNjm_o@ZAFPy+?cCDet> zKS}}(S#OLc^2+Iiug+Pz1!Z!Af7zjXuDP`)Y(~?@(@n!`z}I}9rURp0aA~ERMlPJM zIpk&srZFVNoMNS$OfEe06uf3kEf<~(_C*jlLk6g0OYKws_0dFfQl99fYe~YQoGrtD zt#qFxio)H8t&SRhwx0TD>)xNO>8Ag@*HQa;t5Om>cS~6D0XrL8Yg=1pa(=`bqQ>g+ zb5b56BBCLz)47AXFjab@sF0A0mWpb^SA7ztXL7DgZT-v|awI7Xr(D@~#A_qR40)pJ z>gu4#q39w$f6h1VVgN=!jyuma_+5hAC1gMQV|#UqoZ(*NmoJ-R$O)Rjru6jmTy4O8 z12F%+IK``SNVK{gM8*XlOWp<<3_fw2RBcdCO$W`O*Da6#LSJ*{5A{l6Lm?0JGiA zAzcy@5+84G7Z(?}p17LB-Nlfbat|LqH2M+wYEcdOtBy$XT*>h8FmNd_YEP0(&DMyy zgwF-}Cr|dbr-EHKaa5NtU%q%znO?P46xkp9Ev_BW#DN~y(Zr(SM3KZqM3@pfVY`OG zUh~m1+t$`rrUL7U>VYg(pZD+Kn5R#lE&`D1HwVcCGvw3;q-)pl@UY`A%uY`ON0bQL z&k6|%ap+dNO;o!B>ZrN2oOTz|65O{iauHlRySqll#%ZakTMK>0K;}RsC37XFeN9^p zR$~=J#KhrYVPzE+u$7gYo125fVlZ1>Nl6Ka8sV|OovxHbOwKU+^(_-)aKz=9k zOf&GtlW0D+Tes$aMDfCXg}N!&oIXoRTH&;+=j7z{@L}B&rm$Tj595;MurjJHIXX6G z>AAbRJF@bMU;7N&@To**uLO&@_(XmE)CjRoz-3N5N5^9|K)JUKjD_L8vTuDVukd<~ z(bx3J$ii=d2m~`Ac6($PzqsyhYUF8GN}YUuL^t5L!xCybl&kGUOva83cq}K!ty`^? zOB5sj;KAF<%Dv5%%ok^n{hy$B*oggIKA!Z{|J8(;c~|_gYHx{2%$kK6KD`uqJxSQ8 z#YEvP4Ua1GsM4}pfeO7^L9%eAPQh!=I{Ja2n{v_mts%22?8n$j*ZBuM{!|7QXOJq) z|L8g8?LS+k|JjQBdn@%n$h-MR-7|^)!R6!2f8HCQd8@_1*jN>7qhj-nC@MCVE}&7_ zYO36RF7uU^z;%@t^&5Z6FJ-}d4d*0sOm#L{yQ0C1+^vE%XArK^hg*Y1Z zMDP_2%_|QNCgoSiJP^sitNdm=Yctpq%f*r6MYzAbJUk-E6}rop1#EtP?-JX~)~xpP0_+;p5M--|Ero`C)V$dB+xht@}j2f4YqXV0DmRtL68^F2=|WCQXB z?f^OAj&yO^l^{p(8McM_`uf6$_WzXX7x_YMF#98FeNfZd&o?J<1Z!Qx$rKe81@c@% z|JT*4W{cUFYWF=@xq+YG%~4?ghV#abUX-=#RmFye>hnZh$Y3aIzcSB?2%-o!eq$K?E!N+HDKq+dR zr#tcm!l2FJbfH6e#X;XlQYPV3{#a3gj*3wsrl%)=m&C*~QyE@D7r0)zdUY2V45eO} zx^x0--s@P3LJw3RpEHjprU090?;ZtqDe+T=e_quJWdU_b?0wfKHMf_m6=yNE7dWSGD$^Dj#_X6@FaxA0jxk18jVVZ?&k9K=EcV6VcGt(O>-v z;&S{{^v~1M0C2FkT1;{k{*?LX<$pkcQ#m%Z&6bJ(>}~${-Yco3JTn?>Q5~~5nlSgu zjCW5y1b$~XRew%fp*~R6c8;giQ&AyKbXKggZcWv3q(V^%IPjYKR+8A8+bWELFD>u2N+xM2=Xxk zRG)wU{{8;_d+X{Q79pXsygZwg(Q+`5=Pq*yxo%|#1jw10;d)c#@YQ=ORJUKGyRY~C zai7ERVH{2E>(n{8i5gEkyEWLy>)ksjx4s(BBTS*OsE|;RNzY_EcTH7=_1Ld^pBMql zV}(I3^v-~p0oOZTWcmzVEU}&#|0Z<~i6kuarGXC2yO(=T#)(=f{p}us)~$f6=u53uqHP{TL|YB~}HxKc4RUpc^OHSvY8kSAxgxg6K+_{$zt6D2s7dympPp!E|e= z)D0dUyPx0R!iR(0_1%mws^{GVSJyy!+a<$4YUb=LNl2WCR8hL6X zyf!CYk37n*qsC$&5^jH4Ss81BTW^UWcuFwLu>zJF4nac~RM0*jF%~*tq!T54E^}$A zS?v{D)>$lPDa7B4ij3SYtvOf~pDL({z}Fldet&z4yJo*2TvgdzCB^5-->NZC+G)Te zEGimduA=&CqQXv4i=gmo=C749)9@;esV?j`n6^U_@-^Yi65Q-uy5X(%pQ(2xr0suv z>d~TCbgZKn4EzUMxSwF&g#BcdZ0|PG$P0-I!%-Iz{$>p!DY!fqQS8?3jjvyhyUXT@ zk^tZ9tb(feySExU28xgENbt7`lTFR=r>VFa!?VvN0ayhen;s8n$4LC$G0HqhJ^w3+ zJ@MKz`uXcgNL@KkB2MF7sgZ0)y66?rNv0K*6@4q8)5u*9e28q~vJ={s=_HwRY zy0rMOe>mb+OPIY^V*#F1`|8!J(NR%5OT1lAV)+&({QUL^ct&2wrC{;>PhY+iyX~w+ z=(uF4cEx9jZU3AqHunTmGkAEYN=kaTGa0~Cpf}U@UCbS}c{RL$-xNr@x4R3iq=XN- z_(r$H#L9SFRFred*Pn%5VwE*WJhUIbpm3o(a@zjoGeuaU_#CF+tfi%Ofl*{*v&3=? zk4A3m2fM>{GF`kv85SPS!c^~l!Qu65EkY}6$zS;H#QJy0i37XE!I}1mqcUsV*RMD1 zyAZ5Q%nY7Y(7&PaH8qL}V(YVA_@Po%X(_=wke2bvy)yMeBU%9~H=E%*Nv(X~7(H28 z;_unkneZ7I88HakO=qF1{U-`p=X!5q^GYo+JO=YmNxXi=SXa~VnRIWf>TYgr<^B%R z<_ZsJVjpu6ml(|14;(1lA3&8M2<5E|EYA(g2AgKxhStQLek;es3u9b@lSuDr^=>je z{IXxYd>y!V^eYFi=XezfG5O`s82eebY7cicCnqbbl|fF;+3NKmpfk)XT0x7*nwPb? zWo0@D*O8F1EiKJ$X_R^>fMz$0O|!&ep+BRKx9gt1+_Y!)_P5Z&LZ8Y#@Vf49ZkIVV zik7obZJo|t2m+t=xZAK7d1rzkir_h(Lr%kUgX7*li0tP2`Z*l7w5&``lEG#BSNi7E@r@bvQTo1}sRi1;%cnz>rlT*2c!>3L)4tTdjNz8u2v(0q=oFL-EBR zj5|AFfnfE%)_U24>vLM2gj0zrHCgSJAor8S<%zQ*N zr1()CGt7|yvG_B6d`Ob?j##8SB$==F3F`; zc8w_@f@8t`=z#kpEdhFuEgYt=zFvR2<#Wlmj*oeHP>BqllYX_(@?I6PQPtAI*jt8k zX%1!?cg^#gSNrB4qOOyR?oDm_e+OcSbA)!_|9}FppL`*eLsAP z41@D@CBB*#)+;$J?FbSUM)&Pk`^bqLm!ktzsiiAGn!$aVf|WH*K0n{OD{6gGjyuOM zXlrBR{Dli1i#es|i6t<3344moDX8k*Oz3`Xr<#T;_2aoFXI-ZD#4-|2|FDkcS!j~M zb?S(P+iqQqXx!AqO3_zV`}&OQr@xa16BW-wqNpl}_IVehilx3AC+>Ne6f8zcMm8{Q z0jbL}wiLyZRuK=PQ(pe!`k0jD^lGqSAMb!jtO%=N?&&8Pb++jRf=67|p6P^ZHtS}t zW!ShFQo{2+1GP6rzq4oW4&3};s>gLXxN?KR=b>G}P1}fj`(fi#-{lJ;63Peoa?{T5 z-p4;kZ_Fu=w~w&*~ec)I_K?8+!ED3z#CnW*%<1`Yu}_(#lWVUJLLLT8I6KYe0y1H1n=-!eOA)M*kF#T%_Z`;k78B$?oNF?W|ne=5+|*GOanNM%<%Kq!{x;>ERIIc|spIUsb~#0`i#F5Tkd zQjnG1UTf!8j1&11AAbmiS7bH-d8F7?zfsE4S-YF^blMHdTD1{L0lqCjsWp2mmEXUA zH|y&(z6R^&-Uz*n#H;9$&Ow&#occFK;>3m@d)A?C#UTe8xFy zE?9$!BGW#=Dp<3>&AjCFa_Pk3{(4u^w{PBLv@A^E3c*!a^rdz{_60sfTT4q>S=nro z)I3(xywxAI^yb~WcdenUB*et=A`a|KOp_3U9h-k>nYgve?qlaj50qlrGM6I3NWu+m zZf-tiLN2bAw zU7Us`&c$oA`;QnmjLOkJ{j9oN2XD8QGed(B%vf>f8OH1e(7M9{*8f*4`+~~_y4nN$@S6YdQM7X z_N5CiTBD0A`s9D4vNuBH6w*fCGDB$Bl?t8wL56>x$+LCh#KjB8-vtoP^lf^z^-D*5 zpHA(GO30w)(>U6-va*tum9-hdoyNwLYO0Bfh=>RYEsYenW3hYPi4tImeEs}dJ3E5{1L=8< zoJ39l` zgZ%s;0m|(8HR1(~>iX*o{ioR2QGnT_P!g5^Bp2+;(9SWmp=IFD0`I9N~^A9O6u|+Z{#enjfg%K^j9E z(fa?;bq3iPYK{Qp4X z7$HGtkgihyE_rF0_m%X2BjXq#)OBOk{{cr2(J!kBt27~dbgJsm;SFOSaIDeP{-$SDlH`anG#qqsnA=+Sga#H)*WYaB2${KP&??3GA4! z-z+U91q8n^p!paOpjl?~OI6o>W@hFKq(6`@fys*#alpY2kXDuW-nemtPTXS@W+|MU zIpCzBphzdsr05-_GooNpo6Bkv$I{r?nBcbdNLpGNdVI*Jrt$cr4#A14U0l|ySFf0* zKhF0gH3R658&>dOK@cHHjyp|}L8b}m0gHU}4OUicyy0SU5m-fFeq%#JGDb1C#lakM zvF(?TA)4>L+iVg=Qk^IJ#QUWr9&%Mn5RhOx(ljzkZ8b0(tJnlB5rv!$PzOmyf4_>1Of#q;WJ||W7bz(zLq+(o*N%=b zPyqzI*jsr%zbT6;-Xv~@gcx8p3%us%=LdmxG@q%mo7+C{NI_v?VL^dWXRK+ynni21 z=g}dU0^o+2j#+q9fiYYWc)Y;lc;0Th1tvyf`@ic!%E1uycS{YjRN1RGEE8hchFV&i z1``)>V)9fBsmX1womyk_nf~tCTT7TrbaYjaBUkhx3u84Gh1bC?yvC1@O-$6_PzaF# zij~LC`}&xTkKtCClm{}&@WRM)YuP#jwE{E=q;6z=OD9iFPl#kX| z51myTRM9_!Ov(EjWuP}^#J_T{{zp#u-`J><{TpaeSMQhI_Wd`|o;Wa%4oLnRXsH?$ zD`wyRNDu(+Sr=Q7UTepUZ-x3}#aLP25S;kPb(dpAa62!&%`8Np@p20yuP-~koxCIR24}Ry;tsVt7L!&B3Ry(x~ zr(D`D3A(HwcZD$N0kj|OE}~$eOD&UfyqaN5#LUFBwzg&jk`19Y%zZ&Wv_K9(eqr>% zqzpkhbdz)c71++r%=pPZdGZ5T2Dv;kv%KsM&H>VP8eSvtV1Ud=p;o9gSv`Xwx3^vz!znp+v}75+Wp zp`r+AWMYz!=F8{*?lKpL1Oft|3g_DtL=VIEA+R-22q3w{#Kbydi9f3Mm14^ef1}ap zWAH=h0X%ig88R}+rQy2*0)sE_aA;Q)LCwHK4~!wC@Rs1X;STch@{+^I6vDj%BWGxq zVE_!@6*%?)^kx{N4>;*;bnQt9qqn}pu-KA=jV)gz2L`Yfau^-#s&rER(&~VZ_U*st z^`#DE#Xs^}7FR0lW*%cY*eZEdCx&S&c7MWH(9RVlW)I&MfRLuc$Q~oTx7jqjxWdlP zUZ9Z!iVo)lZN!T#elfA}5_6c~sWLimnqTC*@N6Q}ormMTh7%5P;R9u=U%A@7m0njm z($?1S2JN-q&s>5fu7?@+|Ls+eo2eeUUplP+moti_%7&=^V^>+oC{`SZ{!JP*$Is6E z=UL7j%_b|l*08t5+d0U#8>_E-T>lbevkZ)6KWLnM{)&^zD^y^Ltr_!7LtK^9IQNk- zX05g=#`UpjhLEYPTqQ}{R~dex;5eqyWp6wOTIOlSWu1@>|8cJ}8q*%-$XvoTtA?E7 zqQe+?1z~-t-Gx7_GcdjMb?(G#Np)g}uvP{!9j+&RuBRPWN-5DYUm5GPi8kXJYF0fh z7ka7+rrPPXI-hADxh*Lph9-F<#YgNa6u5unvkjH+lHFq|a4WmltrITB z((cp#cGb>P?(UUCq56un22>}9J-<%K>=E;(dt+A2cHpPVamp^&_WpWV4JLH!rLnDW0us)z;c?K-@oEQ@ktGqN_tGqiT8(DA<*}YjVu2$tfJ(DrXc#Wyo_062|4U@e6nuW<(t|?<*djyTR#Cc+8!_4srB~6MI|Hz#;_i7$g3*A6%gqN=} zF zS}rc6Ka!i`bMHgj@@IItf#+EzYkf5-QnYMUnO=CWBj#1Clw|bor4O%ydKlk3Aq`$@0k$g+yiLf3Ug)ukV zlS^6Z=i$xy(J4aD)`I=nWawg(uSq>dX?fnL9e91pOm;M!md@s;qC%Q~>#Y=)R@sRC zb|$91>Pr;PHp#Ku&$(hlJ)0kOzZCw$H0Mbjs-&eg^E%VXsVzu;a!C1to99?)>Dly3 z#&jMaf;*bhnyi=2?~oS|zm82LoUsb7E;J-Yu%BAQS;)edHKglzU4nnIl=A^%pZ}c9 zBAi)@_0)F9DwJUXA@hiLkEMe9T~7;UG(MXge2jmf0(nu(w*c` z$|9joe4@WW^nc$U|KC^W|Myn}|6hMdam2W*R?ZqLU-kz6O5?;MDFw;ghcDm#A6QFD A`~Uy| literal 0 HcmV?d00001 diff --git a/tests/flow-direction-graph.spec.ts b/tests/flow-direction-graph.spec.ts new file mode 100644 index 000000000..3af667956 --- /dev/null +++ b/tests/flow-direction-graph.spec.ts @@ -0,0 +1,14 @@ +import { test } from '@playwright/test'; +import { it } from './util'; + +test.beforeEach(async ({}, testInfo) => { + testInfo.snapshotSuffix = ''; +}); + +test('default flow direction graph', async ({ page }) => { + await it(page, '/UserFlowDirectionDefault?animation=false'); +}); + +test('user flow direction graph', async ({ page }) => { + await it(page, '/UserFlowDirectionGraph?animation=false'); +}); diff --git a/tests/flow-direction-graph.spec.ts-snapshots/default-flow-direction-graph-1-chromium.png b/tests/flow-direction-graph.spec.ts-snapshots/default-flow-direction-graph-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a8d8a53f4ee883fbf7fb292c09040fd0114533 GIT binary patch literal 23678 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 literal 0 HcmV?d00001 diff --git a/tests/flow-direction-graph.spec.ts-snapshots/user-flow-direction-graph-1-chromium.png b/tests/flow-direction-graph.spec.ts-snapshots/user-flow-direction-graph-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..294b12dd24f35d47b26b2d077d9cfa7f84b6255c GIT binary patch literal 38944 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 { + testInfo.snapshotSuffix = ''; +}); + +test('default flow graph', async ({ page }) => { + await it(page, '/FlowGraph?animation=false'); +}); + +test('product launch flow graph', async ({ page }) => { + await it(page, '/FlowGraphProductLaunch?animation=false'); +}); + +test('task scheduling flow graph', async ({ page }) => { + await it(page, '/FlowGraphTaskScheduling?animation=false'); +}); diff --git a/tests/flow-graph.spec.ts-snapshots/default-flow-graph-1-chromium.png b/tests/flow-graph.spec.ts-snapshots/default-flow-graph-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..8b958294559be24e5f915becc72bcb71ead93832 GIT binary patch literal 7234 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 literal 0 HcmV?d00001 diff --git a/tests/flow-graph.spec.ts-snapshots/task-scheduling-flow-graph-1-chromium.png b/tests/flow-graph.spec.ts-snapshots/task-scheduling-flow-graph-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..9619496d9e90d302092fbb328dcbd7cf021fa3a7 GIT binary patch literal 21571 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 literal 0 HcmV?d00001 diff --git a/tests/indented-tree.spec.ts b/tests/indented-tree.spec.ts new file mode 100644 index 000000000..d58fbb087 --- /dev/null +++ b/tests/indented-tree.spec.ts @@ -0,0 +1,62 @@ +import { test } from '@playwright/test'; +import { it } from './util'; + +test.beforeEach(async ({}, testInfo) => { + testInfo.snapshotSuffix = ''; +}); + +test('use Default as type', async ({ page }) => { + await it(page, '/IndentedTree?type=default'); +}); + +test('use Linear as type', async ({ page }) => { + await it(page, '/IndentedTree?type=linear'); +}); + +test('use Boxed as type', async ({ page }) => { + await it(page, '/IndentedTree?type=boxed'); +}); + +test('use 1 as a default expand level', async ({ page }) => { + await it(page, '/IndentedTree?type=linear&defaultExpandLevel=1'); +}); + +test('use 2 as a default expand level', async ({ page }) => { + await it(page, '/IndentedTree?type=linear&defaultExpandLevel=2'); +}); + +test('use Left as node direction', async ({ page }) => { + await it(page, '/IndentedTree?type=linear&direction=left'); +}); + +test('use Right as node direction', async ({ page }) => { + await it(page, '/IndentedTree?type=linear&direction=right'); +}); + +test('use Alternate as node direction', async ({ page }) => { + await it(page, '/IndentedTree?type=linear&direction=alternate'); +}); + +test('trigger collapse expand by icon', async ({ page }) => { + await it( + page, + '/IndentedTree?type=linear&defaultExpandLevel=2&collapseExpand=true&collapseExpandTrigger=icon', + async () => { + await page.locator('.arrow-count-icon-collapsed').nth(1).click(); + }, + ); +}); + +test('trigger collapse expand by node', async ({ page }) => { + await it( + page, + '/IndentedTree?type=linear&defaultExpandLevel=2&collapseExpand=true&collapseExpandTrigger=node', + async () => { + await page.getByText('Models diversity', { exact: true })?.click(); + }, + ); +}); + +test('use 60,100 as node width', async ({ page }) => { + await it(page, '/IndentedTree?type=boxed&nodeMinWidth=60&nodeMaxWidth=100'); +}); diff --git a/tests/indented-tree.spec.ts-snapshots/trigger-collapse-expand-by-icon-1-chromium.png b/tests/indented-tree.spec.ts-snapshots/trigger-collapse-expand-by-icon-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..a0a51ff1ce7f29b664f3e8303313395b938af42d GIT binary patch literal 19703 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 literal 0 HcmV?d00001 diff --git a/tests/indented-tree.spec.ts-snapshots/trigger-collapse-expand-by-node-1-chromium.png b/tests/indented-tree.spec.ts-snapshots/trigger-collapse-expand-by-node-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..3ebeee46c0b11177db9c61eb33927cb9361ad8be GIT binary patch literal 20188 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 literal 0 HcmV?d00001 diff --git a/tests/indented-tree.spec.ts-snapshots/use-60-100-as-node-width-1-chromium.png b/tests/indented-tree.spec.ts-snapshots/use-60-100-as-node-width-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..dc78f4bd51775ab82848ddeafcc045f6d6b36763 GIT binary patch literal 12785 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 literal 0 HcmV?d00001 diff --git a/tests/indented-tree.spec.ts-snapshots/use-Alternate-as-node-direction-1-chromium.png b/tests/indented-tree.spec.ts-snapshots/use-Alternate-as-node-direction-1-chromium.png new file mode 100644 index 0000000000000000000000000000000000000000..f392ab2e63e576ec3a2fbbe4b60d379af452b891 GIT binary patch literal 23147 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