@nteract/commutable

library for immutable notebook operations

Usage no npm install needed!

<script type="module">
  import nteractCommutable from 'https://cdn.skypack.dev/@nteract/commutable';
</script>

README

@nteract/commutable

Commutable is a package to represent a Jupyter notebook document, as well as operations on the notebook, as a series of immutable notebooks, each one with its own state at a point in time.

This package follows the principles below, based on Tom MacWright's outline for practical undo.

  • A notebook document is immutable. The notebook document's representation is never mutated in-place.
  • Changes to a notebook document are encapsulated into operations that take a previous version and return a new version of the notebook without modifying the old version.
  • History is represented as a list of states, with the past on one end, the present on the other, and an index that can back up into 'undo states'.
  • Modifying a notebook document causes any future states to be thrown away.

Installation

$ yarn add @nteract/commutable
$ npm install --save @nteract/commutable

Usage

The example below shows how we can create an empty Markdown cell in our nteract notebook application. We use the emptyMarkdownCell immutable object exported from this package to represent a new empty Markdown cell in a notebook document.

import { emptyMarkdownCell } from "@nteract/commutable";

export default () => (
  <MarkdownPreview
    id="a-random-cell-id"
    cell={emptyMarkdownCell}
    editorFocused={false}
  />
);

Documentation

You can view the reference documentation for @nteract/commutable in the package docs.

Support

If you experience an issue while using this package or have a feature request, please file an issue on the issue board and, if possible, add the pkg:commutable label.

License

BSD-3-Clause