ingred-ui 33.15.1 → 33.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { BarChartOrientation, ChartSeries } from "../types";
1
+ import { BarChartOrientation, ChartReferenceLine, ChartSeries } from "../types";
2
2
  export type BarChartLayout = "single" | "grouped" | "stacked";
3
3
  export type BarChartValueScale = "absolute" | "percent";
4
4
  export type BarChartProps = {
@@ -38,6 +38,8 @@ export type BarChartProps = {
38
38
  * - grouped: カテゴリ内グループ全体の幅(系列数で等分)。デフォルト 0.8
39
39
  */
40
40
  barWidthRatio?: number;
41
+ /** 値軸上の水平(horizontal 時は垂直)参照線。スケール外は描画しない */
42
+ referenceLines?: ChartReferenceLine[];
41
43
  /** true の間、チャートの代わりにローディング表示 */
42
44
  loading?: boolean;
43
45
  /** 描画可能なデータがないときのメッセージ。未指定時は「データがありません」 */
@@ -1,4 +1,4 @@
1
- import { ChartSeries } from "../types";
1
+ import { ChartReferenceLine, ChartSeries } from "../types";
2
2
  export type LineChartProps = {
3
3
  /** X 軸のカテゴリラベル */
4
4
  categories: string[];
@@ -17,6 +17,8 @@ export type LineChartProps = {
17
17
  showPoints?: boolean;
18
18
  /** 凡例クリックで系列の表示/非表示を切り替え。デフォルト true */
19
19
  interactiveLegend?: boolean;
20
+ /** 値軸上の水平参照線。スケール外は描画しない */
21
+ referenceLines?: ChartReferenceLine[];
20
22
  /** true の間、チャートの代わりにローディング表示 */
21
23
  loading?: boolean;
22
24
  /** 描画可能なデータがないときのメッセージ。未指定時は「データがありません」 */
@@ -0,0 +1,8 @@
1
+ /**
2
+ * ストーリー用の系列色。色相を blue に揃え、明度だけで分ける。
3
+ * 本番デフォルトの palette.chart.series は変えない。
4
+ */
5
+ export declare const chartStorySeriesColors: readonly ["#03348D", "#0864D1", "#46AAF8", "#6AC3FB", "#054BAF", "#0B82F4", "#9CDDFD"];
6
+ export declare function withChartStorySeriesColors<T extends object>(items: readonly T[], startIndex?: number): Array<T & {
7
+ color: string;
8
+ }>;
@@ -2,7 +2,7 @@ export { BarChart } from "./BarChart";
2
2
  export type { BarChartLayout, BarChartProps, BarChartValueScale, } from "./BarChart";
3
3
  export { LineChart } from "./LineChart";
4
4
  export type { LineChartProps } from "./LineChart";
5
- export type { BarSegment, BarChartOrientation, ChartHoverState, ChartSeries, ResolvedChartSeries, } from "./types";
5
+ export type { BarSegment, BarChartOrientation, ChartHoverState, ChartReferenceLine, ChartReferenceLineAxis, ChartSeries, ResolvedChartSeries, } from "./types";
6
6
  export type { LinePoint, LinePathSegment, LineSeriesGeometry, } from "./internal/getLineSeries";
7
7
  export { computeYTicks, computeMaxStackedTotal } from "./internal/utils";
8
8
  export { formatChartPercentValue, normalizeStackedSeriesToPercent, } from "./internal/utils";
@@ -12,3 +12,7 @@ export { computeLineChartMaxValue, getLinePathSegments, getLineSeriesGeometry, p
12
12
  export { formatDateAsMonthDay, mapTimeSeriesChartData, } from "./internal/mapTimeSeriesChartData";
13
13
  export type { TimeSeriesDataset, TimeSeriesPoint, } from "./internal/mapTimeSeriesChartData";
14
14
  export { CHART_DEFAULT_HEIGHT } from "./internal/getChartLayout";
15
+ export { getReferenceLineGeometry, getReferenceLineLegendItems, isReferenceLineInScale, } from "./internal/getReferenceLineGeometry";
16
+ export type { ReferenceLineLegendItem } from "./internal/getReferenceLineGeometry";
17
+ export { computeAchievementPercent, formatAchievementPercent, getTooltipReferenceMetrics, } from "./internal/tooltipReferenceMetrics";
18
+ export type { ChartTooltipReferenceMetric } from "./internal/tooltipReferenceMetrics";
@@ -3,6 +3,10 @@ export type ChartLegendItem = {
3
3
  label: string;
4
4
  color: string;
5
5
  hidden: boolean;
6
+ /** false のときクリックでトグルしない(目標線など) */
7
+ interactive?: boolean;
8
+ /** 目標線などは細い横線スウォッチ */
9
+ swatchVariant?: "swatch" | "line";
6
10
  };
7
11
  type ChartLegendProps = {
8
12
  items: ChartLegendItem[];
@@ -6,7 +6,12 @@ type ChartLineSeriesProps = {
6
6
  showPoints: boolean;
7
7
  strokeWidth: number;
8
8
  pointRadius: number;
9
+ pointBorderColor: string;
9
10
  hidden: boolean;
11
+ animation?: "enter" | "none";
12
+ enterIndex?: number;
13
+ durationMs?: number;
14
+ staggerMs?: number;
10
15
  };
11
16
  export declare const ChartLineSeries: React.FC<ChartLineSeriesProps>;
12
17
  type ChartCategoryHoverTargetsProps = {
@@ -0,0 +1,12 @@
1
+ import * as React from "react";
2
+ import { BarChartOrientation, ChartReferenceLine } from "../types";
3
+ import { ChartLayout } from "./getChartLayout";
4
+ type ChartReferenceLinesProps = {
5
+ lines: readonly ChartReferenceLine[];
6
+ maxValue: number;
7
+ orientation: BarChartOrientation;
8
+ chartLayout: Pick<ChartLayout, "paddingLeft" | "paddingTop" | "chartWidth" | "chartHeight">;
9
+ };
10
+ /** ラベルは凡例側。ここでは線のみ描画する。 */
11
+ export declare const ChartReferenceLines: React.FC<ChartReferenceLinesProps>;
12
+ export {};
@@ -1,5 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { ResolvedChartSeries } from "../types";
3
+ import { ChartTooltipReferenceMetric } from "./tooltipReferenceMetrics";
3
4
  type ChartTooltipProps = {
4
5
  label: string;
5
6
  datasets: Pick<ResolvedChartSeries, "label" | "color" | "data">[];
@@ -8,6 +9,7 @@ type ChartTooltipProps = {
8
9
  clientY: number;
9
10
  valueFormatter: (value: number) => string;
10
11
  showTotal?: boolean;
12
+ referenceMetrics?: ChartTooltipReferenceMetric[];
11
13
  };
12
14
  export declare const ChartTooltip: React.FC<ChartTooltipProps>;
13
15
  export {};
@@ -0,0 +1,17 @@
1
+ import { BarChartOrientation, ChartReferenceLine, ChartReferenceLineAxis } from "../types";
2
+ import { ChartLayout } from "./getChartLayout";
3
+ export type ChartReferenceLineGeometry = {
4
+ x1: number;
5
+ y1: number;
6
+ x2: number;
7
+ y2: number;
8
+ };
9
+ export declare function isReferenceLineInScale(value: number, maxValue: number): boolean;
10
+ export declare function getValueX(value: number, maxValue: number, chartLayout: Pick<ChartLayout, "paddingLeft" | "chartWidth">): number;
11
+ export declare function getReferenceLineGeometry(value: number, maxValue: number, chartLayout: Pick<ChartLayout, "paddingLeft" | "paddingTop" | "chartWidth" | "chartHeight">, orientation: BarChartOrientation, _axis?: ChartReferenceLineAxis): ChartReferenceLineGeometry | null;
12
+ export type ReferenceLineLegendItem = {
13
+ label: string;
14
+ color: string;
15
+ };
16
+ /** 参照線を凡例用アイテムに変換する(スケール外でも凡例には残す) */
17
+ export declare function getReferenceLineLegendItems(lines: readonly ChartReferenceLine[] | undefined, valueFormatter: (value: number) => string, defaultColor: string): ReferenceLineLegendItem[];
@@ -3,6 +3,14 @@ export declare function segmentKey(segment: Pick<BarSegment, "categoryIndex" | "
3
3
  export declare function buildSegmentMap(segments: BarSegment[]): Map<string, BarSegment>;
4
4
  /** CSS keyframes と reflow で共通の ease-out カーブ */
5
5
  export declare const chartMotionEaseCss = "cubic-bezier(0.16, 1, 0.3, 1)";
6
+ /** 線・面の描画。棒のスナップな ease-out だと軌跡が見えない */
7
+ export declare const chartDrawEaseCss = "cubic-bezier(0.45, 0, 0.55, 1)";
8
+ /** 棒の duration より長くして、線が左から伸びる様子が見えるようにする */
9
+ export declare function getChartDrawDurationMs(motionDurationMs: number): number;
10
+ /** 初回 enter の系列/棒ごとの遅延。全体が長くなりすぎないよう cap する */
11
+ export declare function getChartEnterAnimationDelay(enterIndex: number, staggerMs: number, durationMs: number): number;
12
+ /** enter 完了後に animation を "none" へ戻すまでの待ち時間 */
13
+ export declare function getChartEnterAnimationTimeout(itemCount: number, durationMs: number, staggerMs: number): number;
6
14
  /** 終端の減速を長く取る ease-out(7乗) */
7
15
  export declare function easeOut(t: number): number;
8
16
  export declare function lerpValue(from: number, to: number, t: number): number;
@@ -25,12 +25,15 @@ export declare const ChartLegendItemStatic: import("styled-components/dist/types
25
25
  }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$hidden"> & {
26
26
  $hidden: boolean;
27
27
  }, never>>> & string;
28
- export declare const ChartLegendSwatch: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "$color" | "$hidden"> & {
28
+ export declare const ChartLegendLabel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
29
+ export declare const ChartLegendSwatch: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "$color" | "$variant" | "$hidden"> & {
29
30
  $color: string;
30
31
  $hidden?: boolean | undefined;
31
- }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "$color" | "$hidden"> & {
32
+ $variant?: "line" | "swatch" | undefined;
33
+ }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "$color" | "$variant" | "$hidden"> & {
32
34
  $color: string;
33
35
  $hidden?: boolean | undefined;
36
+ $variant?: "line" | "swatch" | undefined;
34
37
  }, never>>> & string;
35
38
  export declare const ChartPlaceholder: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$minHeight"> & {
36
39
  $minHeight: number;
@@ -39,10 +42,15 @@ export declare const ChartPlaceholder: import("styled-components/dist/types").IS
39
42
  }, never>>> & string;
40
43
  export declare const ChartTooltipContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
41
44
  export declare const ChartTooltipTitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
45
+ export declare const ChartTooltipStack: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
42
46
  export declare const ChartTooltipRow: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
47
+ export declare const ChartTooltipLabel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
48
+ export declare const ChartTooltipText: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
49
+ export declare const ChartTooltipValue: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
43
50
  export declare const ChartTooltipSwatch: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "$color"> & {
44
51
  $color: string;
45
52
  }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "$color"> & {
46
53
  $color: string;
47
54
  }, never>>> & string;
48
- export declare const ChartTooltipFooter: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
55
+ export declare const ChartTooltipDivider: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
56
+ export declare const ChartTooltipSummaryRow: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
@@ -0,0 +1,14 @@
1
+ import { ChartReferenceLine } from "../types";
2
+ export type ChartTooltipReferenceMetric = {
3
+ label: string;
4
+ target: number;
5
+ };
6
+ /** 達成率(実測 / 目標)。目標が 0 以下のときは null */
7
+ export declare function computeAchievementPercent(actual: number, target: number): number | null;
8
+ export declare function formatAchievementPercent(percent: number): string;
9
+ /**
10
+ * tooltip に出す目標メトリクス(最大 1 件)。
11
+ * 比較対象はカテゴリ内の表示系列合計(single ならその値、stacked なら合計)。
12
+ * `showAchievementInTooltip` が複数ある場合は、スケール内の先頭のみ採用する。
13
+ */
14
+ export declare function getTooltipReferenceMetrics(lines: readonly ChartReferenceLine[] | undefined, maxValue: number): ChartTooltipReferenceMetric[];
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 初回描画の enter が終わったら true。
3
+ * データキーが変わったら false に戻し、凡例トグルでは再発火させない。
4
+ */
5
+ export declare function useChartEnterAnimation(resetKey: string, timeoutMs: number): boolean;
@@ -22,6 +22,26 @@ export type ChartHoverState = {
22
22
  clientX: number;
23
23
  clientY: number;
24
24
  } | null;
25
+ export type ChartReferenceLineAxis = "primary" | "secondary";
26
+ export type ChartReferenceLine = {
27
+ /** 値軸上の位置。スケール外(負または max 超)は描画しない */
28
+ value: number;
29
+ /**
30
+ * 凡例に表示するラベル。未指定時は valueFormatter(value)。
31
+ * プロット上にはラベルを描画しない。
32
+ */
33
+ label?: string;
34
+ /** 未指定時は theme.palette.chart.referenceLine.color */
35
+ color?: string;
36
+ /** ComboChart の右軸用。他チャートでは primary のみ有効。 */
37
+ axis?: ChartReferenceLineAxis;
38
+ /**
39
+ * tooltip に達成率(表示値合計 / 目標)を出す。
40
+ * デフォルト false。目標が 0 以下のときは出さない。
41
+ * 複数線に指定した場合は、スケール内の先頭 1 本だけが対象になる。
42
+ */
43
+ showAchievementInTooltip?: boolean;
44
+ };
25
45
  export type BarSegment = {
26
46
  seriesLabel: string;
27
47
  color: string;
@@ -21,5 +21,11 @@ export type DrawerProps = {
21
21
  * ドロワー表示中も背景をスクロール可能にする(Backdrop非表示)
22
22
  */
23
23
  allowBackgroundScroll?: boolean;
24
+ /**
25
+ * ドロワー外のクリックで閉じる。
26
+ * Backdrop がある場合はもともと閉じるため、`allowBackgroundScroll` 時に opt-in する。
27
+ * Drawer 内から開いた DatePicker などのポップアップ操作や、内側から始めたテキスト選択では閉じない。
28
+ */
29
+ closeOnOutsideClick?: boolean;
24
30
  };
25
31
  export type CloseReason = "backdropClick" | "escapeKey";
@@ -18,9 +18,14 @@ export type FullSizeConfirmModalProps = {
18
18
  cancelText?: string;
19
19
  onClose?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.MouseEvent<Element, MouseEvent>, reason: ModalCloseReason | FullSizeConfirmModalCloseReason) => void;
20
20
  /**
21
- * If `undefined`, footer is removed.
21
+ * If `undefined`, footer is removed when `onConfirm` is also `undefined`.
22
+ * @deprecated onConfirm の利用を推奨。
22
23
  */
23
24
  onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void;
25
+ /**
26
+ * If `undefined`, footer is removed when `onSubmit` is also `undefined`.
27
+ */
28
+ onConfirm?: (event: React.MouseEvent<Element, MouseEvent>) => void;
24
29
  buttonColor?: ButtonColor;
25
30
  isOpen?: boolean;
26
31
  /**