@marimo-team/frontend 0.25.2-dev5 → 0.25.2-dev7
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/assets/{ConnectedDataExplorerComponent-CUM1k9to.js → ConnectedDataExplorerComponent-BFDHLGyp.js} +1 -1
- package/dist/assets/{ErrorBoundary-dxW9fjLz.js → ErrorBoundary-CtGZ1MAN.js} +2 -2
- package/dist/assets/{LazyAnyLanguageCodeMirror-Cl_tW7UU.js → LazyAnyLanguageCodeMirror-CaEYnB8x.js} +2 -2
- package/dist/assets/{RunButton-8QAfM6tX.js → RunButton-YN1KKz4a.js} +1 -1
- package/dist/assets/{abnfDiagram-VCTEODGH-C6WU3bPA.js → abnfDiagram-VCTEODGH-CqPJWAgx.js} +1 -1
- package/dist/assets/{add-cell-with-ai-Ba1Zzyn5.js → add-cell-with-ai-Dceg80EG.js} +1 -1
- package/dist/assets/{agent-panel-DoHQya5c.js → agent-panel-CEG8eS3F.js} +1 -1
- package/dist/assets/{ai-model-dropdown-p-DETxrC.js → ai-model-dropdown-SOxGsjRY.js} +1 -1
- package/dist/assets/{any-language-editor-CoZVwBpS.js → any-language-editor-b9spizfh.js} +1 -1
- package/dist/assets/{app-config-button-C99dcKZ_.js → app-config-button-CTTg_TIX.js} +1 -1
- package/dist/assets/{architectureDiagram-5GKGNRK7-D6ePBctB.js → architectureDiagram-5GKGNRK7-DXjBUUE6.js} +1 -1
- package/dist/assets/{blockDiagram-I7D4REHJ-BFxx3c_s.js → blockDiagram-I7D4REHJ-DS6I1u-N.js} +1 -1
- package/dist/assets/{cache-panel-BAzgSECJ.js → cache-panel-Ct9EFgP7.js} +1 -1
- package/dist/assets/{chat-display-DFefbOiE.js → chat-display-DWPnai8M.js} +1 -1
- package/dist/assets/{chat-panel-CNl0wCuZ.js → chat-panel-DGnu6v96.js} +1 -1
- package/dist/assets/{chat-ui-Dn9mtqu_.js → chat-ui-BqLN7iW4.js} +1 -1
- package/dist/assets/{chunk-IMKFNOWR-C0FdcWaA.js → chunk-IMKFNOWR-s8kQsL8K.js} +1 -1
- package/dist/assets/{chunk-SHT3W25Y-C5bRLV38.js → chunk-SHT3W25Y-CM7-8w1-.js} +1 -1
- package/dist/assets/{chunk-SVP7TREG-B1Cz7B80.js → chunk-SVP7TREG-BErtDMhh.js} +1 -1
- package/dist/assets/{chunk-TICWLB2K-D4DfLMML.js → chunk-TICWLB2K-CGVR3aYq.js} +1 -1
- package/dist/assets/{classDiagram-ZZMXUADV-D9dq4QyZ.js → classDiagram-ZZMXUADV-isldMhyu.js} +1 -1
- package/dist/assets/{classDiagram-v2-VYDZK3BY-D9dq4QyZ.js → classDiagram-v2-VYDZK3BY-isldMhyu.js} +1 -1
- package/dist/assets/{code-visibility-B7WsmJoz.js → code-visibility-BGq9NyQN.js} +1 -1
- package/dist/assets/{command-palette-C0_0TUX7.js → command-palette-CyBHUvlK.js} +1 -1
- package/dist/assets/{common-CvbovgAY.js → common-CdJQaC_v.js} +1 -1
- package/dist/assets/{components-BKDoHB6b.js → components-DsJLlugL.js} +1 -1
- package/dist/assets/{components-DDDBg3hX.js → components-zfCkpDjF.js} +1 -1
- package/dist/assets/{cynefinDiagram-5FMLGOSQ-CjzgReEF.js → cynefinDiagram-5FMLGOSQ-B7iZDq2a.js} +1 -1
- package/dist/assets/{dagre-DCGG7ZTu.js → dagre-DkKsNZNe.js} +1 -1
- package/dist/assets/{dagre-GXQ25YYZ-BnoCXKri.js → dagre-GXQ25YYZ-CLT8-BB_.js} +1 -1
- package/dist/assets/{data-grid-overlay-editor-DoWKBCDq.js → data-grid-overlay-editor-Bt4aaHfB.js} +1 -1
- package/dist/assets/{dependency-graph-panel-CmtumEXH.js → dependency-graph-panel-DPFdz5rd.js} +1 -1
- package/dist/assets/{diagram-S7CK7UJ4-CpfyTrFa.js → diagram-S7CK7UJ4-SuzEYncV.js} +1 -1
- package/dist/assets/{diagram-UQ7AKVKN-CzUJEZ08.js → diagram-UQ7AKVKN-cuBTTzq8.js} +1 -1
- package/dist/assets/{diagram-VX7I27RA-DwHKUgiR.js → diagram-VX7I27RA-h6SkZKIl.js} +1 -1
- package/dist/assets/{diagram-Z3DM3KII-CM3f39we.js → diagram-Z3DM3KII-C-Vebae0.js} +1 -1
- package/dist/assets/{documentation-panel-D--h9kPi.js → documentation-panel-YTTKKIe_.js} +1 -1
- package/dist/assets/{ebnfDiagram-PWID7BFC-BGx-SaNO.js → ebnfDiagram-PWID7BFC-Bm_qbW1t.js} +1 -1
- package/dist/assets/{edit-page-DBzWMuh1.js → edit-page-CWbb1Sdk.js} +4 -4
- package/dist/assets/{erDiagram-RLTQ6QDP-BA3j71VK.js → erDiagram-RLTQ6QDP-Dwwt91bq.js} +1 -1
- package/dist/assets/{error-panel-DQeF8Z1y.js → error-panel-D1XBOiHc.js} +1 -1
- package/dist/assets/{feedback-button-BM9-xfv2.js → feedback-button-CXjDdARJ.js} +1 -1
- package/dist/assets/{file-explorer-panel-BHpIvU3B.js → file-explorer-panel-BKJMBA3O.js} +1 -1
- package/dist/assets/{file-name-input-xYbz_krS.js → file-name-input-Bd3Q-WUK.js} +1 -1
- package/dist/assets/{flowDiagram-HODETNUW-C2nUwifn.js → flowDiagram-HODETNUW-CqLwY5NX.js} +1 -1
- package/dist/assets/{gallery-page-NwdmeRiE.js → gallery-page-CrkxyZTA.js} +1 -1
- package/dist/assets/{glide-data-editor-o6AOUy_R.js → glide-data-editor-B5WqL5gm.js} +4 -4
- package/dist/assets/{graphlib-3ALKDhp2.js → graphlib-6Yb0YQgW.js} +1 -1
- package/dist/assets/has-B4C7ywdy.js +1 -0
- package/dist/assets/{home-page-Dt3rSv6r.js → home-page-BNKKAvoF.js} +1 -1
- package/dist/assets/{index-DJiAKPdB.js → index-C9FPQNuH.js} +8 -8
- package/dist/assets/{infoDiagram-27XIBGKW-C1YY3GUQ.js → infoDiagram-27XIBGKW-dRXMROiS.js} +1 -1
- package/dist/assets/{ishikawaDiagram-5VMMS53U-CbAJ27Ym.js → ishikawaDiagram-5VMMS53U-CvBCDJJe.js} +1 -1
- package/dist/assets/{kanban-definition-UXKFOSKX-CC0iibkr.js → kanban-definition-UXKFOSKX-fIKpyolW.js} +1 -1
- package/dist/assets/{logs-panel-PgZl5o2l.js → logs-panel-adAvx6o3.js} +1 -1
- package/dist/assets/{mermaid-DNc2K-6T.js → mermaid-DpSqZGNM.js} +4 -4
- package/dist/assets/{mindmap-definition-YA3MSWOX-BRSocoJh.js → mindmap-definition-YA3MSWOX-B95LGKLt.js} +1 -1
- package/dist/assets/{number-overlay-editor-DAkTviCH.js → number-overlay-editor-Bs5xzKX-.js} +1 -1
- package/dist/assets/{outline-panel-7Gdsp6DE.js → outline-panel-B9u6Wgol.js} +1 -1
- package/dist/assets/{packages-panel-B8pNRD-h.js → packages-panel-D-g71io7.js} +1 -1
- package/dist/assets/{panels-B7fQSaeS.js → panels-C5xQNcZv.js} +3 -3
- package/dist/assets/{pegDiagram-XKGWAZYB-BsLbPyHL.js → pegDiagram-XKGWAZYB-CMaSc5Ln.js} +1 -1
- package/dist/assets/{pieDiagram-E7YTZNPT-Bk2i8LTf.js → pieDiagram-E7YTZNPT-CZY0tLgh.js} +1 -1
- package/dist/assets/{process-output-glq8CxqT.js → process-output-CpF79y4D.js} +1 -1
- package/dist/assets/{railroadDiagram-O6MQD6OU-7uZVokuB.js → railroadDiagram-O6MQD6OU-BSMijs6s.js} +1 -1
- package/dist/assets/{requirementDiagram-BXWQKSXE-gRkxaB0C.js → requirementDiagram-BXWQKSXE-DjzkUUZk.js} +1 -1
- package/dist/assets/{reveal-component-D89rwNLx.js → reveal-component-ZyDayfDQ.js} +1 -1
- package/dist/assets/{run-page-BKhs3fGH.js → run-page-Ba_64fL5.js} +1 -1
- package/dist/assets/{scratchpad-panel-CKr_tLdc.js → scratchpad-panel-7bxRkpPb.js} +1 -1
- package/dist/assets/{secrets-panel-DVmOQ519.js → secrets-panel-DmKgIV5x.js} +1 -1
- package/dist/assets/{sequenceDiagram-WJ2MYXX4-DYQZopgj.js → sequenceDiagram-WJ2MYXX4-Dp7JdkJ6.js} +1 -1
- package/dist/assets/{session-panel-C0mRZLy4.js → session-panel-D9qVJogC.js} +1 -1
- package/dist/assets/{snippets-panel-wcnAdGY5.js → snippets-panel-QdZvjlBm.js} +1 -1
- package/dist/assets/{stateDiagram-D77RDMKH-CQ-fE8-k.js → stateDiagram-D77RDMKH-CR5QDK_-.js} +1 -1
- package/dist/assets/{stateDiagram-v2-MP3YSRHH-B025D96x.js → stateDiagram-v2-MP3YSRHH-BmMYN-vz.js} +1 -1
- package/dist/assets/{swimlanes-42K2YHIH-CB31Ci9z.js → swimlanes-42K2YHIH-By_1jYHM.js} +1 -1
- package/dist/assets/{swimlanesDiagram-VR7AAH4N-CUGBnlpB.js → swimlanesDiagram-VR7AAH4N-DjMyvNFc.js} +1 -1
- package/dist/assets/{swiper-component-CCq8nrmf.js → swiper-component-Cbtej5b-.js} +1 -1
- package/dist/assets/{terminal-CNqP6nyV.js → terminal-Ri8br8XX.js} +1 -1
- package/dist/assets/{timeline-definition-24CTP7MA-Cqv9NT2e.js → timeline-definition-24CTP7MA-BjNxu6yh.js} +1 -1
- package/dist/assets/{tracing-DTdHQJ1H.js → tracing-BxMH9HGb.js} +1 -1
- package/dist/assets/{tracing-panel-CdEYtuzi.js → tracing-panel-EeL3md5x.js} +2 -2
- package/dist/assets/{useCellActionButton-BAthbP5y.js → useCellActionButton-Di4NkDbT.js} +1 -1
- package/dist/assets/{vega-component-CJWaA6ZU.js → vega-component-DGTXJwmx.js} +1 -1
- package/dist/assets/{vega-embed-container-CPQUWOuE.js → vega-embed-container-Din5FYpB.js} +1 -1
- package/dist/assets/{vennDiagram-4TSXK5OY-7_zbwUKS.js → vennDiagram-4TSXK5OY-BR66J2hx.js} +1 -1
- package/dist/assets/{wardleyDiagram-VM6X3IG4-Dwy-UW9d.js → wardleyDiagram-VM6X3IG4-Kg0-lASD.js} +1 -1
- package/dist/assets/{xychartDiagram-S5SC5T6Z-D9u3xjys.js → xychartDiagram-S5SC5T6Z-BSXFWSRW.js} +1 -1
- package/dist/index.html +3 -3
- package/package.json +1 -1
- package/src/plugins/impl/FileBrowserPlugin.tsx +45 -15
- package/src/plugins/impl/__tests__/FileBrowserPlugin.test.tsx +85 -2
- package/dist/assets/has-DcjG16V_.js +0 -1
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
fireEvent,
|
|
5
|
+
render,
|
|
6
|
+
screen,
|
|
7
|
+
waitFor,
|
|
8
|
+
within,
|
|
9
|
+
} from "@testing-library/react";
|
|
4
10
|
import { beforeAll, describe, expect, it, vi } from "vitest";
|
|
5
11
|
import { SetupMocks } from "@/__mocks__/common";
|
|
6
12
|
import { initialModeAtom } from "@/core/mode";
|
|
@@ -187,7 +193,7 @@ describe("FileBrowserPlugin keyboard accessibility", () => {
|
|
|
187
193
|
const docsRow = docs.closest('[role="row"]')!;
|
|
188
194
|
fireEvent.keyDown(docsRow, { key: "ArrowDown" }); // move active off the parent
|
|
189
195
|
fireEvent.click(docs); // navigate into "docs"
|
|
190
|
-
await screen.findByText("docs"); // listing reloads (mock returns same files)
|
|
196
|
+
await within(screen.getByRole("grid")).findByText("docs"); // listing reloads (mock returns same files)
|
|
191
197
|
const rows = screen.getAllByRole("row");
|
|
192
198
|
expect(rows[0]).toHaveAttribute("tabindex", "0");
|
|
193
199
|
// the focused row must match the only tabbable row
|
|
@@ -361,3 +367,80 @@ describe("FileBrowserPlugin keyboard accessibility", () => {
|
|
|
361
367
|
function rowFor(name: string): HTMLElement {
|
|
362
368
|
return screen.getByText(name).closest('[role="row"]') as HTMLElement;
|
|
363
369
|
}
|
|
370
|
+
|
|
371
|
+
describe("FileBrowserPlugin breadcrumbs", () => {
|
|
372
|
+
function breadcrumbs() {
|
|
373
|
+
return within(
|
|
374
|
+
screen.getByRole("navigation", { name: "Current directory" }),
|
|
375
|
+
);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
it("renders a crumb per ancestor with the current directory last", async () => {
|
|
379
|
+
renderBrowser();
|
|
380
|
+
await screen.findByText("docs");
|
|
381
|
+
const items = breadcrumbs().getAllByRole("listitem");
|
|
382
|
+
expect(items.map((li) => li.textContent)).toEqual(["/", "home", "user"]);
|
|
383
|
+
expect(breadcrumbs().getByRole("button", { name: "user" })).toHaveAttribute(
|
|
384
|
+
"aria-current",
|
|
385
|
+
"page",
|
|
386
|
+
);
|
|
387
|
+
expect(
|
|
388
|
+
breadcrumbs().getByRole("button", { name: "home" }),
|
|
389
|
+
).not.toHaveAttribute("aria-current");
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
it("keeps focus on a crumb after navigating to it", async () => {
|
|
393
|
+
const { listDirectory } = renderBrowser();
|
|
394
|
+
await screen.findByText("docs");
|
|
395
|
+
const home = breadcrumbs().getByRole("button", { name: "home" });
|
|
396
|
+
home.focus();
|
|
397
|
+
fireEvent.click(home);
|
|
398
|
+
await waitFor(() =>
|
|
399
|
+
expect(listDirectory).toHaveBeenLastCalledWith({ path: "/home" }),
|
|
400
|
+
);
|
|
401
|
+
const current = breadcrumbs().getByRole("button", { name: "home" });
|
|
402
|
+
expect(current).toHaveAttribute("aria-current", "page");
|
|
403
|
+
expect(current).toBe(home);
|
|
404
|
+
expect(current).toHaveFocus();
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
it("does not reload when the current crumb is clicked", async () => {
|
|
408
|
+
const { listDirectory } = renderBrowser();
|
|
409
|
+
await screen.findByText("docs");
|
|
410
|
+
fireEvent.click(breadcrumbs().getByRole("button", { name: "user" }));
|
|
411
|
+
expect(listDirectory).toHaveBeenCalledTimes(1);
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
it("navigates to an ancestor when a crumb is clicked", async () => {
|
|
415
|
+
const { listDirectory } = renderBrowser();
|
|
416
|
+
await screen.findByText("docs");
|
|
417
|
+
fireEvent.click(breadcrumbs().getByRole("button", { name: "home" }));
|
|
418
|
+
await waitFor(() =>
|
|
419
|
+
expect(listDirectory).toHaveBeenLastCalledWith({ path: "/home" }),
|
|
420
|
+
);
|
|
421
|
+
fireEvent.click(breadcrumbs().getByRole("button", { name: "/" }));
|
|
422
|
+
await waitFor(() =>
|
|
423
|
+
expect(listDirectory).toHaveBeenLastCalledWith({ path: "/" }),
|
|
424
|
+
);
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
it("hides ancestors outside the initial path when navigation is restricted", async () => {
|
|
428
|
+
render(
|
|
429
|
+
<FileBrowser
|
|
430
|
+
initialPath="/home/user"
|
|
431
|
+
filetypes={[]}
|
|
432
|
+
selectionMode="all"
|
|
433
|
+
multiple={true}
|
|
434
|
+
label={null}
|
|
435
|
+
restrictNavigation={true}
|
|
436
|
+
value={[]}
|
|
437
|
+
setValue={vi.fn()}
|
|
438
|
+
host={document.createElement("div")}
|
|
439
|
+
list_directory={mockListDirectory(FILES)}
|
|
440
|
+
/>,
|
|
441
|
+
);
|
|
442
|
+
await screen.findByText("docs");
|
|
443
|
+
const items = breadcrumbs().getAllByRole("listitem");
|
|
444
|
+
expect(items.map((li) => li.textContent)).toEqual(["user"]);
|
|
445
|
+
});
|
|
446
|
+
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Wa as e}from"./index-DJiAKPdB.js";var t=Object.prototype.hasOwnProperty;function n(e,n){return e!=null&&t.call(e,n)}function r(t,r){return t!=null&&e(t,r,n)}export{r as t};
|