@jupyterlab/notebook 0.17.2 → 0.18.4
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/lib/actions.js +13 -3
- package/lib/actions.js.map +1 -1
- package/lib/default-toolbar.js +6 -6
- package/lib/default-toolbar.js.map +1 -1
- package/lib/model.d.ts +9 -0
- package/lib/model.js +7 -0
- package/lib/model.js.map +1 -1
- package/lib/widget.d.ts +2 -2
- package/lib/widget.js +5 -5
- package/lib/widget.js.map +1 -1
- package/package.json +9 -9
- package/style/index.css +7 -6
package/lib/actions.js
CHANGED
|
@@ -1224,8 +1224,11 @@ var Private;
|
|
|
1224
1224
|
break;
|
|
1225
1225
|
case 'code':
|
|
1226
1226
|
if (session) {
|
|
1227
|
-
return cells_1.CodeCell.execute(cell, session
|
|
1227
|
+
return cells_1.CodeCell.execute(cell, session, {
|
|
1228
|
+
deletedCells: notebook.model.deletedCells
|
|
1229
|
+
})
|
|
1228
1230
|
.then(reply => {
|
|
1231
|
+
notebook.model.deletedCells.splice(0, notebook.model.deletedCells.length);
|
|
1229
1232
|
if (cell.isDisposed) {
|
|
1230
1233
|
return false;
|
|
1231
1234
|
}
|
|
@@ -1309,9 +1312,15 @@ var Private;
|
|
|
1309
1312
|
const clipboard = apputils_1.Clipboard.getInstance();
|
|
1310
1313
|
notebook.mode = 'command';
|
|
1311
1314
|
clipboard.clear();
|
|
1312
|
-
|
|
1315
|
+
let data = notebook.widgets
|
|
1313
1316
|
.filter(cell => notebook.isSelectedOrActive(cell))
|
|
1314
|
-
.map(cell => cell.model.toJSON())
|
|
1317
|
+
.map(cell => cell.model.toJSON())
|
|
1318
|
+
.map(cellJSON => {
|
|
1319
|
+
if (cellJSON.metadata.deletable !== undefined) {
|
|
1320
|
+
delete cellJSON.metadata.deletable;
|
|
1321
|
+
}
|
|
1322
|
+
return cellJSON;
|
|
1323
|
+
});
|
|
1315
1324
|
clipboard.setData(JUPYTER_CELL_MIME, data);
|
|
1316
1325
|
if (cut) {
|
|
1317
1326
|
deleteCells(notebook);
|
|
@@ -1395,6 +1404,7 @@ var Private;
|
|
|
1395
1404
|
const deletable = child.model.metadata.get('deletable') !== false;
|
|
1396
1405
|
if (notebook.isSelectedOrActive(child) && deletable) {
|
|
1397
1406
|
toDelete.push(index);
|
|
1407
|
+
notebook.model.deletedCells.push(child.model.id);
|
|
1398
1408
|
}
|
|
1399
1409
|
});
|
|
1400
1410
|
// If cells are not deletable, we may not have anything to delete.
|
package/lib/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../../notebook/src/actions.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n\nimport { KernelMessage } from '@jupyterlab/services';\n\nimport {\n IClientSession,\n Clipboard,\n Dialog,\n showDialog\n} from '@jupyterlab/apputils';\n\nimport { nbformat } from '@jupyterlab/coreutils';\n\nimport {\n ICellModel,\n ICodeCellModel,\n CodeCell,\n Cell,\n MarkdownCell\n} from '@jupyterlab/cells';\n\nimport { ArrayExt, each, toArray } from '@phosphor/algorithm';\n\nimport { ElementExt } from '@phosphor/domutils';\n\nimport { ISignal, Signal } from '@phosphor/signaling';\n\nimport * as React from 'react';\n\nimport { INotebookModel } from './model';\n\nimport { Notebook } from './widget';\n\n// The message to display to the user when prompting to trust the notebook.\nconst TRUST_MESSAGE = (\n <p>\n A trusted Jupyter notebook may execute hidden malicious code when you open\n it.\n <br />\n Selecting trust will re-render this notebook in a trusted state.\n <br />\n For more information, see the\n <a href=\"https://jupyter-notebook.readthedocs.io/en/stable/security.html\">\n Jupyter security documentation\n </a>\n </p>\n);\n\n/**\n * The mimetype used for Jupyter cell data.\n */\nconst JUPYTER_CELL_MIME = 'application/vnd.jupyter.cells';\n\n/**\n * A collection of actions that run against notebooks.\n *\n * #### Notes\n * All of the actions are a no-op if there is no model on the notebook.\n * The actions set the widget `mode` to `'command'` unless otherwise specified.\n * The actions will preserve the selection on the notebook widget unless\n * otherwise specified.\n */\nexport class NotebookActions {\n /**\n * A signal that emits whenever a cell is run.\n */\n static get executed(): ISignal<any, { notebook: Notebook; cell: Cell }> {\n return Private.executed;\n }\n\n /**\n * A private constructor for the `NotebookActions` class.\n *\n * #### Notes\n * This class can never be instantiated. Its static member `executed` will be\n * merged with the `NotebookActions` namespace. The reason it exists as a\n * standalone class is because at run time, the `Private.executed` variable\n * does not yet exist, so it needs to be referenced via a getter.\n */\n private constructor() {}\n}\n\n/**\n * A namespace for `NotebookActions` static methods.\n */\nexport namespace NotebookActions {\n /**\n * Split the active cell into two cells.\n *\n * @param widget - The target notebook widget.\n *\n * #### Notes\n * It will preserve the existing mode.\n * The second cell will be activated.\n * The existing selection will be cleared.\n * The leading whitespace in the second cell will be removed.\n * If there is no content, two empty cells will be created.\n * Both cells will have the same type as the original cell.\n * This action can be undone.\n */\n export function splitCell(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.deselectAll();\n\n const nbModel = notebook.model;\n const index = notebook.activeCellIndex;\n const child = notebook.widgets[index];\n const editor = child.editor;\n const position = editor.getCursorPosition();\n const offset = editor.getOffsetAt(position);\n const orig = child.model.value.text;\n\n // Create new models to preserve history.\n const clone0 = Private.cloneCell(nbModel, child.model);\n const clone1 = Private.cloneCell(nbModel, child.model);\n\n if (clone0.type === 'code') {\n (clone0 as ICodeCellModel).outputs.clear();\n }\n clone0.value.text = orig\n .slice(0, offset)\n .replace(/^\\n+/, '')\n .replace(/\\n+$/, '');\n clone1.value.text = orig\n .slice(offset)\n .replace(/^\\n+/, '')\n .replace(/\\n+$/, '');\n\n // Make the changes while preserving history.\n const cells = nbModel.cells;\n\n cells.beginCompoundOperation();\n cells.set(index, clone0);\n cells.insert(index + 1, clone1);\n cells.endCompoundOperation();\n\n notebook.activeCellIndex++;\n Private.handleState(notebook, state);\n }\n\n /**\n * Merge the selected cells.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget mode will be preserved.\n * If only one cell is selected, the next cell will be selected.\n * If the active cell is a code cell, its outputs will be cleared.\n * This action can be undone.\n * The final cell will have the same type as the active cell.\n * If the active cell is a markdown cell, it will be unrendered.\n */\n export function mergeCells(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const toMerge: string[] = [];\n const toDelete: ICellModel[] = [];\n const model = notebook.model;\n const cells = model.cells;\n const primary = notebook.activeCell;\n const active = notebook.activeCellIndex;\n\n // Get the cells to merge.\n notebook.widgets.forEach((child, index) => {\n if (notebook.isSelectedOrActive(child)) {\n toMerge.push(child.model.value.text);\n if (index !== active) {\n toDelete.push(child.model);\n }\n }\n });\n\n // Check for only a single cell selected.\n if (toMerge.length === 1) {\n // Bail if it is the last cell.\n if (active === cells.length - 1) {\n return;\n }\n\n // Otherwise merge with the next cell.\n const cellModel = cells.get(active + 1);\n\n toMerge.push(cellModel.value.text);\n toDelete.push(cellModel);\n }\n\n notebook.deselectAll();\n\n // Create a new cell for the source to preserve history.\n const newModel = Private.cloneCell(model, primary.model);\n\n newModel.value.text = toMerge.join('\\n\\n');\n if (newModel.type === 'code') {\n (newModel as ICodeCellModel).outputs.clear();\n }\n\n // Make the changes while preserving history.\n cells.beginCompoundOperation();\n cells.set(active, newModel);\n toDelete.forEach(cell => {\n cells.removeValue(cell);\n });\n cells.endCompoundOperation();\n\n // If the original cell is a markdown cell, make sure\n // the new cell is unrendered.\n if (primary instanceof MarkdownCell) {\n (notebook.activeCell as MarkdownCell).rendered = false;\n }\n\n Private.handleState(notebook, state);\n }\n\n /**\n * Delete the selected cells.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The cell after the last selected cell will be activated.\n * It will add a code cell if all cells are deleted.\n * This action can be undone.\n */\n export function deleteCells(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n Private.deleteCells(notebook);\n Private.handleState(notebook, state);\n }\n\n /**\n * Insert a new code cell above the active cell.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget mode will be preserved.\n * This action can be undone.\n * The existing selection will be cleared.\n * The new cell will the active cell.\n */\n export function insertAbove(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const model = notebook.model;\n const cell = model.contentFactory.createCodeCell({});\n const active = notebook.activeCellIndex;\n\n model.cells.insert(active, cell);\n\n // Make the newly inserted cell active.\n notebook.activeCellIndex = active;\n notebook.deselectAll();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Insert a new code cell below the active cell.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget mode will be preserved.\n * This action can be undone.\n * The existing selection will be cleared.\n * The new cell will be the active cell.\n */\n export function insertBelow(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const model = notebook.model;\n const cell = model.contentFactory.createCodeCell({});\n\n model.cells.insert(notebook.activeCellIndex + 1, cell);\n\n // Make the newly inserted cell active.\n notebook.activeCellIndex++;\n notebook.deselectAll();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Move the selected cell(s) down.\n *\n * @param notebook = The target notebook widget.\n */\n export function moveDown(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const cells = notebook.model.cells;\n const widgets = notebook.widgets;\n\n cells.beginCompoundOperation();\n for (let i = cells.length - 2; i > -1; i--) {\n if (notebook.isSelectedOrActive(widgets[i])) {\n if (!notebook.isSelectedOrActive(widgets[i + 1])) {\n cells.move(i, i + 1);\n if (notebook.activeCellIndex === i) {\n notebook.activeCellIndex++;\n }\n notebook.select(widgets[i + 1]);\n notebook.deselect(widgets[i]);\n }\n }\n }\n cells.endCompoundOperation();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Move the selected cell(s) up.\n *\n * @param widget - The target notebook widget.\n */\n export function moveUp(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const cells = notebook.model.cells;\n const widgets = notebook.widgets;\n\n cells.beginCompoundOperation();\n for (let i = 1; i < cells.length; i++) {\n if (notebook.isSelectedOrActive(widgets[i])) {\n if (!notebook.isSelectedOrActive(widgets[i - 1])) {\n cells.move(i, i - 1);\n if (notebook.activeCellIndex === i) {\n notebook.activeCellIndex--;\n }\n notebook.select(widgets[i - 1]);\n notebook.deselect(widgets[i]);\n }\n }\n }\n cells.endCompoundOperation();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Change the selected cell type(s).\n *\n * @param notebook - The target notebook widget.\n *\n * @param value - The target cell type.\n *\n * #### Notes\n * It should preserve the widget mode.\n * This action can be undone.\n * The existing selection will be cleared.\n * Any cells converted to markdown will be unrendered.\n */\n export function changeCellType(\n notebook: Notebook,\n value: nbformat.CellType\n ): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n Private.changeCellType(notebook, value);\n Private.handleState(notebook, state);\n }\n\n /**\n * Run the selected cell(s).\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * The last selected cell will be activated, but not scrolled into view.\n * The existing selection will be cleared.\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n */\n export function run(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n if (!notebook.model || !notebook.activeCell) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n const promise = Private.runSelected(notebook, session);\n\n Private.handleRunState(notebook, state, false);\n return promise;\n }\n\n /**\n * Run the selected cell(s) and advance to the next cell.\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * The existing selection will be cleared.\n * The cell after the last selected cell will be activated and scrolled into view.\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n * If the last selected cell is the last cell, a new code cell\n * will be created in `'edit'` mode. The new cell creation can be undone.\n */\n export function runAndAdvance(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n if (!notebook.model || !notebook.activeCell) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n const promise = Private.runSelected(notebook, session);\n const model = notebook.model;\n\n if (notebook.activeCellIndex === notebook.widgets.length - 1) {\n const cell = model.contentFactory.createCodeCell({});\n\n model.cells.push(cell);\n notebook.activeCellIndex++;\n notebook.mode = 'edit';\n } else {\n notebook.activeCellIndex++;\n }\n Private.handleRunState(notebook, state, true);\n return promise;\n }\n\n /**\n * Run the selected cell(s) and insert a new code cell.\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n * The widget mode will be set to `'edit'` after running.\n * The existing selection will be cleared.\n * The cell insert can be undone.\n * The new cell will be scrolled into view.\n */\n export function runAndInsert(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n if (!notebook.model || !notebook.activeCell) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n const promise = Private.runSelected(notebook, session);\n const model = notebook.model;\n const cell = model.contentFactory.createCodeCell({});\n\n model.cells.insert(notebook.activeCellIndex + 1, cell);\n notebook.activeCellIndex++;\n notebook.mode = 'edit';\n Private.handleRunState(notebook, state, true);\n return promise;\n }\n\n /**\n * Run all of the cells in the notebook.\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * The existing selection will be cleared.\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n * The last cell in the notebook will be activated and scrolled into view.\n */\n export function runAll(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n if (!notebook.model || !notebook.activeCell) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(child => {\n notebook.select(child);\n });\n\n const promise = Private.runSelected(notebook, session);\n\n Private.handleRunState(notebook, state, true);\n return promise;\n }\n\n /**\n * Run all of the cells before the currently active cell (exclusive).\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * The existing selection will be cleared.\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n * The currently active cell will remain selected.\n */\n export function runAllAbove(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n const { activeCell, activeCellIndex, model } = notebook;\n\n if (!model || !activeCell || activeCellIndex < 1) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n\n notebook.activeCellIndex--;\n notebook.deselectAll();\n for (let i = 0; i < notebook.activeCellIndex; ++i) {\n notebook.select(notebook.widgets[i]);\n }\n\n const promise = Private.runSelected(notebook, session);\n\n notebook.activeCellIndex++;\n Private.handleRunState(notebook, state, true);\n return promise;\n }\n\n /**\n * Run all of the cells after the currently active cell (inclusive).\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * The existing selection will be cleared.\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n * The last cell in the notebook will be activated and scrolled into view.\n */\n export function runAllBelow(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n if (!notebook.model || !notebook.activeCell) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n\n notebook.deselectAll();\n for (let i = notebook.activeCellIndex; i < notebook.widgets.length; ++i) {\n notebook.select(notebook.widgets[i]);\n }\n\n const promise = Private.runSelected(notebook, session);\n\n Private.handleRunState(notebook, state, true);\n return promise;\n }\n\n /**\n * Select the above the active cell.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget mode will be preserved.\n * This is a no-op if the first cell is the active cell.\n * The existing selection will be cleared.\n */\n export function selectAbove(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n if (notebook.activeCellIndex === 0) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.activeCellIndex -= 1;\n notebook.deselectAll();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Select the cell below the active cell.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget mode will be preserved.\n * This is a no-op if the last cell is the active cell.\n * The existing selection will be cleared.\n */\n export function selectBelow(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n if (notebook.activeCellIndex === notebook.widgets.length - 1) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.activeCellIndex += 1;\n notebook.deselectAll();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Extend the selection to the cell above.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * This is a no-op if the first cell is the active cell.\n * The new cell will be activated.\n */\n export function extendSelectionAbove(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n // Do not wrap around.\n if (notebook.activeCellIndex === 0) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.mode = 'command';\n notebook.extendContiguousSelectionTo(notebook.activeCellIndex - 1);\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Extend the selection to the cell below.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * This is a no-op if the last cell is the active cell.\n * The new cell will be activated.\n */\n export function extendSelectionBelow(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n // Do not wrap around.\n if (notebook.activeCellIndex === notebook.widgets.length - 1) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.mode = 'command';\n notebook.extendContiguousSelectionTo(notebook.activeCellIndex + 1);\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Select all of the cells of the notebook.\n *\n * @param notebook - the targe notebook widget.\n */\n export function selectAll(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n notebook.widgets.forEach(child => {\n notebook.select(child);\n });\n }\n\n /**\n * Deselect all of the cells of the notebook.\n *\n * @param notebook - the targe notebook widget.\n */\n export function deselectAll(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n notebook.deselectAll();\n }\n\n /**\n * Copy the selected cell data to a clipboard.\n *\n * @param notebook - The target notebook widget.\n */\n export function copy(notebook: Notebook): void {\n Private.copyOrCut(notebook, false);\n }\n\n /**\n * Cut the selected cell data to a clipboard.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * This action can be undone.\n * A new code cell is added if all cells are cut.\n */\n export function cut(notebook: Notebook): void {\n Private.copyOrCut(notebook, true);\n }\n\n /**\n * Paste cells from the application clipboard.\n *\n * @param notebook - The target notebook widget.\n *\n * @param mode - the mode of the paste operation: 'below' pastes cells\n * below the active cell, 'above' pastes cells above the active cell,\n * and 'replace' removes the currently selected cells and pastes cells\n * in their place.\n *\n * #### Notes\n * The last pasted cell becomes the active cell.\n * This is a no-op if there is no cell data on the clipboard.\n * This action can be undone.\n */\n export function paste(\n notebook: Notebook,\n mode: 'below' | 'above' | 'replace' = 'below'\n ): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const clipboard = Clipboard.getInstance();\n\n if (!clipboard.hasData(JUPYTER_CELL_MIME)) {\n return;\n }\n\n const state = Private.getState(notebook);\n const values = clipboard.getData(JUPYTER_CELL_MIME) as nbformat.IBaseCell[];\n const model = notebook.model;\n\n notebook.mode = 'command';\n\n const newCells = values.map(cell => {\n switch (cell.cell_type) {\n case 'code':\n return model.contentFactory.createCodeCell({ cell });\n case 'markdown':\n return model.contentFactory.createMarkdownCell({ cell });\n default:\n return model.contentFactory.createRawCell({ cell });\n }\n });\n\n const cells = notebook.model.cells;\n let index: number;\n\n cells.beginCompoundOperation();\n\n // Set the starting index of the paste operation depending upon the mode.\n switch (mode) {\n case 'below':\n index = notebook.activeCellIndex;\n break;\n case 'above':\n index = notebook.activeCellIndex - 1;\n break;\n case 'replace':\n // Find the cells to delete.\n const toDelete: number[] = [];\n\n notebook.widgets.forEach((child, index) => {\n const deletable = child.model.metadata.get('deletable') !== false;\n\n if (notebook.isSelectedOrActive(child) && deletable) {\n toDelete.push(index);\n }\n });\n\n // If cells are not deletable, we may not have anything to delete.\n if (toDelete.length > 0) {\n // Delete the cells as one undo event.\n toDelete.reverse().forEach(i => {\n cells.remove(i);\n });\n }\n index = toDelete[0];\n break;\n default:\n break;\n }\n\n newCells.forEach(cell => {\n cells.insert(++index, cell);\n });\n cells.endCompoundOperation();\n\n notebook.activeCellIndex += newCells.length;\n notebook.deselectAll();\n Private.handleState(notebook, state);\n }\n\n /**\n * Undo a cell action.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * This is a no-op if if there are no cell actions to undo.\n */\n export function undo(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.mode = 'command';\n notebook.model.cells.undo();\n notebook.deselectAll();\n Private.handleState(notebook, state);\n }\n\n /**\n * Redo a cell action.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * This is a no-op if there are no cell actions to redo.\n */\n export function redo(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.mode = 'command';\n notebook.model.cells.redo();\n notebook.deselectAll();\n Private.handleState(notebook, state);\n }\n\n /**\n * Toggle the line number of all cells.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The original state is based on the state of the active cell.\n * The `mode` of the widget will be preserved.\n */\n export function toggleAllLineNumbers(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const config = notebook.editorConfig;\n const lineNumbers = !(\n config.code.lineNumbers &&\n config.markdown.lineNumbers &&\n config.raw.lineNumbers\n );\n const newConfig = {\n code: { ...config.code, lineNumbers },\n markdown: { ...config.markdown, lineNumbers },\n raw: { ...config.raw, lineNumbers }\n };\n\n notebook.editorConfig = newConfig;\n Private.handleState(notebook, state);\n }\n\n /**\n * Clear the code outputs of the selected cells.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget `mode` will be preserved.\n */\n export function clearOutputs(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n each(notebook.model.cells, (cell: ICodeCellModel, index) => {\n const child = notebook.widgets[index];\n\n if (notebook.isSelectedOrActive(child) && cell.type === 'code') {\n cell.outputs.clear();\n (child as CodeCell).outputHidden = false;\n cell.executionCount = null;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Clear all the code outputs on the widget.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget `mode` will be preserved.\n */\n export function clearAllOutputs(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n each(notebook.model.cells, (cell: ICodeCellModel, index) => {\n const child = notebook.widgets[index];\n\n if (cell.type === 'code') {\n cell.outputs.clear();\n cell.executionCount = null;\n (child as CodeCell).outputHidden = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Hide the code on selected code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function hideCode(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n cell.inputHidden = true;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Show the code on selected code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function showCode(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n cell.inputHidden = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Hide the code on all code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function hideAllCode(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (cell.model.type === 'code') {\n cell.inputHidden = true;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Show the code on all code cells.\n *\n * @param widget - The target notebook widget.\n */\n export function showAllCode(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (cell.model.type === 'code') {\n cell.inputHidden = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Hide the output on selected code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function hideOutput(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n (cell as CodeCell).outputHidden = true;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Show the output on selected code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function showOutput(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n (cell as CodeCell).outputHidden = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Hide the output on all code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function hideAllOutputs(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (cell.model.type === 'code') {\n (cell as CodeCell).outputHidden = true;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Show the output on all code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function showAllOutputs(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (cell.model.type === 'code') {\n (cell as CodeCell).outputHidden = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Enable output scrolling for all selected cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function enableOutputScrolling(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n (cell as CodeCell).outputsScrolled = true;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Disable output scrolling for all selected cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function disableOutputScrolling(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n (cell as CodeCell).outputsScrolled = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Persists the collapsed state of all code cell outputs to the model.\n *\n * @param notebook - The target notebook widget.\n */\n export function persistViewState(notebook: Notebook): void {\n if (!notebook.model) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n const { model, inputHidden } = cell;\n const metadata = model.metadata;\n const jupyter = (metadata.get('jupyter') as any) || {};\n\n if (inputHidden) {\n jupyter.source_hidden = true;\n } else {\n delete jupyter.source_hidden;\n }\n\n if (cell.model.type === 'code') {\n const { outputHidden, outputsScrolled } = cell as CodeCell;\n\n // set both metadata keys\n // https://github.com/jupyterlab/jupyterlab/pull/3981#issuecomment-391139167\n if (outputHidden) {\n model.metadata.set('collapsed', true);\n jupyter.outputs_hidden = true;\n } else {\n model.metadata.delete('collapsed');\n delete jupyter.outputs_hidden;\n }\n\n if (outputsScrolled) {\n model.metadata.set('scrolled', true);\n } else {\n model.metadata.delete('scrolled');\n }\n }\n\n if (Object.keys(jupyter).length === 0) {\n metadata.delete('jupyter');\n } else {\n metadata.set('jupyter', jupyter);\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Set the markdown header level.\n *\n * @param notebook - The target notebook widget.\n *\n * @param level - The header level.\n *\n * #### Notes\n * All selected cells will be switched to markdown.\n * The level will be clamped between 1 and 6.\n * If there is an existing header, it will be replaced.\n * There will always be one blank space after the header.\n * The cells will be unrendered.\n */\n export function setMarkdownHeader(notebook: Notebook, level: number) {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const cells = notebook.model.cells;\n\n level = Math.min(Math.max(level, 1), 6);\n notebook.widgets.forEach((child, index) => {\n if (notebook.isSelectedOrActive(child)) {\n Private.setMarkdownHeader(cells.get(index), level);\n }\n });\n Private.changeCellType(notebook, 'markdown');\n Private.handleState(notebook, state);\n }\n\n /**\n * Trust the notebook after prompting the user.\n *\n * @param notebook - The target notebook widget.\n *\n * @returns a promise that resolves when the transaction is finished.\n *\n * #### Notes\n * No dialog will be presented if the notebook is already trusted.\n */\n export function trust(notebook: Notebook): Promise<void> {\n if (!notebook.model) {\n return Promise.resolve();\n }\n // Do nothing if already trusted.\n\n const cells = toArray(notebook.model.cells);\n const trusted = cells.every(cell => cell.trusted);\n\n if (trusted) {\n return showDialog({\n body: 'Notebook is already trusted',\n buttons: [Dialog.okButton()]\n }).then(() => undefined);\n }\n\n return showDialog({\n body: TRUST_MESSAGE,\n title: 'Trust this notebook?',\n buttons: [Dialog.cancelButton(), Dialog.warnButton()]\n }).then(result => {\n if (result.button.accept) {\n cells.forEach(cell => {\n cell.trusted = true;\n });\n }\n });\n }\n}\n\n/**\n * A namespace for private data.\n */\nnamespace Private {\n /**\n * A signal that emits whenever a cell is run.\n */\n export const executed = new Signal<any, { notebook: Notebook; cell: Cell }>(\n {}\n );\n\n /**\n * The interface for a widget state.\n */\n export interface IState {\n /**\n * Whether the widget had focus.\n */\n wasFocused: boolean;\n\n /**\n * The active cell before the action.\n */\n activeCell: Cell;\n }\n\n /**\n * Get the state of a widget before running an action.\n */\n export function getState(notebook: Notebook): IState {\n return {\n wasFocused: notebook.node.contains(document.activeElement),\n activeCell: notebook.activeCell\n };\n }\n\n /**\n * Handle the state of a widget after running an action.\n */\n export function handleState(\n notebook: Notebook,\n state: IState,\n scrollIfNeeded = false\n ): void {\n const { activeCell, node } = notebook;\n\n if (state.wasFocused || notebook.mode === 'edit') {\n notebook.activate();\n }\n\n if (scrollIfNeeded) {\n ElementExt.scrollIntoViewIfNeeded(node, activeCell.node);\n }\n }\n\n /**\n * Handle the state of a widget after running a run action.\n */\n export function handleRunState(\n notebook: Notebook,\n state: IState,\n scroll = false\n ): void {\n if (state.wasFocused || notebook.mode === 'edit') {\n notebook.activate();\n }\n if (scroll) {\n // Scroll to the top of the previous active cell output.\n const rect = state.activeCell.inputArea.node.getBoundingClientRect();\n\n notebook.scrollToPosition(rect.bottom, 45);\n }\n }\n\n /**\n * Clone a cell model.\n */\n export function cloneCell(\n model: INotebookModel,\n cell: ICellModel\n ): ICellModel {\n switch (cell.type) {\n case 'code':\n // TODO why isn't modeldb or id passed here?\n return model.contentFactory.createCodeCell({ cell: cell.toJSON() });\n case 'markdown':\n // TODO why isn't modeldb or id passed here?\n return model.contentFactory.createMarkdownCell({ cell: cell.toJSON() });\n default:\n // TODO why isn't modeldb or id passed here?\n return model.contentFactory.createRawCell({ cell: cell.toJSON() });\n }\n }\n\n /**\n * Run the selected cells.\n */\n export function runSelected(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n notebook.mode = 'command';\n\n let lastIndex = notebook.activeCellIndex;\n const selected = notebook.widgets.filter((child, index) => {\n const active = notebook.isSelectedOrActive(child);\n\n if (active) {\n lastIndex = index;\n }\n\n return active;\n });\n\n notebook.activeCellIndex = lastIndex;\n notebook.deselectAll();\n\n return Promise.all(\n selected.map(child => runCell(notebook, child, session))\n ).then(results => {\n if (notebook.isDisposed) {\n return false;\n }\n\n // Post an update request.\n notebook.update();\n\n return results.every(result => result);\n });\n }\n\n /**\n * Run a cell.\n */\n function runCell(\n notebook: Notebook,\n cell: Cell,\n session?: IClientSession\n ): Promise<boolean> {\n switch (cell.model.type) {\n case 'markdown':\n (cell as MarkdownCell).rendered = true;\n cell.inputHidden = false;\n executed.emit({ notebook, cell });\n break;\n case 'code':\n if (session) {\n return CodeCell.execute(cell as CodeCell, session)\n .then(reply => {\n if (cell.isDisposed) {\n return false;\n }\n\n if (!reply) {\n return true;\n }\n\n if (reply.content.status === 'ok') {\n const content = reply.content as KernelMessage.IExecuteOkReply;\n\n if (content.payload && content.payload.length) {\n handlePayload(content, notebook, cell);\n }\n\n return true;\n }\n\n return false;\n })\n .catch(reason => {\n if (reason.message !== 'Canceled') {\n throw reason;\n }\n\n return false;\n })\n .then(ran => {\n if (ran) {\n executed.emit({ notebook, cell });\n }\n\n return ran;\n });\n }\n (cell.model as ICodeCellModel).executionCount = null;\n break;\n default:\n break;\n }\n\n return Promise.resolve(true);\n }\n\n /**\n * Handle payloads from an execute reply.\n *\n * #### Notes\n * Payloads are deprecated and there are no official interfaces for them in\n * the kernel type definitions.\n * See [Payloads (DEPRECATED)](https://jupyter-client.readthedocs.io/en/latest/messaging.html#payloads-deprecated).\n */\n function handlePayload(\n content: KernelMessage.IExecuteOkReply,\n notebook: Notebook,\n cell: Cell\n ) {\n const setNextInput = content.payload.filter(i => {\n return (i as any).source === 'set_next_input';\n })[0];\n\n if (!setNextInput) {\n return;\n }\n\n const text = (setNextInput as any).text;\n const replace = (setNextInput as any).replace;\n\n if (replace) {\n cell.model.value.text = text;\n return;\n }\n\n // Create a new code cell and add as the next cell.\n const newCell = notebook.model.contentFactory.createCodeCell({});\n const cells = notebook.model.cells;\n const index = ArrayExt.firstIndexOf(toArray(cells), cell.model);\n\n newCell.value.text = text;\n if (index === -1) {\n cells.push(newCell);\n } else {\n cells.insert(index + 1, newCell);\n }\n }\n\n /**\n * Copy or cut the selected cell data to the application clipboard.\n *\n * @param notebook - The target notebook widget.\n *\n * @param cut - Whether to copy or cut.\n */\n export function copyOrCut(notebook: Notebook, cut: boolean): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = getState(notebook);\n const clipboard = Clipboard.getInstance();\n\n notebook.mode = 'command';\n clipboard.clear();\n\n const data = notebook.widgets\n .filter(cell => notebook.isSelectedOrActive(cell))\n .map(cell => cell.model.toJSON());\n\n clipboard.setData(JUPYTER_CELL_MIME, data);\n if (cut) {\n deleteCells(notebook);\n } else {\n notebook.deselectAll();\n }\n handleState(notebook, state);\n }\n\n /**\n * Change the selected cell type(s).\n *\n * @param notebook - The target notebook widget.\n *\n * @param value - The target cell type.\n *\n * #### Notes\n * It should preserve the widget mode.\n * This action can be undone.\n * The existing selection will be cleared.\n * Any cells converted to markdown will be unrendered.\n */\n export function changeCellType(\n notebook: Notebook,\n value: nbformat.CellType\n ): void {\n const model = notebook.model;\n const cells = model.cells;\n\n cells.beginCompoundOperation();\n notebook.widgets.forEach((child, index) => {\n if (!notebook.isSelectedOrActive(child)) {\n return;\n }\n if (child.model.type !== value) {\n const cell = child.model.toJSON();\n let newCell: ICellModel;\n\n switch (value) {\n case 'code':\n newCell = model.contentFactory.createCodeCell({ cell });\n break;\n case 'markdown':\n newCell = model.contentFactory.createMarkdownCell({ cell });\n if (child.model.type === 'code') {\n newCell.trusted = false;\n }\n break;\n default:\n newCell = model.contentFactory.createRawCell({ cell });\n if (child.model.type === 'code') {\n newCell.trusted = false;\n }\n }\n cells.set(index, newCell);\n }\n if (value === 'markdown') {\n // Fetch the new widget and unrender it.\n child = notebook.widgets[index];\n (child as MarkdownCell).rendered = false;\n }\n });\n cells.endCompoundOperation();\n notebook.deselectAll();\n }\n\n /**\n * Delete the selected cells.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The cell after the last selected cell will be activated.\n * If the last cell is deleted, then the previous one will be activated.\n * It will add a code cell if all cells are deleted.\n * This action can be undone.\n */\n export function deleteCells(notebook: Notebook): void {\n const model = notebook.model;\n const cells = model.cells;\n const toDelete: number[] = [];\n\n notebook.mode = 'command';\n\n // Find the cells to delete.\n notebook.widgets.forEach((child, index) => {\n const deletable = child.model.metadata.get('deletable') !== false;\n\n if (notebook.isSelectedOrActive(child) && deletable) {\n toDelete.push(index);\n }\n });\n\n // If cells are not deletable, we may not have anything to delete.\n if (toDelete.length > 0) {\n // Delete the cells as one undo event.\n cells.beginCompoundOperation();\n // Delete cells in reverse order to maintain the correct indices.\n toDelete.reverse().forEach(index => {\n cells.remove(index);\n });\n // Add a new cell if the notebook is empty. This is done\n // within the compound operation to make the deletion of\n // a notebook's last cell undoable.\n if (!cells.length) {\n cells.push(model.contentFactory.createCodeCell({}));\n }\n cells.endCompoundOperation();\n\n // Select the *first* interior cell not deleted or the cell\n // *after* the last selected cell.\n // Note: The activeCellIndex is clamped to the available cells,\n // so if the last cell is deleted the previous cell will be activated.\n // The *first* index is the index of the last cell in the initial\n // toDelete list due to the `reverse` operation above.\n notebook.activeCellIndex = toDelete[0] - toDelete.length + 1;\n }\n\n // Deselect any remaining, undeletable cells. Do this even if we don't\n // delete anything so that users are aware *something* happened.\n notebook.deselectAll();\n }\n\n /**\n * Set the markdown header level of a cell.\n */\n export function setMarkdownHeader(cell: ICellModel, level: number) {\n // Remove existing header or leading white space.\n let source = cell.value.text;\n const regex = /^(#+\\s*)|^(\\s*)/;\n const newHeader = Array(level + 1).join('#') + ' ';\n const matches = regex.exec(source);\n\n if (matches) {\n source = source.slice(matches[0].length);\n }\n cell.value.text = newHeader + source;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../../notebook/src/actions.tsx"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,2DAA2D;;;;;;;;;AAI3D,mDAK8B;AAI9B,6CAM2B;AAE3B,mDAA8D;AAI9D,iDAAgD;AAEhD,mDAAsD;AAEtD,6CAA+B;AAM/B,2EAA2E;AAC3E,MAAM,aAAa,GAAG,CACpB;;IAGE,+BAAM;;IAEN,+BAAM;;IAEN,2BAAG,IAAI,EAAC,iEAAiE,qCAErE,CACF,CACL,CAAC;AAEF;;GAEG;AACH,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAE1D;;;;;;;;GAQG;AACH;IACE;;OAEG;IACH,MAAM,KAAK,QAAQ;QACjB,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAED;;;;;;;;OAQG;IACH,gBAAuB,CAAC;CACzB;AAlBD,0CAkBC;AAED;;GAEG;AACH,WAAiB,eAAe;IAC9B;;;;;;;;;;;;;OAaG;IACH,mBAA0B,QAAkB;QAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAEpC,yCAAyC;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAEvD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;YACzB,MAAyB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;SAC5C;QACD,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI;aACrB,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;aAChB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;aACnB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI;aACrB,KAAK,CAAC,MAAM,CAAC;aACb,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;aACnB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEvB,6CAA6C;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAE5B,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAC/B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzB,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAChC,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAE7B,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IA3Ce,yBAAS,YA2CxB,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,oBAA2B,QAAkB;QAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC;QAExC,0BAA0B;QAC1B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxC,IAAI,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBACtC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,KAAK,KAAK,MAAM,EAAE;oBACpB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC5B;aACF;QACH,CAAC,CAAC,CAAC;QAEH,yCAAyC;QACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,+BAA+B;YAC/B,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,OAAO;aACR;YAED,sCAAsC;YACtC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAExC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC1B;QAED,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEvB,wDAAwD;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAEzD,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE;YAC3B,QAA2B,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;SAC9C;QAED,6CAA6C;QAC7C,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAC/B,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACtB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAE7B,qDAAqD;QACrD,8BAA8B;QAC9B,IAAI,OAAO,YAAY,oBAAY,EAAE;YAClC,QAAQ,CAAC,UAA2B,CAAC,QAAQ,GAAG,KAAK,CAAC;SACxD;QAED,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IA9De,0BAAU,aA8DzB,CAAA;IAED;;;;;;;;;OASG;IACH,qBAA4B,QAAkB;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IATe,2BAAW,cAS1B,CAAA;IAED;;;;;;;;;;OAUG;IACH,qBAA4B,QAAkB;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC;QAExC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEjC,uCAAuC;QACvC,QAAQ,CAAC,eAAe,GAAG,MAAM,CAAC;QAClC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAhBe,2BAAW,cAgB1B,CAAA;IAED;;;;;;;;;;OAUG;IACH,qBAA4B,QAAkB;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAErD,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAEvD,uCAAuC;QACvC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC3B,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAfe,2BAAW,cAe1B,CAAA;IAED;;;;OAIG;IACH,kBAAyB,QAAkB;QACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAEjC,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC3C,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBAChD,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBACrB,IAAI,QAAQ,CAAC,eAAe,KAAK,CAAC,EAAE;wBAClC,QAAQ,CAAC,eAAe,EAAE,CAAC;qBAC5B;oBACD,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAChC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/B;aACF;SACF;QACD,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAxBe,wBAAQ,WAwBvB,CAAA;IAED;;;;OAIG;IACH,gBAAuB,QAAkB;QACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAEjC,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC3C,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBAChD,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBACrB,IAAI,QAAQ,CAAC,eAAe,KAAK,CAAC,EAAE;wBAClC,QAAQ,CAAC,eAAe,EAAE,CAAC;qBAC5B;oBACD,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAChC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/B;aACF;SACF;QACD,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAxBe,sBAAM,SAwBrB,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,wBACE,QAAkB,EAClB,KAAwB;QAExB,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAZe,8BAAc,iBAY7B,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,aACE,QAAkB,EAClB,OAAwB;QAExB,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEvD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC;IACjB,CAAC;IAbe,mBAAG,MAalB,CAAA;IAED;;;;;;;;;;;;;;OAcG;IACH,uBACE,QAAkB,EAClB,OAAwB;QAExB,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAE7B,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAErD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;SACxB;aAAM;YACL,QAAQ,CAAC,eAAe,EAAE,CAAC;SAC5B;QACD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC;IACjB,CAAC;IAvBe,6BAAa,gBAuB5B,CAAA;IAED;;;;;;;;;;;;;;OAcG;IACH,sBACE,QAAkB,EAClB,OAAwB;QAExB,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAErD,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACvD,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;QACvB,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC;IACjB,CAAC;IAlBe,4BAAY,eAkB3B,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,gBACE,QAAkB,EAClB,OAAwB;QAExB,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC/B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEvD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC;IACjB,CAAC;IAlBe,sBAAM,SAkBrB,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,qBACE,QAAkB,EAClB,OAAwB;QAExB,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QAExD,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,IAAI,eAAe,GAAG,CAAC,EAAE;YAChD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC3B,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE;YACjD,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACtC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEvD,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC;IACjB,CAAC;IAvBe,2BAAW,cAuB1B,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,qBACE,QAAkB,EAClB,OAAwB;QAExB,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACvE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACtC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEvD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC;IACjB,CAAC;IAnBe,2BAAW,cAmB1B,CAAA;IAED;;;;;;;;;OASG;IACH,qBAA4B,QAAkB;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QACD,IAAI,QAAQ,CAAC,eAAe,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,eAAe,IAAI,CAAC,CAAC;QAC9B,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAbe,2BAAW,cAa1B,CAAA;IAED;;;;;;;;;OASG;IACH,qBAA4B,QAAkB;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QACD,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5D,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,eAAe,IAAI,CAAC,CAAC;QAC9B,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAbe,2BAAW,cAa1B,CAAA;IAED;;;;;;;;OAQG;IACH,8BAAqC,QAAkB;QACrD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QACD,sBAAsB;QACtB,IAAI,QAAQ,CAAC,eAAe,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;QAC1B,QAAQ,CAAC,2BAA2B,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAde,oCAAoB,uBAcnC,CAAA;IAED;;;;;;;;OAQG;IACH,8BAAqC,QAAkB;QACrD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QACD,sBAAsB;QACtB,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5D,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;QAC1B,QAAQ,CAAC,2BAA2B,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAde,oCAAoB,uBAcnC,CAAA;IAED;;;;OAIG;IACH,mBAA0B,QAAkB;QAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QACD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC/B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAPe,yBAAS,YAOxB,CAAA;IAED;;;;OAIG;IACH,qBAA4B,QAAkB;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QACD,QAAQ,CAAC,WAAW,EAAE,CAAC;IACzB,CAAC;IALe,2BAAW,cAK1B,CAAA;IAED;;;;OAIG;IACH,cAAqB,QAAkB;QACrC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAFe,oBAAI,OAEnB,CAAA;IAED;;;;;;;;OAQG;IACH,aAAoB,QAAkB;QACpC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAFe,mBAAG,MAElB,CAAA;IAED;;;;;;;;;;;;;;OAcG;IACH,eACE,QAAkB,EAClB,OAAsC,OAAO;QAE7C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,SAAS,GAAG,oBAAS,CAAC,WAAW,EAAE,CAAC;QAE1C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;YACzC,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAyB,CAAC;QAC5E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAE7B,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;QAE1B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACjC,QAAQ,IAAI,CAAC,SAAS,EAAE;gBACtB,KAAK,MAAM;oBACT,OAAO,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,KAAK,UAAU;oBACb,OAAO,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D;oBACE,OAAO,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aACvD;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QACnC,IAAI,KAAa,CAAC;QAElB,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAE/B,yEAAyE;QACzE,QAAQ,IAAI,EAAE;YACZ,KAAK,OAAO;gBACV,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC;gBACjC,MAAM;YACR,KAAK,OAAO;gBACV,KAAK,GAAG,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC;gBACrC,MAAM;YACR,KAAK,SAAS;gBACZ,4BAA4B;gBAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAE9B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oBACxC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC;oBAElE,IAAI,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE;wBACnD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACtB;gBACH,CAAC,CAAC,CAAC;gBAEH,kEAAkE;gBAClE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvB,sCAAsC;oBACtC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBAC7B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC,CAAC,CAAC;iBACJ;gBACD,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpB,MAAM;YACR;gBACE,MAAM;SACT;QAED,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACtB,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAE7B,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,MAAM,CAAC;QAC5C,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IA7Ee,qBAAK,QA6EpB,CAAA;IAED;;;;;;;OAOG;IACH,cAAqB,QAAkB;QACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;QAC1B,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAXe,oBAAI,OAWnB,CAAA;IAED;;;;;;;OAOG;IACH,cAAqB,QAAkB;QACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;QAC1B,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAXe,oBAAI,OAWnB,CAAA;IAED;;;;;;;;OAQG;IACH,8BAAqC,QAAkB;QACrD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC;QACrC,MAAM,WAAW,GAAG,CAAC,CACnB,MAAM,CAAC,IAAI,CAAC,WAAW;YACvB,MAAM,CAAC,QAAQ,CAAC,WAAW;YAC3B,MAAM,CAAC,GAAG,CAAC,WAAW,CACvB,CAAC;QACF,MAAM,SAAS,GAAG;YAChB,IAAI,oBAAO,MAAM,CAAC,IAAI,IAAE,WAAW,GAAE;YACrC,QAAQ,oBAAO,MAAM,CAAC,QAAQ,IAAE,WAAW,GAAE;YAC7C,GAAG,oBAAO,MAAM,CAAC,GAAG,IAAE,WAAW,GAAE;SACpC,CAAC;QAEF,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC;QAClC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IApBe,oCAAoB,uBAoBnC,CAAA;IAED;;;;;;;OAOG;IACH,sBAA6B,QAAkB;QAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,gBAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAoB,EAAE,KAAK,EAAE,EAAE;YACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAEtC,IAAI,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACpB,KAAkB,CAAC,YAAY,GAAG,KAAK,CAAC;gBACzC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;aAC5B;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAjBe,4BAAY,eAiB3B,CAAA;IAED;;;;;;;OAOG;IACH,yBAAgC,QAAkB;QAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,gBAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAoB,EAAE,KAAK,EAAE,EAAE;YACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAEtC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;gBACxB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC1B,KAAkB,CAAC,YAAY,GAAG,KAAK,CAAC;aAC1C;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAjBe,+BAAe,kBAiB9B,CAAA;IAED;;;;OAIG;IACH,kBAAyB,QAAkB;QACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBACnE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAbe,wBAAQ,WAavB,CAAA;IAED;;;;OAIG;IACH,kBAAyB,QAAkB;QACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBACnE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAbe,wBAAQ,WAavB,CAAA;IAED;;;;OAIG;IACH,qBAA4B,QAAkB;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAbe,2BAAW,cAa1B,CAAA;IAED;;;;OAIG;IACH,qBAA4B,QAAkB;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAbe,2BAAW,cAa1B,CAAA;IAED;;;;OAIG;IACH,oBAA2B,QAAkB;QAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBAClE,IAAiB,CAAC,YAAY,GAAG,IAAI,CAAC;aACxC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAbe,0BAAU,aAazB,CAAA;IAED;;;;OAIG;IACH,oBAA2B,QAAkB;QAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBAClE,IAAiB,CAAC,YAAY,GAAG,KAAK,CAAC;aACzC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAbe,0BAAU,aAazB,CAAA;IAED;;;;OAIG;IACH,wBAA+B,QAAkB;QAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC7B,IAAiB,CAAC,YAAY,GAAG,IAAI,CAAC;aACxC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAbe,8BAAc,iBAa7B,CAAA;IAED;;;;OAIG;IACH,wBAA+B,QAAkB;QAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC7B,IAAiB,CAAC,YAAY,GAAG,KAAK,CAAC;aACzC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAbe,8BAAc,iBAa7B,CAAA;IAED;;;;OAIG;IACH,+BAAsC,QAAkB;QACtD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBAClE,IAAiB,CAAC,eAAe,GAAG,IAAI,CAAC;aAC3C;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAbe,qCAAqB,wBAapC,CAAA;IAED;;;;OAIG;IACH,gCAAuC,QAAkB;QACvD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBAClE,IAAiB,CAAC,eAAe,GAAG,KAAK,CAAC;aAC5C;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAbe,sCAAsB,yBAarC,CAAA;IAED;;;;OAIG;IACH,0BAAiC,QAAkB;QACjD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACnB,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;YACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAChC,MAAM,OAAO,GAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAS,IAAI,EAAE,CAAC;YAEvD,IAAI,WAAW,EAAE;gBACf,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;aAC9B;iBAAM;gBACL,OAAO,OAAO,CAAC,aAAa,CAAC;aAC9B;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC9B,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,IAAgB,CAAC;gBAE3D,yBAAyB;gBACzB,4EAA4E;gBAC5E,IAAI,YAAY,EAAE;oBAChB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBACtC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;iBAC/B;qBAAM;oBACL,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBACnC,OAAO,OAAO,CAAC,cAAc,CAAC;iBAC/B;gBAED,IAAI,eAAe,EAAE;oBACnB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;iBACtC;qBAAM;oBACL,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;iBACnC;aACF;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;aAC5B;iBAAM;gBACL,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;aAClC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IA7Ce,gCAAgB,mBA6C/B,CAAA;IAED;;;;;;;;;;;;;OAaG;IACH,2BAAkC,QAAkB,EAAE,KAAa;QACjE,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAEnC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxC,IAAI,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBACtC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;aACpD;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7C,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAhBe,iCAAiB,oBAgBhC,CAAA;IAED;;;;;;;;;OASG;IACH,eAAsB,QAAkB;QACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC1B;QACD,iCAAiC;QAEjC,MAAM,KAAK,GAAG,mBAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,OAAO,EAAE;YACX,OAAO,qBAAU,CAAC;gBAChB,IAAI,EAAE,6BAA6B;gBACnC,OAAO,EAAE,CAAC,iBAAM,CAAC,QAAQ,EAAE,CAAC;aAC7B,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;SAC1B;QAED,OAAO,qBAAU,CAAC;YAChB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,sBAAsB;YAC7B,OAAO,EAAE,CAAC,iBAAM,CAAC,YAAY,EAAE,EAAE,iBAAM,CAAC,UAAU,EAAE,CAAC;SACtD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACf,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;gBACxB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IA3Be,qBAAK,QA2BpB,CAAA;AACH,CAAC,EAnrCgB,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAmrC/B;AAED;;GAEG;AACH,IAAU,OAAO,CAqZhB;AArZD,WAAU,OAAO;IACf;;OAEG;IACU,gBAAQ,GAAG,IAAI,kBAAM,CAChC,EAAE,CACH,CAAC;IAiBF;;OAEG;IACH,kBAAyB,QAAkB;QACzC,OAAO;YACL,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC1D,UAAU,EAAE,QAAQ,CAAC,UAAU;SAChC,CAAC;IACJ,CAAC;IALe,gBAAQ,WAKvB,CAAA;IAED;;OAEG;IACH,qBACE,QAAkB,EAClB,KAAa,EACb,cAAc,GAAG,KAAK;QAEtB,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QAEtC,IAAI,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE;YAChD,QAAQ,CAAC,QAAQ,EAAE,CAAC;SACrB;QAED,IAAI,cAAc,EAAE;YAClB,qBAAU,CAAC,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;SAC1D;IACH,CAAC;IAde,mBAAW,cAc1B,CAAA;IAED;;OAEG;IACH,wBACE,QAAkB,EAClB,KAAa,EACb,MAAM,GAAG,KAAK;QAEd,IAAI,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE;YAChD,QAAQ,CAAC,QAAQ,EAAE,CAAC;SACrB;QACD,IAAI,MAAM,EAAE;YACV,wDAAwD;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAErE,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SAC5C;IACH,CAAC;IAde,sBAAc,iBAc7B,CAAA;IAED;;OAEG;IACH,mBACE,KAAqB,EACrB,IAAgB;QAEhB,QAAQ,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,MAAM;gBACT,4CAA4C;gBAC5C,OAAO,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACtE,KAAK,UAAU;gBACb,4CAA4C;gBAC5C,OAAO,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC1E;gBACE,4CAA4C;gBAC5C,OAAO,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SACtE;IACH,CAAC;IAfe,iBAAS,YAexB,CAAA;IAED;;OAEG;IACH,qBACE,QAAkB,EAClB,OAAwB;QAExB,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;QAE1B,IAAI,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC;QACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAElD,IAAI,MAAM,EAAE;gBACV,SAAS,GAAG,KAAK,CAAC;aACnB;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,GAAG,SAAS,CAAC;QACrC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEvB,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CACzD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACf,IAAI,QAAQ,CAAC,UAAU,EAAE;gBACvB,OAAO,KAAK,CAAC;aACd;YAED,0BAA0B;YAC1B,QAAQ,CAAC,MAAM,EAAE,CAAC;YAElB,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAhCe,mBAAW,cAgC1B,CAAA;IAED;;OAEG;IACH,iBACE,QAAkB,EAClB,IAAU,EACV,OAAwB;QAExB,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACvB,KAAK,UAAU;gBACZ,IAAqB,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACvC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,QAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClC,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,OAAO,EAAE;oBACX,OAAO,gBAAQ,CAAC,OAAO,CAAC,IAAgB,EAAE,OAAO,EAAE;wBACjD,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;qBAC1C,CAAC;yBACC,IAAI,CAAC,KAAK,CAAC,EAAE;wBACZ,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAChC,CAAC,EACD,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CACnC,CAAC;wBACF,IAAI,IAAI,CAAC,UAAU,EAAE;4BACnB,OAAO,KAAK,CAAC;yBACd;wBAED,IAAI,CAAC,KAAK,EAAE;4BACV,OAAO,IAAI,CAAC;yBACb;wBAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE;4BACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAwC,CAAC;4BAE/D,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE;gCAC7C,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;6BACxC;4BAED,OAAO,IAAI,CAAC;yBACb;wBAED,OAAO,KAAK,CAAC;oBACf,CAAC,CAAC;yBACD,KAAK,CAAC,MAAM,CAAC,EAAE;wBACd,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE;4BACjC,MAAM,MAAM,CAAC;yBACd;wBAED,OAAO,KAAK,CAAC;oBACf,CAAC,CAAC;yBACD,IAAI,CAAC,GAAG,CAAC,EAAE;wBACV,IAAI,GAAG,EAAE;4BACP,QAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;yBACnC;wBAED,OAAO,GAAG,CAAC;oBACb,CAAC,CAAC,CAAC;iBACN;gBACA,IAAI,CAAC,KAAwB,CAAC,cAAc,GAAG,IAAI,CAAC;gBACrD,MAAM;YACR;gBACE,MAAM;SACT;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;OAOG;IACH,uBACE,OAAsC,EACtC,QAAkB,EAClB,IAAU;QAEV,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YAC9C,OAAQ,CAAS,CAAC,MAAM,KAAK,gBAAgB,CAAC;QAChD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO;SACR;QAED,MAAM,IAAI,GAAI,YAAoB,CAAC,IAAI,CAAC;QACxC,MAAM,OAAO,GAAI,YAAoB,CAAC,OAAO,CAAC;QAE9C,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAC7B,OAAO;SACR;QAED,mDAAmD;QACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QACnC,MAAM,KAAK,GAAG,oBAAQ,CAAC,YAAY,CAAC,mBAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAEhE,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1B,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACrB;aAAM;YACL,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;SAClC;IACH,CAAC;IAED;;;;;;OAMG;IACH,mBAA0B,QAAkB,EAAE,GAAY;QACxD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,oBAAS,CAAC,WAAW,EAAE,CAAC;QAE1C,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;QAC1B,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO;aACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;aACjD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aAChC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACd,IAAK,QAAQ,CAAC,QAAuB,CAAC,SAAS,KAAK,SAAS,EAAE;gBAC7D,OAAQ,QAAQ,CAAC,QAAuB,CAAC,SAAS,CAAC;aACpD;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;QAEL,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,GAAG,EAAE;YACP,WAAW,CAAC,QAAQ,CAAC,CAAC;SACvB;aAAM;YACL,QAAQ,CAAC,WAAW,EAAE,CAAC;SACxB;QACD,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IA5Be,iBAAS,YA4BxB,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,wBACE,QAAkB,EAClB,KAAwB;QAExB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAE1B,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAC/B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBACvC,OAAO;aACR;YACD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;gBAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClC,IAAI,OAAmB,CAAC;gBAExB,QAAQ,KAAK,EAAE;oBACb,KAAK,MAAM;wBACT,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;wBACxD,MAAM;oBACR,KAAK,UAAU;wBACb,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC5D,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;4BAC/B,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;yBACzB;wBACD,MAAM;oBACR;wBACE,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;wBACvD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;4BAC/B,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;yBACzB;iBACJ;gBACD,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aAC3B;YACD,IAAI,KAAK,KAAK,UAAU,EAAE;gBACxB,wCAAwC;gBACxC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC/B,KAAsB,CAAC,QAAQ,GAAG,KAAK,CAAC;aAC1C;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,QAAQ,CAAC,WAAW,EAAE,CAAC;IACzB,CAAC;IA1Ce,sBAAc,iBA0C7B,CAAA;IAED;;;;;;;;;;OAUG;IACH,qBAA4B,QAAkB;QAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;QAE1B,4BAA4B;QAC5B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC;YAElE,IAAI,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE;gBACnD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAClD;QACH,CAAC,CAAC,CAAC;QAEH,kEAAkE;QAClE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,sCAAsC;YACtC,KAAK,CAAC,sBAAsB,EAAE,CAAC;YAC/B,iEAAiE;YACjE,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACjC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YACH,wDAAwD;YACxD,wDAAwD;YACxD,mCAAmC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACjB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;aACrD;YACD,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAE7B,2DAA2D;YAC3D,kCAAkC;YAClC,+DAA+D;YAC/D,sEAAsE;YACtE,iEAAiE;YACjE,sDAAsD;YACtD,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;SAC9D;QAED,sEAAsE;QACtE,gEAAgE;QAChE,QAAQ,CAAC,WAAW,EAAE,CAAC;IACzB,CAAC;IA7Ce,mBAAW,cA6C1B,CAAA;IAED;;OAEG;IACH,2BAAkC,IAAgB,EAAE,KAAa;QAC/D,iDAAiD;QACjD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7B,MAAM,KAAK,GAAG,iBAAiB,CAAC;QAChC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACnD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,OAAO,EAAE;YACX,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAC1C;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,CAAC;IAXe,yBAAiB,oBAWhC,CAAA;AACH,CAAC,EArZS,OAAO,KAAP,OAAO,QAqZhB","sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n\nimport { KernelMessage } from '@jupyterlab/services';\n\nimport {\n IClientSession,\n Clipboard,\n Dialog,\n showDialog\n} from '@jupyterlab/apputils';\n\nimport { nbformat } from '@jupyterlab/coreutils';\n\nimport {\n ICellModel,\n ICodeCellModel,\n CodeCell,\n Cell,\n MarkdownCell\n} from '@jupyterlab/cells';\n\nimport { ArrayExt, each, toArray } from '@phosphor/algorithm';\n\nimport { JSONObject } from '@phosphor/coreutils';\n\nimport { ElementExt } from '@phosphor/domutils';\n\nimport { ISignal, Signal } from '@phosphor/signaling';\n\nimport * as React from 'react';\n\nimport { INotebookModel } from './model';\n\nimport { Notebook } from './widget';\n\n// The message to display to the user when prompting to trust the notebook.\nconst TRUST_MESSAGE = (\n <p>\n A trusted Jupyter notebook may execute hidden malicious code when you open\n it.\n <br />\n Selecting trust will re-render this notebook in a trusted state.\n <br />\n For more information, see the\n <a href=\"https://jupyter-notebook.readthedocs.io/en/stable/security.html\">\n Jupyter security documentation\n </a>\n </p>\n);\n\n/**\n * The mimetype used for Jupyter cell data.\n */\nconst JUPYTER_CELL_MIME = 'application/vnd.jupyter.cells';\n\n/**\n * A collection of actions that run against notebooks.\n *\n * #### Notes\n * All of the actions are a no-op if there is no model on the notebook.\n * The actions set the widget `mode` to `'command'` unless otherwise specified.\n * The actions will preserve the selection on the notebook widget unless\n * otherwise specified.\n */\nexport class NotebookActions {\n /**\n * A signal that emits whenever a cell is run.\n */\n static get executed(): ISignal<any, { notebook: Notebook; cell: Cell }> {\n return Private.executed;\n }\n\n /**\n * A private constructor for the `NotebookActions` class.\n *\n * #### Notes\n * This class can never be instantiated. Its static member `executed` will be\n * merged with the `NotebookActions` namespace. The reason it exists as a\n * standalone class is because at run time, the `Private.executed` variable\n * does not yet exist, so it needs to be referenced via a getter.\n */\n private constructor() {}\n}\n\n/**\n * A namespace for `NotebookActions` static methods.\n */\nexport namespace NotebookActions {\n /**\n * Split the active cell into two cells.\n *\n * @param widget - The target notebook widget.\n *\n * #### Notes\n * It will preserve the existing mode.\n * The second cell will be activated.\n * The existing selection will be cleared.\n * The leading whitespace in the second cell will be removed.\n * If there is no content, two empty cells will be created.\n * Both cells will have the same type as the original cell.\n * This action can be undone.\n */\n export function splitCell(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.deselectAll();\n\n const nbModel = notebook.model;\n const index = notebook.activeCellIndex;\n const child = notebook.widgets[index];\n const editor = child.editor;\n const position = editor.getCursorPosition();\n const offset = editor.getOffsetAt(position);\n const orig = child.model.value.text;\n\n // Create new models to preserve history.\n const clone0 = Private.cloneCell(nbModel, child.model);\n const clone1 = Private.cloneCell(nbModel, child.model);\n\n if (clone0.type === 'code') {\n (clone0 as ICodeCellModel).outputs.clear();\n }\n clone0.value.text = orig\n .slice(0, offset)\n .replace(/^\\n+/, '')\n .replace(/\\n+$/, '');\n clone1.value.text = orig\n .slice(offset)\n .replace(/^\\n+/, '')\n .replace(/\\n+$/, '');\n\n // Make the changes while preserving history.\n const cells = nbModel.cells;\n\n cells.beginCompoundOperation();\n cells.set(index, clone0);\n cells.insert(index + 1, clone1);\n cells.endCompoundOperation();\n\n notebook.activeCellIndex++;\n Private.handleState(notebook, state);\n }\n\n /**\n * Merge the selected cells.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget mode will be preserved.\n * If only one cell is selected, the next cell will be selected.\n * If the active cell is a code cell, its outputs will be cleared.\n * This action can be undone.\n * The final cell will have the same type as the active cell.\n * If the active cell is a markdown cell, it will be unrendered.\n */\n export function mergeCells(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const toMerge: string[] = [];\n const toDelete: ICellModel[] = [];\n const model = notebook.model;\n const cells = model.cells;\n const primary = notebook.activeCell;\n const active = notebook.activeCellIndex;\n\n // Get the cells to merge.\n notebook.widgets.forEach((child, index) => {\n if (notebook.isSelectedOrActive(child)) {\n toMerge.push(child.model.value.text);\n if (index !== active) {\n toDelete.push(child.model);\n }\n }\n });\n\n // Check for only a single cell selected.\n if (toMerge.length === 1) {\n // Bail if it is the last cell.\n if (active === cells.length - 1) {\n return;\n }\n\n // Otherwise merge with the next cell.\n const cellModel = cells.get(active + 1);\n\n toMerge.push(cellModel.value.text);\n toDelete.push(cellModel);\n }\n\n notebook.deselectAll();\n\n // Create a new cell for the source to preserve history.\n const newModel = Private.cloneCell(model, primary.model);\n\n newModel.value.text = toMerge.join('\\n\\n');\n if (newModel.type === 'code') {\n (newModel as ICodeCellModel).outputs.clear();\n }\n\n // Make the changes while preserving history.\n cells.beginCompoundOperation();\n cells.set(active, newModel);\n toDelete.forEach(cell => {\n cells.removeValue(cell);\n });\n cells.endCompoundOperation();\n\n // If the original cell is a markdown cell, make sure\n // the new cell is unrendered.\n if (primary instanceof MarkdownCell) {\n (notebook.activeCell as MarkdownCell).rendered = false;\n }\n\n Private.handleState(notebook, state);\n }\n\n /**\n * Delete the selected cells.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The cell after the last selected cell will be activated.\n * It will add a code cell if all cells are deleted.\n * This action can be undone.\n */\n export function deleteCells(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n Private.deleteCells(notebook);\n Private.handleState(notebook, state);\n }\n\n /**\n * Insert a new code cell above the active cell.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget mode will be preserved.\n * This action can be undone.\n * The existing selection will be cleared.\n * The new cell will the active cell.\n */\n export function insertAbove(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const model = notebook.model;\n const cell = model.contentFactory.createCodeCell({});\n const active = notebook.activeCellIndex;\n\n model.cells.insert(active, cell);\n\n // Make the newly inserted cell active.\n notebook.activeCellIndex = active;\n notebook.deselectAll();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Insert a new code cell below the active cell.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget mode will be preserved.\n * This action can be undone.\n * The existing selection will be cleared.\n * The new cell will be the active cell.\n */\n export function insertBelow(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const model = notebook.model;\n const cell = model.contentFactory.createCodeCell({});\n\n model.cells.insert(notebook.activeCellIndex + 1, cell);\n\n // Make the newly inserted cell active.\n notebook.activeCellIndex++;\n notebook.deselectAll();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Move the selected cell(s) down.\n *\n * @param notebook = The target notebook widget.\n */\n export function moveDown(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const cells = notebook.model.cells;\n const widgets = notebook.widgets;\n\n cells.beginCompoundOperation();\n for (let i = cells.length - 2; i > -1; i--) {\n if (notebook.isSelectedOrActive(widgets[i])) {\n if (!notebook.isSelectedOrActive(widgets[i + 1])) {\n cells.move(i, i + 1);\n if (notebook.activeCellIndex === i) {\n notebook.activeCellIndex++;\n }\n notebook.select(widgets[i + 1]);\n notebook.deselect(widgets[i]);\n }\n }\n }\n cells.endCompoundOperation();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Move the selected cell(s) up.\n *\n * @param widget - The target notebook widget.\n */\n export function moveUp(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const cells = notebook.model.cells;\n const widgets = notebook.widgets;\n\n cells.beginCompoundOperation();\n for (let i = 1; i < cells.length; i++) {\n if (notebook.isSelectedOrActive(widgets[i])) {\n if (!notebook.isSelectedOrActive(widgets[i - 1])) {\n cells.move(i, i - 1);\n if (notebook.activeCellIndex === i) {\n notebook.activeCellIndex--;\n }\n notebook.select(widgets[i - 1]);\n notebook.deselect(widgets[i]);\n }\n }\n }\n cells.endCompoundOperation();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Change the selected cell type(s).\n *\n * @param notebook - The target notebook widget.\n *\n * @param value - The target cell type.\n *\n * #### Notes\n * It should preserve the widget mode.\n * This action can be undone.\n * The existing selection will be cleared.\n * Any cells converted to markdown will be unrendered.\n */\n export function changeCellType(\n notebook: Notebook,\n value: nbformat.CellType\n ): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n Private.changeCellType(notebook, value);\n Private.handleState(notebook, state);\n }\n\n /**\n * Run the selected cell(s).\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * The last selected cell will be activated, but not scrolled into view.\n * The existing selection will be cleared.\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n */\n export function run(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n if (!notebook.model || !notebook.activeCell) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n const promise = Private.runSelected(notebook, session);\n\n Private.handleRunState(notebook, state, false);\n return promise;\n }\n\n /**\n * Run the selected cell(s) and advance to the next cell.\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * The existing selection will be cleared.\n * The cell after the last selected cell will be activated and scrolled into view.\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n * If the last selected cell is the last cell, a new code cell\n * will be created in `'edit'` mode. The new cell creation can be undone.\n */\n export function runAndAdvance(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n if (!notebook.model || !notebook.activeCell) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n const promise = Private.runSelected(notebook, session);\n const model = notebook.model;\n\n if (notebook.activeCellIndex === notebook.widgets.length - 1) {\n const cell = model.contentFactory.createCodeCell({});\n\n model.cells.push(cell);\n notebook.activeCellIndex++;\n notebook.mode = 'edit';\n } else {\n notebook.activeCellIndex++;\n }\n Private.handleRunState(notebook, state, true);\n return promise;\n }\n\n /**\n * Run the selected cell(s) and insert a new code cell.\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n * The widget mode will be set to `'edit'` after running.\n * The existing selection will be cleared.\n * The cell insert can be undone.\n * The new cell will be scrolled into view.\n */\n export function runAndInsert(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n if (!notebook.model || !notebook.activeCell) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n const promise = Private.runSelected(notebook, session);\n const model = notebook.model;\n const cell = model.contentFactory.createCodeCell({});\n\n model.cells.insert(notebook.activeCellIndex + 1, cell);\n notebook.activeCellIndex++;\n notebook.mode = 'edit';\n Private.handleRunState(notebook, state, true);\n return promise;\n }\n\n /**\n * Run all of the cells in the notebook.\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * The existing selection will be cleared.\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n * The last cell in the notebook will be activated and scrolled into view.\n */\n export function runAll(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n if (!notebook.model || !notebook.activeCell) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(child => {\n notebook.select(child);\n });\n\n const promise = Private.runSelected(notebook, session);\n\n Private.handleRunState(notebook, state, true);\n return promise;\n }\n\n /**\n * Run all of the cells before the currently active cell (exclusive).\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * The existing selection will be cleared.\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n * The currently active cell will remain selected.\n */\n export function runAllAbove(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n const { activeCell, activeCellIndex, model } = notebook;\n\n if (!model || !activeCell || activeCellIndex < 1) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n\n notebook.activeCellIndex--;\n notebook.deselectAll();\n for (let i = 0; i < notebook.activeCellIndex; ++i) {\n notebook.select(notebook.widgets[i]);\n }\n\n const promise = Private.runSelected(notebook, session);\n\n notebook.activeCellIndex++;\n Private.handleRunState(notebook, state, true);\n return promise;\n }\n\n /**\n * Run all of the cells after the currently active cell (inclusive).\n *\n * @param notebook - The target notebook widget.\n *\n * @param session - The optional client session object.\n *\n * #### Notes\n * The existing selection will be cleared.\n * An execution error will prevent the remaining code cells from executing.\n * All markdown cells will be rendered.\n * The last cell in the notebook will be activated and scrolled into view.\n */\n export function runAllBelow(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n if (!notebook.model || !notebook.activeCell) {\n return Promise.resolve(false);\n }\n\n const state = Private.getState(notebook);\n\n notebook.deselectAll();\n for (let i = notebook.activeCellIndex; i < notebook.widgets.length; ++i) {\n notebook.select(notebook.widgets[i]);\n }\n\n const promise = Private.runSelected(notebook, session);\n\n Private.handleRunState(notebook, state, true);\n return promise;\n }\n\n /**\n * Select the above the active cell.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget mode will be preserved.\n * This is a no-op if the first cell is the active cell.\n * The existing selection will be cleared.\n */\n export function selectAbove(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n if (notebook.activeCellIndex === 0) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.activeCellIndex -= 1;\n notebook.deselectAll();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Select the cell below the active cell.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget mode will be preserved.\n * This is a no-op if the last cell is the active cell.\n * The existing selection will be cleared.\n */\n export function selectBelow(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n if (notebook.activeCellIndex === notebook.widgets.length - 1) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.activeCellIndex += 1;\n notebook.deselectAll();\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Extend the selection to the cell above.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * This is a no-op if the first cell is the active cell.\n * The new cell will be activated.\n */\n export function extendSelectionAbove(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n // Do not wrap around.\n if (notebook.activeCellIndex === 0) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.mode = 'command';\n notebook.extendContiguousSelectionTo(notebook.activeCellIndex - 1);\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Extend the selection to the cell below.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * This is a no-op if the last cell is the active cell.\n * The new cell will be activated.\n */\n export function extendSelectionBelow(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n // Do not wrap around.\n if (notebook.activeCellIndex === notebook.widgets.length - 1) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.mode = 'command';\n notebook.extendContiguousSelectionTo(notebook.activeCellIndex + 1);\n Private.handleState(notebook, state, true);\n }\n\n /**\n * Select all of the cells of the notebook.\n *\n * @param notebook - the targe notebook widget.\n */\n export function selectAll(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n notebook.widgets.forEach(child => {\n notebook.select(child);\n });\n }\n\n /**\n * Deselect all of the cells of the notebook.\n *\n * @param notebook - the targe notebook widget.\n */\n export function deselectAll(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n notebook.deselectAll();\n }\n\n /**\n * Copy the selected cell data to a clipboard.\n *\n * @param notebook - The target notebook widget.\n */\n export function copy(notebook: Notebook): void {\n Private.copyOrCut(notebook, false);\n }\n\n /**\n * Cut the selected cell data to a clipboard.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * This action can be undone.\n * A new code cell is added if all cells are cut.\n */\n export function cut(notebook: Notebook): void {\n Private.copyOrCut(notebook, true);\n }\n\n /**\n * Paste cells from the application clipboard.\n *\n * @param notebook - The target notebook widget.\n *\n * @param mode - the mode of the paste operation: 'below' pastes cells\n * below the active cell, 'above' pastes cells above the active cell,\n * and 'replace' removes the currently selected cells and pastes cells\n * in their place.\n *\n * #### Notes\n * The last pasted cell becomes the active cell.\n * This is a no-op if there is no cell data on the clipboard.\n * This action can be undone.\n */\n export function paste(\n notebook: Notebook,\n mode: 'below' | 'above' | 'replace' = 'below'\n ): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const clipboard = Clipboard.getInstance();\n\n if (!clipboard.hasData(JUPYTER_CELL_MIME)) {\n return;\n }\n\n const state = Private.getState(notebook);\n const values = clipboard.getData(JUPYTER_CELL_MIME) as nbformat.IBaseCell[];\n const model = notebook.model;\n\n notebook.mode = 'command';\n\n const newCells = values.map(cell => {\n switch (cell.cell_type) {\n case 'code':\n return model.contentFactory.createCodeCell({ cell });\n case 'markdown':\n return model.contentFactory.createMarkdownCell({ cell });\n default:\n return model.contentFactory.createRawCell({ cell });\n }\n });\n\n const cells = notebook.model.cells;\n let index: number;\n\n cells.beginCompoundOperation();\n\n // Set the starting index of the paste operation depending upon the mode.\n switch (mode) {\n case 'below':\n index = notebook.activeCellIndex;\n break;\n case 'above':\n index = notebook.activeCellIndex - 1;\n break;\n case 'replace':\n // Find the cells to delete.\n const toDelete: number[] = [];\n\n notebook.widgets.forEach((child, index) => {\n const deletable = child.model.metadata.get('deletable') !== false;\n\n if (notebook.isSelectedOrActive(child) && deletable) {\n toDelete.push(index);\n }\n });\n\n // If cells are not deletable, we may not have anything to delete.\n if (toDelete.length > 0) {\n // Delete the cells as one undo event.\n toDelete.reverse().forEach(i => {\n cells.remove(i);\n });\n }\n index = toDelete[0];\n break;\n default:\n break;\n }\n\n newCells.forEach(cell => {\n cells.insert(++index, cell);\n });\n cells.endCompoundOperation();\n\n notebook.activeCellIndex += newCells.length;\n notebook.deselectAll();\n Private.handleState(notebook, state);\n }\n\n /**\n * Undo a cell action.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * This is a no-op if if there are no cell actions to undo.\n */\n export function undo(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.mode = 'command';\n notebook.model.cells.undo();\n notebook.deselectAll();\n Private.handleState(notebook, state);\n }\n\n /**\n * Redo a cell action.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * This is a no-op if there are no cell actions to redo.\n */\n export function redo(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.mode = 'command';\n notebook.model.cells.redo();\n notebook.deselectAll();\n Private.handleState(notebook, state);\n }\n\n /**\n * Toggle the line number of all cells.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The original state is based on the state of the active cell.\n * The `mode` of the widget will be preserved.\n */\n export function toggleAllLineNumbers(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const config = notebook.editorConfig;\n const lineNumbers = !(\n config.code.lineNumbers &&\n config.markdown.lineNumbers &&\n config.raw.lineNumbers\n );\n const newConfig = {\n code: { ...config.code, lineNumbers },\n markdown: { ...config.markdown, lineNumbers },\n raw: { ...config.raw, lineNumbers }\n };\n\n notebook.editorConfig = newConfig;\n Private.handleState(notebook, state);\n }\n\n /**\n * Clear the code outputs of the selected cells.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget `mode` will be preserved.\n */\n export function clearOutputs(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n each(notebook.model.cells, (cell: ICodeCellModel, index) => {\n const child = notebook.widgets[index];\n\n if (notebook.isSelectedOrActive(child) && cell.type === 'code') {\n cell.outputs.clear();\n (child as CodeCell).outputHidden = false;\n cell.executionCount = null;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Clear all the code outputs on the widget.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The widget `mode` will be preserved.\n */\n export function clearAllOutputs(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n each(notebook.model.cells, (cell: ICodeCellModel, index) => {\n const child = notebook.widgets[index];\n\n if (cell.type === 'code') {\n cell.outputs.clear();\n cell.executionCount = null;\n (child as CodeCell).outputHidden = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Hide the code on selected code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function hideCode(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n cell.inputHidden = true;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Show the code on selected code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function showCode(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n cell.inputHidden = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Hide the code on all code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function hideAllCode(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (cell.model.type === 'code') {\n cell.inputHidden = true;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Show the code on all code cells.\n *\n * @param widget - The target notebook widget.\n */\n export function showAllCode(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (cell.model.type === 'code') {\n cell.inputHidden = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Hide the output on selected code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function hideOutput(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n (cell as CodeCell).outputHidden = true;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Show the output on selected code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function showOutput(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n (cell as CodeCell).outputHidden = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Hide the output on all code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function hideAllOutputs(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (cell.model.type === 'code') {\n (cell as CodeCell).outputHidden = true;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Show the output on all code cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function showAllOutputs(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (cell.model.type === 'code') {\n (cell as CodeCell).outputHidden = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Enable output scrolling for all selected cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function enableOutputScrolling(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n (cell as CodeCell).outputsScrolled = true;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Disable output scrolling for all selected cells.\n *\n * @param notebook - The target notebook widget.\n */\n export function disableOutputScrolling(notebook: Notebook): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n (cell as CodeCell).outputsScrolled = false;\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Persists the collapsed state of all code cell outputs to the model.\n *\n * @param notebook - The target notebook widget.\n */\n export function persistViewState(notebook: Notebook): void {\n if (!notebook.model) {\n return;\n }\n\n const state = Private.getState(notebook);\n\n notebook.widgets.forEach(cell => {\n const { model, inputHidden } = cell;\n const metadata = model.metadata;\n const jupyter = (metadata.get('jupyter') as any) || {};\n\n if (inputHidden) {\n jupyter.source_hidden = true;\n } else {\n delete jupyter.source_hidden;\n }\n\n if (cell.model.type === 'code') {\n const { outputHidden, outputsScrolled } = cell as CodeCell;\n\n // set both metadata keys\n // https://github.com/jupyterlab/jupyterlab/pull/3981#issuecomment-391139167\n if (outputHidden) {\n model.metadata.set('collapsed', true);\n jupyter.outputs_hidden = true;\n } else {\n model.metadata.delete('collapsed');\n delete jupyter.outputs_hidden;\n }\n\n if (outputsScrolled) {\n model.metadata.set('scrolled', true);\n } else {\n model.metadata.delete('scrolled');\n }\n }\n\n if (Object.keys(jupyter).length === 0) {\n metadata.delete('jupyter');\n } else {\n metadata.set('jupyter', jupyter);\n }\n });\n Private.handleState(notebook, state);\n }\n\n /**\n * Set the markdown header level.\n *\n * @param notebook - The target notebook widget.\n *\n * @param level - The header level.\n *\n * #### Notes\n * All selected cells will be switched to markdown.\n * The level will be clamped between 1 and 6.\n * If there is an existing header, it will be replaced.\n * There will always be one blank space after the header.\n * The cells will be unrendered.\n */\n export function setMarkdownHeader(notebook: Notebook, level: number) {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = Private.getState(notebook);\n const cells = notebook.model.cells;\n\n level = Math.min(Math.max(level, 1), 6);\n notebook.widgets.forEach((child, index) => {\n if (notebook.isSelectedOrActive(child)) {\n Private.setMarkdownHeader(cells.get(index), level);\n }\n });\n Private.changeCellType(notebook, 'markdown');\n Private.handleState(notebook, state);\n }\n\n /**\n * Trust the notebook after prompting the user.\n *\n * @param notebook - The target notebook widget.\n *\n * @returns a promise that resolves when the transaction is finished.\n *\n * #### Notes\n * No dialog will be presented if the notebook is already trusted.\n */\n export function trust(notebook: Notebook): Promise<void> {\n if (!notebook.model) {\n return Promise.resolve();\n }\n // Do nothing if already trusted.\n\n const cells = toArray(notebook.model.cells);\n const trusted = cells.every(cell => cell.trusted);\n\n if (trusted) {\n return showDialog({\n body: 'Notebook is already trusted',\n buttons: [Dialog.okButton()]\n }).then(() => undefined);\n }\n\n return showDialog({\n body: TRUST_MESSAGE,\n title: 'Trust this notebook?',\n buttons: [Dialog.cancelButton(), Dialog.warnButton()]\n }).then(result => {\n if (result.button.accept) {\n cells.forEach(cell => {\n cell.trusted = true;\n });\n }\n });\n }\n}\n\n/**\n * A namespace for private data.\n */\nnamespace Private {\n /**\n * A signal that emits whenever a cell is run.\n */\n export const executed = new Signal<any, { notebook: Notebook; cell: Cell }>(\n {}\n );\n\n /**\n * The interface for a widget state.\n */\n export interface IState {\n /**\n * Whether the widget had focus.\n */\n wasFocused: boolean;\n\n /**\n * The active cell before the action.\n */\n activeCell: Cell;\n }\n\n /**\n * Get the state of a widget before running an action.\n */\n export function getState(notebook: Notebook): IState {\n return {\n wasFocused: notebook.node.contains(document.activeElement),\n activeCell: notebook.activeCell\n };\n }\n\n /**\n * Handle the state of a widget after running an action.\n */\n export function handleState(\n notebook: Notebook,\n state: IState,\n scrollIfNeeded = false\n ): void {\n const { activeCell, node } = notebook;\n\n if (state.wasFocused || notebook.mode === 'edit') {\n notebook.activate();\n }\n\n if (scrollIfNeeded) {\n ElementExt.scrollIntoViewIfNeeded(node, activeCell.node);\n }\n }\n\n /**\n * Handle the state of a widget after running a run action.\n */\n export function handleRunState(\n notebook: Notebook,\n state: IState,\n scroll = false\n ): void {\n if (state.wasFocused || notebook.mode === 'edit') {\n notebook.activate();\n }\n if (scroll) {\n // Scroll to the top of the previous active cell output.\n const rect = state.activeCell.inputArea.node.getBoundingClientRect();\n\n notebook.scrollToPosition(rect.bottom, 45);\n }\n }\n\n /**\n * Clone a cell model.\n */\n export function cloneCell(\n model: INotebookModel,\n cell: ICellModel\n ): ICellModel {\n switch (cell.type) {\n case 'code':\n // TODO why isn't modeldb or id passed here?\n return model.contentFactory.createCodeCell({ cell: cell.toJSON() });\n case 'markdown':\n // TODO why isn't modeldb or id passed here?\n return model.contentFactory.createMarkdownCell({ cell: cell.toJSON() });\n default:\n // TODO why isn't modeldb or id passed here?\n return model.contentFactory.createRawCell({ cell: cell.toJSON() });\n }\n }\n\n /**\n * Run the selected cells.\n */\n export function runSelected(\n notebook: Notebook,\n session?: IClientSession\n ): Promise<boolean> {\n notebook.mode = 'command';\n\n let lastIndex = notebook.activeCellIndex;\n const selected = notebook.widgets.filter((child, index) => {\n const active = notebook.isSelectedOrActive(child);\n\n if (active) {\n lastIndex = index;\n }\n\n return active;\n });\n\n notebook.activeCellIndex = lastIndex;\n notebook.deselectAll();\n\n return Promise.all(\n selected.map(child => runCell(notebook, child, session))\n ).then(results => {\n if (notebook.isDisposed) {\n return false;\n }\n\n // Post an update request.\n notebook.update();\n\n return results.every(result => result);\n });\n }\n\n /**\n * Run a cell.\n */\n function runCell(\n notebook: Notebook,\n cell: Cell,\n session?: IClientSession\n ): Promise<boolean> {\n switch (cell.model.type) {\n case 'markdown':\n (cell as MarkdownCell).rendered = true;\n cell.inputHidden = false;\n executed.emit({ notebook, cell });\n break;\n case 'code':\n if (session) {\n return CodeCell.execute(cell as CodeCell, session, {\n deletedCells: notebook.model.deletedCells\n })\n .then(reply => {\n notebook.model.deletedCells.splice(\n 0,\n notebook.model.deletedCells.length\n );\n if (cell.isDisposed) {\n return false;\n }\n\n if (!reply) {\n return true;\n }\n\n if (reply.content.status === 'ok') {\n const content = reply.content as KernelMessage.IExecuteOkReply;\n\n if (content.payload && content.payload.length) {\n handlePayload(content, notebook, cell);\n }\n\n return true;\n }\n\n return false;\n })\n .catch(reason => {\n if (reason.message !== 'Canceled') {\n throw reason;\n }\n\n return false;\n })\n .then(ran => {\n if (ran) {\n executed.emit({ notebook, cell });\n }\n\n return ran;\n });\n }\n (cell.model as ICodeCellModel).executionCount = null;\n break;\n default:\n break;\n }\n\n return Promise.resolve(true);\n }\n\n /**\n * Handle payloads from an execute reply.\n *\n * #### Notes\n * Payloads are deprecated and there are no official interfaces for them in\n * the kernel type definitions.\n * See [Payloads (DEPRECATED)](https://jupyter-client.readthedocs.io/en/latest/messaging.html#payloads-deprecated).\n */\n function handlePayload(\n content: KernelMessage.IExecuteOkReply,\n notebook: Notebook,\n cell: Cell\n ) {\n const setNextInput = content.payload.filter(i => {\n return (i as any).source === 'set_next_input';\n })[0];\n\n if (!setNextInput) {\n return;\n }\n\n const text = (setNextInput as any).text;\n const replace = (setNextInput as any).replace;\n\n if (replace) {\n cell.model.value.text = text;\n return;\n }\n\n // Create a new code cell and add as the next cell.\n const newCell = notebook.model.contentFactory.createCodeCell({});\n const cells = notebook.model.cells;\n const index = ArrayExt.firstIndexOf(toArray(cells), cell.model);\n\n newCell.value.text = text;\n if (index === -1) {\n cells.push(newCell);\n } else {\n cells.insert(index + 1, newCell);\n }\n }\n\n /**\n * Copy or cut the selected cell data to the application clipboard.\n *\n * @param notebook - The target notebook widget.\n *\n * @param cut - Whether to copy or cut.\n */\n export function copyOrCut(notebook: Notebook, cut: boolean): void {\n if (!notebook.model || !notebook.activeCell) {\n return;\n }\n\n const state = getState(notebook);\n const clipboard = Clipboard.getInstance();\n\n notebook.mode = 'command';\n clipboard.clear();\n\n let data = notebook.widgets\n .filter(cell => notebook.isSelectedOrActive(cell))\n .map(cell => cell.model.toJSON())\n .map(cellJSON => {\n if ((cellJSON.metadata as JSONObject).deletable !== undefined) {\n delete (cellJSON.metadata as JSONObject).deletable;\n }\n return cellJSON;\n });\n\n clipboard.setData(JUPYTER_CELL_MIME, data);\n if (cut) {\n deleteCells(notebook);\n } else {\n notebook.deselectAll();\n }\n handleState(notebook, state);\n }\n\n /**\n * Change the selected cell type(s).\n *\n * @param notebook - The target notebook widget.\n *\n * @param value - The target cell type.\n *\n * #### Notes\n * It should preserve the widget mode.\n * This action can be undone.\n * The existing selection will be cleared.\n * Any cells converted to markdown will be unrendered.\n */\n export function changeCellType(\n notebook: Notebook,\n value: nbformat.CellType\n ): void {\n const model = notebook.model;\n const cells = model.cells;\n\n cells.beginCompoundOperation();\n notebook.widgets.forEach((child, index) => {\n if (!notebook.isSelectedOrActive(child)) {\n return;\n }\n if (child.model.type !== value) {\n const cell = child.model.toJSON();\n let newCell: ICellModel;\n\n switch (value) {\n case 'code':\n newCell = model.contentFactory.createCodeCell({ cell });\n break;\n case 'markdown':\n newCell = model.contentFactory.createMarkdownCell({ cell });\n if (child.model.type === 'code') {\n newCell.trusted = false;\n }\n break;\n default:\n newCell = model.contentFactory.createRawCell({ cell });\n if (child.model.type === 'code') {\n newCell.trusted = false;\n }\n }\n cells.set(index, newCell);\n }\n if (value === 'markdown') {\n // Fetch the new widget and unrender it.\n child = notebook.widgets[index];\n (child as MarkdownCell).rendered = false;\n }\n });\n cells.endCompoundOperation();\n notebook.deselectAll();\n }\n\n /**\n * Delete the selected cells.\n *\n * @param notebook - The target notebook widget.\n *\n * #### Notes\n * The cell after the last selected cell will be activated.\n * If the last cell is deleted, then the previous one will be activated.\n * It will add a code cell if all cells are deleted.\n * This action can be undone.\n */\n export function deleteCells(notebook: Notebook): void {\n const model = notebook.model;\n const cells = model.cells;\n const toDelete: number[] = [];\n\n notebook.mode = 'command';\n\n // Find the cells to delete.\n notebook.widgets.forEach((child, index) => {\n const deletable = child.model.metadata.get('deletable') !== false;\n\n if (notebook.isSelectedOrActive(child) && deletable) {\n toDelete.push(index);\n notebook.model.deletedCells.push(child.model.id);\n }\n });\n\n // If cells are not deletable, we may not have anything to delete.\n if (toDelete.length > 0) {\n // Delete the cells as one undo event.\n cells.beginCompoundOperation();\n // Delete cells in reverse order to maintain the correct indices.\n toDelete.reverse().forEach(index => {\n cells.remove(index);\n });\n // Add a new cell if the notebook is empty. This is done\n // within the compound operation to make the deletion of\n // a notebook's last cell undoable.\n if (!cells.length) {\n cells.push(model.contentFactory.createCodeCell({}));\n }\n cells.endCompoundOperation();\n\n // Select the *first* interior cell not deleted or the cell\n // *after* the last selected cell.\n // Note: The activeCellIndex is clamped to the available cells,\n // so if the last cell is deleted the previous cell will be activated.\n // The *first* index is the index of the last cell in the initial\n // toDelete list due to the `reverse` operation above.\n notebook.activeCellIndex = toDelete[0] - toDelete.length + 1;\n }\n\n // Deselect any remaining, undeletable cells. Do this even if we don't\n // delete anything so that users are aware *something* happened.\n notebook.deselectAll();\n }\n\n /**\n * Set the markdown header level of a cell.\n */\n export function setMarkdownHeader(cell: ICellModel, level: number) {\n // Remove existing header or leading white space.\n let source = cell.value.text;\n const regex = /^(#+\\s*)|^(\\s*)/;\n const newHeader = Array(level + 1).join('#') + ' ';\n const matches = regex.exec(source);\n\n if (matches) {\n source = source.slice(matches[0].length);\n }\n cell.value.text = newHeader + source;\n }\n}\n"]}
|
package/lib/default-toolbar.js
CHANGED
|
@@ -47,7 +47,7 @@ var ToolbarItems;
|
|
|
47
47
|
*/
|
|
48
48
|
function createSaveButton(panel) {
|
|
49
49
|
return new apputils_1.ToolbarButton({
|
|
50
|
-
|
|
50
|
+
iconClassName: TOOLBAR_SAVE_CLASS + ' foo jp-Icon jp-Icon-16',
|
|
51
51
|
onClick: () => {
|
|
52
52
|
if (panel.context.model.readOnly) {
|
|
53
53
|
return apputils_1.showDialog({
|
|
@@ -71,7 +71,7 @@ var ToolbarItems;
|
|
|
71
71
|
*/
|
|
72
72
|
function createInsertButton(panel) {
|
|
73
73
|
return new apputils_1.ToolbarButton({
|
|
74
|
-
|
|
74
|
+
iconClassName: TOOLBAR_INSERT_CLASS + ' jp-Icon jp-Icon-16',
|
|
75
75
|
onClick: () => {
|
|
76
76
|
actions_1.NotebookActions.insertBelow(panel.content);
|
|
77
77
|
},
|
|
@@ -84,7 +84,7 @@ var ToolbarItems;
|
|
|
84
84
|
*/
|
|
85
85
|
function createCutButton(panel) {
|
|
86
86
|
return new apputils_1.ToolbarButton({
|
|
87
|
-
|
|
87
|
+
iconClassName: TOOLBAR_CUT_CLASS + ' jp-Icon jp-Icon-16',
|
|
88
88
|
onClick: () => {
|
|
89
89
|
actions_1.NotebookActions.cut(panel.content);
|
|
90
90
|
},
|
|
@@ -97,7 +97,7 @@ var ToolbarItems;
|
|
|
97
97
|
*/
|
|
98
98
|
function createCopyButton(panel) {
|
|
99
99
|
return new apputils_1.ToolbarButton({
|
|
100
|
-
|
|
100
|
+
iconClassName: TOOLBAR_COPY_CLASS + ' jp-Icon jp-Icon-16',
|
|
101
101
|
onClick: () => {
|
|
102
102
|
actions_1.NotebookActions.copy(panel.content);
|
|
103
103
|
},
|
|
@@ -110,7 +110,7 @@ var ToolbarItems;
|
|
|
110
110
|
*/
|
|
111
111
|
function createPasteButton(panel) {
|
|
112
112
|
return new apputils_1.ToolbarButton({
|
|
113
|
-
|
|
113
|
+
iconClassName: TOOLBAR_PASTE_CLASS + ' jp-Icon jp-Icon-16',
|
|
114
114
|
onClick: () => {
|
|
115
115
|
actions_1.NotebookActions.paste(panel.content);
|
|
116
116
|
},
|
|
@@ -123,7 +123,7 @@ var ToolbarItems;
|
|
|
123
123
|
*/
|
|
124
124
|
function createRunButton(panel) {
|
|
125
125
|
return new apputils_1.ToolbarButton({
|
|
126
|
-
|
|
126
|
+
iconClassName: TOOLBAR_RUN_CLASS + ' jp-Icon jp-Icon-16',
|
|
127
127
|
onClick: () => {
|
|
128
128
|
actions_1.NotebookActions.runAndAdvance(panel.content, panel.session);
|
|
129
129
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-toolbar.js","sourceRoot":"","sources":["../../../../notebook/src/default-toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n\nimport { Message } from '@phosphor/messaging';\n\nimport { Widget } from '@phosphor/widgets';\n\nimport { NotebookActions } from './actions';\n\nimport {\n showDialog,\n Dialog,\n Styling,\n Toolbar,\n ToolbarButton\n} from '@jupyterlab/apputils';\n\nimport { nbformat } from '@jupyterlab/coreutils';\n\nimport { NotebookPanel } from './panel';\n\nimport { Notebook } from './widget';\n\n/**\n * The class name added to toolbar save button.\n */\nconst TOOLBAR_SAVE_CLASS = 'jp-SaveIcon';\n\n/**\n * The class name added to toolbar insert button.\n */\nconst TOOLBAR_INSERT_CLASS = 'jp-AddIcon';\n\n/**\n * The class name added to toolbar cut button.\n */\nconst TOOLBAR_CUT_CLASS = 'jp-CutIcon';\n\n/**\n * The class name added to toolbar copy button.\n */\nconst TOOLBAR_COPY_CLASS = 'jp-CopyIcon';\n\n/**\n * The class name added to toolbar paste button.\n */\nconst TOOLBAR_PASTE_CLASS = 'jp-PasteIcon';\n\n/**\n * The class name added to toolbar run button.\n */\nconst TOOLBAR_RUN_CLASS = 'jp-RunIcon';\n\n/**\n * The class name added to toolbar cell type dropdown wrapper.\n */\nconst TOOLBAR_CELLTYPE_CLASS = 'jp-Notebook-toolbarCellType';\n\n/**\n * The class name added to toolbar cell type dropdown.\n */\nconst TOOLBAR_CELLTYPE_DROPDOWN_CLASS = 'jp-Notebook-toolbarCellTypeDropdown';\n\n/**\n * A namespace for the default toolbar items.\n */\nexport namespace ToolbarItems {\n /**\n * Create save button toolbar item.\n */\n export function createSaveButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n className: TOOLBAR_SAVE_CLASS,\n onClick: () => {\n if (panel.context.model.readOnly) {\n return showDialog({\n title: 'Cannot Save',\n body: 'Document is read-only',\n buttons: [Dialog.okButton()]\n });\n }\n panel.context.save().then(() => {\n if (!panel.isDisposed) {\n return panel.context.createCheckpoint();\n }\n });\n },\n tooltip: 'Save the notebook contents and create checkpoint'\n });\n }\n\n /**\n * Create an insert toolbar item.\n */\n export function createInsertButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n className: TOOLBAR_INSERT_CLASS,\n onClick: () => {\n NotebookActions.insertBelow(panel.content);\n },\n tooltip: 'Insert a cell below'\n });\n }\n\n /**\n * Create a cut toolbar item.\n */\n export function createCutButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n className: TOOLBAR_CUT_CLASS,\n onClick: () => {\n NotebookActions.cut(panel.content);\n },\n tooltip: 'Cut the selected cells'\n });\n }\n\n /**\n * Create a copy toolbar item.\n */\n export function createCopyButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n className: TOOLBAR_COPY_CLASS,\n onClick: () => {\n NotebookActions.copy(panel.content);\n },\n tooltip: 'Copy the selected cells'\n });\n }\n\n /**\n * Create a paste toolbar item.\n */\n export function createPasteButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n className: TOOLBAR_PASTE_CLASS,\n onClick: () => {\n NotebookActions.paste(panel.content);\n },\n tooltip: 'Paste cells from the clipboard'\n });\n }\n\n /**\n * Create a run toolbar item.\n */\n export function createRunButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n className: TOOLBAR_RUN_CLASS,\n onClick: () => {\n NotebookActions.runAndAdvance(panel.content, panel.session);\n },\n tooltip: 'Run the selected cells and advance'\n });\n }\n\n /**\n * Create a cell type switcher item.\n *\n * #### Notes\n * It will display the type of the current active cell.\n * If more than one cell is selected but are of different types,\n * it will display `'-'`.\n * When the user changes the cell type, it will change the\n * cell types of the selected cells.\n * It can handle a change to the context.\n */\n export function createCellTypeItem(panel: NotebookPanel): Widget {\n return new CellTypeSwitcher(panel.content);\n }\n\n /**\n * Add the default items to the panel toolbar.\n */\n export function populateDefaults(panel: NotebookPanel): void {\n let toolbar = panel.toolbar;\n toolbar.addItem('save', createSaveButton(panel));\n toolbar.addItem('insert', createInsertButton(panel));\n toolbar.addItem('cut', createCutButton(panel));\n toolbar.addItem('copy', createCopyButton(panel));\n toolbar.addItem('paste', createPasteButton(panel));\n toolbar.addItem('run', createRunButton(panel));\n toolbar.addItem('interrupt', Toolbar.createInterruptButton(panel.session));\n toolbar.addItem('restart', Toolbar.createRestartButton(panel.session));\n toolbar.addItem('cellType', createCellTypeItem(panel));\n toolbar.addItem('spacer', Toolbar.createSpacerItem());\n toolbar.addItem('kernelName', Toolbar.createKernelNameItem(panel.session));\n toolbar.addItem(\n 'kernelStatus',\n Toolbar.createKernelStatusItem(panel.session)\n );\n }\n}\n\n/**\n * A toolbar widget that switches cell types.\n */\nclass CellTypeSwitcher extends Widget {\n /**\n * Construct a new cell type switcher.\n */\n constructor(widget: Notebook) {\n super({ node: createCellTypeSwitcherNode() });\n this.addClass(TOOLBAR_CELLTYPE_CLASS);\n\n this._select = this.node.firstChild as HTMLSelectElement;\n Styling.wrapSelect(this._select);\n this._wildCard = document.createElement('option');\n this._wildCard.value = '-';\n this._wildCard.textContent = '-';\n this._notebook = widget;\n\n // Set the initial value.\n if (widget.model) {\n this._updateValue();\n }\n\n // Follow the type of the active cell.\n widget.activeCellChanged.connect(this._updateValue, this);\n\n // Follow a change in the selection.\n widget.selectionChanged.connect(this._updateValue, this);\n }\n\n /**\n * Handle the DOM events for the widget.\n *\n * @param event - The DOM event sent to the widget.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the dock panel's node. It should\n * not be called directly by user code.\n */\n handleEvent(event: Event): void {\n switch (event.type) {\n case 'change':\n this._evtChange(event);\n break;\n case 'keydown':\n this._evtKeyDown(event as KeyboardEvent);\n break;\n default:\n break;\n }\n }\n\n /**\n * Handle `after-attach` messages for the widget.\n */\n protected onAfterAttach(msg: Message): void {\n this._select.addEventListener('change', this);\n this._select.addEventListener('keydown', this);\n }\n\n /**\n * Handle `before-detach` messages for the widget.\n */\n protected onBeforeDetach(msg: Message): void {\n this._select.removeEventListener('change', this);\n this._select.removeEventListener('keydown', this);\n }\n\n /**\n * Handle `changed` events for the widget.\n */\n private _evtChange(event: Event): void {\n let select = this._select;\n let widget = this._notebook;\n if (select.value === '-') {\n return;\n }\n if (!this._changeGuard) {\n let value = select.value as nbformat.CellType;\n NotebookActions.changeCellType(widget, value);\n widget.activate();\n }\n }\n\n /**\n * Handle `keydown` events for the widget.\n */\n private _evtKeyDown(event: KeyboardEvent): void {\n if (event.keyCode === 13) {\n // Enter\n this._notebook.activate();\n }\n }\n\n /**\n * Update the value of the dropdown from the widget state.\n */\n private _updateValue(): void {\n let widget = this._notebook;\n let select = this._select;\n if (!widget.activeCell) {\n return;\n }\n let mType: string = widget.activeCell.model.type;\n for (let i = 0; i < widget.widgets.length; i++) {\n let child = widget.widgets[i];\n if (widget.isSelectedOrActive(child)) {\n if (child.model.type !== mType) {\n mType = '-';\n select.appendChild(this._wildCard);\n break;\n }\n }\n }\n if (mType !== '-') {\n select.remove(3);\n }\n this._changeGuard = true;\n select.value = mType;\n this._changeGuard = false;\n }\n\n private _changeGuard = false;\n private _wildCard: HTMLOptionElement = null;\n private _select: HTMLSelectElement = null;\n private _notebook: Notebook = null;\n}\n\n/**\n * Create the node for the cell type switcher.\n */\nfunction createCellTypeSwitcherNode(): HTMLElement {\n let div = document.createElement('div');\n let select = document.createElement('select');\n for (let t of ['Code', 'Markdown', 'Raw']) {\n let option = document.createElement('option');\n option.value = t.toLowerCase();\n option.textContent = t;\n select.appendChild(option);\n }\n select.className = TOOLBAR_CELLTYPE_DROPDOWN_CLASS;\n div.appendChild(select);\n return div;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"default-toolbar.js","sourceRoot":"","sources":["../../../../notebook/src/default-toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n\nimport { Message } from '@phosphor/messaging';\n\nimport { Widget } from '@phosphor/widgets';\n\nimport { NotebookActions } from './actions';\n\nimport {\n showDialog,\n Dialog,\n Styling,\n Toolbar,\n ToolbarButton\n} from '@jupyterlab/apputils';\n\nimport { nbformat } from '@jupyterlab/coreutils';\n\nimport { NotebookPanel } from './panel';\n\nimport { Notebook } from './widget';\n\n/**\n * The class name added to toolbar save button.\n */\nconst TOOLBAR_SAVE_CLASS = 'jp-SaveIcon';\n\n/**\n * The class name added to toolbar insert button.\n */\nconst TOOLBAR_INSERT_CLASS = 'jp-AddIcon';\n\n/**\n * The class name added to toolbar cut button.\n */\nconst TOOLBAR_CUT_CLASS = 'jp-CutIcon';\n\n/**\n * The class name added to toolbar copy button.\n */\nconst TOOLBAR_COPY_CLASS = 'jp-CopyIcon';\n\n/**\n * The class name added to toolbar paste button.\n */\nconst TOOLBAR_PASTE_CLASS = 'jp-PasteIcon';\n\n/**\n * The class name added to toolbar run button.\n */\nconst TOOLBAR_RUN_CLASS = 'jp-RunIcon';\n\n/**\n * The class name added to toolbar cell type dropdown wrapper.\n */\nconst TOOLBAR_CELLTYPE_CLASS = 'jp-Notebook-toolbarCellType';\n\n/**\n * The class name added to toolbar cell type dropdown.\n */\nconst TOOLBAR_CELLTYPE_DROPDOWN_CLASS = 'jp-Notebook-toolbarCellTypeDropdown';\n\n/**\n * A namespace for the default toolbar items.\n */\nexport namespace ToolbarItems {\n /**\n * Create save button toolbar item.\n */\n export function createSaveButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n iconClassName: TOOLBAR_SAVE_CLASS + ' foo jp-Icon jp-Icon-16',\n onClick: () => {\n if (panel.context.model.readOnly) {\n return showDialog({\n title: 'Cannot Save',\n body: 'Document is read-only',\n buttons: [Dialog.okButton()]\n });\n }\n panel.context.save().then(() => {\n if (!panel.isDisposed) {\n return panel.context.createCheckpoint();\n }\n });\n },\n tooltip: 'Save the notebook contents and create checkpoint'\n });\n }\n\n /**\n * Create an insert toolbar item.\n */\n export function createInsertButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n iconClassName: TOOLBAR_INSERT_CLASS + ' jp-Icon jp-Icon-16',\n onClick: () => {\n NotebookActions.insertBelow(panel.content);\n },\n tooltip: 'Insert a cell below'\n });\n }\n\n /**\n * Create a cut toolbar item.\n */\n export function createCutButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n iconClassName: TOOLBAR_CUT_CLASS + ' jp-Icon jp-Icon-16',\n onClick: () => {\n NotebookActions.cut(panel.content);\n },\n tooltip: 'Cut the selected cells'\n });\n }\n\n /**\n * Create a copy toolbar item.\n */\n export function createCopyButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n iconClassName: TOOLBAR_COPY_CLASS + ' jp-Icon jp-Icon-16',\n onClick: () => {\n NotebookActions.copy(panel.content);\n },\n tooltip: 'Copy the selected cells'\n });\n }\n\n /**\n * Create a paste toolbar item.\n */\n export function createPasteButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n iconClassName: TOOLBAR_PASTE_CLASS + ' jp-Icon jp-Icon-16',\n onClick: () => {\n NotebookActions.paste(panel.content);\n },\n tooltip: 'Paste cells from the clipboard'\n });\n }\n\n /**\n * Create a run toolbar item.\n */\n export function createRunButton(panel: NotebookPanel): ToolbarButton {\n return new ToolbarButton({\n iconClassName: TOOLBAR_RUN_CLASS + ' jp-Icon jp-Icon-16',\n onClick: () => {\n NotebookActions.runAndAdvance(panel.content, panel.session);\n },\n tooltip: 'Run the selected cells and advance'\n });\n }\n\n /**\n * Create a cell type switcher item.\n *\n * #### Notes\n * It will display the type of the current active cell.\n * If more than one cell is selected but are of different types,\n * it will display `'-'`.\n * When the user changes the cell type, it will change the\n * cell types of the selected cells.\n * It can handle a change to the context.\n */\n export function createCellTypeItem(panel: NotebookPanel): Widget {\n return new CellTypeSwitcher(panel.content);\n }\n\n /**\n * Add the default items to the panel toolbar.\n */\n export function populateDefaults(panel: NotebookPanel): void {\n let toolbar = panel.toolbar;\n toolbar.addItem('save', createSaveButton(panel));\n toolbar.addItem('insert', createInsertButton(panel));\n toolbar.addItem('cut', createCutButton(panel));\n toolbar.addItem('copy', createCopyButton(panel));\n toolbar.addItem('paste', createPasteButton(panel));\n toolbar.addItem('run', createRunButton(panel));\n toolbar.addItem('interrupt', Toolbar.createInterruptButton(panel.session));\n toolbar.addItem('restart', Toolbar.createRestartButton(panel.session));\n toolbar.addItem('cellType', createCellTypeItem(panel));\n toolbar.addItem('spacer', Toolbar.createSpacerItem());\n toolbar.addItem('kernelName', Toolbar.createKernelNameItem(panel.session));\n toolbar.addItem(\n 'kernelStatus',\n Toolbar.createKernelStatusItem(panel.session)\n );\n }\n}\n\n/**\n * A toolbar widget that switches cell types.\n */\nclass CellTypeSwitcher extends Widget {\n /**\n * Construct a new cell type switcher.\n */\n constructor(widget: Notebook) {\n super({ node: createCellTypeSwitcherNode() });\n this.addClass(TOOLBAR_CELLTYPE_CLASS);\n\n this._select = this.node.firstChild as HTMLSelectElement;\n Styling.wrapSelect(this._select);\n this._wildCard = document.createElement('option');\n this._wildCard.value = '-';\n this._wildCard.textContent = '-';\n this._notebook = widget;\n\n // Set the initial value.\n if (widget.model) {\n this._updateValue();\n }\n\n // Follow the type of the active cell.\n widget.activeCellChanged.connect(this._updateValue, this);\n\n // Follow a change in the selection.\n widget.selectionChanged.connect(this._updateValue, this);\n }\n\n /**\n * Handle the DOM events for the widget.\n *\n * @param event - The DOM event sent to the widget.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the dock panel's node. It should\n * not be called directly by user code.\n */\n handleEvent(event: Event): void {\n switch (event.type) {\n case 'change':\n this._evtChange(event);\n break;\n case 'keydown':\n this._evtKeyDown(event as KeyboardEvent);\n break;\n default:\n break;\n }\n }\n\n /**\n * Handle `after-attach` messages for the widget.\n */\n protected onAfterAttach(msg: Message): void {\n this._select.addEventListener('change', this);\n this._select.addEventListener('keydown', this);\n }\n\n /**\n * Handle `before-detach` messages for the widget.\n */\n protected onBeforeDetach(msg: Message): void {\n this._select.removeEventListener('change', this);\n this._select.removeEventListener('keydown', this);\n }\n\n /**\n * Handle `changed` events for the widget.\n */\n private _evtChange(event: Event): void {\n let select = this._select;\n let widget = this._notebook;\n if (select.value === '-') {\n return;\n }\n if (!this._changeGuard) {\n let value = select.value as nbformat.CellType;\n NotebookActions.changeCellType(widget, value);\n widget.activate();\n }\n }\n\n /**\n * Handle `keydown` events for the widget.\n */\n private _evtKeyDown(event: KeyboardEvent): void {\n if (event.keyCode === 13) {\n // Enter\n this._notebook.activate();\n }\n }\n\n /**\n * Update the value of the dropdown from the widget state.\n */\n private _updateValue(): void {\n let widget = this._notebook;\n let select = this._select;\n if (!widget.activeCell) {\n return;\n }\n let mType: string = widget.activeCell.model.type;\n for (let i = 0; i < widget.widgets.length; i++) {\n let child = widget.widgets[i];\n if (widget.isSelectedOrActive(child)) {\n if (child.model.type !== mType) {\n mType = '-';\n select.appendChild(this._wildCard);\n break;\n }\n }\n }\n if (mType !== '-') {\n select.remove(3);\n }\n this._changeGuard = true;\n select.value = mType;\n this._changeGuard = false;\n }\n\n private _changeGuard = false;\n private _wildCard: HTMLOptionElement = null;\n private _select: HTMLSelectElement = null;\n private _notebook: Notebook = null;\n}\n\n/**\n * Create the node for the cell type switcher.\n */\nfunction createCellTypeSwitcherNode(): HTMLElement {\n let div = document.createElement('div');\n let select = document.createElement('select');\n for (let t of ['Code', 'Markdown', 'Raw']) {\n let option = document.createElement('option');\n option.value = t.toLowerCase();\n option.textContent = t;\n select.appendChild(option);\n }\n select.className = TOOLBAR_CELLTYPE_DROPDOWN_CLASS;\n div.appendChild(select);\n return div;\n}\n"]}
|
package/lib/model.d.ts
CHANGED
|
@@ -26,6 +26,10 @@ export interface INotebookModel extends DocumentRegistry.IModel {
|
|
|
26
26
|
* The metadata associated with the notebook.
|
|
27
27
|
*/
|
|
28
28
|
readonly metadata: IObservableJSON;
|
|
29
|
+
/**
|
|
30
|
+
* The array of deleted cells since the notebook was last run.
|
|
31
|
+
*/
|
|
32
|
+
readonly deletedCells: string[];
|
|
29
33
|
}
|
|
30
34
|
/**
|
|
31
35
|
* An implementation of a notebook Model.
|
|
@@ -59,6 +63,10 @@ export declare class NotebookModel extends DocumentModel implements INotebookMod
|
|
|
59
63
|
* The default kernel name of the document.
|
|
60
64
|
*/
|
|
61
65
|
readonly defaultKernelName: string;
|
|
66
|
+
/**
|
|
67
|
+
* The default kernel name of the document.
|
|
68
|
+
*/
|
|
69
|
+
readonly deletedCells: string[];
|
|
62
70
|
/**
|
|
63
71
|
* The default kernel language of the document.
|
|
64
72
|
*/
|
|
@@ -104,6 +112,7 @@ export declare class NotebookModel extends DocumentModel implements INotebookMod
|
|
|
104
112
|
private _cells;
|
|
105
113
|
private _nbformat;
|
|
106
114
|
private _nbformatMinor;
|
|
115
|
+
private _deletedCells;
|
|
107
116
|
}
|
|
108
117
|
/**
|
|
109
118
|
* The namespace for the `NotebookModel` class statics.
|
package/lib/model.js
CHANGED
|
@@ -34,6 +34,7 @@ class NotebookModel extends docregistry_1.DocumentModel {
|
|
|
34
34
|
}
|
|
35
35
|
this._ensureMetadata();
|
|
36
36
|
metadata.changed.connect(this.triggerContentChange, this);
|
|
37
|
+
this._deletedCells = [];
|
|
37
38
|
}
|
|
38
39
|
/**
|
|
39
40
|
* The metadata associated with the notebook.
|
|
@@ -66,6 +67,12 @@ class NotebookModel extends docregistry_1.DocumentModel {
|
|
|
66
67
|
let spec = this.metadata.get('kernelspec');
|
|
67
68
|
return spec ? spec.name : '';
|
|
68
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* The default kernel name of the document.
|
|
72
|
+
*/
|
|
73
|
+
get deletedCells() {
|
|
74
|
+
return this._deletedCells;
|
|
75
|
+
}
|
|
69
76
|
/**
|
|
70
77
|
* The default kernel language of the document.
|
|
71
78
|
*/
|