@tansohq/credit-burndown-react 0.1.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.
- package/dist/context.d.ts +4 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +10 -0
- package/dist/context.js.map +1 -0
- package/dist/credit-burndown.d.ts +22 -0
- package/dist/credit-burndown.d.ts.map +1 -0
- package/dist/credit-burndown.js +240 -0
- package/dist/credit-burndown.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/messages.d.ts +4 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +75 -0
- package/dist/messages.js.map +1 -0
- package/dist/styles.css +662 -0
- package/dist/types.d.ts +89 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CreditBurndownContextValue } from "./types.js";
|
|
2
|
+
export declare const CreditBurndownContext: import("react").Context<CreditBurndownContextValue | null>;
|
|
3
|
+
export declare function useCreditBurndown(): CreditBurndownContextValue;
|
|
4
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,eAAO,MAAM,qBAAqB,4DAAyD,CAAC;AAE5F,wBAAgB,iBAAiB,IAAI,0BAA0B,CAQ9D"}
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
export const CreditBurndownContext = createContext(null);
|
|
3
|
+
export function useCreditBurndown() {
|
|
4
|
+
const context = useContext(CreditBurndownContext);
|
|
5
|
+
if (context === null) {
|
|
6
|
+
throw new Error("CreditBurndown components must be rendered inside CreditBurndown.Root");
|
|
7
|
+
}
|
|
8
|
+
return context;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAIlD,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAoC,IAAI,CAAC,CAAC;AAE5F,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAElD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CreditBurndownActionsProps, CreditBurndownRootProps, CreditBurndownSectionProps, CreditBurndownViewProps } from "./types.js";
|
|
2
|
+
export declare function CreditBurndownRoot({ input, result, children, selectedScenario, defaultSelectedScenario, onSelectedScenarioChange, headingLevel, messages: messageOverrides, actions, className, ...divProps }: CreditBurndownRootProps): import("react").JSX.Element;
|
|
3
|
+
export declare function CreditBurndownSummary({ className }: CreditBurndownSectionProps): import("react").JSX.Element;
|
|
4
|
+
export declare function CreditBurndownScenarios({ className }: CreditBurndownSectionProps): import("react").JSX.Element;
|
|
5
|
+
export declare function CreditBurndownChart({ className }: CreditBurndownSectionProps): import("react").JSX.Element;
|
|
6
|
+
export declare function CreditBurndownWarnings({ className }: CreditBurndownSectionProps): import("react").JSX.Element;
|
|
7
|
+
export declare function CreditBurndownBreakdown({ className }: CreditBurndownSectionProps): import("react").JSX.Element;
|
|
8
|
+
export declare function CreditBurndownTitle({ className }: CreditBurndownSectionProps): import("react").JSX.Element;
|
|
9
|
+
export declare function CreditBurndownActions({ children, className, }: CreditBurndownActionsProps): import("react").JSX.Element | null;
|
|
10
|
+
export declare function CreditBurndownView(props: CreditBurndownViewProps): import("react").JSX.Element;
|
|
11
|
+
export declare const CreditBurndown: {
|
|
12
|
+
Root: typeof CreditBurndownRoot;
|
|
13
|
+
Title: typeof CreditBurndownTitle;
|
|
14
|
+
Summary: typeof CreditBurndownSummary;
|
|
15
|
+
Chart: typeof CreditBurndownChart;
|
|
16
|
+
Scenarios: typeof CreditBurndownScenarios;
|
|
17
|
+
Warnings: typeof CreditBurndownWarnings;
|
|
18
|
+
Breakdown: typeof CreditBurndownBreakdown;
|
|
19
|
+
Actions: typeof CreditBurndownActions;
|
|
20
|
+
View: typeof CreditBurndownView;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=credit-burndown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit-burndown.d.ts","sourceRoot":"","sources":["../src/credit-burndown.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,0BAA0B,EAE1B,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,YAAY,CAAC;AA0DpB,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,uBAAgC,EAChC,wBAAwB,EACxB,YAAgB,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EACP,SAAS,EACT,GAAG,QAAQ,EACZ,EAAE,uBAAuB,+BAmEzB;AAED,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,+BA6C9E;AAED,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,+BAyEhF;AAgFD,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,+BAoM5E;AAED,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,+BAwC/E;AAED,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,+BAoKhF;AAED,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,+BAS5E;AAsBD,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,SAAS,GACV,EAAE,0BAA0B,sCAe5B;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,+BAehE;AAED,eAAO,MAAM,cAAc;;;;;;;;;;CAU1B,CAAC"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useMemo, useState, } from "react";
|
|
3
|
+
import { CreditBurndownContext, useCreditBurndown } from "./context.js";
|
|
4
|
+
import { resolveCreditBurndownMessages } from "./messages.js";
|
|
5
|
+
const scenarioKeys = ["low", "base", "high"];
|
|
6
|
+
function headingTag(level) {
|
|
7
|
+
return `h${level}`;
|
|
8
|
+
}
|
|
9
|
+
function nestedHeadingLevel(level) {
|
|
10
|
+
return Math.min(6, level + 1);
|
|
11
|
+
}
|
|
12
|
+
function classNames(base, className) {
|
|
13
|
+
return className === undefined ? base : `${base} ${className}`;
|
|
14
|
+
}
|
|
15
|
+
function statusClass(status) {
|
|
16
|
+
return `credit-burndown-status credit-burndown-status--${status.toLowerCase().replaceAll("_", "-")}`;
|
|
17
|
+
}
|
|
18
|
+
function statusSymbol(status) {
|
|
19
|
+
if (status === "ON_TRACK")
|
|
20
|
+
return "✓";
|
|
21
|
+
if (status === "LOW_BALANCE_PROJECTED")
|
|
22
|
+
return "!";
|
|
23
|
+
return "×";
|
|
24
|
+
}
|
|
25
|
+
function traceValue(value) {
|
|
26
|
+
if (value === null)
|
|
27
|
+
return "null";
|
|
28
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
29
|
+
return String(value);
|
|
30
|
+
}
|
|
31
|
+
return JSON.stringify(value);
|
|
32
|
+
}
|
|
33
|
+
function warningText(warning, scenarioLabel, messages) {
|
|
34
|
+
if (warning.code === "DEPLETION_PROJECTED") {
|
|
35
|
+
return messages.depletionWarning(scenarioLabel, warning.depletionDate, warning.shortfall);
|
|
36
|
+
}
|
|
37
|
+
return messages.lowBalanceWarning(scenarioLabel, warning.endingBalance, warning.threshold);
|
|
38
|
+
}
|
|
39
|
+
export function CreditBurndownRoot({ input, result, children, selectedScenario, defaultSelectedScenario = "base", onSelectedScenarioChange, headingLevel = 2, messages: messageOverrides, actions, className, ...divProps }) {
|
|
40
|
+
const [internalScenario, setInternalScenario] = useState(defaultSelectedScenario);
|
|
41
|
+
const messages = useMemo(() => resolveCreditBurndownMessages(messageOverrides), [messageOverrides]);
|
|
42
|
+
const versionsMatch = input.schemaVersion === result.schemaVersion &&
|
|
43
|
+
input.methodologyVersion === result.methodologyVersion;
|
|
44
|
+
if (!versionsMatch) {
|
|
45
|
+
return (_jsx("div", { ...divProps, className: classNames("credit-burndown-root credit-burndown-version-error", className), role: "alert", children: messages.versionMismatch({
|
|
46
|
+
inputSchemaVersion: input.schemaVersion,
|
|
47
|
+
resultSchemaVersion: result.schemaVersion,
|
|
48
|
+
inputMethodologyVersion: input.methodologyVersion,
|
|
49
|
+
resultMethodologyVersion: result.methodologyVersion,
|
|
50
|
+
}) }));
|
|
51
|
+
}
|
|
52
|
+
const selectedScenarioKey = selectedScenario ?? internalScenario;
|
|
53
|
+
const scenario = result.scenarios.find(({ key }) => key === selectedScenarioKey);
|
|
54
|
+
if (scenario === undefined) {
|
|
55
|
+
throw new Error(`Forecast result does not contain scenario ${selectedScenarioKey}`);
|
|
56
|
+
}
|
|
57
|
+
const selectScenario = (nextScenario) => {
|
|
58
|
+
if (selectedScenario === undefined)
|
|
59
|
+
setInternalScenario(nextScenario);
|
|
60
|
+
onSelectedScenarioChange?.(nextScenario);
|
|
61
|
+
};
|
|
62
|
+
const context = {
|
|
63
|
+
input,
|
|
64
|
+
result,
|
|
65
|
+
selectedScenarioKey,
|
|
66
|
+
selectedScenario: scenario,
|
|
67
|
+
selectScenario,
|
|
68
|
+
headingLevel,
|
|
69
|
+
messages,
|
|
70
|
+
...(actions === undefined ? {} : { actions }),
|
|
71
|
+
};
|
|
72
|
+
return (_jsx(CreditBurndownContext.Provider, { value: context, children: _jsx("div", { ...divProps, className: classNames("credit-burndown-root", className), "data-credit-burndown-status": scenario.status, role: divProps.role ?? "region", "aria-label": divProps["aria-label"] ??
|
|
73
|
+
(divProps["aria-labelledby"] === undefined ? messages.title : undefined), children: children }) }));
|
|
74
|
+
}
|
|
75
|
+
export function CreditBurndownSummary({ className }) {
|
|
76
|
+
const { input, result, selectedScenario, headingLevel, messages } = useCreditBurndown();
|
|
77
|
+
const headingId = useId();
|
|
78
|
+
const Heading = headingTag(nestedHeadingLevel(headingLevel));
|
|
79
|
+
const scenarioLabel = messages.scenarioLabel(selectedScenario.key);
|
|
80
|
+
const outcomeLabel = selectedScenario.depletionDate === null
|
|
81
|
+
? messages.endingBalanceLabel
|
|
82
|
+
: messages.depletionDateLabel;
|
|
83
|
+
const outcomeValue = selectedScenario.depletionDate === null
|
|
84
|
+
? messages.creditsValue(selectedScenario.endingBalance)
|
|
85
|
+
: selectedScenario.depletionDate;
|
|
86
|
+
return (_jsxs("section", { className: classNames("credit-burndown-section credit-burndown-summary", className), "aria-labelledby": headingId, children: [_jsx(Heading, { id: headingId, className: "credit-burndown-sr-only", children: messages.summaryTitle }), _jsxs("div", { className: "credit-burndown-outcome", children: [_jsx("span", { className: "credit-burndown-outcome-scenario", children: scenarioLabel }), _jsx("span", { className: "credit-burndown-outcome-label", children: outcomeLabel }), _jsx("strong", { children: outcomeValue })] }), _jsxs("dl", { className: "credit-burndown-summary-grid", children: [_jsxs("div", { className: "credit-burndown-stat", children: [_jsx("dt", { children: messages.currentBalanceLabel }), _jsx("dd", { children: messages.creditsValue(input.balance.current) })] }), _jsxs("div", { className: "credit-burndown-stat", children: [_jsx("dt", { children: messages.usedToDateLabel }), _jsx("dd", { children: messages.creditsValue(result.creditsUsedToDate) })] }), _jsxs("div", { className: "credit-burndown-stat", children: [_jsx("dt", { children: messages.baselineDailyBurnLabel }), _jsx("dd", { children: messages.creditsValue(result.baselineDailyBurn) })] }), _jsxs("div", { className: "credit-burndown-stat", children: [_jsx("dt", { children: messages.periodLabel }), _jsx("dd", { children: messages.periodValue(input.period.startDate, input.period.endDate) })] })] })] }));
|
|
87
|
+
}
|
|
88
|
+
export function CreditBurndownScenarios({ className }) {
|
|
89
|
+
const { result, selectedScenarioKey, selectScenario, headingLevel, messages, } = useCreditBurndown();
|
|
90
|
+
const groupName = useId();
|
|
91
|
+
const sectionHeadingLevel = nestedHeadingLevel(headingLevel);
|
|
92
|
+
return (_jsxs("fieldset", { className: classNames("credit-burndown-section credit-burndown-scenarios", className), children: [_jsx("legend", { className: "credit-burndown-heading", children: _jsx("span", { role: "heading", "aria-level": sectionHeadingLevel, children: messages.scenariosTitle }) }), _jsx("div", { className: "credit-burndown-scenario-grid", role: "radiogroup", "aria-label": messages.scenarioControlLabel, children: scenarioKeys.map((key) => {
|
|
93
|
+
const scenario = result.scenarios.find((candidate) => candidate.key === key);
|
|
94
|
+
if (scenario === undefined) {
|
|
95
|
+
throw new Error(`Forecast result does not contain scenario ${key}`);
|
|
96
|
+
}
|
|
97
|
+
const label = messages.scenarioLabel(key);
|
|
98
|
+
const detailsId = `${groupName}-${key}-details`;
|
|
99
|
+
return (_jsxs("label", { className: "credit-burndown-scenario", "data-credit-burndown-selected": selectedScenarioKey === key ? "true" : "false", children: [_jsx("input", { className: "credit-burndown-scenario-input", type: "radio", name: groupName, value: key, checked: selectedScenarioKey === key, onChange: () => selectScenario(key), "aria-label": label, "aria-describedby": detailsId }), _jsx("span", { className: "credit-burndown-scenario-label", children: label }), _jsx("span", { className: "credit-burndown-scenario-balance", children: messages.scenarioBalanceValue(scenario.endingBalance) }), _jsxs("span", { id: detailsId, className: "credit-burndown-sr-only", children: [_jsxs("span", { className: statusClass(scenario.status), children: [_jsx("span", { "aria-hidden": "true", className: "credit-burndown-status-symbol", children: statusSymbol(scenario.status) }), messages.statusText(scenario.status)] }), _jsxs("span", { children: [messages.dailyBurnLabel, ": ", messages.creditsValue(scenario.dailyBurn)] }), _jsxs("span", { children: [messages.endingBalanceLabel, ": ", messages.creditsValue(scenario.endingBalance)] })] })] }, key));
|
|
100
|
+
}) })] }));
|
|
101
|
+
}
|
|
102
|
+
const chartDecimalScale = 1000000000000n;
|
|
103
|
+
const chartRatioScale = 1000000n;
|
|
104
|
+
function decimalToScaledInteger(value) {
|
|
105
|
+
const negative = value.startsWith("-");
|
|
106
|
+
const unsigned = negative ? value.slice(1) : value;
|
|
107
|
+
const [whole = "0", fraction = ""] = unsigned.split(".");
|
|
108
|
+
const scaled = BigInt(whole) * chartDecimalScale +
|
|
109
|
+
BigInt(fraction.padEnd(12, "0") || "0");
|
|
110
|
+
return negative ? -scaled : scaled;
|
|
111
|
+
}
|
|
112
|
+
function chartCoordinates(values, thresholdValue, left, right, top, bottom) {
|
|
113
|
+
const scaledValues = values.map(decimalToScaledInteger);
|
|
114
|
+
const scaledThreshold = decimalToScaledInteger(thresholdValue);
|
|
115
|
+
let minimum = 0n;
|
|
116
|
+
let maximum = 0n;
|
|
117
|
+
for (const value of [...scaledValues, scaledThreshold]) {
|
|
118
|
+
if (value < minimum)
|
|
119
|
+
minimum = value;
|
|
120
|
+
if (value > maximum)
|
|
121
|
+
maximum = value;
|
|
122
|
+
}
|
|
123
|
+
const span = maximum - minimum || 1n;
|
|
124
|
+
const denominator = Math.max(1, scaledValues.length - 1);
|
|
125
|
+
const y = (value) => {
|
|
126
|
+
const ratio = Number(((value - minimum) * chartRatioScale) / span) /
|
|
127
|
+
Number(chartRatioScale);
|
|
128
|
+
return bottom - ratio * (bottom - top);
|
|
129
|
+
};
|
|
130
|
+
const projectedPoints = scaledValues.map((value, index) => ({
|
|
131
|
+
x: left + (index / denominator) * (right - left),
|
|
132
|
+
y: y(value),
|
|
133
|
+
}));
|
|
134
|
+
const first = projectedPoints[0];
|
|
135
|
+
const last = projectedPoints.at(-1);
|
|
136
|
+
if (first === undefined || last === undefined) {
|
|
137
|
+
throw new Error("Chart requires at least one projected balance value");
|
|
138
|
+
}
|
|
139
|
+
const zeroY = y(0n);
|
|
140
|
+
const areaPath = [
|
|
141
|
+
`M ${first.x},${zeroY}`,
|
|
142
|
+
...projectedPoints.map(({ x, y: pointY }) => `L ${x},${pointY}`),
|
|
143
|
+
`L ${last.x},${zeroY}`,
|
|
144
|
+
"Z",
|
|
145
|
+
].join(" ");
|
|
146
|
+
return {
|
|
147
|
+
points: projectedPoints.map(({ x, y: pointY }) => `${x},${pointY}`).join(" "),
|
|
148
|
+
areaPath,
|
|
149
|
+
zeroY,
|
|
150
|
+
thresholdY: y(scaledThreshold),
|
|
151
|
+
firstX: first.x,
|
|
152
|
+
firstY: first.y,
|
|
153
|
+
lastX: last.x,
|
|
154
|
+
lastY: last.y,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
export function CreditBurndownChart({ className }) {
|
|
158
|
+
const { input, result, selectedScenario, headingLevel, messages } = useCreditBurndown();
|
|
159
|
+
const headingId = useId();
|
|
160
|
+
const chartTitleId = useId();
|
|
161
|
+
const chartDescriptionId = useId();
|
|
162
|
+
const chartDataId = useId();
|
|
163
|
+
const Heading = headingTag(nestedHeadingLevel(headingLevel));
|
|
164
|
+
const scenarioLabel = messages.scenarioLabel(selectedScenario.key);
|
|
165
|
+
const chartViewBoxWidth = 760;
|
|
166
|
+
const chartLeft = 32;
|
|
167
|
+
const chartRight = 728;
|
|
168
|
+
const timelineWidth = chartRight - chartLeft;
|
|
169
|
+
const observedDayCount = result.observedPoints.length;
|
|
170
|
+
const totalDayCount = observedDayCount + result.daysRemaining;
|
|
171
|
+
const forecastStartRatio = observedDayCount / totalDayCount;
|
|
172
|
+
const forecastStartX = chartLeft + forecastStartRatio * timelineWidth;
|
|
173
|
+
const coordinates = chartCoordinates([input.balance.current, ...selectedScenario.points.map(({ endingBalance }) => endingBalance)], input.period.lowBalanceThreshold, forecastStartX, chartRight, 36, 142);
|
|
174
|
+
const observedValues = result.observedPoints.map(({ creditsUsed }) => decimalToScaledInteger(creditsUsed));
|
|
175
|
+
const maximumObserved = observedValues.reduce((maximum, value) => value > maximum ? value : maximum, 0n) || 1n;
|
|
176
|
+
const observedSlotWidth = (forecastStartX - chartLeft) / observedDayCount;
|
|
177
|
+
const observedBarWidth = Math.max(2, Math.min(14, observedSlotWidth * 0.48));
|
|
178
|
+
const forecastStartViewBoxRatio = forecastStartX / chartViewBoxWidth;
|
|
179
|
+
const forecastStartLabelAlignment = forecastStartViewBoxRatio < 0.25
|
|
180
|
+
? "start"
|
|
181
|
+
: forecastStartViewBoxRatio > 0.75
|
|
182
|
+
? "end"
|
|
183
|
+
: "center";
|
|
184
|
+
const chartContextStyle = {
|
|
185
|
+
"--credit-burndown-forecast-start-position": `${forecastStartViewBoxRatio * 100}%`,
|
|
186
|
+
};
|
|
187
|
+
return (_jsxs("section", { className: classNames("credit-burndown-section credit-burndown-chart", className), "aria-labelledby": headingId, children: [_jsx(Heading, { id: headingId, className: "credit-burndown-heading", children: messages.chartTitle }), _jsx("p", { className: "credit-burndown-chart-summary", id: chartDescriptionId, children: messages.chartDescription(scenarioLabel, selectedScenario.endingBalance) }), _jsxs("div", { className: "credit-burndown-chart-legend", "aria-hidden": "true", children: [_jsxs("span", { children: [_jsx("span", { className: "credit-burndown-chart-key credit-burndown-chart-key--observed" }), messages.observedTableCaption] }), _jsxs("span", { children: [_jsx("span", { className: "credit-burndown-chart-key credit-burndown-chart-key--projected" }), messages.projectedTableCaption(scenarioLabel)] })] }), _jsxs("svg", { className: "credit-burndown-chart-svg", viewBox: "0 0 760 226", role: "img", "aria-labelledby": chartTitleId, "aria-describedby": `${chartDescriptionId} ${chartDataId}`, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { id: chartTitleId, children: messages.chartTitle }), _jsx("rect", { className: "credit-burndown-chart-observed-zone", x: chartLeft, y: "28", width: forecastStartX - chartLeft, height: "190" }), _jsx("rect", { className: "credit-burndown-chart-projected-zone", x: forecastStartX, y: "28", width: chartRight - forecastStartX, height: "190" }), observedValues.map((value, index) => {
|
|
188
|
+
const heightRatio = Number((value * chartRatioScale) / maximumObserved) /
|
|
189
|
+
Number(chartRatioScale);
|
|
190
|
+
const x = chartLeft + observedSlotWidth * index +
|
|
191
|
+
(observedSlotWidth - observedBarWidth) / 2;
|
|
192
|
+
const height = heightRatio * 48;
|
|
193
|
+
return (_jsx("rect", { className: "credit-burndown-chart-observed-bar", x: x, y: 204 - height, width: observedBarWidth, height: height, rx: observedBarWidth / 2 }, result.observedPoints[index]?.date));
|
|
194
|
+
}), _jsx("line", { className: "credit-burndown-chart-zero", x1: forecastStartX, x2: chartRight, y1: coordinates.zeroY, y2: coordinates.zeroY }), _jsx("line", { className: "credit-burndown-chart-threshold", x1: forecastStartX, x2: chartRight, y1: coordinates.thresholdY, y2: coordinates.thresholdY }), _jsx("path", { className: "credit-burndown-chart-area", d: coordinates.areaPath }), _jsx("polyline", { className: "credit-burndown-chart-line", points: coordinates.points, fill: "none" }), _jsx("circle", { className: "credit-burndown-chart-point", cx: coordinates.firstX, cy: coordinates.firstY, r: "4" }), _jsx("circle", { className: "credit-burndown-chart-point", cx: coordinates.lastX, cy: coordinates.lastY, r: "4" }), _jsx("line", { className: "credit-burndown-chart-forecast-start", x1: forecastStartX, x2: forecastStartX, y1: "12", y2: "224" }), _jsx("line", { className: "credit-burndown-chart-horizon", x1: chartLeft, x2: chartRight, y1: "224", y2: "224" })] }), _jsxs("div", { className: "credit-burndown-sr-only", id: chartDataId, children: [_jsx("p", { children: messages.observedTableCaption }), _jsx("ul", { children: result.observedPoints.map((point) => (_jsxs("li", { children: [messages.dateHeader, ": ", point.date, ". ", messages.dailyUsageHeader, ":", " ", messages.creditsValue(point.creditsUsed), ".", " ", messages.cumulativeUsageHeader, ":", " ", messages.creditsValue(point.cumulativeCreditsUsed), "."] }, point.date))) }), _jsx("p", { children: messages.projectedTableCaption(scenarioLabel) }), _jsx("ul", { children: selectedScenario.points.map((point) => (_jsxs("li", { children: [messages.dateHeader, ": ", point.date, ". ", messages.startBalanceHeader, ":", " ", messages.creditsValue(point.startBalance), ". ", messages.balanceDeltaHeader, ":", " ", messages.creditsValue(point.balanceDelta), ". ", messages.dailyUsageHeader, ":", " ", messages.creditsValue(point.creditsUsed), ". ", messages.endingBalanceHeader, ":", " ", messages.creditsValue(point.endingBalance), "."] }, point.date))) })] }), _jsxs("dl", { className: "credit-burndown-chart-context", style: chartContextStyle, children: [_jsxs("div", { children: [_jsx("dt", { className: "credit-burndown-sr-only", children: messages.periodLabel }), _jsx("dd", { children: input.period.startDate })] }), _jsxs("div", { className: "credit-burndown-chart-context-forecast-start", "data-credit-burndown-alignment": forecastStartLabelAlignment, children: [_jsx("dt", { children: messages.asOfLabel }), _jsx("dd", { children: result.asOf })] }), _jsxs("div", { className: "credit-burndown-chart-context-end", children: [_jsx("dt", { className: "credit-burndown-sr-only", children: messages.periodLabel }), _jsx("dd", { children: input.period.endDate })] })] })] }));
|
|
195
|
+
}
|
|
196
|
+
export function CreditBurndownWarnings({ className }) {
|
|
197
|
+
const { result, headingLevel, messages } = useCreditBurndown();
|
|
198
|
+
const headingId = useId();
|
|
199
|
+
const Heading = headingTag(nestedHeadingLevel(headingLevel));
|
|
200
|
+
return (_jsxs("section", { className: classNames("credit-burndown-section credit-burndown-warnings", className), "aria-labelledby": headingId, "aria-live": "polite", "aria-atomic": "true", children: [_jsx(Heading, { id: headingId, className: "credit-burndown-heading", children: messages.warningsTitle }), result.warnings.length === 0 ? (_jsxs("p", { className: "credit-burndown-no-warnings", children: [_jsx("span", { "aria-hidden": "true", className: "credit-burndown-status-symbol", children: "\u2713" }), messages.noWarnings] })) : (_jsx("ul", { className: "credit-burndown-warning-list", children: result.warnings.map((warning) => (_jsxs("li", { className: "credit-burndown-warning", "data-credit-burndown-warning": warning.code, children: [_jsx("span", { "aria-hidden": "true", className: "credit-burndown-status-symbol", children: "!" }), warningText(warning, messages.scenarioLabel(warning.scenarioKey), messages)] }, `${warning.code}-${warning.scenarioKey}`))) }))] }));
|
|
201
|
+
}
|
|
202
|
+
export function CreditBurndownBreakdown({ className }) {
|
|
203
|
+
const { input, result, selectedScenario, headingLevel, messages } = useCreditBurndown();
|
|
204
|
+
const SectionHeading = headingTag(nestedHeadingLevel(headingLevel));
|
|
205
|
+
const DetailHeading = headingTag(nestedHeadingLevel(nestedHeadingLevel(headingLevel)));
|
|
206
|
+
const StepHeading = headingTag(nestedHeadingLevel(nestedHeadingLevel(nestedHeadingLevel(headingLevel))));
|
|
207
|
+
const scenarioLabel = messages.scenarioLabel(selectedScenario.key);
|
|
208
|
+
return (_jsxs("details", { className: classNames("credit-burndown-section credit-burndown-breakdown credit-burndown-trace", className), children: [_jsx("summary", { children: messages.calculationTraceSummary }), _jsxs("div", { className: "credit-burndown-trace-content", children: [_jsx(SectionHeading, { className: "credit-burndown-heading", children: messages.breakdownTitle }), _jsxs("dl", { className: "credit-burndown-breakdown-grid", children: [_jsxs("div", { children: [_jsx("dt", { children: messages.periodLabel }), _jsx("dd", { children: messages.periodValue(input.period.startDate, input.period.endDate) })] }), _jsxs("div", { children: [_jsx("dt", { children: messages.asOfLabel }), _jsx("dd", { children: result.asOf })] }), _jsxs("div", { children: [_jsx("dt", { children: messages.allocationLabel }), _jsx("dd", { children: messages.creditsValue(input.period.allocation) })] }), _jsxs("div", { children: [_jsx("dt", { children: messages.lookbackLabel }), _jsx("dd", { children: messages.dayCount(input.lookbackDays) })] }), _jsxs("div", { children: [_jsx("dt", { children: messages.dailyBurnLabel }), _jsx("dd", { children: messages.creditsValue(selectedScenario.dailyBurn) })] }), _jsxs("div", { children: [_jsx("dt", { children: messages.projectedUsageLabel }), _jsx("dd", { children: messages.creditsValue(selectedScenario.projectedCreditsUsed) })] }), _jsxs("div", { children: [_jsx("dt", { children: messages.projectedConsumptionLabel }), _jsx("dd", { children: messages.creditsValue(selectedScenario.projectedPeriodConsumption) })] }), _jsxs("div", { children: [_jsx("dt", { children: messages.utilizationLabel }), _jsx("dd", { children: messages.utilizationValue(selectedScenario.utilization) })] }), _jsxs("div", { children: [_jsx("dt", { children: messages.shortfallLabel }), _jsx("dd", { children: messages.creditsValue(selectedScenario.shortfall) })] }), selectedScenario.depletionDate !== null && (_jsxs("div", { children: [_jsx("dt", { children: messages.depletionDateLabel }), _jsx("dd", { children: selectedScenario.depletionDate })] })), _jsxs("div", { children: [_jsx("dt", { children: messages.statusLabel }), _jsx("dd", { children: messages.statusText(selectedScenario.status) })] })] }), _jsx("div", { className: "credit-burndown-table-scroll", role: "region", "aria-label": messages.observedTableCaption, tabIndex: 0, children: _jsxs("table", { className: "credit-burndown-table", children: [_jsx("caption", { children: messages.observedTableCaption }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: messages.dateHeader }), _jsx("th", { scope: "col", children: messages.dailyUsageHeader }), _jsx("th", { scope: "col", children: messages.cumulativeUsageHeader })] }) }), _jsx("tbody", { children: result.observedPoints.map((point) => (_jsxs("tr", { children: [_jsx("th", { scope: "row", children: point.date }), _jsx("td", { children: messages.creditsValue(point.creditsUsed) }), _jsx("td", { children: messages.creditsValue(point.cumulativeCreditsUsed) })] }, point.date))) })] }) }), _jsx("div", { className: "credit-burndown-table-scroll", role: "region", "aria-label": messages.projectedTableCaption(scenarioLabel), tabIndex: 0, children: _jsxs("table", { className: "credit-burndown-table", children: [_jsx("caption", { children: messages.projectedTableCaption(scenarioLabel) }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: messages.dateHeader }), _jsx("th", { scope: "col", children: messages.startBalanceHeader }), _jsx("th", { scope: "col", children: messages.balanceDeltaHeader }), _jsx("th", { scope: "col", children: messages.dailyUsageHeader }), _jsx("th", { scope: "col", children: messages.endingBalanceHeader })] }) }), _jsx("tbody", { children: selectedScenario.points.map((point) => (_jsxs("tr", { children: [_jsx("th", { scope: "row", children: point.date }), _jsx("td", { children: messages.creditsValue(point.startBalance) }), _jsx("td", { children: messages.creditsValue(point.balanceDelta) }), _jsx("td", { children: messages.creditsValue(point.creditsUsed) }), _jsx("td", { children: messages.creditsValue(point.endingBalance) })] }, point.date))) })] }) }), _jsx(DetailHeading, { children: messages.sourceInputsTitle }), _jsx("dl", { className: "credit-burndown-source-inputs", children: result.calculationTrace.sourceInputs.map((source, index) => (_jsxs("div", { children: [_jsx("dt", { children: _jsx("code", { children: source.path }) }), _jsx("dd", { children: _jsx("code", { children: traceValue(source.value) }) })] }, `${source.path}-${index}`))) }), _jsx(DetailHeading, { children: messages.stepsTitle }), _jsx("ol", { className: "credit-burndown-trace-steps", children: result.calculationTrace.steps.map((step, index) => (_jsxs("li", { children: [_jsx(StepHeading, { className: "credit-burndown-trace-step-heading", children: _jsx("code", { children: step.key }) }), _jsxs("dl", { children: [_jsxs("div", { children: [_jsx("dt", { children: messages.formulaLabel }), _jsx("dd", { children: _jsx("code", { children: step.formula }) })] }), _jsxs("div", { children: [_jsx("dt", { children: messages.operandsLabel }), _jsx("dd", { children: _jsx("code", { children: traceValue(step.operands) }) })] }), _jsxs("div", { children: [_jsx("dt", { children: messages.resultLabel }), _jsx("dd", { children: _jsx("code", { children: traceValue(step.result) }) })] })] })] }, `${step.key}-${index}`))) })] })] }));
|
|
209
|
+
}
|
|
210
|
+
export function CreditBurndownTitle({ className }) {
|
|
211
|
+
const { headingLevel, messages } = useCreditBurndown();
|
|
212
|
+
const Heading = headingTag(headingLevel);
|
|
213
|
+
return (_jsx(Heading, { className: classNames("credit-burndown-title", className), children: messages.title }));
|
|
214
|
+
}
|
|
215
|
+
function CreditBurndownStatus({ className }) {
|
|
216
|
+
const { selectedScenario, messages } = useCreditBurndown();
|
|
217
|
+
return (_jsxs("div", { className: classNames(`${statusClass(selectedScenario.status)} credit-burndown-status-badge`, className), children: [_jsx("span", { "aria-hidden": "true", className: "credit-burndown-status-symbol", children: statusSymbol(selectedScenario.status) }), _jsx("span", { children: messages.scenarioLabel(selectedScenario.key) }), _jsx("span", { "aria-hidden": "true", children: "\u00B7" }), _jsx("span", { children: messages.statusText(selectedScenario.status) })] }));
|
|
218
|
+
}
|
|
219
|
+
export function CreditBurndownActions({ children, className, }) {
|
|
220
|
+
const { actions, messages } = useCreditBurndown();
|
|
221
|
+
const content = children === undefined ? actions : children;
|
|
222
|
+
if (content === undefined || content === null || content === false)
|
|
223
|
+
return null;
|
|
224
|
+
return (_jsx("div", { className: classNames("credit-burndown-actions", className), "aria-label": messages.actionsLabel, role: "group", children: content }));
|
|
225
|
+
}
|
|
226
|
+
export function CreditBurndownView(props) {
|
|
227
|
+
return (_jsxs(CreditBurndownRoot, { ...props, children: [_jsxs("div", { className: "credit-burndown-header", children: [_jsx(CreditBurndownTitle, {}), _jsx(CreditBurndownStatus, {})] }), _jsx(CreditBurndownSummary, {}), _jsx(CreditBurndownScenarios, {}), _jsx(CreditBurndownChart, {}), _jsx(CreditBurndownWarnings, {}), _jsx(CreditBurndownActions, {}), _jsx(CreditBurndownBreakdown, {})] }));
|
|
228
|
+
}
|
|
229
|
+
export const CreditBurndown = {
|
|
230
|
+
Root: CreditBurndownRoot,
|
|
231
|
+
Title: CreditBurndownTitle,
|
|
232
|
+
Summary: CreditBurndownSummary,
|
|
233
|
+
Chart: CreditBurndownChart,
|
|
234
|
+
Scenarios: CreditBurndownScenarios,
|
|
235
|
+
Warnings: CreditBurndownWarnings,
|
|
236
|
+
Breakdown: CreditBurndownBreakdown,
|
|
237
|
+
Actions: CreditBurndownActions,
|
|
238
|
+
View: CreditBurndownView,
|
|
239
|
+
};
|
|
240
|
+
//# sourceMappingURL=credit-burndown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit-burndown.js","sourceRoot":"","sources":["../src/credit-burndown.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { CreditBurndown, CreditBurndownActions, CreditBurndownBreakdown, CreditBurndownChart, CreditBurndownRoot, CreditBurndownScenarios, CreditBurndownSummary, CreditBurndownTitle, CreditBurndownView, CreditBurndownWarnings, } from "./credit-burndown.js";
|
|
2
|
+
export { defaultCreditBurndownMessages, resolveCreditBurndownMessages, } from "./messages.js";
|
|
3
|
+
export type { CreditBurndownActionsProps, CreditBurndownHeadingLevel, CreditBurndownMessages, CreditBurndownRootProps, CreditBurndownSectionProps, CreditBurndownViewProps, VersionMismatchDetails, } from "./types.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { CreditBurndown, CreditBurndownActions, CreditBurndownBreakdown, CreditBurndownChart, CreditBurndownRoot, CreditBurndownScenarios, CreditBurndownSummary, CreditBurndownTitle, CreditBurndownView, CreditBurndownWarnings, } from "./credit-burndown.js";
|
|
2
|
+
export { defaultCreditBurndownMessages, resolveCreditBurndownMessages, } from "./messages.js";
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CreditBurndownMessages } from "./types.js";
|
|
2
|
+
export declare const defaultCreditBurndownMessages: CreditBurndownMessages;
|
|
3
|
+
export declare function resolveCreditBurndownMessages(overrides: Partial<CreditBurndownMessages> | undefined): CreditBurndownMessages;
|
|
4
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAmBzD,eAAO,MAAM,6BAA6B,EAAE,sBAiE3C,CAAC;AAEF,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,SAAS,GACrD,sBAAsB,CAExB"}
|
package/dist/messages.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
function roundDecimal(value) {
|
|
2
|
+
const negative = value.startsWith("-");
|
|
3
|
+
const digits = negative ? value.slice(1) : value;
|
|
4
|
+
const [wholePart, fractionPart = ""] = digits.split(".");
|
|
5
|
+
const padded = fractionPart.padEnd(3, "0");
|
|
6
|
+
const keep = padded.slice(0, 2);
|
|
7
|
+
const roundDigit = padded.charCodeAt(2) - 48;
|
|
8
|
+
let combined = wholePart + keep;
|
|
9
|
+
if (roundDigit >= 5) {
|
|
10
|
+
combined = (BigInt(combined) + 1n).toString().padStart(combined.length, "0");
|
|
11
|
+
}
|
|
12
|
+
const wholeOut = combined.slice(0, combined.length - 2) || "0";
|
|
13
|
+
const fractionOut = combined.slice(combined.length - 2).replace(/0+$/, "");
|
|
14
|
+
const magnitude = fractionOut === "" ? wholeOut : `${wholeOut}.${fractionOut}`;
|
|
15
|
+
return negative && BigInt(combined) !== 0n ? `-${magnitude}` : magnitude;
|
|
16
|
+
}
|
|
17
|
+
export const defaultCreditBurndownMessages = {
|
|
18
|
+
title: "Credit usage forecast",
|
|
19
|
+
summaryTitle: "Forecast summary",
|
|
20
|
+
scenariosTitle: "Usage scenarios",
|
|
21
|
+
scenarioControlLabel: "Select a usage scenario",
|
|
22
|
+
chartTitle: "Projected credit balance",
|
|
23
|
+
warningsTitle: "Forecast warnings",
|
|
24
|
+
breakdownTitle: "Calculation breakdown",
|
|
25
|
+
actionsLabel: "Forecast actions",
|
|
26
|
+
currentBalanceLabel: "Current balance",
|
|
27
|
+
allocationLabel: "Period allocation",
|
|
28
|
+
usedToDateLabel: "Used to date",
|
|
29
|
+
baselineDailyBurnLabel: "Baseline daily burn",
|
|
30
|
+
endingBalanceLabel: "Projected ending balance",
|
|
31
|
+
depletionDateLabel: "Projected depletion date",
|
|
32
|
+
statusLabel: "Status",
|
|
33
|
+
dailyBurnLabel: "Daily burn",
|
|
34
|
+
projectedUsageLabel: "Projected usage",
|
|
35
|
+
projectedConsumptionLabel: "Projected period consumption",
|
|
36
|
+
utilizationLabel: "Projected utilization",
|
|
37
|
+
shortfallLabel: "Projected shortfall",
|
|
38
|
+
periodLabel: "Forecast period",
|
|
39
|
+
asOfLabel: "Forecast starts",
|
|
40
|
+
lookbackLabel: "Lookback window",
|
|
41
|
+
observedTableCaption: "Observed daily credit usage",
|
|
42
|
+
projectedTableCaption: (scenarioLabel) => `Projected daily balance for the ${scenarioLabel} scenario`,
|
|
43
|
+
dateHeader: "Date",
|
|
44
|
+
dailyUsageHeader: "Credits used",
|
|
45
|
+
cumulativeUsageHeader: "Cumulative credits used",
|
|
46
|
+
startBalanceHeader: "Start balance",
|
|
47
|
+
balanceDeltaHeader: "Balance change",
|
|
48
|
+
endingBalanceHeader: "End balance",
|
|
49
|
+
noWarnings: "No forecast warnings.",
|
|
50
|
+
calculationTraceSummary: "How this forecast was calculated",
|
|
51
|
+
sourceInputsTitle: "Source inputs",
|
|
52
|
+
stepsTitle: "Calculation steps",
|
|
53
|
+
formulaLabel: "Formula",
|
|
54
|
+
operandsLabel: "Operands",
|
|
55
|
+
resultLabel: "Result",
|
|
56
|
+
scenarioLabel: (key) => ({ low: "Low", base: "Base", high: "High" })[key],
|
|
57
|
+
statusText: (status) => ({
|
|
58
|
+
ON_TRACK: "On track",
|
|
59
|
+
LOW_BALANCE_PROJECTED: "Low balance projected",
|
|
60
|
+
DEPLETION_PROJECTED: "Depletion projected",
|
|
61
|
+
})[status],
|
|
62
|
+
creditsValue: (value) => `${roundDecimal(value)} credits`,
|
|
63
|
+
scenarioBalanceValue: (value) => roundDecimal(value),
|
|
64
|
+
utilizationValue: (value) => `${roundDecimal(value)}× allocation`,
|
|
65
|
+
dayCount: (count) => `${count} ${count === 1 ? "day" : "days"}`,
|
|
66
|
+
periodValue: (startDate, endDate) => `${startDate} to ${endDate} (end exclusive)`,
|
|
67
|
+
chartDescription: (scenarioLabel, endingBalance) => `${scenarioLabel} scenario projected balance ending at ${roundDecimal(endingBalance)} credits. Exact daily values are included in the accessible chart description.`,
|
|
68
|
+
lowBalanceWarning: (scenarioLabel, endingBalance, threshold) => `${scenarioLabel} scenario ends with ${roundDecimal(endingBalance)} credits, at or below the ${roundDecimal(threshold)}-credit low-balance threshold.`,
|
|
69
|
+
depletionWarning: (scenarioLabel, depletionDate, shortfall) => `${scenarioLabel} scenario reaches depletion on ${depletionDate} and ends with a ${roundDecimal(shortfall)}-credit shortfall.`,
|
|
70
|
+
versionMismatch: ({ inputSchemaVersion, resultSchemaVersion, inputMethodologyVersion, resultMethodologyVersion, }) => `Forecast input and result versions do not match. Input schema ${inputSchemaVersion}, result schema ${resultSchemaVersion}; input methodology ${inputMethodologyVersion}, result methodology ${resultMethodologyVersion}.`,
|
|
71
|
+
};
|
|
72
|
+
export function resolveCreditBurndownMessages(overrides) {
|
|
73
|
+
return { ...defaultCreditBurndownMessages, ...overrides };
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAEA,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,SAAS,EAAE,YAAY,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7C,IAAI,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;IAChC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;IAC/D,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;IAC/E,OAAO,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAA2B;IACnE,KAAK,EAAE,uBAAuB;IAC9B,YAAY,EAAE,kBAAkB;IAChC,cAAc,EAAE,iBAAiB;IACjC,oBAAoB,EAAE,yBAAyB;IAC/C,UAAU,EAAE,0BAA0B;IACtC,aAAa,EAAE,mBAAmB;IAClC,cAAc,EAAE,uBAAuB;IACvC,YAAY,EAAE,kBAAkB;IAChC,mBAAmB,EAAE,iBAAiB;IACtC,eAAe,EAAE,mBAAmB;IACpC,eAAe,EAAE,cAAc;IAC/B,sBAAsB,EAAE,qBAAqB;IAC7C,kBAAkB,EAAE,0BAA0B;IAC9C,kBAAkB,EAAE,0BAA0B;IAC9C,WAAW,EAAE,QAAQ;IACrB,cAAc,EAAE,YAAY;IAC5B,mBAAmB,EAAE,iBAAiB;IACtC,yBAAyB,EAAE,8BAA8B;IACzD,gBAAgB,EAAE,uBAAuB;IACzC,cAAc,EAAE,qBAAqB;IACrC,WAAW,EAAE,iBAAiB;IAC9B,SAAS,EAAE,iBAAiB;IAC5B,aAAa,EAAE,iBAAiB;IAChC,oBAAoB,EAAE,6BAA6B;IACnD,qBAAqB,EAAE,CAAC,aAAa,EAAE,EAAE,CACvC,mCAAmC,aAAa,WAAW;IAC7D,UAAU,EAAE,MAAM;IAClB,gBAAgB,EAAE,cAAc;IAChC,qBAAqB,EAAE,yBAAyB;IAChD,kBAAkB,EAAE,eAAe;IACnC,kBAAkB,EAAE,gBAAgB;IACpC,mBAAmB,EAAE,aAAa;IAClC,UAAU,EAAE,uBAAuB;IACnC,uBAAuB,EAAE,kCAAkC;IAC3D,iBAAiB,EAAE,eAAe;IAClC,UAAU,EAAE,mBAAmB;IAC/B,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,UAAU;IACzB,WAAW,EAAE,QAAQ;IACrB,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC;IACzE,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACrB,CAAC;QACC,QAAQ,EAAE,UAAU;QACpB,qBAAqB,EAAE,uBAAuB;QAC9C,mBAAmB,EAAE,qBAAqB;KAC3C,CAAC,CAAC,MAAM,CAAC;IACZ,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU;IACzD,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;IACpD,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,cAAc;IACjE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;IAC/D,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,SAAS,OAAO,OAAO,kBAAkB;IACjF,gBAAgB,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,EAAE,CACjD,GAAG,aAAa,yCAAyC,YAAY,CAAC,aAAa,CAAC,gFAAgF;IACtK,iBAAiB,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,CAC7D,GAAG,aAAa,uBAAuB,YAAY,CAAC,aAAa,CAAC,6BAA6B,YAAY,CAAC,SAAS,CAAC,gCAAgC;IACxJ,gBAAgB,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,CAC5D,GAAG,aAAa,kCAAkC,aAAa,oBAAoB,YAAY,CAAC,SAAS,CAAC,oBAAoB;IAChI,eAAe,EAAE,CAAC,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,GACzB,EAAE,EAAE,CACH,iEAAiE,kBAAkB,mBAAmB,mBAAmB,uBAAuB,uBAAuB,wBAAwB,wBAAwB,GAAG;CAC7N,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAC3C,SAAsD;IAEtD,OAAO,EAAE,GAAG,6BAA6B,EAAE,GAAG,SAAS,EAAE,CAAC;AAC5D,CAAC"}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1,662 @@
|
|
|
1
|
+
:where(.credit-burndown-root) {
|
|
2
|
+
--credit-burndown-background: #ffffff;
|
|
3
|
+
--credit-burndown-surface: #f3f6f4;
|
|
4
|
+
--credit-burndown-border: #d8deda;
|
|
5
|
+
--credit-burndown-text: #17211b;
|
|
6
|
+
--credit-burndown-muted-text: #5b6961;
|
|
7
|
+
--credit-burndown-accent: #0f6b57;
|
|
8
|
+
--credit-burndown-accent-contrast: #ffffff;
|
|
9
|
+
--credit-burndown-on-track: #0f6b57;
|
|
10
|
+
--credit-burndown-low-balance: #9a6700;
|
|
11
|
+
--credit-burndown-depletion: #b4232f;
|
|
12
|
+
--credit-burndown-warning-background: #fff8e7;
|
|
13
|
+
--credit-burndown-radius: 0.875rem;
|
|
14
|
+
--credit-burndown-gap: 1.125rem;
|
|
15
|
+
--credit-burndown-font-family: inherit;
|
|
16
|
+
--credit-burndown-data-font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
|
|
17
|
+
--credit-burndown-font-size: 1rem;
|
|
18
|
+
--credit-burndown-line-width: 3px;
|
|
19
|
+
|
|
20
|
+
box-sizing: border-box;
|
|
21
|
+
container-type: inline-size;
|
|
22
|
+
display: grid;
|
|
23
|
+
gap: var(--credit-burndown-gap);
|
|
24
|
+
min-inline-size: 0;
|
|
25
|
+
padding: clamp(1rem, 3cqi, 1.5rem);
|
|
26
|
+
border: 1px solid var(--credit-burndown-border);
|
|
27
|
+
border-radius: var(--credit-burndown-radius);
|
|
28
|
+
color: var(--credit-burndown-text);
|
|
29
|
+
background: var(--credit-burndown-background);
|
|
30
|
+
box-shadow: 0 0.75rem 2.25rem rgb(23 33 27 / 7%);
|
|
31
|
+
font-family: var(--credit-burndown-font-family);
|
|
32
|
+
font-size: var(--credit-burndown-font-size);
|
|
33
|
+
line-height: 1.45;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
:where(.credit-burndown-root) *,
|
|
37
|
+
:where(.credit-burndown-root) *::before,
|
|
38
|
+
:where(.credit-burndown-root) *::after {
|
|
39
|
+
box-sizing: border-box;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
:where(.credit-burndown-header) {
|
|
43
|
+
align-items: center;
|
|
44
|
+
display: flex;
|
|
45
|
+
flex-wrap: wrap;
|
|
46
|
+
gap: 0.75rem;
|
|
47
|
+
justify-content: space-between;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
:where(.credit-burndown-title),
|
|
51
|
+
:where(.credit-burndown-heading) {
|
|
52
|
+
color: inherit;
|
|
53
|
+
font: inherit;
|
|
54
|
+
font-weight: 720;
|
|
55
|
+
margin: 0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
:where(.credit-burndown-title) {
|
|
59
|
+
font-size: 1.125em;
|
|
60
|
+
letter-spacing: -0.015em;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
:where(.credit-burndown-heading) {
|
|
64
|
+
font-size: 0.9375em;
|
|
65
|
+
margin-block-end: 0.7rem;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
:where(.credit-burndown-section) {
|
|
69
|
+
min-inline-size: 0;
|
|
70
|
+
margin: 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
:where(.credit-burndown-status) {
|
|
74
|
+
align-items: center;
|
|
75
|
+
display: inline-flex;
|
|
76
|
+
gap: 0.35rem;
|
|
77
|
+
font-weight: 680;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
:where(.credit-burndown-status-badge) {
|
|
81
|
+
padding: 0.3rem 0.55rem;
|
|
82
|
+
border: 1px solid currentColor;
|
|
83
|
+
border-radius: 999px;
|
|
84
|
+
background: var(--credit-burndown-background);
|
|
85
|
+
font-size: 0.8125em;
|
|
86
|
+
white-space: nowrap;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
:where(.credit-burndown-status--on-track) {
|
|
90
|
+
color: var(--credit-burndown-on-track);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
:where(.credit-burndown-status--low-balance-projected) {
|
|
94
|
+
color: var(--credit-burndown-low-balance);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
:where(.credit-burndown-status--depletion-projected) {
|
|
98
|
+
color: var(--credit-burndown-depletion);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
:where(.credit-burndown-status-symbol) {
|
|
102
|
+
align-items: center;
|
|
103
|
+
display: inline-flex;
|
|
104
|
+
flex: 0 0 auto;
|
|
105
|
+
font-weight: 850;
|
|
106
|
+
justify-content: center;
|
|
107
|
+
min-inline-size: 1em;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
:where(.credit-burndown-summary) {
|
|
111
|
+
padding-block: 0.25rem 0.125rem;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
:where(.credit-burndown-outcome) {
|
|
115
|
+
display: grid;
|
|
116
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
117
|
+
gap: 0.15rem 0.65rem;
|
|
118
|
+
max-inline-size: 52ch;
|
|
119
|
+
margin: 0 0 1rem;
|
|
120
|
+
padding-inline-start: 0.85rem;
|
|
121
|
+
border-inline-start: 0.2rem solid var(--credit-burndown-on-track);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
:where(.credit-burndown-outcome-scenario),
|
|
125
|
+
:where(.credit-burndown-outcome-label) {
|
|
126
|
+
color: var(--credit-burndown-muted-text);
|
|
127
|
+
font-family: var(--credit-burndown-data-font-family);
|
|
128
|
+
font-size: 0.6875em;
|
|
129
|
+
font-weight: 700;
|
|
130
|
+
letter-spacing: 0.04em;
|
|
131
|
+
text-transform: uppercase;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
:where(.credit-burndown-outcome strong) {
|
|
135
|
+
grid-column: 1 / -1;
|
|
136
|
+
font-size: clamp(1.35em, 3.5cqi, 1.8em);
|
|
137
|
+
font-variant-numeric: tabular-nums;
|
|
138
|
+
letter-spacing: -0.025em;
|
|
139
|
+
line-height: 1.15;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
:where(.credit-burndown-root[data-credit-burndown-status="LOW_BALANCE_PROJECTED"] .credit-burndown-outcome) {
|
|
143
|
+
border-inline-start-color: var(--credit-burndown-low-balance);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
:where(.credit-burndown-root[data-credit-burndown-status="DEPLETION_PROJECTED"] .credit-burndown-outcome) {
|
|
147
|
+
border-inline-start-color: var(--credit-burndown-depletion);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
:where(.credit-burndown-summary-grid) {
|
|
151
|
+
display: grid;
|
|
152
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
153
|
+
gap: 1px;
|
|
154
|
+
margin: 0;
|
|
155
|
+
overflow: hidden;
|
|
156
|
+
border: 1px solid var(--credit-burndown-border);
|
|
157
|
+
border-radius: calc(var(--credit-burndown-radius) * 0.72);
|
|
158
|
+
background: var(--credit-burndown-border);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
:where(.credit-burndown-stat) {
|
|
162
|
+
min-inline-size: 0;
|
|
163
|
+
padding: 0.75rem;
|
|
164
|
+
background: var(--credit-burndown-surface);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
:where(.credit-burndown-stat dt),
|
|
168
|
+
:where(.credit-burndown-breakdown-grid dt),
|
|
169
|
+
:where(.credit-burndown-source-inputs dt),
|
|
170
|
+
:where(.credit-burndown-trace-steps dt),
|
|
171
|
+
:where(.credit-burndown-chart-context dt) {
|
|
172
|
+
color: var(--credit-burndown-muted-text);
|
|
173
|
+
font-family: var(--credit-burndown-data-font-family);
|
|
174
|
+
font-size: 0.6875em;
|
|
175
|
+
font-weight: 700;
|
|
176
|
+
letter-spacing: 0.04em;
|
|
177
|
+
text-transform: uppercase;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
:where(.credit-burndown-stat dd),
|
|
181
|
+
:where(.credit-burndown-breakdown-grid dd),
|
|
182
|
+
:where(.credit-burndown-source-inputs dd),
|
|
183
|
+
:where(.credit-burndown-trace-steps dd),
|
|
184
|
+
:where(.credit-burndown-chart-context dd) {
|
|
185
|
+
margin: 0.22rem 0 0;
|
|
186
|
+
overflow-wrap: anywhere;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
:where(.credit-burndown-stat dd) {
|
|
190
|
+
font-size: 0.9375em;
|
|
191
|
+
font-variant-numeric: tabular-nums;
|
|
192
|
+
font-weight: 690;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
:where(.credit-burndown-scenarios) {
|
|
196
|
+
min-inline-size: 0;
|
|
197
|
+
padding: 0;
|
|
198
|
+
border: 0;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
:where(.credit-burndown-scenarios .credit-burndown-heading) {
|
|
202
|
+
padding: 0;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
:where(.credit-burndown-scenario-grid) {
|
|
206
|
+
display: grid;
|
|
207
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
208
|
+
gap: 2px;
|
|
209
|
+
overflow: hidden;
|
|
210
|
+
padding: 2px;
|
|
211
|
+
border: 1px solid var(--credit-burndown-border);
|
|
212
|
+
border-radius: calc(var(--credit-burndown-radius) * 0.72);
|
|
213
|
+
background: var(--credit-burndown-border);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
:where(.credit-burndown-scenario) {
|
|
217
|
+
position: relative;
|
|
218
|
+
display: grid;
|
|
219
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
220
|
+
align-items: baseline;
|
|
221
|
+
gap: 0.3rem;
|
|
222
|
+
min-inline-size: 0;
|
|
223
|
+
padding: 0.62rem 0.7rem;
|
|
224
|
+
background: var(--credit-burndown-background);
|
|
225
|
+
cursor: pointer;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
:where(.credit-burndown-scenario[data-credit-burndown-selected="true"]) {
|
|
229
|
+
color: var(--credit-burndown-accent-contrast);
|
|
230
|
+
background: var(--credit-burndown-accent);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
:where(.credit-burndown-scenario-input) {
|
|
234
|
+
position: absolute;
|
|
235
|
+
inset: 0;
|
|
236
|
+
inline-size: 100%;
|
|
237
|
+
block-size: 100%;
|
|
238
|
+
margin: 0;
|
|
239
|
+
opacity: 0;
|
|
240
|
+
cursor: pointer;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
:where(.credit-burndown-scenario-input:focus-visible) +
|
|
244
|
+
:where(.credit-burndown-scenario-label) {
|
|
245
|
+
outline: 3px solid currentColor;
|
|
246
|
+
outline-offset: 3px;
|
|
247
|
+
border-radius: 0.15rem;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
:where(.credit-burndown-scenario-label) {
|
|
251
|
+
font-size: 0.875em;
|
|
252
|
+
font-weight: 730;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
:where(.credit-burndown-scenario-balance) {
|
|
256
|
+
overflow: hidden;
|
|
257
|
+
font-family: var(--credit-burndown-data-font-family);
|
|
258
|
+
font-size: 0.75em;
|
|
259
|
+
font-variant-numeric: tabular-nums;
|
|
260
|
+
text-overflow: ellipsis;
|
|
261
|
+
white-space: nowrap;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
:where(.credit-burndown-chart) {
|
|
265
|
+
padding: 0.9rem;
|
|
266
|
+
border: 1px solid var(--credit-burndown-border);
|
|
267
|
+
border-radius: calc(var(--credit-burndown-radius) * 0.85);
|
|
268
|
+
background: var(--credit-burndown-surface);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
:where(.credit-burndown-chart-summary) {
|
|
272
|
+
margin-block: 0 0.65rem;
|
|
273
|
+
color: var(--credit-burndown-muted-text);
|
|
274
|
+
font-size: 0.875em;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
:where(.credit-burndown-chart-legend) {
|
|
278
|
+
display: flex;
|
|
279
|
+
flex-wrap: wrap;
|
|
280
|
+
gap: 0.45rem 1rem;
|
|
281
|
+
margin-block-end: 0.55rem;
|
|
282
|
+
color: var(--credit-burndown-muted-text);
|
|
283
|
+
font-family: var(--credit-burndown-data-font-family);
|
|
284
|
+
font-size: 0.6875em;
|
|
285
|
+
font-weight: 700;
|
|
286
|
+
letter-spacing: 0.03em;
|
|
287
|
+
text-transform: uppercase;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
:where(.credit-burndown-chart-legend > span) {
|
|
291
|
+
align-items: center;
|
|
292
|
+
display: inline-flex;
|
|
293
|
+
gap: 0.35rem;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
:where(.credit-burndown-chart-key) {
|
|
297
|
+
display: inline-block;
|
|
298
|
+
inline-size: 1.15rem;
|
|
299
|
+
block-size: 0.2rem;
|
|
300
|
+
border-radius: 999px;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
:where(.credit-burndown-chart-key--observed) {
|
|
304
|
+
background: var(--credit-burndown-muted-text);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
:where(.credit-burndown-chart-key--projected) {
|
|
308
|
+
background: var(--credit-burndown-accent);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
:where(.credit-burndown-chart-svg) {
|
|
312
|
+
display: block;
|
|
313
|
+
inline-size: 100%;
|
|
314
|
+
block-size: auto;
|
|
315
|
+
overflow: visible;
|
|
316
|
+
border: 1px solid var(--credit-burndown-border);
|
|
317
|
+
border-radius: calc(var(--credit-burndown-radius) * 0.6);
|
|
318
|
+
background: var(--credit-burndown-background);
|
|
319
|
+
color: var(--credit-burndown-accent);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
:where(.credit-burndown-chart-observed-zone) {
|
|
323
|
+
fill: var(--credit-burndown-surface);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
:where(.credit-burndown-chart-projected-zone) {
|
|
327
|
+
fill: var(--credit-burndown-background);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
:where(.credit-burndown-chart-observed-bar) {
|
|
331
|
+
fill: var(--credit-burndown-muted-text);
|
|
332
|
+
opacity: 0.72;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
:where(.credit-burndown-chart-line) {
|
|
336
|
+
stroke: currentColor;
|
|
337
|
+
stroke-width: var(--credit-burndown-line-width);
|
|
338
|
+
stroke-linecap: round;
|
|
339
|
+
stroke-linejoin: round;
|
|
340
|
+
vector-effect: non-scaling-stroke;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
:where(.credit-burndown-chart-area) {
|
|
344
|
+
fill: color-mix(in srgb, currentColor 16%, transparent);
|
|
345
|
+
stroke: none;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
:where(.credit-burndown-root[data-credit-burndown-status="LOW_BALANCE_PROJECTED"] .credit-burndown-chart-line),
|
|
349
|
+
:where(.credit-burndown-root[data-credit-burndown-status="LOW_BALANCE_PROJECTED"] .credit-burndown-chart-point) {
|
|
350
|
+
color: var(--credit-burndown-low-balance);
|
|
351
|
+
fill: var(--credit-burndown-low-balance);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
:where(.credit-burndown-root[data-credit-burndown-status="DEPLETION_PROJECTED"] .credit-burndown-chart-line),
|
|
355
|
+
:where(.credit-burndown-root[data-credit-burndown-status="DEPLETION_PROJECTED"] .credit-burndown-chart-point) {
|
|
356
|
+
color: var(--credit-burndown-depletion);
|
|
357
|
+
fill: var(--credit-burndown-depletion);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
:where(.credit-burndown-root[data-credit-burndown-status="LOW_BALANCE_PROJECTED"] .credit-burndown-chart-area) {
|
|
361
|
+
color: var(--credit-burndown-low-balance);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
:where(.credit-burndown-root[data-credit-burndown-status="DEPLETION_PROJECTED"] .credit-burndown-chart-area) {
|
|
365
|
+
color: var(--credit-burndown-depletion);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
:where(.credit-burndown-chart-point) {
|
|
369
|
+
fill: var(--credit-burndown-accent);
|
|
370
|
+
stroke: var(--credit-burndown-background);
|
|
371
|
+
stroke-width: 2px;
|
|
372
|
+
vector-effect: non-scaling-stroke;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
:where(.credit-burndown-chart-zero) {
|
|
376
|
+
stroke: var(--credit-burndown-depletion);
|
|
377
|
+
stroke-width: 1px;
|
|
378
|
+
stroke-dasharray: 5 4;
|
|
379
|
+
vector-effect: non-scaling-stroke;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
:where(.credit-burndown-chart-threshold) {
|
|
383
|
+
stroke: var(--credit-burndown-low-balance);
|
|
384
|
+
stroke-width: 1px;
|
|
385
|
+
stroke-dasharray: 2 3;
|
|
386
|
+
vector-effect: non-scaling-stroke;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
:where(.credit-burndown-chart-forecast-start) {
|
|
390
|
+
stroke: var(--credit-burndown-text);
|
|
391
|
+
stroke-width: 1.5px;
|
|
392
|
+
stroke-dasharray: 2 4;
|
|
393
|
+
vector-effect: non-scaling-stroke;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
:where(.credit-burndown-chart-horizon) {
|
|
397
|
+
stroke: var(--credit-burndown-border);
|
|
398
|
+
stroke-width: 1px;
|
|
399
|
+
vector-effect: non-scaling-stroke;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
:where(.credit-burndown-chart-context) {
|
|
403
|
+
position: relative;
|
|
404
|
+
min-block-size: 5.25rem;
|
|
405
|
+
margin: 0.55rem 0 0;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
:where(.credit-burndown-chart-context > div) {
|
|
409
|
+
position: absolute;
|
|
410
|
+
inset-block-start: 0;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
:where(.credit-burndown-chart-context > div:first-child) {
|
|
414
|
+
inset-inline-start: 0;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
:where(.credit-burndown-chart-context-forecast-start) {
|
|
418
|
+
inset-block-start: 2.65rem;
|
|
419
|
+
inset-inline-start: var(--credit-burndown-forecast-start-position);
|
|
420
|
+
max-inline-size: 48%;
|
|
421
|
+
transform: translateX(-50%);
|
|
422
|
+
text-align: center;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
:where(.credit-burndown-chart-context-forecast-start[data-credit-burndown-alignment="start"]) {
|
|
426
|
+
transform: none;
|
|
427
|
+
text-align: start;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
:where(.credit-burndown-chart-context-forecast-start[data-credit-burndown-alignment="end"]) {
|
|
431
|
+
transform: translateX(-100%);
|
|
432
|
+
text-align: end;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
:where(.credit-burndown-chart-context-end) {
|
|
436
|
+
inset-inline-end: 0;
|
|
437
|
+
text-align: end;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
:where(.credit-burndown-chart-context dd) {
|
|
441
|
+
font-size: 0.75em;
|
|
442
|
+
font-variant-numeric: tabular-nums;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
:where(.credit-burndown-warnings) {
|
|
446
|
+
padding-block-start: 0.1rem;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
:where(.credit-burndown-warning-list) {
|
|
450
|
+
display: grid;
|
|
451
|
+
gap: 0.5rem;
|
|
452
|
+
margin: 0;
|
|
453
|
+
padding: 0;
|
|
454
|
+
list-style: none;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
:where(.credit-burndown-warning) {
|
|
458
|
+
display: flex;
|
|
459
|
+
gap: 0.5rem;
|
|
460
|
+
padding: 0.7rem 0.8rem;
|
|
461
|
+
border: 1px solid color-mix(in srgb, var(--credit-burndown-low-balance) 35%, transparent);
|
|
462
|
+
border-inline-start: 0.25rem solid var(--credit-burndown-low-balance);
|
|
463
|
+
border-radius: calc(var(--credit-burndown-radius) * 0.45);
|
|
464
|
+
background: var(--credit-burndown-warning-background);
|
|
465
|
+
color: var(--credit-burndown-text);
|
|
466
|
+
font-size: 0.875em;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
:where(.credit-burndown-warning[data-credit-burndown-warning="DEPLETION_PROJECTED"]) {
|
|
470
|
+
border-color: color-mix(in srgb, var(--credit-burndown-depletion) 35%, transparent);
|
|
471
|
+
border-inline-start-color: var(--credit-burndown-depletion);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
:where(.credit-burndown-no-warnings) {
|
|
475
|
+
align-items: center;
|
|
476
|
+
display: flex;
|
|
477
|
+
gap: 0.45rem;
|
|
478
|
+
margin: 0;
|
|
479
|
+
color: var(--credit-burndown-on-track);
|
|
480
|
+
font-size: 0.875em;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
:where(.credit-burndown-actions) {
|
|
484
|
+
align-items: center;
|
|
485
|
+
display: flex;
|
|
486
|
+
flex-wrap: wrap;
|
|
487
|
+
gap: 0.5rem;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
:where(.credit-burndown-breakdown) {
|
|
491
|
+
padding-block-start: 0.85rem;
|
|
492
|
+
border-block-start: 1px solid var(--credit-burndown-border);
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
:where(.credit-burndown-trace summary) {
|
|
496
|
+
inline-size: fit-content;
|
|
497
|
+
color: var(--credit-burndown-accent);
|
|
498
|
+
cursor: pointer;
|
|
499
|
+
font-weight: 720;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
:where(.credit-burndown-trace summary:focus-visible),
|
|
503
|
+
:where(.credit-burndown-actions :is(a, button):focus-visible),
|
|
504
|
+
:where(.credit-burndown-table-scroll:focus-visible) {
|
|
505
|
+
outline: 3px solid var(--credit-burndown-accent);
|
|
506
|
+
outline-offset: 3px;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
:where(.credit-burndown-trace-content) {
|
|
510
|
+
display: grid;
|
|
511
|
+
gap: 1rem;
|
|
512
|
+
padding-block-start: 1rem;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
:where(.credit-burndown-breakdown-grid) {
|
|
516
|
+
display: grid;
|
|
517
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, 9rem), 1fr));
|
|
518
|
+
gap: 0.75rem;
|
|
519
|
+
margin: 0;
|
|
520
|
+
padding: 0.8rem;
|
|
521
|
+
border: 1px solid var(--credit-burndown-border);
|
|
522
|
+
border-radius: calc(var(--credit-burndown-radius) * 0.6);
|
|
523
|
+
background: var(--credit-burndown-surface);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
:where(.credit-burndown-breakdown-grid > div),
|
|
527
|
+
:where(.credit-burndown-source-inputs > div) {
|
|
528
|
+
min-inline-size: 0;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
:where(.credit-burndown-table-scroll) {
|
|
532
|
+
max-inline-size: 100%;
|
|
533
|
+
overflow-x: auto;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
:where(.credit-burndown-table) {
|
|
537
|
+
inline-size: 100%;
|
|
538
|
+
border-collapse: collapse;
|
|
539
|
+
background: var(--credit-burndown-background);
|
|
540
|
+
font-variant-numeric: tabular-nums;
|
|
541
|
+
text-align: start;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
:where(.credit-burndown-table caption) {
|
|
545
|
+
padding-block-end: 0.45rem;
|
|
546
|
+
color: var(--credit-burndown-muted-text);
|
|
547
|
+
font-weight: 680;
|
|
548
|
+
text-align: start;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
:where(.credit-burndown-table th),
|
|
552
|
+
:where(.credit-burndown-table td) {
|
|
553
|
+
min-inline-size: 8rem;
|
|
554
|
+
padding: 0.52rem;
|
|
555
|
+
border-block-end: 1px solid var(--credit-burndown-border);
|
|
556
|
+
text-align: start;
|
|
557
|
+
white-space: nowrap;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
:where(.credit-burndown-table thead th) {
|
|
561
|
+
background: var(--credit-burndown-surface);
|
|
562
|
+
font-family: var(--credit-burndown-data-font-family);
|
|
563
|
+
font-size: 0.75em;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
:where(.credit-burndown-source-inputs),
|
|
567
|
+
:where(.credit-burndown-trace-steps) {
|
|
568
|
+
display: grid;
|
|
569
|
+
gap: 0.75rem;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
:where(.credit-burndown-source-inputs) {
|
|
573
|
+
margin: 0;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
:where(.credit-burndown-trace-steps) {
|
|
577
|
+
padding-inline-start: 1.5rem;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
:where(.credit-burndown-trace-step-heading) {
|
|
581
|
+
margin-block: 0 0.4rem;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
:where(.credit-burndown-trace-steps dl) {
|
|
585
|
+
display: grid;
|
|
586
|
+
gap: 0.4rem;
|
|
587
|
+
margin: 0;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
:where(.credit-burndown-trace code) {
|
|
591
|
+
font-family: var(--credit-burndown-data-font-family);
|
|
592
|
+
white-space: pre-wrap;
|
|
593
|
+
overflow-wrap: anywhere;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
:where(.credit-burndown-version-error) {
|
|
597
|
+
padding: 1rem;
|
|
598
|
+
border: 1px solid var(--credit-burndown-depletion);
|
|
599
|
+
border-radius: var(--credit-burndown-radius);
|
|
600
|
+
color: var(--credit-burndown-depletion);
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
:where(.credit-burndown-sr-only) {
|
|
604
|
+
position: absolute;
|
|
605
|
+
overflow: hidden;
|
|
606
|
+
inline-size: 1px;
|
|
607
|
+
block-size: 1px;
|
|
608
|
+
padding: 0;
|
|
609
|
+
border: 0;
|
|
610
|
+
margin: -1px;
|
|
611
|
+
clip: rect(0, 0, 0, 0);
|
|
612
|
+
white-space: nowrap;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
@container (max-width: 38rem) {
|
|
616
|
+
:where(.credit-burndown-root) {
|
|
617
|
+
--credit-burndown-gap: 0.9rem;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
:where(.credit-burndown-summary-grid) {
|
|
621
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
@container (max-width: 26rem) {
|
|
627
|
+
:where(.credit-burndown-header) {
|
|
628
|
+
align-items: flex-start;
|
|
629
|
+
flex-direction: column;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
:where(.credit-burndown-scenario-grid),
|
|
633
|
+
:where(.credit-burndown-summary-grid) {
|
|
634
|
+
grid-template-columns: 1fr;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
:where(.credit-burndown-chart-context) {
|
|
638
|
+
display: grid;
|
|
639
|
+
grid-template-columns: 1fr;
|
|
640
|
+
gap: 0.5rem;
|
|
641
|
+
min-block-size: 0;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
:where(.credit-burndown-chart-context > div) {
|
|
645
|
+
position: static;
|
|
646
|
+
transform: none;
|
|
647
|
+
text-align: start;
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
@media (forced-colors: active) {
|
|
652
|
+
:where(.credit-burndown-root),
|
|
653
|
+
:where(.credit-burndown-scenario[data-credit-burndown-selected="true"]),
|
|
654
|
+
:where(.credit-burndown-chart-line),
|
|
655
|
+
:where(.credit-burndown-chart-area),
|
|
656
|
+
:where(.credit-burndown-chart-zero),
|
|
657
|
+
:where(.credit-burndown-chart-threshold),
|
|
658
|
+
:where(.credit-burndown-chart-forecast-start),
|
|
659
|
+
:where(.credit-burndown-warning) {
|
|
660
|
+
forced-color-adjust: auto;
|
|
661
|
+
}
|
|
662
|
+
}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { ForecastInput, ForecastResult, ForecastStatus, ScenarioForecast, ScenarioKey } from "@tansohq/credit-forecast-schema";
|
|
3
|
+
export type CreditBurndownHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
4
|
+
export interface VersionMismatchDetails {
|
|
5
|
+
inputSchemaVersion: string;
|
|
6
|
+
resultSchemaVersion: string;
|
|
7
|
+
inputMethodologyVersion: string;
|
|
8
|
+
resultMethodologyVersion: string;
|
|
9
|
+
}
|
|
10
|
+
export interface CreditBurndownMessages {
|
|
11
|
+
title: string;
|
|
12
|
+
summaryTitle: string;
|
|
13
|
+
scenariosTitle: string;
|
|
14
|
+
scenarioControlLabel: string;
|
|
15
|
+
chartTitle: string;
|
|
16
|
+
warningsTitle: string;
|
|
17
|
+
breakdownTitle: string;
|
|
18
|
+
actionsLabel: string;
|
|
19
|
+
currentBalanceLabel: string;
|
|
20
|
+
allocationLabel: string;
|
|
21
|
+
usedToDateLabel: string;
|
|
22
|
+
baselineDailyBurnLabel: string;
|
|
23
|
+
endingBalanceLabel: string;
|
|
24
|
+
depletionDateLabel: string;
|
|
25
|
+
statusLabel: string;
|
|
26
|
+
dailyBurnLabel: string;
|
|
27
|
+
projectedUsageLabel: string;
|
|
28
|
+
projectedConsumptionLabel: string;
|
|
29
|
+
utilizationLabel: string;
|
|
30
|
+
shortfallLabel: string;
|
|
31
|
+
periodLabel: string;
|
|
32
|
+
asOfLabel: string;
|
|
33
|
+
lookbackLabel: string;
|
|
34
|
+
observedTableCaption: string;
|
|
35
|
+
projectedTableCaption: (scenarioLabel: string) => string;
|
|
36
|
+
dateHeader: string;
|
|
37
|
+
dailyUsageHeader: string;
|
|
38
|
+
cumulativeUsageHeader: string;
|
|
39
|
+
startBalanceHeader: string;
|
|
40
|
+
balanceDeltaHeader: string;
|
|
41
|
+
endingBalanceHeader: string;
|
|
42
|
+
noWarnings: string;
|
|
43
|
+
calculationTraceSummary: string;
|
|
44
|
+
sourceInputsTitle: string;
|
|
45
|
+
stepsTitle: string;
|
|
46
|
+
formulaLabel: string;
|
|
47
|
+
operandsLabel: string;
|
|
48
|
+
resultLabel: string;
|
|
49
|
+
scenarioLabel: (key: ScenarioKey) => string;
|
|
50
|
+
statusText: (status: ForecastStatus) => string;
|
|
51
|
+
creditsValue: (value: string) => string;
|
|
52
|
+
scenarioBalanceValue: (value: string) => string;
|
|
53
|
+
utilizationValue: (value: string) => string;
|
|
54
|
+
dayCount: (count: number) => string;
|
|
55
|
+
periodValue: (startDate: string, endDate: string) => string;
|
|
56
|
+
chartDescription: (scenarioLabel: string, endingBalance: string) => string;
|
|
57
|
+
lowBalanceWarning: (scenarioLabel: string, endingBalance: string, threshold: string) => string;
|
|
58
|
+
depletionWarning: (scenarioLabel: string, depletionDate: string, shortfall: string) => string;
|
|
59
|
+
versionMismatch: (details: VersionMismatchDetails) => string;
|
|
60
|
+
}
|
|
61
|
+
export interface CreditBurndownRootProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
|
|
62
|
+
input: ForecastInput;
|
|
63
|
+
result: ForecastResult;
|
|
64
|
+
children: ReactNode;
|
|
65
|
+
selectedScenario?: ScenarioKey;
|
|
66
|
+
defaultSelectedScenario?: ScenarioKey;
|
|
67
|
+
onSelectedScenarioChange?: (scenario: ScenarioKey) => void;
|
|
68
|
+
headingLevel?: CreditBurndownHeadingLevel;
|
|
69
|
+
messages?: Partial<CreditBurndownMessages>;
|
|
70
|
+
actions?: ReactNode;
|
|
71
|
+
}
|
|
72
|
+
export interface CreditBurndownSectionProps {
|
|
73
|
+
className?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface CreditBurndownActionsProps extends CreditBurndownSectionProps {
|
|
76
|
+
children?: ReactNode;
|
|
77
|
+
}
|
|
78
|
+
export type CreditBurndownViewProps = Omit<CreditBurndownRootProps, "children">;
|
|
79
|
+
export interface CreditBurndownContextValue {
|
|
80
|
+
input: ForecastInput;
|
|
81
|
+
result: ForecastResult;
|
|
82
|
+
selectedScenarioKey: ScenarioKey;
|
|
83
|
+
selectedScenario: ScenarioForecast;
|
|
84
|
+
selectScenario: (scenario: ScenarioKey) => void;
|
|
85
|
+
headingLevel: CreditBurndownHeadingLevel;
|
|
86
|
+
messages: CreditBurndownMessages;
|
|
87
|
+
actions?: ReactNode;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tansohq/credit-burndown-react",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Provider-neutral React components for credit usage and burndown forecasts",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"sideEffects": [
|
|
12
|
+
"./dist/styles.css"
|
|
13
|
+
],
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./styles.css": "./dist/styles.css"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/tansohq/credit-estimator.git",
|
|
24
|
+
"directory": "packages/ui-react"
|
|
25
|
+
},
|
|
26
|
+
"homepage": "https://github.com/tansohq/credit-estimator#readme",
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/tansohq/credit-estimator/issues"
|
|
29
|
+
},
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@tansohq/credit-forecast-schema": "0.1.0"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"react": "^18.2.0 || ^19.0.0",
|
|
38
|
+
"react-dom": "^18.2.0 || ^19.0.0"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=20"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@testing-library/jest-dom": "6.9.1",
|
|
45
|
+
"@testing-library/react": "^16.1.0",
|
|
46
|
+
"@testing-library/user-event": "^14.5.2",
|
|
47
|
+
"@types/jest-axe": "^3.5.9",
|
|
48
|
+
"@types/react": "^19.0.3",
|
|
49
|
+
"@types/react-dom": "^19.0.2",
|
|
50
|
+
"jest-axe": "^10.0.0",
|
|
51
|
+
"react": "^19.0.0",
|
|
52
|
+
"react-dom": "^19.0.0",
|
|
53
|
+
"typescript": "^5.7.2",
|
|
54
|
+
"vite": "^6.4.3",
|
|
55
|
+
"vitest": "^4.1.7"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {
|
|
58
|
+
"build": "tsc -p tsconfig.json && node --input-type=module --eval \"import { copyFileSync } from 'node:fs'; copyFileSync('src/styles.css', 'dist/styles.css')\"",
|
|
59
|
+
"test": "vitest run --root ../.. packages/ui-react/test",
|
|
60
|
+
"typecheck": "tsc -p tsconfig.test.json --noEmit"
|
|
61
|
+
}
|
|
62
|
+
}
|