|
166 | 166 | line,
|
167 | 167 | area,
|
168 | 168 | } from "d3-shape";
|
| 169 | + import { scaleLinear, scaleLog, scaleTime } from "d3-scale"; |
169 | 170 |
|
170 | 171 | let { data } = $props();
|
171 | 172 |
|
|
305 | 306 | category: "data",
|
306 | 307 | visible: false,
|
307 | 308 | },
|
| 309 | + { |
| 310 | + name: "curveFunction", |
| 311 | + category: "lineFunction", |
| 312 | + isProp: true, |
| 313 | + options: [ |
| 314 | + "curveLinear", |
| 315 | + "curveLinearClosed", |
| 316 | + "curveCardinal", |
| 317 | + "curveBasis", |
| 318 | + "curveStep", |
| 319 | + "curveMonotoneX", |
| 320 | + ], |
| 321 | + }, |
308 | 322 | {
|
309 | 323 | name: "lineFunction",
|
310 |
| - category: "data", |
311 |
| - visible: false, |
| 324 | + category: "lineFunction", |
| 325 | + isProp: true, |
| 326 | + functionElements: { |
| 327 | + functionAsString: `function (dataArray) { |
| 328 | + return line() |
| 329 | + .x((d) => xFunction(d.x)) |
| 330 | + .y((d) => yFunction(d.y)) |
| 331 | + .curve( |
| 332 | + { |
| 333 | + curveLinear: curveLinear, |
| 334 | + curveLinearClosed: curveLinearClosed, |
| 335 | + curveCardinal: curveCardinal, |
| 336 | + curveBasis: curveBasis, |
| 337 | + curveStep: curveStep, |
| 338 | + curveMonotoneX: curveMonotoneX, |
| 339 | + }[getValue("curveFunction")], |
| 340 | + )(dataArray); |
| 341 | + });`, |
| 342 | + }, |
| 343 | + }, |
| 344 | + { |
| 345 | + name: "yDomainLowerBound", |
| 346 | + category: "yScale", |
| 347 | + isProp: false, |
| 348 | + value: Math.min( |
| 349 | + ...data.dataInFormatForLineChart[0].lines |
| 350 | + .map((el) => el.data) |
| 351 | + .flat() |
| 352 | + .map((el) => el.y), |
| 353 | + ), |
| 354 | + }, |
| 355 | + { |
| 356 | + name: "yDomainUpperBound", |
| 357 | + category: "yScale", |
| 358 | + isProp: false, |
| 359 | + value: Math.max( |
| 360 | + ...data.dataInFormatForLineChart[0].lines |
| 361 | + .map((el) => el.data) |
| 362 | + .flat() |
| 363 | + .map((el) => el.y), |
| 364 | + ), |
| 365 | + }, |
| 366 | + { |
| 367 | + name: "xDomainLowerBound", |
| 368 | + category: "xScale", |
| 369 | + isProp: false, |
| 370 | + value: Math.min( |
| 371 | + ...data.dataInFormatForLineChart[0].lines |
| 372 | + .map((el) => el.data) |
| 373 | + .flat() |
| 374 | + .map((el) => el.x), |
| 375 | + ), |
| 376 | + }, |
| 377 | + { |
| 378 | + name: "xDomainUpperBound", |
| 379 | + category: "xScale", |
| 380 | + isProp: false, |
| 381 | + value: Math.max( |
| 382 | + ...data.dataInFormatForLineChart[0].lines |
| 383 | + .map((el) => el.data) |
| 384 | + .flat() |
| 385 | + .map((el) => el.x), |
| 386 | + ), |
312 | 387 | },
|
313 | 388 | ]),
|
314 | 389 | );
|
|
456 | 531 | )(dataArray);
|
457 | 532 | });
|
458 | 533 |
|
459 |
| - let areaFunction = $derived( |
460 |
| - area() |
461 |
| - .y0((d) => yFunction(0)) |
462 |
| - .x((d) => xFunction(d.x)) |
463 |
| - .y1((d) => yFunction(d.y)) |
464 |
| - .curve(curveLinear), |
465 |
| - ); |
466 |
| -
|
467 | 534 | let basicLineParams = $derived({
|
468 |
| - lineFunction: lineFunction, |
469 |
| - xFunction: xFunction, |
470 |
| - yFunction: yFunction, |
471 |
| - areaFunction: areaFunction, |
472 |
| - onClick: onClick, |
473 |
| - onMouseEnter: onMouseEnter, |
474 |
| - onMouseLeave: onMouseLeave, |
| 535 | + lineFunction: getValue(lineFunction), |
| 536 | + xFunction: getValue(xFunction), |
| 537 | + yFunction: getValue(yFunction), |
| 538 | + onClick: getValue(onClick), |
| 539 | + onMouseEnter: getValue(onMouseEnter), |
| 540 | + onMouseLeave: getValue(onMouseLeave), |
475 | 541 | invisibleStrokeWidth: 20,
|
476 | 542 | });
|
477 | 543 |
|
|
540 | 606 |
|
541 | 607 | let derivedParametersObject = $derived({
|
542 | 608 | derivedDataArray,
|
| 609 | + lineFunction, |
543 | 610 | dataArray,
|
544 | 611 | tieredLineParams,
|
545 | 612 | defaultLineParams,
|
546 | 613 | tieredDataObject,
|
547 | 614 | globalTierRules,
|
548 |
| - lineFunction, |
549 | 615 | });
|
550 | 616 |
|
551 | 617 | /**
|
|
579 | 645 | ),
|
580 | 646 | );
|
581 | 647 |
|
582 |
| - $inspect(parametersObject); |
583 |
| -
|
584 | 648 | let parametersParsingErrorsObject = $state({});
|
585 | 649 |
|
586 | 650 | $effect(() => {
|
|
0 commit comments