@marimo-team/frontend 0.23.10-dev37 → 0.23.10-dev41

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 (65) hide show
  1. package/dist/assets/{ImperativeModal-CDPfRIx5.js → ImperativeModal-BW1dmntO.js} +1 -1
  2. package/dist/assets/{JsonOutput-BemZ015x.js → JsonOutput-DXzjDImT.js} +2 -2
  3. package/dist/assets/{MarimoErrorOutput-BQyzDTet.js → MarimoErrorOutput-DIx3jD4Z.js} +1 -1
  4. package/dist/assets/{RSPContexts-QoVyPvhN.js → RSPContexts-C3vBe8nL.js} +1 -1
  5. package/dist/assets/{RunButton-ACHY83op.js → RunButton-DLMH3KLF.js} +1 -1
  6. package/dist/assets/{add-cell-with-ai-C1gPcb_Q.js → add-cell-with-ai-CeYsuinK.js} +1 -1
  7. package/dist/assets/{add-connection-dialog-ZjsgZSOV.js → add-connection-dialog-CTTPp4DA.js} +1 -1
  8. package/dist/assets/{agent-panel-CEJFK1Jm.js → agent-panel-CQcFMptO.js} +1 -1
  9. package/dist/assets/{ai-model-dropdown-BhCUiMlB.js → ai-model-dropdown-CXNYq3J_.js} +1 -1
  10. package/dist/assets/{app-config-button-CJlCOCbq.js → app-config-button-BI_m1lzO.js} +1 -1
  11. package/dist/assets/{cache-panel-Cs308ish.js → cache-panel-C2wbL8-g.js} +1 -1
  12. package/dist/assets/{cell-editor-DbvkP4j5.js → cell-editor-CdlAPM5y.js} +1 -1
  13. package/dist/assets/{cell-link-BFEa98Sc.js → cell-link-spbX-mlL.js} +1 -1
  14. package/dist/assets/{chat-display-3RqKe-PZ.js → chat-display-CiAnYN2V.js} +1 -1
  15. package/dist/assets/{chat-panel-ChWIPBm1.js → chat-panel-CWJ3edyp.js} +1 -1
  16. package/dist/assets/{chat-ui-BX8NORpM.js → chat-ui-BrpoAGED.js} +1 -1
  17. package/dist/assets/{column-preview-DYVirisk.js → column-preview-cHpj1JI3.js} +1 -1
  18. package/dist/assets/{command-BkXWJLBP.js → command-BmOGG6-2.js} +1 -1
  19. package/dist/assets/{command-palette-Vkj8jbRj.js → command-palette-BF3Tp6Qs.js} +1 -1
  20. package/dist/assets/{common-C9lH0PD9.js → common-Zqa_rd3u.js} +1 -1
  21. package/dist/assets/{dependency-graph-panel-gmv5dXTu.js → dependency-graph-panel-1c-_VkGM.js} +1 -1
  22. package/dist/assets/{edit-page-BrUsc_AX.js → edit-page-CWYAjQfm.js} +4 -4
  23. package/dist/assets/{error-panel-lbt2yT6e.js → error-panel-DmfYCEYR.js} +1 -1
  24. package/dist/assets/{field-BWxnw0_c.js → field-DCdxnSKm.js} +1 -1
  25. package/dist/assets/{file-explorer-panel-CgALaLLS.js → file-explorer-panel-CITmIApE.js} +1 -1
  26. package/dist/assets/{file-name-input-B-pk2GlG.js → file-name-input-D-E8LtaP.js} +1 -1
  27. package/dist/assets/{form-BWJXHKy1.js → form-BUVEy6A8.js} +1 -1
  28. package/dist/assets/formatting-DuH2AQgo.js +1 -0
  29. package/dist/assets/{gallery-page-L--A5Tic.js → gallery-page-iZXf43Df.js} +1 -1
  30. package/dist/assets/{glide-data-editor-C_ammsJR.js → glide-data-editor-BbI6JGpY.js} +1 -1
  31. package/dist/assets/{home-page-VA-VAYME.js → home-page-CVKp7bjJ.js} +1 -1
  32. package/dist/assets/{hooks-ClbTcW-s.js → hooks-B4MwgGVt.js} +1 -1
  33. package/dist/assets/index-DB64hzBp.css +2 -0
  34. package/dist/assets/index-DukQCuHG.js +38 -0
  35. package/dist/assets/input-DA8xlX70.js +1 -0
  36. package/dist/assets/{layout-Di_1u3yT.js → layout-By2E0DxG.js} +3 -3
  37. package/dist/assets/{logs-panel-c4pWZhi-.js → logs-panel-KFtLFK9O.js} +1 -1
  38. package/dist/assets/{name-cell-input-mVvyyh5P.js → name-cell-input-DyUkpM9d.js} +1 -1
  39. package/dist/assets/numbers-DGxQfQ-A.js +1 -0
  40. package/dist/assets/{packages-panel-BspJRth2.js → packages-panel-Bt88BnuF.js} +1 -1
  41. package/dist/assets/{panels-C2Lu-9Am.js → panels-BMVwv9bb.js} +1 -1
  42. package/dist/assets/{reveal-component-D69mChLl.js → reveal-component-UAqGa1wV.js} +1 -1
  43. package/dist/assets/{run-page-sD-tVkQP.js → run-page-Cmzv9g5Z.js} +1 -1
  44. package/dist/assets/{scratchpad-panel-C-uK6ogD.js → scratchpad-panel-C5mnecjj.js} +1 -1
  45. package/dist/assets/{secrets-panel-BMKccJMu.js → secrets-panel-BJEb16JJ.js} +1 -1
  46. package/dist/assets/{session-panel-DqF_iSx7.js → session-panel-DJxyhD5Y.js} +1 -1
  47. package/dist/assets/{snippets-panel-CCXy7OX0.js → snippets-panel-BGtSLFha.js} +1 -1
  48. package/dist/assets/{tracing-DhjGEWqy.js → tracing-DNuuRjp_.js} +1 -1
  49. package/dist/assets/{tracing-panel-Dyt4cvQF.js → tracing-panel-CnlPrcNd.js} +2 -2
  50. package/dist/assets/{useCellActionButton-DH4naKvY.js → useCellActionButton-DNDYDKvS.js} +1 -1
  51. package/dist/assets/{useDependencyPanelTab-DI6IO_9Y.js → useDependencyPanelTab-Bu76tcmV.js} +1 -1
  52. package/dist/assets/{useNotebookActions-DNIvhWif.js → useNotebookActions-CMYQ5bMR.js} +1 -1
  53. package/dist/assets/{write-secret-modal-CwsDn7jz.js → write-secret-modal-DM7t6LNp.js} +1 -1
  54. package/dist/index.html +13 -13
  55. package/package.json +1 -1
  56. package/src/components/ui/number-field.tsx +5 -1
  57. package/src/plugins/impl/SliderPlugin.tsx +132 -18
  58. package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +278 -8
  59. package/src/utils/__tests__/numbers.test.ts +20 -0
  60. package/src/utils/numbers.ts +27 -0
  61. package/dist/assets/formatting-30FX-rC-.js +0 -1
  62. package/dist/assets/index-BEUIgFV-.js +0 -38
  63. package/dist/assets/index-Ct3LgsQ8.css +0 -2
  64. package/dist/assets/input-DckzEovC.js +0 -1
  65. package/dist/assets/numbers-C3BAdHZE.js +0 -1
@@ -1,6 +1,8 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import { describe, expect, it } from "vitest";
3
3
  import {
4
+ countFractionDigits,
5
+ maxFractionDigitsForSteps,
4
6
  prettyEngineeringNumber,
5
7
  prettyNumber,
6
8
  prettyScientificNumber,
@@ -86,3 +88,21 @@ describe("prettyEngineeringNumber", () => {
86
88
  expect(prettyEngineeringNumber(-0.000_123_4, locale)).toBe("-123µ");
87
89
  });
88
90
  });
91
+
92
+ describe("countFractionDigits", () => {
93
+ it("counts decimal places without float noise", () => {
94
+ expect(countFractionDigits(1)).toBe(0);
95
+ expect(countFractionDigits(0.1)).toBe(1);
96
+ expect(countFractionDigits(0.3)).toBe(1);
97
+ expect(countFractionDigits(0.000025)).toBe(6);
98
+ expect(countFractionDigits(3.5)).toBe(1);
99
+ });
100
+ });
101
+
102
+ describe("maxFractionDigitsForSteps", () => {
103
+ it("infers precision from steps and gaps", () => {
104
+ expect(maxFractionDigitsForSteps([0.1, 0.2, 0.3, 0.4], 0.1)).toBe(1);
105
+ expect(maxFractionDigitsForSteps([1, 2, 3.5, 4], 0.5)).toBe(1);
106
+ expect(maxFractionDigitsForSteps([1, 2, 3, 4], 1)).toBe(0);
107
+ });
108
+ });
@@ -23,6 +23,33 @@ export const maxFractionalDigits = memoizeLastValue((locale: string) => {
23
23
  return 0;
24
24
  });
25
25
 
26
+ /** Decimal places needed to display `n` without float noise. */
27
+ export function countFractionDigits(n: number): number {
28
+ if (!Number.isFinite(n) || n === 0) {
29
+ return 0;
30
+ }
31
+ const normalized = n.toFixed(12).replace(/\.?0+$/, "");
32
+ const dot = normalized.indexOf(".");
33
+ return dot === -1 ? 0 : normalized.length - dot - 1;
34
+ }
35
+
36
+ /** Max fraction digits to display a set of step values cleanly. */
37
+ export function maxFractionDigitsForSteps(
38
+ steps: number[],
39
+ minGap: number,
40
+ ): number {
41
+ let max = countFractionDigits(minGap);
42
+ for (const step of steps) {
43
+ max = Math.max(max, countFractionDigits(step));
44
+ }
45
+ return max;
46
+ }
47
+
48
+ /** Round away float noise so step-based inputs stay on a clean decimal grid. */
49
+ export function roundToFractionDigits(n: number, digits: number): number {
50
+ return Number(n.toFixed(digits));
51
+ }
52
+
26
53
  export function prettyNumber(value: unknown, locale: string): string {
27
54
  if (value === undefined || value === null) {
28
55
  return "";
@@ -1 +0,0 @@
1
- import{r as i}from"./numbers-C3BAdHZE.js";function t(r,o){if(r===0||r===-1)return"0 B";let e=1024,$=["B","KB","MB","GB","TB"],f=Math.floor(Math.log(r)/Math.log(e));return`${i(r/e**f,o)} ${$[f]}`}function u(r,o){if(r===0)return"0s";if(r<.001)return`${i(r*1e6,o)}\xB5s`;if(r<1)return`${i(r*1e3,o)}ms`;if(r<60)return`${i(r,o)}s`;let e=Math.floor(r/60),$=r%60;if(e<60)return $>0?`${e}m ${i($,o)}s`:`${e}m`;let f=Math.floor(e/60),n=e%60;return n>0?`${f}h ${n}m`:`${f}h`}export{u as n,t};