@perspective-dev/viewer-datagrid 4.0.0 → 4.0.1

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/js/index.js", "../../src/js/model/index.js", "../../src/js/style_handlers/column_header.js", "../../src/js/style_handlers/group_header.js", "../../src/js/style_handlers/table_cell/cell_flash.js", "../../src/js/color_utils.js", "../../src/js/style_handlers/table_cell/numeric.js", "../../src/js/style_handlers/table_cell/string.js", "../../src/js/style_handlers/table_cell/datetime.js", "../../src/js/style_handlers/table_cell/boolean.js", "../../src/js/style_handlers/table_cell/row_header.js", "../../src/js/style_handlers/table_cell/index.js", "../../src/js/event_handlers/sort.js", "../../src/js/event_handlers/expand_collapse.js", "../../src/js/event_handlers/header_click.js", "../../src/js/style_handlers/editable.js", "../../src/js/style_handlers/focus.js", "../../src/js/event_handlers/click/edit_click.js", "../../src/js/event_handlers/keydown/edit_keydown.js", "../../src/js/event_handlers/click.js", "../../src/js/event_handlers/focus.js", "../../src/js/get_cell_config.js", "../../src/js/event_handlers/row_select_click.js", "../../src/js/style_handlers/selection.js", "../../src/js/event_handlers/deselect_all.js", "../../src/js/model/create.js", "../../src/js/data_listener/formatter_cache.js", "../../src/js/data_listener/format_cell.js", "../../src/js/data_listener/format_tree_header.js", "../../src/js/data_listener/index.js", "../../src/js/event_handlers/dispatch_click.js", "../../src/js/event_handlers/select_region.js", "../../src/js/plugin/activate.js", "../../src/js/model/column_overrides.js", "../../src/js/model/toolbar.js", "../../src/js/plugin/restore.js", "../../src/js/plugin/save.js", "../../src/js/plugin/draw.js", "../../src/js/plugin/column_style_controls.js", "../css/perspective-viewer-datagrid.css", "../../src/js/custom_elements/datagrid.js", "../css/perspective-viewer-datagrid-toolbar.css", "../../src/js/custom_elements/toolbar.js"],
4
- "sourcesContent": ["// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport \"regular-table\";\n\nimport { HTMLPerspectiveViewerDatagridPluginElement } from \"./custom_elements/datagrid.js\";\nimport { HTMLPerspectiveViewerDatagridToolbarElement } from \"./custom_elements/toolbar.js\";\n\n/******************************************************************************\n *\n * Main\n *\n */\n\nasync function _register_element() {\n customElements.define(\n \"perspective-viewer-datagrid-toolbar\",\n HTMLPerspectiveViewerDatagridToolbarElement,\n );\n\n customElements.define(\n \"perspective-viewer-datagrid\",\n HTMLPerspectiveViewerDatagridPluginElement,\n );\n\n await customElements.whenDefined(\"perspective-viewer\");\n customElements\n .get(\"perspective-viewer\")\n .registerPlugin(\"perspective-viewer-datagrid\");\n}\n\n_register_element();\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport const PRIVATE_PLUGIN_SYMBOL = Symbol(\"Plugin Symbol\");\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nfunction get_psp_type(metadata) {\n if (metadata.x >= 0) {\n return this._column_types[metadata.x];\n } else {\n return this._row_header_types[metadata.row_header_x - 1];\n }\n}\n\nexport function style_selected_column(regularTable, viewer, selectedColumn) {\n const group_header_trs = Array.from(\n regularTable.children[0].children[0].children,\n );\n\n const len = group_header_trs.length;\n const settings_open = viewer.hasAttribute(\"settings\");\n if (len <= 1) {\n group_header_trs[0]?.removeAttribute(\"id\");\n } else {\n group_header_trs.forEach((tr, i) => {\n const offset = settings_open ? 1 : 0;\n let id =\n i === len - (offset + 1)\n ? \"psp-column-titles\"\n : i === len - offset\n ? \"psp-column-edit-buttons\"\n : null;\n id ? tr.setAttribute(\"id\", id) : tr.removeAttribute(\"id\");\n });\n }\n\n viewer.classList.toggle(\"psp-menu-open\", !!selectedColumn);\n if (settings_open && len >= 2) {\n // if settings_open, you will never have less than 2 trs unless the\n // table is empty, but possibly more e.g. with group-by.\n // edit and title are guaranteed to be the last two rows\n let titles = Array.from(group_header_trs[len - 2].children);\n let editBtns = Array.from(group_header_trs[len - 1].children);\n if (titles && editBtns) {\n // clear any sticky styles from tr changes\n group_header_trs.slice(0, len - 2).forEach((tr) => {\n Array.from(tr.children).forEach((th) => {\n th.classList.toggle(\"psp-menu-open\", false);\n });\n });\n\n for (let i = 0; i < titles.length; i++) {\n const title = titles[i];\n const editBtn = editBtns[i];\n\n let open = title.textContent === selectedColumn;\n title.classList.toggle(\"psp-menu-open\", open);\n editBtn.classList.toggle(\"psp-menu-open\", open);\n if (this._config.columns.length > 1) {\n for (const r of regularTable.querySelectorAll(\"td\")) {\n const meta = regularTable.getMeta(r);\n const open =\n meta.column_header[\n meta.column_header.length - 2\n ] === selectedColumn;\n r.classList.toggle(\"psp-menu-open\", open);\n }\n }\n }\n }\n }\n}\n\nexport function column_header_style_listener(regularTable, viewer) {\n let group_header_trs = Array.from(\n regularTable.children[0].children[0].children,\n );\n\n if (group_header_trs.length > 0) {\n style_selected_column.call(\n this,\n regularTable,\n viewer,\n this._column_settings_selected_column,\n );\n\n let [col_headers] = group_header_trs.splice(\n this._config.split_by.length,\n 1,\n );\n\n if (col_headers) {\n style_column_header_row.call(\n this,\n regularTable,\n col_headers,\n false,\n );\n }\n\n let [style_menu_headers] = group_header_trs.splice(\n this._config.split_by.length,\n 1,\n );\n\n if (style_menu_headers) {\n style_column_header_row.call(\n this,\n regularTable,\n style_menu_headers,\n true,\n );\n }\n }\n}\n\nfunction style_column_header_row(regularTable, col_headers, is_menu_row) {\n // regular header styling\n const header_depth = regularTable._view_cache.config.row_pivots.length - 1;\n for (const td of col_headers.children) {\n const metadata = regularTable.getMeta(td);\n const column_name =\n metadata.column_header?.[this._config.split_by.length];\n const sort = this._config.sort.find((x) => x[0] === column_name);\n let needs_border = metadata.row_header_x === header_depth;\n const is_corner = typeof metadata.x === \"undefined\";\n needs_border =\n needs_border ||\n (metadata.x + 1) % this._config.columns.length === 0;\n td.classList.toggle(\"psp-header-border\", needs_border);\n td.classList.toggle(\"psp-header-group\", false);\n td.classList.toggle(\"psp-header-leaf\", true);\n td.classList.toggle(\"psp-is-top\", false);\n td.classList.toggle(\"psp-header-corner\", is_corner);\n td.classList.toggle(\n \"psp-header-sort-asc\",\n !is_menu_row && !!sort && sort[1] === \"asc\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-desc\",\n !is_menu_row && !!sort && sort[1] === \"desc\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-col-asc\",\n !is_menu_row && !!sort && sort[1] === \"col asc\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-col-desc\",\n !is_menu_row && !!sort && sort[1] === \"col desc\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-abs-asc\",\n !is_menu_row && !!sort && sort[1] === \"asc abs\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-abs-desc\",\n !is_menu_row && !!sort && sort[1] === \"desc abs\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-abs-col-asc\",\n !is_menu_row && !!sort && sort[1] === \"col asc abs\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-abs-col-desc\",\n !is_menu_row && !!sort && sort[1] === \"col desc abs\",\n );\n\n let type = get_psp_type.call(this, metadata);\n const is_numeric = type === \"integer\" || type === \"float\";\n const is_string = type === \"string\";\n const is_date = type === \"date\";\n const is_datetime = type === \"datetime\";\n td.classList.toggle(\"psp-align-right\", is_numeric);\n td.classList.toggle(\"psp-align-left\", !is_numeric);\n\n td.classList.toggle(\n \"psp-menu-enabled\",\n (is_string || is_numeric || is_date || is_datetime) &&\n !is_corner &&\n metadata.column_header_y == this._config.split_by.length + 1,\n );\n\n td.classList.toggle(\n \"psp-sort-enabled\",\n (is_string || is_numeric || is_date || is_datetime) &&\n !is_corner &&\n metadata.column_header_y === this._config.split_by.length,\n );\n\n td.classList.toggle(\n \"psp-is-width-override\",\n regularTable._column_sizes?.override[metadata.size_key] !==\n undefined,\n );\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function group_header_style_listener(regularTable) {\n const header_depth = regularTable._view_cache.config.row_pivots.length - 1;\n let group_header_trs = Array.from(\n regularTable.children[0].children[0].children,\n );\n\n const m = [];\n let marked = new Set();\n const table = regularTable.children[0];\n for (let y = 0; y < group_header_trs.length; y++) {\n let row = table.rows[y];\n const tops = new Set();\n for (let x = 0; x < row.cells.length; x++) {\n const td = row.cells[x];\n td.style.backgroundColor = \"\";\n const metadata = regularTable.getMeta(td);\n let needs_border =\n (header_depth > 0 && metadata.row_header_x === header_depth) ||\n metadata.x >= 0;\n\n td.classList.toggle(\"psp-align-right\", false);\n td.classList.toggle(\"psp-align-left\", false);\n td.classList.toggle(\"psp-header-group\", true);\n td.classList.toggle(\"psp-header-leaf\", false);\n td.classList.toggle(\"psp-header-border\", needs_border);\n td.classList.toggle(\n \"psp-header-group-corner\",\n typeof metadata.x === \"undefined\",\n );\n\n td.classList.toggle(\"psp-color-mode-bar\", false);\n td.classList.toggle(\"psp-header-sort-asc\", false);\n td.classList.toggle(\"psp-header-sort-desc\", false);\n td.classList.toggle(\"psp-header-sort-col-asc\", false);\n td.classList.toggle(\"psp-header-sort-col-desc\", false);\n td.classList.toggle(\"psp-sort-enabled\", false);\n\n let cell = row.cells[x],\n xx = x,\n tx,\n ty;\n\n for (; m[y] && m[y][xx]; ++xx);\n tops.add(xx);\n for (tx = xx; tx < xx + cell.colSpan; ++tx) {\n for (ty = y; ty < y + cell.rowSpan; ++ty) {\n if (!m[ty]) m[ty] = [];\n m[ty][tx] = true;\n }\n }\n\n cell.classList.toggle(\"psp-is-top\", y === 0 || !marked.has(tx));\n }\n marked = tops;\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function style_cell_flash(\n metadata,\n td,\n [, , , , , pos_s, pos_e],\n [, , , , , neg_s, neg_e],\n is_settings_open,\n) {\n const id = this._ids?.[metadata.dy]?.join(\"|\");\n const metadata_path = (\n is_settings_open\n ? metadata.column_header.slice(0, -1)\n : metadata.column_header\n ).join(\"|\");\n\n if (\n this.last_reverse_columns?.has(metadata_path) &&\n this.last_reverse_ids?.has(id)\n ) {\n const row_idx = this.last_reverse_ids?.get(id);\n const col_idx = this.last_reverse_columns.get(metadata_path);\n if (!this._is_old_viewport) {\n td.style.animation = \"\";\n } else if (this.last_meta?.[col_idx]?.[row_idx] > metadata.user) {\n td.style.setProperty(\"--pulse--background-color-start\", neg_s);\n td.style.setProperty(\"--pulse--background-color-end\", neg_e);\n if (td.style.animationName === \"pulse_neg\") {\n td.style.animation = \"pulse_neg2 0.5s linear\";\n } else {\n td.style.animation = \"pulse_neg 0.5s linear\";\n }\n } else if (this.last_meta?.[col_idx]?.[row_idx] < metadata.user) {\n td.style.setProperty(\"--pulse--background-color-start\", pos_s);\n td.style.setProperty(\"--pulse--background-color-end\", pos_e);\n if (td.style.animationName === \"pulse_pos\") {\n td.style.animation = \"pulse_pos2 0.5s linear\";\n } else {\n td.style.animation = \"pulse_pos 0.5s linear\";\n }\n } else if (row_idx !== metadata.dy) {\n td.style.animation = \"\";\n }\n } else {\n td.style.animation = \"\";\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport chroma from \"chroma-js\";\n\nexport function blend(a, b) {\n return chroma.mix(a, `rgb(${b[0]},${b[1]},${b[2]})`, 0.5).hex();\n}\n\n// AFAICT `chroma-js` has no alpha-aware blending? So we need a function to get\n// the color of a heatmap cell over the background.\nexport function rgbaToRgb([r, g, b, a], source = [255, 255, 255]) {\n function f(i, c) {\n return ((1 - a) * (source[i] / 255) + a * (c / 255)) * 255;\n }\n\n return [f(0, r), f(1, g), f(2, b)];\n}\n\n// Chroma does this but why bother?\nexport function infer_foreground_from_background([r, g, b]) {\n // TODO Implement dark/light themes.\n return Math.sqrt(r * r * 0.299 + g * g * 0.587 + b * b * 0.114) > 130\n ? \"#161616\"\n : \"#ffffff\";\n}\n\nfunction make_gradient(chromahex) {\n const [r, g, b] = chromahex.rgb();\n const [r1, g1, b1] = chromahex\n .set(\"hsl.h\", (chromahex.get(\"hsl.h\") - 15) % 360)\n .rgb();\n const [r2, g2, b2] = chromahex\n .set(\"hsl.h\", (chromahex.get(\"hsl.h\") + 15) % 360)\n .rgb();\n return `linear-gradient(to right top,rgb(${r1},${g1},${b1}),rgb(${r},${g},${b}) 50%,rgb(${r2},${g2},${b2}))`;\n}\n\nexport function make_color_record(color) {\n const chroma_neg = chroma(color);\n const _neg_grad = make_gradient(chroma_neg);\n const rgb = chroma_neg.rgb();\n\n return [\n color,\n ...rgb,\n _neg_grad,\n `rgba(${rgb[0]},${rgb[1]},${rgb[2]},1)`,\n `rgba(${rgb[0]},${rgb[1]},${rgb[2]},0)`,\n ];\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { style_cell_flash } from \"./cell_flash.js\";\nimport {\n rgbaToRgb,\n infer_foreground_from_background,\n} from \"../../color_utils.js\";\n\nexport function cell_style_numeric(plugin, td, metadata, is_settings_open) {\n const is_positive = metadata.user > 0;\n const is_negative = metadata.user < 0;\n\n let pos_bg_color;\n if (plugin?.pos_bg_color !== undefined) {\n pos_bg_color = plugin.pos_bg_color;\n } else {\n pos_bg_color = this._pos_bg_color;\n }\n\n let neg_bg_color;\n if (plugin?.neg_bg_color !== undefined) {\n neg_bg_color = plugin.neg_bg_color;\n } else {\n neg_bg_color = this._neg_bg_color;\n }\n\n const bg_tuple = is_positive\n ? pos_bg_color\n : is_negative\n ? neg_bg_color\n : [\"\", ...this._plugin_background, \"\"];\n\n {\n const [hex, r, g, b, _gradhex] = bg_tuple;\n\n td.style.position = \"\";\n if (metadata._is_hidden_by_aggregate_depth) {\n td.style.animation = \"\";\n td.style.backgroundColor = \"\";\n } else if (plugin?.number_bg_mode === \"color\") {\n td.style.animation = \"\";\n td.style.backgroundColor = hex;\n } else if (plugin?.number_bg_mode === \"gradient\") {\n const a = Math.max(\n 0,\n Math.min(1, Math.abs(metadata.user / plugin.bg_gradient)),\n );\n const source = this._plugin_background;\n const foreground = infer_foreground_from_background(\n rgbaToRgb([r, g, b, a], source),\n );\n\n td.style.animation = \"\";\n td.style.color = foreground;\n td.style.backgroundColor = `rgba(${r},${g},${b},${a})`;\n } else if (plugin?.number_bg_mode === \"pulse\") {\n // TODO!\n style_cell_flash.call(\n this,\n metadata,\n td,\n pos_bg_color,\n neg_bg_color,\n is_settings_open,\n );\n td.style.backgroundColor = \"\";\n } else if (\n plugin?.number_bg_mode === \"disabled\" ||\n !plugin?.number_bg_mode\n ) {\n td.style.animation = \"\";\n td.style.backgroundColor = \"\";\n } else {\n td.style.animation = \"\";\n td.style.backgroundColor = \"\";\n }\n }\n\n const [hex, r, g, b, gradhex] = (() => {\n if (plugin?.pos_fg_color !== undefined) {\n return is_positive\n ? plugin.pos_fg_color\n : is_negative\n ? plugin.neg_fg_color\n : [\"\", ...this._plugin_background, \"\"];\n } else {\n return is_positive\n ? this._pos_fg_color\n : is_negative\n ? this._neg_fg_color\n : [\"\", ...this._plugin_background, \"\"];\n }\n })();\n\n if (metadata._is_hidden_by_aggregate_depth) {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n } else if (plugin?.number_fg_mode === \"disabled\") {\n if (plugin?.number_bg_mode === \"color\") {\n const source = this._plugin_background;\n const foreground = infer_foreground_from_background(\n rgbaToRgb([bg_tuple[1], bg_tuple[2], bg_tuple[3], 1], source),\n );\n td.style.color = foreground;\n } else if (plugin?.number_bg_mode === \"gradient\") {\n } else {\n td.style.color = \"\";\n }\n } else if (plugin?.number_fg_mode === \"bar\") {\n td.style.color = \"\";\n td.style.position = \"relative\";\n if (\n gradhex !== \"\" &&\n td.children.length > 0 &&\n td.children[0].nodeType === Node.ELEMENT_NODE\n ) {\n td.children[0].style.background = gradhex;\n }\n } else if (plugin?.number_fg_mode === \"color\" || !plugin?.number_fg_mode) {\n td.style.color = hex;\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport chroma from \"chroma-js\";\nimport {\n rgbaToRgb,\n infer_foreground_from_background,\n} from \"../../color_utils.js\";\n\nexport function cell_style_string(plugin, td, metadata) {\n const column_name = metadata.column_header?.[this._config.split_by.length];\n const [hex, r, g, b, gradhex] = (() => {\n if (plugin?.color !== undefined) {\n return plugin.color;\n } else {\n return this._color;\n }\n })();\n\n if (metadata._is_hidden_by_aggregate_depth) {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n } else if (\n plugin?.string_color_mode === \"foreground\" &&\n metadata.user !== null\n ) {\n td.style.color = hex;\n td.style.backgroundColor = \"\";\n if (plugin?.format === \"link\") {\n td.children[0].style.color = hex;\n }\n } else if (\n plugin?.string_color_mode === \"background\" &&\n metadata.user !== null\n ) {\n const source = this._plugin_background;\n const foreground = infer_foreground_from_background(\n rgbaToRgb([r, g, b, 1], source),\n );\n td.style.color = foreground;\n td.style.backgroundColor = hex;\n } else if (\n plugin?.string_color_mode === \"series\" &&\n metadata.user !== null\n ) {\n if (!this._series_color_map.has(column_name)) {\n this._series_color_map.set(column_name, new Map());\n this._series_color_seed.set(column_name, 0);\n }\n\n const series_map = this._series_color_map.get(column_name);\n if (!series_map.has(metadata.user)) {\n const seed = this._series_color_seed.get(column_name);\n series_map.set(metadata.user, seed);\n this._series_color_seed.set(column_name, seed + 1);\n }\n\n const color_seed = series_map.get(metadata.user);\n let [h, s, l] = chroma(hex).hsl();\n h = h + ((color_seed * 150) % 360);\n const color2 = chroma(h, s, l, \"hsl\");\n const [r, g, b] = color2.rgb();\n const hex2 = color2.hex();\n const source = this._plugin_background;\n const foreground = infer_foreground_from_background(\n rgbaToRgb([r, g, b, 1], source),\n );\n td.style.color = foreground;\n td.style.backgroundColor = hex2;\n } else {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport chroma from \"chroma-js\";\nimport {\n rgbaToRgb,\n infer_foreground_from_background,\n} from \"../../color_utils.js\";\n\nexport function cell_style_datetime(plugin, td, metadata) {\n const column_name = metadata.column_header?.[this._config.split_by.length];\n\n const [hex, r, g, b, gradhex] = (() => {\n if (plugin?.color !== undefined) {\n return plugin.color;\n } else {\n return this._color;\n }\n })();\n\n if (metadata._is_hidden_by_aggregate_depth) {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n } else if (\n plugin?.datetime_color_mode === \"foreground\" &&\n metadata.user !== null\n ) {\n td.style.color = hex;\n td.style.backgroundColor = \"\";\n } else if (\n plugin?.datetime_color_mode === \"background\" &&\n metadata.user !== null\n ) {\n const source = this._plugin_background;\n const foreground = infer_foreground_from_background(\n rgbaToRgb([r, g, b, 1], source),\n );\n td.style.color = foreground;\n td.style.backgroundColor = hex;\n } else {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function cell_style_boolean(plugin, td, metadata) {\n if (metadata._is_hidden_by_aggregate_depth) {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n } else {\n const [hex] =\n metadata.user === true\n ? this._pos_fg_color\n : metadata.user === false\n ? this._neg_fg_color\n : [\"\", 0, 0, 0, \"\"];\n td.style.backgroundColor = \"\";\n td.style.color = hex;\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function cell_style_row_header(regularTable, td, metadata) {\n const is_not_empty =\n typeof metadata.value != undefined &&\n typeof metadata.value != null &&\n metadata.value?.toString()?.trim().length > 0;\n const is_leaf = metadata.row_header_x >= this._config.group_by.length;\n const next = regularTable.getMeta({\n dx: 0,\n dy: metadata.y - metadata.y0 + 1,\n });\n const is_collapse =\n next &&\n next.row_header &&\n typeof next.row_header[metadata.row_header_x + 1] !== \"undefined\";\n td.classList.toggle(\"psp-tree-label\", is_not_empty && !is_leaf);\n td.classList.toggle(\n \"psp-tree-label-expand\",\n is_not_empty && !is_leaf && !is_collapse,\n );\n td.classList.toggle(\n \"psp-tree-label-collapse\",\n is_not_empty && !is_leaf && is_collapse,\n );\n td.classList.toggle(\"psp-tree-leaf\", is_not_empty && is_leaf);\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../../model\";\n\nimport { cell_style_numeric } from \"./numeric.js\";\nimport { cell_style_string } from \"./string.js\";\nimport { cell_style_datetime } from \"./datetime.js\";\nimport { cell_style_boolean } from \"./boolean.js\";\nimport { cell_style_row_header } from \"./row_header.js\";\n\nfunction get_psp_type(metadata) {\n if (metadata.x >= 0) {\n return this._column_types[metadata.x];\n } else {\n return this._row_header_types[metadata.row_header_x - 1];\n }\n}\n\nexport function table_cell_style_listener(regularTable, viewer) {\n const plugins = regularTable[PRIVATE_PLUGIN_SYMBOL] || {};\n const is_settings_open = viewer.hasAttribute(\"settings\");\n\n for (const tr of regularTable.children[0].children[1].children) {\n for (const td of tr.children) {\n const metadata = regularTable.getMeta(td);\n\n const column_name =\n metadata.column_header?.[this._config.split_by.length];\n\n let type = get_psp_type.call(this, metadata);\n const plugin = plugins[column_name];\n const is_numeric = type === \"integer\" || type === \"float\";\n\n // Check if aggregate depth hides this cell\n metadata._is_hidden_by_aggregate_depth = ((x) =>\n x === 0\n ? false\n : x - 1 <\n Math.min(\n this._config.group_by.length,\n plugin?.aggregate_depth,\n ))(\n metadata.row_header?.filter((x) => x !== undefined)?.length,\n );\n\n if (is_numeric) {\n cell_style_numeric.call(\n this,\n plugin,\n td,\n metadata,\n is_settings_open,\n );\n } else if (type === \"boolean\") {\n cell_style_boolean.call(this, plugin, td, metadata);\n } else if (type === \"string\") {\n cell_style_string.call(this, plugin, td, metadata);\n } else if (type === \"date\" || type === \"datetime\") {\n cell_style_datetime.call(this, plugin, td, metadata);\n } else {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n }\n\n td.classList.toggle(\n \"psp-bool-type\",\n type === \"boolean\" && metadata.user !== null,\n );\n\n const is_th = td.tagName === \"TH\";\n if (is_th) {\n cell_style_row_header.call(this, regularTable, td, metadata);\n }\n\n tr.dataset.y = metadata.y;\n if (\n metadata.row_header_x === undefined ||\n metadata.row_header_x === metadata.row_header.length - 1 ||\n metadata.row_header[metadata.row_header_x + 1] === undefined\n ) {\n td.dataset.y = metadata.y;\n td.dataset.x = metadata.x;\n } else {\n delete td.dataset.y;\n delete td.dataset.x;\n }\n\n td.classList.toggle(\"psp-null\", metadata.value === null);\n td.classList.toggle(\"psp-align-right\", !is_th && is_numeric);\n td.classList.toggle(\"psp-align-left\", is_th || !is_numeric);\n td.classList.toggle(\n \"psp-color-mode-bar\",\n plugin?.number_fg_mode === \"bar\" && is_numeric,\n );\n }\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport async function sortHandler(regularTable, viewer, event, target) {\n const meta = regularTable.getMeta(target);\n const column_name = meta.column_header[this._config.split_by.length];\n const sort_method =\n event.ctrlKey || event.metaKet || event.altKey\n ? append_sort\n : override_sort;\n\n const abs = event.shiftKey;\n const sort = sort_method.call(this, column_name, abs);\n await viewer.restore({ sort });\n}\n\nexport function append_sort(column_name, abs) {\n const sort = [];\n let found = false;\n for (const sort_term of this._config.sort) {\n const [_column_name, _sort_dir] = sort_term;\n if (_column_name === column_name) {\n found = true;\n const term = create_sort.call(this, column_name, _sort_dir, abs);\n if (term) {\n sort.push(term);\n }\n } else {\n sort.push(sort_term);\n }\n }\n if (!found) {\n sort.push([column_name, abs ? \"desc abs\" : \"desc\"]);\n }\n return sort;\n}\n\nexport function override_sort(column_name, abs) {\n for (const [_column_name, _sort_dir] of this._config.sort) {\n if (_column_name === column_name) {\n const sort = create_sort.call(this, column_name, _sort_dir, abs);\n return sort ? [sort] : [];\n }\n }\n return [[column_name, abs ? \"desc abs\" : \"desc\"]];\n}\n\nexport function create_sort(column_name, sort_dir, abs) {\n const is_col_sortable = this._config.split_by.length > 0;\n const order = is_col_sortable ? ROW_COL_SORT_ORDER : ROW_SORT_ORDER;\n let inc_sort_dir = sort_dir ? order[sort_dir] : \"desc\";\n if (inc_sort_dir) {\n return [column_name, inc_sort_dir];\n }\n}\n\nconst ROW_SORT_ORDER = {\n desc: \"asc\",\n asc: undefined,\n \"desc abs\": \"asc abs\",\n \"asc abs\": undefined,\n};\nconst ROW_COL_SORT_ORDER = {\n desc: \"asc\",\n asc: \"col desc\",\n \"desc abs\": \"asc abs\",\n \"asc abs\": \"col desc abs\",\n \"col desc\": \"col asc\",\n \"col asc\": undefined,\n \"col desc abs\": \"col asc abs\",\n \"col asc abs\": undefined,\n};\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport async function expandCollapseHandler(regularTable, event) {\n const meta = regularTable.getMeta(event.target);\n const is_collapse = event.target.classList.contains(\n \"psp-tree-label-collapse\",\n );\n if (event.shiftKey && is_collapse) {\n this._view.set_depth(\n meta.row_header.filter((x) => x !== undefined).length - 2,\n );\n } else if (event.shiftKey) {\n this._view.set_depth(\n meta.row_header.filter((x) => x !== undefined).length - 1,\n );\n } else if (is_collapse) {\n this._view.collapse(meta.y);\n } else {\n this._view.expand(meta.y);\n }\n this._num_rows = await this._view.num_rows();\n this._num_columns = await this._view.num_columns();\n regularTable.draw();\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { sortHandler } from \"./sort.js\";\nimport { expandCollapseHandler } from \"./expand_collapse.js\";\n\nexport async function mousedown_listener(regularTable, viewer, event) {\n if (event.which !== 1) {\n return;\n }\n\n let target = event.target;\n if (target.tagName === \"A\") {\n return;\n }\n\n while (target.tagName !== \"TD\" && target.tagName !== \"TH\") {\n target = target.parentElement;\n if (!regularTable.contains(target)) {\n return;\n }\n }\n\n if (target.classList.contains(\"psp-tree-label\")) {\n expandCollapseHandler.call(this, regularTable, event);\n return;\n }\n\n if (target.classList.contains(\"psp-menu-enabled\")) {\n const meta = regularTable.getMeta(target);\n const column_name = meta.column_header?.[this._config.split_by.length];\n await viewer.toggleColumnSettings(column_name);\n } else if (target.classList.contains(\"psp-sort-enabled\")) {\n sortHandler.call(this, regularTable, viewer, event, target);\n }\n}\n\n// TODO I hav eno idea what this does ...\n\nexport function click_listener(regularTable, event) {\n if (event.which !== 1) {\n return;\n }\n\n let target = event.target;\n while (target.tagName !== \"TD\" && target.tagName !== \"TH\") {\n target = target.parentElement;\n if (!regularTable.contains(target)) {\n return;\n }\n }\n\n if (target.classList.contains(\"psp-tree-label\") && event.offsetX < 26) {\n event.stopImmediatePropagation();\n } else if (\n target.classList.contains(\"psp-header-leaf\") &&\n !target.classList.contains(\"psp-header-corner\")\n ) {\n event.stopImmediatePropagation();\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\n\nfunction isEditable(viewer, allowed = false) {\n const has_pivots =\n this._config.group_by.length === 0 &&\n this._config.split_by.length === 0;\n const selectable = viewer.hasAttribute(\"selectable\");\n const editable =\n allowed || viewer.children[0]?.dataset?.editMode === \"EDIT\";\n return has_pivots && !selectable && editable;\n}\n\nexport function editable_style_listener(table, viewer, datagrid) {\n // Independently check \"editable\" and `isEditable()`, so we can skip\n // the styler entirely if editing was disabled at the time of element\n // creation, but toggle in when e.g. pivots or selectable will\n // affect editability.\n const plugins = table[PRIVATE_PLUGIN_SYMBOL] || {};\n const edit = isEditable.call(this, viewer);\n datagrid.classList.toggle(\n \"edit-mode-allowed\",\n isEditable.call(this, viewer, true),\n );\n\n for (const td of table.querySelectorAll(\"td\")) {\n const meta = table.getMeta(td);\n const type = this.get_psp_type(meta);\n if (edit && this._is_editable[meta.x]) {\n const col_name = meta.column_header[this._config.split_by.length];\n if (type === \"string\" && plugins[col_name]?.format === \"link\") {\n td.toggleAttribute(\"contenteditable\", false);\n td.classList.toggle(\"boolean-editable\", false);\n } else if (type === \"boolean\") {\n td.toggleAttribute(\"contenteditable\", false);\n td.classList.toggle(\"boolean-editable\", meta.user !== null);\n } else {\n if (edit !== td.hasAttribute(\"contenteditable\")) {\n td.toggleAttribute(\"contenteditable\", edit);\n }\n td.classList.toggle(\"boolean-editable\", false);\n }\n } else {\n td.toggleAttribute(\"contenteditable\", false);\n td.classList.toggle(\"boolean-editable\", false);\n }\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\n// const selected_position_map = new WeakMap();\n\nexport const focus_style_listener = (table, _viewer, selected_position_map) => {\n const tds = table.querySelectorAll(\"td\");\n const selected_position = selected_position_map.get(table);\n const host = table.getRootNode();\n if (selected_position) {\n for (const td of tds) {\n const meta = table.getMeta(td);\n if (\n meta.x === selected_position.x &&\n meta.y === selected_position.y\n ) {\n if (host.activeElement !== td) {\n td.focus({ preventScroll: true });\n }\n return true;\n }\n }\n if (\n document.activeElement !== document.body &&\n table.contains(host.activeElement)\n ) {\n host.activeElement.blur();\n }\n }\n};\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function write_cell(table, model, active_cell) {\n const meta = table.getMeta(active_cell);\n const type = model._schema[model._column_paths[meta.x]];\n if (meta) {\n let text = active_cell.textContent;\n const id = model._ids[meta.y - meta.y0][0];\n if (type === \"float\" || type === \"integer\") {\n text = parseFloat(text.replace(/,/g, \"\"));\n if (isNaN(text)) {\n return false;\n }\n } else if (type === \"date\" || type === \"datetime\") {\n text = Date.parse(text);\n if (isNaN(text)) {\n return false;\n }\n } else if (type === \"boolean\") {\n text = text === \"true\" ? false : text === \"false\" ? true : null;\n }\n\n const msg = {\n __INDEX__: id,\n [model._column_paths[meta.x]]: text,\n };\n\n model._table.update([msg], { port_id: model._edit_port });\n return true;\n }\n}\n\nexport function clickListener(table, _viewer, event) {\n const meta = table.getMeta(event.target);\n if (typeof meta?.x !== \"undefined\") {\n const is_editable2 = this._is_editable[meta.x];\n const is_bool = this.get_psp_type(meta) === \"boolean\";\n const is_null = event.target.classList.contains(\"psp-null\");\n if (is_editable2 && is_bool && !is_null) {\n write_cell(table, this, event.target);\n }\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { focus_style_listener } from \"../../style_handlers/focus.js\";\n\nfunction lock(body) {\n let lock;\n return async function (...args) {\n if (!!lock && (await lock) && !!lock) {\n return;\n }\n\n let resolve;\n lock = new Promise((x) => (resolve = x));\n await body.apply(this, args);\n lock = undefined;\n resolve();\n };\n}\n\nfunction getPos() {\n if (this.isContentEditable) {\n let _range = this.getRootNode().getSelection().getRangeAt(0);\n let range = _range.cloneRange();\n range.selectNodeContents(this);\n range.setEnd(_range.endContainer, _range.endOffset);\n return range.toString().length;\n } else {\n return this.target.selectionStart;\n }\n}\n\nconst moveSelection = lock(\n async function (table, selected_position_map, active_cell, dx, dy) {\n const meta = table.getMeta(active_cell);\n const num_columns = this._column_paths.length;\n const num_rows = this._num_rows;\n const selected_position = selected_position_map.get(table);\n if (!selected_position) {\n return;\n }\n\n if (meta.x + dx < num_columns && 0 <= meta.x + dx) {\n selected_position.x = meta.x + dx;\n }\n\n if (meta.y + dy < num_rows && 0 <= meta.y + dy) {\n selected_position.y = meta.y + dy;\n }\n\n const xmin = Math.max(meta.x0 - 10, 0);\n const xmax = Math.min(meta.x0 + 10, num_columns);\n const ymin = Math.max(meta.y0 - 5, 0);\n const ymax = Math.min(meta.y0 + 10, num_rows);\n let x = meta.x0 + dx,\n y = meta.y0 + dy;\n while (\n !focus_style_listener(table, undefined, selected_position_map) &&\n x >= xmin &&\n x < xmax &&\n y >= ymin &&\n y < ymax\n ) {\n await table.scrollToCell(x, y, num_columns, num_rows);\n selected_position_map.set(table, selected_position);\n x += dx;\n y += dy;\n }\n },\n);\n\nfunction isLastCell(model, table, target) {\n const meta = table.getMeta(target);\n return meta.y === model._num_rows - 1;\n}\n\n// Events\nexport function keydownListener(table, viewer, selected_position_map, event) {\n const target = table.getRootNode().activeElement;\n event.target.classList.remove(\"psp-error\");\n switch (event.key) {\n case \"Enter\":\n event.preventDefault();\n if (isLastCell(this, table, target)) {\n target.blur();\n selected_position_map.delete(table);\n } else if (event.shiftKey) {\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n 0,\n -1,\n );\n } else {\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n 0,\n 1,\n );\n }\n break;\n case \"ArrowLeft\":\n if (getPos.call(target) == 0) {\n event.preventDefault();\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n -1,\n 0,\n );\n }\n break;\n case \"ArrowUp\":\n event.preventDefault();\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n 0,\n -1,\n );\n break;\n case \"ArrowRight\":\n if (getPos.call(target) == target.textContent.length) {\n event.preventDefault();\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n 1,\n 0,\n );\n }\n break;\n case \"ArrowDown\":\n event.preventDefault();\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n 0,\n 1,\n );\n break;\n default:\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport * as edit_click from \"./click/edit_click.js\";\nimport * as edit_keydown from \"./keydown/edit_keydown.js\";\n\nexport function is_editable(viewer, allowed = false) {\n const has_pivots =\n this._config.group_by.length === 0 &&\n this._config.split_by.length === 0;\n const selectable = viewer.hasAttribute(\"selectable\");\n const editable = allowed || !!(viewer.children[0]._edit_mode === \"EDIT\");\n return has_pivots && !selectable && editable;\n}\n\nexport function keydownListener(table, viewer, selected_position_map, event) {\n if (this._edit_mode === \"EDIT\") {\n if (!is_editable.call(this, viewer)) {\n return;\n }\n\n edit_keydown.keydownListener.call(\n this,\n table,\n viewer,\n selected_position_map,\n event,\n );\n } else {\n console.debug(\n `Mode ${this._edit_mode} for \"keydown\" event not yet implemented`,\n );\n }\n}\n\nexport function clickListener(table, viewer, event) {\n if (this._edit_mode === \"EDIT\") {\n if (!is_editable.call(this, viewer)) {\n return;\n }\n\n edit_click.clickListener.call(this, table, viewer, event);\n } else if (this._edit_mode === \"READ_ONLY\") {\n } else if (this._edit_mode === \"SELECT_COLUMN\") {\n } else if (this._edit_mode === \"SELECT_ROW\") {\n } else if (this._edit_mode === \"SELECT_REGION\") {\n } else {\n console.debug(\n `Mode ${this._edit_mode} for \"click\" event not yet implemented`,\n );\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { is_editable } from \"./click.js\";\nimport { write_cell } from \"./click/edit_click.js\";\n\nexport function focusoutListener(table, viewer, selected_position_map, event) {\n if (is_editable.call(this, viewer) && selected_position_map.has(table)) {\n event.target.classList.remove(\"psp-error\");\n const selectedPosition = selected_position_map.get(table);\n selected_position_map.delete(table);\n if (selectedPosition.content !== event.target.textContent) {\n if (!write_cell(table, this, event.target)) {\n event.target.textContent = selectedPosition.content;\n event.target.classList.add(\"psp-error\");\n event.target.focus();\n }\n }\n }\n}\n\nexport function focusinListener(table, _viewer, selected_position_map, event) {\n const meta = table.getMeta(event.target);\n if (meta) {\n const new_state = {\n x: meta.x,\n y: meta.y,\n content: event.target.textContent,\n };\n selected_position_map.set(table, new_state);\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport default async function getCellConfig(\n { _view, _config },\n row_idx,\n col_idx,\n) {\n const group_by = _config.group_by;\n const split_by = _config.split_by;\n const start_row = row_idx >= 0 ? row_idx : 0;\n const end_row = start_row + 1;\n const r = await _view.to_json({ start_row, end_row });\n const row_paths = r.map((x) => x.__ROW_PATH__);\n const group_by_values = row_paths[0] || [];\n const row_filters = group_by\n .map((pivot, index) => {\n const pivot_value = group_by_values[index];\n return pivot_value ? [pivot, \"==\", pivot_value] : undefined;\n })\n .filter((x) => x);\n\n const column_index = group_by.length > 0 ? col_idx + 1 : col_idx;\n const column_paths = Object.keys(r[0])[column_index];\n const result = { row: r[0] };\n let column_filters = [];\n if (column_paths) {\n const split_by_values = column_paths.split(\"|\");\n result.column_names = [split_by_values[split_by.length]];\n column_filters = split_by\n .map((pivot, index) => {\n const pivot_value = split_by_values[index];\n return pivot_value ? [pivot, \"==\", pivot_value] : undefined;\n })\n .filter((x) => x)\n .filter(([, , value]) => value !== \"__ROW_PATH__\");\n }\n\n const filter = _config.filter.concat(row_filters).concat(column_filters);\n result.config = { filter };\n return result;\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport getCellConfig from \"../get_cell_config.js\";\n\nexport async function selectionListener(\n regularTable,\n viewer,\n selected_rows_map,\n event,\n) {\n const meta = regularTable.getMeta(event.target);\n if (!viewer.hasAttribute(\"selectable\")) return;\n if (event.handled) return;\n if (event.which !== 1) {\n return;\n }\n\n if (!meta) {\n return;\n }\n\n const id = this._ids?.[meta.y - meta.y0];\n if (meta && meta.y >= 0) {\n const selected = selected_rows_map.get(regularTable);\n const key_match =\n !!selected &&\n selected.reduce((agg, x, i) => agg && x === id[i], true);\n\n const is_deselect =\n !!selected && id.length === selected.length && key_match;\n\n let detail = { selected: !is_deselect };\n const { row, column_names, config } = await getCellConfig(\n this,\n meta.y,\n meta.x,\n );\n\n if (is_deselect) {\n selected_rows_map.delete(regularTable);\n detail = {\n ...detail,\n row,\n config: { filter: structuredClone(this._config.filter) },\n };\n } else {\n selected_rows_map.set(regularTable, id);\n detail = { ...detail, row, column_names, config };\n }\n\n await regularTable.draw({ preserve_width: true });\n event.handled = true;\n viewer.dispatchEvent(\n new CustomEvent(\"perspective-select\", {\n bubbles: true,\n composed: true,\n detail,\n }),\n );\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function selectionStyleListener(\n regularTable,\n viewer,\n selected_rows_map,\n) {\n if (!viewer.hasAttribute(\"selectable\")) return;\n const has_selected = selected_rows_map.has(regularTable);\n const selected = selected_rows_map.get(regularTable);\n for (const td of regularTable.querySelectorAll(\"td\")) {\n if (!has_selected) {\n td.classList.toggle(\"psp-row-selected\", false);\n td.classList.toggle(\"psp-row-subselected\", false);\n } else {\n const meta = regularTable.getMeta(td);\n const id = this._ids[meta.y - meta.y0];\n const key_match = selected.reduce(\n (agg, x, i) => agg && x === id[i],\n true,\n );\n td.classList.toggle(\n \"psp-row-selected\",\n id.length === selected.length && key_match,\n );\n td.classList.toggle(\n \"psp-row-subselected\",\n id.length !== selected.length && key_match,\n );\n }\n }\n\n for (const th of regularTable.querySelectorAll(\"tbody th\")) {\n const meta = regularTable.getMeta(th);\n const id = this._ids[meta.y - meta.y0];\n if (!has_selected || !!id[meta.row_header_x]) {\n th.classList.toggle(\"psp-row-selected\", false);\n th.classList.toggle(\"psp-row-subselected\", false);\n } else {\n const key_match = selected.reduce(\n (agg, x, i) => agg && x === id[i],\n true,\n );\n th.classList.toggle(\n \"psp-row-selected\",\n id.length === selected.length && key_match,\n );\n th.classList.toggle(\n \"psp-row-subselected\",\n id.length !== selected.length && key_match,\n );\n }\n }\n}\n\n// export function configureRowSelectable(table, viewer) {\n// table.addStyleListener(selectionStyleListener.bind(this, table, viewer));\n// table.addEventListener(\n// \"mousedown\",\n// selectionListener.bind(this, table, viewer)\n// );\n// }\n\n// export async function deselect(regularTable) {\n// selected_rows_map.delete(regularTable);\n// for (const td of regularTable.querySelectorAll(\"td,th\")) {\n// td.classList.toggle(\"psp-row-selected\", false);\n// td.classList.toggle(\"psp-row-subselected\", false);\n// }\n// }\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport async function deselect_all_listener(\n regularTable,\n _viewer,\n selected_rows_map,\n) {\n selected_rows_map.delete(regularTable);\n for (const td of regularTable.querySelectorAll(\"td,th\")) {\n td.classList.toggle(\"psp-row-selected\", false);\n td.classList.toggle(\"psp-row-subselected\", false);\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport chroma from \"chroma-js\";\nimport { createDataListener } from \"../data_listener\";\nimport { blend, make_color_record } from \"../color_utils.js\";\n\nfunction get_rule(regular, tag, def) {\n let color = window.getComputedStyle(regular).getPropertyValue(tag).trim();\n if (color.length > 0) {\n return color;\n } else {\n return def;\n }\n}\n\nclass ElemFactory {\n constructor(name) {\n this._name = name;\n this._elements = [];\n this._index = 0;\n }\n\n clear() {\n this._index = 0;\n }\n\n get() {\n if (!this._elements[this._index]) {\n this._elements[this._index] = document.createElement(this._name);\n }\n const elem = this._elements[this._index];\n this._index += 1;\n return elem;\n }\n}\n\nfunction get_psp_type(metadata) {\n if (metadata.x >= 0) {\n return this._column_types[metadata.x];\n } else {\n return this._row_header_types[metadata.row_header_x - 1];\n }\n}\n\nexport async function createModel(regular, table, view, extend = {}) {\n const config = await view.get_config();\n if (this?.model?._config) {\n const old = this.model._config;\n let group_by_changed = old.group_by.length !== config.group_by.length;\n const type_changed =\n (old.group_by.length === 0 || config.group_by.length === 0) &&\n group_by_changed;\n\n if (!group_by_changed) {\n for (const lvl in old.group_by) {\n group_by_changed ||= config.group_by[lvl] !== old.group_by[lvl];\n }\n }\n\n let split_by_changed = old.split_by.length !== config.split_by.length;\n if (split_by_changed) {\n for (const lvl in old.split_by) {\n split_by_changed ||= config.split_by[lvl] !== old.split_by[lvl];\n }\n }\n\n let columns_changed = old.columns.length !== config.columns.length;\n if (columns_changed) {\n for (const lvl in old.columns) {\n columns_changed ||= config.columns[lvl] !== old.columns[lvl];\n }\n }\n\n let filter_changed = old.filter.length !== config.filter.length;\n if (filter_changed) {\n for (const lvl in old.filter) {\n for (const i in config.filter[lvl]) {\n filter_changed ||=\n config.filter[lvl][i] !== old.filter[lvl][i];\n }\n }\n }\n\n let sort_changed = old.sort.length !== config.sort.length;\n if (sort_changed) {\n for (const lvl in old.sort) {\n for (const i in config.sort[lvl]) {\n sort_changed ||= config.sort[lvl][i] !== old.sort[lvl][i];\n }\n }\n }\n\n this._reset_scroll_top = group_by_changed;\n this._reset_scroll_left = split_by_changed;\n this._reset_select =\n group_by_changed ||\n split_by_changed ||\n filter_changed ||\n sort_changed ||\n columns_changed;\n\n this._reset_column_size =\n split_by_changed ||\n group_by_changed ||\n columns_changed ||\n type_changed;\n }\n\n const [table_schema, num_rows, schema, expression_schema, _edit_port] =\n await Promise.all([\n table.schema(),\n view.num_rows(),\n view.schema(),\n view.expression_schema(),\n this.parentElement.getEditPort(),\n ]);\n\n const _plugin_background = chroma(\n get_rule(regular, \"--plugin--background\", \"#FFFFFF\"),\n ).rgb();\n\n const _pos_fg_color = make_color_record(\n get_rule(regular, \"--rt-pos-cell--color\", \"#338DCD\"),\n );\n\n const _neg_fg_color = make_color_record(\n get_rule(regular, \"--rt-neg-cell--color\", \"#FF5942\"),\n );\n\n const _pos_bg_color = make_color_record(\n blend(_pos_fg_color[0], _plugin_background),\n );\n\n const _neg_bg_color = make_color_record(\n blend(_neg_fg_color[0], _plugin_background),\n );\n\n const _color = make_color_record(\n get_rule(regular, \"--active--color\", \"#ff0000\"),\n );\n\n const _schema = { ...schema, ...expression_schema };\n const _table_schema = {\n ...table_schema,\n ...expression_schema,\n };\n\n const _column_paths = [];\n const _is_editable = [];\n const _column_types = [];\n\n let _edit_mode = this._edit_mode || \"READ_ONLY\";\n this._edit_button.dataset.editMode = _edit_mode;\n const model = Object.assign(extend, {\n _edit_port,\n _view: view,\n _table: table,\n _table_schema,\n _config: config,\n _num_rows: num_rows,\n _schema,\n _ids: [],\n _plugin_background,\n _color,\n _pos_fg_color,\n _neg_fg_color,\n _pos_bg_color,\n _neg_bg_color,\n _column_paths,\n _column_types,\n _is_editable,\n _edit_mode,\n _selection_state: {\n selected_areas: [],\n dirty: false,\n },\n _row_header_types: config.group_by.map((column_path) => {\n return _table_schema[column_path];\n }),\n _series_color_map: new Map(),\n _series_color_seed: new Map(),\n get_psp_type,\n });\n\n // Re-use div factory\n model._div_factory = model._div_factory || new ElemFactory(\"div\");\n regular.setDataListener(\n createDataListener(this.parentElement).bind(model, regular),\n {\n virtual_mode:\n window\n .getComputedStyle(regular)\n .getPropertyValue(\"--datagrid-virtual-mode\")\n ?.trim() || \"both\",\n },\n );\n\n return model;\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nconst FORMATTER_CONS = {\n datetime: Intl.DateTimeFormat,\n date: Intl.DateTimeFormat,\n integer: Intl.NumberFormat,\n float: Intl.NumberFormat,\n boolean: class {\n format(val) {\n return val ? \"true\" : \"false\";\n }\n },\n};\n\nconst LEGACY_CONFIG = {\n types: {\n float: {\n format: {\n style: \"decimal\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n },\n },\n datetime: {\n format: {\n dateStyle: \"short\",\n timeStyle: \"medium\",\n },\n },\n date: {\n format: {\n dateStyle: \"short\",\n },\n },\n },\n};\n\nexport class FormatterCache {\n constructor() {\n this._formatters = new Map();\n }\n\n create_datetime_formatter(type, plugin) {\n const type_config = {\n dateStyle: \"short\",\n timeStyle: \"medium\",\n };\n\n if (plugin.date_format?.format !== \"custom\") {\n const options = {\n ...type_config,\n timeZone: plugin.date_format?.timeZone,\n dateStyle: plugin.date_format?.dateStyle,\n timeStyle: plugin.date_format?.timeStyle,\n };\n if (options.dateStyle === \"disabled\") {\n options.dateStyle = undefined;\n } else if (options.dateStyle === undefined) {\n options.dateStyle = \"short\";\n }\n\n if (options.timeStyle === \"disabled\") {\n options.timeStyle = undefined;\n } else if (options.timeStyle === undefined) {\n options.timeStyle = \"medium\";\n }\n\n return new Intl.DateTimeFormat(navigator.languages, options);\n } else {\n const options = {\n // ...type_config.format,\n timeZone: plugin.date_format?.timeZone,\n second: plugin.date_format?.second,\n minute: plugin.date_format?.minute,\n hour: plugin.date_format?.hour,\n day: plugin.date_format?.day,\n weekday: plugin.date_format?.weekday,\n month: plugin.date_format?.month,\n year: plugin.date_format?.year,\n hour12: plugin.date_format?.hour12,\n fractionalSecondDigits:\n plugin.date_format?.fractionalSecondDigits,\n };\n\n if (options.year === \"disabled\") {\n options.year = undefined;\n } else if (options.year === undefined) {\n options.year = \"2-digit\";\n }\n\n if (options.month === \"disabled\") {\n options.month = undefined;\n } else if (options.month === undefined) {\n options.month = \"numeric\";\n }\n\n if (options.day === \"disabled\") {\n options.day = undefined;\n } else if (options.day === undefined) {\n options.day = \"numeric\";\n }\n\n if (options.weekday === \"disabled\") {\n options.weekday = undefined;\n }\n\n if (options.hour === \"disabled\") {\n options.hour = undefined;\n } else if (options.hour === undefined) {\n options.hour = \"numeric\";\n }\n\n if (options.minute === \"disabled\") {\n options.minute = undefined;\n } else if (options.minute === undefined) {\n options.minute = \"numeric\";\n }\n\n if (options.second === \"disabled\") {\n options.second = undefined;\n } else if (options.second === undefined) {\n options.second = \"numeric\";\n }\n\n if (options.hour12 === undefined) {\n options.hour12 = true;\n }\n\n return new Intl.DateTimeFormat(navigator.languages, options);\n }\n }\n\n create_date_formatter(type, plugin) {\n const options = {\n dateStyle: plugin.date_format?.dateStyle,\n timeZone: \"utc\",\n };\n\n if (options.dateStyle === \"disabled\") {\n options.dateStyle = undefined;\n } else if (options.dateStyle === undefined) {\n options.dateStyle = \"short\";\n }\n\n return new Intl.DateTimeFormat(navigator.languages, options);\n }\n\n create_number_formatter(type, plugin) {\n let format = LEGACY_CONFIG.types[type]?.format;\n if (plugin.number_format !== undefined) {\n format = plugin.number_format;\n }\n\n return new FORMATTER_CONS[type](navigator.languages, format);\n }\n\n create_boolean_formatter(type, plugin) {\n return new FORMATTER_CONS[type](navigator.languages, {});\n }\n\n get(type, plugin) {\n let formatter_key = [\n type,\n ...Object.values(plugin.date_format ?? {}),\n ...Object.values(plugin.number_format ?? {}),\n ].join(\"-\");\n\n if (!this._formatters.has(formatter_key)) {\n if (type === \"date\") {\n this._formatters.set(\n formatter_key,\n this.create_date_formatter(type, plugin),\n );\n } else if (type === \"datetime\") {\n this._formatters.set(\n formatter_key,\n this.create_datetime_formatter(type, plugin),\n );\n } else if (type === \"integer\" || type === \"float\") {\n this._formatters.set(\n formatter_key,\n this.create_number_formatter(type, plugin),\n );\n } else if (type === \"boolean\") {\n this._formatters.set(\n formatter_key,\n this.create_boolean_formatter(type, plugin),\n );\n } else {\n this._formatters.set(formatter_key, false);\n }\n }\n\n return this._formatters.get(formatter_key);\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { FormatterCache } from \"./formatter_cache\";\n\nconst FORMAT_CACHE = new FormatterCache();\nconst MAX_BAR_WIDTH_PCT = 1;\n\nexport function format_raw(type, value) {\n return FORMAT_CACHE.get(type, value);\n}\n\n/**\n * Format a single cell's text content as the content of a `<td>` or `<th>`.\n *\n * @param {*} parts\n * @param {*} val\n * @param {*} plugins\n * @param {*} use_table_schema\n * @returns\n */\nexport function format_cell(\n title,\n val,\n plugins = {},\n use_table_schema = false,\n) {\n if (val === null) {\n return null;\n }\n\n const type =\n (use_table_schema && this._table_schema[title]) ||\n this._schema[title] ||\n \"string\";\n const plugin = plugins[title] || {};\n const is_numeric = type === \"integer\" || type === \"float\";\n if (is_numeric && plugin?.number_fg_mode === \"bar\") {\n const a = Math.max(\n 0,\n Math.min(\n MAX_BAR_WIDTH_PCT,\n Math.abs(val / plugin.fg_gradient) * MAX_BAR_WIDTH_PCT,\n ),\n );\n\n const div = this._div_factory.get();\n const anchor = val >= 0 ? \"left\" : \"right\";\n const pct = (a * 100).toFixed(2);\n div.setAttribute(\n \"style\",\n `width:calc(${pct}% - 4px);position:absolute;${anchor}:2px;height:80%;top:10%;pointer-events:none;`,\n );\n\n return div;\n } else if (plugin?.format === \"link\" && type === \"string\") {\n const anchor = document.createElement(\"a\");\n anchor.setAttribute(\"href\", val);\n anchor.setAttribute(\"target\", \"_blank\");\n anchor.textContent = val;\n return anchor;\n } else if (plugin?.format === \"bold\" && type === \"string\") {\n const anchor = document.createElement(\"b\");\n anchor.textContent = val;\n return anchor;\n } else if (plugin?.format === \"italics\" && type === \"string\") {\n const anchor = document.createElement(\"i\");\n anchor.textContent = val;\n return anchor;\n } else {\n const formatter = FORMAT_CACHE.get(type, plugin);\n return formatter ? formatter.format(val) : val;\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\nimport { format_cell } from \"./format_cell.js\";\n\n/**\n * Format a single cell of the `group_by` tree header.\n *\n * @param {*} paths\n * @param {*} row_headers\n * @param {*} regularTable\n */\nexport function* format_tree_header_row_path(\n paths = [],\n row_headers,\n regularTable,\n) {\n const plugins = regularTable[PRIVATE_PLUGIN_SYMBOL];\n for (let path of paths) {\n path = [\"TOTAL\", ...path];\n const last = path[path.length - 1];\n path = path.slice(0, path.length - 1).fill(\"\");\n const formatted = format_cell.call(\n this,\n row_headers[path.length - 1],\n last,\n plugins,\n true,\n );\n\n if (formatted instanceof HTMLElement) {\n path = path.concat(formatted);\n } else {\n path = path.concat({ toString: () => formatted });\n }\n\n path.length = row_headers.length + 1;\n yield path;\n }\n}\n\nexport function* format_tree_header(paths = [], row_headers, regularTable) {\n const plugins = regularTable[PRIVATE_PLUGIN_SYMBOL];\n for (let path of paths) {\n const new_path = [\"\"];\n for (const idx in path) {\n new_path.push(\n format_cell.call(\n this,\n row_headers[idx],\n path[idx],\n plugins,\n true,\n ),\n );\n }\n\n yield path;\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\nimport { format_cell } from \"./format_cell.js\";\nimport {\n format_tree_header,\n format_tree_header_row_path,\n} from \"./format_tree_header.js\";\n\n/**\n * Creates a new DataListener, suitable for passing to `regular-table`'s\n * `.setDataListener()` method. This should be called as a method on the\n * plugin.\n *\n * @returns A data listener for the plugin.\n */\nexport function createDataListener(viewer) {\n let last_meta;\n let last_column_paths;\n let last_ids;\n let last_reverse_ids;\n let last_reverse_columns;\n return async function dataListener(regularTable, x0, y0, x1, y1) {\n let columns = {};\n const new_window = {\n start_row: y0,\n start_col: x0,\n end_row: y1,\n end_col: x1,\n id: true,\n };\n\n let num_columns = null;\n\n if (x1 - x0 > 0 && y1 - y0 > 0) {\n this._is_old_viewport =\n this._last_window?.start_row === y0 &&\n this._last_window?.end_row === y1 &&\n this._last_window?.start_col === x0 &&\n this._last_window?.end_col === x1;\n\n // if (this._config.split_by?.length > 0) {\n const [x, z] = await Promise.all([\n this._view.to_columns_string(new_window),\n this._view.num_columns(),\n // this._view.column_paths(new_window),\n ]);\n\n num_columns = z;\n columns = JSON.parse(x);\n const y = Object.keys(columns);\n const new_col_paths = y.filter(\n (x) => x !== \"__ROW_PATH__\" && x !== \"__ID__\",\n );\n\n const old_length = this._column_paths.length;\n this._column_paths.splice(\n new_window.start_col,\n new_col_paths.length,\n ...new_col_paths,\n );\n\n if (this._column_paths.length !== old_length || old_length === 0) {\n const [a, b] = await Promise.all([\n this._view.schema(),\n this._view.expression_schema(),\n ]);\n\n this._schema = { ...a, ...b };\n for (let i = 0; i < new_col_paths.length; i++) {\n const column_path_parts = new_col_paths[i].split(\"|\");\n const column =\n column_path_parts[this._config.split_by.length];\n\n this._is_editable[i + new_window.start_col] =\n !!this._table_schema[column];\n\n this._column_types[i + new_window.start_col] =\n this._schema[column];\n }\n }\n\n this._last_window = new_window;\n this._ids =\n columns.__ID__ ||\n Array(y1 - y0)\n .fill()\n .map((_, index) => [index + y0]);\n\n this._reverse_columns = this._column_paths\n .slice(x0, x1)\n .reduce((acc, x, i) => {\n acc.set(x, i);\n return acc;\n }, new Map());\n\n this._reverse_ids = this._ids?.reduce((acc, x, i) => {\n acc.set(x?.join(\"|\"), i);\n return acc;\n }, new Map());\n } else {\n this._div_factory.clear();\n num_columns = await this._view.num_columns();\n }\n\n const data = [],\n metadata = [],\n column_headers = [],\n column_paths = [];\n\n const is_settings_open = viewer.hasAttribute(\"settings\");\n for (\n let ipath = x0;\n ipath < Math.min(x1, this._column_paths.length);\n ++ipath\n ) {\n const path = this._column_paths[ipath];\n const path_parts = path.split(\"|\");\n const column = columns[path] || new Array(y1 - y0).fill(null);\n const agg_depth = Math.min(\n regularTable[PRIVATE_PLUGIN_SYMBOL]?.[\n path_parts[this._config.split_by.length]\n ]?.aggregate_depth || 0,\n this._config.group_by.length,\n );\n\n data.push(\n column.map((x, i) => {\n if (columns?.__ROW_PATH__?.[i]?.length < agg_depth) {\n return \"\";\n } else {\n return format_cell.call(\n this,\n path_parts[this._config.split_by.length],\n x,\n regularTable[PRIVATE_PLUGIN_SYMBOL],\n );\n }\n }),\n );\n\n metadata.push(column);\n if (is_settings_open) {\n path_parts.push(\"\");\n }\n\n column_headers.push(path_parts);\n column_paths.push(path);\n }\n\n // Only update the last state if this is not a \"phantom\" call.\n if (x1 - x0 > 0 && y1 - y0 > 0) {\n this.last_column_paths = last_column_paths;\n this.last_meta = last_meta;\n this.last_ids = last_ids;\n this.last_reverse_ids = last_reverse_ids;\n this.last_reverse_columns = last_reverse_columns;\n\n last_column_paths = column_paths;\n last_meta = metadata;\n last_ids = this._ids;\n last_reverse_ids = this._reverse_ids;\n last_reverse_columns = this._reverse_columns;\n }\n\n const is_row_path = columns.__ROW_PATH__ !== undefined;\n const row_headers = Array.from(\n (is_row_path\n ? format_tree_header_row_path\n : format_tree_header\n ).call(\n this,\n columns.__ROW_PATH__,\n this._config.group_by,\n regularTable,\n ),\n );\n\n const num_row_headers = row_headers[0]?.length;\n\n const result = {\n num_column_headers: column_headers[0]?.length || 1,\n num_row_headers,\n num_rows: this._num_rows,\n num_columns,\n row_headers,\n column_headers,\n data,\n metadata,\n column_header_merge_depth: Math.max(\n 0,\n this._config.split_by.length,\n ),\n };\n\n return result;\n };\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport getCellConfig from \"../get_cell_config\";\n\nexport async function dispatch_click_listener(table, viewer, event) {\n const meta = table.getMeta(event.target);\n if (!meta) return;\n const { x, y } = meta;\n\n const { row, column_names, config } = await getCellConfig(this, y, x);\n\n viewer.dispatchEvent(\n new CustomEvent(\"perspective-click\", {\n bubbles: true,\n composed: true,\n detail: {\n row,\n column_names,\n config,\n },\n }),\n );\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\n// const PRIVATE = Symbol(\"Area Mouse Selection\");\nconst MOUSE_SELECTED_AREA_CLASS = \"mouse-selected-area\";\n\nexport const addAreaMouseSelection = (\n datagrid,\n table,\n { className = MOUSE_SELECTED_AREA_CLASS, selected = [] } = {},\n) => {\n datagrid.model._selection_state = {\n selected_areas: selected,\n dirty: true,\n };\n\n table.addEventListener(\n \"mousedown\",\n getMousedownListener(datagrid, table, className),\n );\n\n table.addEventListener(\n \"mouseover\",\n getMouseoverListener(datagrid, table, className),\n );\n\n table.addEventListener(\n \"mouseup\",\n getMouseupListener(datagrid, table, className),\n );\n\n table.addStyleListener(() =>\n applyMouseAreaSelections(datagrid, table, className),\n );\n\n return table;\n};\n\nconst getMousedownListener = (datagrid, table, className) => (event) => {\n if (\n event.button === 0 &&\n (datagrid.model._edit_mode === \"SELECT_REGION\" ||\n datagrid.model._edit_mode === \"SELECT_ROW\" ||\n datagrid.model._edit_mode === \"SELECT_COLUMN\")\n ) {\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES = {};\n const meta = table.getMeta(event.target);\n if (meta && meta.x !== undefined && meta.y !== undefined) {\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES = {\n x: meta.x,\n y: meta.y,\n };\n\n // // TODO: Enable multiselect here\n // if (!event.ctrlKey && !event.metaKey) {\n // datagrid.model._selection_state.selected_areas = [];\n // }\n\n datagrid.model._selection_state.old_selected_areas =\n datagrid.model._selection_state.selected_areas;\n datagrid.model._selection_state.selected_areas = [];\n\n const start = {\n x0: meta.x,\n x1: meta.x,\n y0: meta.y,\n y1: meta.y,\n };\n datagrid.model._selection_state.potential_selection = start;\n applyMouseAreaSelections(\n datagrid,\n table,\n className,\n datagrid.model._selection_state.selected_areas.concat([start]),\n );\n\n return;\n }\n }\n\n datagrid.model._selection_state.selected_areas = [];\n};\n\nconst getMouseoverListener = (datagrid, table, className) => (event) => {\n if (\n datagrid.model._edit_mode === \"SELECT_REGION\" ||\n datagrid.model._edit_mode === \"SELECT_ROW\" ||\n datagrid.model._edit_mode === \"SELECT_COLUMN\"\n ) {\n if (\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES &&\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.x !==\n undefined\n ) {\n const meta = table.getMeta(event.target);\n if (meta && meta.x !== undefined && meta.y !== undefined) {\n const potentialSelection = {\n x0: Math.min(\n meta.x,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.x,\n ),\n x1: Math.max(\n meta.x,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.x,\n ),\n y0: Math.min(\n meta.y,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.y,\n ),\n y1: Math.max(\n meta.y,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.y,\n ),\n };\n\n datagrid.model._selection_state.potential_selection =\n potentialSelection;\n\n applyMouseAreaSelections(\n datagrid,\n table,\n className,\n datagrid.model._selection_state.selected_areas.concat([\n potentialSelection,\n ]),\n );\n }\n }\n }\n};\n\nconst getMouseupListener = (datagrid, table, className) => (event) => {\n if (\n datagrid.model._edit_mode === \"SELECT_REGION\" ||\n datagrid.model._edit_mode === \"SELECT_ROW\" ||\n datagrid.model._edit_mode === \"SELECT_COLUMN\"\n ) {\n const meta = table.getMeta(event.target);\n if (datagrid.model._selection_state.old_selected_areas?.length > 0) {\n const selected =\n datagrid.model._selection_state.old_selected_areas[0];\n if (\n selected.x0 === selected.x1 &&\n selected.y0 === selected.y1 &&\n selected.x0 === meta.x &&\n selected.y0 === meta.y\n ) {\n datagrid.model._selection_state.selected_areas = [];\n datagrid.model._selection_state.old_selected_areas = [];\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES =\n {};\n datagrid.model._selection_state.potential_selection = undefined;\n applyMouseAreaSelections(datagrid, table, className, []);\n return;\n }\n }\n\n datagrid.model._selection_state.old_selected_areas = [];\n\n if (\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES &&\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.x !==\n undefined &&\n meta.x !== undefined &&\n meta.y !== undefined\n ) {\n const selection = {\n x0: Math.min(\n meta.x,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.x,\n ),\n x1: Math.max(\n meta.x,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.x,\n ),\n y0: Math.min(\n meta.y,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.y,\n ),\n y1: Math.max(\n meta.y,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.y,\n ),\n };\n datagrid.model._selection_state.selected_areas.push(selection);\n applyMouseAreaSelections(datagrid, table, className);\n }\n\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES = {};\n datagrid.model._selection_state.potential_selection = undefined;\n }\n};\n\nfunction set_psp_selection(viewer, datagrid, { x0, x1, y0, y1 }) {\n const viewport = {};\n const mode = datagrid.model._edit_mode;\n if (\n x0 !== undefined &&\n [\"SELECT_COLUMN\", \"SELECT_REGION\"].indexOf(mode) > -1\n ) {\n viewport.start_col = x0;\n }\n\n if (\n x1 !== undefined &&\n [\"SELECT_COLUMN\", \"SELECT_REGION\"].indexOf(mode) > -1\n ) {\n viewport.end_col = x1 + 1;\n }\n\n if (\n y0 !== undefined &&\n [\"SELECT_ROW\", \"SELECT_REGION\"].indexOf(mode) > -1\n ) {\n viewport.start_row = y0;\n }\n\n if (\n y1 !== undefined &&\n [\"SELECT_ROW\", \"SELECT_REGION\"].indexOf(mode) > -1\n ) {\n viewport.end_row = y1 + 1;\n }\n\n viewer.setSelection(viewport);\n}\n\nexport const applyMouseAreaSelections = (\n datagrid,\n table,\n className,\n selected,\n) => {\n if (\n datagrid.model._edit_mode === \"SELECT_REGION\" ||\n datagrid.model._edit_mode === \"SELECT_ROW\" ||\n datagrid.model._edit_mode === \"SELECT_COLUMN\"\n ) {\n selected = datagrid.model._selection_state.selected_areas.slice(0);\n if (datagrid.model._selection_state.potential_selection) {\n selected.push(datagrid.model._selection_state.potential_selection);\n }\n\n const tds = table.querySelectorAll(\"tbody td\");\n\n if (selected.length > 0) {\n set_psp_selection(datagrid.parentElement, datagrid, selected[0]);\n applyMouseAreaSelection(datagrid, table, selected, className);\n } else {\n datagrid.parentElement.setSelection();\n for (const td of tds) {\n td.classList.remove(className);\n }\n }\n } else if (datagrid.model._selection_state.dirty) {\n datagrid.model._selection_state.dirty = false;\n const tds = table.querySelectorAll(\"tbody td\");\n for (const td of tds) {\n td.classList.remove(className);\n }\n }\n};\n\nconst applyMouseAreaSelection = (datagrid, table, selected, className) => {\n if (datagrid.model._edit_mode === \"SELECT_REGION\" && selected.length > 0) {\n const tds = table.querySelectorAll(\"tbody td\");\n\n for (const td of tds) {\n const meta = table.getMeta(td);\n let rendered = false;\n for (const { x0, x1, y0, y1 } of selected) {\n if (\n x0 !== undefined &&\n y0 !== undefined &&\n x1 !== undefined &&\n y1 !== undefined\n ) {\n if (\n x0 <= meta.x &&\n meta.x <= x1 &&\n y0 <= meta.y &&\n meta.y <= y1\n ) {\n rendered = true;\n datagrid.model._selection_state.dirty = true;\n td.classList.add(className);\n }\n }\n }\n\n if (!rendered) {\n td.classList.remove(className);\n }\n }\n } else if (\n datagrid.model._edit_mode === \"SELECT_ROW\" &&\n selected.length > 0\n ) {\n const tds = table.querySelectorAll(\"tbody td\");\n\n for (const td of tds) {\n const meta = table.getMeta(td);\n let rendered = false;\n for (const { x0, x1, y0, y1 } of selected) {\n if (\n x0 !== undefined &&\n y0 !== undefined &&\n x1 !== undefined &&\n y1 !== undefined\n ) {\n if (y0 <= meta.y && meta.y <= y1) {\n datagrid.model._selection_state.dirty = true;\n rendered = true;\n td.classList.add(className);\n }\n }\n }\n\n if (!rendered) {\n td.classList.remove(className);\n }\n }\n } else if (\n datagrid.model._edit_mode === \"SELECT_COLUMN\" &&\n selected.length > 0\n ) {\n const tds = table.querySelectorAll(\"tbody td\");\n\n for (const td of tds) {\n const meta = table.getMeta(td);\n let rendered = false;\n for (const { x0, x1, y0, y1 } of selected) {\n if (\n x0 !== undefined &&\n y0 !== undefined &&\n x1 !== undefined &&\n y1 !== undefined\n ) {\n if (x0 <= meta.x && meta.x <= x1) {\n datagrid.model._selection_state.dirty = true;\n rendered = true;\n td.classList.add(className);\n }\n }\n }\n\n if (!rendered) {\n td.classList.remove(className);\n }\n }\n }\n};\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport {\n column_header_style_listener,\n style_selected_column,\n} from \"../style_handlers/column_header.js\";\nimport { group_header_style_listener } from \"../style_handlers/group_header.js\";\nimport { table_cell_style_listener } from \"../style_handlers/table_cell\";\nimport {\n click_listener,\n mousedown_listener,\n} from \"../event_handlers/header_click.js\";\n\nimport { editable_style_listener } from \"../style_handlers/editable.js\";\nimport { focus_style_listener } from \"../style_handlers/focus.js\";\nimport { focusinListener, focusoutListener } from \"../event_handlers/focus.js\";\nimport { keydownListener, clickListener } from \"../event_handlers/click.js\";\n\nimport { selectionListener } from \"../event_handlers/row_select_click\";\nimport { selectionStyleListener } from \"../style_handlers/selection\";\nimport { deselect_all_listener } from \"../event_handlers/deselect_all.js\";\n\nimport { createModel } from \"../model/create.js\";\nimport { dispatch_click_listener } from \"../event_handlers/dispatch_click\";\n\nimport { addAreaMouseSelection } from \"../event_handlers/select_region.js\";\n\n/**\n * Lazy initialize this plugin with various listeners.\n */\nexport async function activate(view) {\n let viewer = this.parentElement;\n let table = await viewer.getTable(true);\n\n if (!this._initialized) {\n this.innerHTML = \"\";\n if (this.shadowRoot) {\n this.shadowRoot.appendChild(this.regular_table);\n } else {\n this.appendChild(this.regular_table);\n }\n\n this.model = await createModel.call(\n this,\n this.regular_table,\n table,\n view,\n );\n\n if (!this.model) {\n return;\n }\n\n addAreaMouseSelection(this, this.regular_table, {\n className: \"psp-select-region\",\n });\n\n this.regular_table.addStyleListener(\n table_cell_style_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n ),\n );\n\n this.regular_table.addStyleListener(\n group_header_style_listener.bind(this.model, this.regular_table),\n );\n\n this.regular_table.addStyleListener(\n column_header_style_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n ),\n );\n\n // uh ..\n this.regular_table.addEventListener(\n \"click\",\n click_listener.bind(this.model, this.regular_table),\n );\n\n // tree collapse, expand, edit button headers\n this.regular_table.addEventListener(\n \"mousedown\",\n mousedown_listener.bind(this.model, this.regular_table, viewer),\n );\n\n // (Legacy) Row selection\n const selected_rows_map = new WeakMap();\n this.regular_table.addStyleListener(\n selectionStyleListener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_rows_map,\n ),\n );\n\n this.regular_table.addEventListener(\n \"mousedown\",\n selectionListener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_rows_map,\n ),\n );\n\n this.regular_table.addEventListener(\n \"psp-deselect-all\",\n deselect_all_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_rows_map,\n ),\n );\n\n // User event click\n this.regular_table.addEventListener(\n \"click\",\n dispatch_click_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n ),\n );\n\n // Editing\n const selected_position_map = new WeakMap();\n this.regular_table.addStyleListener(\n editable_style_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n this,\n ),\n );\n this.regular_table.addStyleListener(\n focus_style_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_position_map,\n ),\n );\n\n // TODO relies on this.model._is_editable\n this.regular_table.addEventListener(\n \"click\",\n clickListener.bind(this.model, this.regular_table, viewer),\n );\n\n this.regular_table.addEventListener(\n \"focusin\",\n focusinListener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_position_map,\n ),\n );\n this.regular_table.addEventListener(\n \"focusout\",\n focusoutListener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_position_map,\n ),\n );\n this.regular_table.addEventListener(\n \"keydown\",\n keydownListener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_position_map,\n ),\n );\n\n // viewer event listeners\n viewer.addEventListener(\n \"perspective-toggle-column-settings\",\n (event) => {\n if (this.isConnected) {\n style_selected_column.call(\n this.model,\n this.regular_table,\n viewer,\n event.detail.column_name,\n );\n if (!event.detail.open) {\n this.model._column_settings_selected_column = null;\n return;\n }\n\n this.model._column_settings_selected_column =\n event.detail.column_name;\n }\n },\n );\n\n this._initialized = true;\n } else {\n await createModel.call(\n this,\n this.regular_table,\n table,\n view,\n this.model,\n );\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\n/**\n * Restore a saved column width override token.\n *\n * @param {*} token An object previously returned by a call to\n * `_save_column_size_overrides()`\n * @param {*} [cache=false] A flag indicating whether this value should\n * be cached so a future `resetAutoSize()` call does not clear it.\n * @returns\n */\nexport function restore_column_size_overrides(old_sizes, cache = false) {\n if (!this._initialized) {\n return;\n }\n\n if (cache) {\n this._cached_column_sizes = old_sizes;\n }\n\n const overrides = {};\n const { group_by, columns } = this.model._config;\n const tree_header_offset = group_by?.length > 0 ? group_by.length + 1 : 0;\n\n for (const key of Object.keys(old_sizes)) {\n if (key === \"__ROW_PATH__\") {\n overrides[tree_header_offset - 1] = old_sizes[key];\n } else {\n const index = this.model._column_paths.indexOf(key);\n overrides[index + tree_header_offset] = old_sizes[key];\n }\n }\n\n this.regular_table._column_sizes.override = overrides;\n}\n\n/**\n * Extract the current user-overriden column widths from\n * `regular-table`. This functiond depends on the internal\n * implementation of `regular-table` and may break!\n *\n * @returns An Object-as-dictionary keyed by column_path string, and\n * valued by the column's user-overridden pixel width.\n */\nexport function save_column_size_overrides() {\n if (!this._initialized) {\n return [];\n }\n\n if (this._cached_column_sizes) {\n const x = this._cached_column_sizes;\n this._cached_column_sizes = undefined;\n return x;\n }\n\n const overrides = this.regular_table._column_sizes.override;\n const { group_by, columns } = this.model._config;\n const tree_header_offset = group_by?.length > 0 ? group_by.length + 1 : 0;\n\n const old_sizes = {};\n for (const key of Object.keys(overrides)) {\n if (overrides[key] !== undefined) {\n const index = key - tree_header_offset;\n if (index > -1) {\n old_sizes[this.model._column_paths[index]] = overrides[key];\n } else if (index === -1) {\n old_sizes[\"__ROW_PATH__\"] = overrides[key];\n }\n }\n }\n\n return old_sizes;\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport const EDIT_MODES = [\n \"READ_ONLY\",\n \"EDIT\",\n \"SELECT_ROW\",\n \"SELECT_COLUMN\",\n \"SELECT_REGION\",\n];\n\nexport function toggle_edit_mode(mode = undefined) {\n if (typeof mode === \"undefined\") {\n mode =\n EDIT_MODES[\n (EDIT_MODES.indexOf(this._edit_mode) + 1) % EDIT_MODES.length\n ];\n }\n\n this.parentElement?.setSelection();\n this._edit_mode = mode;\n if (this.model) {\n this.model._edit_mode = mode;\n this.model._selection_state = {\n selected_areas: [],\n dirty: true,\n };\n }\n\n if (this._edit_button !== undefined) {\n this._edit_button.dataset.editMode = mode;\n }\n\n this.dataset.editMode = mode;\n}\n\nexport function toggle_scroll_lock(force = undefined) {\n if (typeof force === \"undefined\") {\n force = !this._is_scroll_lock;\n }\n\n this._is_scroll_lock = force;\n this.classList.toggle(\"sub-cell-scroll-disabled\", force);\n if (this._scroll_lock !== undefined) {\n this._scroll_lock.classList.toggle(\"lock-scroll\", force);\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { restore_column_size_overrides } from \"../model/column_overrides.js\";\nimport {\n EDIT_MODES,\n toggle_edit_mode,\n toggle_scroll_lock,\n} from \"../model/toolbar.js\";\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\nimport { make_color_record } from \"../color_utils.js\";\n\n/**\n * Restore this plugin's state from a previously saved `token`.\n *\n * @param {*} token A token returned from `save()`.\n * @param {import(\"@perspective-dev/viewer\").PerspectiveColumnConfig} columns Viewer column settings\n */\nexport function restore(token, columns) {\n token = JSON.parse(JSON.stringify(token));\n columns = JSON.parse(JSON.stringify(columns));\n const overrides = {};\n\n if (token.columns) {\n for (const [col, value] of Object.entries(token.columns)) {\n if (value.column_size_override !== undefined) {\n overrides[col] = value.column_size_override;\n delete value[\"column_size_override\"];\n }\n }\n }\n\n let styles = {};\n if (columns) {\n for (const [col_name, controls] of Object.entries(columns)) {\n styles[col_name] = {\n ...controls,\n pos_fg_color: controls.pos_fg_color\n ? make_color_record(controls.pos_fg_color)\n : undefined,\n neg_fg_color: controls.neg_fg_color\n ? make_color_record(controls.neg_fg_color)\n : undefined,\n pos_bg_color: controls.pos_bg_color\n ? make_color_record(controls.pos_bg_color)\n : undefined,\n neg_bg_color: controls.neg_bg_color\n ? make_color_record(controls.neg_bg_color)\n : undefined,\n color: controls.color\n ? make_color_record(controls.color)\n : undefined,\n };\n }\n }\n\n // TODO this is going away.\n if (\"edit_mode\" in token) {\n if (EDIT_MODES.indexOf(token.edit_mode) !== -1) {\n toggle_edit_mode.call(this, token.edit_mode);\n } else {\n console.error(\"Unknown edit mode \" + token.edit_mode);\n }\n }\n\n if (\"scroll_lock\" in token) {\n toggle_scroll_lock.call(this, token.scroll_lock);\n }\n\n const datagrid = this.regular_table;\n restore_column_size_overrides.call(this, overrides, true);\n datagrid[PRIVATE_PLUGIN_SYMBOL] = styles;\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\nimport { save_column_size_overrides } from \"../model/column_overrides.js\";\n\n/**\n * Serialize the state of this plugin to a token.\n *\n * @returns This plugin's state as a token.\n */\nexport function save() {\n if (this.regular_table) {\n const token = {\n columns: {},\n scroll_lock: !!this._is_scroll_lock,\n edit_mode: this._edit_mode,\n };\n\n const column_size_overrides = save_column_size_overrides.call(this);\n\n for (const col of Object.keys(column_size_overrides || {})) {\n if (!token.columns[col]) {\n token.columns[col] = {};\n }\n\n token.columns[col].column_size_override =\n column_size_overrides[col];\n }\n\n return JSON.parse(JSON.stringify(token));\n }\n return {};\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { restore_column_size_overrides } from \"../model/column_overrides.js\";\nimport { save_column_size_overrides } from \"../model/column_overrides.js\";\n\n/**\n * Draw this datagrid instance.\n *\n * @param {perspective.View} view\n * @returns\n */\nexport async function draw(view) {\n if (this.parentElement) {\n await this.activate(view);\n }\n\n if (!this.isConnected || this.offsetParent == null || !this.model) {\n return;\n }\n\n const old_sizes = save_column_size_overrides.call(this);\n const draw = this.regular_table.draw({ invalid_columns: true });\n if (this._reset_scroll_top) {\n // group_by\n this.regular_table.scrollTop = 0;\n this._reset_scroll_top = false;\n }\n\n if (this._reset_scroll_left) {\n // split_by\n this.regular_table.scrollLeft = 0;\n this._reset_scroll_left = false;\n }\n if (this._reset_select) {\n // filter, group_by, sort ... if (col-select) { columns, split_by }\n this.regular_table.dispatchEvent(\n new CustomEvent(\"psp-deselect-all\", { bubbles: false }),\n );\n this._reset_select = false;\n }\n\n if (this._reset_column_size) {\n // split_by, group_by (?),\n this.regular_table._resetAutoSize();\n this._reset_column_size = false;\n }\n\n restore_column_size_overrides.call(this, old_sizes);\n await draw;\n\n this._toolbar.classList.toggle(\n \"aggregated\",\n this.model._config.group_by.length > 0 ||\n this.model._config.split_by.length > 0,\n );\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\n/**\n * @param {import(\"@perspective-dev/client\").Type} type\n * @param {string} _group\n * @returns {import(\"@perspective-dev/viewer\").PerspectiveColumnConfigValue}\n */\nexport default function column_style_opts(type, _group) {\n if (type === \"integer\" || type === \"float\")\n return {\n datagrid_number_style: {\n fg_gradient: 0,\n pos_fg_color: this.model._pos_fg_color[0],\n neg_fg_color: this.model._neg_fg_color[0],\n number_fg_mode: \"color\",\n bg_gradient: 0,\n pos_bg_color: this.model._pos_bg_color[0],\n neg_bg_color: this.model._neg_bg_color[0],\n number_bg_mode: \"disabled\",\n },\n number_string_format: true,\n };\n else if (type === \"date\" || type === \"datetime\" || type === \"string\") {\n let control =\n type === \"date\" || type === \"datetime\"\n ? \"datagrid_datetime_style\"\n : `datagrid_string_style`;\n return {\n [control]: {\n color: this.model._color[0],\n bg_color: this.model._color[0],\n },\n };\n } else {\n return null;\n }\n}\n", "regular-table{padding:0;margin:12px 0 0 12px;font-family:inherit;--rt-hover--border-color:var(--inactive--color,#c5c9d080);}regular-table div[tabindex]{outline:none;}regular-table>div{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;}regular-table th{text-align:center;}regular-table thead tr:not(.rt-autosize) th{overflow:hidden;max-width:0px;}regular-table thead tr:last-child .rt-float,regular-table tbody .rt-float{text-align:right;}regular-table thead .rt-integer,regular-table tbody .rt-integer{text-align:right;}regular-table tbody th{text-align:left;}regular-table span.rt-tree-container{display:flex;align-items:center;height:100%;}regular-table thead .rt-string,regular-table tbody .rt-string,regular-table thead .rt-date,regular-table tbody .rt-date,regular-table thead .rt-datetime,regular-table tbody .rt-datetime{text-align:left;}regular-table thead tr:last-child th{border-bottom:1px solid#8b868045;}regular-table tbody tr:first-child td,regular-table tbody tr:first-child th{border-top:1px solid transparent!important;}regular-table th{position:relative;}regular-table tr th span.rt-tree-group{margin-left:5px;margin-right:15px;border-left:1px solid#eee;height:100%;}regular-table td,regular-table th{white-space:nowrap;font-size:12px;padding-right:5px;padding-left:5px;padding-top:0px;padding-bottom:0px;height:19px;}regular-table table *{box-sizing:border-box;}regular-table table{position:absolute;color:#666;outline:none;}regular-table span.rt-row-header-icon{color:#aaa;padding-right:4px;font-family:var(--button--font-family);}regular-table span.rt-column-header-icon{font-size:10px;padding-left:3px;display:inline-block;width:10px;font-family:var(--button--font-family);}regular-table span.rt-row-header-icon:hover{color:#1a7da1;text-shadow:0px 0px 3px#1a7da1;}regular-table .rt-selected td{background-color:#eee;}regular-table .rt-cell-clip{overflow:hidden;text-overflow:ellipsis;}regular-table td span.rt-group-name,regular-table th span.rt-group-name{margin-right:-5px;padding-right:5px;padding-left:8px;flex:1;height:100%;}regular-table th span.rt-group-name{text-align:left;}regular-table td th span.rt-group-leaf,regular-table th span.rt-group-leaf{margin-left:16px;height:100%;}regular-table .rt-column-resize{height:100%;width:10px;position:absolute;top:0;right:0;cursor:col-resize;}regular-table a{color:var(--rt-pos-cell--color);}regular-table a:visited{color:var(--active--color);}regular-table td.psp-null:after,regular-table th.psp-null:after{content:var(--null--content,\"-\");}.psp-header-border:not(.psp-is-top):not(.psp-header-leaf){box-shadow:1px 0px var(--inactive--border-color,#8b868045);}.psp-header-group{box-shadow:0px 10px 0 -9px var(--inactive--border-color,#8b868045);}.psp-is-top{box-shadow:5px 4px 0px -4px var(--inactive--border-color,#8b868045);}.psp-is-top.psp-header-group:not(.psp-header-group-corner){box-shadow:5px 4px 0px -4px var(--inactive--border-color,#8b868045),0px 10px 0 -9px var(--inactive--border-color,#8b868045);}.psp-header-border.psp-header-group:not(.psp-is-top):not(.psp-header-group-corner){box-shadow:1px 0px var(--inactive--border-color,#8b868045),0px 10px 0 -9px var(--inactive--border-color,#8b868045);}perspective-viewer[settings] tr.rt-autosize .psp-header-leaf.psp-header-border:not(.psp-menu-enabled){box-shadow:1px 0px var(--inactive--border-color,#8b868045);}:host-context(perspective-viewer[settings]) tr.rt-autosize .psp-header-leaf.psp-header-border:not(.psp-menu-enabled){box-shadow:1px 0px var(--inactive--border-color,#8b868045);}.psp-header-leaf.psp-header-border{box-shadow:5px -4px 0px -4px var(--inactive--border-color,#8b868045);}tr:only-child th{box-shadow:none!important;}regular-table tbody tr:hover th.psp-tree-leaf:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover th.psp-tree-label:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover td:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover:after{border-color:var(--rt-hover--border-color,#c5c9d080)!important;box-shadow:0px 1px 0px var(--rt-hover--border-color,#c5c9d080);}regular-table tbody tr:hover th.psp-tree-leaf.psp-menu-open:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover th.psp-tree-label.psp-menu-open:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover td.psp-menu-open:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr.psp-menu-open:hover:after{box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color),0px 1px 0px var(--rt-hover--border-color,#c5c9d080);}regular-table tbody tr:last-child:hover td.psp-menu-open:not(.psp-row-selected):not(.psp-row-subselected){box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color),inset 0px -2px 0px var(--icon--color),0px 1px 0px var(--rt-hover--border-color,#c5c9d080);}regular-table tbody tr:hover+tr th.psp-tree-leaf:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover+tr th.psp-tree-label:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover+tr td:not(.psp-row-selected):not(.psp-row-subselected){border-top-color:transparent;}regular-table tbody tr th:first-child:not(:empty),regular-table tbody tr th:first-child:empty+th:not(:empty),regular-table tbody tr th:first-child:empty~th:empty+th:not(:empty),regular-table tbody tr td:first-child{border-left-width:1px;border-left-color:transparent;}regular-table tbody tr th:last-child,regular-table tbody tr td:last-child{border-right-width:0px;border-right-color:transparent;}regular-table tbody tr:hover{color:inherit;}regular-table tbody tr:hover th:first-child:not(:empty),regular-table tbody tr:hover th:first-child:empty+th:not(:empty),regular-table tbody tr:hover th:first-child:empty~th:empty+th:not(:empty),regular-table tbody tr:hover td:first-child{border-left-color:var(--rt-hover--border-color,#c5c9d080)!important;}regular-table tbody tr:hover th:last-child,regular-table tbody tr:hover td:last-child{border-right-color:var(--rt-hover--border-color,#c5c9d080)!important;}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody td,perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table thead th:not(.rt-group-corner),:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody td,:host(:not(.sub-cell-scroll-disabled)) regular-table table thead th:not(.rt-group-corner){transform:translate(var(--regular-table--transform-x,0px));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody{transform:translate(0,var(--regular-table--transform-y,0px));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:first-child td,perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:first-child th,perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:first-child:after,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:first-child td,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:first-child th,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:first-child:after{clip-path:polygon(0 var(--regular-table--clip-y,0),0 200%,200% 200%,200% var(--regular-table--clip-y,0));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr td:first-of-type,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr td:first-of-type{clip-path:polygon(var(--regular-table--clip-x,0) 0,var(--regular-table--clip-x,0) 200%,200% 200%,200% 0);}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:first-child td:first-of-type,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:first-child td:first-of-type{clip-path:polygon(var(--regular-table--clip-x,0) var(--regular-table--clip-y,0),var(--regular-table--clip-x,0) 200%,200% 200%,200% var(--regular-table--clip-y,0));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table thead tr:last-child:after,:host(:not(.sub-cell-scroll-disabled)) regular-table table thead tr:last-child:after{transform:translate(var(--regular-table--transform-x,0px));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:not(:first-child):after,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:not(:first-child):after{transform:translate(var(--regular-table--transform-x,0px));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:hover:first-child:after,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:hover:first-child:after{clip-path:polygon(0 var(--regular-table--clip-y,0),0 200%,200% 200%,200% var(--regular-table--clip-y,0));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table thead tr th.rt-group-corner+th:not(.rt-group-corner),:host(:not(.sub-cell-scroll-disabled)) regular-table table thead tr th.rt-group-corner+th:not(.rt-group-corner){clip-path:polygon(var(--regular-table--clip-x,0) 0,var(--regular-table--clip-x,0) 200%,200% 200%,200% 0);}regular-table{outline:none;}regular-table::-webkit-scrollbar,regular-table::-webkit-scrollbar-corner{background-color:transparent;height:12px;width:12px;}regular-table::-webkit-scrollbar-thumb{background-clip:content-box;background:var(--icon--color);border:5.5px solid var(--plugin--background);max-height:50%;max-width:50%;min-width:10%;min-height:10%;}perspective-viewer:not([settings]) regular-table table tr.rt-autosize+tr th{height:0px;}perspective-viewer:not([settings]) regular-table table tr.rt-autosize+tr th span{display:none;}:host-context(perspective-viewer:not([settings])) regular-table table tr.rt-autosize+tr th{height:0px;}:host-context(perspective-viewer:not([settings])) regular-table table tr.rt-autosize+tr th span{display:none;}perspective-viewer[settings] .psp-menu-enabled{padding:0 6px;font-size:8px;border-radius:3px 3px 0 0;}perspective-viewer[settings] .psp-menu-enabled:hover,perspective-viewer[settings] tr:not(.rt-autosize) th.psp-menu-open{color:var(--plugin--background);background-color:var(--icon--color);border-bottom-color:var(--icon--color);cursor:pointer;}perspective-viewer[settings] tr:not(.rt-autosize) th.psp-menu-open:before{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;height:8px;width:10px;-webkit-mask-image:var(--column-settings-icon--mask-image);mask-image:var(--column-settings-icon--mask-image);margin-right:4px;background-color:var(--plugin--background);}perspective-viewer[settings] td.psp-menu-open{box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color);}perspective-viewer[settings] tr:first-child td.psp-menu-open{border-top-color:var(--icon--color)!important;}perspective-viewer[settings] tr:last-child td.psp-menu-open{box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color),inset 0px -2px 0px var(--icon--color);}:host-context(perspective-viewer[settings]) .psp-menu-enabled{padding:0 6px;font-size:8px;border-radius:3px 3px 0 0;}:host-context(perspective-viewer[settings]) .psp-menu-enabled:hover,:host-context(perspective-viewer[settings]) tr:not(.rt-autosize) th.psp-menu-open{color:var(--plugin--background);background-color:var(--icon--color);border-bottom-color:var(--icon--color);cursor:pointer;}:host-context(perspective-viewer[settings]) tr:not(.rt-autosize) th.psp-menu-open:before{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;height:8px;width:10px;-webkit-mask-image:var(--column-settings-icon--mask-image);mask-image:var(--column-settings-icon--mask-image);margin-right:4px;background-color:var(--plugin--background);}:host-context(perspective-viewer[settings]) td.psp-menu-open{box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color);}:host-context(perspective-viewer[settings]) tr:first-child td.psp-menu-open{border-top-color:var(--icon--color)!important;}:host-context(perspective-viewer[settings]) tr:last-child td.psp-menu-open{box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color),inset 0px -2px 0px var(--icon--color);}perspective-viewer regular-table table thead tr:last-child th{border-bottom-width:1px;border-bottom-color:var(--inactive--border-color,#8b868045);}:host-context(perspective-viewer) regular-table table thead tr:last-child th{border-bottom-width:1px;border-bottom-color:var(--inactive--border-color,#8b868045);}.psp-sort-enabled:hover{cursor:pointer;}.psp-row-selected,:hover .psp-row-selected,:hover th.psp-tree-leaf.psp-row-selected,:hover th.psp-tree-label.psp-row-selected{color:white!important;background-color:var(--selected-row--background-color,#ea7319)!important;border-color:var(--selected-row--background-color,#ea7319)!important;}.psp-row-selected.psp-tree-label:not(:hover):before{color:white;}.psp-row-subselected,:hover .psp-row-subselected,:hover th.psp-tree-leaf.psp-row-subselected,:hover th.psp-tree-label.psp-row-subselected{background:rgba(234,115,25,0.2)!important;}.psp-error{color:red;}td:focus{outline:#666;outline-style:dotted;outline-width:1px;}perspective-viewer.dragging regular-table{pointer-events:none;}:host-context(perspective-viewer.dragging) regular-table{pointer-events:none;}.psp-header-border:last-child{border-right-width:0px;}.psp-header-sort-desc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-desc-icon--mask-image);mask-image:var(--sort-desc-icon--mask-image);}.psp-header-sort-asc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-asc-icon--mask-image);mask-image:var(--sort-asc-icon--mask-image);}.psp-header-sort-col-desc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-col-desc-icon--mask-image);mask-image:var(--sort-col-desc-icon--mask-image);}.psp-header-sort-col-asc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-col-asc-icon--mask-image);mask-image:var(--sort-col-asc-icon--mask-image);}.psp-header-sort-abs-desc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-abs-desc-icon--mask-image);mask-image:var(--sort-abs-desc-icon--mask-image);}.psp-header-sort-abs-asc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-abs-asc-icon--mask-image);mask-image:var(--sort-abs-asc-icon--mask-image);}.psp-header-sort-abs-col-desc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-abs-col-desc-icon--mask-image);mask-image:var(--sort-abs-col-desc-icon--mask-image);}.psp-header-sort-abs-col-asc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-abs-col-asc-icon--mask-image);mask-image:var(--sort-abs-col-asc-icon--mask-image);}tbody th:last-of-type{border-right:1px solid var(--inactive--border-color,#8b868045);overflow:hidden;text-overflow:ellipsis;}tbody th:empty{background-image:linear-gradient(to right,transparent 9px,var(--inactive--border-color,#eee) 10px,transparent 11px);background-repeat:no-repeat;min-width:20px;max-width:20px;pointer-events:none;}.psp-tree-label{max-width:0px;min-width:0px;}.psp-tree-label:before{color:var(--icon--color);font-family:var(--button--font-family,inherit);padding-right:11px;}.psp-tree-label-expand:before{content:var(--tree-label-expand--content,\"+\");}.psp-tree-label-collapse:before{content:var(--tree-label-collapse--content,\"-\");}.psp-tree-label-expand,.psp-tree-label-collapse{cursor:pointer;}.psp-tree-label:hover:before{color:var(--active--color);text-shadow:0px 0px 5px var(--active--color);}.psp-tree-leaf{padding-left:24px;}.psp-align-right{text-align:right;}.psp-align-left{text-align:left;}.psp-positive:not(:focus){color:var(--rt-pos-cell--color);}.psp-negative:not(:focus){color:var(--rt-neg-cell--color);}regular-table table tbody td{min-width:52px!important;}.psp-is-width-override .rt-column-resize,.rt-column-resize:hover{border:1px dashed#999;border-bottom-width:0px;border-left-width:0px;}.boolean-editable{cursor:pointer;}regular-table table{user-select:none;color:inherit;border-collapse:separate;}regular-table table th{font-weight:400;}regular-table table td,regular-table table th{border-color:var(--inactive--border-color,#8b868045);height:23px;}regular-table table .psp-header-group{text-overflow:ellipsis;}regular-table table th.psp-header-leaf{border-bottom-width:0px;}regular-table table th.psp-header-leaf span{height:23px;min-height:23px;}regular-table table td,regular-table table th.psp-tree-label,regular-table table th.psp-tree-label,regular-table table th.psp-tree-leaf,regular-table table tbody tr:first-child th{border-style:solid;border-width:0px;border-top-width:1px;}regular-table table tbody th:empty{background-position:0px -10px;}regular-table table td.psp-select-region,regular-table table th.psp-select-region{background-color:var(--icon--color)!important;color:var(--plugin--background)!important;border-color:var(--plugin--background)!important;}regular-table tbody tr:hover td.psp-select-region:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover+tr td.psp-select-region:not(.psp-row-selected):not(.psp-row-subselected){border-color:var(--plugin--background)!important;}regular-table tbody tr:hover td.psp-select-region.psp-menu-open:not(.psp-row-selected):not(.psp-row-subselected){box-shadow:inset -2px 0px 0px var(--plugin--background),inset 2px 0px 0px var(--plugin--background);}:host-context(perspective-viewer[settings]) td.psp-select-region.psp-menu-open{box-shadow:inset -2px 0px 0px var(--plugin--background),inset 2px 0px 0px var(--plugin--background);}regular-table #psp-column-edit-buttons th:not(.rt-group-corner) span:not(.rt-column-resize):before{content:var(--datagrid-column-edit-button--content,\"Edit\");}perspective-viewer:not([settings]) regular-table #psp-column-edit-buttons:after{content:none;}:host-context(perspective-viewer:not([settings])) regular-table #psp-column-edit-buttons:after{content:none;}regular-table table thead tr:last-child:after{width:10000px;box-sizing:border-box;display:block;height:23px;content:\" \";border-bottom:1px solid var(--inactive--border-color);}regular-table table tbody tr:after{width:10000px;box-sizing:border-box;display:block;height:23px;content:\" \";border-top:1px solid transparent;}regular-table table tbody tr:not(:first-child):after{border-top:1px solid var(--inactive--border-color);}regular-table table tbody tr:hover:not(:first-child):after{border-top:1px solid var(--rt-hover--border-color);}regular-table table tbody tr:hover+tr:after{border-top:1px solid var(--rt-hover--border-color);}@keyframes pulse_pos{0%{background-color:var(--pulse--background-color-start,rgba(0,128,255,0.5));}100%{background-color:var(--pulse--background-color-end,rgba(0,128,255,0));}}@keyframes pulse_pos2{0%{background-color:var(--pulse--background-color-start,rgba(0,128,255,0.5));}100%{background-color:var(--pulse--background-color-end,rgba(0,128,255,0));}}@keyframes pulse_neg{0%{background-color:var(--pulse--background-color-start,rgba(255,25,0,0.5));}100%{background-color:var(--pulse--background-color-end,rgba(255,25,0,0));}}@keyframes pulse_neg2{0%{background-color:var(--pulse--background-color-start,rgba(255,25,0,0.5));}100%{background-color:var(--pulse--background-color-end,rgba(255,25,0,0));}}", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\nimport { activate } from \"../plugin/activate.js\";\nimport { restore } from \"../plugin/restore.js\";\nimport { save } from \"../plugin/save\";\nimport { draw } from \"../plugin/draw\";\nimport column_style_controls from \"../plugin/column_style_controls.js\";\nimport datagridStyles from \"../../../dist/css/perspective-viewer-datagrid.css\";\nimport { format_raw } from \"../data_listener/format_cell.js\";\n\n/**\n * The custom element class for this plugin. The interface methods for this\n */\nexport class HTMLPerspectiveViewerDatagridPluginElement extends HTMLElement {\n static #global_stylesheet_installed = false;\n\n static #sheet;\n\n // Determines whether this datagrid renders in the light DOM. This will\n // break style encapsulation and may cause inconsistent behavior.\n static renderTarget =\n window.CSS?.supports &&\n window.CSS?.supports(\"selector(:host-context(foo))\")\n ? \"shadow\"\n : \"light\";\n\n constructor() {\n super();\n this.regular_table = document.createElement(\"regular-table\");\n this.regular_table.part = \"regular-table\";\n this._is_scroll_lock = false;\n this._edit_mode = \"READ_ONLY\";\n const Elem = HTMLPerspectiveViewerDatagridPluginElement;\n if (!Elem.#sheet) {\n Elem.#sheet = new CSSStyleSheet();\n Elem.#sheet.replaceSync(datagridStyles);\n }\n\n if (Elem.renderTarget === \"shadow\") {\n const shadow = this.attachShadow({ mode: \"open\" });\n shadow.adoptedStyleSheets.push(Elem.#sheet);\n } else if (\n Elem.renderTarget === \"light\" &&\n !Elem.#global_stylesheet_installed\n ) {\n Elem.#global_stylesheet_installed = true;\n document.adoptedStyleSheets.push(Elem.#sheet);\n }\n }\n\n connectedCallback() {\n if (!this._toolbar) {\n this._toolbar = document.createElement(\n \"perspective-viewer-datagrid-toolbar\",\n );\n }\n\n const parent = this.parentElement;\n if (parent) {\n parent.appendChild(this._toolbar);\n }\n }\n\n disconnectedCallback() {\n this._toolbar?.parentElement?.removeChild?.(this._toolbar);\n }\n\n async activate(view) {\n return await activate.call(this, view);\n }\n\n get name() {\n return \"Datagrid\";\n }\n\n get category() {\n return \"Basic\";\n }\n\n get select_mode() {\n return \"toggle\";\n }\n\n get min_config_columns() {\n return undefined;\n }\n\n get config_column_names() {\n return [\"Columns\"];\n }\n\n /**\n * Give the Datagrid a higher priority so it is loaded\n * over the default charts by default.\n */\n get priority() {\n return 1;\n }\n\n can_render_column_styles(type, _group) {\n return type !== \"boolean\";\n }\n\n column_style_controls(type, group) {\n return column_style_controls.call(this, type, group);\n }\n\n async draw(view) {\n return await draw.call(this, view);\n }\n\n async update(view) {\n if (this.model === undefined) {\n await this.draw(view);\n } else if (this.model._config.split_by?.length > 0) {\n const dimensions = await view.dimensions();\n this.model._num_rows = dimensions.num_view_rows;\n // if (this.model._column_paths.length !== dimensions.num_view_columns) {\n // await this.draw(view);\n // } else {\n await this.regular_table.draw();\n // }\n } else {\n this.model._num_rows = await view.num_rows();\n await this.regular_table.draw();\n }\n }\n\n async render(viewport) {\n const view = await this.parentElement.getView();\n const json = await view.to_columns(viewport);\n const cols = await view.column_paths(viewport);\n\n const nrows = viewport.end_row - viewport.start_row;\n let out = \"\";\n for (let ridx = 0; ridx < nrows; ridx++) {\n for (const col_name of cols) {\n const col = json[col_name];\n const type = this.model._schema[col_name];\n const formatter = format_raw(\n type,\n this.regular_table[PRIVATE_PLUGIN_SYMBOL][\n col_name.split(\"|\").at(-1)\n ] || {},\n );\n\n if (formatter) {\n out += formatter.format(col[ridx]) + \"\\t\";\n } else {\n out += col[ridx] + \"\\t\";\n }\n }\n out += \"\\n\";\n }\n\n return out.trim();\n }\n\n async resize() {\n if (!this.isConnected || this.offsetParent == null) {\n return;\n }\n\n if (this._initialized) {\n await this.regular_table.draw();\n }\n }\n\n async clear() {\n this.regular_table._resetAutoSize();\n this.regular_table.clear();\n }\n\n save() {\n return save.call(this);\n }\n\n restore(token, columns_config) {\n return restore.call(this, token, columns_config);\n }\n\n async restyle(view) {\n await this.draw(view);\n }\n\n delete() {\n this._toolbar = undefined;\n if (this.regular_table.table_model) {\n this.regular_table._resetAutoSize();\n }\n\n this.regular_table.clear();\n }\n}\n", ":host{position:relative;display:block;height:100%;}:host #container{position:absolute;display:flex;flex-direction:column;justify-content:stretch;align-items:stretch;top:0;left:0;right:0;bottom:0;}:host #toolbar{display:flex;align-items:stretch;height:100%;}:host #toolbar .hover-target{margin:0;display:inline-flex;align-items:center;cursor:pointer;}:host #toolbar .hover-target:hover{box-shadow:-4px 0 0 var(--icon--color),4px 0 0 var(--icon--color);background-color:var(--icon--color);}:host #slot-container{flex:1;position:relative;}#scroll_lock.lock-scroll:before{-webkit-mask-image:var(--toolbar-scroll-lock-active--content);}#scroll_lock:before{-webkit-mask-image:var(--toolbar-scroll-lock--content);}#select_mode:before{content:\"highlight_alt\";}#edit_mode:before{-webkit-mask-image:\"\";}#edit_mode[data-edit-mode=\"READ_ONLY\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--read-only--content);}#edit_mode[data-edit-mode=\"EDIT\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--edit--content);}:host(.aggregated) #toolbar #edit_mode[data-edit-mode=\"EDIT\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--read-only--content);}#edit_mode[data-edit-mode=\"SELECT_ROW\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--select-row--content);}#edit_mode[data-edit-mode=\"SELECT_COLUMN\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--select-column--content);}#edit_mode[data-edit-mode=\"SELECT_REGION\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--select-region--content);}#edit_mode[data-edit-mode=\"READ_ONLY\"] span:before{content:var(--edit-mode--read-only--content,\"Read Only\");}#edit_mode[data-edit-mode=\"EDIT\"] span:before{content:var(--edit-mode--edit--content,\"Editable\");}#edit_mode[data-edit-mode=\"SELECT_ROW\"] span:before{content:var(--edit-mode--select-row--content,\"Row Select\");}#edit_mode[data-edit-mode=\"SELECT_COLUMN\"] span:before{content:var(--edit-mode--select-column--content,\"Column Select\");}#edit_mode[data-edit-mode=\"SELECT_REGION\"] span:before{content:var(--edit-mode--select-region--content,\"Region Select\");}#scroll_lock span:before{content:var(--scroll-lock-toggle--content,\"Free Scroll\");}#scroll_lock.lock-scroll span:before{content:var(--scroll-lock-alt-toggle--content,\"Align Scroll\");}.button:before{width:21px;height:21px;content:\"\";-webkit-mask-size:cover;mask-size:cover;background-color:var(--icon--color);}.button.editable:before,.button.lock-scroll:before{color:inherit;}.button{display:inline-flex;justify-content:center;align-items:center;user-select:none;padding:0 5px;border:1px solid transparent;border-radius:3px;border:1px solid transparent;box-sizing:border-box;display:inline-flex;font-size:var(--label--font-size,0.75em);height:22px;user-select:none;white-space:nowrap;width:37px;}.button>span{display:none;margin:0;padding:0;}.hover-target:focus-within .button,.hover-target:hover .button{position:relative;background-color:var(--icon--color);color:var(--plugin--background);opacity:1;display:flex;align-items:center;cursor:pointer;}.hover-target:focus-within .button:before,.hover-target:hover .button:before{background-color:var(--plugin--background);}.hover-target:focus-within .button>span,.hover-target:hover .button>span{display:block;position:absolute;top:calc(100% + 3px);left:50%;translate:-50%;margin:0;padding:5px;height:auto;white-space:pre-wrap;line-height:1;font-size:9px;background-color:var(--icon--color);width:35px;text-align:center;border-radius:0 0 3px 3px;}", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport TOOLBAR_STYLE from \"../../../dist/css/perspective-viewer-datagrid-toolbar.css\";\nimport { toggle_edit_mode, toggle_scroll_lock } from \"../model/toolbar\";\n\nconst stylesheet = new CSSStyleSheet();\nstylesheet.replaceSync(TOOLBAR_STYLE);\n\n/**\n * The custom element for this plugin's toolbar, a component which displays in\n * the host `<perspective-viewer>`'s status bar when this plugin is active.\n * In the case of Datagrid, this comprises \"Editable\" and \"Scroll Lock\" toggle\n * buttons.\n */\nexport class HTMLPerspectiveViewerDatagridToolbarElement extends HTMLElement {\n connectedCallback() {\n if (this._initialized) {\n return;\n }\n\n this._initialized = true;\n this.setAttribute(\"slot\", \"plugin-settings\");\n this.attachShadow({ mode: \"open\" });\n this.shadowRoot.adoptedStyleSheets.push(stylesheet);\n this.shadowRoot.innerHTML = `\n <div id=\"toolbar\">\n <span class=\"hover-target\">\n <span id=\"scroll_lock\" class=\"button\">\n <span></span>\n </span>\n </span>\n <span class=\"hover-target\">\n <span id=\"edit_mode\" class=\"button\" data-edit-mode=\"READ_ONLY\">\n <span></span>\n </span>\n </span>\n </div>\n `;\n\n const viewer = this.parentElement;\n const plugin = this.previousElementSibling;\n plugin._scroll_lock = this.shadowRoot.querySelector(\"#scroll_lock\");\n plugin._scroll_lock.addEventListener(\"click\", () =>\n toggle_scroll_lock.call(plugin),\n );\n\n plugin._edit_button = this.shadowRoot.querySelector(\"#edit_mode\");\n plugin._edit_button.addEventListener(\"click\", () => {\n toggle_edit_mode.call(plugin);\n plugin.regular_table.draw();\n viewer.dispatchEvent(new Event(\"perspective-config-update\"));\n });\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["PRIVATE_PLUGIN_SYMBOL", "get_psp_type", "metadata", "style_selected_column", "regularTable", "viewer", "selectedColumn", "group_header_trs", "len", "settings_open", "tr", "i", "offset", "id", "titles", "editBtns", "th", "title", "editBtn", "open", "r", "meta", "column_header_style_listener", "col_headers", "style_column_header_row", "style_menu_headers", "is_menu_row", "header_depth", "td", "column_name", "sort", "x", "needs_border", "is_corner", "type", "is_numeric", "is_string", "is_date", "is_datetime", "group_header_style_listener", "regularTable", "header_depth", "group_header_trs", "m", "marked", "table", "y", "row", "tops", "x", "td", "metadata", "needs_border", "cell", "xx", "tx", "ty", "style_cell_flash", "metadata", "td", "pos_s", "pos_e", "neg_s", "neg_e", "is_settings_open", "id", "metadata_path", "row_idx", "col_idx", "chroma", "blend", "a", "b", "rgbaToRgb", "r", "g", "source", "f", "c", "infer_foreground_from_background", "make_gradient", "chromahex", "r1", "g1", "b1", "r2", "g2", "b2", "make_color_record", "color", "chroma_neg", "_neg_grad", "rgb", "cell_style_numeric", "plugin", "td", "metadata", "is_settings_open", "is_positive", "is_negative", "pos_bg_color", "neg_bg_color", "bg_tuple", "hex", "r", "g", "_gradhex", "a", "source", "foreground", "infer_foreground_from_background", "rgbaToRgb", "style_cell_flash", "b", "gradhex", "chroma", "cell_style_string", "plugin", "td", "metadata", "column_name", "hex", "r", "g", "b", "gradhex", "source", "foreground", "infer_foreground_from_background", "rgbaToRgb", "series_map", "seed", "color_seed", "h", "s", "l", "chroma", "color2", "hex2", "cell_style_datetime", "plugin", "td", "metadata", "column_name", "hex", "r", "g", "b", "gradhex", "source", "foreground", "infer_foreground_from_background", "rgbaToRgb", "cell_style_boolean", "plugin", "td", "metadata", "hex", "cell_style_row_header", "regularTable", "td", "metadata", "is_not_empty", "is_leaf", "next", "is_collapse", "get_psp_type", "metadata", "table_cell_style_listener", "regularTable", "viewer", "plugins", "PRIVATE_PLUGIN_SYMBOL", "is_settings_open", "tr", "td", "column_name", "type", "plugin", "is_numeric", "x", "cell_style_numeric", "cell_style_boolean", "cell_style_string", "cell_style_datetime", "is_th", "cell_style_row_header", "sortHandler", "regularTable", "viewer", "event", "target", "column_name", "sort_method", "append_sort", "override_sort", "abs", "sort", "found", "sort_term", "_column_name", "_sort_dir", "term", "create_sort", "sort_dir", "order", "ROW_COL_SORT_ORDER", "ROW_SORT_ORDER", "inc_sort_dir", "expandCollapseHandler", "regularTable", "event", "meta", "is_collapse", "x", "mousedown_listener", "regularTable", "viewer", "event", "target", "expandCollapseHandler", "column_name", "sortHandler", "click_listener", "isEditable", "viewer", "allowed", "has_pivots", "selectable", "editable", "editable_style_listener", "table", "datagrid", "plugins", "PRIVATE_PLUGIN_SYMBOL", "edit", "td", "meta", "type", "col_name", "focus_style_listener", "table", "_viewer", "selected_position_map", "tds", "selected_position", "host", "td", "meta", "write_cell", "table", "model", "active_cell", "meta", "type", "text", "id", "msg", "clickListener", "_viewer", "event", "is_editable2", "is_bool", "is_null", "lock", "body", "args", "resolve", "x", "getPos", "_range", "range", "moveSelection", "table", "selected_position_map", "active_cell", "dx", "dy", "meta", "num_columns", "num_rows", "selected_position", "xmin", "xmax", "ymin", "ymax", "y", "focus_style_listener", "isLastCell", "model", "target", "keydownListener", "viewer", "event", "is_editable", "viewer", "allowed", "has_pivots", "selectable", "editable", "keydownListener", "table", "selected_position_map", "event", "clickListener", "focusoutListener", "table", "viewer", "selected_position_map", "event", "is_editable", "selectedPosition", "write_cell", "focusinListener", "_viewer", "meta", "new_state", "getCellConfig", "_view", "_config", "row_idx", "col_idx", "group_by", "split_by", "start_row", "end_row", "r", "group_by_values", "x", "row_filters", "pivot", "index", "pivot_value", "column_index", "column_paths", "result", "column_filters", "split_by_values", "value", "filter", "selectionListener", "regularTable", "viewer", "selected_rows_map", "event", "meta", "id", "selected", "key_match", "agg", "x", "i", "is_deselect", "detail", "row", "column_names", "config", "getCellConfig", "selectionStyleListener", "regularTable", "viewer", "selected_rows_map", "has_selected", "selected", "td", "meta", "id", "key_match", "agg", "x", "i", "th", "deselect_all_listener", "regularTable", "_viewer", "selected_rows_map", "td", "chroma", "FORMATTER_CONS", "val", "LEGACY_CONFIG", "FormatterCache", "type", "plugin", "type_config", "options", "format", "formatter_key", "FORMAT_CACHE", "FormatterCache", "MAX_BAR_WIDTH_PCT", "format_raw", "type", "value", "format_cell", "title", "val", "plugins", "use_table_schema", "plugin", "a", "div", "anchor", "pct", "formatter", "format_tree_header_row_path", "paths", "row_headers", "regularTable", "plugins", "PRIVATE_PLUGIN_SYMBOL", "path", "last", "formatted", "format_cell", "format_tree_header", "new_path", "idx", "createDataListener", "viewer", "last_meta", "last_column_paths", "last_ids", "last_reverse_ids", "last_reverse_columns", "regularTable", "x0", "y0", "x1", "y1", "columns", "new_window", "num_columns", "x", "z", "new_col_paths", "old_length", "a", "b", "i", "column", "_", "index", "acc", "data", "metadata", "column_headers", "column_paths", "is_settings_open", "ipath", "path", "path_parts", "agg_depth", "PRIVATE_PLUGIN_SYMBOL", "format_cell", "is_row_path", "row_headers", "format_tree_header_row_path", "format_tree_header", "num_row_headers", "get_rule", "regular", "tag", "def", "color", "ElemFactory", "name", "elem", "get_psp_type", "metadata", "createModel", "table", "view", "extend", "config", "old", "group_by_changed", "type_changed", "lvl", "split_by_changed", "columns_changed", "filter_changed", "i", "sort_changed", "table_schema", "num_rows", "schema", "expression_schema", "_edit_port", "_plugin_background", "chroma", "_pos_fg_color", "make_color_record", "_neg_fg_color", "_pos_bg_color", "blend", "_neg_bg_color", "_color", "_schema", "_table_schema", "_column_paths", "_is_editable", "_column_types", "_edit_mode", "model", "column_path", "createDataListener", "dispatch_click_listener", "table", "viewer", "event", "meta", "x", "y", "row", "column_names", "config", "getCellConfig", "MOUSE_SELECTED_AREA_CLASS", "addAreaMouseSelection", "datagrid", "table", "className", "selected", "getMousedownListener", "getMouseoverListener", "getMouseupListener", "applyMouseAreaSelections", "event", "meta", "start", "potentialSelection", "selection", "set_psp_selection", "viewer", "x0", "x1", "y0", "y1", "viewport", "mode", "tds", "applyMouseAreaSelection", "td", "rendered", "activate", "view", "viewer", "table", "createModel", "addAreaMouseSelection", "table_cell_style_listener", "group_header_style_listener", "column_header_style_listener", "click_listener", "mousedown_listener", "selected_rows_map", "selectionStyleListener", "selectionListener", "deselect_all_listener", "dispatch_click_listener", "selected_position_map", "editable_style_listener", "focus_style_listener", "clickListener", "focusinListener", "focusoutListener", "keydownListener", "event", "style_selected_column", "restore_column_size_overrides", "old_sizes", "cache", "overrides", "group_by", "columns", "tree_header_offset", "key", "index", "save_column_size_overrides", "x", "EDIT_MODES", "toggle_edit_mode", "mode", "toggle_scroll_lock", "force", "restore", "token", "columns", "overrides", "col", "value", "styles", "col_name", "controls", "make_color_record", "EDIT_MODES", "toggle_edit_mode", "toggle_scroll_lock", "datagrid", "restore_column_size_overrides", "PRIVATE_PLUGIN_SYMBOL", "save", "token", "column_size_overrides", "save_column_size_overrides", "col", "draw", "view", "old_sizes", "save_column_size_overrides", "restore_column_size_overrides", "column_style_opts", "type", "_group", "perspective_viewer_datagrid_default", "HTMLPerspectiveViewerDatagridPluginElement", "_HTMLPerspectiveViewerDatagridPluginElement", "#global_stylesheet_installed", "#sheet", "Elem", "perspective_viewer_datagrid_default", "parent", "view", "activate", "type", "_group", "group", "column_style_opts", "draw", "dimensions", "viewport", "json", "cols", "nrows", "out", "ridx", "col_name", "col", "formatter", "format_raw", "PRIVATE_PLUGIN_SYMBOL", "save", "token", "columns_config", "restore", "perspective_viewer_datagrid_toolbar_default", "stylesheet", "perspective_viewer_datagrid_toolbar_default", "HTMLPerspectiveViewerDatagridToolbarElement", "viewer", "plugin", "toggle_scroll_lock", "toggle_edit_mode", "_register_element", "HTMLPerspectiveViewerDatagridToolbarElement", "HTMLPerspectiveViewerDatagridPluginElement"]
4
+ "sourcesContent": ["// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport \"regular-table\";\n\nimport { HTMLPerspectiveViewerDatagridPluginElement } from \"./custom_elements/datagrid.js\";\nimport { HTMLPerspectiveViewerDatagridToolbarElement } from \"./custom_elements/toolbar.js\";\n\n/******************************************************************************\n *\n * Main\n *\n */\n\nasync function _register_element() {\n customElements.define(\n \"perspective-viewer-datagrid-toolbar\",\n HTMLPerspectiveViewerDatagridToolbarElement,\n );\n\n customElements.define(\n \"perspective-viewer-datagrid\",\n HTMLPerspectiveViewerDatagridPluginElement,\n );\n\n await customElements.whenDefined(\"perspective-viewer\");\n customElements\n .get(\"perspective-viewer\")\n .registerPlugin(\"perspective-viewer-datagrid\");\n}\n\n_register_element();\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport const PRIVATE_PLUGIN_SYMBOL = Symbol(\"Plugin Symbol\");\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nfunction get_psp_type(metadata) {\n if (metadata.x >= 0) {\n return this._column_types[metadata.x];\n } else {\n return this._row_header_types[metadata.row_header_x - 1];\n }\n}\n\nexport function style_selected_column(regularTable, viewer, selectedColumn) {\n const group_header_trs = Array.from(\n regularTable.children[0].children[0].children,\n );\n\n const len = group_header_trs.length;\n const settings_open = viewer.hasAttribute(\"settings\");\n if (len <= 1) {\n group_header_trs[0]?.removeAttribute(\"id\");\n } else {\n group_header_trs.forEach((tr, i) => {\n const offset = settings_open ? 1 : 0;\n let id =\n i === len - (offset + 1)\n ? \"psp-column-titles\"\n : i === len - offset\n ? \"psp-column-edit-buttons\"\n : null;\n id ? tr.setAttribute(\"id\", id) : tr.removeAttribute(\"id\");\n });\n }\n\n viewer.classList.toggle(\"psp-menu-open\", !!selectedColumn);\n if (settings_open && len >= 2) {\n // if settings_open, you will never have less than 2 trs unless the\n // table is empty, but possibly more e.g. with group-by.\n // edit and title are guaranteed to be the last two rows\n let titles = Array.from(group_header_trs[len - 2].children);\n let editBtns = Array.from(group_header_trs[len - 1].children);\n if (titles && editBtns) {\n // clear any sticky styles from tr changes\n group_header_trs.slice(0, len - 2).forEach((tr) => {\n Array.from(tr.children).forEach((th) => {\n th.classList.toggle(\"psp-menu-open\", false);\n });\n });\n\n for (let i = 0; i < titles.length; i++) {\n const title = titles[i];\n const editBtn = editBtns[i];\n\n let open = title.textContent === selectedColumn;\n title.classList.toggle(\"psp-menu-open\", open);\n editBtn.classList.toggle(\"psp-menu-open\", open);\n if (this._config.columns.length > 1) {\n for (const r of regularTable.querySelectorAll(\"td\")) {\n const meta = regularTable.getMeta(r);\n const open =\n meta.column_header[\n meta.column_header.length - 2\n ] === selectedColumn;\n r.classList.toggle(\"psp-menu-open\", open);\n }\n }\n }\n }\n }\n}\n\nexport function column_header_style_listener(regularTable, viewer) {\n let group_header_trs = Array.from(\n regularTable.children[0].children[0].children,\n );\n\n if (group_header_trs.length > 0) {\n style_selected_column.call(\n this,\n regularTable,\n viewer,\n this._column_settings_selected_column,\n );\n\n let [col_headers] = group_header_trs.splice(\n this._config.split_by.length,\n 1,\n );\n\n if (col_headers) {\n style_column_header_row.call(\n this,\n regularTable,\n col_headers,\n false,\n );\n }\n\n let [style_menu_headers] = group_header_trs.splice(\n this._config.split_by.length,\n 1,\n );\n\n if (style_menu_headers) {\n style_column_header_row.call(\n this,\n regularTable,\n style_menu_headers,\n true,\n );\n }\n }\n}\n\nfunction style_column_header_row(regularTable, col_headers, is_menu_row) {\n // regular header styling\n const header_depth = regularTable._view_cache.config.row_pivots.length - 1;\n for (const td of col_headers.children) {\n const metadata = regularTable.getMeta(td);\n const column_name =\n metadata.column_header?.[this._config.split_by.length];\n const sort = this._config.sort.find((x) => x[0] === column_name);\n let needs_border = metadata.row_header_x === header_depth;\n const is_corner = typeof metadata.x === \"undefined\";\n needs_border =\n needs_border ||\n (metadata.x + 1) % this._config.columns.length === 0;\n td.classList.toggle(\"psp-header-border\", needs_border);\n td.classList.toggle(\"psp-header-group\", false);\n td.classList.toggle(\"psp-header-leaf\", true);\n td.classList.toggle(\"psp-is-top\", false);\n td.classList.toggle(\"psp-header-corner\", is_corner);\n td.classList.toggle(\n \"psp-header-sort-asc\",\n !is_menu_row && !!sort && sort[1] === \"asc\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-desc\",\n !is_menu_row && !!sort && sort[1] === \"desc\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-col-asc\",\n !is_menu_row && !!sort && sort[1] === \"col asc\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-col-desc\",\n !is_menu_row && !!sort && sort[1] === \"col desc\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-abs-asc\",\n !is_menu_row && !!sort && sort[1] === \"asc abs\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-abs-desc\",\n !is_menu_row && !!sort && sort[1] === \"desc abs\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-abs-col-asc\",\n !is_menu_row && !!sort && sort[1] === \"col asc abs\",\n );\n\n td.classList.toggle(\n \"psp-header-sort-abs-col-desc\",\n !is_menu_row && !!sort && sort[1] === \"col desc abs\",\n );\n\n let type = get_psp_type.call(this, metadata);\n const is_numeric = type === \"integer\" || type === \"float\";\n const is_string = type === \"string\";\n const is_date = type === \"date\";\n const is_datetime = type === \"datetime\";\n td.classList.toggle(\"psp-align-right\", is_numeric);\n td.classList.toggle(\"psp-align-left\", !is_numeric);\n\n td.classList.toggle(\n \"psp-menu-enabled\",\n (is_string || is_numeric || is_date || is_datetime) &&\n !is_corner &&\n metadata.column_header_y == this._config.split_by.length + 1,\n );\n\n td.classList.toggle(\n \"psp-sort-enabled\",\n (is_string || is_numeric || is_date || is_datetime) &&\n !is_corner &&\n metadata.column_header_y === this._config.split_by.length,\n );\n\n td.classList.toggle(\n \"psp-is-width-override\",\n regularTable._column_sizes?.override[metadata.size_key] !==\n undefined,\n );\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function group_header_style_listener(regularTable) {\n const header_depth = regularTable._view_cache.config.row_pivots.length - 1;\n let group_header_trs = Array.from(\n regularTable.children[0].children[0].children,\n );\n\n const m = [];\n let marked = new Set();\n const table = regularTable.children[0];\n for (let y = 0; y < group_header_trs.length; y++) {\n let row = table.rows[y];\n const tops = new Set();\n for (let x = 0; x < row.cells.length; x++) {\n const td = row.cells[x];\n td.style.backgroundColor = \"\";\n const metadata = regularTable.getMeta(td);\n let needs_border =\n (header_depth > 0 && metadata.row_header_x === header_depth) ||\n metadata.x >= 0;\n\n td.classList.toggle(\"psp-align-right\", false);\n td.classList.toggle(\"psp-align-left\", false);\n td.classList.toggle(\"psp-header-group\", true);\n td.classList.toggle(\"psp-header-leaf\", false);\n td.classList.toggle(\"psp-header-border\", needs_border);\n td.classList.toggle(\n \"psp-header-group-corner\",\n typeof metadata.x === \"undefined\",\n );\n\n td.classList.toggle(\"psp-color-mode-bar\", false);\n td.classList.toggle(\"psp-header-sort-asc\", false);\n td.classList.toggle(\"psp-header-sort-desc\", false);\n td.classList.toggle(\"psp-header-sort-col-asc\", false);\n td.classList.toggle(\"psp-header-sort-col-desc\", false);\n td.classList.toggle(\"psp-sort-enabled\", false);\n\n let cell = row.cells[x],\n xx = x,\n tx,\n ty;\n\n for (; m[y] && m[y][xx]; ++xx);\n tops.add(xx);\n for (tx = xx; tx < xx + cell.colSpan; ++tx) {\n for (ty = y; ty < y + cell.rowSpan; ++ty) {\n if (!m[ty]) m[ty] = [];\n m[ty][tx] = true;\n }\n }\n\n cell.classList.toggle(\"psp-is-top\", y === 0 || !marked.has(tx));\n }\n marked = tops;\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function style_cell_flash(\n metadata,\n td,\n [, , , , , pos_s, pos_e],\n [, , , , , neg_s, neg_e],\n is_settings_open,\n) {\n const id = this._ids?.[metadata.dy]?.join(\"|\");\n const metadata_path = (\n is_settings_open\n ? metadata.column_header.slice(0, -1)\n : metadata.column_header\n ).join(\"|\");\n\n if (\n this.last_reverse_columns?.has(metadata_path) &&\n this.last_reverse_ids?.has(id)\n ) {\n const row_idx = this.last_reverse_ids?.get(id);\n const col_idx = this.last_reverse_columns.get(metadata_path);\n if (!this._is_old_viewport) {\n td.style.animation = \"\";\n } else if (this.last_meta?.[col_idx]?.[row_idx] > metadata.user) {\n td.style.setProperty(\"--pulse--background-color-start\", neg_s);\n td.style.setProperty(\"--pulse--background-color-end\", neg_e);\n if (td.style.animationName === \"pulse_neg\") {\n td.style.animation = \"pulse_neg2 0.5s linear\";\n } else {\n td.style.animation = \"pulse_neg 0.5s linear\";\n }\n } else if (this.last_meta?.[col_idx]?.[row_idx] < metadata.user) {\n td.style.setProperty(\"--pulse--background-color-start\", pos_s);\n td.style.setProperty(\"--pulse--background-color-end\", pos_e);\n if (td.style.animationName === \"pulse_pos\") {\n td.style.animation = \"pulse_pos2 0.5s linear\";\n } else {\n td.style.animation = \"pulse_pos 0.5s linear\";\n }\n } else if (row_idx !== metadata.dy) {\n td.style.animation = \"\";\n }\n } else {\n td.style.animation = \"\";\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport chroma from \"chroma-js\";\n\nexport function blend(a, b) {\n return chroma.mix(a, `rgb(${b[0]},${b[1]},${b[2]})`, 0.5).hex();\n}\n\n// AFAICT `chroma-js` has no alpha-aware blending? So we need a function to get\n// the color of a heatmap cell over the background.\nexport function rgbaToRgb([r, g, b, a], source = [255, 255, 255]) {\n function f(i, c) {\n return ((1 - a) * (source[i] / 255) + a * (c / 255)) * 255;\n }\n\n return [f(0, r), f(1, g), f(2, b)];\n}\n\n// Chroma does this but why bother?\nexport function infer_foreground_from_background([r, g, b]) {\n // TODO Implement dark/light themes.\n return Math.sqrt(r * r * 0.299 + g * g * 0.587 + b * b * 0.114) > 130\n ? \"#161616\"\n : \"#ffffff\";\n}\n\nfunction make_gradient(chromahex) {\n const [r, g, b] = chromahex.rgb();\n const [r1, g1, b1] = chromahex\n .set(\"hsl.h\", (chromahex.get(\"hsl.h\") - 15) % 360)\n .rgb();\n const [r2, g2, b2] = chromahex\n .set(\"hsl.h\", (chromahex.get(\"hsl.h\") + 15) % 360)\n .rgb();\n return `linear-gradient(to right top,rgb(${r1},${g1},${b1}),rgb(${r},${g},${b}) 50%,rgb(${r2},${g2},${b2}))`;\n}\n\nexport function make_color_record(color) {\n const chroma_neg = chroma(color);\n const _neg_grad = make_gradient(chroma_neg);\n const rgb = chroma_neg.rgb();\n\n return [\n color,\n ...rgb,\n _neg_grad,\n `rgba(${rgb[0]},${rgb[1]},${rgb[2]},1)`,\n `rgba(${rgb[0]},${rgb[1]},${rgb[2]},0)`,\n ];\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { style_cell_flash } from \"./cell_flash.js\";\nimport {\n rgbaToRgb,\n infer_foreground_from_background,\n} from \"../../color_utils.js\";\n\nexport function cell_style_numeric(plugin, td, metadata, is_settings_open) {\n const is_positive = metadata.user > 0;\n const is_negative = metadata.user < 0;\n\n let pos_bg_color;\n if (plugin?.pos_bg_color !== undefined) {\n pos_bg_color = plugin.pos_bg_color;\n } else {\n pos_bg_color = this._pos_bg_color;\n }\n\n let neg_bg_color;\n if (plugin?.neg_bg_color !== undefined) {\n neg_bg_color = plugin.neg_bg_color;\n } else {\n neg_bg_color = this._neg_bg_color;\n }\n\n const bg_tuple = is_positive\n ? pos_bg_color\n : is_negative\n ? neg_bg_color\n : [\"\", ...this._plugin_background, \"\"];\n\n {\n const [hex, r, g, b, _gradhex] = bg_tuple;\n\n td.style.position = \"\";\n if (metadata._is_hidden_by_aggregate_depth) {\n td.style.animation = \"\";\n td.style.backgroundColor = \"\";\n } else if (plugin?.number_bg_mode === \"color\") {\n td.style.animation = \"\";\n td.style.backgroundColor = hex;\n } else if (plugin?.number_bg_mode === \"gradient\") {\n const a = Math.max(\n 0,\n Math.min(1, Math.abs(metadata.user / plugin.bg_gradient)),\n );\n const source = this._plugin_background;\n const foreground = infer_foreground_from_background(\n rgbaToRgb([r, g, b, a], source),\n );\n\n td.style.animation = \"\";\n td.style.color = foreground;\n td.style.backgroundColor = `rgba(${r},${g},${b},${a})`;\n } else if (plugin?.number_bg_mode === \"pulse\") {\n // TODO!\n style_cell_flash.call(\n this,\n metadata,\n td,\n pos_bg_color,\n neg_bg_color,\n is_settings_open,\n );\n td.style.backgroundColor = \"\";\n } else if (\n plugin?.number_bg_mode === \"disabled\" ||\n !plugin?.number_bg_mode\n ) {\n td.style.animation = \"\";\n td.style.backgroundColor = \"\";\n } else {\n td.style.animation = \"\";\n td.style.backgroundColor = \"\";\n }\n }\n\n const [hex, r, g, b, gradhex] = (() => {\n if (plugin?.pos_fg_color !== undefined) {\n return is_positive\n ? plugin.pos_fg_color\n : is_negative\n ? plugin.neg_fg_color\n : [\"\", ...this._plugin_background, \"\"];\n } else {\n return is_positive\n ? this._pos_fg_color\n : is_negative\n ? this._neg_fg_color\n : [\"\", ...this._plugin_background, \"\"];\n }\n })();\n\n if (metadata._is_hidden_by_aggregate_depth) {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n } else if (plugin?.number_fg_mode === \"disabled\") {\n if (plugin?.number_bg_mode === \"color\") {\n const source = this._plugin_background;\n const foreground = infer_foreground_from_background(\n rgbaToRgb([bg_tuple[1], bg_tuple[2], bg_tuple[3], 1], source),\n );\n td.style.color = foreground;\n } else if (plugin?.number_bg_mode === \"gradient\") {\n } else {\n td.style.color = \"\";\n }\n } else if (plugin?.number_fg_mode === \"bar\") {\n td.style.color = \"\";\n td.style.position = \"relative\";\n if (\n gradhex !== \"\" &&\n td.children.length > 0 &&\n td.children[0].nodeType === Node.ELEMENT_NODE\n ) {\n td.children[0].style.background = gradhex;\n }\n } else if (plugin?.number_fg_mode === \"color\" || !plugin?.number_fg_mode) {\n td.style.color = hex;\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport chroma from \"chroma-js\";\nimport {\n rgbaToRgb,\n infer_foreground_from_background,\n} from \"../../color_utils.js\";\n\nexport function cell_style_string(plugin, td, metadata) {\n const column_name = metadata.column_header?.[this._config.split_by.length];\n const [hex, r, g, b, gradhex] = (() => {\n if (plugin?.color !== undefined) {\n return plugin.color;\n } else {\n return this._color;\n }\n })();\n\n if (metadata._is_hidden_by_aggregate_depth) {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n } else if (\n plugin?.string_color_mode === \"foreground\" &&\n metadata.user !== null\n ) {\n td.style.color = hex;\n td.style.backgroundColor = \"\";\n if (plugin?.format === \"link\") {\n td.children[0].style.color = hex;\n }\n } else if (\n plugin?.string_color_mode === \"background\" &&\n metadata.user !== null\n ) {\n const source = this._plugin_background;\n const foreground = infer_foreground_from_background(\n rgbaToRgb([r, g, b, 1], source),\n );\n td.style.color = foreground;\n td.style.backgroundColor = hex;\n } else if (\n plugin?.string_color_mode === \"series\" &&\n metadata.user !== null\n ) {\n if (!this._series_color_map.has(column_name)) {\n this._series_color_map.set(column_name, new Map());\n this._series_color_seed.set(column_name, 0);\n }\n\n const series_map = this._series_color_map.get(column_name);\n if (!series_map.has(metadata.user)) {\n const seed = this._series_color_seed.get(column_name);\n series_map.set(metadata.user, seed);\n this._series_color_seed.set(column_name, seed + 1);\n }\n\n const color_seed = series_map.get(metadata.user);\n let [h, s, l] = chroma(hex).hsl();\n h = h + ((color_seed * 150) % 360);\n const color2 = chroma(h, s, l, \"hsl\");\n const [r, g, b] = color2.rgb();\n const hex2 = color2.hex();\n const source = this._plugin_background;\n const foreground = infer_foreground_from_background(\n rgbaToRgb([r, g, b, 1], source),\n );\n td.style.color = foreground;\n td.style.backgroundColor = hex2;\n } else {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport chroma from \"chroma-js\";\nimport {\n rgbaToRgb,\n infer_foreground_from_background,\n} from \"../../color_utils.js\";\n\nexport function cell_style_datetime(plugin, td, metadata) {\n const column_name = metadata.column_header?.[this._config.split_by.length];\n\n const [hex, r, g, b, gradhex] = (() => {\n if (plugin?.color !== undefined) {\n return plugin.color;\n } else {\n return this._color;\n }\n })();\n\n if (metadata._is_hidden_by_aggregate_depth) {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n } else if (\n plugin?.datetime_color_mode === \"foreground\" &&\n metadata.user !== null\n ) {\n td.style.color = hex;\n td.style.backgroundColor = \"\";\n } else if (\n plugin?.datetime_color_mode === \"background\" &&\n metadata.user !== null\n ) {\n const source = this._plugin_background;\n const foreground = infer_foreground_from_background(\n rgbaToRgb([r, g, b, 1], source),\n );\n td.style.color = foreground;\n td.style.backgroundColor = hex;\n } else {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function cell_style_boolean(plugin, td, metadata) {\n if (metadata._is_hidden_by_aggregate_depth) {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n } else {\n const [hex] =\n metadata.user === true\n ? this._pos_fg_color\n : metadata.user === false\n ? this._neg_fg_color\n : [\"\", 0, 0, 0, \"\"];\n td.style.backgroundColor = \"\";\n td.style.color = hex;\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function cell_style_row_header(regularTable, td, metadata) {\n const is_not_empty =\n typeof metadata.value != undefined &&\n typeof metadata.value != null &&\n metadata.value?.toString()?.trim().length > 0;\n const is_leaf = metadata.row_header_x >= this._config.group_by.length;\n const next = regularTable.getMeta({\n dx: 0,\n dy: metadata.y - metadata.y0 + 1,\n });\n const is_collapse =\n next &&\n next.row_header &&\n typeof next.row_header[metadata.row_header_x + 1] !== \"undefined\";\n td.classList.toggle(\"psp-tree-label\", is_not_empty && !is_leaf);\n td.classList.toggle(\n \"psp-tree-label-expand\",\n is_not_empty && !is_leaf && !is_collapse,\n );\n td.classList.toggle(\n \"psp-tree-label-collapse\",\n is_not_empty && !is_leaf && is_collapse,\n );\n td.classList.toggle(\"psp-tree-leaf\", is_not_empty && is_leaf);\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../../model\";\n\nimport { cell_style_numeric } from \"./numeric.js\";\nimport { cell_style_string } from \"./string.js\";\nimport { cell_style_datetime } from \"./datetime.js\";\nimport { cell_style_boolean } from \"./boolean.js\";\nimport { cell_style_row_header } from \"./row_header.js\";\n\nfunction get_psp_type(metadata) {\n if (metadata.x >= 0) {\n return this._column_types[metadata.x];\n } else {\n return this._row_header_types[metadata.row_header_x - 1];\n }\n}\n\nexport function table_cell_style_listener(regularTable, viewer) {\n const plugins = regularTable[PRIVATE_PLUGIN_SYMBOL] || {};\n const is_settings_open = viewer.hasAttribute(\"settings\");\n\n for (const tr of regularTable.children[0].children[1].children) {\n for (const td of tr.children) {\n const metadata = regularTable.getMeta(td);\n\n const column_name =\n metadata.column_header?.[this._config.split_by.length];\n\n let type = get_psp_type.call(this, metadata);\n const plugin = plugins[column_name];\n const is_numeric = type === \"integer\" || type === \"float\";\n\n // Check if aggregate depth hides this cell\n metadata._is_hidden_by_aggregate_depth = ((x) =>\n x === 0\n ? false\n : x - 1 <\n Math.min(\n this._config.group_by.length,\n plugin?.aggregate_depth,\n ))(\n metadata.row_header?.filter((x) => x !== undefined)?.length,\n );\n\n if (is_numeric) {\n cell_style_numeric.call(\n this,\n plugin,\n td,\n metadata,\n is_settings_open,\n );\n } else if (type === \"boolean\") {\n cell_style_boolean.call(this, plugin, td, metadata);\n } else if (type === \"string\") {\n cell_style_string.call(this, plugin, td, metadata);\n } else if (type === \"date\" || type === \"datetime\") {\n cell_style_datetime.call(this, plugin, td, metadata);\n } else {\n td.style.backgroundColor = \"\";\n td.style.color = \"\";\n }\n\n td.classList.toggle(\n \"psp-bool-type\",\n type === \"boolean\" && metadata.user !== null,\n );\n\n const is_th = td.tagName === \"TH\";\n if (is_th) {\n cell_style_row_header.call(this, regularTable, td, metadata);\n }\n\n tr.dataset.y = metadata.y;\n if (\n metadata.row_header_x === undefined ||\n metadata.row_header_x === metadata.row_header.length - 1 ||\n metadata.row_header[metadata.row_header_x + 1] === undefined\n ) {\n td.dataset.y = metadata.y;\n td.dataset.x = metadata.x;\n } else {\n delete td.dataset.y;\n delete td.dataset.x;\n }\n\n td.classList.toggle(\"psp-null\", metadata.value === null);\n td.classList.toggle(\"psp-align-right\", !is_th && is_numeric);\n td.classList.toggle(\"psp-align-left\", is_th || !is_numeric);\n td.classList.toggle(\n \"psp-color-mode-bar\",\n plugin?.number_fg_mode === \"bar\" && is_numeric,\n );\n }\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport async function sortHandler(regularTable, viewer, event, target) {\n const meta = regularTable.getMeta(target);\n const column_name = meta.column_header[this._config.split_by.length];\n const sort_method =\n event.ctrlKey || event.metaKet || event.altKey\n ? append_sort\n : override_sort;\n\n const abs = event.shiftKey;\n const sort = sort_method.call(this, column_name, abs);\n await viewer.restore({ sort });\n}\n\nexport function append_sort(column_name, abs) {\n const sort = [];\n let found = false;\n for (const sort_term of this._config.sort) {\n const [_column_name, _sort_dir] = sort_term;\n if (_column_name === column_name) {\n found = true;\n const term = create_sort.call(this, column_name, _sort_dir, abs);\n if (term) {\n sort.push(term);\n }\n } else {\n sort.push(sort_term);\n }\n }\n if (!found) {\n sort.push([column_name, abs ? \"desc abs\" : \"desc\"]);\n }\n return sort;\n}\n\nexport function override_sort(column_name, abs) {\n for (const [_column_name, _sort_dir] of this._config.sort) {\n if (_column_name === column_name) {\n const sort = create_sort.call(this, column_name, _sort_dir, abs);\n return sort ? [sort] : [];\n }\n }\n return [[column_name, abs ? \"desc abs\" : \"desc\"]];\n}\n\nexport function create_sort(column_name, sort_dir, abs) {\n const is_col_sortable = this._config.split_by.length > 0;\n const order = is_col_sortable ? ROW_COL_SORT_ORDER : ROW_SORT_ORDER;\n let inc_sort_dir = sort_dir ? order[sort_dir] : \"desc\";\n if (inc_sort_dir) {\n return [column_name, inc_sort_dir];\n }\n}\n\nconst ROW_SORT_ORDER = {\n desc: \"asc\",\n asc: undefined,\n \"desc abs\": \"asc abs\",\n \"asc abs\": undefined,\n};\nconst ROW_COL_SORT_ORDER = {\n desc: \"asc\",\n asc: \"col desc\",\n \"desc abs\": \"asc abs\",\n \"asc abs\": \"col desc abs\",\n \"col desc\": \"col asc\",\n \"col asc\": undefined,\n \"col desc abs\": \"col asc abs\",\n \"col asc abs\": undefined,\n};\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport async function expandCollapseHandler(regularTable, event) {\n const meta = regularTable.getMeta(event.target);\n const is_collapse = event.target.classList.contains(\n \"psp-tree-label-collapse\",\n );\n if (event.shiftKey && is_collapse) {\n this._view.set_depth(\n meta.row_header.filter((x) => x !== undefined).length - 2,\n );\n } else if (event.shiftKey) {\n this._view.set_depth(\n meta.row_header.filter((x) => x !== undefined).length - 1,\n );\n } else if (is_collapse) {\n this._view.collapse(meta.y);\n } else {\n this._view.expand(meta.y);\n }\n this._num_rows = await this._view.num_rows();\n this._num_columns = await this._view.num_columns();\n regularTable.draw();\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { sortHandler } from \"./sort.js\";\nimport { expandCollapseHandler } from \"./expand_collapse.js\";\n\nexport async function mousedown_listener(regularTable, viewer, event) {\n if (event.which !== 1) {\n return;\n }\n\n let target = event.target;\n if (target.tagName === \"A\") {\n return;\n }\n\n while (target.tagName !== \"TD\" && target.tagName !== \"TH\") {\n target = target.parentElement;\n if (!regularTable.contains(target)) {\n return;\n }\n }\n\n if (target.classList.contains(\"psp-tree-label\")) {\n expandCollapseHandler.call(this, regularTable, event);\n return;\n }\n\n if (target.classList.contains(\"psp-menu-enabled\")) {\n const meta = regularTable.getMeta(target);\n const column_name = meta.column_header?.[this._config.split_by.length];\n await viewer.toggleColumnSettings(column_name);\n } else if (target.classList.contains(\"psp-sort-enabled\")) {\n sortHandler.call(this, regularTable, viewer, event, target);\n }\n}\n\n// TODO I hav eno idea what this does ...\n\nexport function click_listener(regularTable, event) {\n if (event.which !== 1) {\n return;\n }\n\n let target = event.target;\n while (target.tagName !== \"TD\" && target.tagName !== \"TH\") {\n target = target.parentElement;\n if (!regularTable.contains(target)) {\n return;\n }\n }\n\n if (target.classList.contains(\"psp-tree-label\") && event.offsetX < 26) {\n event.stopImmediatePropagation();\n } else if (\n target.classList.contains(\"psp-header-leaf\") &&\n !target.classList.contains(\"psp-header-corner\")\n ) {\n event.stopImmediatePropagation();\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\n\nfunction isEditable(viewer, allowed = false) {\n const has_pivots =\n this._config.group_by.length === 0 &&\n this._config.split_by.length === 0;\n const selectable = viewer.hasAttribute(\"selectable\");\n const editable =\n allowed || viewer.children[0]?.dataset?.editMode === \"EDIT\";\n return has_pivots && !selectable && editable;\n}\n\nexport function editable_style_listener(table, viewer, datagrid) {\n // Independently check \"editable\" and `isEditable()`, so we can skip\n // the styler entirely if editing was disabled at the time of element\n // creation, but toggle in when e.g. pivots or selectable will\n // affect editability.\n const plugins = table[PRIVATE_PLUGIN_SYMBOL] || {};\n const edit = isEditable.call(this, viewer);\n datagrid.classList.toggle(\n \"edit-mode-allowed\",\n isEditable.call(this, viewer, true),\n );\n\n for (const td of table.querySelectorAll(\"td\")) {\n const meta = table.getMeta(td);\n const type = this.get_psp_type(meta);\n if (edit && this._is_editable[meta.x]) {\n const col_name = meta.column_header[this._config.split_by.length];\n if (type === \"string\" && plugins[col_name]?.format === \"link\") {\n td.toggleAttribute(\"contenteditable\", false);\n td.classList.toggle(\"boolean-editable\", false);\n } else if (type === \"boolean\") {\n td.toggleAttribute(\"contenteditable\", false);\n td.classList.toggle(\"boolean-editable\", meta.user !== null);\n } else {\n if (edit !== td.hasAttribute(\"contenteditable\")) {\n td.toggleAttribute(\"contenteditable\", edit);\n }\n td.classList.toggle(\"boolean-editable\", false);\n }\n } else {\n td.toggleAttribute(\"contenteditable\", false);\n td.classList.toggle(\"boolean-editable\", false);\n }\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\n// const selected_position_map = new WeakMap();\n\nexport const focus_style_listener = (table, _viewer, selected_position_map) => {\n const tds = table.querySelectorAll(\"td\");\n const selected_position = selected_position_map.get(table);\n const host = table.getRootNode();\n if (selected_position) {\n for (const td of tds) {\n const meta = table.getMeta(td);\n if (\n meta.x === selected_position.x &&\n meta.y === selected_position.y\n ) {\n if (host.activeElement !== td) {\n td.focus({ preventScroll: true });\n }\n return true;\n }\n }\n if (\n document.activeElement !== document.body &&\n table.contains(host.activeElement)\n ) {\n host.activeElement.blur();\n }\n }\n};\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function write_cell(table, model, active_cell) {\n const meta = table.getMeta(active_cell);\n const type = model._schema[model._column_paths[meta.x]];\n if (meta) {\n let text = active_cell.textContent;\n const id = model._ids[meta.y - meta.y0][0];\n if (type === \"float\" || type === \"integer\") {\n text = parseFloat(text.replace(/,/g, \"\"));\n if (isNaN(text)) {\n return false;\n }\n } else if (type === \"date\" || type === \"datetime\") {\n text = Date.parse(text);\n if (isNaN(text)) {\n return false;\n }\n } else if (type === \"boolean\") {\n text = text === \"true\" ? false : text === \"false\" ? true : null;\n }\n\n const msg = {\n __INDEX__: id,\n [model._column_paths[meta.x]]: text,\n };\n\n model._table.update([msg], { port_id: model._edit_port });\n return true;\n }\n}\n\nexport function clickListener(table, _viewer, event) {\n const meta = table.getMeta(event.target);\n if (typeof meta?.x !== \"undefined\") {\n const is_editable2 = this._is_editable[meta.x];\n const is_bool = this.get_psp_type(meta) === \"boolean\";\n const is_null = event.target.classList.contains(\"psp-null\");\n if (is_editable2 && is_bool && !is_null) {\n write_cell(table, this, event.target);\n }\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { focus_style_listener } from \"../../style_handlers/focus.js\";\n\nfunction lock(body) {\n let lock;\n return async function (...args) {\n if (!!lock && (await lock) && !!lock) {\n return;\n }\n\n let resolve;\n lock = new Promise((x) => (resolve = x));\n await body.apply(this, args);\n lock = undefined;\n resolve();\n };\n}\n\nfunction getPos() {\n if (this.isContentEditable) {\n let _range = this.getRootNode().getSelection().getRangeAt(0);\n let range = _range.cloneRange();\n range.selectNodeContents(this);\n range.setEnd(_range.endContainer, _range.endOffset);\n return range.toString().length;\n } else {\n return this.target.selectionStart;\n }\n}\n\nconst moveSelection = lock(\n async function (table, selected_position_map, active_cell, dx, dy) {\n const meta = table.getMeta(active_cell);\n const num_columns = this._column_paths.length;\n const num_rows = this._num_rows;\n const selected_position = selected_position_map.get(table);\n if (!selected_position) {\n return;\n }\n\n if (meta.x + dx < num_columns && 0 <= meta.x + dx) {\n selected_position.x = meta.x + dx;\n }\n\n if (meta.y + dy < num_rows && 0 <= meta.y + dy) {\n selected_position.y = meta.y + dy;\n }\n\n const xmin = Math.max(meta.x0 - 10, 0);\n const xmax = Math.min(meta.x0 + 10, num_columns);\n const ymin = Math.max(meta.y0 - 5, 0);\n const ymax = Math.min(meta.y0 + 10, num_rows);\n let x = meta.x0 + dx,\n y = meta.y0 + dy;\n while (\n !focus_style_listener(table, undefined, selected_position_map) &&\n x >= xmin &&\n x < xmax &&\n y >= ymin &&\n y < ymax\n ) {\n await table.scrollToCell(x, y, num_columns, num_rows);\n selected_position_map.set(table, selected_position);\n x += dx;\n y += dy;\n }\n },\n);\n\nfunction isLastCell(model, table, target) {\n const meta = table.getMeta(target);\n return meta.y === model._num_rows - 1;\n}\n\n// Events\nexport function keydownListener(table, viewer, selected_position_map, event) {\n const target = table.getRootNode().activeElement;\n event.target.classList.remove(\"psp-error\");\n switch (event.key) {\n case \"Enter\":\n event.preventDefault();\n if (isLastCell(this, table, target)) {\n target.blur();\n selected_position_map.delete(table);\n } else if (event.shiftKey) {\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n 0,\n -1,\n );\n } else {\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n 0,\n 1,\n );\n }\n break;\n case \"ArrowLeft\":\n if (getPos.call(target) == 0) {\n event.preventDefault();\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n -1,\n 0,\n );\n }\n break;\n case \"ArrowUp\":\n event.preventDefault();\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n 0,\n -1,\n );\n break;\n case \"ArrowRight\":\n if (getPos.call(target) == target.textContent.length) {\n event.preventDefault();\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n 1,\n 0,\n );\n }\n break;\n case \"ArrowDown\":\n event.preventDefault();\n moveSelection.call(\n this,\n table,\n selected_position_map,\n target,\n 0,\n 1,\n );\n break;\n default:\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport * as edit_click from \"./click/edit_click.js\";\nimport * as edit_keydown from \"./keydown/edit_keydown.js\";\n\nexport function is_editable(viewer, allowed = false) {\n const has_pivots =\n this._config.group_by.length === 0 &&\n this._config.split_by.length === 0;\n const selectable = viewer.hasAttribute(\"selectable\");\n const editable = allowed || !!(viewer.children[0]._edit_mode === \"EDIT\");\n return has_pivots && !selectable && editable;\n}\n\nexport function keydownListener(table, viewer, selected_position_map, event) {\n if (this._edit_mode === \"EDIT\") {\n if (!is_editable.call(this, viewer)) {\n return;\n }\n\n edit_keydown.keydownListener.call(\n this,\n table,\n viewer,\n selected_position_map,\n event,\n );\n } else {\n console.debug(\n `Mode ${this._edit_mode} for \"keydown\" event not yet implemented`,\n );\n }\n}\n\nexport function clickListener(table, viewer, event) {\n if (this._edit_mode === \"EDIT\") {\n if (!is_editable.call(this, viewer)) {\n return;\n }\n\n edit_click.clickListener.call(this, table, viewer, event);\n } else if (this._edit_mode === \"READ_ONLY\") {\n } else if (this._edit_mode === \"SELECT_COLUMN\") {\n } else if (this._edit_mode === \"SELECT_ROW\") {\n } else if (this._edit_mode === \"SELECT_REGION\") {\n } else {\n console.debug(\n `Mode ${this._edit_mode} for \"click\" event not yet implemented`,\n );\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { is_editable } from \"./click.js\";\nimport { write_cell } from \"./click/edit_click.js\";\n\nexport function focusoutListener(table, viewer, selected_position_map, event) {\n if (is_editable.call(this, viewer) && selected_position_map.has(table)) {\n event.target.classList.remove(\"psp-error\");\n const selectedPosition = selected_position_map.get(table);\n selected_position_map.delete(table);\n if (selectedPosition.content !== event.target.textContent) {\n if (!write_cell(table, this, event.target)) {\n event.target.textContent = selectedPosition.content;\n event.target.classList.add(\"psp-error\");\n event.target.focus();\n }\n }\n }\n}\n\nexport function focusinListener(table, _viewer, selected_position_map, event) {\n const meta = table.getMeta(event.target);\n if (meta) {\n const new_state = {\n x: meta.x,\n y: meta.y,\n content: event.target.textContent,\n };\n selected_position_map.set(table, new_state);\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport default async function getCellConfig(\n { _view, _config },\n row_idx,\n col_idx,\n) {\n const group_by = _config.group_by;\n const split_by = _config.split_by;\n const start_row = row_idx >= 0 ? row_idx : 0;\n const end_row = start_row + 1;\n const r = await _view.to_json({ start_row, end_row });\n const row_paths = r.map((x) => x.__ROW_PATH__);\n const group_by_values = row_paths[0] || [];\n const row_filters = group_by\n .map((pivot, index) => {\n const pivot_value = group_by_values[index];\n return pivot_value ? [pivot, \"==\", pivot_value] : undefined;\n })\n .filter((x) => x);\n\n const column_index = group_by.length > 0 ? col_idx + 1 : col_idx;\n const column_paths = Object.keys(r[0])[column_index];\n const result = { row: r[0] };\n let column_filters = [];\n if (column_paths) {\n const split_by_values = column_paths.split(\"|\");\n result.column_names = [split_by_values[split_by.length]];\n column_filters = split_by\n .map((pivot, index) => {\n const pivot_value = split_by_values[index];\n return pivot_value ? [pivot, \"==\", pivot_value] : undefined;\n })\n .filter((x) => x)\n .filter(([, , value]) => value !== \"__ROW_PATH__\");\n }\n\n const filter = _config.filter.concat(row_filters).concat(column_filters);\n result.config = { filter };\n return result;\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport getCellConfig from \"../get_cell_config.js\";\n\nexport async function selectionListener(\n regularTable,\n viewer,\n selected_rows_map,\n /** @type {MouseEvent} */\n event,\n) {\n const meta = regularTable.getMeta(event.target);\n if (!viewer.hasAttribute(\"selectable\")) return;\n if (event.handled) return;\n if (event.shiftKey) return;\n if (event.button !== 0) {\n return;\n }\n event.stopImmediatePropagation();\n\n if (!meta) {\n return;\n }\n\n const id = this._ids?.[meta.y - meta.y0];\n if (meta && meta.y >= 0) {\n const selected = selected_rows_map.get(regularTable);\n const key_match =\n !!selected &&\n selected.reduce((agg, x, i) => agg && x === id[i], true);\n\n const is_deselect =\n !!selected && id.length === selected.length && key_match;\n\n let detail = { selected: !is_deselect };\n const { row, column_names, config } = await getCellConfig(\n this,\n meta.y,\n meta.x,\n );\n\n if (is_deselect) {\n selected_rows_map.delete(regularTable);\n detail = {\n ...detail,\n row,\n config: { filter: structuredClone(this._config.filter) },\n };\n } else {\n selected_rows_map.set(regularTable, id);\n detail = { ...detail, row, column_names, config };\n }\n\n await regularTable.draw({ preserve_width: true });\n event.handled = true;\n viewer.dispatchEvent(\n new CustomEvent(\"perspective-select\", {\n bubbles: true,\n composed: true,\n detail,\n }),\n );\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport function selectionStyleListener(\n regularTable,\n viewer,\n selected_rows_map,\n) {\n if (!viewer.hasAttribute(\"selectable\")) return;\n const has_selected = selected_rows_map.has(regularTable);\n const selected = selected_rows_map.get(regularTable);\n for (const td of regularTable.querySelectorAll(\"td\")) {\n if (!has_selected) {\n td.classList.toggle(\"psp-row-selected\", false);\n td.classList.toggle(\"psp-row-subselected\", false);\n } else {\n const meta = regularTable.getMeta(td);\n const id = this._ids[meta.y - meta.y0];\n const key_match = selected.reduce(\n (agg, x, i) => agg && x === id[i],\n true,\n );\n td.classList.toggle(\n \"psp-row-selected\",\n id.length === selected.length && key_match,\n );\n td.classList.toggle(\n \"psp-row-subselected\",\n id.length !== selected.length && key_match,\n );\n }\n }\n\n for (const th of regularTable.querySelectorAll(\"tbody th\")) {\n const meta = regularTable.getMeta(th);\n const id = this._ids[meta.y - meta.y0];\n if (!has_selected || !!id[meta.row_header_x]) {\n th.classList.toggle(\"psp-row-selected\", false);\n th.classList.toggle(\"psp-row-subselected\", false);\n } else {\n const key_match = selected.reduce(\n (agg, x, i) => agg && x === id[i],\n true,\n );\n th.classList.toggle(\n \"psp-row-selected\",\n id.length === selected.length && key_match,\n );\n th.classList.toggle(\n \"psp-row-subselected\",\n id.length !== selected.length && key_match,\n );\n }\n }\n}\n\n// export function configureRowSelectable(table, viewer) {\n// table.addStyleListener(selectionStyleListener.bind(this, table, viewer));\n// table.addEventListener(\n// \"mousedown\",\n// selectionListener.bind(this, table, viewer)\n// );\n// }\n\n// export async function deselect(regularTable) {\n// selected_rows_map.delete(regularTable);\n// for (const td of regularTable.querySelectorAll(\"td,th\")) {\n// td.classList.toggle(\"psp-row-selected\", false);\n// td.classList.toggle(\"psp-row-subselected\", false);\n// }\n// }\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport async function deselect_all_listener(\n regularTable,\n _viewer,\n selected_rows_map,\n) {\n selected_rows_map.delete(regularTable);\n for (const td of regularTable.querySelectorAll(\"td,th\")) {\n td.classList.toggle(\"psp-row-selected\", false);\n td.classList.toggle(\"psp-row-subselected\", false);\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport chroma from \"chroma-js\";\nimport { createDataListener } from \"../data_listener\";\nimport { blend, make_color_record } from \"../color_utils.js\";\n\nfunction get_rule(regular, tag, def) {\n let color = window.getComputedStyle(regular).getPropertyValue(tag).trim();\n if (color.length > 0) {\n return color;\n } else {\n return def;\n }\n}\n\nclass ElemFactory {\n constructor(name) {\n this._name = name;\n this._elements = [];\n this._index = 0;\n }\n\n clear() {\n this._index = 0;\n }\n\n get() {\n if (!this._elements[this._index]) {\n this._elements[this._index] = document.createElement(this._name);\n }\n const elem = this._elements[this._index];\n this._index += 1;\n return elem;\n }\n}\n\nfunction get_psp_type(metadata) {\n if (metadata.x >= 0) {\n return this._column_types[metadata.x];\n } else {\n return this._row_header_types[metadata.row_header_x - 1];\n }\n}\n\nexport async function createModel(regular, table, view, extend = {}) {\n const config = await view.get_config();\n if (this?.model?._config) {\n const old = this.model._config;\n let group_by_changed = old.group_by.length !== config.group_by.length;\n const type_changed =\n (old.group_by.length === 0 || config.group_by.length === 0) &&\n group_by_changed;\n\n if (!group_by_changed) {\n for (const lvl in old.group_by) {\n group_by_changed ||= config.group_by[lvl] !== old.group_by[lvl];\n }\n }\n\n let split_by_changed = old.split_by.length !== config.split_by.length;\n if (split_by_changed) {\n for (const lvl in old.split_by) {\n split_by_changed ||= config.split_by[lvl] !== old.split_by[lvl];\n }\n }\n\n let columns_changed = old.columns.length !== config.columns.length;\n if (columns_changed) {\n for (const lvl in old.columns) {\n columns_changed ||= config.columns[lvl] !== old.columns[lvl];\n }\n }\n\n let filter_changed = old.filter.length !== config.filter.length;\n if (filter_changed) {\n for (const lvl in old.filter) {\n for (const i in config.filter[lvl]) {\n filter_changed ||=\n config.filter[lvl][i] !== old.filter[lvl][i];\n }\n }\n }\n\n let sort_changed = old.sort.length !== config.sort.length;\n if (sort_changed) {\n for (const lvl in old.sort) {\n for (const i in config.sort[lvl]) {\n sort_changed ||= config.sort[lvl][i] !== old.sort[lvl][i];\n }\n }\n }\n\n this._reset_scroll_top = group_by_changed;\n this._reset_scroll_left = split_by_changed;\n this._reset_select =\n group_by_changed ||\n split_by_changed ||\n filter_changed ||\n sort_changed ||\n columns_changed;\n\n this._reset_column_size =\n split_by_changed ||\n group_by_changed ||\n columns_changed ||\n type_changed;\n }\n\n const [table_schema, num_rows, schema, expression_schema, _edit_port] =\n await Promise.all([\n table.schema(),\n view.num_rows(),\n view.schema(),\n view.expression_schema(),\n this.parentElement.getEditPort(),\n ]);\n\n const _plugin_background = chroma(\n get_rule(regular, \"--plugin--background\", \"#FFFFFF\"),\n ).rgb();\n\n const _pos_fg_color = make_color_record(\n get_rule(regular, \"--rt-pos-cell--color\", \"#338DCD\"),\n );\n\n const _neg_fg_color = make_color_record(\n get_rule(regular, \"--rt-neg-cell--color\", \"#FF5942\"),\n );\n\n const _pos_bg_color = make_color_record(\n blend(_pos_fg_color[0], _plugin_background),\n );\n\n const _neg_bg_color = make_color_record(\n blend(_neg_fg_color[0], _plugin_background),\n );\n\n const _color = make_color_record(\n get_rule(regular, \"--active--color\", \"#ff0000\"),\n );\n\n const _schema = { ...schema, ...expression_schema };\n const _table_schema = {\n ...table_schema,\n ...expression_schema,\n };\n\n const _column_paths = [];\n const _is_editable = [];\n const _column_types = [];\n\n let _edit_mode = this._edit_mode || \"READ_ONLY\";\n this._edit_button.dataset.editMode = _edit_mode;\n const model = Object.assign(extend, {\n _edit_port,\n _view: view,\n _table: table,\n _table_schema,\n _config: config,\n _num_rows: num_rows,\n _schema,\n _ids: [],\n _plugin_background,\n _color,\n _pos_fg_color,\n _neg_fg_color,\n _pos_bg_color,\n _neg_bg_color,\n _column_paths,\n _column_types,\n _is_editable,\n _edit_mode,\n _selection_state: {\n selected_areas: [],\n dirty: false,\n },\n _row_header_types: config.group_by.map((column_path) => {\n return _table_schema[column_path];\n }),\n _series_color_map: new Map(),\n _series_color_seed: new Map(),\n get_psp_type,\n });\n\n // Re-use div factory\n model._div_factory = model._div_factory || new ElemFactory(\"div\");\n regular.setDataListener(\n createDataListener(this.parentElement).bind(model, regular),\n {\n virtual_mode:\n window\n .getComputedStyle(regular)\n .getPropertyValue(\"--datagrid-virtual-mode\")\n ?.trim() || \"both\",\n },\n );\n\n return model;\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nconst FORMATTER_CONS = {\n datetime: Intl.DateTimeFormat,\n date: Intl.DateTimeFormat,\n integer: Intl.NumberFormat,\n float: Intl.NumberFormat,\n boolean: class {\n format(val) {\n return val ? \"true\" : \"false\";\n }\n },\n};\n\nconst LEGACY_CONFIG = {\n types: {\n float: {\n format: {\n style: \"decimal\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n },\n },\n datetime: {\n format: {\n dateStyle: \"short\",\n timeStyle: \"medium\",\n },\n },\n date: {\n format: {\n dateStyle: \"short\",\n },\n },\n },\n};\n\nexport class FormatterCache {\n constructor() {\n this._formatters = new Map();\n }\n\n create_datetime_formatter(type, plugin) {\n const type_config = {\n dateStyle: \"short\",\n timeStyle: \"medium\",\n };\n\n if (plugin.date_format?.format !== \"custom\") {\n const options = {\n ...type_config,\n timeZone: plugin.date_format?.timeZone,\n dateStyle: plugin.date_format?.dateStyle,\n timeStyle: plugin.date_format?.timeStyle,\n };\n if (options.dateStyle === \"disabled\") {\n options.dateStyle = undefined;\n } else if (options.dateStyle === undefined) {\n options.dateStyle = \"short\";\n }\n\n if (options.timeStyle === \"disabled\") {\n options.timeStyle = undefined;\n } else if (options.timeStyle === undefined) {\n options.timeStyle = \"medium\";\n }\n\n return new Intl.DateTimeFormat(navigator.languages, options);\n } else {\n const options = {\n // ...type_config.format,\n timeZone: plugin.date_format?.timeZone,\n second: plugin.date_format?.second,\n minute: plugin.date_format?.minute,\n hour: plugin.date_format?.hour,\n day: plugin.date_format?.day,\n weekday: plugin.date_format?.weekday,\n month: plugin.date_format?.month,\n year: plugin.date_format?.year,\n hour12: plugin.date_format?.hour12,\n fractionalSecondDigits:\n plugin.date_format?.fractionalSecondDigits,\n };\n\n if (options.year === \"disabled\") {\n options.year = undefined;\n } else if (options.year === undefined) {\n options.year = \"2-digit\";\n }\n\n if (options.month === \"disabled\") {\n options.month = undefined;\n } else if (options.month === undefined) {\n options.month = \"numeric\";\n }\n\n if (options.day === \"disabled\") {\n options.day = undefined;\n } else if (options.day === undefined) {\n options.day = \"numeric\";\n }\n\n if (options.weekday === \"disabled\") {\n options.weekday = undefined;\n }\n\n if (options.hour === \"disabled\") {\n options.hour = undefined;\n } else if (options.hour === undefined) {\n options.hour = \"numeric\";\n }\n\n if (options.minute === \"disabled\") {\n options.minute = undefined;\n } else if (options.minute === undefined) {\n options.minute = \"numeric\";\n }\n\n if (options.second === \"disabled\") {\n options.second = undefined;\n } else if (options.second === undefined) {\n options.second = \"numeric\";\n }\n\n if (options.hour12 === undefined) {\n options.hour12 = true;\n }\n\n return new Intl.DateTimeFormat(navigator.languages, options);\n }\n }\n\n create_date_formatter(type, plugin) {\n const options = {\n dateStyle: plugin.date_format?.dateStyle,\n timeZone: \"utc\",\n };\n\n if (options.dateStyle === \"disabled\") {\n options.dateStyle = undefined;\n } else if (options.dateStyle === undefined) {\n options.dateStyle = \"short\";\n }\n\n return new Intl.DateTimeFormat(navigator.languages, options);\n }\n\n create_number_formatter(type, plugin) {\n let format = LEGACY_CONFIG.types[type]?.format;\n if (plugin.number_format !== undefined) {\n format = plugin.number_format;\n }\n\n return new FORMATTER_CONS[type](navigator.languages, format);\n }\n\n create_boolean_formatter(type, plugin) {\n return new FORMATTER_CONS[type](navigator.languages, {});\n }\n\n get(type, plugin) {\n let formatter_key = [\n type,\n ...Object.values(plugin.date_format ?? {}),\n ...Object.values(plugin.number_format ?? {}),\n ].join(\"-\");\n\n if (!this._formatters.has(formatter_key)) {\n if (type === \"date\") {\n this._formatters.set(\n formatter_key,\n this.create_date_formatter(type, plugin),\n );\n } else if (type === \"datetime\") {\n this._formatters.set(\n formatter_key,\n this.create_datetime_formatter(type, plugin),\n );\n } else if (type === \"integer\" || type === \"float\") {\n this._formatters.set(\n formatter_key,\n this.create_number_formatter(type, plugin),\n );\n } else if (type === \"boolean\") {\n this._formatters.set(\n formatter_key,\n this.create_boolean_formatter(type, plugin),\n );\n } else {\n this._formatters.set(formatter_key, false);\n }\n }\n\n return this._formatters.get(formatter_key);\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { FormatterCache } from \"./formatter_cache\";\n\nconst FORMAT_CACHE = new FormatterCache();\nconst MAX_BAR_WIDTH_PCT = 1;\n\nexport function format_raw(type, value) {\n return FORMAT_CACHE.get(type, value);\n}\n\n/**\n * Format a single cell's text content as the content of a `<td>` or `<th>`.\n *\n * @param {*} parts\n * @param {*} val\n * @param {*} plugins\n * @param {*} use_table_schema\n * @returns\n */\nexport function format_cell(\n title,\n val,\n plugins = {},\n use_table_schema = false,\n) {\n if (val === null) {\n return null;\n }\n\n const type =\n (use_table_schema && this._table_schema[title]) ||\n this._schema[title] ||\n \"string\";\n const plugin = plugins[title] || {};\n const is_numeric = type === \"integer\" || type === \"float\";\n if (is_numeric && plugin?.number_fg_mode === \"bar\") {\n const a = Math.max(\n 0,\n Math.min(\n MAX_BAR_WIDTH_PCT,\n Math.abs(val / plugin.fg_gradient) * MAX_BAR_WIDTH_PCT,\n ),\n );\n\n const div = this._div_factory.get();\n const anchor = val >= 0 ? \"left\" : \"right\";\n const pct = (a * 100).toFixed(2);\n div.setAttribute(\n \"style\",\n `width:calc(${pct}% - 4px);position:absolute;${anchor}:2px;height:80%;top:10%;pointer-events:none;`,\n );\n\n return div;\n } else if (plugin?.format === \"link\" && type === \"string\") {\n const anchor = document.createElement(\"a\");\n anchor.setAttribute(\"href\", val);\n anchor.setAttribute(\"target\", \"_blank\");\n anchor.textContent = val;\n return anchor;\n } else if (plugin?.format === \"bold\" && type === \"string\") {\n const anchor = document.createElement(\"b\");\n anchor.textContent = val;\n return anchor;\n } else if (plugin?.format === \"italics\" && type === \"string\") {\n const anchor = document.createElement(\"i\");\n anchor.textContent = val;\n return anchor;\n } else {\n const formatter = FORMAT_CACHE.get(type, plugin);\n return formatter ? formatter.format(val) : val;\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\nimport { format_cell } from \"./format_cell.js\";\n\n/**\n * Format a single cell of the `group_by` tree header.\n *\n * @param {*} paths\n * @param {*} row_headers\n * @param {*} regularTable\n */\nexport function* format_tree_header_row_path(\n paths = [],\n row_headers,\n regularTable,\n) {\n const plugins = regularTable[PRIVATE_PLUGIN_SYMBOL];\n for (let path of paths) {\n path = [\"TOTAL\", ...path];\n const last = path[path.length - 1];\n path = path.slice(0, path.length - 1).fill(\"\");\n const formatted = format_cell.call(\n this,\n row_headers[path.length - 1],\n last,\n plugins,\n true,\n );\n\n if (formatted instanceof HTMLElement) {\n path = path.concat(formatted);\n } else {\n path = path.concat({ toString: () => formatted });\n }\n\n path.length = row_headers.length + 1;\n yield path;\n }\n}\n\nexport function* format_tree_header(paths = [], row_headers, regularTable) {\n const plugins = regularTable[PRIVATE_PLUGIN_SYMBOL];\n for (let path of paths) {\n const new_path = [\"\"];\n for (const idx in path) {\n new_path.push(\n format_cell.call(\n this,\n row_headers[idx],\n path[idx],\n plugins,\n true,\n ),\n );\n }\n\n yield path;\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\nimport { format_cell } from \"./format_cell.js\";\nimport {\n format_tree_header,\n format_tree_header_row_path,\n} from \"./format_tree_header.js\";\n\n/**\n * Creates a new DataListener, suitable for passing to `regular-table`'s\n * `.setDataListener()` method. This should be called as a method on the\n * plugin.\n *\n * @returns A data listener for the plugin.\n */\nexport function createDataListener(viewer) {\n let last_meta;\n let last_column_paths;\n let last_ids;\n let last_reverse_ids;\n let last_reverse_columns;\n return async function dataListener(regularTable, x0, y0, x1, y1) {\n let columns = {};\n const new_window = {\n start_row: y0,\n start_col: x0,\n end_row: y1,\n end_col: x1,\n id: true,\n };\n\n let num_columns = null;\n\n if (x1 - x0 > 0 && y1 - y0 > 0) {\n this._is_old_viewport =\n this._last_window?.start_row === y0 &&\n this._last_window?.end_row === y1 &&\n this._last_window?.start_col === x0 &&\n this._last_window?.end_col === x1;\n\n // if (this._config.split_by?.length > 0) {\n const [x, z] = await Promise.all([\n this._view.to_columns_string(new_window),\n this._view.num_columns(),\n // this._view.column_paths(new_window),\n ]);\n\n num_columns = z;\n columns = JSON.parse(x);\n const y = Object.keys(columns);\n const new_col_paths = y.filter(\n (x) => x !== \"__ROW_PATH__\" && x !== \"__ID__\",\n );\n\n const old_length = this._column_paths.length;\n this._column_paths.splice(\n new_window.start_col,\n new_col_paths.length,\n ...new_col_paths,\n );\n\n if (this._column_paths.length !== old_length || old_length === 0) {\n const [a, b] = await Promise.all([\n this._view.schema(),\n this._view.expression_schema(),\n ]);\n\n this._schema = { ...a, ...b };\n for (let i = 0; i < new_col_paths.length; i++) {\n const column_path_parts = new_col_paths[i].split(\"|\");\n const column =\n column_path_parts[this._config.split_by.length];\n\n this._is_editable[i + new_window.start_col] =\n !!this._table_schema[column];\n\n this._column_types[i + new_window.start_col] =\n this._schema[column];\n }\n }\n\n this._last_window = new_window;\n this._ids =\n columns.__ID__ ||\n Array(y1 - y0)\n .fill()\n .map((_, index) => [index + y0]);\n\n this._reverse_columns = this._column_paths\n .slice(x0, x1)\n .reduce((acc, x, i) => {\n acc.set(x, i);\n return acc;\n }, new Map());\n\n this._reverse_ids = this._ids?.reduce((acc, x, i) => {\n acc.set(x?.join(\"|\"), i);\n return acc;\n }, new Map());\n } else {\n this._div_factory.clear();\n num_columns = await this._view.num_columns();\n }\n\n const data = [],\n metadata = [],\n column_headers = [],\n column_paths = [];\n\n const is_settings_open = viewer.hasAttribute(\"settings\");\n for (\n let ipath = x0;\n ipath < Math.min(x1, this._column_paths.length);\n ++ipath\n ) {\n const path = this._column_paths[ipath];\n const path_parts = path.split(\"|\");\n const column = columns[path] || new Array(y1 - y0).fill(null);\n const agg_depth = Math.min(\n regularTable[PRIVATE_PLUGIN_SYMBOL]?.[\n path_parts[this._config.split_by.length]\n ]?.aggregate_depth || 0,\n this._config.group_by.length,\n );\n\n data.push(\n column.map((x, i) => {\n if (columns?.__ROW_PATH__?.[i]?.length < agg_depth) {\n return \"\";\n } else {\n return format_cell.call(\n this,\n path_parts[this._config.split_by.length],\n x,\n regularTable[PRIVATE_PLUGIN_SYMBOL],\n );\n }\n }),\n );\n\n metadata.push(column);\n if (is_settings_open) {\n path_parts.push(\"\");\n }\n\n column_headers.push(path_parts);\n column_paths.push(path);\n }\n\n // Only update the last state if this is not a \"phantom\" call.\n if (x1 - x0 > 0 && y1 - y0 > 0) {\n this.last_column_paths = last_column_paths;\n this.last_meta = last_meta;\n this.last_ids = last_ids;\n this.last_reverse_ids = last_reverse_ids;\n this.last_reverse_columns = last_reverse_columns;\n\n last_column_paths = column_paths;\n last_meta = metadata;\n last_ids = this._ids;\n last_reverse_ids = this._reverse_ids;\n last_reverse_columns = this._reverse_columns;\n }\n\n const is_row_path = columns.__ROW_PATH__ !== undefined;\n const row_headers = Array.from(\n (is_row_path\n ? format_tree_header_row_path\n : format_tree_header\n ).call(\n this,\n columns.__ROW_PATH__,\n this._config.group_by,\n regularTable,\n ),\n );\n\n const num_row_headers = row_headers[0]?.length;\n\n const result = {\n num_column_headers: column_headers[0]?.length || 1,\n num_row_headers,\n num_rows: this._num_rows,\n num_columns,\n row_headers,\n column_headers,\n data,\n metadata,\n column_header_merge_depth: Math.max(\n 0,\n this._config.split_by.length,\n ),\n };\n\n return result;\n };\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport getCellConfig from \"../get_cell_config\";\n\nexport async function dispatch_click_listener(table, viewer, event) {\n const meta = table.getMeta(event.target);\n if (!meta) return;\n const { x, y } = meta;\n\n const { row, column_names, config } = await getCellConfig(this, y, x);\n\n viewer.dispatchEvent(\n new CustomEvent(\"perspective-click\", {\n bubbles: true,\n composed: true,\n detail: {\n row,\n column_names,\n config,\n },\n }),\n );\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\n// const PRIVATE = Symbol(\"Area Mouse Selection\");\nconst MOUSE_SELECTED_AREA_CLASS = \"mouse-selected-area\";\n\nexport const addAreaMouseSelection = (\n datagrid,\n table,\n { className = MOUSE_SELECTED_AREA_CLASS, selected = [] } = {},\n) => {\n datagrid.model._selection_state = {\n selected_areas: selected,\n dirty: true,\n };\n\n table.addEventListener(\n \"mousedown\",\n getMousedownListener(datagrid, table, className),\n );\n\n table.addEventListener(\n \"mouseover\",\n getMouseoverListener(datagrid, table, className),\n );\n\n table.addEventListener(\n \"mouseup\",\n getMouseupListener(datagrid, table, className),\n );\n\n table.addStyleListener(() =>\n applyMouseAreaSelections(datagrid, table, className),\n );\n\n return table;\n};\n\nconst getMousedownListener = (datagrid, table, className) => (event) => {\n if (\n event.button === 0 &&\n (datagrid.model._edit_mode === \"SELECT_REGION\" ||\n datagrid.model._edit_mode === \"SELECT_ROW\" ||\n datagrid.model._edit_mode === \"SELECT_COLUMN\")\n ) {\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES = {};\n const meta = table.getMeta(event.target);\n if (meta && meta.x !== undefined && meta.y !== undefined) {\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES = {\n x: meta.x,\n y: meta.y,\n };\n\n // // TODO: Enable multiselect here\n // if (!event.ctrlKey && !event.metaKey) {\n // datagrid.model._selection_state.selected_areas = [];\n // }\n\n datagrid.model._selection_state.old_selected_areas =\n datagrid.model._selection_state.selected_areas;\n datagrid.model._selection_state.selected_areas = [];\n\n const start = {\n x0: meta.x,\n x1: meta.x,\n y0: meta.y,\n y1: meta.y,\n };\n datagrid.model._selection_state.potential_selection = start;\n applyMouseAreaSelections(\n datagrid,\n table,\n className,\n datagrid.model._selection_state.selected_areas.concat([start]),\n );\n\n return;\n }\n }\n\n datagrid.model._selection_state.selected_areas = [];\n};\n\nconst getMouseoverListener = (datagrid, table, className) => (event) => {\n if (\n datagrid.model._edit_mode === \"SELECT_REGION\" ||\n datagrid.model._edit_mode === \"SELECT_ROW\" ||\n datagrid.model._edit_mode === \"SELECT_COLUMN\"\n ) {\n if (\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES &&\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.x !==\n undefined\n ) {\n const meta = table.getMeta(event.target);\n if (meta && meta.x !== undefined && meta.y !== undefined) {\n const potentialSelection = {\n x0: Math.min(\n meta.x,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.x,\n ),\n x1: Math.max(\n meta.x,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.x,\n ),\n y0: Math.min(\n meta.y,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.y,\n ),\n y1: Math.max(\n meta.y,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.y,\n ),\n };\n\n datagrid.model._selection_state.potential_selection =\n potentialSelection;\n\n applyMouseAreaSelections(\n datagrid,\n table,\n className,\n datagrid.model._selection_state.selected_areas.concat([\n potentialSelection,\n ]),\n );\n }\n }\n }\n};\n\nconst getMouseupListener = (datagrid, table, className) => (event) => {\n if (\n datagrid.model._edit_mode === \"SELECT_REGION\" ||\n datagrid.model._edit_mode === \"SELECT_ROW\" ||\n datagrid.model._edit_mode === \"SELECT_COLUMN\"\n ) {\n const meta = table.getMeta(event.target);\n if (datagrid.model._selection_state.old_selected_areas?.length > 0) {\n const selected =\n datagrid.model._selection_state.old_selected_areas[0];\n if (\n selected.x0 === selected.x1 &&\n selected.y0 === selected.y1 &&\n selected.x0 === meta.x &&\n selected.y0 === meta.y\n ) {\n datagrid.model._selection_state.selected_areas = [];\n datagrid.model._selection_state.old_selected_areas = [];\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES =\n {};\n datagrid.model._selection_state.potential_selection = undefined;\n applyMouseAreaSelections(datagrid, table, className, []);\n return;\n }\n }\n\n datagrid.model._selection_state.old_selected_areas = [];\n\n if (\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES &&\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.x !==\n undefined &&\n meta.x !== undefined &&\n meta.y !== undefined\n ) {\n const selection = {\n x0: Math.min(\n meta.x,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.x,\n ),\n x1: Math.max(\n meta.x,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.x,\n ),\n y0: Math.min(\n meta.y,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.y,\n ),\n y1: Math.max(\n meta.y,\n datagrid.model._selection_state\n .CURRENT_MOUSEDOWN_COORDINATES.y,\n ),\n };\n datagrid.model._selection_state.selected_areas.push(selection);\n applyMouseAreaSelections(datagrid, table, className);\n }\n\n datagrid.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES = {};\n datagrid.model._selection_state.potential_selection = undefined;\n }\n};\n\nfunction set_psp_selection(viewer, datagrid, { x0, x1, y0, y1 }) {\n const viewport = {};\n const mode = datagrid.model._edit_mode;\n if (\n x0 !== undefined &&\n [\"SELECT_COLUMN\", \"SELECT_REGION\"].indexOf(mode) > -1\n ) {\n viewport.start_col = x0;\n }\n\n if (\n x1 !== undefined &&\n [\"SELECT_COLUMN\", \"SELECT_REGION\"].indexOf(mode) > -1\n ) {\n viewport.end_col = x1 + 1;\n }\n\n if (\n y0 !== undefined &&\n [\"SELECT_ROW\", \"SELECT_REGION\"].indexOf(mode) > -1\n ) {\n viewport.start_row = y0;\n }\n\n if (\n y1 !== undefined &&\n [\"SELECT_ROW\", \"SELECT_REGION\"].indexOf(mode) > -1\n ) {\n viewport.end_row = y1 + 1;\n }\n\n viewer.setSelection(viewport);\n}\n\nexport const applyMouseAreaSelections = (\n datagrid,\n table,\n className,\n selected,\n) => {\n if (\n datagrid.model._edit_mode === \"SELECT_REGION\" ||\n datagrid.model._edit_mode === \"SELECT_ROW\" ||\n datagrid.model._edit_mode === \"SELECT_COLUMN\"\n ) {\n selected = datagrid.model._selection_state.selected_areas.slice(0);\n if (datagrid.model._selection_state.potential_selection) {\n selected.push(datagrid.model._selection_state.potential_selection);\n }\n\n const tds = table.querySelectorAll(\"tbody td\");\n\n if (selected.length > 0) {\n set_psp_selection(datagrid.parentElement, datagrid, selected[0]);\n applyMouseAreaSelection(datagrid, table, selected, className);\n } else {\n datagrid.parentElement.setSelection();\n for (const td of tds) {\n td.classList.remove(className);\n }\n }\n } else if (datagrid.model._selection_state.dirty) {\n datagrid.model._selection_state.dirty = false;\n const tds = table.querySelectorAll(\"tbody td\");\n for (const td of tds) {\n td.classList.remove(className);\n }\n }\n};\n\nconst applyMouseAreaSelection = (datagrid, table, selected, className) => {\n if (datagrid.model._edit_mode === \"SELECT_REGION\" && selected.length > 0) {\n const tds = table.querySelectorAll(\"tbody td\");\n\n for (const td of tds) {\n const meta = table.getMeta(td);\n let rendered = false;\n for (const { x0, x1, y0, y1 } of selected) {\n if (\n x0 !== undefined &&\n y0 !== undefined &&\n x1 !== undefined &&\n y1 !== undefined\n ) {\n if (\n x0 <= meta.x &&\n meta.x <= x1 &&\n y0 <= meta.y &&\n meta.y <= y1\n ) {\n rendered = true;\n datagrid.model._selection_state.dirty = true;\n td.classList.add(className);\n }\n }\n }\n\n if (!rendered) {\n td.classList.remove(className);\n }\n }\n } else if (\n datagrid.model._edit_mode === \"SELECT_ROW\" &&\n selected.length > 0\n ) {\n const tds = table.querySelectorAll(\"tbody td\");\n\n for (const td of tds) {\n const meta = table.getMeta(td);\n let rendered = false;\n for (const { x0, x1, y0, y1 } of selected) {\n if (\n x0 !== undefined &&\n y0 !== undefined &&\n x1 !== undefined &&\n y1 !== undefined\n ) {\n if (y0 <= meta.y && meta.y <= y1) {\n datagrid.model._selection_state.dirty = true;\n rendered = true;\n td.classList.add(className);\n }\n }\n }\n\n if (!rendered) {\n td.classList.remove(className);\n }\n }\n } else if (\n datagrid.model._edit_mode === \"SELECT_COLUMN\" &&\n selected.length > 0\n ) {\n const tds = table.querySelectorAll(\"tbody td\");\n\n for (const td of tds) {\n const meta = table.getMeta(td);\n let rendered = false;\n for (const { x0, x1, y0, y1 } of selected) {\n if (\n x0 !== undefined &&\n y0 !== undefined &&\n x1 !== undefined &&\n y1 !== undefined\n ) {\n if (x0 <= meta.x && meta.x <= x1) {\n datagrid.model._selection_state.dirty = true;\n rendered = true;\n td.classList.add(className);\n }\n }\n }\n\n if (!rendered) {\n td.classList.remove(className);\n }\n }\n }\n};\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport {\n column_header_style_listener,\n style_selected_column,\n} from \"../style_handlers/column_header.js\";\nimport { group_header_style_listener } from \"../style_handlers/group_header.js\";\nimport { table_cell_style_listener } from \"../style_handlers/table_cell\";\nimport {\n click_listener,\n mousedown_listener,\n} from \"../event_handlers/header_click.js\";\n\nimport { editable_style_listener } from \"../style_handlers/editable.js\";\nimport { focus_style_listener } from \"../style_handlers/focus.js\";\nimport { focusinListener, focusoutListener } from \"../event_handlers/focus.js\";\nimport { keydownListener, clickListener } from \"../event_handlers/click.js\";\n\nimport { selectionListener } from \"../event_handlers/row_select_click\";\nimport { selectionStyleListener } from \"../style_handlers/selection\";\nimport { deselect_all_listener } from \"../event_handlers/deselect_all.js\";\n\nimport { createModel } from \"../model/create.js\";\nimport { dispatch_click_listener } from \"../event_handlers/dispatch_click\";\n\nimport { addAreaMouseSelection } from \"../event_handlers/select_region.js\";\n\n/**\n * Lazy initialize this plugin with various listeners.\n */\nexport async function activate(view) {\n let viewer = this.parentElement;\n let table = await viewer.getTable(true);\n\n if (!this._initialized) {\n this.innerHTML = \"\";\n if (this.shadowRoot) {\n this.shadowRoot.appendChild(this.regular_table);\n } else {\n this.appendChild(this.regular_table);\n }\n\n this.model = await createModel.call(\n this,\n this.regular_table,\n table,\n view,\n );\n\n if (!this.model) {\n return;\n }\n\n addAreaMouseSelection(this, this.regular_table, {\n className: \"psp-select-region\",\n });\n\n this.regular_table.addStyleListener(\n table_cell_style_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n ),\n );\n\n this.regular_table.addStyleListener(\n group_header_style_listener.bind(this.model, this.regular_table),\n );\n\n this.regular_table.addStyleListener(\n column_header_style_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n ),\n );\n\n // uh ..\n this.regular_table.addEventListener(\n \"click\",\n click_listener.bind(this.model, this.regular_table),\n );\n\n // (Legacy) Row selection\n const selected_rows_map = new WeakMap();\n this.regular_table.addStyleListener(\n selectionStyleListener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_rows_map,\n ),\n );\n\n this.regular_table.addEventListener(\n \"mousedown\",\n selectionListener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_rows_map,\n ),\n );\n\n this.regular_table.addEventListener(\n \"psp-deselect-all\",\n deselect_all_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_rows_map,\n ),\n );\n\n // User event click\n this.regular_table.addEventListener(\n \"click\",\n dispatch_click_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n ),\n );\n\n // tree collapse, expand, edit button headers\n this.regular_table.addEventListener(\n \"mousedown\",\n mousedown_listener.bind(this.model, this.regular_table, viewer),\n );\n\n // Editing\n const selected_position_map = new WeakMap();\n this.regular_table.addStyleListener(\n editable_style_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n this,\n ),\n );\n this.regular_table.addStyleListener(\n focus_style_listener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_position_map,\n ),\n );\n\n // TODO relies on this.model._is_editable\n this.regular_table.addEventListener(\n \"click\",\n clickListener.bind(this.model, this.regular_table, viewer),\n );\n\n this.regular_table.addEventListener(\n \"focusin\",\n focusinListener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_position_map,\n ),\n );\n this.regular_table.addEventListener(\n \"focusout\",\n focusoutListener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_position_map,\n ),\n );\n this.regular_table.addEventListener(\n \"keydown\",\n keydownListener.bind(\n this.model,\n this.regular_table,\n viewer,\n selected_position_map,\n ),\n );\n\n // viewer event listeners\n viewer.addEventListener(\n \"perspective-toggle-column-settings\",\n (event) => {\n if (this.isConnected) {\n style_selected_column.call(\n this.model,\n this.regular_table,\n viewer,\n event.detail.column_name,\n );\n if (!event.detail.open) {\n this.model._column_settings_selected_column = null;\n return;\n }\n\n this.model._column_settings_selected_column =\n event.detail.column_name;\n }\n },\n );\n\n this._initialized = true;\n } else {\n await createModel.call(\n this,\n this.regular_table,\n table,\n view,\n this.model,\n );\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\n/**\n * Restore a saved column width override token.\n *\n * @param {*} token An object previously returned by a call to\n * `_save_column_size_overrides()`\n * @param {*} [cache=false] A flag indicating whether this value should\n * be cached so a future `resetAutoSize()` call does not clear it.\n * @returns\n */\nexport function restore_column_size_overrides(old_sizes, cache = false) {\n if (!this._initialized) {\n return;\n }\n\n if (cache) {\n this._cached_column_sizes = old_sizes;\n }\n\n const overrides = {};\n const { group_by, columns } = this.model._config;\n const tree_header_offset = group_by?.length > 0 ? group_by.length + 1 : 0;\n\n for (const key of Object.keys(old_sizes)) {\n if (key === \"__ROW_PATH__\") {\n overrides[tree_header_offset - 1] = old_sizes[key];\n } else {\n const index = this.model._column_paths.indexOf(key);\n overrides[index + tree_header_offset] = old_sizes[key];\n }\n }\n\n this.regular_table._column_sizes.override = overrides;\n}\n\n/**\n * Extract the current user-overriden column widths from\n * `regular-table`. This functiond depends on the internal\n * implementation of `regular-table` and may break!\n *\n * @returns An Object-as-dictionary keyed by column_path string, and\n * valued by the column's user-overridden pixel width.\n */\nexport function save_column_size_overrides() {\n if (!this._initialized) {\n return [];\n }\n\n if (this._cached_column_sizes) {\n const x = this._cached_column_sizes;\n this._cached_column_sizes = undefined;\n return x;\n }\n\n const overrides = this.regular_table._column_sizes.override;\n const { group_by, columns } = this.model._config;\n const tree_header_offset = group_by?.length > 0 ? group_by.length + 1 : 0;\n\n const old_sizes = {};\n for (const key of Object.keys(overrides)) {\n if (overrides[key] !== undefined) {\n const index = key - tree_header_offset;\n if (index > -1) {\n old_sizes[this.model._column_paths[index]] = overrides[key];\n } else if (index === -1) {\n old_sizes[\"__ROW_PATH__\"] = overrides[key];\n }\n }\n }\n\n return old_sizes;\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nexport const EDIT_MODES = [\n \"READ_ONLY\",\n \"EDIT\",\n \"SELECT_ROW\",\n \"SELECT_COLUMN\",\n \"SELECT_REGION\",\n];\n\nexport function toggle_edit_mode(mode = undefined) {\n if (typeof mode === \"undefined\") {\n mode =\n EDIT_MODES[\n (EDIT_MODES.indexOf(this._edit_mode) + 1) % EDIT_MODES.length\n ];\n }\n\n this.parentElement?.setSelection();\n this._edit_mode = mode;\n if (this.model) {\n this.model._edit_mode = mode;\n this.model._selection_state = {\n selected_areas: [],\n dirty: true,\n };\n }\n\n if (this._edit_button !== undefined) {\n this._edit_button.dataset.editMode = mode;\n }\n\n this.dataset.editMode = mode;\n}\n\nexport function toggle_scroll_lock(force = undefined) {\n if (typeof force === \"undefined\") {\n force = !this._is_scroll_lock;\n }\n\n this._is_scroll_lock = force;\n this.classList.toggle(\"sub-cell-scroll-disabled\", force);\n if (this._scroll_lock !== undefined) {\n this._scroll_lock.classList.toggle(\"lock-scroll\", force);\n }\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { restore_column_size_overrides } from \"../model/column_overrides.js\";\nimport {\n EDIT_MODES,\n toggle_edit_mode,\n toggle_scroll_lock,\n} from \"../model/toolbar.js\";\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\nimport { make_color_record } from \"../color_utils.js\";\n\n/**\n * Restore this plugin's state from a previously saved `token`.\n *\n * @param {*} token A token returned from `save()`.\n * @param {import(\"@perspective-dev/viewer\").PerspectiveColumnConfig} columns Viewer column settings\n */\nexport function restore(token, columns) {\n token = JSON.parse(JSON.stringify(token));\n columns = JSON.parse(JSON.stringify(columns));\n const overrides = {};\n\n if (token.columns) {\n for (const [col, value] of Object.entries(token.columns)) {\n if (value.column_size_override !== undefined) {\n overrides[col] = value.column_size_override;\n delete value[\"column_size_override\"];\n }\n }\n }\n\n let styles = {};\n if (columns) {\n for (const [col_name, controls] of Object.entries(columns)) {\n styles[col_name] = {\n ...controls,\n pos_fg_color: controls.pos_fg_color\n ? make_color_record(controls.pos_fg_color)\n : undefined,\n neg_fg_color: controls.neg_fg_color\n ? make_color_record(controls.neg_fg_color)\n : undefined,\n pos_bg_color: controls.pos_bg_color\n ? make_color_record(controls.pos_bg_color)\n : undefined,\n neg_bg_color: controls.neg_bg_color\n ? make_color_record(controls.neg_bg_color)\n : undefined,\n color: controls.color\n ? make_color_record(controls.color)\n : undefined,\n };\n }\n }\n\n // TODO this is going away.\n if (\"edit_mode\" in token) {\n if (EDIT_MODES.indexOf(token.edit_mode) !== -1) {\n toggle_edit_mode.call(this, token.edit_mode);\n } else {\n console.error(\"Unknown edit mode \" + token.edit_mode);\n }\n }\n\n if (\"scroll_lock\" in token) {\n toggle_scroll_lock.call(this, token.scroll_lock);\n }\n\n const datagrid = this.regular_table;\n restore_column_size_overrides.call(this, overrides, true);\n datagrid[PRIVATE_PLUGIN_SYMBOL] = styles;\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\nimport { save_column_size_overrides } from \"../model/column_overrides.js\";\n\n/**\n * Serialize the state of this plugin to a token.\n *\n * @returns This plugin's state as a token.\n */\nexport function save() {\n if (this.regular_table) {\n const token = {\n columns: {},\n scroll_lock: !!this._is_scroll_lock,\n edit_mode: this._edit_mode,\n };\n\n const column_size_overrides = save_column_size_overrides.call(this);\n\n for (const col of Object.keys(column_size_overrides || {})) {\n if (!token.columns[col]) {\n token.columns[col] = {};\n }\n\n token.columns[col].column_size_override =\n column_size_overrides[col];\n }\n\n return JSON.parse(JSON.stringify(token));\n }\n return {};\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { restore_column_size_overrides } from \"../model/column_overrides.js\";\nimport { save_column_size_overrides } from \"../model/column_overrides.js\";\n\n/**\n * Draw this datagrid instance.\n *\n * @param {perspective.View} view\n * @returns\n */\nexport async function draw(view) {\n if (this.parentElement) {\n await this.activate(view);\n }\n\n if (!this.isConnected || this.offsetParent == null || !this.model) {\n return;\n }\n\n const old_sizes = save_column_size_overrides.call(this);\n const draw = this.regular_table.draw({ invalid_columns: true });\n if (this._reset_scroll_top) {\n // group_by\n this.regular_table.scrollTop = 0;\n this._reset_scroll_top = false;\n }\n\n if (this._reset_scroll_left) {\n // split_by\n this.regular_table.scrollLeft = 0;\n this._reset_scroll_left = false;\n }\n if (this._reset_select) {\n // filter, group_by, sort ... if (col-select) { columns, split_by }\n this.regular_table.dispatchEvent(\n new CustomEvent(\"psp-deselect-all\", { bubbles: false }),\n );\n this._reset_select = false;\n }\n\n if (this._reset_column_size) {\n // split_by, group_by (?),\n this.regular_table._resetAutoSize();\n this._reset_column_size = false;\n }\n\n restore_column_size_overrides.call(this, old_sizes);\n await draw;\n\n this._toolbar.classList.toggle(\n \"aggregated\",\n this.model._config.group_by.length > 0 ||\n this.model._config.split_by.length > 0,\n );\n}\n", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\n/**\n * @param {import(\"@perspective-dev/client\").Type} type\n * @param {string} _group\n * @returns {import(\"@perspective-dev/viewer\").PerspectiveColumnConfigValue}\n */\nexport default function column_style_opts(type, _group) {\n if (type === \"integer\" || type === \"float\")\n return {\n datagrid_number_style: {\n fg_gradient: 0,\n pos_fg_color: this.model._pos_fg_color[0],\n neg_fg_color: this.model._neg_fg_color[0],\n number_fg_mode: \"color\",\n bg_gradient: 0,\n pos_bg_color: this.model._pos_bg_color[0],\n neg_bg_color: this.model._neg_bg_color[0],\n number_bg_mode: \"disabled\",\n },\n number_string_format: true,\n };\n else if (type === \"date\" || type === \"datetime\" || type === \"string\") {\n let control =\n type === \"date\" || type === \"datetime\"\n ? \"datagrid_datetime_style\"\n : `datagrid_string_style`;\n return {\n [control]: {\n color: this.model._color[0],\n bg_color: this.model._color[0],\n },\n };\n } else {\n return null;\n }\n}\n", "regular-table{padding:0;margin:12px 0 0 12px;font-family:inherit;--rt-hover--border-color:var(--inactive--color,#c5c9d080);}regular-table div[tabindex]{outline:none;}regular-table>div{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;}regular-table th{text-align:center;}regular-table thead tr:not(.rt-autosize) th{overflow:hidden;max-width:0px;}regular-table thead tr:last-child .rt-float,regular-table tbody .rt-float{text-align:right;}regular-table thead .rt-integer,regular-table tbody .rt-integer{text-align:right;}regular-table tbody th{text-align:left;}regular-table span.rt-tree-container{display:flex;align-items:center;height:100%;}regular-table thead .rt-string,regular-table tbody .rt-string,regular-table thead .rt-date,regular-table tbody .rt-date,regular-table thead .rt-datetime,regular-table tbody .rt-datetime{text-align:left;}regular-table thead tr:last-child th{border-bottom:1px solid#8b868045;}regular-table tbody tr:first-child td,regular-table tbody tr:first-child th{border-top:1px solid transparent!important;}regular-table th{position:relative;}regular-table tr th span.rt-tree-group{margin-left:5px;margin-right:15px;border-left:1px solid#eee;height:100%;}regular-table td,regular-table th{white-space:nowrap;font-size:12px;padding-right:5px;padding-left:5px;padding-top:0px;padding-bottom:0px;height:19px;}regular-table table *{box-sizing:border-box;}regular-table table{position:absolute;color:#666;outline:none;}regular-table span.rt-row-header-icon{color:#aaa;padding-right:4px;font-family:var(--button--font-family);}regular-table span.rt-column-header-icon{font-size:10px;padding-left:3px;display:inline-block;width:10px;font-family:var(--button--font-family);}regular-table span.rt-row-header-icon:hover{color:#1a7da1;text-shadow:0px 0px 3px#1a7da1;}regular-table .rt-selected td{background-color:#eee;}regular-table .rt-cell-clip{overflow:hidden;text-overflow:ellipsis;}regular-table td span.rt-group-name,regular-table th span.rt-group-name{margin-right:-5px;padding-right:5px;padding-left:8px;flex:1;height:100%;}regular-table th span.rt-group-name{text-align:left;}regular-table td th span.rt-group-leaf,regular-table th span.rt-group-leaf{margin-left:16px;height:100%;}regular-table .rt-column-resize{height:100%;width:10px;position:absolute;top:0;right:0;cursor:col-resize;}regular-table a{color:var(--rt-pos-cell--color);}regular-table a:visited{color:var(--active--color);}regular-table td.psp-null:after,regular-table th.psp-null:after{content:var(--null--content,\"-\");}.psp-header-border:not(.psp-is-top):not(.psp-header-leaf){box-shadow:1px 0px var(--inactive--border-color,#8b868045);}.psp-header-group{box-shadow:0px 10px 0 -9px var(--inactive--border-color,#8b868045);}.psp-is-top{box-shadow:5px 4px 0px -4px var(--inactive--border-color,#8b868045);}.psp-is-top.psp-header-group:not(.psp-header-group-corner){box-shadow:5px 4px 0px -4px var(--inactive--border-color,#8b868045),0px 10px 0 -9px var(--inactive--border-color,#8b868045);}.psp-header-border.psp-header-group:not(.psp-is-top):not(.psp-header-group-corner){box-shadow:1px 0px var(--inactive--border-color,#8b868045),0px 10px 0 -9px var(--inactive--border-color,#8b868045);}perspective-viewer[settings] tr.rt-autosize .psp-header-leaf.psp-header-border:not(.psp-menu-enabled){box-shadow:1px 0px var(--inactive--border-color,#8b868045);}:host-context(perspective-viewer[settings]) tr.rt-autosize .psp-header-leaf.psp-header-border:not(.psp-menu-enabled){box-shadow:1px 0px var(--inactive--border-color,#8b868045);}.psp-header-leaf.psp-header-border{box-shadow:5px -4px 0px -4px var(--inactive--border-color,#8b868045);}tr:only-child th{box-shadow:none!important;}regular-table tbody tr:hover th.psp-tree-leaf:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover th.psp-tree-label:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover td:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover:after{border-color:var(--rt-hover--border-color,#c5c9d080)!important;box-shadow:0px 1px 0px var(--rt-hover--border-color,#c5c9d080);}regular-table tbody tr:hover th.psp-tree-leaf.psp-menu-open:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover th.psp-tree-label.psp-menu-open:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover td.psp-menu-open:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr.psp-menu-open:hover:after{box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color),0px 1px 0px var(--rt-hover--border-color,#c5c9d080);}regular-table tbody tr:last-child:hover td.psp-menu-open:not(.psp-row-selected):not(.psp-row-subselected){box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color),inset 0px -2px 0px var(--icon--color),0px 1px 0px var(--rt-hover--border-color,#c5c9d080);}regular-table tbody tr:hover+tr th.psp-tree-leaf:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover+tr th.psp-tree-label:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover+tr td:not(.psp-row-selected):not(.psp-row-subselected){border-top-color:transparent;}regular-table tbody tr th:first-child:not(:empty),regular-table tbody tr th:first-child:empty+th:not(:empty),regular-table tbody tr th:first-child:empty~th:empty+th:not(:empty),regular-table tbody tr td:first-child{border-left-width:1px;border-left-color:transparent;}regular-table tbody tr th:last-child,regular-table tbody tr td:last-child{border-right-width:0px;border-right-color:transparent;}regular-table tbody tr:hover{color:inherit;}regular-table tbody tr:hover th:first-child:not(:empty),regular-table tbody tr:hover th:first-child:empty+th:not(:empty),regular-table tbody tr:hover th:first-child:empty~th:empty+th:not(:empty),regular-table tbody tr:hover td:first-child{border-left-color:var(--rt-hover--border-color,#c5c9d080)!important;}regular-table tbody tr:hover th:last-child,regular-table tbody tr:hover td:last-child{border-right-color:var(--rt-hover--border-color,#c5c9d080)!important;}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody td,perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table thead th:not(.rt-group-corner),:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody td,:host(:not(.sub-cell-scroll-disabled)) regular-table table thead th:not(.rt-group-corner){transform:translate(var(--regular-table--transform-x,0px));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody{transform:translate(0,var(--regular-table--transform-y,0px));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:first-child td,perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:first-child th,perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:first-child:after,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:first-child td,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:first-child th,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:first-child:after{clip-path:polygon(0 var(--regular-table--clip-y,0),0 200%,200% 200%,200% var(--regular-table--clip-y,0));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr td:first-of-type,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr td:first-of-type{clip-path:polygon(var(--regular-table--clip-x,0) 0,var(--regular-table--clip-x,0) 200%,200% 200%,200% 0);}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:first-child td:first-of-type,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:first-child td:first-of-type{clip-path:polygon(var(--regular-table--clip-x,0) var(--regular-table--clip-y,0),var(--regular-table--clip-x,0) 200%,200% 200%,200% var(--regular-table--clip-y,0));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table thead tr:last-child:after,:host(:not(.sub-cell-scroll-disabled)) regular-table table thead tr:last-child:after{transform:translate(var(--regular-table--transform-x,0px));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:not(:first-child):after,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:not(:first-child):after{transform:translate(var(--regular-table--transform-x,0px));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table tbody tr:hover:first-child:after,:host(:not(.sub-cell-scroll-disabled)) regular-table table tbody tr:hover:first-child:after{clip-path:polygon(0 var(--regular-table--clip-y,0),0 200%,200% 200%,200% var(--regular-table--clip-y,0));}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table thead tr th.rt-group-corner+th:not(.rt-group-corner),:host(:not(.sub-cell-scroll-disabled)) regular-table table thead tr th.rt-group-corner+th:not(.rt-group-corner){clip-path:polygon(var(--regular-table--clip-x,0) 0,var(--regular-table--clip-x,0) 200%,200% 200%,200% 0);}regular-table{outline:none;}regular-table::-webkit-scrollbar,regular-table::-webkit-scrollbar-corner{background-color:transparent;height:12px;width:12px;}regular-table::-webkit-scrollbar-thumb{background-clip:content-box;background:var(--icon--color);border:5.5px solid var(--plugin--background);max-height:50%;max-width:50%;min-width:10%;min-height:10%;}perspective-viewer:not([settings]) regular-table table tr.rt-autosize+tr th{height:0px;}perspective-viewer:not([settings]) regular-table table tr.rt-autosize+tr th span{display:none;}:host-context(perspective-viewer:not([settings])) regular-table table tr.rt-autosize+tr th{height:0px;}:host-context(perspective-viewer:not([settings])) regular-table table tr.rt-autosize+tr th span{display:none;}perspective-viewer[settings] .psp-menu-enabled{padding:0 6px;font-size:8px;border-radius:3px 3px 0 0;}perspective-viewer[settings] .psp-menu-enabled:hover,perspective-viewer[settings] tr:not(.rt-autosize) th.psp-menu-open{color:var(--plugin--background);background-color:var(--icon--color);border-bottom-color:var(--icon--color);cursor:pointer;}perspective-viewer[settings] tr:not(.rt-autosize) th.psp-menu-open:before{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;height:8px;width:10px;-webkit-mask-image:var(--column-settings-icon--mask-image);mask-image:var(--column-settings-icon--mask-image);margin-right:4px;background-color:var(--plugin--background);}perspective-viewer[settings] td.psp-menu-open{box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color);}perspective-viewer[settings] tr:first-child td.psp-menu-open{border-top-color:var(--icon--color)!important;}perspective-viewer[settings] tr:last-child td.psp-menu-open{box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color),inset 0px -2px 0px var(--icon--color);}:host-context(perspective-viewer[settings]) .psp-menu-enabled{padding:0 6px;font-size:8px;border-radius:3px 3px 0 0;}:host-context(perspective-viewer[settings]) .psp-menu-enabled:hover,:host-context(perspective-viewer[settings]) tr:not(.rt-autosize) th.psp-menu-open{color:var(--plugin--background);background-color:var(--icon--color);border-bottom-color:var(--icon--color);cursor:pointer;}:host-context(perspective-viewer[settings]) tr:not(.rt-autosize) th.psp-menu-open:before{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;height:8px;width:10px;-webkit-mask-image:var(--column-settings-icon--mask-image);mask-image:var(--column-settings-icon--mask-image);margin-right:4px;background-color:var(--plugin--background);}:host-context(perspective-viewer[settings]) td.psp-menu-open{box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color);}:host-context(perspective-viewer[settings]) tr:first-child td.psp-menu-open{border-top-color:var(--icon--color)!important;}:host-context(perspective-viewer[settings]) tr:last-child td.psp-menu-open{box-shadow:inset -2px 0px 0px var(--icon--color),inset 2px 0px 0px var(--icon--color),inset 0px -2px 0px var(--icon--color);}perspective-viewer regular-table table thead tr:last-child th{border-bottom-width:1px;border-bottom-color:var(--inactive--border-color,#8b868045);}:host-context(perspective-viewer) regular-table table thead tr:last-child th{border-bottom-width:1px;border-bottom-color:var(--inactive--border-color,#8b868045);}.psp-sort-enabled:hover{cursor:pointer;}.psp-row-selected,:hover .psp-row-selected,:hover th.psp-tree-leaf.psp-row-selected,:hover th.psp-tree-label.psp-row-selected{color:white!important;background-color:var(--selected-row--background-color,#ea7319)!important;border-color:var(--selected-row--background-color,#ea7319)!important;}.psp-row-selected.psp-tree-label:not(:hover):before{color:white;}.psp-row-subselected,:hover .psp-row-subselected,:hover th.psp-tree-leaf.psp-row-subselected,:hover th.psp-tree-label.psp-row-subselected{background:rgba(234,115,25,0.2)!important;}.psp-error{color:red;}td:focus{outline:#666;outline-style:dotted;outline-width:1px;}perspective-viewer.dragging regular-table{pointer-events:none;}:host-context(perspective-viewer.dragging) regular-table{pointer-events:none;}.psp-header-border:last-child{border-right-width:0px;}.psp-header-sort-desc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-desc-icon--mask-image);mask-image:var(--sort-desc-icon--mask-image);}.psp-header-sort-asc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-asc-icon--mask-image);mask-image:var(--sort-asc-icon--mask-image);}.psp-header-sort-col-desc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-col-desc-icon--mask-image);mask-image:var(--sort-col-desc-icon--mask-image);}.psp-header-sort-col-asc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-col-asc-icon--mask-image);mask-image:var(--sort-col-asc-icon--mask-image);}.psp-header-sort-abs-desc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-abs-desc-icon--mask-image);mask-image:var(--sort-abs-desc-icon--mask-image);}.psp-header-sort-abs-asc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-abs-asc-icon--mask-image);mask-image:var(--sort-abs-asc-icon--mask-image);}.psp-header-sort-abs-col-desc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-abs-col-desc-icon--mask-image);mask-image:var(--sort-abs-col-desc-icon--mask-image);}.psp-header-sort-abs-col-asc:after{background-repeat:no-repeat;background-color:var(--icon--color);content:\"\";display:inline-block;-webkit-mask-size:cover;mask-size:cover;width:14px;height:11px;margin-left:4px;-webkit-mask-image:var(--sort-abs-col-asc-icon--mask-image);mask-image:var(--sort-abs-col-asc-icon--mask-image);}tbody th:last-of-type{border-right:1px solid var(--inactive--border-color,#8b868045);overflow:hidden;text-overflow:ellipsis;}tbody th:empty{background-image:linear-gradient(to right,transparent 9px,var(--inactive--border-color,#eee) 10px,transparent 11px);background-repeat:no-repeat;min-width:20px;max-width:20px;pointer-events:none;}.psp-tree-label{max-width:0px;min-width:0px;}.psp-tree-label:before{color:var(--icon--color);font-family:var(--button--font-family,inherit);padding-right:11px;}.psp-tree-label-expand:before{content:var(--tree-label-expand--content,\"+\");}.psp-tree-label-collapse:before{content:var(--tree-label-collapse--content,\"-\");}.psp-tree-label-expand,.psp-tree-label-collapse{cursor:pointer;}.psp-tree-label:hover:before{color:var(--active--color);text-shadow:0px 0px 5px var(--active--color);}.psp-tree-leaf{padding-left:24px;}.psp-align-right{text-align:right;}.psp-align-left{text-align:left;}.psp-positive:not(:focus){color:var(--rt-pos-cell--color);}.psp-negative:not(:focus){color:var(--rt-neg-cell--color);}regular-table table tbody td{min-width:52px!important;}.psp-is-width-override .rt-column-resize,.rt-column-resize:hover{border:1px dashed#999;border-bottom-width:0px;border-left-width:0px;}.boolean-editable{cursor:pointer;}regular-table table{user-select:none;color:inherit;border-collapse:separate;}regular-table table th{font-weight:400;}regular-table table td,regular-table table th{border-color:var(--inactive--border-color,#8b868045);height:23px;}regular-table table .psp-header-group{text-overflow:ellipsis;}regular-table table th.psp-header-leaf{border-bottom-width:0px;}regular-table table th.psp-header-leaf span{height:23px;min-height:23px;}regular-table table td,regular-table table th.psp-tree-label,regular-table table th.psp-tree-label,regular-table table th.psp-tree-leaf,regular-table table tbody tr:first-child th{border-style:solid;border-width:0px;border-top-width:1px;}regular-table table tbody th:empty{background-position:0px -10px;}regular-table table td.psp-select-region,regular-table table th.psp-select-region{background-color:var(--icon--color)!important;color:var(--plugin--background)!important;border-color:var(--plugin--background)!important;}regular-table tbody tr:hover td.psp-select-region:not(.psp-row-selected):not(.psp-row-subselected),regular-table tbody tr:hover+tr td.psp-select-region:not(.psp-row-selected):not(.psp-row-subselected){border-color:var(--plugin--background)!important;}regular-table tbody tr:hover td.psp-select-region.psp-menu-open:not(.psp-row-selected):not(.psp-row-subselected){box-shadow:inset -2px 0px 0px var(--plugin--background),inset 2px 0px 0px var(--plugin--background);}:host-context(perspective-viewer[settings]) td.psp-select-region.psp-menu-open{box-shadow:inset -2px 0px 0px var(--plugin--background),inset 2px 0px 0px var(--plugin--background);}regular-table #psp-column-edit-buttons th:not(.rt-group-corner) span:not(.rt-column-resize):before{content:var(--datagrid-column-edit-button--content,\"Edit\");}perspective-viewer:not([settings]) regular-table #psp-column-edit-buttons:after{content:none;}:host-context(perspective-viewer:not([settings])) regular-table #psp-column-edit-buttons:after{content:none;}regular-table table thead tr:last-child:after{width:10000px;box-sizing:border-box;display:block;height:23px;content:\" \";border-bottom:1px solid var(--inactive--border-color);}regular-table table tbody tr:after{width:10000px;box-sizing:border-box;display:block;height:23px;content:\" \";border-top:1px solid transparent;}regular-table table tbody tr:not(:first-child):after{border-top:1px solid var(--inactive--border-color);}regular-table table tbody tr:hover:not(:first-child):after{border-top:1px solid var(--rt-hover--border-color);}regular-table table tbody tr:hover+tr:after{border-top:1px solid var(--rt-hover--border-color);}@keyframes pulse_pos{0%{background-color:var(--pulse--background-color-start,rgba(0,128,255,0.5));}100%{background-color:var(--pulse--background-color-end,rgba(0,128,255,0));}}@keyframes pulse_pos2{0%{background-color:var(--pulse--background-color-start,rgba(0,128,255,0.5));}100%{background-color:var(--pulse--background-color-end,rgba(0,128,255,0));}}@keyframes pulse_neg{0%{background-color:var(--pulse--background-color-start,rgba(255,25,0,0.5));}100%{background-color:var(--pulse--background-color-end,rgba(255,25,0,0));}}@keyframes pulse_neg2{0%{background-color:var(--pulse--background-color-start,rgba(255,25,0,0.5));}100%{background-color:var(--pulse--background-color-end,rgba(255,25,0,0));}}", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport { PRIVATE_PLUGIN_SYMBOL } from \"../model\";\nimport { activate } from \"../plugin/activate.js\";\nimport { restore } from \"../plugin/restore.js\";\nimport { save } from \"../plugin/save\";\nimport { draw } from \"../plugin/draw\";\nimport column_style_controls from \"../plugin/column_style_controls.js\";\nimport datagridStyles from \"../../../dist/css/perspective-viewer-datagrid.css\";\nimport { format_raw } from \"../data_listener/format_cell.js\";\n\n/**\n * The custom element class for this plugin. The interface methods for this\n */\nexport class HTMLPerspectiveViewerDatagridPluginElement extends HTMLElement {\n static #global_stylesheet_installed = false;\n\n static #sheet;\n\n // Determines whether this datagrid renders in the light DOM. This will\n // break style encapsulation and may cause inconsistent behavior.\n static renderTarget =\n window.CSS?.supports &&\n window.CSS?.supports(\"selector(:host-context(foo))\")\n ? \"shadow\"\n : \"light\";\n\n constructor() {\n super();\n this.regular_table = document.createElement(\"regular-table\");\n this.regular_table.part = \"regular-table\";\n this._is_scroll_lock = false;\n this._edit_mode = \"READ_ONLY\";\n const Elem = HTMLPerspectiveViewerDatagridPluginElement;\n if (!Elem.#sheet) {\n Elem.#sheet = new CSSStyleSheet();\n Elem.#sheet.replaceSync(datagridStyles);\n }\n\n if (Elem.renderTarget === \"shadow\") {\n const shadow = this.attachShadow({ mode: \"open\" });\n shadow.adoptedStyleSheets.push(Elem.#sheet);\n } else if (\n Elem.renderTarget === \"light\" &&\n !Elem.#global_stylesheet_installed\n ) {\n Elem.#global_stylesheet_installed = true;\n document.adoptedStyleSheets.push(Elem.#sheet);\n }\n }\n\n connectedCallback() {\n if (!this._toolbar) {\n this._toolbar = document.createElement(\n \"perspective-viewer-datagrid-toolbar\",\n );\n }\n\n const parent = this.parentElement;\n if (parent) {\n parent.appendChild(this._toolbar);\n }\n }\n\n disconnectedCallback() {\n this._toolbar?.parentElement?.removeChild?.(this._toolbar);\n }\n\n async activate(view) {\n return await activate.call(this, view);\n }\n\n get name() {\n return \"Datagrid\";\n }\n\n get category() {\n return \"Basic\";\n }\n\n get select_mode() {\n return \"toggle\";\n }\n\n get min_config_columns() {\n return undefined;\n }\n\n get config_column_names() {\n return [\"Columns\"];\n }\n\n /**\n * Give the Datagrid a higher priority so it is loaded\n * over the default charts by default.\n */\n get priority() {\n return 1;\n }\n\n can_render_column_styles(type, _group) {\n return type !== \"boolean\";\n }\n\n column_style_controls(type, group) {\n return column_style_controls.call(this, type, group);\n }\n\n async draw(view) {\n return await draw.call(this, view);\n }\n\n async update(view) {\n if (this.model === undefined) {\n await this.draw(view);\n } else if (this.model._config.split_by?.length > 0) {\n const dimensions = await view.dimensions();\n this.model._num_rows = dimensions.num_view_rows;\n // if (this.model._column_paths.length !== dimensions.num_view_columns) {\n // await this.draw(view);\n // } else {\n await this.regular_table.draw();\n // }\n } else {\n this.model._num_rows = await view.num_rows();\n await this.regular_table.draw();\n }\n }\n\n async render(viewport) {\n const view = await this.parentElement.getView();\n const json = await view.to_columns(viewport);\n const cols = await view.column_paths(viewport);\n\n const nrows = viewport.end_row - viewport.start_row;\n let out = \"\";\n for (let ridx = 0; ridx < nrows; ridx++) {\n for (const col_name of cols) {\n const col = json[col_name];\n const type = this.model._schema[col_name];\n const formatter = format_raw(\n type,\n this.regular_table[PRIVATE_PLUGIN_SYMBOL][\n col_name.split(\"|\").at(-1)\n ] || {},\n );\n\n if (formatter) {\n out += formatter.format(col[ridx]) + \"\\t\";\n } else {\n out += col[ridx] + \"\\t\";\n }\n }\n out += \"\\n\";\n }\n\n return out.trim();\n }\n\n async resize() {\n if (!this.isConnected || this.offsetParent == null) {\n return;\n }\n\n if (this._initialized) {\n await this.regular_table.draw();\n }\n }\n\n async clear() {\n this.regular_table._resetAutoSize();\n this.regular_table.clear();\n }\n\n save() {\n return save.call(this);\n }\n\n restore(token, columns_config) {\n return restore.call(this, token, columns_config);\n }\n\n async restyle(view) {\n await this.draw(view);\n }\n\n delete() {\n this._toolbar = undefined;\n if (this.regular_table.table_model) {\n this.regular_table._resetAutoSize();\n }\n\n this.regular_table.clear();\n }\n}\n", ":host{position:relative;display:block;height:100%;}:host #container{position:absolute;display:flex;flex-direction:column;justify-content:stretch;align-items:stretch;top:0;left:0;right:0;bottom:0;}:host #toolbar{display:flex;align-items:stretch;height:100%;}:host #toolbar .hover-target{margin:0;display:inline-flex;align-items:center;cursor:pointer;}:host #toolbar .hover-target:hover{box-shadow:-4px 0 0 var(--icon--color),4px 0 0 var(--icon--color);background-color:var(--icon--color);}:host #slot-container{flex:1;position:relative;}#scroll_lock.lock-scroll:before{-webkit-mask-image:var(--toolbar-scroll-lock-active--content);}#scroll_lock:before{-webkit-mask-image:var(--toolbar-scroll-lock--content);}#select_mode:before{content:\"highlight_alt\";}#edit_mode:before{-webkit-mask-image:\"\";}#edit_mode[data-edit-mode=\"READ_ONLY\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--read-only--content);}#edit_mode[data-edit-mode=\"EDIT\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--edit--content);}:host(.aggregated) #toolbar #edit_mode[data-edit-mode=\"EDIT\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--read-only--content);}#edit_mode[data-edit-mode=\"SELECT_ROW\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--select-row--content);}#edit_mode[data-edit-mode=\"SELECT_COLUMN\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--select-column--content);}#edit_mode[data-edit-mode=\"SELECT_REGION\"]:before{-webkit-mask-image:var(--toolbar-edit-mode--select-region--content);}#edit_mode[data-edit-mode=\"READ_ONLY\"] span:before{content:var(--edit-mode--read-only--content,\"Read Only\");}#edit_mode[data-edit-mode=\"EDIT\"] span:before{content:var(--edit-mode--edit--content,\"Editable\");}#edit_mode[data-edit-mode=\"SELECT_ROW\"] span:before{content:var(--edit-mode--select-row--content,\"Row Select\");}#edit_mode[data-edit-mode=\"SELECT_COLUMN\"] span:before{content:var(--edit-mode--select-column--content,\"Column Select\");}#edit_mode[data-edit-mode=\"SELECT_REGION\"] span:before{content:var(--edit-mode--select-region--content,\"Region Select\");}#scroll_lock span:before{content:var(--scroll-lock-toggle--content,\"Free Scroll\");}#scroll_lock.lock-scroll span:before{content:var(--scroll-lock-alt-toggle--content,\"Align Scroll\");}.button:before{width:21px;height:21px;content:\"\";-webkit-mask-size:cover;mask-size:cover;background-color:var(--icon--color);}.button.editable:before,.button.lock-scroll:before{color:inherit;}.button{display:inline-flex;justify-content:center;align-items:center;user-select:none;padding:0 5px;border:1px solid transparent;border-radius:3px;border:1px solid transparent;box-sizing:border-box;display:inline-flex;font-size:var(--label--font-size,0.75em);height:22px;user-select:none;white-space:nowrap;width:37px;}.button>span{display:none;margin:0;padding:0;}.hover-target:focus-within .button,.hover-target:hover .button{position:relative;background-color:var(--icon--color);color:var(--plugin--background);opacity:1;display:flex;align-items:center;cursor:pointer;}.hover-target:focus-within .button:before,.hover-target:hover .button:before{background-color:var(--plugin--background);}.hover-target:focus-within .button>span,.hover-target:hover .button>span{display:block;position:absolute;top:calc(100% + 3px);left:50%;translate:-50%;margin:0;padding:5px;height:auto;white-space:pre-wrap;line-height:1;font-size:9px;background-color:var(--icon--color);width:35px;text-align:center;border-radius:0 0 3px 3px;}", "// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport TOOLBAR_STYLE from \"../../../dist/css/perspective-viewer-datagrid-toolbar.css\";\nimport { toggle_edit_mode, toggle_scroll_lock } from \"../model/toolbar\";\n\nconst stylesheet = new CSSStyleSheet();\nstylesheet.replaceSync(TOOLBAR_STYLE);\n\n/**\n * The custom element for this plugin's toolbar, a component which displays in\n * the host `<perspective-viewer>`'s status bar when this plugin is active.\n * In the case of Datagrid, this comprises \"Editable\" and \"Scroll Lock\" toggle\n * buttons.\n */\nexport class HTMLPerspectiveViewerDatagridToolbarElement extends HTMLElement {\n connectedCallback() {\n if (this._initialized) {\n return;\n }\n\n this._initialized = true;\n this.setAttribute(\"slot\", \"plugin-settings\");\n this.attachShadow({ mode: \"open\" });\n this.shadowRoot.adoptedStyleSheets.push(stylesheet);\n this.shadowRoot.innerHTML = `\n <div id=\"toolbar\">\n <span class=\"hover-target\">\n <span id=\"scroll_lock\" class=\"button\">\n <span></span>\n </span>\n </span>\n <span class=\"hover-target\">\n <span id=\"edit_mode\" class=\"button\" data-edit-mode=\"READ_ONLY\">\n <span></span>\n </span>\n </span>\n </div>\n `;\n\n const viewer = this.parentElement;\n const plugin = this.previousElementSibling;\n plugin._scroll_lock = this.shadowRoot.querySelector(\"#scroll_lock\");\n plugin._scroll_lock.addEventListener(\"click\", () =>\n toggle_scroll_lock.call(plugin),\n );\n\n plugin._edit_button = this.shadowRoot.querySelector(\"#edit_mode\");\n plugin._edit_button.addEventListener(\"click\", () => {\n toggle_edit_mode.call(plugin);\n plugin.regular_table.draw();\n viewer.dispatchEvent(new Event(\"perspective-config-update\"));\n });\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["PRIVATE_PLUGIN_SYMBOL", "get_psp_type", "metadata", "style_selected_column", "regularTable", "viewer", "selectedColumn", "group_header_trs", "len", "settings_open", "tr", "i", "offset", "id", "titles", "editBtns", "th", "title", "editBtn", "open", "r", "meta", "column_header_style_listener", "col_headers", "style_column_header_row", "style_menu_headers", "is_menu_row", "header_depth", "td", "column_name", "sort", "x", "needs_border", "is_corner", "type", "is_numeric", "is_string", "is_date", "is_datetime", "group_header_style_listener", "regularTable", "header_depth", "group_header_trs", "m", "marked", "table", "y", "row", "tops", "x", "td", "metadata", "needs_border", "cell", "xx", "tx", "ty", "style_cell_flash", "metadata", "td", "pos_s", "pos_e", "neg_s", "neg_e", "is_settings_open", "id", "metadata_path", "row_idx", "col_idx", "chroma", "blend", "a", "b", "rgbaToRgb", "r", "g", "source", "f", "c", "infer_foreground_from_background", "make_gradient", "chromahex", "r1", "g1", "b1", "r2", "g2", "b2", "make_color_record", "color", "chroma_neg", "_neg_grad", "rgb", "cell_style_numeric", "plugin", "td", "metadata", "is_settings_open", "is_positive", "is_negative", "pos_bg_color", "neg_bg_color", "bg_tuple", "hex", "r", "g", "_gradhex", "a", "source", "foreground", "infer_foreground_from_background", "rgbaToRgb", "style_cell_flash", "b", "gradhex", "chroma", "cell_style_string", "plugin", "td", "metadata", "column_name", "hex", "r", "g", "b", "gradhex", "source", "foreground", "infer_foreground_from_background", "rgbaToRgb", "series_map", "seed", "color_seed", "h", "s", "l", "chroma", "color2", "hex2", "cell_style_datetime", "plugin", "td", "metadata", "column_name", "hex", "r", "g", "b", "gradhex", "source", "foreground", "infer_foreground_from_background", "rgbaToRgb", "cell_style_boolean", "plugin", "td", "metadata", "hex", "cell_style_row_header", "regularTable", "td", "metadata", "is_not_empty", "is_leaf", "next", "is_collapse", "get_psp_type", "metadata", "table_cell_style_listener", "regularTable", "viewer", "plugins", "PRIVATE_PLUGIN_SYMBOL", "is_settings_open", "tr", "td", "column_name", "type", "plugin", "is_numeric", "x", "cell_style_numeric", "cell_style_boolean", "cell_style_string", "cell_style_datetime", "is_th", "cell_style_row_header", "sortHandler", "regularTable", "viewer", "event", "target", "column_name", "sort_method", "append_sort", "override_sort", "abs", "sort", "found", "sort_term", "_column_name", "_sort_dir", "term", "create_sort", "sort_dir", "order", "ROW_COL_SORT_ORDER", "ROW_SORT_ORDER", "inc_sort_dir", "expandCollapseHandler", "regularTable", "event", "meta", "is_collapse", "x", "mousedown_listener", "regularTable", "viewer", "event", "target", "expandCollapseHandler", "column_name", "sortHandler", "click_listener", "isEditable", "viewer", "allowed", "has_pivots", "selectable", "editable", "editable_style_listener", "table", "datagrid", "plugins", "PRIVATE_PLUGIN_SYMBOL", "edit", "td", "meta", "type", "col_name", "focus_style_listener", "table", "_viewer", "selected_position_map", "tds", "selected_position", "host", "td", "meta", "write_cell", "table", "model", "active_cell", "meta", "type", "text", "id", "msg", "clickListener", "_viewer", "event", "is_editable2", "is_bool", "is_null", "lock", "body", "args", "resolve", "x", "getPos", "_range", "range", "moveSelection", "table", "selected_position_map", "active_cell", "dx", "dy", "meta", "num_columns", "num_rows", "selected_position", "xmin", "xmax", "ymin", "ymax", "y", "focus_style_listener", "isLastCell", "model", "target", "keydownListener", "viewer", "event", "is_editable", "viewer", "allowed", "has_pivots", "selectable", "editable", "keydownListener", "table", "selected_position_map", "event", "clickListener", "focusoutListener", "table", "viewer", "selected_position_map", "event", "is_editable", "selectedPosition", "write_cell", "focusinListener", "_viewer", "meta", "new_state", "getCellConfig", "_view", "_config", "row_idx", "col_idx", "group_by", "split_by", "start_row", "end_row", "r", "group_by_values", "x", "row_filters", "pivot", "index", "pivot_value", "column_index", "column_paths", "result", "column_filters", "split_by_values", "value", "filter", "selectionListener", "regularTable", "viewer", "selected_rows_map", "event", "meta", "id", "selected", "key_match", "agg", "x", "i", "is_deselect", "detail", "row", "column_names", "config", "getCellConfig", "selectionStyleListener", "regularTable", "viewer", "selected_rows_map", "has_selected", "selected", "td", "meta", "id", "key_match", "agg", "x", "i", "th", "deselect_all_listener", "regularTable", "_viewer", "selected_rows_map", "td", "chroma", "FORMATTER_CONS", "val", "LEGACY_CONFIG", "FormatterCache", "type", "plugin", "type_config", "options", "format", "formatter_key", "FORMAT_CACHE", "FormatterCache", "MAX_BAR_WIDTH_PCT", "format_raw", "type", "value", "format_cell", "title", "val", "plugins", "use_table_schema", "plugin", "a", "div", "anchor", "pct", "formatter", "format_tree_header_row_path", "paths", "row_headers", "regularTable", "plugins", "PRIVATE_PLUGIN_SYMBOL", "path", "last", "formatted", "format_cell", "format_tree_header", "new_path", "idx", "createDataListener", "viewer", "last_meta", "last_column_paths", "last_ids", "last_reverse_ids", "last_reverse_columns", "regularTable", "x0", "y0", "x1", "y1", "columns", "new_window", "num_columns", "x", "z", "new_col_paths", "old_length", "a", "b", "i", "column", "_", "index", "acc", "data", "metadata", "column_headers", "column_paths", "is_settings_open", "ipath", "path", "path_parts", "agg_depth", "PRIVATE_PLUGIN_SYMBOL", "format_cell", "is_row_path", "row_headers", "format_tree_header_row_path", "format_tree_header", "num_row_headers", "get_rule", "regular", "tag", "def", "color", "ElemFactory", "name", "elem", "get_psp_type", "metadata", "createModel", "table", "view", "extend", "config", "old", "group_by_changed", "type_changed", "lvl", "split_by_changed", "columns_changed", "filter_changed", "i", "sort_changed", "table_schema", "num_rows", "schema", "expression_schema", "_edit_port", "_plugin_background", "chroma", "_pos_fg_color", "make_color_record", "_neg_fg_color", "_pos_bg_color", "blend", "_neg_bg_color", "_color", "_schema", "_table_schema", "_column_paths", "_is_editable", "_column_types", "_edit_mode", "model", "column_path", "createDataListener", "dispatch_click_listener", "table", "viewer", "event", "meta", "x", "y", "row", "column_names", "config", "getCellConfig", "MOUSE_SELECTED_AREA_CLASS", "addAreaMouseSelection", "datagrid", "table", "className", "selected", "getMousedownListener", "getMouseoverListener", "getMouseupListener", "applyMouseAreaSelections", "event", "meta", "start", "potentialSelection", "selection", "set_psp_selection", "viewer", "x0", "x1", "y0", "y1", "viewport", "mode", "tds", "applyMouseAreaSelection", "td", "rendered", "activate", "view", "viewer", "table", "createModel", "addAreaMouseSelection", "table_cell_style_listener", "group_header_style_listener", "column_header_style_listener", "click_listener", "selected_rows_map", "selectionStyleListener", "selectionListener", "deselect_all_listener", "dispatch_click_listener", "mousedown_listener", "selected_position_map", "editable_style_listener", "focus_style_listener", "clickListener", "focusinListener", "focusoutListener", "keydownListener", "event", "style_selected_column", "restore_column_size_overrides", "old_sizes", "cache", "overrides", "group_by", "columns", "tree_header_offset", "key", "index", "save_column_size_overrides", "x", "EDIT_MODES", "toggle_edit_mode", "mode", "toggle_scroll_lock", "force", "restore", "token", "columns", "overrides", "col", "value", "styles", "col_name", "controls", "make_color_record", "EDIT_MODES", "toggle_edit_mode", "toggle_scroll_lock", "datagrid", "restore_column_size_overrides", "PRIVATE_PLUGIN_SYMBOL", "save", "token", "column_size_overrides", "save_column_size_overrides", "col", "draw", "view", "old_sizes", "save_column_size_overrides", "restore_column_size_overrides", "column_style_opts", "type", "_group", "perspective_viewer_datagrid_default", "HTMLPerspectiveViewerDatagridPluginElement", "_HTMLPerspectiveViewerDatagridPluginElement", "#global_stylesheet_installed", "#sheet", "Elem", "perspective_viewer_datagrid_default", "parent", "view", "activate", "type", "_group", "group", "column_style_opts", "draw", "dimensions", "viewport", "json", "cols", "nrows", "out", "ridx", "col_name", "col", "formatter", "format_raw", "PRIVATE_PLUGIN_SYMBOL", "save", "token", "columns_config", "restore", "perspective_viewer_datagrid_toolbar_default", "stylesheet", "perspective_viewer_datagrid_toolbar_default", "HTMLPerspectiveViewerDatagridToolbarElement", "viewer", "plugin", "toggle_scroll_lock", "toggle_edit_mode", "_register_element", "HTMLPerspectiveViewerDatagridToolbarElement", "HTMLPerspectiveViewerDatagridPluginElement"]
7
7
  }