@plumile/ui 0.1.125 → 0.1.131

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.
Files changed (140) hide show
  1. package/README.md +6 -0
  2. package/lib/esm/admin/organisms/admin_sidebar/adminSidebar.css.js +2 -1
  3. package/lib/esm/admin/organisms/admin_topbar/adminTopbar.css.js +1 -1
  4. package/lib/esm/admin/theme/BackofficeThemeProvider.js +43 -0
  5. package/lib/esm/admin/theme/BackofficeThemeProvider.js.map +1 -0
  6. package/lib/esm/admin/theme/adminDensity.css.js +1 -1
  7. package/lib/esm/admin/theme/adminSurface.css.js +1 -1
  8. package/lib/esm/atomic/atoms/badge/badge.css.js.map +1 -1
  9. package/lib/esm/atomic/atoms/button/button.css.js +2 -2
  10. package/lib/esm/atomic/atoms/button/button.css.js.map +1 -1
  11. package/lib/esm/atomic/atoms/checkbox/checkbox.css.js.map +1 -1
  12. package/lib/esm/atomic/atoms/input/input.css.js.map +1 -1
  13. package/lib/esm/atomic/atoms/textarea/textarea.css.js.map +1 -1
  14. package/lib/esm/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.js.map +1 -1
  15. package/lib/esm/atomic/molecules/checkbox_field/checkboxField.css.js.map +1 -1
  16. package/lib/esm/atomic/molecules/form/formStyles.css.js.map +1 -1
  17. package/lib/esm/atomic/molecules/markdown/LazyMarkdownRenderer.css.js +1 -1
  18. package/lib/esm/atomic/molecules/markdown/components/MarkdownArticleContainer.css.js +1 -0
  19. package/lib/esm/atomic/molecules/markdown/components/MarkdownArticleContainer.css.js.map +1 -1
  20. package/lib/esm/atomic/molecules/markdown/components/MarkdownCodeCopyButton.css.js.map +1 -1
  21. package/lib/esm/atomic/molecules/markdown/components/MarkdownDelete.css.js.map +1 -1
  22. package/lib/esm/atomic/molecules/markdown/components/MarkdownEmphasis.css.js.map +1 -1
  23. package/lib/esm/atomic/molecules/markdown/components/MarkdownFootnoteReference.css.js.map +1 -1
  24. package/lib/esm/atomic/molecules/markdown/components/MarkdownHeading.css.js +0 -1
  25. package/lib/esm/atomic/molecules/markdown/components/MarkdownHeading.css.js.map +1 -1
  26. package/lib/esm/atomic/molecules/markdown/components/MarkdownInlineCode.css.js.map +1 -1
  27. package/lib/esm/atomic/molecules/markdown/components/MarkdownLink.css.js.map +1 -1
  28. package/lib/esm/atomic/molecules/markdown/components/MarkdownList.css.js.map +1 -1
  29. package/lib/esm/atomic/molecules/markdown/components/MarkdownListItem.css.js.map +1 -1
  30. package/lib/esm/atomic/molecules/markdown/components/MarkdownMark.css.js.map +1 -1
  31. package/lib/esm/atomic/molecules/markdown/components/MarkdownMermaidBlock.js +1 -1
  32. package/lib/esm/atomic/molecules/markdown/components/MarkdownMermaidBlock.js.map +1 -1
  33. package/lib/esm/atomic/molecules/markdown/components/MarkdownParagraph.css.js.map +1 -1
  34. package/lib/esm/atomic/molecules/markdown/components/MarkdownStrong.css.js.map +1 -1
  35. package/lib/esm/atomic/molecules/markdown/components/MarkdownSubscript.css.js.map +1 -1
  36. package/lib/esm/atomic/molecules/markdown/components/MarkdownSuperscript.css.js.map +1 -1
  37. package/lib/esm/atomic/molecules/markdown/components/MarkdownTable.css.js.map +1 -1
  38. package/lib/esm/atomic/molecules/markdown/components/MarkdownTableCaption.css.js.map +1 -1
  39. package/lib/esm/atomic/molecules/markdown/components/MarkdownTableCell.css.js.map +1 -1
  40. package/lib/esm/atomic/molecules/markdown/components/MarkdownTableRow.css.js.map +1 -1
  41. package/lib/esm/atomic/molecules/markdown/components/MarkdownTaskListItem.css.js.map +1 -1
  42. package/lib/esm/atomic/molecules/markdown/components/MarkdownText.css.js.map +1 -1
  43. package/lib/esm/atomic/molecules/tabs/tabs.css.js.map +1 -1
  44. package/lib/esm/atomic/molecules/toast/toast.css.js.map +1 -1
  45. package/lib/esm/atomic/organisms/sidebar/navigationSidebar.css.js.map +1 -1
  46. package/lib/esm/atomic/organisms/sidebar/sidebar.css.js.map +1 -1
  47. package/lib/esm/backoffice/atoms/tag/Tag.js +9 -8
  48. package/lib/esm/backoffice/atoms/tag/Tag.js.map +1 -1
  49. package/lib/esm/backoffice/layout/backofficeLayoutTokens.js +1 -1
  50. package/lib/esm/backoffice/layout/backofficeLayoutTokens.js.map +1 -1
  51. package/lib/esm/backoffice/molecules/backoffice_filter_drawer/backofficeFilterDrawer.css.js.map +1 -1
  52. package/lib/esm/backoffice/molecules/backoffice_relations_menu/backofficeRelationsMenu.css.js.map +1 -1
  53. package/lib/esm/backoffice/molecules/backoffice_tabs/backofficeTabs.css.js +2 -2
  54. package/lib/esm/backoffice/molecules/backoffice_tabs/backofficeTabs.css.js.map +1 -1
  55. package/lib/esm/backoffice/molecules/filter_chip_row/filterChipRow.css.js.map +1 -1
  56. package/lib/esm/backoffice/molecules/sidebar_nav_item/sidebarNavItem.css.js +1 -1
  57. package/lib/esm/backoffice/molecules/sidebar_nav_item/sidebarNavItem.css.js.map +1 -1
  58. package/lib/esm/backoffice/molecules/sidebar_nav_section/sidebarNavSection.css.js.map +1 -1
  59. package/lib/esm/backoffice/molecules/sidebar_profile_menu/sidebarProfileMenu.css.js.map +1 -1
  60. package/lib/esm/backoffice/templates/detail_page_template/detailPageTemplate.css.js +1 -1
  61. package/lib/esm/backoffice/templates/list_page_template/listPageTemplate.css.js +1 -1
  62. package/lib/esm/backoffice/templates/list_page_template/listPageTemplate.css.js.map +1 -1
  63. package/lib/esm/components/charts/MetricHistoryChart.js +1 -1
  64. package/lib/esm/components/charts/MetricHistoryChart.js.map +1 -1
  65. package/lib/esm/components/charts/TimeSeriesLineChart.js +34 -34
  66. package/lib/esm/components/charts/TimeSeriesLineChart.js.map +1 -1
  67. package/lib/esm/components/dashboard/section_nav/SectionNav.css.js.map +1 -1
  68. package/lib/esm/components/dashboard/segmented_nav/SegmentedNav.css.js.map +1 -1
  69. package/lib/esm/components/data-table/DataTable.css.js +44 -44
  70. package/lib/esm/components/data-table/DataTable.css.js.map +1 -1
  71. package/lib/esm/components/data-table/ResponsiveRecordList.css.js +1 -1
  72. package/lib/esm/components/data-table/ResponsiveRecordList.css.js.map +1 -1
  73. package/lib/esm/components/data-table/VirtualizedConnectionTable.js +1 -1
  74. package/lib/esm/components/layout/PageShell.css.js.map +1 -1
  75. package/lib/esm/components/media/imagePreviewModal.css.js.map +1 -1
  76. package/lib/esm/components/routing/routePendingBar.css.js.map +1 -1
  77. package/lib/esm/components/select/SimpleSelect.css.js.map +1 -1
  78. package/lib/esm/index.js +255 -256
  79. package/lib/esm/internal/charts/timeSeriesLineChartHelpers.js +54 -4
  80. package/lib/esm/internal/charts/timeSeriesLineChartHelpers.js.map +1 -1
  81. package/lib/esm/shared/backofficeTableDensity.css.js +1 -1
  82. package/lib/esm/shared/currencyAmount.js +36 -23
  83. package/lib/esm/shared/currencyAmount.js.map +1 -1
  84. package/lib/esm/style.css +1 -1
  85. package/lib/esm/theme/ThemeProvider.js +28 -26
  86. package/lib/esm/theme/ThemeProvider.js.map +1 -1
  87. package/lib/esm/theme/backofficeTheme.css.js +4092 -0
  88. package/lib/esm/theme/backofficeTheme.css.js.map +1 -0
  89. package/lib/esm/theme/index.js +11 -11
  90. package/lib/esm/theme/publicTheme.css.js +4091 -0
  91. package/lib/esm/theme/publicTheme.css.js.map +1 -0
  92. package/lib/esm/theme/sprinkles.css.js.map +1 -1
  93. package/lib/esm/theme/theme.css.js +6129 -3
  94. package/lib/esm/theme/theme.css.js.map +1 -1
  95. package/lib/esm/theme/themeContract.css.js +2329 -0
  96. package/lib/esm/theme/themeContract.css.js.map +1 -0
  97. package/lib/types/admin/theme/BackofficeThemeProvider.d.ts +18 -0
  98. package/lib/types/admin/theme/BackofficeThemeProvider.d.ts.map +1 -0
  99. package/lib/types/backoffice/atoms/tag/Tag.d.ts +2 -1
  100. package/lib/types/backoffice/atoms/tag/Tag.d.ts.map +1 -1
  101. package/lib/types/components/charts/TimeSeriesLineChart.d.ts +2 -0
  102. package/lib/types/components/charts/TimeSeriesLineChart.d.ts.map +1 -1
  103. package/lib/types/components/data-table/DataTable.css.d.ts.map +1 -1
  104. package/lib/types/index.d.ts +2 -3
  105. package/lib/types/index.d.ts.map +1 -1
  106. package/lib/types/internal/charts/timeSeriesLineChartHelpers.d.ts +20 -0
  107. package/lib/types/internal/charts/timeSeriesLineChartHelpers.d.ts.map +1 -1
  108. package/lib/types/shared/currencyAmount.d.ts +5 -1
  109. package/lib/types/shared/currencyAmount.d.ts.map +1 -1
  110. package/lib/types/theme/ThemeProvider.d.ts +3 -1
  111. package/lib/types/theme/ThemeProvider.d.ts.map +1 -1
  112. package/lib/types/theme/backofficeTheme.css.d.ts +4291 -0
  113. package/lib/types/theme/backofficeTheme.css.d.ts.map +1 -0
  114. package/lib/types/theme/index.d.ts +1 -1
  115. package/lib/types/theme/index.d.ts.map +1 -1
  116. package/lib/types/theme/publicTheme.css.d.ts +4296 -0
  117. package/lib/types/theme/publicTheme.css.d.ts.map +1 -0
  118. package/lib/types/theme/theme.css.d.ts +3 -3
  119. package/lib/types/theme/theme.css.d.ts.map +1 -1
  120. package/lib/types/theme/{themeContract.d.ts → themeContract.css.d.ts} +1 -1
  121. package/lib/types/theme/{theme-light.css.d.ts.map → themeContract.css.d.ts.map} +1 -1
  122. package/package.json +3 -3
  123. package/lib/esm/admin/theme/AdminThemeProvider.js +0 -15
  124. package/lib/esm/admin/theme/AdminThemeProvider.js.map +0 -1
  125. package/lib/esm/admin/theme/adminTheme.css.js +0 -13
  126. package/lib/esm/admin/theme/adminTheme.css.js.map +0 -1
  127. package/lib/esm/theme/theme-dark.css.js +0 -8
  128. package/lib/esm/theme/theme-dark.css.js.map +0 -1
  129. package/lib/esm/theme/theme-light.css.js +0 -2049
  130. package/lib/esm/theme/theme-light.css.js.map +0 -1
  131. package/lib/esm/theme/themeContract.js +0 -1051
  132. package/lib/esm/theme/themeContract.js.map +0 -1
  133. package/lib/types/admin/theme/AdminThemeProvider.d.ts +0 -9
  134. package/lib/types/admin/theme/AdminThemeProvider.d.ts.map +0 -1
  135. package/lib/types/admin/theme/adminTheme.css.d.ts +0 -2
  136. package/lib/types/admin/theme/adminTheme.css.d.ts.map +0 -1
  137. package/lib/types/theme/theme-dark.css.d.ts +0 -2
  138. package/lib/types/theme/theme-dark.css.d.ts.map +0 -1
  139. package/lib/types/theme/theme-light.css.d.ts +0 -2146
  140. package/lib/types/theme/themeContract.d.ts.map +0 -1
@@ -1,18 +1,68 @@
1
1
  //#region src/internal/charts/timeSeriesLineChartHelpers.ts
2
- var e = 6;
3
- function t(t) {
2
+ var e = 6, t = 5;
3
+ function n(t) {
4
4
  let n = t[0];
5
5
  if (n == null || n.data.length <= e) return n == null ? [] : n.data.map((e) => e.x);
6
6
  let r = Math.ceil(n.data.length / e), i = n.data.filter((e, t) => t % r === 0).map((e) => e.x), a = n.data.at(-1);
7
7
  return a != null && i.at(-1) !== a.x && i.push(a.x), i;
8
8
  }
9
- function n(e) {
9
+ function r(e) {
10
10
  return (/* @__PURE__ */ new Date(`${e}T00:00:00Z`)).toLocaleDateString(void 0, {
11
11
  month: "short",
12
12
  day: "2-digit"
13
13
  });
14
14
  }
15
+ function i(e) {
16
+ return Number(e.toPrecision(12));
17
+ }
18
+ function a(e) {
19
+ if (!Number.isFinite(e) || e <= 0) return 1;
20
+ let t = 10 ** Math.floor(Math.log10(e)), n = e / t;
21
+ return n <= 1 ? t : n <= 2 ? 2 * t : n <= 5 ? 5 * t : 10 * t;
22
+ }
23
+ function o(e, t, n, r) {
24
+ if (t <= e) return [i(e)];
25
+ let o = (t - e) / (r - 1), s = a(Math.max(o, n)), c = [];
26
+ for (let n = e; n <= t + s / 10 && c.length < r; n += s) c.push(i(n));
27
+ let l = i(t);
28
+ return c.at(-1) !== l && c.length < r && c.push(l), c;
29
+ }
30
+ function s(e) {
31
+ let t = 0;
32
+ for (let n of e) for (let e of n.data) Number.isFinite(e.y) && e.y > t && (t = e.y);
33
+ return t;
34
+ }
35
+ function c(e) {
36
+ let t = new Intl.NumberFormat("en-US", {
37
+ notation: "compact",
38
+ maximumFractionDigits: 1
39
+ }).format(e);
40
+ return e !== 0 && t === "0" ? new Intl.NumberFormat("en-US", { maximumSignificantDigits: 2 }).format(e) : t;
41
+ }
42
+ function l(e, n) {
43
+ let r = 0;
44
+ Number.isFinite(n.min) && (r = n.min ?? 0);
45
+ let c = 0;
46
+ n.minTickStep != null && Number.isFinite(n.minTickStep) && (c = Math.max(n.minTickStep, 0));
47
+ let l = t;
48
+ if (n.maxTickCount != null && Number.isFinite(n.maxTickCount) && (l = Math.max(Math.floor(n.maxTickCount), 2)), typeof n.max == "number" && Number.isFinite(n.max)) {
49
+ let e = Math.max(n.max, r);
50
+ return {
51
+ min: r,
52
+ max: e,
53
+ tickValues: o(r, e, c, l)
54
+ };
55
+ }
56
+ let u = Math.max(s(e), r) - r, d = c;
57
+ u > 0 && (d = u / (l - 1));
58
+ let f = a(Math.max(d, c)), p = i(r + Math.max(Math.ceil(u / f), 1) * f);
59
+ return {
60
+ min: r,
61
+ max: p,
62
+ tickValues: o(r, p, f, l)
63
+ };
64
+ }
15
65
  //#endregion
16
- export { n as formatDayTick, t as getVisibleDayTicks };
66
+ export { r as formatDayTick, c as formatYAxisTick, s as getSeriesYMax, n as getVisibleDayTicks, l as resolveYAxisState };
17
67
 
18
68
  //# sourceMappingURL=timeSeriesLineChartHelpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeSeriesLineChartHelpers.js","names":[],"sources":["../../../../src/internal/charts/timeSeriesLineChartHelpers.ts"],"sourcesContent":["const MAX_X_TICKS = 6;\n\ntype TimeSeriesWithDayPoints = {\n data: readonly {\n x: string;\n }[];\n};\n\n/**\n * Limits the number of visible day ticks while always keeping the last point.\n */\nexport function getVisibleDayTicks(\n series: readonly TimeSeriesWithDayPoints[],\n): readonly string[] {\n const firstSerie = series[0];\n if (firstSerie == null || firstSerie.data.length <= MAX_X_TICKS) {\n if (firstSerie == null) {\n return [];\n }\n\n return firstSerie.data.map((point) => {\n return point.x;\n });\n }\n\n const step = Math.ceil(firstSerie.data.length / MAX_X_TICKS);\n const visibleTicks = firstSerie.data\n .filter((_, index) => {\n return index % step === 0;\n })\n .map((point) => {\n return point.x;\n });\n\n const lastPoint = firstSerie.data.at(-1);\n if (lastPoint != null && visibleTicks.at(-1) !== lastPoint.x) {\n visibleTicks.push(lastPoint.x);\n }\n\n return visibleTicks;\n}\n\n/**\n * Formats a YYYY-MM-DD key into a short month/day label for the x-axis.\n */\nexport function formatDayTick(dayKey: string): string {\n const parsed = new Date(`${dayKey}T00:00:00Z`);\n return parsed.toLocaleDateString(undefined, {\n month: 'short',\n day: '2-digit',\n });\n}\n"],"mappings":";AAAA,IAAM,IAAc;AAWpB,SAAgB,EACd,GACmB;CACnB,IAAM,IAAa,EAAO;CAC1B,IAAI,KAAc,QAAQ,EAAW,KAAK,UAAU,GAKlD,OAJI,KAAc,OACT,EAAE,GAGJ,EAAW,KAAK,KAAK,MACnB,EAAM,EACb;CAGJ,IAAM,IAAO,KAAK,KAAK,EAAW,KAAK,SAAS,EAAY,EACtD,IAAe,EAAW,KAC7B,QAAQ,GAAG,MACH,IAAQ,MAAS,EACxB,CACD,KAAK,MACG,EAAM,EACb,EAEE,IAAY,EAAW,KAAK,GAAG,GAAG;CAKxC,OAJI,KAAa,QAAQ,EAAa,GAAG,GAAG,KAAK,EAAU,KACzD,EAAa,KAAK,EAAU,EAAE,EAGzB;;AAMT,SAAgB,EAAc,GAAwB;CAEpD,wBAAO,IADY,KAAK,GAAG,EAAO,YAC3B,EAAO,mBAAmB,KAAA,GAAW;EAC1C,OAAO;EACP,KAAK;EACN,CAAC"}
1
+ {"version":3,"file":"timeSeriesLineChartHelpers.js","names":[],"sources":["../../../../src/internal/charts/timeSeriesLineChartHelpers.ts"],"sourcesContent":["const MAX_X_TICKS = 6;\nconst DEFAULT_Y_TICK_COUNT = 5;\n\ntype TimeSeriesWithDayPoints = {\n data: readonly {\n x: string;\n }[];\n};\n\ntype TimeSeriesWithNumberPoints = {\n data: readonly {\n y: number;\n }[];\n};\n\nexport type TimeSeriesYAxisConfig = {\n min?: number;\n max?: number | 'auto';\n minTickStep?: number;\n maxTickCount?: number;\n formatValue?: (value: number) => string;\n};\n\nexport type TimeSeriesYAxisState = {\n min: number;\n max: number;\n tickValues: readonly number[];\n};\n\n/**\n * Limits the number of visible day ticks while always keeping the last point.\n */\nexport function getVisibleDayTicks(\n series: readonly TimeSeriesWithDayPoints[],\n): readonly string[] {\n const firstSerie = series[0];\n if (firstSerie == null || firstSerie.data.length <= MAX_X_TICKS) {\n if (firstSerie == null) {\n return [];\n }\n\n return firstSerie.data.map((point) => {\n return point.x;\n });\n }\n\n const step = Math.ceil(firstSerie.data.length / MAX_X_TICKS);\n const visibleTicks = firstSerie.data\n .filter((_, index) => {\n return index % step === 0;\n })\n .map((point) => {\n return point.x;\n });\n\n const lastPoint = firstSerie.data.at(-1);\n if (lastPoint != null && visibleTicks.at(-1) !== lastPoint.x) {\n visibleTicks.push(lastPoint.x);\n }\n\n return visibleTicks;\n}\n\n/**\n * Formats a YYYY-MM-DD key into a short month/day label for the x-axis.\n */\nexport function formatDayTick(dayKey: string): string {\n const parsed = new Date(`${dayKey}T00:00:00Z`);\n return parsed.toLocaleDateString(undefined, {\n month: 'short',\n day: '2-digit',\n });\n}\n\n/**\n * Rounds axis numbers to avoid floating-point artifacts in tick values.\n */\nfunction roundAxisValue(value: number): number {\n return Number(value.toPrecision(12));\n}\n\n/**\n * Rounds a raw step to a stable 1/2/5/10-based increment.\n */\nfunction getNiceTickStep(step: number): number {\n if (!Number.isFinite(step) || step <= 0) {\n return 1;\n }\n\n const exponent = Math.floor(Math.log10(step));\n const power = 10 ** exponent;\n const fraction = step / power;\n\n if (fraction <= 1) {\n return power;\n }\n if (fraction <= 2) {\n return 2 * power;\n }\n if (fraction <= 5) {\n return 5 * power;\n }\n\n return 10 * power;\n}\n\n/**\n * Builds an explicit list of y-axis tick values.\n */\nfunction buildYAxisTicks(\n min: number,\n max: number,\n minTickStep: number,\n maxTickCount: number,\n): readonly number[] {\n if (max <= min) {\n return [roundAxisValue(min)];\n }\n\n const rawStep = (max - min) / (maxTickCount - 1);\n const tickStep = getNiceTickStep(Math.max(rawStep, minTickStep));\n const ticks: number[] = [];\n for (\n let value = min;\n value <= max + tickStep / 10 && ticks.length < maxTickCount;\n value += tickStep\n ) {\n ticks.push(roundAxisValue(value));\n }\n\n const roundedMax = roundAxisValue(max);\n if (ticks.at(-1) !== roundedMax && ticks.length < maxTickCount) {\n ticks.push(roundedMax);\n }\n\n return ticks;\n}\n\n/**\n * Returns the highest finite y value across all series.\n */\nexport function getSeriesYMax(\n series: readonly TimeSeriesWithNumberPoints[],\n): number {\n let max = 0;\n for (const serie of series) {\n for (const point of serie.data) {\n if (Number.isFinite(point.y) && point.y > max) {\n max = point.y;\n }\n }\n }\n\n return max;\n}\n\n/**\n * Formats a default y-axis tick without collapsing small non-zero values to 0.\n */\nexport function formatYAxisTick(value: number): string {\n const compactValue = new Intl.NumberFormat('en-US', {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(value);\n\n if (value !== 0 && compactValue === '0') {\n return new Intl.NumberFormat('en-US', {\n maximumSignificantDigits: 2,\n }).format(value);\n }\n\n return compactValue;\n}\n\n/**\n * Resolves a Nivo-compatible y-axis domain and explicit ticks.\n */\nexport function resolveYAxisState(\n series: readonly TimeSeriesWithNumberPoints[],\n config: TimeSeriesYAxisConfig,\n): TimeSeriesYAxisState {\n let min = 0;\n if (Number.isFinite(config.min)) {\n min = config.min ?? 0;\n }\n\n let minTickStep = 0;\n if (config.minTickStep != null && Number.isFinite(config.minTickStep)) {\n minTickStep = Math.max(config.minTickStep, 0);\n }\n\n let maxTickCount = DEFAULT_Y_TICK_COUNT;\n if (config.maxTickCount != null && Number.isFinite(config.maxTickCount)) {\n maxTickCount = Math.max(Math.floor(config.maxTickCount), 2);\n }\n\n if (typeof config.max === 'number' && Number.isFinite(config.max)) {\n const max = Math.max(config.max, min);\n return {\n min,\n max,\n tickValues: buildYAxisTicks(min, max, minTickStep, maxTickCount),\n };\n }\n\n const dataMax = Math.max(getSeriesYMax(series), min);\n const range = dataMax - min;\n let rawStep = minTickStep;\n if (range > 0) {\n rawStep = range / (maxTickCount - 1);\n }\n const tickStep = getNiceTickStep(Math.max(rawStep, minTickStep));\n const max = roundAxisValue(\n min + Math.max(Math.ceil(range / tickStep), 1) * tickStep,\n );\n\n return {\n min,\n max,\n tickValues: buildYAxisTicks(min, max, tickStep, maxTickCount),\n };\n}\n"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  /* empty css */
3
3
  /* empty css */
4
4
  /* empty css */
5
- /* empty css */
5
+ /* empty css */
6
6
  /* empty css */
7
7
  /* empty css */
8
8
  /* empty css */
@@ -1,36 +1,49 @@
1
1
  import { jsx as e } from "react/jsx-runtime";
2
2
  //#region src/shared/currencyAmount.tsx
3
- var t = "—", n = (e) => Object.is(e, -0) ? 0 : e;
4
- function r(e, r = {}) {
5
- let i = r.fallback ?? t;
6
- if (e == null) return i;
7
- let a = Number(e.amount), o = e.currency.trim();
8
- if (!Number.isFinite(a) || o.length === 0) return i;
3
+ var t = "—", n = 2, r = 2, i = 6, a = (e) => Object.is(e, -0) ? 0 : e;
4
+ function o(e, i = {}) {
5
+ let o = i.fallback ?? t;
6
+ if (e == null) return o;
7
+ let s = Number(e.amount), c = e.currency.trim();
8
+ if (!Number.isFinite(s) || c.length === 0) return o;
9
+ let l = i.minimumFractionDigits ?? n, u = i.maximumFractionDigits ?? Math.max(r, l);
9
10
  try {
10
- return new Intl.NumberFormat(r.locale, {
11
+ return new Intl.NumberFormat(i.locale, {
11
12
  style: "currency",
12
- currency: o,
13
- currencyDisplay: r.currencyDisplay ?? "symbol",
14
- minimumFractionDigits: 2,
15
- maximumFractionDigits: 2
16
- }).format(n(a));
13
+ currency: c,
14
+ currencyDisplay: i.currencyDisplay ?? "symbol",
15
+ minimumFractionDigits: l,
16
+ maximumFractionDigits: u
17
+ }).format(a(s));
17
18
  } catch {
18
- return i;
19
+ return o;
19
20
  }
20
21
  }
21
- var i = ({ amount: t, currency: n, locale: i, fallback: a, currencyDisplay: o, className: s }) => {
22
- let c = null;
23
- t != null && n != null && (c = {
24
- amount: t,
25
- currency: n
22
+ function s(e, t = {}) {
23
+ return o(e, {
24
+ ...t,
25
+ minimumFractionDigits: t.minimumFractionDigits ?? n,
26
+ maximumFractionDigits: t.maximumFractionDigits ?? i
26
27
  });
27
- let l = {};
28
- return i != null && (l.locale = i), a != null && (l.fallback = a), o != null && (l.currencyDisplay = o), /* @__PURE__ */ e("span", {
29
- className: s,
30
- children: r(c, l)
28
+ }
29
+ var c = ({ amount: n, currency: r, locale: i, fallback: a, currencyDisplay: c, showOriginalAmountTitle: l = !1, className: u }) => {
30
+ let d = null;
31
+ n != null && r != null && (d = {
32
+ amount: n,
33
+ currency: r
34
+ });
35
+ let f = {};
36
+ i != null && (f.locale = i), a != null && (f.fallback = a), c != null && (f.currencyDisplay = c);
37
+ let p = o(d, f), m;
38
+ l && (m = s(d, f));
39
+ let h = f.fallback ?? t, g;
40
+ return m != null && m !== h && (g = m), /* @__PURE__ */ e("span", {
41
+ className: u,
42
+ title: g,
43
+ children: p
31
44
  });
32
45
  };
33
46
  //#endregion
34
- export { i as MoneyAmount, r as formatCurrencyAmount };
47
+ export { c as MoneyAmount, o as formatCurrencyAmount, s as formatCurrencyAmountTitle };
35
48
 
36
49
  //# sourceMappingURL=currencyAmount.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"currencyAmount.js","names":[],"sources":["../../../src/shared/currencyAmount.tsx"],"sourcesContent":["import type { JSX } from 'react';\n\nexport type CurrencyAmountLike = {\n readonly amount: number;\n readonly currency: string;\n};\n\nexport type FormatCurrencyAmountOptions = {\n readonly locale?: string | readonly string[];\n readonly fallback?: string;\n readonly currencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n};\n\ntype MutableFormatCurrencyAmountOptions = {\n locale?: string | readonly string[];\n fallback?: string;\n currencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n};\n\nexport type MoneyAmountProps = {\n readonly amount: number | null | undefined;\n readonly currency: string | null | undefined;\n readonly locale?: string | readonly string[];\n readonly fallback?: string;\n readonly currencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n readonly className?: string;\n};\n\nconst DEFAULT_FALLBACK = '—';\n\nconst normalizeSignedZero = (value: number): number => {\n if (Object.is(value, -0)) {\n return 0;\n }\n return value;\n};\n\n/**\n * Formats a numeric amount and ISO currency code for compact UI display.\n */\nexport function formatCurrencyAmount(\n value: CurrencyAmountLike | null | undefined,\n options: FormatCurrencyAmountOptions = {},\n): string {\n const fallback = options.fallback ?? DEFAULT_FALLBACK;\n if (value == null) {\n return fallback;\n }\n\n const amount = Number(value.amount);\n const currency = value.currency.trim();\n if (!Number.isFinite(amount) || currency.length === 0) {\n return fallback;\n }\n\n try {\n return new Intl.NumberFormat(options.locale, {\n style: 'currency',\n currency,\n currencyDisplay: options.currencyDisplay ?? 'symbol',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(normalizeSignedZero(amount));\n } catch {\n return fallback;\n }\n}\n\nexport const MoneyAmount = ({\n amount,\n currency,\n locale,\n fallback,\n currencyDisplay,\n className,\n}: MoneyAmountProps): JSX.Element => {\n let value: CurrencyAmountLike | null = null;\n if (amount != null && currency != null) {\n value = {\n amount,\n currency,\n };\n }\n\n const options: MutableFormatCurrencyAmountOptions = {};\n if (locale != null) {\n options.locale = locale;\n }\n if (fallback != null) {\n options.fallback = fallback;\n }\n if (currencyDisplay != null) {\n options.currencyDisplay = currencyDisplay;\n }\n\n return (\n <span className={className}>{formatCurrencyAmount(value, options)}</span>\n );\n};\n"],"mappings":";;AA4BA,IAAM,IAAmB,KAEnB,KAAuB,MACvB,OAAO,GAAG,GAAO,GAAG,GACf,IAEF;AAMT,SAAgB,EACd,GACA,IAAuC,EAAE,EACjC;CACR,IAAM,IAAW,EAAQ,YAAY;CACrC,IAAI,KAAS,MACX,OAAO;CAGT,IAAM,IAAS,OAAO,EAAM,OAAO,EAC7B,IAAW,EAAM,SAAS,MAAM;CACtC,IAAI,CAAC,OAAO,SAAS,EAAO,IAAI,EAAS,WAAW,GAClD,OAAO;CAGT,IAAI;EACF,OAAO,IAAI,KAAK,aAAa,EAAQ,QAAQ;GAC3C,OAAO;GACP;GACA,iBAAiB,EAAQ,mBAAmB;GAC5C,uBAAuB;GACvB,uBAAuB;GACxB,CAAC,CAAC,OAAO,EAAoB,EAAO,CAAC;SAChC;EACN,OAAO;;;AAIX,IAAa,KAAe,EAC1B,WACA,aACA,WACA,aACA,oBACA,mBACmC;CACnC,IAAI,IAAmC;CACvC,AAAI,KAAU,QAAQ,KAAY,SAChC,IAAQ;EACN;EACA;EACD;CAGH,IAAM,IAA8C,EAAE;CAWtD,OAVI,KAAU,SACZ,EAAQ,SAAS,IAEf,KAAY,SACd,EAAQ,WAAW,IAEjB,KAAmB,SACrB,EAAQ,kBAAkB,IAI1B,kBAAC,QAAD;EAAiB;YAAY,EAAqB,GAAO,EAAQ;EAAQ,CAAA"}
1
+ {"version":3,"file":"currencyAmount.js","names":[],"sources":["../../../src/shared/currencyAmount.tsx"],"sourcesContent":["import type { JSX } from 'react';\n\nexport type CurrencyAmountLike = {\n readonly amount: number;\n readonly currency: string;\n};\n\nexport type FormatCurrencyAmountOptions = {\n readonly locale?: string | readonly string[];\n readonly fallback?: string;\n readonly currencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n readonly minimumFractionDigits?: number;\n readonly maximumFractionDigits?: number;\n};\n\ntype MutableFormatCurrencyAmountOptions = {\n locale?: string | readonly string[];\n fallback?: string;\n currencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n};\n\nexport type MoneyAmountProps = {\n readonly amount: number | null | undefined;\n readonly currency: string | null | undefined;\n readonly locale?: string | readonly string[];\n readonly fallback?: string;\n readonly currencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n readonly showOriginalAmountTitle?: boolean;\n readonly className?: string;\n};\n\nconst DEFAULT_FALLBACK = '—';\nconst DEFAULT_MINIMUM_FRACTION_DIGITS = 2;\nconst DEFAULT_MAXIMUM_FRACTION_DIGITS = 2;\nconst TITLE_MAXIMUM_FRACTION_DIGITS = 6;\n\nconst normalizeSignedZero = (value: number): number => {\n if (Object.is(value, -0)) {\n return 0;\n }\n return value;\n};\n\n/**\n * Formats a numeric amount and ISO currency code for compact UI display.\n */\nexport function formatCurrencyAmount(\n value: CurrencyAmountLike | null | undefined,\n options: FormatCurrencyAmountOptions = {},\n): string {\n const fallback = options.fallback ?? DEFAULT_FALLBACK;\n if (value == null) {\n return fallback;\n }\n\n const amount = Number(value.amount);\n const currency = value.currency.trim();\n if (!Number.isFinite(amount) || currency.length === 0) {\n return fallback;\n }\n const minimumFractionDigits =\n options.minimumFractionDigits ?? DEFAULT_MINIMUM_FRACTION_DIGITS;\n const maximumFractionDigits =\n options.maximumFractionDigits ??\n Math.max(DEFAULT_MAXIMUM_FRACTION_DIGITS, minimumFractionDigits);\n\n try {\n return new Intl.NumberFormat(options.locale, {\n style: 'currency',\n currency,\n currencyDisplay: options.currencyDisplay ?? 'symbol',\n minimumFractionDigits,\n maximumFractionDigits,\n }).format(normalizeSignedZero(amount));\n } catch {\n return fallback;\n }\n}\n\n/**\n * Formats a currency amount with enough precision for title attributes.\n */\nexport function formatCurrencyAmountTitle(\n value: CurrencyAmountLike | null | undefined,\n options: FormatCurrencyAmountOptions = {},\n): string {\n return formatCurrencyAmount(value, {\n ...options,\n minimumFractionDigits:\n options.minimumFractionDigits ?? DEFAULT_MINIMUM_FRACTION_DIGITS,\n maximumFractionDigits:\n options.maximumFractionDigits ?? TITLE_MAXIMUM_FRACTION_DIGITS,\n });\n}\n\nexport const MoneyAmount = ({\n amount,\n currency,\n locale,\n fallback,\n currencyDisplay,\n showOriginalAmountTitle = false,\n className,\n}: MoneyAmountProps): JSX.Element => {\n let value: CurrencyAmountLike | null = null;\n if (amount != null && currency != null) {\n value = {\n amount,\n currency,\n };\n }\n\n const options: MutableFormatCurrencyAmountOptions = {};\n if (locale != null) {\n options.locale = locale;\n }\n if (fallback != null) {\n options.fallback = fallback;\n }\n if (currencyDisplay != null) {\n options.currencyDisplay = currencyDisplay;\n }\n\n const label = formatCurrencyAmount(value, options);\n let title: string | undefined;\n if (showOriginalAmountTitle) {\n title = formatCurrencyAmountTitle(value, options);\n }\n\n const fallbackText = options.fallback ?? DEFAULT_FALLBACK;\n let titleProp: string | undefined;\n if (title != null && title !== fallbackText) {\n titleProp = title;\n }\n\n return (\n <span className={className} title={titleProp}>\n {label}\n </span>\n );\n};\n"],"mappings":";;AAiCA,IAAM,IAAmB,KACnB,IAAkC,GAClC,IAAkC,GAClC,IAAgC,GAEhC,KAAuB,MACvB,OAAO,GAAG,GAAO,GAAG,GACf,IAEF;AAMT,SAAgB,EACd,GACA,IAAuC,EAAE,EACjC;CACR,IAAM,IAAW,EAAQ,YAAY;CACrC,IAAI,KAAS,MACX,OAAO;CAGT,IAAM,IAAS,OAAO,EAAM,OAAO,EAC7B,IAAW,EAAM,SAAS,MAAM;CACtC,IAAI,CAAC,OAAO,SAAS,EAAO,IAAI,EAAS,WAAW,GAClD,OAAO;CAET,IAAM,IACJ,EAAQ,yBAAyB,GAC7B,IACJ,EAAQ,yBACR,KAAK,IAAI,GAAiC,EAAsB;CAElE,IAAI;EACF,OAAO,IAAI,KAAK,aAAa,EAAQ,QAAQ;GAC3C,OAAO;GACP;GACA,iBAAiB,EAAQ,mBAAmB;GAC5C;GACA;GACD,CAAC,CAAC,OAAO,EAAoB,EAAO,CAAC;SAChC;EACN,OAAO;;;AAOX,SAAgB,EACd,GACA,IAAuC,EAAE,EACjC;CACR,OAAO,EAAqB,GAAO;EACjC,GAAG;EACH,uBACE,EAAQ,yBAAyB;EACnC,uBACE,EAAQ,yBAAyB;EACpC,CAAC;;AAGJ,IAAa,KAAe,EAC1B,WACA,aACA,WACA,aACA,oBACA,6BAA0B,IAC1B,mBACmC;CACnC,IAAI,IAAmC;CACvC,AAAI,KAAU,QAAQ,KAAY,SAChC,IAAQ;EACN;EACA;EACD;CAGH,IAAM,IAA8C,EAAE;CAOtD,AANI,KAAU,SACZ,EAAQ,SAAS,IAEf,KAAY,SACd,EAAQ,WAAW,IAEjB,KAAmB,SACrB,EAAQ,kBAAkB;CAG5B,IAAM,IAAQ,EAAqB,GAAO,EAAQ,EAC9C;CACJ,AAAI,MACF,IAAQ,EAA0B,GAAO,EAAQ;CAGnD,IAAM,IAAe,EAAQ,YAAY,GACrC;CAKJ,OAJI,KAAS,QAAQ,MAAU,MAC7B,IAAY,IAIZ,kBAAC,QAAD;EAAiB;EAAW,OAAO;YAChC;EACI,CAAA"}