@marimo-team/frontend 0.23.1-dev7 → 0.23.1-dev8

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 (77) hide show
  1. package/dist/assets/{CellStatus-1vKptZLk.js → CellStatus-zTcdYfqx.js} +1 -1
  2. package/dist/assets/{JsonOutput-BsAmBgmA.js → JsonOutput-BY31ccA7.js} +1 -1
  3. package/dist/assets/{MarimoErrorOutput-BrEeS6om.js → MarimoErrorOutput--Yd2Aw0J.js} +1 -1
  4. package/dist/assets/{RenderHTML-DvfCr2Ox.js → RenderHTML-CbuarQqA.js} +1 -1
  5. package/dist/assets/{add-cell-with-ai-Dt7oHdbm.js → add-cell-with-ai-_Y6SqxBB.js} +1 -1
  6. package/dist/assets/{add-connection-dialog-CspEHMf4.js → add-connection-dialog-CjvNOKgb.js} +1 -1
  7. package/dist/assets/{agent-panel-BnU7gQWx.js → agent-panel-C24uwabG.js} +1 -1
  8. package/dist/assets/{ai-model-dropdown-Xik-y-L5.js → ai-model-dropdown-Dyxi3_nW.js} +1 -1
  9. package/dist/assets/{app-config-button-CHBHFhjc.js → app-config-button-BT2Do4RJ.js} +1 -1
  10. package/dist/assets/{cell-editor-D_3l2zTD.js → cell-editor-zW0u82sK.js} +1 -1
  11. package/dist/assets/{cell-link-DJVe6_Zu.js → cell-link-CRkrHl-y.js} +1 -1
  12. package/dist/assets/{cells-S7rO4svP.js → cells-BqYYXi6G.js} +69 -69
  13. package/dist/assets/{chat-display-CfEsEqVW.js → chat-display-DsHMZa9F.js} +1 -1
  14. package/dist/assets/{chat-panel-qK2fGD8c.js → chat-panel-o9D3upnX.js} +1 -1
  15. package/dist/assets/{chat-ui-D0Zk2tGi.js → chat-ui-BYS03y86.js} +1 -1
  16. package/dist/assets/{column-preview-BZ6dVJcf.js → column-preview-Dwv5a_zE.js} +1 -1
  17. package/dist/assets/{command-palette-1FgTXBti.js → command-palette-BYbKGSF3.js} +1 -1
  18. package/dist/assets/{common-BmgcLq5w.js → common-DeoGL9rK.js} +1 -1
  19. package/dist/assets/{components-B_dPGsbP.js → components-CDgxb-5o.js} +1 -1
  20. package/dist/assets/{components-D2yZZbqm.js → components-DKHyHZBv.js} +1 -1
  21. package/dist/assets/{datasource-t6MwjjVj.js → datasource-COFRe84u.js} +1 -1
  22. package/dist/assets/{dependency-graph-panel-BadtKupA.js → dependency-graph-panel-BXSe6z1R.js} +1 -1
  23. package/dist/assets/{documentation-panel-BsLlmX7w.js → documentation-panel-CA2pWMgB.js} +1 -1
  24. package/dist/assets/{download-Do1WPYs4.js → download-5XbM3TL_.js} +1 -1
  25. package/dist/assets/edit-page-CMUN3ESy.js +9 -0
  26. package/dist/assets/{error-panel-CBVjdcTs.js → error-panel-CbqfK1HJ.js} +1 -1
  27. package/dist/assets/{file-explorer-panel-DYR37L0M.js → file-explorer-panel-CbS8z-JR.js} +1 -1
  28. package/dist/assets/{file-icons-Ce885dch.js → file-icons-Bj5YoM7H.js} +1 -1
  29. package/dist/assets/{floating-outline-x0sdO8LG.js → floating-outline-XObNWtN8.js} +1 -1
  30. package/dist/assets/{focus-DTtb8f52.js → focus-DzMo6UAI.js} +1 -1
  31. package/dist/assets/{form-D_Nha4Lp.js → form-DLyXacSF.js} +1 -1
  32. package/dist/assets/{home-page-CoJ_ZMWR.js → home-page-BUdd5uTz.js} +1 -1
  33. package/dist/assets/{hooks-Cx6iKOXA.js → hooks-kZJc1iBf.js} +1 -1
  34. package/dist/assets/{html-to-image-B2vXpMPW.js → html-to-image-DGqJ93hW.js} +1 -1
  35. package/dist/assets/index-CKRn_SiB.css +2 -0
  36. package/dist/assets/{index-B_D5e64b.js → index-bjxpaV0V.js} +5 -5
  37. package/dist/assets/{kiosk-mode-FcVQMZAH.js → kiosk-mode-DYHoqMaZ.js} +1 -1
  38. package/dist/assets/layout-tmN-U1zs.js +9 -0
  39. package/dist/assets/{logs-panel-Dsopo0A4.js → logs-panel-CRW4c2IL.js} +1 -1
  40. package/dist/assets/{markdown-renderer-Ds5PRrQP.js → markdown-renderer-DNANigO8.js} +1 -1
  41. package/dist/assets/{name-cell-input-CYTm4rHn.js → name-cell-input-3iKP6YTw.js} +1 -1
  42. package/dist/assets/{outline-panel-C6Gebwlt.js → outline-panel-VIqWcHj6.js} +1 -1
  43. package/dist/assets/{packages-panel-Cx5Im5-h.js → packages-panel-D_z4ylBE.js} +1 -1
  44. package/dist/assets/panels-CLfdzLPR.js +1 -0
  45. package/dist/assets/{process-output-DxNLeVL1.js → process-output-Q6wVr7a-.js} +1 -1
  46. package/dist/assets/{readonly-python-code-CB7U_Wc5.js → readonly-python-code-CI_b818F.js} +1 -1
  47. package/dist/assets/{run-page-CGoGL9nm.js → run-page-DPuH6QY4.js} +1 -1
  48. package/dist/assets/{scratchpad-panel-DR4mmtqX.js → scratchpad-panel-BsMm0GQP.js} +1 -1
  49. package/dist/assets/{session-panel-DGqZrbYK.js → session-panel-CTDzGShO.js} +1 -1
  50. package/dist/assets/{slides-component-BIXn0Nqk.js → slides-component-ncUJNz7U.js} +1 -1
  51. package/dist/assets/{snippets-panel-CU_AkTo5.js → snippets-panel-CWof0wHk.js} +1 -1
  52. package/dist/assets/{state-Di6_R3-d.js → state-BvnlMKdT.js} +1 -1
  53. package/dist/assets/{state-iGDxMYGl.js → state-DPomuurt.js} +1 -1
  54. package/dist/assets/{textarea-cV4DzEoq.js → textarea-CS2o3y4W.js} +1 -1
  55. package/dist/assets/{tracing-6MHdsIto.js → tracing-CPDDwzIA.js} +1 -1
  56. package/dist/assets/{tracing-panel-Cwuf0kYN.js → tracing-panel-Ku1LapXJ.js} +2 -2
  57. package/dist/assets/{useAddCell-DDDgUZhC.js → useAddCell-B6yUY_RG.js} +1 -1
  58. package/dist/assets/{useCellActionButton-BceYv-6H.js → useCellActionButton-SxeK4dmW.js} +1 -1
  59. package/dist/assets/{useDeleteCell-CwBNr3-p.js → useDeleteCell-DHUjJQJx.js} +1 -1
  60. package/dist/assets/{useDependencyPanelTab-Bjv6Z79M.js → useDependencyPanelTab-CflgayoH.js} +1 -1
  61. package/dist/assets/{useNotebookActions-0DS32qpY.js → useNotebookActions-DHBEqrc_.js} +1 -1
  62. package/dist/assets/{useRunCells-Bf82xWy5.js → useRunCells-DFYAOTWd.js} +1 -1
  63. package/dist/assets/{useSplitCell-WZ71D3bV.js → useSplitCell-Bh-NZsBl.js} +1 -1
  64. package/dist/index.html +23 -23
  65. package/package.json +1 -1
  66. package/src/components/editor/renderers/slides-layout/slides-layout.tsx +50 -44
  67. package/src/components/slides/__tests__/minimap.test.ts +402 -0
  68. package/src/components/slides/minimap.tsx +534 -0
  69. package/src/components/slides/slide.tsx +29 -0
  70. package/src/components/slides/slides-component.tsx +16 -1
  71. package/src/core/cells/__tests__/cells.test.ts +105 -1
  72. package/src/core/cells/cells.ts +43 -0
  73. package/src/core/cells/document-changes.ts +2 -1
  74. package/dist/assets/edit-page-CSyxrzTp.js +0 -13
  75. package/dist/assets/index-qO0a4zuT.css +0 -2
  76. package/dist/assets/layout-DW9T7Upe.js +0 -5
  77. package/dist/assets/panels-CDCHQBRn.js +0 -1
@@ -22,7 +22,11 @@ import { foldAllBulk, unfoldAllBulk } from "@/core/codemirror/editing/commands";
22
22
  import { adaptiveLanguageConfiguration } from "@/core/codemirror/language/extension";
23
23
  import { OverridingHotkeyProvider } from "@/core/hotkeys/hotkeys";
24
24
  import type { OutputMessage } from "@/core/kernel/messages";
25
- import { type CollapsibleTree, MultiColumn } from "@/utils/id-tree";
25
+ import {
26
+ type CollapsibleTree,
27
+ MultiColumn,
28
+ type CellColumnId,
29
+ } from "@/utils/id-tree";
26
30
  import type { Seconds } from "@/utils/time";
27
31
  import {
28
32
  exportedForTesting,
@@ -495,6 +499,106 @@ describe("cell reducer", () => {
495
499
  `);
496
500
  });
497
501
 
502
+ it("can move a cell to an exact index within a column", () => {
503
+ actions.createNewCell({
504
+ cellId: firstCellId,
505
+ before: false,
506
+ });
507
+ actions.createNewCell({
508
+ cellId: cellId("1"),
509
+ before: false,
510
+ });
511
+
512
+ const columnId = state.cellIds.atOrThrow(0).id;
513
+ actions.moveCellToIndex({
514
+ cellId: firstCellId,
515
+ columnId,
516
+ index: 3,
517
+ });
518
+
519
+ expect(formatCells(state)).toMatchInlineSnapshot(`
520
+ "
521
+ [1] ''
522
+
523
+ [2] ''
524
+
525
+ [0] ''
526
+ "
527
+ `);
528
+ });
529
+
530
+ it("can move a cell to an exact index across columns", () => {
531
+ actions.createNewCell({
532
+ cellId: firstCellId,
533
+ before: false,
534
+ });
535
+ actions.createNewCell({
536
+ cellId: cellId("1"),
537
+ before: false,
538
+ });
539
+ actions.addColumnBreakpoint({ cellId: cellId("1") });
540
+
541
+ const secondColumnId = state.cellIds.atOrThrow(1).id;
542
+ actions.moveCellToIndex({
543
+ cellId: firstCellId,
544
+ columnId: secondColumnId,
545
+ index: 1,
546
+ });
547
+
548
+ expect(formatCells(state)).toMatchInlineSnapshot(`
549
+ "
550
+ > col 0
551
+
552
+
553
+ > col 1
554
+ [1] ''
555
+
556
+ [0] ''
557
+
558
+ [2] ''
559
+ "
560
+ `);
561
+ });
562
+
563
+ it("moveCellToIndex is a no-op when moving to the same position", () => {
564
+ actions.createNewCell({
565
+ cellId: firstCellId,
566
+ before: false,
567
+ });
568
+ actions.createNewCell({
569
+ cellId: cellId("1"),
570
+ before: false,
571
+ });
572
+
573
+ const columnId = state.cellIds.atOrThrow(0).id;
574
+ const before = formatCells(state);
575
+
576
+ actions.moveCellToIndex({
577
+ cellId: firstCellId,
578
+ columnId,
579
+ index: 0,
580
+ });
581
+
582
+ expect(formatCells(state)).toBe(before);
583
+ });
584
+
585
+ it("moveCellToIndex is a no-op for an invalid columnId", () => {
586
+ actions.createNewCell({
587
+ cellId: firstCellId,
588
+ before: false,
589
+ });
590
+
591
+ const before = formatCells(state);
592
+
593
+ actions.moveCellToIndex({
594
+ cellId: firstCellId,
595
+ columnId: "nonexistent-column" as CellColumnId,
596
+ index: 0,
597
+ });
598
+
599
+ expect(formatCells(state)).toBe(before);
600
+ });
601
+
498
602
  it("can run cell and receive cell messages", () => {
499
603
  // HAPPY PATH
500
604
  /////////////////
@@ -338,6 +338,49 @@ const {
338
338
  scrollKey: cellId,
339
339
  };
340
340
  },
341
+ moveCellToIndex: (
342
+ state,
343
+ action: {
344
+ cellId: CellId;
345
+ columnId: CellColumnId;
346
+ index: number;
347
+ },
348
+ ) => {
349
+ const { cellId, columnId, index } = action;
350
+ const fromColumn = state.cellIds.findWithId(cellId);
351
+ const fromIndex = fromColumn.indexOfOrThrow(cellId);
352
+
353
+ const destinationColumn = state.cellIds.get(columnId);
354
+ if (!destinationColumn) {
355
+ return state;
356
+ }
357
+
358
+ const clampedIndex = Math.max(0, Math.min(index, destinationColumn.length));
359
+ const adjustedIndex =
360
+ fromColumn.id === columnId && fromIndex < clampedIndex
361
+ ? clampedIndex - 1
362
+ : clampedIndex;
363
+
364
+ if (fromColumn.id === columnId && fromIndex === adjustedIndex) {
365
+ return state;
366
+ }
367
+
368
+ const withoutCell = state.cellIds.deleteById(cellId);
369
+ const updatedColumn = withoutCell.get(columnId);
370
+ if (!updatedColumn) {
371
+ return state;
372
+ }
373
+
374
+ return {
375
+ ...state,
376
+ cellIds: withoutCell.insertId(
377
+ cellId,
378
+ columnId,
379
+ Math.max(0, Math.min(adjustedIndex, updatedColumn.length)),
380
+ ),
381
+ scrollKey: null,
382
+ };
383
+ },
341
384
  dropCellOverCell: (state, action: { cellId: CellId; overCellId: CellId }) => {
342
385
  const { cellId, overCellId } = action;
343
386
 
@@ -215,12 +215,13 @@ export function toDocumentChanges(
215
215
  ];
216
216
  }
217
217
 
218
- // dropCellOverCell/dropCellOverColumn → set-config + reorder-cells
218
+ // dropCellOverCell/dropCellOverColumn/moveCellToIndex → set-config + reorder-cells
219
219
  // Drag-and-drop reorders can move cells within or across columns.
220
220
  // We emit config changes for cells whose column changed, then
221
221
  // the full ordering.
222
222
  case "dropCellOverCell":
223
223
  case "dropCellOverColumn":
224
+ case "moveCellToIndex":
224
225
  return columnChanges(prevState, newState);
225
226
 
226
227
  // updateCellCode → set-code