@perspective-dev/viewer-datagrid 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +193 -0
- package/dist/cdn/perspective-viewer-datagrid.js +47 -0
- package/dist/cdn/perspective-viewer-datagrid.js.map +7 -0
- package/dist/css/perspective-viewer-datagrid-toolbar.css +1 -0
- package/dist/css/perspective-viewer-datagrid.css +1 -0
- package/dist/esm/perspective-viewer-datagrid.js +16 -0
- package/dist/esm/perspective-viewer-datagrid.js.map +7 -0
- package/index.d.ts +35 -0
- package/package.json +45 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../node_modules/.pnpm/regular-table@0.6.8/node_modules/regular-table/src/js/constants.js", "../../../../node_modules/.pnpm/regular-table@0.6.8/node_modules/regular-table/src/js/utils.js", "../../../../node_modules/.pnpm/regular-table@0.6.8/node_modules/regular-table/dist/css/container.css", "../../../../node_modules/.pnpm/regular-table@0.6.8/node_modules/regular-table/dist/css/sub-cell-offsets.css", "../../../../node_modules/.pnpm/regular-table@0.6.8/node_modules/regular-table/src/js/scroll_panel.js", "../../../../node_modules/.pnpm/regular-table@0.6.8/node_modules/regular-table/src/js/events.js", "../../../../node_modules/.pnpm/regular-table@0.6.8/node_modules/regular-table/src/js/view_model.js", "../../../../node_modules/.pnpm/regular-table@0.6.8/node_modules/regular-table/src/js/thead.js", "../../../../node_modules/.pnpm/regular-table@0.6.8/node_modules/regular-table/src/js/tbody.js", "../../../../node_modules/.pnpm/regular-table@0.6.8/node_modules/regular-table/src/js/table.js", "../../../../node_modules/.pnpm/regular-table@0.6.8/node_modules/regular-table/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", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/limit.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/clip_rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/type.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/unpack.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/last.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/input.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/Color.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/version.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/chroma.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/colors/w3cx11.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hex/hex2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hex/rgb2hex.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/named/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/alpha.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/clipped.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lab/lab-constants.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lab/lab2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lab/rgb2lab.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lab/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/darken.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/get.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/luminance.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/mix.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/mix.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/premultiply.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/lch2lab.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/lch2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/hcl2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/lab2lch.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/rgb2lch.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/saturate.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/set.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/shade.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/lrgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/lab.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/_hsx.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/lch.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/num/num2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/num/rgb2num.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/num/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/num.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hcg/hcg2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hcg/rgb2hcg.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hcg/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/hcg.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsi/hsi2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsi/rgb2hsi.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsi/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/hsi.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsl/hsl2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsl/rgb2hsl.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsl/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/hsl.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsv/hsv2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsv/rgb2hsv.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsv/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/hsv.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/multiply-matrices.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklab/oklab2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklab/rgb2oklab.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklab/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/oklab.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/oklch.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/average.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/scale.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/bezier.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/rgb/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/blend.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/cubehelix.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/random.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/analyze.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/contrast.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/contrastAPCA.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/delta-e.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/distance.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/valid.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/scales.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/colors/colorbrewer.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/cmyk/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/hsl2css.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/lab2css.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/lch2css.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/oklab2css.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklch/rgb2oklch.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/oklch2css.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/rgb2css.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklch/oklch2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/css2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/gl/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hex/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/temp/temperature2rgb.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/temp/rgb2temperature.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/temp/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklch/index.js", "../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/index.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/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/model/create.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", "../../src/js/index.js"],
|
|
4
|
+
"sourcesContent": ["/******************************************************************************\n *\n * Copyright (c) 2020, the Regular Table Authors.\n *\n * This file is part of the Regular Table library, distributed under the terms\n * of the Apache License 2.0. The full license can be found in the LICENSE\n * file.\n *\n */\n\n// Singleton `WeakMap`s to store metadata for td/th elements, as well as the\n// datagrids themselves for each `<perspective-viewer>`\nexport const METADATA_MAP = new WeakMap();\n\n// Output runtime debug info like FPS.\nexport const DEBUG = true;\n\n// The largest size virtual <div> in (px) that Chrome can support without\n// glitching.\nconst isFirefox = navigator.userAgent.toLowerCase().indexOf(\"firefox\") > -1;\nexport const BROWSER_MAX_HEIGHT = isFirefox ? 5000000 : 10000000;\n", "/******************************************************************************\n *\n * Copyright (c) 2020, the Regular Table Authors.\n *\n * This file is part of the Regular Table library, distributed under the terms\n * of the Apache License 2.0. The full license can be found in the LICENSE\n * file.\n *\n */\n\n/******************************************************************************\n *\n * Profling\n *\n */\n\nlet AVG = 0,\n TOTAL = 0,\n START = performance.now();\n\nexport function get_draw_fps() {\n const now = performance.now();\n const elapsed = now - START;\n const avg = AVG;\n const real_fps = (TOTAL * 1000) / elapsed;\n const virtual_fps = 1000 / avg;\n const num_frames = TOTAL;\n AVG = 0;\n TOTAL = 0;\n START = now;\n return { avg, real_fps, virtual_fps, num_frames, elapsed };\n}\n\nexport function log_perf(x) {\n AVG = (AVG * TOTAL + x) / (TOTAL + 1);\n TOTAL += 1;\n}\n\n/******************************************************************************\n *\n * Utils\n *\n */\n\n/**\n * A class method decorate for memoizing method results. Only works on one\n * arg.\n */\nexport function memoize(_target, _property, descriptor) {\n const cache = new Map();\n const func = descriptor.value;\n descriptor.value = new_func;\n return descriptor;\n function new_func(arg) {\n if (cache.has(arg)) {\n return cache.get(arg);\n } else {\n const res = func.call(this, arg);\n cache.set(arg, res);\n return res;\n }\n }\n}\n\n/**\n * Identical to a non-tagger template literal, this is only used to indicate to\n * babel that this string should be HTML-minified on production builds.\n */\nexport const html = (strings, ...args) =>\n strings\n .map((str, i) => [str, args[i]])\n .flat()\n .filter((a) => !!a)\n .join(\"\");\n\nconst invertPromise = () => {\n let _resolve;\n const promise = new Promise((resolve) => {\n _resolve = resolve;\n });\n promise.resolve = _resolve;\n return promise;\n};\nconst TAGS = new Map();\n\nexport async function flush_tag(tag) {\n await new Promise(requestAnimationFrame);\n return await TAGS.get(tag);\n}\n\nexport async function throttle_tag(tag, f) {\n if (TAGS.has(tag)) {\n await TAGS.get(tag);\n if (TAGS.has(tag)) {\n await TAGS.get(tag);\n return;\n }\n }\n\n TAGS.set(tag, invertPromise());\n try {\n return await f();\n } finally {\n const l = TAGS.get(tag);\n TAGS.delete(tag);\n l.resolve();\n }\n}\n", ":host{position:absolute;top:0px;left:0px;right:0px;bottom:0px;overflow:scroll;overflow-anchor:none;overscroll-behavior:none;-webkit-overflow-scrolling:touch;}div.rt-virtual-panel{position:absolute;top:0;left:0;right:0;pointer-events:none;}div.rt-scroll-table-clip{position:sticky;contain:strict;overflow-anchor:none;width:100%;height:100%;}div.rt-tree-container{display:flex;align-items:center;height:100%;}slot{position:absolute;overflow:hidden;overflow-anchor:none;}", ":host ::slotted(table){--regular-table--transform-x:0px;--regular-table--transform-y:0px;--regular-table--clip-x:0px;--regular-table--clip-y:0px;}", "/******************************************************************************\n *\n * Copyright (c) 2020, the Regular Table Authors.\n *\n * This file is part of the Regular Table library, distributed under the terms\n * of the Apache License 2.0. The full license can be found in the LICENSE\n * file.\n *\n */\n\nimport { log_perf, html, throttle_tag, flush_tag } from \"./utils\";\nimport { DEBUG, BROWSER_MAX_HEIGHT } from \"./constants\";\n\nimport container_css from \"../../dist/css/container.css\";\nimport sub_cell_offsets from \"../../dist/css/sub-cell-offsets.css\";\n\n/**\n * Handles the virtual scroll pane, as well as the double buffering\n * of the underlying <table>. This DOM structure looks a little like\n * this:\n *\n * +------------------------+ <- regular-table\n * | +----------------------|------<- div.rt-virtual-panel\n * | | +------------------+ | <- div.rt-scroll-table-clip\n * | | | +----------------|-|--+ <- table |\n * | | | | 1 A Alabama | | | |\n * | | | | 2 B Arizona | | | |\n * | | | | 3 C Arkansas | | | |\n * | | | | 4 D Californi| | | |\n * | | | | 5 E Colorado | | | |\n * | | +------------------+ | | |\n * +------------------------+ | |\n * | | 8 H District of C | |\n * | +---------------------+ |\n * | |\n * | |\n * | |\n * | |\n * | |\n * +--------------------------------------------------+\n *\n * `overflow: auto` is applied to `.rt-scroll-container`, and `.rt-virtual-pane`\n * is sized to match the estimated \"virtual\" size of the `table`; estimated,\n * because it's true size can't be known until all columns dimensions are known,\n * which may be deferred in the case of auto-sized tables.\n *\n * Double buffering can be enabled on \"column scroll\", \"row scroll\" and/or\n * \"column schema change\". When enabled and a redraw is requested for the case,\n * the existing table is cloned with `cloneNode()` and swapped with the real\n * `table`, which is then updated offscreen and swapped back in. While this is\n * much slower to render, it prevents draw-in.\n *\n * @class RegularVirtualTableViewModel\n */\nexport class RegularVirtualTableViewModel extends HTMLElement {\n /**\n * Create the DOM for this `shadowRoot`.\n *\n * TODO deprecated\n * `MATERIAL_STYLE` is needed both here, and in the document `<head>`, due\n * to double buffering, which may read incorrect position/size values as the\n * double buffered `<table>` is rendered in the shadow DOM before being\n * swapped in.\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n */\n create_shadow_dom() {\n this.attachShadow({ mode: \"open\" });\n const slot = `<slot></slot>`;\n\n this.shadowRoot.innerHTML = html`\n <style>\n ${container_css}\n </style>\n <style>\n ${sub_cell_offsets}\n </style>\n <div class=\"rt-virtual-panel\"></div>\n <div class=\"rt-scroll-table-clip\">${slot}</div>\n `;\n\n const [, style, virtual_panel, table_clip] = this.shadowRoot.children;\n this._sub_cell_style = style;\n this._table_clip = table_clip;\n this._virtual_panel = virtual_panel;\n this._setup_virtual_scroll();\n }\n\n _setup_virtual_scroll() {\n if (this._table_clip) {\n if (\n this._virtual_mode === \"both\" ||\n this._virtual_mode === \"vertical\"\n ) {\n this._table_clip.style.top = \"0px\";\n } else {\n this._table_clip.style.removeProperty(\"top\");\n }\n\n if (\n this._virtual_mode === \"both\" ||\n this._virtual_mode === \"horizontal\"\n ) {\n this._table_clip.style.left = \"0px\";\n } else {\n this._table_clip.style.removeProperty(\"left\");\n }\n\n if (this._virtual_mode !== \"both\") {\n this._table_clip.style.contain = \"none\";\n } else {\n this._table_clip.style.removeProperty(\"contain\");\n }\n }\n }\n\n /**\n * Calculates the `viewport` argument for perspective's `to_columns` method.\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n * @param {*} nrows\n * @returns\n */\n _calculate_viewport(nrows, num_columns) {\n const { start_row, end_row } = this._calculate_row_range(nrows);\n const { start_col, end_col } =\n this._calculate_column_range(num_columns);\n this._nrows = nrows;\n return { start_col, end_col, start_row, end_row };\n }\n\n /**\n * Calculate `start_row` and `end_row` for the viewport. We do this by\n * first calculating `total_scroll_height`, the px height of the\n * scrollable page, from the `_virtual_panel.offsetHeight`.\n *\n * 0px +------------+-------------+ - virtual_panel.offsetHeight\n * | | . | . 600px\n * | viewport | . | .\n * | | . | .\n * 200px +------------+ - height | . - total_scroll_height\n * | 200px | . . 400px\n * | | . .\n * | | . .\n * | | . .\n * | | . .\n * 600px +--------------------------+ - -\n *\n * `percent_scroll` can be calculated from this value and `scrollTop`,\n * which we can then apply to the new calculated height to preserve scroll\n * position when the height has changed since previous render.\n *\n * 0px +--------------------------+ -\n * | | .\n * | | .\n * | | . scrollable area\n * 300px +------------+ | .\n * | | | .\n * - - - | viewport | - - - - - - | - total_scroll_height\n * | | | 400px\n * 500px +------------+ |\n * | |\n * 600px +--------------------------+\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n * @param {*} nrows\n * @returns\n */\n _calculate_row_range(nrows) {\n const { height } = this._container_size;\n const row_height = this._column_sizes.row_height || 19;\n const header_levels = this._view_cache.config.column_pivots.length;\n const total_scroll_height = Math.max(\n 1,\n this._virtual_panel.offsetHeight - height,\n );\n const percent_scroll =\n Math.max(Math.ceil(this.scrollTop), 0) / total_scroll_height;\n const clip_panel_row_height = height / row_height - header_levels;\n const relative_nrows = nrows || 0;\n const scrollable_rows = Math.max(\n 0,\n relative_nrows - clip_panel_row_height,\n );\n const start_row = scrollable_rows * percent_scroll;\n const end_row = Math.max(\n 0,\n Math.min(start_row + clip_panel_row_height, nrows),\n );\n return { start_row, end_row };\n }\n\n _calc_start_column() {\n const scroll_index_offset = this._view_cache.config.row_pivots.length;\n let start_col = 0;\n let offset_width = 0;\n let diff = 0;\n while (offset_width < this.scrollLeft) {\n const new_val =\n this._column_sizes.indices[start_col + scroll_index_offset];\n diff = this.scrollLeft - offset_width;\n start_col += 1;\n offset_width += new_val !== undefined ? new_val : 60;\n }\n\n start_col +=\n diff /\n (this._column_sizes.indices[start_col + scroll_index_offset - 1] ||\n 60);\n return Math.max(0, start_col - 1);\n }\n\n /**\n * Calculates `start_col` and `end_col` for the viewport - most of the\n * details of which are actually calculated in `_max_column`, the equivalent\n * of `total_scroll_height` from `_calculate_row_range`.\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n * @returns\n */\n _calculate_column_range(num_columns) {\n if (\n this._virtual_mode === \"none\" ||\n this._virtual_mode === \"vertical\"\n ) {\n return { start_col: 0, end_col: Infinity };\n } else {\n const start_col = this._calc_start_column();\n const vis_cols =\n this.table_model.num_columns() ||\n Math.min(\n num_columns,\n Math.ceil(this._container_size.width / 60),\n );\n let end_col = start_col + vis_cols + 1;\n return { start_col, end_col };\n }\n }\n\n /**\n * Calculates the minimum possible starting column index for which the last\n * column is completely visible (e.g. not occluded by the container clip).\n * This is assumed to be the # of columns until the column widths are\n * calculated as they are scrolled into view by the user, which requires\n * special synchronization with _update_virtual_panel_width`\n * as the scrollable width will change as the user scrolls left to right.\n *\n * Once `_column_sizes.indices` has enough column widths populated from\n * user scrolling, it calulates the cumulative sum of column widths from\n * last visible column backwards, until the sum is larger than the viewport\n * px width, which is 1 below the max scroll column\n *\n * width = 290 = 210 = 100 = 0\n * 0px V V V 500px\n * +-----------------+-------+---------+--------+\n * | ..ol B) (Col C) | Col D | Col E | Col F |\n * | | 80px | 110px | 100px |\n * | | | | |\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n * @returns\n */\n _max_scroll_column(num_columns) {\n let width = 0;\n if (this._view_cache.config.row_pivots.length > 0) {\n for (const w of this._column_sizes.indices.slice(\n 0,\n this._view_cache.config.row_pivots.length,\n )) {\n width += w;\n }\n }\n let scroll_index_offset = this._view_cache.config.row_pivots.length;\n let max_scroll_column = num_columns;\n while (width < this._container_size.width && max_scroll_column >= 0) {\n max_scroll_column--;\n width +=\n this._column_sizes.indices[\n max_scroll_column + scroll_index_offset\n ] || 60;\n }\n\n return Math.min(num_columns - 1, max_scroll_column + 1);\n }\n\n /**\n * Determines whether the viewport is identical in row and column axes to\n * the previous viewport rendered, for throttling identical render requests,\n * e.g. when the logical (row-wise) viewport does not change, but the pixel\n * viewport has moved a few px.\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n * @param {*} {start_col, end_col, start_row, end_row}\n * @returns\n */\n _validate_viewport({ start_col, end_col, start_row, end_row }) {\n start_row = Math.floor(start_row);\n end_row = Math.ceil(end_row);\n start_col = Math.floor(start_col);\n end_col = Math.ceil(end_col);\n const invalid_column = this._start_col !== start_col;\n const invalid_row =\n this._start_row !== start_row ||\n this._end_row !== end_row ||\n this._end_col !== end_col;\n this._start_col = start_col;\n this._end_col = end_col;\n this._start_row = start_row;\n this._end_row = end_row;\n return { invalid_column, invalid_row };\n }\n\n _calc_scrollable_column_width(num_columns) {\n let scroll_index_offset = this._view_cache.config.row_pivots.length;\n const max_scroll_column = this._max_scroll_column(num_columns);\n let cidx = scroll_index_offset,\n virtual_width = 0;\n\n while (cidx < max_scroll_column + scroll_index_offset) {\n virtual_width += this._column_sizes.indices[cidx] || 60;\n cidx++;\n }\n\n if (cidx < this._column_sizes.indices.length) {\n let viewport_width = this._column_sizes.indices\n .slice(0, this._view_cache.config.row_pivots.length)\n .reduce((x, y) => x + y, 0);\n virtual_width += Math.max(\n 0,\n this._column_sizes.indices[cidx] -\n (this._container_size.width - viewport_width) || 0,\n );\n }\n\n return virtual_width;\n }\n\n /**\n * Updates the `virtual_panel` width based on view state.\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n * @param {*} invalid\n */\n _update_virtual_panel_width(invalid, num_columns) {\n if (invalid) {\n if (\n this._virtual_mode === \"vertical\" ||\n this._virtual_mode === \"none\"\n ) {\n this._virtual_panel.style.width =\n this._column_sizes.indices.reduce((x, y) => x + y, 0) +\n \"px\";\n } else {\n const virtual_width =\n this._calc_scrollable_column_width(num_columns);\n if (virtual_width !== 0) {\n const panel_width =\n this._container_size.width + virtual_width + 2;\n this._virtual_panel.style.width = panel_width + \"px\";\n } else {\n this._virtual_panel.style.width = \"1px\";\n }\n }\n }\n }\n\n /**\n * Updates the `virtual_panel` height based on the view state.\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n * @param {*} nrows\n */\n _update_virtual_panel_height(nrows) {\n const { row_height = 19 } = this._column_sizes;\n const header_height =\n this._view_cache.config.column_pivots.length * row_height;\n let virtual_panel_px_size;\n virtual_panel_px_size = Math.min(\n BROWSER_MAX_HEIGHT,\n nrows * row_height + header_height,\n );\n this._virtual_panel.style.height = `${virtual_panel_px_size}px`;\n }\n\n /**\n * Draws this virtual panel, given an object of render options that allow\n * the implementor to fine tune the individual render frames based on the\n * interaction and previous render state.\n *\n * @public\n * @memberof RegularVirtualTableViewModel\n * @param {DrawOptions} [options]\n * @param {boolean} [options.invalid_viewport=true]\n * @param {boolean} [options.preserve_width=false]\n * @param {boolean} [options.throttle=true]\n */\n async draw(options = {}) {\n if (typeof options.throttle !== \"undefined\" && !options.throttle) {\n return await internal_draw.call(this, options);\n } else {\n return await throttle_tag(this, () =>\n internal_draw.call(this, options),\n );\n }\n }\n\n async _draw_flush() {\n await flush_tag(this);\n }\n\n update_sub_cell_offset(viewport) {\n const y_offset =\n this._column_sizes.row_height * (viewport.start_row % 1) || 0;\n const x_offset =\n this._column_sizes.indices[\n (this.table_model._row_headers_length || 0) +\n Math.floor(viewport.start_col)\n ] *\n (viewport.start_col % 1) || 0;\n let style = this._sub_cell_style.sheet?.cssRules[0].style;\n if (style) {\n style.setProperty(`--regular-table--clip-x`, `${x_offset}px`);\n style.setProperty(`--regular-table--clip-y`, `${y_offset}px`);\n style.setProperty(`--regular-table--transform-x`, `-${x_offset}px`);\n style.setProperty(`--regular-table--transform-y`, `-${y_offset}px`);\n }\n }\n}\n\nasync function internal_draw(options) {\n const __debug_start_time__ = DEBUG && performance.now();\n const { invalid_viewport = true, preserve_width = false } = options;\n const {\n num_columns,\n num_rows,\n num_row_headers,\n num_column_headers,\n row_height,\n } = await this._view_cache.view(0, 0, 0, 0);\n if (num_row_headers !== undefined) {\n this._view_cache.row_pivots = Array(num_row_headers).fill(0);\n }\n\n if (num_column_headers !== undefined) {\n this._view_cache.column_pivots = Array(num_column_headers).fill(0);\n }\n\n this._container_size = {\n width:\n this._virtual_mode === \"none\" || this._virtual_mode === \"vertical\"\n ? Infinity\n : this._table_clip.clientWidth,\n height:\n this._virtual_mode === \"none\" || this._virtual_mode === \"horizontal\"\n ? Infinity\n : this._table_clip.clientHeight,\n };\n\n this._update_virtual_panel_height(num_rows);\n if (!preserve_width) {\n this._update_virtual_panel_width(invalid_viewport, num_columns);\n }\n const viewport = this._calculate_viewport(num_rows, num_columns);\n const { invalid_row, invalid_column } = this._validate_viewport(viewport);\n if (\n this._invalid_schema ||\n invalid_row ||\n invalid_column ||\n invalid_viewport\n ) {\n let autosize_cells = [],\n needs_sub_cell_update = true;\n for await (let last_cells of this.table_model.draw(\n this._container_size,\n this._view_cache,\n this._selected_id,\n preserve_width,\n viewport,\n num_columns,\n )) {\n if (last_cells !== undefined) {\n autosize_cells = autosize_cells.concat(last_cells);\n }\n\n // We want to perform this before the next event loop so there\n // is no scroll jitter, but only on the first iteration as\n // subsequent viewports are incorrect.\n if (needs_sub_cell_update) {\n this.update_sub_cell_offset(viewport);\n needs_sub_cell_update = false;\n }\n\n this._is_styling = true;\n const callbacks = this._style_callbacks;\n for (const callback of callbacks) {\n await callback({ detail: this });\n }\n\n this._is_styling = false;\n if (!this._invalidated && last_cells !== undefined) {\n break;\n }\n\n this._invalidated = false;\n }\n\n this.table_model.autosize_cells(autosize_cells, row_height);\n this.table_model.header.reset_header_cache();\n if (!preserve_width) {\n this._update_virtual_panel_width(\n this._invalid_schema || invalid_column,\n num_columns,\n );\n }\n this._invalid_schema = false;\n } else {\n this.update_sub_cell_offset(viewport);\n }\n\n if (DEBUG) {\n log_perf(performance.now() - __debug_start_time__);\n }\n}\n\n/**\n * Options for the draw method.\n *\n * @public\n * @typedef DrawOptions\n * @type {object}\n * @property {boolean} [invalid_viewport]\n * @property {boolean} [preserve_width]\n */\n", "/******************************************************************************\n *\n * Copyright (c) 2020, the Regular Table Authors.\n *\n * This file is part of the Regular Table library, distributed under the terms\n * of the Apache License 2.0. The full license can be found in the LICENSE\n * file.\n *\n */\n\nimport { METADATA_MAP } from \"./constants\";\nimport { RegularVirtualTableViewModel } from \"./scroll_panel\";\nimport { throttle_tag } from \"./utils\";\n\n/**\n * WHen enabled, override iOS overscroll behavior by emulating scroll position\n * in JavaScript. This prevents \"bounce\" on edges, but it also removes scroll\n * inertia. This waspreviously enabled by default in `regular-table<=0.4.3`,\n * but this version also had bugged (exaggerated) position calculation.\n * As `0.5.0` introduces sub-cell scrolling by defualt, this is now disabled by\n * default as well.\n */\nconst IOS_DISABLE_OVERSCROLL = false;\n\n/**\n *\n *\n * @class RegularViewEventModel\n * @extends {RegularVirtualTableViewModel}\n */\nexport class RegularViewEventModel extends RegularVirtualTableViewModel {\n register_listeners() {\n // // TODO see `_on_click_or_dblclick` method jsdoc\n // this.addEventListener(\"dblclick\", this._on_dblclick.bind(this));\n\n this.addEventListener(\n \"mousedown\",\n this._on_click_or_dblclick.bind(this),\n );\n this.addEventListener(\"scroll\", this._on_scroll.bind(this), {\n passive: true,\n });\n\n this._register_glitch_scroll_listeners();\n }\n\n /**\n *\n * @internal\n * @private\n * @memberof RegularViewEventModel\n * @returns\n */\n async _on_scroll(event) {\n event.stopPropagation();\n await this.draw({ invalid_viewport: false });\n this.dispatchEvent(new CustomEvent(\"regular-table-scroll\"));\n }\n\n /**\n * Modern and mobile browsers implement complex scroll behavior to\n * implement fancy touch and intertia effects; these must be intercepted\n * and disabled to achieve clean virtual scrolling in the presence of a\n * `fixed` element.\n *\n * @internal\n * @private\n * @memberof RegularViewEventModel\n */\n _register_glitch_scroll_listeners() {\n this.addEventListener(\"mousewheel\", this._on_mousewheel.bind(this), {\n passive: true,\n });\n\n if (IOS_DISABLE_OVERSCROLL) {\n this.addEventListener(\"touchmove\", this._on_touchmove.bind(this));\n this.addEventListener(\n \"touchstart\",\n this._on_touchstart.bind(this),\n {\n passive: true,\n },\n );\n }\n }\n /**\n * Mousewheel must precalculate in addition to `_on_scroll` to prevent\n * visual artifacts due to scrolling \"inertia\" on modern browsers.\n *\n * @internal\n * @private\n * @memberof RegularViewEventModel\n * @param {*} event\n */\n _on_mousewheel(event) {\n if (!window.safari) {\n // **** Apple\n return;\n }\n\n const { clientWidth, clientHeight, scrollTop, scrollLeft } = this;\n event.preventDefault();\n event.returnValue = false;\n const total_scroll_height = Math.max(\n 1,\n this._virtual_panel.offsetHeight - clientHeight,\n );\n const total_scroll_width = Math.max(\n 1,\n this._virtual_panel.offsetWidth - clientWidth,\n );\n this.scrollTop = Math.max(\n 0,\n Math.min(total_scroll_height, scrollTop + event.deltaY),\n );\n this.scrollLeft = Math.max(\n 0,\n Math.min(total_scroll_width, scrollLeft + event.deltaX),\n );\n this._on_scroll(event);\n }\n\n /**\n * Touchmove/touchstart must precalculate in addition to `_on_scroll` to\n * prevent visual artifacts due to scrolling \"inertia\" on mobile browsers.\n * This has the unfortunate side-effect of disabling scroll intertia.\n *\n * @internal\n * @private\n * @memberof RegularViewEventModel\n * @param {*} event\n * @returns\n */\n _on_touchmove(event) {\n event.stopPropagation();\n event.preventDefault();\n event.returnValue = false;\n const { clientWidth, clientHeight } = this;\n const total_scroll_height = Math.max(\n 1,\n this._virtual_panel.offsetHeight - clientHeight,\n );\n const total_scroll_width = Math.max(\n 1,\n this._virtual_panel.offsetWidth - clientWidth,\n );\n this.scrollTop = Math.min(\n total_scroll_height,\n this._memo_scroll_top +\n (this._memo_touch_startY - event.touches[0].pageY),\n );\n this.scrollLeft = Math.min(\n total_scroll_width,\n this._memo_scroll_left +\n (this._memo_touch_startX - event.touches[0].pageX),\n );\n this._on_scroll(event);\n }\n\n _on_touchstart(event) {\n this._memo_touch_startY = event.touches[0].pageY;\n this._memo_touch_startX = event.touches[0].pageX;\n this._memo_scroll_top = this.scrollTop;\n this._memo_scroll_left = this.scrollLeft;\n }\n\n /**\n * Handles double-click header width override reset.\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n * @param {*} event\n * @returns\n */\n async _on_dblclick(event) {\n let element = event.target;\n while (element.tagName !== \"TD\" && element.tagName !== \"TH\") {\n element = element.parentElement;\n if (!this.contains(element)) {\n return;\n }\n }\n\n const is_resize = event.target.classList.contains(\"rt-column-resize\");\n const metadata = METADATA_MAP.get(element);\n if (is_resize) {\n event.stopImmediatePropagation();\n // await new Promise(queueMicrotask);\n element.style.minWidth = \"\";\n element.style.maxWidth = \"\";\n if (event.shiftKey) {\n this._column_sizes.override = [];\n this._column_sizes.auto = [];\n this._column_sizes.indices = [];\n } else {\n this._column_sizes.override[metadata.size_key] = undefined;\n this._column_sizes.auto[metadata.size_key] = undefined;\n this._column_sizes.indices[metadata.size_key] = undefined;\n }\n\n for (const row of event.shiftKey\n ? [\n this.table_model.header.cells[\n this.table_model.header.cells.length - 1\n ],\n ...this.table_model.body.cells,\n ]\n : this.table_model.body.cells) {\n for (const td of event.shiftKey\n ? row\n : [row[metadata._virtual_x]]) {\n if (!td) {\n continue;\n }\n\n td.style.minWidth = \"\";\n td.style.maxWidth = \"\";\n td.classList.remove(\"rt-cell-clip\");\n }\n }\n\n await this.draw();\n }\n }\n\n /**\n * Dispatches all click events to other handlers, depending on\n * `event.target`.\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n * @param {*} event\n * @returns\n */\n async _on_click(event) {\n if (event.button !== 0) {\n return;\n }\n\n let element = event.target;\n while (element.tagName !== \"TD\" && element.tagName !== \"TH\") {\n element = element.parentElement;\n if (!this.contains(element)) {\n return;\n }\n }\n\n const is_resize = event.target.classList.contains(\"rt-column-resize\");\n const metadata = METADATA_MAP.get(element);\n if (is_resize) {\n this._on_resize_column(event, element, metadata);\n event.stopImmediatePropagation();\n }\n }\n\n /**\n * `dblclick` event does not work reliably for some reason so dispatch this\n * event in JavaScript instead.\n * @param {`*`} event\n */\n async _on_click_or_dblclick(event) {\n const now = performance.now();\n if (this._last_clicked_time && now - this._last_clicked_time < 500) {\n this._last_clicked_time = now;\n await this._on_dblclick(event);\n } else {\n this._last_clicked_time = now;\n await this._on_click(event);\n }\n }\n\n /**\n * Regular event for column resize.\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n * @param {*} event\n * @param {*} element\n * @param {*} metadata\n */\n _on_resize_column(event, element, metadata) {\n const { _virtual_x, size_key } = metadata;\n const start = event.pageX;\n const header_x = _virtual_x + element.colSpan - 1;\n const header_element =\n this.table_model.header.get_column_header(header_x);\n const width = this._column_sizes.indices[size_key];\n const move = (event) =>\n throttle_tag(\n this,\n async () =>\n await this._on_resize_column_move(\n event,\n header_element,\n start,\n width,\n size_key,\n header_x,\n ),\n );\n const up = () => {\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n const override_width = this._column_sizes.override[size_key];\n const should_redraw =\n this._column_sizes.indices[size_key] !== override_width;\n this._column_sizes.indices[size_key] = override_width;\n if (should_redraw) {\n this.draw();\n }\n };\n\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n }\n\n /**\n * Regular event for mouse movement when resizing a column.\n *\n * @internal\n * @private\n * @memberof RegularVirtualTableViewModel\n * @param {*} event\n * @param {*} th\n * @param {*} start\n * @param {*} width\n * @param {*} metadata\n */\n async _on_resize_column_move(event, th, start, width, size_key, virtual_x) {\n await new Promise(requestAnimationFrame);\n const diff = event.pageX - start;\n const override_width = Math.max(1, width + diff);\n this._column_sizes.override[size_key] = override_width;\n\n // If the column is smaller, new columns may need to be fetched, so\n // redraw, else just update the DOM widths as if redrawn.\n if (diff < 0) {\n await this.draw({ preserve_width: true, throttle: false });\n } else {\n th.style.minWidth = override_width + \"px\";\n th.style.maxWidth = override_width + \"px\";\n const auto_width = this._column_sizes.auto[size_key];\n for (const row of this.table_model.body.cells) {\n const td = row[virtual_x];\n if (td) {\n td.style.maxWidth = td.style.minWidth =\n override_width + \"px\";\n td.classList.toggle(\n \"rt-cell-clip\",\n auto_width > override_width,\n );\n }\n }\n }\n }\n}\n", "/******************************************************************************\n *\n * Copyright (c) 2020, the Regular Table Authors.\n *\n * This file is part of the Regular Table library, distributed under the terms\n * of the Apache License 2.0. The full license can be found in the LICENSE\n * file.\n *\n */\n\nimport { METADATA_MAP } from \"./constants\";\n\n/******************************************************************************\n *\n * View Model\n *\n */\n\nclass ElemFactory {\n constructor(name) {\n this._name = name;\n this._elements = [];\n this._index = 0;\n }\n\n reset() {\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\n const elem = this._elements[this._index];\n this._index += 1;\n return elem;\n }\n}\n\nexport class ViewModel {\n constructor(column_sizes, container, table) {\n this._column_sizes = column_sizes;\n this._container = container;\n this._span_factory = new ElemFactory(\"span\");\n this.table = table;\n this.cells = [];\n this.rows = [];\n }\n\n num_columns() {\n return this._get_row(Math.max(0, this.rows.length - 1)).row_container\n .length;\n }\n\n num_rows() {\n return this.cells.length;\n }\n\n _set_metadata(td, metadata) {\n METADATA_MAP.set(td, metadata);\n }\n\n _get_or_create_metadata(td) {\n if (td === undefined) {\n return {};\n } else if (METADATA_MAP.has(td)) {\n return METADATA_MAP.get(td);\n } else {\n const metadata = {};\n METADATA_MAP.set(td, metadata);\n return metadata;\n }\n }\n\n _replace_cell(ridx, cidx) {\n const { tr, row_container } = this._get_row(ridx);\n let td = row_container[cidx];\n if (td) {\n tr.removeChild(td);\n row_container.splice(cidx, 1, undefined);\n }\n return td;\n }\n\n _fetch_cell(ridx, cidx) {\n if (ridx < 0 || cidx < 0) {\n return;\n }\n\n return this.cells[ridx]?.[cidx];\n }\n\n _get_row(ridx) {\n let tr = this.rows[ridx];\n if (!tr) {\n tr = this.rows[ridx] = document.createElement(\"tr\");\n this.table.appendChild(tr);\n }\n\n let row_container = this.cells[ridx];\n if (!row_container) {\n row_container = this.cells[ridx] = [];\n }\n\n return { tr, row_container };\n }\n\n _get_cell(tag = \"TD\", ridx, cidx) {\n const { tr, row_container } = this._get_row(ridx);\n let td = row_container[cidx];\n if (!td) {\n if (cidx < row_container.length) {\n td = row_container[cidx] = document.createElement(tag);\n tr.insertBefore(\n td,\n row_container.slice(cidx + 1).find((x) => x),\n );\n } else {\n td = row_container[cidx] = document.createElement(tag);\n tr.appendChild(td);\n }\n }\n if (td.tagName !== tag) {\n const new_td = document.createElement(tag);\n tr.replaceChild(new_td, td);\n this.cells[ridx].splice(cidx, 1, new_td);\n td = new_td;\n }\n return td;\n }\n\n _clean_columns(cidx) {\n for (let i = 0; i < this.rows.length; i++) {\n const tr = this.rows[i];\n const row_container = this.cells[i];\n this.cells[i] = row_container.slice(0, cidx[i] || cidx);\n const idx = this.cells[i].filter((x) => x !== undefined).length;\n while (tr.children[idx]) {\n tr.removeChild(tr.children[idx]);\n }\n }\n }\n\n _clean_rows(ridx) {\n while (this.table.children[ridx]) {\n this.table.removeChild(this.table.children[ridx]);\n }\n this.rows = this.rows.slice(0, ridx);\n this.cells = this.cells.slice(0, ridx);\n }\n}\n", "/******************************************************************************\n *\n * Copyright (c) 2020, the Regular Table Authors.\n *\n * This file is part of the Regular Table library, distributed under the terms\n * of the Apache License 2.0. The full license can be found in the LICENSE\n * file.\n *\n */\n\nimport { ViewModel } from \"./view_model\";\n\n/**\n * <thead> view model. This model accumulates state in the form of\n * column_sizes, which leverages <tables> autosize behavior across\n * virtual pages.\n *\n * @class RegularHeaderViewModel\n */\nexport class RegularHeaderViewModel extends ViewModel {\n constructor(...args) {\n super(...args);\n this._group_header_cache = [];\n this._offset_cache = [];\n }\n\n _draw_group_th(offset_cache, d, column) {\n const th = this._get_cell(\"TH\", d, offset_cache[d] || 0);\n offset_cache[d] += 1;\n th.removeAttribute(\"colspan\");\n th.style.minWidth = \"0\";\n\n th.textContent = \"\";\n if (column instanceof HTMLElement) {\n th.appendChild(column);\n } else {\n const span = this._span_factory.get(\"span\");\n span.textContent = column;\n th.appendChild(span);\n }\n\n const resizeSpan = this._span_factory.get(\"span\");\n resizeSpan.className = \"rt-column-resize\";\n th.appendChild(resizeSpan);\n\n return th;\n }\n\n _draw_group(column, column_name, th) {\n const metadata = this._get_or_create_metadata(th);\n metadata.column_header = column;\n metadata.value = column_name;\n metadata.value = column_name;\n return metadata;\n }\n\n _draw_th(column, column_name, th, cidx, size_key) {\n const metadata = this._get_or_create_metadata(th);\n metadata.column_header = column;\n metadata.value = column_name;\n metadata.size_key = size_key.length ? size_key[0] : size_key; // FIXME\n\n if (!(size_key.length > 1)) {\n const override_width =\n this._column_sizes.override[metadata.size_key];\n const auto_width = this._column_sizes.auto[metadata.size_key];\n if (override_width) {\n th.classList.toggle(\n \"rt-cell-clip\",\n auto_width > override_width,\n );\n th.style.minWidth = override_width + \"px\";\n th.style.maxWidth = override_width + \"px\";\n } else if (auto_width) {\n th.classList.remove(\"rt-cell-clip\");\n th.style.maxWidth = \"\";\n th.style.minWidth = auto_width + \"px\";\n } else {\n th.style.maxWidth = \"\";\n th.style.maxWidth = \"\";\n }\n }\n\n return metadata;\n }\n\n get_column_header(cidx) {\n return this._get_cell(\"TH\", this.num_rows() - 1, cidx);\n }\n\n draw(\n alias,\n parts,\n colspan,\n x,\n size_key,\n x0,\n _virtual_x,\n column_header_merge_depth,\n merge_headers,\n ) {\n const header_levels = parts?.length; //config.column_pivots.length + 1;\n if (header_levels === 0) return;\n let th, metadata, column_name;\n let output = undefined;\n column_header_merge_depth =\n typeof column_header_merge_depth === \"undefined\"\n ? header_levels - 1\n : column_header_merge_depth;\n for (let d = 0; d < header_levels; d++) {\n column_name = parts[d] ? parts[d] : \"\";\n this._offset_cache[d] = this._offset_cache[d] || 0;\n\n if (d < column_header_merge_depth) {\n if (\n merge_headers &&\n this._group_header_cache?.[d]?.[0]?.value === column_name\n ) {\n th = this._group_header_cache[d][1];\n this._group_header_cache[d][2] += 1;\n if (colspan === 1) {\n this._group_header_cache[d][0].row_header_x = size_key;\n }\n th.setAttribute(\"colspan\", this._group_header_cache[d][2]);\n } else {\n th = this._draw_group_th(\n this._offset_cache,\n d,\n column_name,\n );\n metadata = this._draw_group(parts, column_name, th);\n this._group_header_cache[d] = [metadata, th, 1];\n }\n } else {\n th = this._draw_group_th(this._offset_cache, d, column_name);\n\n // Update the group header's metadata such that each group\n // header has the same metadata coordinates of its rightmost\n // column.\n metadata = this._draw_th(\n alias || parts,\n column_name,\n th,\n x,\n size_key,\n );\n if (typeof output === \"undefined\") {\n output = { th, metadata };\n }\n\n for (const [group_meta] of this._group_header_cache) {\n group_meta.size_key = metadata.size_key;\n }\n th.removeAttribute(\"colspan\");\n }\n\n this._get_row(d).tr.classList.toggle(\n \"rt-autosize\",\n d === column_header_merge_depth,\n );\n th.classList.toggle(\"rt-group-corner\", x === undefined);\n if (metadata) {\n metadata.x = typeof x === \"undefined\" ? x : Math.floor(x);\n metadata.column_header_y = d;\n metadata.x0 = Math.floor(x0);\n metadata._virtual_x = _virtual_x;\n if (colspan === 1) {\n metadata.row_header_x = size_key;\n }\n }\n }\n\n this._clean_rows(this._offset_cache.length);\n output = output || { th, metadata };\n return output;\n }\n\n clean() {\n this._clean_columns(this._offset_cache);\n }\n\n reset_header_cache() {\n this._offset_cache = [];\n this._group_header_cache = [];\n }\n}\n", "/******************************************************************************\n *\n * Copyright (c) 2020, the Regular Table Authors.\n *\n * This file is part of the Regular Table library, distributed under the terms\n * of the Apache License 2.0. The full license can be found in the LICENSE\n * file.\n *\n */\n\nimport { ViewModel } from \"./view_model\";\n\n/**\n * <tbody> view model.\n *\n * @class RegularBodyViewModel\n */\nexport class RegularBodyViewModel extends ViewModel {\n _draw_td(\n tagName,\n ridx,\n val,\n cidx,\n { column_name },\n { ridx_offset },\n size_key,\n ) {\n const td = this._get_cell(tagName, ridx, cidx);\n const metadata = this._get_or_create_metadata(td);\n metadata.y = ridx + Math.floor(ridx_offset);\n metadata.size_key = size_key;\n if (tagName === \"TD\") {\n metadata.column_header = column_name;\n }\n const override_width = this._column_sizes.override[metadata.size_key];\n if (override_width) {\n const auto_width = this._column_sizes.auto[metadata.size_key];\n td.classList.toggle(\"rt-cell-clip\", auto_width > override_width);\n td.style.minWidth = override_width + \"px\";\n td.style.maxWidth = override_width + \"px\";\n } else {\n td.classList.remove(\"rt-cell-clip\");\n td.style.minWidth = \"\";\n td.style.maxWidth = \"\";\n }\n\n if (metadata.value !== val) {\n if (val instanceof HTMLElement) {\n td.textContent = \"\";\n td.appendChild(val);\n } else {\n td.textContent = val;\n }\n }\n\n metadata.value = val;\n return { td, metadata };\n }\n\n draw(\n container_height,\n column_state,\n view_state,\n th = false,\n x,\n x0,\n size_key,\n merge_headers,\n ) {\n const {\n cidx,\n column_data,\n row_headers,\n column_data_listener_metadata,\n } = column_state;\n let { row_height } = view_state;\n let metadata;\n const ridx_offset = [],\n tds = [];\n let ridx = 0;\n const cidx_offset = [];\n for (let i = 0; i < (th ? view_state.row_headers_length : 1); i++) {\n ridx = 0;\n\n for (const val of column_data) {\n const id = row_headers?.[ridx];\n let obj;\n if (th) {\n const row_header = val[i];\n const prev_row = this._fetch_cell(\n ridx - (ridx_offset[i] || 1),\n cidx + i,\n );\n const prev_row_metadata =\n this._get_or_create_metadata(prev_row);\n\n const prev_col = this._fetch_cell(\n ridx,\n cidx + i - (cidx_offset[ridx] || 1),\n );\n const prev_col_metadata =\n this._get_or_create_metadata(prev_col);\n\n if (\n merge_headers &&\n prev_col &&\n (prev_col_metadata.value === row_header ||\n row_header === undefined) &&\n !prev_col.hasAttribute(\"rowspan\")\n ) {\n cidx_offset[ridx] = cidx_offset[ridx]\n ? cidx_offset[ridx] + 1\n : 2;\n prev_col.setAttribute(\"colspan\", cidx_offset[ridx]);\n this._replace_cell(ridx, cidx + i);\n } else if (\n merge_headers &&\n prev_row &&\n prev_row_metadata.value === row_header &&\n !prev_row.hasAttribute(\"colspan\")\n ) {\n ridx_offset[i] = ridx_offset[i]\n ? ridx_offset[i] + 1\n : 2;\n prev_row.setAttribute(\"rowspan\", ridx_offset[i]);\n this._replace_cell(ridx, cidx + i);\n } else {\n obj = this._draw_td(\n \"TH\",\n ridx,\n row_header,\n cidx + i,\n column_state,\n view_state,\n i,\n );\n obj.td.style.display = \"\";\n obj.td.removeAttribute(\"rowspan\");\n obj.td.removeAttribute(\"colspan\");\n obj.metadata.row_header = val;\n obj.metadata.row_header_x = i;\n obj.metadata.y0 = Math.floor(view_state.ridx_offset);\n obj.metadata.y1 = Math.ceil(view_state.y1);\n obj.metadata._virtual_x = i;\n if (typeof x0 !== \"undefined\") {\n obj.metadata.x0 = Math.floor(x0);\n }\n ridx_offset[i] = 1;\n cidx_offset[ridx] = 1;\n tds[i] = obj;\n }\n } else {\n obj = this._draw_td(\n \"TD\",\n ridx,\n val,\n cidx,\n column_state,\n view_state,\n size_key,\n );\n if (column_data_listener_metadata) {\n obj.metadata.user = column_data_listener_metadata[ridx];\n }\n\n obj.metadata.x =\n typeof x === \"undefined\" ? x : Math.floor(x);\n obj.metadata.x1 = Math.ceil(view_state.x1);\n obj.metadata.row_header = id || [];\n obj.metadata.y0 = Math.floor(view_state.ridx_offset);\n obj.metadata.y1 = Math.ceil(view_state.y1);\n obj.metadata.dx = Math.floor(x - x0);\n obj.metadata.dy =\n obj.metadata.y - Math.floor(obj.metadata.y0);\n obj.metadata._virtual_x = cidx;\n if (typeof x0 !== \"undefined\") {\n obj.metadata.x0 = Math.floor(x0);\n }\n\n tds[0] = obj;\n }\n\n ridx++;\n metadata = obj ? obj.metadata : metadata;\n row_height = row_height || obj?.td.offsetHeight;\n if (ridx * row_height > container_height) {\n break;\n }\n }\n }\n this._clean_rows(ridx);\n return { tds, ridx, metadata, row_height };\n }\n\n clean({ ridx, cidx }) {\n this._clean_rows(ridx);\n this._clean_columns(cidx);\n }\n}\n", "/******************************************************************************\n *\n * Copyright (c) 2020, the Regular Table Authors.\n *\n * This file is part of the Regular Table library, distributed under the terms\n * of the Apache License 2.0. The full license can be found in the LICENSE\n * file.\n *\n */\n\nimport { RegularHeaderViewModel } from \"./thead\";\nimport { RegularBodyViewModel } from \"./tbody\";\nimport { html } from \"./utils\";\n\n/**\n * <table> view model. In order to handle unknown column width when `draw()`\n * is called, this model will iteratively fetch more data to fill in columns\n * until the page is complete, and makes some column viewport estimations\n * when this information is not availble.\n *\n * @class RegularTableViewModel\n */\nexport class RegularTableViewModel {\n constructor(table_clip, column_sizes, element) {\n this.clear(element);\n const [table] = element.children;\n const [thead, tbody] = table.children;\n this.table = table;\n this._column_sizes = column_sizes;\n this.header = new RegularHeaderViewModel(\n column_sizes,\n table_clip,\n thead,\n );\n this.body = new RegularBodyViewModel(column_sizes, table_clip, tbody);\n this.fragment = document.createDocumentFragment();\n }\n\n num_columns() {\n return this.header.num_columns();\n }\n\n clear(element) {\n element.innerHTML = html`\n <table cellspacing=\"0\">\n <thead></thead>\n <tbody></tbody>\n </table>\n `;\n }\n\n /**\n * Calculate amendments to auto size from this render pass.\n *\n * @param {*} last_cells\n * @param {*} {columns, column_pivots}\n * @memberof RegularTableViewModel\n */\n autosize_cells(last_cells, override_row_height) {\n while (last_cells.length > 0) {\n const [cell, metadata] = last_cells.pop();\n const box = cell.getBoundingClientRect();\n if (!box) {\n continue;\n }\n this._column_sizes.row_height =\n override_row_height ||\n Math.max(\n 10,\n Math.min(\n this._column_sizes.row_height || box.height,\n box.height,\n ),\n );\n if (!metadata) {\n continue;\n }\n this._column_sizes.indices[metadata.size_key] = box.width;\n const is_override =\n this._column_sizes.override[metadata.size_key] !== undefined;\n if (box.width && !is_override) {\n this._column_sizes.auto[metadata.size_key] = box.width;\n }\n\n if (cell.style.minWidth === \"0px\") {\n cell.style.minWidth = `${box.width}px`;\n }\n }\n }\n\n async *draw(\n container_size,\n view_cache,\n selected_id,\n preserve_width,\n viewport,\n num_columns,\n ) {\n const { width: container_width, height: container_height } =\n container_size;\n const { view, config } = view_cache;\n let {\n data,\n row_headers,\n column_headers,\n metadata: data_listener_metadata,\n num_row_headers,\n num_column_headers,\n column_header_merge_depth,\n merge_headers = \"both\",\n } = await view(\n Math.floor(viewport.start_col),\n Math.floor(viewport.start_row),\n Math.ceil(viewport.end_col),\n Math.ceil(viewport.end_row),\n );\n\n const merge_row_headers =\n merge_headers === \"both\" || merge_headers === \"row\";\n const merge_column_headers =\n merge_headers === \"both\" || merge_headers === \"column\";\n const {\n start_row: ridx_offset = 0,\n start_col: x0 = 0,\n end_col: x1 = 0,\n end_row: y1 = 0,\n } = viewport;\n\n // pad row_headers for embedded renderer\n // TODO maybe dont need this - perspective compat\n if (row_headers) {\n this._row_headers_length = row_headers.reduce(\n (max, x) => Math.max(max, x.length),\n 0,\n );\n row_headers = row_headers.map((x) => {\n x.length = this._row_headers_length;\n return x;\n });\n }\n\n if (num_row_headers !== undefined) {\n view_cache.config.row_pivots = Array(num_row_headers).fill(0);\n } else {\n view_cache.config.row_pivots = Array(\n row_headers?.[0]?.length || 0,\n ).fill(0);\n }\n\n if (num_column_headers !== undefined) {\n view_cache.config.column_pivots = Array(num_column_headers).fill(0);\n } else {\n view_cache.config.column_pivots = Array(\n column_headers?.[0]?.length || 0,\n ).fill(0);\n }\n\n const sub_cell_offset =\n this._column_sizes.indices[\n (this._row_headers_length || 0) + Math.floor(viewport.start_col)\n ] || 0;\n\n const view_state = {\n viewport_width: 0,\n selected_id,\n ridx_offset,\n sub_cell_offset,\n x0: x0,\n x1: x1,\n y1: y1,\n row_height: this._column_sizes.row_height,\n row_headers_length: this._row_headers_length,\n };\n\n let cont_body,\n _virtual_x = 0,\n last_cells = [],\n first_col = true;\n if (row_headers?.length > 0) {\n const column_name = config.row_pivots.join(\",\");\n\n const column_state = {\n column_name,\n cidx: 0,\n column_data: row_headers,\n row_headers,\n first_col,\n };\n const size_key = _virtual_x + Math.floor(x0);\n cont_body = this.body.draw(\n container_height,\n column_state,\n { ...view_state, x0: 0 },\n true,\n undefined,\n undefined,\n size_key,\n merge_row_headers,\n );\n const cont_heads = [];\n for (let i = 0; i < view_cache.config.row_pivots.length; i++) {\n const header = this.header.draw(\n column_name,\n Array(view_cache.config.column_pivots.length).fill(\"\"),\n 1,\n undefined,\n i,\n x0,\n i,\n column_header_merge_depth,\n merge_column_headers,\n );\n if (!!header) {\n cont_heads.push(header);\n }\n }\n first_col = false;\n view_state.viewport_width += cont_heads.reduce(\n (total, { th }, i) =>\n total + (this._column_sizes.indices[i] || th.offsetWidth),\n 0,\n );\n view_state.row_height =\n view_state.row_height || cont_body.row_height;\n _virtual_x = row_headers[0].length;\n if (!preserve_width) {\n for (let i = 0; i < view_cache.config.row_pivots.length; i++) {\n const { td, metadata } = cont_body.tds[i] || {};\n const { th, metadata: hmetadata } = cont_heads[i] || {};\n if (!!td || !!th) {\n last_cells.push([th || td, hmetadata || metadata]);\n }\n }\n }\n }\n\n try {\n let dcidx = 0;\n const num_visible_columns = num_columns - viewport.start_col;\n while (dcidx < num_visible_columns) {\n // If there is no column for this data, our pre-fetch viewport\n // estimate was wrong and we'll need to do a mid-render fetch\n // to get more data.\n if (!data[dcidx]) {\n let missing_cidx = Math.max(viewport.end_col, 0);\n viewport.start_col = missing_cidx;\n\n // Calculate a new data window width based on how large the\n // columns drawn so far take up. This can either be\n // summed if we've drawn/measured these columns before,\n // or estimated by avg if the missing columns have never\n // been seen by the renderer.\n let end_col_offset = 0,\n size_extension = 0;\n while (\n this._column_sizes.indices.length >\n _virtual_x + x0 + end_col_offset + 1 &&\n size_extension + view_state.viewport_width <\n container_width\n ) {\n end_col_offset++;\n size_extension +=\n this._column_sizes.indices[\n _virtual_x + x0 + end_col_offset\n ];\n }\n\n if (\n size_extension + view_state.viewport_width <\n container_width\n ) {\n const estimate = Math.min(\n num_columns,\n missing_cidx + 5,\n ); //Math.ceil(((dcidx + end_col_offset) * container_width) / (view_state.viewport_width + size_extension) + 1);\n viewport.end_col = Math.max(\n 1,\n Math.min(num_columns, estimate),\n );\n } else {\n viewport.end_col = Math.max(\n 1,\n Math.min(\n num_columns,\n missing_cidx + end_col_offset,\n ),\n );\n }\n\n // Fetch the new data window extension and append it to the\n // cached data page and continue.\n const new_col_req = view(\n Math.floor(viewport.start_col),\n Math.floor(viewport.start_row),\n Math.ceil(viewport.end_col),\n Math.ceil(viewport.end_row),\n );\n yield undefined;\n const new_col = await new_col_req;\n\n if (\n typeof new_col.column_header_merge_depth !== \"undefined\"\n ) {\n column_header_merge_depth =\n new_col.column_header_merge_depth;\n }\n\n if (typeof new_col.merge_headers !== \"undefined\") {\n merge_headers = new_col.merge_headers;\n }\n\n if (new_col.data.length === 0) {\n // The viewport is size 0, first the estimate, then the\n // first-pass render, so really actually abort now.\n yield last_cells;\n return;\n }\n\n viewport.end_col = viewport.start_col + new_col.data.length;\n for (let i = 0; i < new_col.data.length; i++) {\n data[dcidx + i] = new_col.data[i];\n if (new_col.metadata) {\n data_listener_metadata[dcidx + i] =\n new_col.metadata[i];\n }\n\n if (column_headers) {\n column_headers[dcidx + i] =\n new_col.column_headers?.[i];\n }\n }\n }\n\n const column_name = column_headers?.[dcidx] || \"\";\n const column_data = data[dcidx];\n const column_data_listener_metadata =\n data_listener_metadata?.[dcidx];\n const column_state = {\n column_name,\n cidx: _virtual_x,\n column_data,\n column_data_listener_metadata,\n row_headers,\n first_col,\n };\n\n const x = dcidx + x0;\n const size_key = _virtual_x + Math.floor(x0);\n const cont_head = this.header.draw(\n undefined,\n column_name,\n undefined,\n x,\n size_key,\n x0,\n _virtual_x,\n column_header_merge_depth,\n merge_column_headers,\n );\n cont_body = this.body.draw(\n container_height,\n column_state,\n view_state,\n false,\n x,\n x0,\n size_key,\n merge_row_headers,\n );\n first_col = false;\n if (!preserve_width) {\n for (const { td, metadata } of cont_body.tds) {\n last_cells.push([\n cont_head?.th || td,\n cont_head?.metadata || metadata,\n ]);\n }\n }\n\n const last_measured_col_width =\n this._column_sizes.indices[_virtual_x + Math.floor(x0)];\n if (last_measured_col_width) {\n view_state.viewport_width += last_measured_col_width;\n } else {\n // This is probably wrong since the column has yet to be\n // styled, but we'll use it as an estimate and recalc after.\n view_state.viewport_width +=\n cont_head?.th?.offsetWidth ||\n cont_body.tds.reduce(\n (x, y) => x + y.td?.offsetWidth,\n 0,\n );\n }\n\n view_state.row_height =\n view_state.row_height || cont_body.row_height;\n _virtual_x++;\n dcidx++;\n\n if (\n view_state.viewport_width - view_state.sub_cell_offset >\n container_width\n ) {\n this.body.clean({\n ridx: cont_body?.ridx || 0,\n cidx: _virtual_x,\n });\n this.header.clean();\n yield last_cells;\n\n // If we make it here, this draw() call was invalidated by\n // a call to `invalidate()` within a `StyleListener`, so\n // recalculate the cumulative width and keep drawing if\n // necessary. Note `last_cells` is a list of 2-tuples but\n // we only bind the first var because _eslint_.\n view_state.viewport_width = 0;\n for (let [td] of last_cells) {\n view_state.viewport_width += td.offsetWidth;\n }\n\n // If there are still enough columns to fill the screen,\n // completely end the iteration here, otherwise\n // continue iterating to draw another column.\n if (\n view_state.viewport_width - view_state.sub_cell_offset >\n container_width\n ) {\n return;\n }\n }\n }\n this.body.clean({ ridx: cont_body?.ridx || 0, cidx: _virtual_x });\n this.header.clean();\n yield last_cells;\n } finally {\n this.body.clean({ ridx: cont_body?.ridx || 0, cidx: _virtual_x });\n this.header.clean();\n this.body._span_factory.reset();\n this.header._span_factory.reset();\n }\n }\n}\n", "/******************************************************************************\n *\n * Copyright (c) 2020, the Regular Table Authors.\n *\n * This file is part of the Regular Table library, distributed under the terms\n * of the Apache License 2.0. The full license can be found in the LICENSE\n * file.\n *\n */\n\nimport { METADATA_MAP } from \"./constants\";\nimport { RegularViewEventModel } from \"./events\";\nimport { RegularTableViewModel } from \"./table\";\nimport { get_draw_fps } from \"./utils\";\n\nconst VIRTUAL_MODES = [\"both\", \"horizontal\", \"vertical\", \"none\"];\n\n/**\n * The `<regular-table>` custom element.\n *\n * This module has no exports, but importing it has a side effect: the\n * `RegularTableElement` class is registered as a custom element, after which\n * it can be used as a standard DOM element.\n *\n * The documentation in this module defines the instance structure of a\n * `<regular-table>` DOM object instantiated typically, through HTML or any\n * relevent DOM method e.g. `document.createElement(\"perspective-viewer\")` or\n * `document.getElementsByTagName(\"perspective-viewer\")`.\n *\n * @public\n * @extends HTMLElement\n */\nclass RegularTableElement extends RegularViewEventModel {\n constructor() {\n super();\n /** @private */\n this._column_sizes = { auto: [], override: [], indices: [] };\n /** @private */\n this._style_callbacks = [];\n /** @private */\n this._initialized = false;\n }\n\n /* eslint-disable */\n /**\n * For internal use by the Custom Elements API: \"Invoked each time the\n * custom element is appended into a document-connected element\".\n * Ref: https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements#Using_the_lifecycle_callbacks\n *\n * @internal\n * @private\n * @memberof RegularTableElement\n */\n /* eslint-enable */\n connectedCallback() {\n if (!this._initialized) {\n this.create_shadow_dom();\n this.register_listeners();\n this.setAttribute(\"tabindex\", \"0\");\n\n this._initialized = true;\n this.table_model = new RegularTableViewModel(\n this._table_clip,\n this._column_sizes,\n this,\n );\n }\n }\n\n /**\n * Reset the viewport of this regular table.\n *\n * @internal\n * @private\n * @memberof RegularTableElement\n */\n _reset_viewport() {\n /** @private @type {number} */\n this._start_row = undefined;\n /** @private @type {number} */\n this._end_row = undefined;\n /** @private @type {number} */\n this._start_col = undefined;\n /** @private @type {number} */\n this._end_col = undefined;\n }\n\n /**\n * Reset the scroll position of this regular table back to the origin.\n *\n * @internal\n * @private\n * @memberof RegularTableElement\n */\n _reset_scroll() {\n this._column_sizes.indices = [];\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this._reset_viewport();\n }\n\n /**\n * Reset column autosizing, such that column sizes will be recalculated\n * on the next draw() call.\n *\n * @internal\n * @protected\n * @memberof RegularTableElement\n */\n _resetAutoSize() {\n this._column_sizes.auto = [];\n this._column_sizes.override = [];\n this._column_sizes.indices = [];\n\n for (let i = 0; i < this.table_model.header.num_columns(); i++) {\n const th = this.table_model.header.get_column_header(i);\n th.style.minWidth = \"\";\n th.style.maxWidth = \"\";\n }\n }\n\n /**\n * Clears the current renderer `<table>`.\n *\n * @public\n * @memberof RegularTableElement\n */\n clear() {\n this.table_model = new RegularTableViewModel(\n this._table_clip,\n this._column_sizes,\n this,\n );\n }\n\n /**\n * Adds a style listener callback. The style listeners are called\n * whenever the <table> is re-rendered, such as through API invocations\n * of draw() and user-initiated events such as scrolling. Within this\n * optionally async callback, you can select <td>, <th>, etc. elements\n * via regular DOM API methods like querySelectorAll().\n *\n * Example:\n * const unsubscribe = table.addStyleListener(() => {\n * for (const td of table.querySelectorAll(\"td\")) {\n * td.setAttribute(\"contenteditable\", true);\n * }\n * });\n *\n * setTimeout(() => {\n * unsubscribe();\n * }, 1000);\n * @public\n * @memberof RegularTableElement\n * @param {function({detail: RegularTableElement}): void} styleListener - A\n * (possibly async) function that styles the inner <table>.\n * @returns {function(): void} A function to remove this style listener.\n */\n addStyleListener(styleListener) {\n this._style_callbacks = this._style_callbacks.concat(styleListener);\n\n let isSubscribed = true;\n\n const unsubscribe = () => {\n if (!isSubscribed) {\n return;\n }\n isSubscribed = false;\n\n const callbacks = (this._style_callbacks =\n this._style_callbacks.slice());\n const index = callbacks.indexOf(styleListener);\n callbacks.splice(index, 1);\n };\n return unsubscribe;\n }\n\n /**\n * Removes a style listener added by `addStyleListener`.\n * `removeStyleListener` throws an error if the provided listener is not\n * registered.\n * @param {*} styleListener A listener previously added with\n * `addStyleListener`\n */\n removeStyleListener(styleListener) {\n const start_len = this._style_callbacks.length;\n this._style_callbacks = this._style_callbacks.filter(\n (x) => x !== styleListener,\n );\n console.assert(\n this._style_callbacks.length === start_len - 1,\n \"No listener found\",\n );\n }\n\n /**\n * When called within the execution scope of a function registered to this\n * `<regular-table>` as a `StyleListener`, invalidate this draw's\n * dimensions and attempt to draw more columns. Useful if your\n * `StyleListener` changes a cells dimensions, otherwise `<regular-table>`\n * may not draw enough columns to fill the screen.\n *\n * @public\n * @memberof RegularTableElement\n */\n invalidate() {\n if (!this._is_styling) {\n throw new Error(\n \"Cannot call `invalidate()` outside of a `StyleListener`\",\n );\n }\n /** @private */\n this._invalidated = true;\n }\n\n /**\n * Returns the `MetaData` object associated with a `<td>` or `<th>`. When\n * your `StyleListener` is invoked, use this method to look up additional\n * `MetaData` about any `HTMLTableCellElement` in the rendered `<table>`.\n *\n * Example:\n * const elems = document.querySelector(\"td:last-child td:last_child\");\n * const metadata = table.getMeta(elems);\n * console.log(`Viewport corner is ${metadata.x}, ${metadata.y}`);\n *\n * const header = table.getMeta({row_header_x: 1, y: 3}).row_header;\n * @public\n * @memberof RegularTableElement\n * @param {HTMLTableCellElement|Partial<MetaData>} element - The child\n * element of this `<regular-table>` for which to look up metadata, or a\n * coordinates-like object to refer to metadata by logical position.\n * @returns {MetaData} The metadata associated with the element.\n */\n getMeta(element) {\n if (typeof element === \"undefined\") {\n return;\n } else if (element instanceof HTMLElement) {\n return METADATA_MAP.get(element);\n } else if (element.row_header_x >= 0) {\n if (\n element.row_header_x < this._view_cache.config.row_pivots.length\n ) {\n const td = this.table_model.body._fetch_cell(\n element.y,\n element.row_header_x,\n );\n return this.getMeta(td);\n }\n } else if (element.column_header_y >= 0) {\n if (\n element.column_header_y <\n this._view_cache.config.column_pivots.length\n ) {\n const td = this.table_model.body._fetch_cell(\n element.column_header_y,\n element.y,\n );\n return this.getMeta(td);\n }\n } else {\n return this.getMeta(\n this.table_model.body._fetch_cell(\n element.dy,\n element.dx + this.table_model._row_headers_length,\n ),\n );\n }\n }\n\n /**\n * Get performance statistics about this `<regular-table>`. Calling this\n * method resets the internal state, which makes it convenient to measure\n * performance at regular intervals (see example).\n *\n * Example:\n * const table = document.getElementById(\"my_regular_table\");\n * setInterval(() => {\n * const {real_fps} = table.getDrawFPS();\n * console.log(`Measured ${fps} fps`)\n * });\n * @public\n * @memberof RegularTableElement\n * @returns {Performance} Performance data aggregated since the last\n * call to `getDrawFPS()`.\n */\n getDrawFPS() {\n return get_draw_fps();\n }\n\n /**\n * Call this method to set the `scrollLeft` and `scrollTop` for this\n * `<regular-table>` by calculating the position of this `scrollLeft`\n * and `scrollTop` relative to the underlying widths of its columns\n * and heights of its rows.\n *\n * Example:\n * table.scrollToCell(1, 3, 10, 30);\n * @public\n * @memberof RegularTableElement\n * @param {number} x - The left most `x` index column to scroll into view.\n * @param {number} y - The top most `y` index row to scroll into view.\n */\n async scrollToCell(x, y) {\n if (!this._view_cache) {\n console.warn(\"data listener not configured\");\n return;\n }\n\n const viewport_row_height = this._column_sizes.row_height || 19;\n const header_height =\n this._view_cache.config.column_pivots.length * viewport_row_height;\n const body_height = this._table_clip.offsetHeight - header_height;\n const row_height_offset = body_height % viewport_row_height;\n let real_row_height =\n (this._virtual_panel.offsetHeight - row_height_offset) /\n this._nrows;\n this.scrollTop = Math.ceil(real_row_height * y);\n\n let scroll_left = 0;\n while (x > 0) {\n x--;\n scroll_left +=\n this._column_sizes.indices[\n x + this._view_cache.config.row_pivots.length\n ] || 60;\n }\n\n this.scrollLeft = Math.ceil(scroll_left);\n await new Promise(requestAnimationFrame);\n await this._draw_flush();\n }\n\n /**\n * Call this method to set `DataListener` for this `<regular-table>`,\n * which will be called whenever a new data slice is needed to render.\n * Calls to `draw()` will fail if no `DataListener` has been set\n *\n * Example:\n * table.setDataListener((x0, y0, x1, y1) => {\n * return {\n * num_rows: num_rows = DATA[0].length,\n * num_columns: DATA.length,\n * data: DATA.slice(x0, x1).map(col => col.slice(y0, y1))\n * };\n * })\n * @public\n * @memberof RegularTableElement\n * @param {DataListener} dataListener\n * `dataListener` is called by to request a rectangular section of data\n * for a virtual viewport, (x0, y0, x1, y1), and returns a `DataReponse`\n * object.\n * @param {Object} options\n * @param {boolean} preserve_state If `setDataListener` has already been\n * called, setting this flag will prevent the internal state from being\n * reset (other than the callback itself).\n * @param {(\"both\"|\"horizontal\"|\"vertical\"|\"none\")} options.virtual_mode\n * The `virtual_mode` options flag may be one of \"both\", \"horizontal\",\n * \"vertical\", or \"none\" indicating which dimensions of the table should be\n * virtualized (vs. rendering completely).\n */\n setDataListener(\n dataListener,\n { virtual_mode = \"both\", preserve_state = false } = {},\n ) {\n console.assert(\n VIRTUAL_MODES.indexOf(virtual_mode) > -1,\n `Unknown virtual_mode ${virtual_mode}; valid options are \"both\" (default), \"horizontal\", \"vertical\" or \"none\"`,\n );\n\n const virtual_mode_changed = this._virtual_mode !== virtual_mode;\n if (preserve_state) {\n console.assert(\n !virtual_mode_changed,\n \"preserve_state called with modified virtual_mode\",\n );\n this._view_cache.view = dataListener;\n } else {\n const config = {\n row_pivots: [],\n column_pivots: [],\n };\n\n /** @private */\n this._virtual_mode = virtual_mode;\n\n /** @private */\n this._invalid_schema = true;\n\n /** @private */\n this._view_cache = { view: dataListener, config };\n if (virtual_mode_changed) {\n this._setup_virtual_scroll();\n }\n }\n }\n\n /**\n * This func only exists to provide hints to doc compulation tools.\n * Should never be run, and even if it is the body of the func will\n * never execute.\n *\n * @internal\n * @private\n * @memberof RegularTableElement\n */\n __noop_jsdoc_hints() {\n if (false) {\n /**\n * Draws this virtual panel, given an object of render options that\n * allow the implementor to fine tune the individual render frames\n * based on the interaction and previous render state.\n *\n * @public\n * @type {(opt?: DrawOptions) => void}\n * @memberof RegularTableElement\n * */\n this.draw = null;\n }\n }\n}\n\nif (document.createElement(\"regular-table\").constructor === HTMLElement) {\n window.customElements.define(\"regular-table\", RegularTableElement);\n}\n\n/**\n * An object with performance statistics about calls to\n * `draw()` from some time interval (captured in milliseconds by the\n * `elapsed` proprty).\n *\n * @public\n * @typedef Performance\n * @type {object}\n * @property {number} avg - Avergage milliseconds per call.\n * @property {number} real_fps - `num_frames` / `elapsed`\n * @property {number} virtual_fps - `elapsed` / `avg`\n * @property {number} num_frames - Number of frames rendered.\n * @property {number} elapsed - Number of milliseconds since last call\n * to `getDrawFPS()`.\n */\n\n/**\n * An object describing virtual rendering metadata about an\n * `HTMLTableCellElement`, use this object to map rendered `<th>` or `<td>`\n * elements back to your `data`, `row_headers` or `column_headers` within\n * listener functions for `addStyleListener()` and `addEventListener()`.\n *\n * Example:\n *\n * MetaData (x = 0, column_header_y = 0)\n * *-------------------------------------+\n * | |\n * | |\n * +-------------------------------------+\n * (row_header_x = 0, y = 0) (x = 0, y = 0)\n * *------------------------+ *-------------------------------------+\n * | | | |\n * | | | (x0, y0) |\n * | | | *---------------* |\n * | | | | | |\n * | | | | * (x, y) | |\n * | | | | | |\n * | | | *---------------* (x1, y1) |\n * | | | |\n * +------------------------+ +-------------------------------------+\n *\n * @public\n * @typedef MetaData\n * @type {object}\n * @property {number} [x] - The `x` index in your virtual data model.\n * property is only generated for `<td>`, `<th>` from `row_headers`.\n * @property {number} [y] - The `y` index in your virtual data model.\n * property is only generated for `<td>`, `<th>` from `row_headers`.\n * @property {number} [x0] - The `x` index of the viewport origin in\n * your data model, e.g. what was passed to `x0` when your\n * `dataListener` was invoked.\n * @property {number} [y0] - The `y` index of the viewport origin in\n * your data model, e.g. what was passed to `y0` when your\n * `dataListener` was invoked.\n * @property {number} [x1] - The `x` index of the viewport corner in\n * your data model, e.g. what was passed to `x1` when your\n * `dataListener` was invoked.\n * @property {number} [y1] - The `y` index of the viewport corner in\n * your data model, e.g. what was passed to `y1` when your\n * `dataListener` was invoked.\n * @property {number} [dx] - The `x` index in `DataResponse.data`, this\n * property is only generated for `<td>`, and `<th>` from `column_headers`.\n * @property {number} [dy] - The `y` index in `DataResponse.data`, this\n * property is only generated for `<td>`, `<th>` from `row_headers`.\n * @property {number} [column_header_y] - The `y` index in\n * `DataResponse.column_headers[x]`, this property is only generated for `<th>`\n * from `column_headers`.\n * @property {number} [row_header_x] - The `x` index in\n * `DataResponse.row_headers[y]`, this property is only generated for `<th>`\n * from `row_headers`.\n * @property {number} size_key - The unique index of this column in a full\n * `<table>`, which is `x` + (Total Row Header Columns).\n * @property {(string|HTMLElement)[]} [row_header] - The `Array` for this `y` in\n * `DataResponse.row_headers`, if it was provided.\n * @property {(string|HTMLElement)[]} [column_header] - The `Array` for this `x`\n * in `DataResponse.column_headers`, if it was provided.\n * @property {(string|HTMLElement)} [value] - The value dispalyed in the cell or\n * header.\n */\n\n/**\n * The `DataResponse` object describes a rectangular region of a virtual\n * data set, and some associated metadata. `<regular-table>` will use this\n * object to render the `<table>`, though it may make multiple requests for\n * different regions to achieve a compelte render as it must estimate\n * certain dimensions. You must construct a `DataResponse` object to\n * implement a `DataListener`.\n *\n * Example:\n * {\n * \"num_rows\": 26,\n * \"num_columns\": 3,\n * \"data\": [\n * [0, 1],\n * [\"A\", \"B\"]\n * ],\n * \"row_headers\": [\n * [\"Rowgroup 1\", \"Row 1\"],\n * [\"Rowgroup 1\", \"Row 2\"]\n * ],\n * \"column_headers\": [\n * [\"Colgroup 1\", \"Column 1\"],\n * [\"Colgroup 1\", \"Column 2\"]\n * ]\n * }\n * @public\n * @typedef DataResponse\n * @type {object}\n * @property {(string|HTMLElement)[][]} [column_headers] - A two dimensional\n * `Array` of column group headers, in specificity order. No `<thead>`\n * will be generated if this property is not provided.\n * @property {(string|HTMLElement)[][]} [row_headers] - A two dimensional\n * `Array` of row group headers, in specificity order. No `<th>`\n * elements within `<tbody>` will be generated if this property is not\n * provided.\n * @property {number?} num_row_headers - Optional number of row headers.\n * * @property {number?} num_row_headers - Optional number of column headers.\n * @property {(string|HTMLElement)[][]} data - A two dimensional `Array`\n * representing a rectangular section of the underlying data set from\n * (x0, y0) to (x1, y1), arranged in columnar fashion such that\n * `data[x][y]` returns the `y`th row of the `x`th column of the slice.\n * @property {number} num_rows - Total number of rows in the underlying\n * data set.\n * @property {number} num_columns - Total number of columns in the\n * underlying data set.\n */\n\n/**\n * The `DataListener` is similar to a normal event listener function.\n * Unlike a normal event listener, it takes regular arguments (not an\n * `Event`); and returns a `Promise` for a `DataResponse` object for this\n * region (as opposed to returning `void` as a standard event listener).\n *\n * @public\n * @callback DataListener\n * @param {number} x0 - The origin `x` index (column).\n * @param {number} y0 - The origin `y` index (row).\n * @param {number} x1 - The corner `x` index (column).\n * @param {number} y1 - The corner `y` index (row).\n * @returns {Promise<DataResponse>} The resulting `DataResponse`. Make sure\n * to `resolve` or `reject` the `Promise`, or your `<regular-table>` will\n * never render!\n */\n\n/**\n * Options for the draw method.\n *\n * @public\n * @typedef DrawOptions\n * @type {object}\n * @property {boolean} [invalid_viewport]\n * @property {boolean} [preserve_width]\n */\n\n/**\n * Public summary of table_model type.\n *\n * @public\n * @typedef TableModel\n * @type {object}\n * @property {ViewModel} header\n * @property {ViewModel} body\n * @property {() => number} num_columns\n */\n\n/**\n * Public summary of table_model.header and table_model.body base type.\n *\n * @public\n * @typedef ViewModel\n * @type {object}\n * @property {any} table\n * @property {any[]} cells\n * @property {any[]} rows\n * @property {() => number} num_columns\n * @property {() => number} num_rows\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 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", "const { min, max } = Math;\n\nexport default (x, low = 0, high = 1) => {\n return min(max(low, x), high);\n};\n", "import limit from './limit.js';\n\nexport default (rgb) => {\n rgb._clipped = false;\n rgb._unclipped = rgb.slice(0);\n for (let i = 0; i <= 3; i++) {\n if (i < 3) {\n if (rgb[i] < 0 || rgb[i] > 255) rgb._clipped = true;\n rgb[i] = limit(rgb[i], 0, 255);\n } else if (i === 3) {\n rgb[i] = limit(rgb[i], 0, 1);\n }\n }\n return rgb;\n};\n", "// ported from jQuery's $.type\nconst classToType = {};\nfor (let name of [\n 'Boolean',\n 'Number',\n 'String',\n 'Function',\n 'Array',\n 'Date',\n 'RegExp',\n 'Undefined',\n 'Null'\n]) {\n classToType[`[object ${name}]`] = name.toLowerCase();\n}\nexport default function (obj) {\n return classToType[Object.prototype.toString.call(obj)] || 'object';\n}\n", "import type from './type.js';\n\nexport default (args, keyOrder = null) => {\n // if called with more than 3 arguments, we return the arguments\n if (args.length >= 3) return Array.prototype.slice.call(args);\n // with less than 3 args we check if first arg is object\n // and use the keyOrder string to extract and sort properties\n if (type(args[0]) == 'object' && keyOrder) {\n return keyOrder\n .split('')\n .filter((k) => args[0][k] !== undefined)\n .map((k) => args[0][k]);\n }\n // otherwise we just return the first argument\n // (which we suppose is an array of args)\n return args[0].slice(0);\n};\n", "import type from './type.js';\n\nexport default (args) => {\n if (args.length < 2) return null;\n const l = args.length - 1;\n if (type(args[l]) == 'string') return args[l].toLowerCase();\n return null;\n};\n", "const { PI, min, max } = Math;\n\nconst rnd2 = (a) => Math.round(a * 100) / 100;\nconst rnd3 = (a) => Math.round(a * 100) / 100;\n\nexport { default as clip_rgb } from './clip_rgb.js';\nexport { default as limit } from './limit.js';\nexport { default as type } from './type.js';\nexport { default as unpack } from './unpack.js';\nexport { default as last } from './last.js';\n\nconst TWOPI = PI * 2;\nconst PITHIRD = PI / 3;\nconst DEG2RAD = PI / 180;\nconst RAD2DEG = 180 / PI;\n\n/**\n * Reverse the first three elements of an array\n *\n * @param {any[]} arr\n * @returns {any[]}\n */\nfunction reverse3(arr) {\n return [...arr.slice(0, 3).reverse(), ...arr.slice(3)];\n}\n\nexport { PI, TWOPI, PITHIRD, DEG2RAD, RAD2DEG, min, max, rnd2, rnd3, reverse3 };\n", "export default {\n format: {},\n autodetect: []\n};\n", "import { last, clip_rgb, type } from './utils/index.js';\nimport _input from './io/input.js';\n\nclass Color {\n constructor(...args) {\n const me = this;\n if (\n type(args[0]) === 'object' &&\n args[0].constructor &&\n args[0].constructor === this.constructor\n ) {\n // the argument is already a Color instance\n return args[0];\n }\n // last argument could be the mode\n let mode = last(args);\n let autodetect = false;\n if (!mode) {\n autodetect = true;\n\n if (!_input.sorted) {\n _input.autodetect = _input.autodetect.sort((a, b) => b.p - a.p);\n _input.sorted = true;\n }\n\n // auto-detect format\n for (let chk of _input.autodetect) {\n mode = chk.test(...args);\n if (mode) break;\n }\n }\n if (_input.format[mode]) {\n const rgb = _input.format[mode].apply(\n null,\n autodetect ? args : args.slice(0, -1)\n );\n me._rgb = clip_rgb(rgb);\n } else {\n throw new Error('unknown format: ' + args);\n }\n // add alpha channel\n if (me._rgb.length === 3) me._rgb.push(1);\n }\n toString() {\n if (type(this.hex) == 'function') return this.hex();\n return `[${this._rgb.join(',')}]`;\n }\n}\nexport default Color;\n", "// this gets updated automatically\nexport const version = '3.1.2';\n", "import Color from './Color.js';\nimport { version } from './version.js';\n\nconst chroma = (...args) => {\n return new Color(...args);\n};\n\nchroma.version = version;\n\nexport default chroma;\n", "/**\n\tX11 color names\n\n\thttp://www.w3.org/TR/css3-color/#svg-color\n*/\n\nconst w3cx11 = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n laserlemon: '#ffff54',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrod: '#fafad2',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n maroon2: '#7f0000',\n maroon3: '#b03060',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n purple2: '#7f007f',\n purple3: '#a020f0',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32'\n};\n\nexport default w3cx11;\n", "const RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\nconst RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;\n\nconst hex2rgb = (hex) => {\n if (hex.match(RE_HEX)) {\n // remove optional leading #\n if (hex.length === 4 || hex.length === 7) {\n hex = hex.substr(1);\n }\n // expand short-notation to full six-digit\n if (hex.length === 3) {\n hex = hex.split('');\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n const u = parseInt(hex, 16);\n const r = u >> 16;\n const g = (u >> 8) & 0xff;\n const b = u & 0xff;\n return [r, g, b, 1];\n }\n\n // match rgba hex format, eg #FF000077\n if (hex.match(RE_HEXA)) {\n if (hex.length === 5 || hex.length === 9) {\n // remove optional leading #\n hex = hex.substr(1);\n }\n // expand short-notation to full eight-digit\n if (hex.length === 4) {\n hex = hex.split('');\n hex =\n hex[0] +\n hex[0] +\n hex[1] +\n hex[1] +\n hex[2] +\n hex[2] +\n hex[3] +\n hex[3];\n }\n const u = parseInt(hex, 16);\n const r = (u >> 24) & 0xff;\n const g = (u >> 16) & 0xff;\n const b = (u >> 8) & 0xff;\n const a = Math.round(((u & 0xff) / 0xff) * 100) / 100;\n return [r, g, b, a];\n }\n\n // we used to check for css colors here\n // if _input.css? and rgb = _input.css hex\n // return rgb\n\n throw new Error(`unknown hex color: ${hex}`);\n};\n\nexport default hex2rgb;\n", "import { unpack, last } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2hex = (...args) => {\n let [r, g, b, a] = unpack(args, 'rgba');\n let mode = last(args) || 'auto';\n if (a === undefined) a = 1;\n if (mode === 'auto') {\n mode = a < 1 ? 'rgba' : 'rgb';\n }\n r = round(r);\n g = round(g);\n b = round(b);\n const u = (r << 16) | (g << 8) | b;\n let str = '000000' + u.toString(16); //#.toUpperCase();\n str = str.substr(str.length - 6);\n let hxa = '0' + round(a * 255).toString(16);\n hxa = hxa.substr(hxa.length - 2);\n switch (mode.toLowerCase()) {\n case 'rgba':\n return `#${str}${hxa}`;\n case 'argb':\n return `#${hxa}${str}`;\n default:\n return `#${str}`;\n }\n};\n\nexport default rgb2hex;\n", "import Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport w3cx11 from '../../colors/w3cx11.js';\nimport hex2rgb from '../hex/hex2rgb.js';\nimport rgb2hex from '../hex/rgb2hex.js';\n\nColor.prototype.name = function () {\n const hex = rgb2hex(this._rgb, 'rgb');\n for (let n of Object.keys(w3cx11)) {\n if (w3cx11[n] === hex) return n.toLowerCase();\n }\n return hex;\n};\n\ninput.format.named = (name) => {\n name = name.toLowerCase();\n if (w3cx11[name]) return hex2rgb(w3cx11[name]);\n throw new Error('unknown color name: ' + name);\n};\n\ninput.autodetect.push({\n p: 5,\n test: (h, ...rest) => {\n if (!rest.length && type(h) === 'string' && w3cx11[h.toLowerCase()]) {\n return 'named';\n }\n }\n});\n", "import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.alpha = function (a, mutate = false) {\n if (a !== undefined && type(a) === 'number') {\n if (mutate) {\n this._rgb[3] = a;\n return this;\n }\n return new Color([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb');\n }\n return this._rgb[3];\n};\n", "import Color from '../Color.js';\n\nColor.prototype.clipped = function () {\n return this._rgb._clipped || false;\n};\n", "const labConstants = {\n // Corresponds roughly to RGB brighter/darker\n Kn: 18,\n\n // D65 standard referent\n labWhitePoint: 'd65',\n Xn: 0.95047,\n Yn: 1,\n Zn: 1.08883,\n\n t0: 0.137931034, // 4 / 29\n t1: 0.206896552, // 6 / 29\n t2: 0.12841855, // 3 * t1 * t1\n t3: 0.008856452, // t1 * t1 * t1,\n\n kE: 216.0 / 24389.0,\n kKE: 8.0,\n kK: 24389.0 / 27.0,\n\n RefWhiteRGB: {\n // sRGB\n X: 0.95047,\n Y: 1,\n Z: 1.08883\n },\n\n MtxRGB2XYZ: {\n m00: 0.4124564390896922,\n m01: 0.21267285140562253,\n m02: 0.0193338955823293,\n m10: 0.357576077643909,\n m11: 0.715152155287818,\n m12: 0.11919202588130297,\n m20: 0.18043748326639894,\n m21: 0.07217499330655958,\n m22: 0.9503040785363679\n },\n\n MtxXYZ2RGB: {\n m00: 3.2404541621141045,\n m01: -0.9692660305051868,\n m02: 0.055643430959114726,\n m10: -1.5371385127977166,\n m11: 1.8760108454466942,\n m12: -0.2040259135167538,\n m20: -0.498531409556016,\n m21: 0.041556017530349834,\n m22: 1.0572251882231791\n },\n\n // used in rgb2xyz\n As: 0.9414285350000001,\n Bs: 1.040417467,\n Cs: 1.089532651,\n\n MtxAdaptMa: {\n m00: 0.8951,\n m01: -0.7502,\n m02: 0.0389,\n m10: 0.2664,\n m11: 1.7135,\n m12: -0.0685,\n m20: -0.1614,\n m21: 0.0367,\n m22: 1.0296\n },\n\n MtxAdaptMaI: {\n m00: 0.9869929054667123,\n m01: 0.43230526972339456,\n m02: -0.008528664575177328,\n m10: -0.14705425642099013,\n m11: 0.5183602715367776,\n m12: 0.04004282165408487,\n m20: 0.15996265166373125,\n m21: 0.0492912282128556,\n m22: 0.9684866957875502\n }\n};\n\nexport default labConstants;\n\n// taken from https://de.mathworks.com/help/images/ref/whitepoint.html\nconst ILLUMINANTS = new Map([\n // ASTM E308-01\n ['a', [1.0985, 0.35585]],\n // Wyszecki & Stiles, p. 769\n ['b', [1.0985, 0.35585]],\n // C ASTM E308-01\n ['c', [0.98074, 1.18232]],\n // D50 (ASTM E308-01)\n ['d50', [0.96422, 0.82521]],\n // D55 (ASTM E308-01)\n ['d55', [0.95682, 0.92149]],\n // D65 (ASTM E308-01)\n ['d65', [0.95047, 1.08883]],\n // E (ASTM E308-01)\n ['e', [1, 1, 1]],\n // F2 (ASTM E308-01)\n ['f2', [0.99186, 0.67393]],\n // F7 (ASTM E308-01)\n ['f7', [0.95041, 1.08747]],\n // F11 (ASTM E308-01)\n ['f11', [1.00962, 0.6435]],\n ['icc', [0.96422, 0.82521]]\n]);\n\nexport function setLabWhitePoint(name) {\n const ill = ILLUMINANTS.get(String(name).toLowerCase());\n if (!ill) {\n throw new Error('unknown Lab illuminant ' + name);\n }\n labConstants.labWhitePoint = name;\n labConstants.Xn = ill[0];\n labConstants.Zn = ill[1];\n}\n\nexport function getLabWhitePoint() {\n return labConstants.labWhitePoint;\n}\n", "import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\n\n/*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\nconst lab2rgb = (...args) => {\n args = unpack(args, 'lab');\n const [L, a, b] = args;\n const [x, y, z] = lab2xyz(L, a, b);\n const [r, g, b_] = xyz2rgb(x, y, z);\n return [r, g, b_, args.length > 3 ? args[3] : 1];\n};\n\nconst lab2xyz = (L, a, b) => {\n const { kE, kK, kKE, Xn, Yn, Zn } = LAB_CONSTANTS;\n\n const fy = (L + 16.0) / 116.0;\n const fx = 0.002 * a + fy;\n const fz = fy - 0.005 * b;\n\n const fx3 = fx * fx * fx;\n const fz3 = fz * fz * fz;\n\n const xr = fx3 > kE ? fx3 : (116.0 * fx - 16.0) / kK;\n const yr = L > kKE ? Math.pow((L + 16.0) / 116.0, 3.0) : L / kK;\n const zr = fz3 > kE ? fz3 : (116.0 * fz - 16.0) / kK;\n\n const x = xr * Xn;\n const y = yr * Yn;\n const z = zr * Zn;\n\n return [x, y, z];\n};\n\nconst compand = (linear) => {\n /* sRGB */\n const sign = Math.sign(linear);\n linear = Math.abs(linear);\n return (\n (linear <= 0.0031308\n ? linear * 12.92\n : 1.055 * Math.pow(linear, 1.0 / 2.4) - 0.055) * sign\n );\n};\n\nconst xyz2rgb = (x, y, z) => {\n const { MtxAdaptMa, MtxAdaptMaI, MtxXYZ2RGB, RefWhiteRGB, Xn, Yn, Zn } =\n LAB_CONSTANTS;\n\n const As = Xn * MtxAdaptMa.m00 + Yn * MtxAdaptMa.m10 + Zn * MtxAdaptMa.m20;\n const Bs = Xn * MtxAdaptMa.m01 + Yn * MtxAdaptMa.m11 + Zn * MtxAdaptMa.m21;\n const Cs = Xn * MtxAdaptMa.m02 + Yn * MtxAdaptMa.m12 + Zn * MtxAdaptMa.m22;\n\n const Ad =\n RefWhiteRGB.X * MtxAdaptMa.m00 +\n RefWhiteRGB.Y * MtxAdaptMa.m10 +\n RefWhiteRGB.Z * MtxAdaptMa.m20;\n const Bd =\n RefWhiteRGB.X * MtxAdaptMa.m01 +\n RefWhiteRGB.Y * MtxAdaptMa.m11 +\n RefWhiteRGB.Z * MtxAdaptMa.m21;\n const Cd =\n RefWhiteRGB.X * MtxAdaptMa.m02 +\n RefWhiteRGB.Y * MtxAdaptMa.m12 +\n RefWhiteRGB.Z * MtxAdaptMa.m22;\n\n const X1 =\n (x * MtxAdaptMa.m00 + y * MtxAdaptMa.m10 + z * MtxAdaptMa.m20) *\n (Ad / As);\n const Y1 =\n (x * MtxAdaptMa.m01 + y * MtxAdaptMa.m11 + z * MtxAdaptMa.m21) *\n (Bd / Bs);\n const Z1 =\n (x * MtxAdaptMa.m02 + y * MtxAdaptMa.m12 + z * MtxAdaptMa.m22) *\n (Cd / Cs);\n\n const X2 =\n X1 * MtxAdaptMaI.m00 + Y1 * MtxAdaptMaI.m10 + Z1 * MtxAdaptMaI.m20;\n const Y2 =\n X1 * MtxAdaptMaI.m01 + Y1 * MtxAdaptMaI.m11 + Z1 * MtxAdaptMaI.m21;\n const Z2 =\n X1 * MtxAdaptMaI.m02 + Y1 * MtxAdaptMaI.m12 + Z1 * MtxAdaptMaI.m22;\n\n const r = compand(\n X2 * MtxXYZ2RGB.m00 + Y2 * MtxXYZ2RGB.m10 + Z2 * MtxXYZ2RGB.m20\n );\n const g = compand(\n X2 * MtxXYZ2RGB.m01 + Y2 * MtxXYZ2RGB.m11 + Z2 * MtxXYZ2RGB.m21\n );\n const b = compand(\n X2 * MtxXYZ2RGB.m02 + Y2 * MtxXYZ2RGB.m12 + Z2 * MtxXYZ2RGB.m22\n );\n\n return [r * 255, g * 255, b * 255];\n};\n\nexport default lab2rgb;\nexport { xyz2rgb };\n", "import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\n\nconst rgb2lab = (...args) => {\n const [r, g, b, ...rest] = unpack(args, 'rgb');\n const [x, y, z] = rgb2xyz(r, g, b);\n const [L, a, b_] = xyz2lab(x, y, z);\n return [L, a, b_, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nfunction xyz2lab(x, y, z) {\n const { Xn, Yn, Zn, kE, kK } = LAB_CONSTANTS;\n const xr = x / Xn;\n const yr = y / Yn;\n const zr = z / Zn;\n\n const fx = xr > kE ? Math.pow(xr, 1.0 / 3.0) : (kK * xr + 16.0) / 116.0;\n const fy = yr > kE ? Math.pow(yr, 1.0 / 3.0) : (kK * yr + 16.0) / 116.0;\n const fz = zr > kE ? Math.pow(zr, 1.0 / 3.0) : (kK * zr + 16.0) / 116.0;\n\n return [116.0 * fy - 16.0, 500.0 * (fx - fy), 200.0 * (fy - fz)];\n}\n\nfunction gammaAdjustSRGB(companded) {\n const sign = Math.sign(companded);\n companded = Math.abs(companded);\n const linear =\n companded <= 0.04045\n ? companded / 12.92\n : Math.pow((companded + 0.055) / 1.055, 2.4);\n return linear * sign;\n}\n\nconst rgb2xyz = (r, g, b) => {\n // normalize and gamma adjust\n r = gammaAdjustSRGB(r / 255);\n g = gammaAdjustSRGB(g / 255);\n b = gammaAdjustSRGB(b / 255);\n\n const { MtxRGB2XYZ, MtxAdaptMa, MtxAdaptMaI, Xn, Yn, Zn, As, Bs, Cs } =\n LAB_CONSTANTS;\n\n let x = r * MtxRGB2XYZ.m00 + g * MtxRGB2XYZ.m10 + b * MtxRGB2XYZ.m20;\n let y = r * MtxRGB2XYZ.m01 + g * MtxRGB2XYZ.m11 + b * MtxRGB2XYZ.m21;\n let z = r * MtxRGB2XYZ.m02 + g * MtxRGB2XYZ.m12 + b * MtxRGB2XYZ.m22;\n\n const Ad = Xn * MtxAdaptMa.m00 + Yn * MtxAdaptMa.m10 + Zn * MtxAdaptMa.m20;\n const Bd = Xn * MtxAdaptMa.m01 + Yn * MtxAdaptMa.m11 + Zn * MtxAdaptMa.m21;\n const Cd = Xn * MtxAdaptMa.m02 + Yn * MtxAdaptMa.m12 + Zn * MtxAdaptMa.m22;\n\n let X = x * MtxAdaptMa.m00 + y * MtxAdaptMa.m10 + z * MtxAdaptMa.m20;\n let Y = x * MtxAdaptMa.m01 + y * MtxAdaptMa.m11 + z * MtxAdaptMa.m21;\n let Z = x * MtxAdaptMa.m02 + y * MtxAdaptMa.m12 + z * MtxAdaptMa.m22;\n\n X *= Ad / As;\n Y *= Bd / Bs;\n Z *= Cd / Cs;\n\n x = X * MtxAdaptMaI.m00 + Y * MtxAdaptMaI.m10 + Z * MtxAdaptMaI.m20;\n y = X * MtxAdaptMaI.m01 + Y * MtxAdaptMaI.m11 + Z * MtxAdaptMaI.m21;\n z = X * MtxAdaptMaI.m02 + Y * MtxAdaptMaI.m12 + Z * MtxAdaptMaI.m22;\n\n return [x, y, z];\n};\n\nexport default rgb2lab;\nexport { rgb2xyz };\n", "import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lab2rgb from './lab2rgb.js';\nimport rgb2lab from './rgb2lab.js';\nimport { getLabWhitePoint, setLabWhitePoint } from './lab-constants.js';\n\nColor.prototype.lab = function () {\n return rgb2lab(this._rgb);\n};\n\nconst lab = (...args) => new Color(...args, 'lab');\nObject.assign(chroma, { lab, getLabWhitePoint, setLabWhitePoint });\n\ninput.format.lab = lab2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'lab');\n if (type(args) === 'array' && args.length === 3) {\n return 'lab';\n }\n }\n});\n\nexport { lab, getLabWhitePoint, setLabWhitePoint };\n", "import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.darken = function (amount = 1) {\n const me = this;\n const lab = me.lab();\n lab[0] -= LAB_CONSTANTS.Kn * amount;\n return new Color(lab, 'lab').alpha(me.alpha(), true);\n};\n\nColor.prototype.brighten = function (amount = 1) {\n return this.darken(-amount);\n};\n\nColor.prototype.darker = Color.prototype.darken;\nColor.prototype.brighter = Color.prototype.brighten;\n", "import Color from '../Color.js';\n\nColor.prototype.get = function (mc) {\n const [mode, channel] = mc.split('.');\n const src = this[mode]();\n if (channel) {\n const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n if (i > -1) return src[i];\n throw new Error(`unknown channel ${channel} in mode ${mode}`);\n } else {\n return src;\n }\n};\n", "import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nconst { pow } = Math;\n\nconst EPS = 1e-7;\nconst MAX_ITER = 20;\n\nColor.prototype.luminance = function (lum, mode = 'rgb') {\n if (lum !== undefined && type(lum) === 'number') {\n if (lum === 0) {\n // return pure black\n return new Color([0, 0, 0, this._rgb[3]], 'rgb');\n }\n if (lum === 1) {\n // return pure white\n return new Color([255, 255, 255, this._rgb[3]], 'rgb');\n }\n // compute new color using...\n let cur_lum = this.luminance();\n let max_iter = MAX_ITER;\n\n const test = (low, high) => {\n const mid = low.interpolate(high, 0.5, mode);\n const lm = mid.luminance();\n if (Math.abs(lum - lm) < EPS || !max_iter--) {\n // close enough\n return mid;\n }\n return lm > lum ? test(low, mid) : test(mid, high);\n };\n\n const rgb = (\n cur_lum > lum\n ? test(new Color([0, 0, 0]), this)\n : test(this, new Color([255, 255, 255]))\n ).rgb();\n return new Color([...rgb, this._rgb[3]]);\n }\n return rgb2luminance(...this._rgb.slice(0, 3));\n};\n\nconst rgb2luminance = (r, g, b) => {\n // relative luminance\n // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n r = luminance_x(r);\n g = luminance_x(g);\n b = luminance_x(b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\n\nconst luminance_x = (x) => {\n x /= 255;\n return x <= 0.03928 ? x / 12.92 : pow((x + 0.055) / 1.055, 2.4);\n};\n", "export default {};\n", "import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nimport interpolator from '../interpolator/index.js';\n\nexport default (col1, col2, f = 0.5, ...rest) => {\n let mode = rest[0] || 'lrgb';\n if (!interpolator[mode] && !rest.length) {\n // fall back to the first supported mode\n mode = Object.keys(interpolator)[0];\n }\n if (!interpolator[mode]) {\n throw new Error(`interpolation mode ${mode} is not defined`);\n }\n if (type(col1) !== 'object') col1 = new Color(col1);\n if (type(col2) !== 'object') col2 = new Color(col2);\n return interpolator[mode](col1, col2, f).alpha(\n col1.alpha() + f * (col2.alpha() - col1.alpha())\n );\n};\n", "import Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.mix = Color.prototype.interpolate = function (\n col2,\n f = 0.5,\n ...rest\n) {\n return mix(this, col2, f, ...rest);\n};\n", "import Color from '../Color.js';\n\nColor.prototype.premultiply = function (mutate = false) {\n const rgb = this._rgb;\n const a = rgb[3];\n if (mutate) {\n this._rgb = [rgb[0] * a, rgb[1] * a, rgb[2] * a, a];\n return this;\n } else {\n return new Color([rgb[0] * a, rgb[1] * a, rgb[2] * a, a], 'rgb');\n }\n};\n", "import { unpack, DEG2RAD } from '../../utils/index.js';\nconst { sin, cos } = Math;\n\nconst lch2lab = (...args) => {\n /*\n Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n These formulas were invented by David Dalrymple to obtain maximum contrast without going\n out of gamut if the parameters are in the range 0-1.\n\n A saturation multiplier was added by Gregor Aisch\n */\n let [l, c, h] = unpack(args, 'lch');\n if (isNaN(h)) h = 0;\n h = h * DEG2RAD;\n return [l, cos(h) * c, sin(h) * c];\n};\n\nexport default lch2lab;\n", "import { unpack } from '../../utils/index.js';\nimport lch2lab from './lch2lab.js';\nimport lab2rgb from '../lab/lab2rgb.js';\n\nconst lch2rgb = (...args) => {\n args = unpack(args, 'lch');\n const [l, c, h] = args;\n const [L, a, b_] = lch2lab(l, c, h);\n const [r, g, b] = lab2rgb(L, a, b_);\n return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default lch2rgb;\n", "import { unpack, reverse3 } from '../../utils/index.js';\nimport lch2rgb from './lch2rgb.js';\n\nconst hcl2rgb = (...args) => {\n const hcl = reverse3(unpack(args, 'hcl'));\n return lch2rgb(...hcl);\n};\n\nexport default hcl2rgb;\n", "import { unpack, RAD2DEG } from '../../utils/index.js';\nconst { sqrt, atan2, round } = Math;\n\nconst lab2lch = (...args) => {\n const [l, a, b] = unpack(args, 'lab');\n const c = sqrt(a * a + b * b);\n let h = (atan2(b, a) * RAD2DEG + 360) % 360;\n if (round(c * 10000) === 0) h = Number.NaN;\n return [l, c, h];\n};\n\nexport default lab2lch;\n", "import { unpack } from '../../utils/index.js';\nimport rgb2lab from '../lab/rgb2lab.js';\nimport lab2lch from './lab2lch.js';\n\nconst rgb2lch = (...args) => {\n const [r, g, b, ...rest] = unpack(args, 'rgb');\n const [l, a, b_] = rgb2lab(r, g, b);\n const [L, c, h] = lab2lch(l, a, b_);\n return [L, c, h, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default rgb2lch;\n", "import { unpack, type, reverse3 } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lch2rgb from './lch2rgb.js';\nimport hcl2rgb from './hcl2rgb.js';\nimport rgb2lch from './rgb2lch.js';\n\nColor.prototype.lch = function () {\n return rgb2lch(this._rgb);\n};\nColor.prototype.hcl = function () {\n return reverse3(rgb2lch(this._rgb));\n};\n\nconst lch = (...args) => new Color(...args, 'lch');\nconst hcl = (...args) => new Color(...args, 'hcl');\n\nObject.assign(chroma, { lch, hcl });\n\ninput.format.lch = lch2rgb;\ninput.format.hcl = hcl2rgb;\n['lch', 'hcl'].forEach((m) =>\n input.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, m);\n if (type(args) === 'array' && args.length === 3) {\n return m;\n }\n }\n })\n);\n\nexport { lch, hcl };\n", "import '../io/lch/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.saturate = function (amount = 1) {\n const me = this;\n const lch = me.lch();\n lch[1] += LAB_CONSTANTS.Kn * amount;\n if (lch[1] < 0) lch[1] = 0;\n return new Color(lch, 'lch').alpha(me.alpha(), true);\n};\n\nColor.prototype.desaturate = function (amount = 1) {\n return this.saturate(-amount);\n};\n", "import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.set = function (mc, value, mutate = false) {\n const [mode, channel] = mc.split('.');\n const src = this[mode]();\n if (channel) {\n const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n if (i > -1) {\n if (type(value) == 'string') {\n switch (value.charAt(0)) {\n case '+':\n src[i] += +value;\n break;\n case '-':\n src[i] += +value;\n break;\n case '*':\n src[i] *= +value.substr(1);\n break;\n case '/':\n src[i] /= +value.substr(1);\n break;\n default:\n src[i] = +value;\n }\n } else if (type(value) === 'number') {\n src[i] = value;\n } else {\n throw new Error(`unsupported value for Color.set`);\n }\n const out = new Color(src, mode);\n if (mutate) {\n this._rgb = out._rgb;\n return this;\n }\n return out;\n }\n throw new Error(`unknown channel ${channel} in mode ${mode}`);\n } else {\n return src;\n }\n};\n", "import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.tint = function (f = 0.5, ...rest) {\n return mix(this, 'white', f, ...rest);\n};\n\nColor.prototype.shade = function (f = 0.5, ...rest) {\n return mix(this, 'black', f, ...rest);\n};\n", "import Color from '../Color.js';\nimport index from './index.js';\n\nconst rgb = (col1, col2, f) => {\n const xyz0 = col1._rgb;\n const xyz1 = col2._rgb;\n return new Color(\n xyz0[0] + f * (xyz1[0] - xyz0[0]),\n xyz0[1] + f * (xyz1[1] - xyz0[1]),\n xyz0[2] + f * (xyz1[2] - xyz0[2]),\n 'rgb'\n );\n};\n\n// register interpolator\nindex.rgb = rgb;\n\nexport default rgb;\n", "import Color from '../Color.js';\nconst { sqrt, pow } = Math;\nimport index from './index.js';\n\nconst lrgb = (col1, col2, f) => {\n const [x1, y1, z1] = col1._rgb;\n const [x2, y2, z2] = col2._rgb;\n return new Color(\n sqrt(pow(x1, 2) * (1 - f) + pow(x2, 2) * f),\n sqrt(pow(y1, 2) * (1 - f) + pow(y2, 2) * f),\n sqrt(pow(z1, 2) * (1 - f) + pow(z2, 2) * f),\n 'rgb'\n );\n};\n\n// register interpolator\nindex.lrgb = lrgb;\n\nexport default lrgb;\n", "import '../io/lab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst lab = (col1, col2, f) => {\n const xyz0 = col1.lab();\n const xyz1 = col2.lab();\n return new Color(\n xyz0[0] + f * (xyz1[0] - xyz0[0]),\n xyz0[1] + f * (xyz1[1] - xyz0[1]),\n xyz0[2] + f * (xyz1[2] - xyz0[2]),\n 'lab'\n );\n};\n\n// register interpolator\nindex.lab = lab;\n\nexport default lab;\n", "import Color from '../Color.js';\n\nexport default (col1, col2, f, m) => {\n let xyz0, xyz1;\n if (m === 'hsl') {\n xyz0 = col1.hsl();\n xyz1 = col2.hsl();\n } else if (m === 'hsv') {\n xyz0 = col1.hsv();\n xyz1 = col2.hsv();\n } else if (m === 'hcg') {\n xyz0 = col1.hcg();\n xyz1 = col2.hcg();\n } else if (m === 'hsi') {\n xyz0 = col1.hsi();\n xyz1 = col2.hsi();\n } else if (m === 'lch' || m === 'hcl') {\n m = 'hcl';\n xyz0 = col1.hcl();\n xyz1 = col2.hcl();\n } else if (m === 'oklch') {\n xyz0 = col1.oklch().reverse();\n xyz1 = col2.oklch().reverse();\n }\n\n let hue0, hue1, sat0, sat1, lbv0, lbv1;\n if (m.substr(0, 1) === 'h' || m === 'oklch') {\n [hue0, sat0, lbv0] = xyz0;\n [hue1, sat1, lbv1] = xyz1;\n }\n\n let sat, hue, lbv, dh;\n\n if (!isNaN(hue0) && !isNaN(hue1)) {\n // both colors have hue\n if (hue1 > hue0 && hue1 - hue0 > 180) {\n dh = hue1 - (hue0 + 360);\n } else if (hue1 < hue0 && hue0 - hue1 > 180) {\n dh = hue1 + 360 - hue0;\n } else {\n dh = hue1 - hue0;\n }\n hue = hue0 + f * dh;\n } else if (!isNaN(hue0)) {\n hue = hue0;\n if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') sat = sat0;\n } else if (!isNaN(hue1)) {\n hue = hue1;\n if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') sat = sat1;\n } else {\n hue = Number.NaN;\n }\n\n if (sat === undefined) sat = sat0 + f * (sat1 - sat0);\n lbv = lbv0 + f * (lbv1 - lbv0);\n return m === 'oklch'\n ? new Color([lbv, sat, hue], m)\n : new Color([hue, sat, lbv], m);\n};\n", "import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst lch = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'lch');\n};\n\n// register interpolator\nindex.lch = lch;\nindex.hcl = lch;\n\nexport default lch;\n", "import { type } from '../../utils/index.js';\n\nconst num2rgb = (num) => {\n if (type(num) == 'number' && num >= 0 && num <= 0xffffff) {\n const r = num >> 16;\n const g = (num >> 8) & 0xff;\n const b = num & 0xff;\n return [r, g, b, 1];\n }\n throw new Error('unknown num color: ' + num);\n};\n\nexport default num2rgb;\n", "import { unpack } from '../../utils/index.js';\n\nconst rgb2num = (...args) => {\n const [r, g, b] = unpack(args, 'rgb');\n return (r << 16) + (g << 8) + b;\n};\n\nexport default rgb2num;\n", "import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\nimport num2rgb from './num2rgb.js';\nimport rgb2num from './rgb2num.js';\n\nColor.prototype.num = function () {\n return rgb2num(this._rgb);\n};\n\nconst num = (...args) => new Color(...args, 'num');\n\nObject.assign(chroma, { num });\n\ninput.format.num = num2rgb;\n\ninput.autodetect.push({\n p: 5,\n test: (...args) => {\n if (\n args.length === 1 &&\n type(args[0]) === 'number' &&\n args[0] >= 0 &&\n args[0] <= 0xffffff\n ) {\n return 'num';\n }\n }\n});\n\nexport { num };\n", "import '../io/num/index.js';\nimport index from './index.js';\n\nimport Color from '../Color.js';\n\nconst num = (col1, col2, f) => {\n const c1 = col1.num();\n const c2 = col2.num();\n return new Color(c1 + f * (c2 - c1), 'num');\n};\n\n// register interpolator\nindex.num = num;\n\nexport default num;\n", "import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\n/*\n * this is basically just HSV with some minor tweaks\n *\n * hue.. [0..360]\n * chroma .. [0..1]\n * grayness .. [0..1]\n */\n\nconst hcg2rgb = (...args) => {\n args = unpack(args, 'hcg');\n let [h, c, _g] = args;\n let r, g, b;\n _g = _g * 255;\n const _c = c * 255;\n if (c === 0) {\n r = g = b = _g;\n } else {\n if (h === 360) h = 0;\n if (h > 360) h -= 360;\n if (h < 0) h += 360;\n h /= 60;\n const i = floor(h);\n const f = h - i;\n const p = _g * (1 - c);\n const q = p + _c * (1 - f);\n const t = p + _c * f;\n const v = p + _c;\n switch (i) {\n case 0:\n [r, g, b] = [v, t, p];\n break;\n case 1:\n [r, g, b] = [q, v, p];\n break;\n case 2:\n [r, g, b] = [p, v, t];\n break;\n case 3:\n [r, g, b] = [p, q, v];\n break;\n case 4:\n [r, g, b] = [t, p, v];\n break;\n case 5:\n [r, g, b] = [v, p, q];\n break;\n }\n }\n return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hcg2rgb;\n", "import { unpack, max, min } from '../../utils/index.js';\n\nconst rgb2hcg = (...args) => {\n const [r, g, b] = unpack(args, 'rgb');\n const minRgb = min(r, g, b);\n const maxRgb = max(r, g, b);\n const delta = maxRgb - minRgb;\n const c = (delta * 100) / 255;\n const _g = (minRgb / (255 - delta)) * 100;\n let h;\n if (delta === 0) {\n h = Number.NaN;\n } else {\n if (r === maxRgb) h = (g - b) / delta;\n if (g === maxRgb) h = 2 + (b - r) / delta;\n if (b === maxRgb) h = 4 + (r - g) / delta;\n h *= 60;\n if (h < 0) h += 360;\n }\n return [h, c, _g];\n};\n\nexport default rgb2hcg;\n", "import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hcg2rgb from './hcg2rgb.js';\nimport rgb2hcg from './rgb2hcg.js';\n\nColor.prototype.hcg = function () {\n return rgb2hcg(this._rgb);\n};\n\nconst hcg = (...args) => new Color(...args, 'hcg');\nchroma.hcg = hcg;\n\ninput.format.hcg = hcg2rgb;\n\ninput.autodetect.push({\n p: 1,\n test: (...args) => {\n args = unpack(args, 'hcg');\n if (type(args) === 'array' && args.length === 3) {\n return 'hcg';\n }\n }\n});\n\nexport { hcg };\n", "import '../io/hcg/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hcg = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'hcg');\n};\n\n// register interpolator\nindex.hcg = hcg;\n\nexport default hcg;\n", "import { unpack, limit, TWOPI, PITHIRD } from '../../utils/index.js';\nconst { cos } = Math;\n\n/*\n * hue [0..360]\n * saturation [0..1]\n * intensity [0..1]\n */\nconst hsi2rgb = (...args) => {\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp\n */\n args = unpack(args, 'hsi');\n let [h, s, i] = args;\n let r, g, b;\n\n if (isNaN(h)) h = 0;\n if (isNaN(s)) s = 0;\n // normalize hue\n if (h > 360) h -= 360;\n if (h < 0) h += 360;\n h /= 360;\n if (h < 1 / 3) {\n b = (1 - s) / 3;\n r = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n g = 1 - (b + r);\n } else if (h < 2 / 3) {\n h -= 1 / 3;\n r = (1 - s) / 3;\n g = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n b = 1 - (r + g);\n } else {\n h -= 2 / 3;\n g = (1 - s) / 3;\n b = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n r = 1 - (g + b);\n }\n r = limit(i * r * 3);\n g = limit(i * g * 3);\n b = limit(i * b * 3);\n return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsi2rgb;\n", "import { unpack, TWOPI } from '../../utils/index.js';\nconst { min, sqrt, acos } = Math;\n\nconst rgb2hsi = (...args) => {\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp\n */\n let [r, g, b] = unpack(args, 'rgb');\n r /= 255;\n g /= 255;\n b /= 255;\n let h;\n const min_ = min(r, g, b);\n const i = (r + g + b) / 3;\n const s = i > 0 ? 1 - min_ / i : 0;\n if (s === 0) {\n h = NaN;\n } else {\n h = (r - g + (r - b)) / 2;\n h /= sqrt((r - g) * (r - g) + (r - b) * (g - b));\n h = acos(h);\n if (b > g) {\n h = TWOPI - h;\n }\n h /= TWOPI;\n }\n return [h * 360, s, i];\n};\n\nexport default rgb2hsi;\n", "import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsi2rgb from './hsi2rgb.js';\nimport rgb2hsi from './rgb2hsi.js';\n\nColor.prototype.hsi = function () {\n return rgb2hsi(this._rgb);\n};\n\nconst hsi = (...args) => new Color(...args, 'hsi');\nchroma.hsi = hsi;\n\ninput.format.hsi = hsi2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'hsi');\n if (type(args) === 'array' && args.length === 3) {\n return 'hsi';\n }\n }\n});\n\nexport { hsi };\n", "import '../io/hsi/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsi = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'hsi');\n};\n\n// register interpolator\nindex.hsi = hsi;\n\nexport default hsi;\n", "import { unpack } from '../../utils/index.js';\n\nconst hsl2rgb = (...args) => {\n args = unpack(args, 'hsl');\n const [h, s, l] = args;\n let r, g, b;\n if (s === 0) {\n r = g = b = l * 255;\n } else {\n const t3 = [0, 0, 0];\n const c = [0, 0, 0];\n const t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const t1 = 2 * l - t2;\n const h_ = h / 360;\n t3[0] = h_ + 1 / 3;\n t3[1] = h_;\n t3[2] = h_ - 1 / 3;\n for (let i = 0; i < 3; i++) {\n if (t3[i] < 0) t3[i] += 1;\n if (t3[i] > 1) t3[i] -= 1;\n if (6 * t3[i] < 1) c[i] = t1 + (t2 - t1) * 6 * t3[i];\n else if (2 * t3[i] < 1) c[i] = t2;\n else if (3 * t3[i] < 2) c[i] = t1 + (t2 - t1) * (2 / 3 - t3[i]) * 6;\n else c[i] = t1;\n }\n [r, g, b] = [c[0] * 255, c[1] * 255, c[2] * 255];\n }\n if (args.length > 3) {\n // keep alpha channel\n return [r, g, b, args[3]];\n }\n return [r, g, b, 1];\n};\n\nexport default hsl2rgb;\n", "import { unpack, min, max } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - rgb2hsl(r,g,b)\n * - rgb2hsl(r,g,b,a)\n * - rgb2hsl([r,g,b])\n * - rgb2hsl([r,g,b,a])\n * - rgb2hsl({r,g,b,a})\n */\nconst rgb2hsl = (...args) => {\n args = unpack(args, 'rgba');\n let [r, g, b] = args;\n\n r /= 255;\n g /= 255;\n b /= 255;\n\n const minRgb = min(r, g, b);\n const maxRgb = max(r, g, b);\n\n const l = (maxRgb + minRgb) / 2;\n let s, h;\n\n if (maxRgb === minRgb) {\n s = 0;\n h = Number.NaN;\n } else {\n s =\n l < 0.5\n ? (maxRgb - minRgb) / (maxRgb + minRgb)\n : (maxRgb - minRgb) / (2 - maxRgb - minRgb);\n }\n\n if (r == maxRgb) h = (g - b) / (maxRgb - minRgb);\n else if (g == maxRgb) h = 2 + (b - r) / (maxRgb - minRgb);\n else if (b == maxRgb) h = 4 + (r - g) / (maxRgb - minRgb);\n\n h *= 60;\n if (h < 0) h += 360;\n if (args.length > 3 && args[3] !== undefined) return [h, s, l, args[3]];\n return [h, s, l];\n};\n\nexport default rgb2hsl;\n", "import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsl2rgb from './hsl2rgb.js';\nimport rgb2hsl from './rgb2hsl.js';\n\nColor.prototype.hsl = function () {\n return rgb2hsl(this._rgb);\n};\n\nconst hsl = (...args) => new Color(...args, 'hsl');\nchroma.hsl = hsl;\n\ninput.format.hsl = hsl2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'hsl');\n if (type(args) === 'array' && args.length === 3) {\n return 'hsl';\n }\n }\n});\n\nexport { hsl };\n", "import '../io/hsl/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsl = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'hsl');\n};\n\n// register interpolator\nindex.hsl = hsl;\n\nexport default hsl;\n", "import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\nconst hsv2rgb = (...args) => {\n args = unpack(args, 'hsv');\n let [h, s, v] = args;\n let r, g, b;\n v *= 255;\n if (s === 0) {\n r = g = b = v;\n } else {\n if (h === 360) h = 0;\n if (h > 360) h -= 360;\n if (h < 0) h += 360;\n h /= 60;\n\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - s * f);\n const t = v * (1 - s * (1 - f));\n\n switch (i) {\n case 0:\n [r, g, b] = [v, t, p];\n break;\n case 1:\n [r, g, b] = [q, v, p];\n break;\n case 2:\n [r, g, b] = [p, v, t];\n break;\n case 3:\n [r, g, b] = [p, q, v];\n break;\n case 4:\n [r, g, b] = [t, p, v];\n break;\n case 5:\n [r, g, b] = [v, p, q];\n break;\n }\n }\n return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsv2rgb;\n", "import { unpack } from '../../utils/index.js';\nconst { min, max } = Math;\n\n/*\n * supported arguments:\n * - rgb2hsv(r,g,b)\n * - rgb2hsv([r,g,b])\n * - rgb2hsv({r,g,b})\n */\nconst rgb2hsl = (...args) => {\n args = unpack(args, 'rgb');\n let [r, g, b] = args;\n const min_ = min(r, g, b);\n const max_ = max(r, g, b);\n const delta = max_ - min_;\n let h, s, v;\n v = max_ / 255.0;\n if (max_ === 0) {\n h = Number.NaN;\n s = 0;\n } else {\n s = delta / max_;\n if (r === max_) h = (g - b) / delta;\n if (g === max_) h = 2 + (b - r) / delta;\n if (b === max_) h = 4 + (r - g) / delta;\n h *= 60;\n if (h < 0) h += 360;\n }\n return [h, s, v];\n};\n\nexport default rgb2hsl;\n", "import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsv2rgb from './hsv2rgb.js';\nimport rgb2hsv from './rgb2hsv.js';\n\nColor.prototype.hsv = function () {\n return rgb2hsv(this._rgb);\n};\n\nconst hsv = (...args) => new Color(...args, 'hsv');\nchroma.hsv = hsv;\n\ninput.format.hsv = hsv2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'hsv');\n if (type(args) === 'array' && args.length === 3) {\n return 'hsv';\n }\n }\n});\n\nexport { hsv };\n", "import '../io/hsv/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsv = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'hsv');\n};\n\n// register interpolator\nindex.hsv = hsv;\n\nexport default hsv;\n", "// from https://www.w3.org/TR/css-color-4/multiply-matrices.js\nexport default function multiplyMatrices(A, B) {\n let m = A.length;\n\n if (!Array.isArray(A[0])) {\n // A is vector, convert to [[a, b, c, ...]]\n A = [A];\n }\n\n if (!Array.isArray(B[0])) {\n // B is vector, convert to [[a], [b], [c], ...]]\n B = B.map((x) => [x]);\n }\n\n let p = B[0].length;\n let B_cols = B[0].map((_, i) => B.map((x) => x[i])); // transpose B\n let product = A.map((row) =>\n B_cols.map((col) => {\n if (!Array.isArray(row)) {\n return col.reduce((a, c) => a + c * row, 0);\n }\n\n return row.reduce((a, c, i) => a + c * (col[i] || 0), 0);\n })\n );\n\n if (m === 1) {\n product = product[0]; // Avoid [[a, b, c, ...]]\n }\n\n if (p === 1) {\n return product.map((x) => x[0]); // Avoid [[a], [b], [c], ...]]\n }\n\n return product;\n}\n", "import { unpack } from '../../utils/index.js';\nimport multiplyMatrices from '../../utils/multiply-matrices.js';\nimport { xyz2rgb } from '../lab/lab2rgb.js';\n\nconst oklab2rgb = (...args) => {\n args = unpack(args, 'lab');\n const [L, a, b, ...rest] = args;\n const [X, Y, Z] = OKLab_to_XYZ([L, a, b]);\n const [r, g, b_] = xyz2rgb(X, Y, Z);\n return [r, g, b_, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\n// from https://www.w3.org/TR/css-color-4/#color-conversion-code\nfunction OKLab_to_XYZ(OKLab) {\n // Given OKLab, convert to XYZ relative to D65\n var LMStoXYZ = [\n [1.2268798758459243, -0.5578149944602171, 0.2813910456659647],\n [-0.0405757452148008, 1.112286803280317, -0.0717110580655164],\n [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]\n ];\n var OKLabtoLMS = [\n [1.0, 0.3963377773761749, 0.2158037573099136],\n [1.0, -0.1055613458156586, -0.0638541728258133],\n [1.0, -0.0894841775298119, -1.2914855480194092]\n ];\n\n var LMSnl = multiplyMatrices(OKLabtoLMS, OKLab);\n return multiplyMatrices(\n LMStoXYZ,\n LMSnl.map((c) => c ** 3)\n );\n}\n\nexport default oklab2rgb;\n", "import { unpack } from '../../utils/index.js';\nimport multiplyMatrices from '../../utils/multiply-matrices.js';\nimport { rgb2xyz } from '../lab/rgb2lab.js';\n\nconst rgb2oklab = (...args) => {\n const [r, g, b, ...rest] = unpack(args, 'rgb');\n const xyz = rgb2xyz(r, g, b);\n const oklab = XYZ_to_OKLab(xyz);\n return [...oklab, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\n// from https://www.w3.org/TR/css-color-4/#color-conversion-code\nfunction XYZ_to_OKLab(XYZ) {\n // Given XYZ relative to D65, convert to OKLab\n const XYZtoLMS = [\n [0.819022437996703, 0.3619062600528904, -0.1288737815209879],\n [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],\n [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]\n ];\n const LMStoOKLab = [\n [0.210454268309314, 0.7936177747023054, -0.0040720430116193],\n [1.9779985324311684, -2.4285922420485799, 0.450593709617411],\n [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]\n ];\n\n const LMS = multiplyMatrices(XYZtoLMS, XYZ);\n // JavaScript Math.cbrt returns a sign-matched cube root\n // beware if porting to other languages\n // especially if tempted to use a general power function\n return multiplyMatrices(\n LMStoOKLab,\n LMS.map((c) => Math.cbrt(c))\n );\n // L in range [0,1]. For use in CSS, multiply by 100 and add a percent\n}\n\nexport default rgb2oklab;\n", "import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklab2rgb from './oklab2rgb.js';\nimport rgb2oklab from './rgb2oklab.js';\n\nColor.prototype.oklab = function () {\n return rgb2oklab(this._rgb);\n};\n\nconst oklab = (...args) => new Color(...args, 'oklab');\nObject.assign(chroma, { oklab });\n\ninput.format.oklab = oklab2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'oklab');\n if (type(args) === 'array' && args.length === 3) {\n return 'oklab';\n }\n }\n});\n\nexport { oklab };\n", "import '../io/oklab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst oklab = (col1, col2, f) => {\n const xyz0 = col1.oklab();\n const xyz1 = col2.oklab();\n return new Color(\n xyz0[0] + f * (xyz1[0] - xyz0[0]),\n xyz0[1] + f * (xyz1[1] - xyz0[1]),\n xyz0[2] + f * (xyz1[2] - xyz0[2]),\n 'oklab'\n );\n};\n\n// register interpolator\nindex.oklab = oklab;\n\nexport default oklab;\n", "import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst oklch = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'oklch');\n};\n\n// register interpolator\nindex.oklch = oklch;\n\nexport default oklch;\n", "import Color from '../Color.js';\nimport { clip_rgb } from '../utils/index.js';\n\nconst { pow, sqrt, PI, cos, sin, atan2 } = Math;\n\nexport default (colors, mode = 'lrgb', weights = null) => {\n const l = colors.length;\n if (!weights) weights = Array.from(new Array(l)).map(() => 1);\n // normalize weights\n const k =\n l /\n weights.reduce(function (a, b) {\n return a + b;\n });\n weights.forEach((w, i) => {\n weights[i] *= k;\n });\n // convert colors to Color objects\n colors = colors.map((c) => new Color(c));\n if (mode === 'lrgb') {\n return _average_lrgb(colors, weights);\n }\n const first = colors.shift();\n const xyz = first.get(mode);\n const cnt = [];\n let dx = 0;\n let dy = 0;\n // initial color\n for (let i = 0; i < xyz.length; i++) {\n xyz[i] = (xyz[i] || 0) * weights[0];\n cnt.push(isNaN(xyz[i]) ? 0 : weights[0]);\n if (mode.charAt(i) === 'h' && !isNaN(xyz[i])) {\n const A = (xyz[i] / 180) * PI;\n dx += cos(A) * weights[0];\n dy += sin(A) * weights[0];\n }\n }\n\n let alpha = first.alpha() * weights[0];\n colors.forEach((c, ci) => {\n const xyz2 = c.get(mode);\n alpha += c.alpha() * weights[ci + 1];\n for (let i = 0; i < xyz.length; i++) {\n if (!isNaN(xyz2[i])) {\n cnt[i] += weights[ci + 1];\n if (mode.charAt(i) === 'h') {\n const A = (xyz2[i] / 180) * PI;\n dx += cos(A) * weights[ci + 1];\n dy += sin(A) * weights[ci + 1];\n } else {\n xyz[i] += xyz2[i] * weights[ci + 1];\n }\n }\n }\n });\n\n for (let i = 0; i < xyz.length; i++) {\n if (mode.charAt(i) === 'h') {\n let A = (atan2(dy / cnt[i], dx / cnt[i]) / PI) * 180;\n while (A < 0) A += 360;\n while (A >= 360) A -= 360;\n xyz[i] = A;\n } else {\n xyz[i] = xyz[i] / cnt[i];\n }\n }\n alpha /= l;\n return new Color(xyz, mode).alpha(alpha > 0.99999 ? 1 : alpha, true);\n};\n\nconst _average_lrgb = (colors, weights) => {\n const l = colors.length;\n const xyz = [0, 0, 0, 0];\n for (let i = 0; i < colors.length; i++) {\n const col = colors[i];\n const f = weights[i] / l;\n const rgb = col._rgb;\n xyz[0] += pow(rgb[0], 2) * f;\n xyz[1] += pow(rgb[1], 2) * f;\n xyz[2] += pow(rgb[2], 2) * f;\n xyz[3] += rgb[3] * f;\n }\n xyz[0] = sqrt(xyz[0]);\n xyz[1] = sqrt(xyz[1]);\n xyz[2] = sqrt(xyz[2]);\n if (xyz[3] > 0.9999999) xyz[3] = 1;\n return new Color(clip_rgb(xyz));\n};\n", "// minimal multi-purpose interface\n\n// @requires utils color analyze\nimport chroma from '../chroma.js';\nimport { limit, type } from '../utils/index.js';\n\nconst { pow } = Math;\n\nexport default function (colors) {\n // constructor\n let _mode = 'rgb';\n let _nacol = chroma('#ccc');\n let _spread = 0;\n // const _fixed = false;\n let _domain = [0, 1];\n let _pos = [];\n let _padding = [0, 0];\n let _classes = false;\n let _colors = [];\n let _out = false;\n let _min = 0;\n let _max = 1;\n let _correctLightness = false;\n let _colorCache = {};\n let _useCache = true;\n let _gamma = 1;\n\n // private methods\n\n const setColors = function (colors) {\n colors = colors || ['#fff', '#000'];\n if (\n colors &&\n type(colors) === 'string' &&\n chroma.brewer &&\n chroma.brewer[colors.toLowerCase()]\n ) {\n colors = chroma.brewer[colors.toLowerCase()];\n }\n if (type(colors) === 'array') {\n // handle single color\n if (colors.length === 1) {\n colors = [colors[0], colors[0]];\n }\n // make a copy of the colors\n colors = colors.slice(0);\n // convert to chroma classes\n for (let c = 0; c < colors.length; c++) {\n colors[c] = chroma(colors[c]);\n }\n // auto-fill color position\n _pos.length = 0;\n for (let c = 0; c < colors.length; c++) {\n _pos.push(c / (colors.length - 1));\n }\n }\n resetCache();\n return (_colors = colors);\n };\n\n const getClass = function (value) {\n if (_classes != null) {\n const n = _classes.length - 1;\n let i = 0;\n while (i < n && value >= _classes[i]) {\n i++;\n }\n return i - 1;\n }\n return 0;\n };\n\n let tMapLightness = (t) => t;\n let tMapDomain = (t) => t;\n\n // const classifyValue = function(value) {\n // let val = value;\n // if (_classes.length > 2) {\n // const n = _classes.length-1;\n // const i = getClass(value);\n // const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5))); // center of 1st class\n // const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5))); // center of last class\n // val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min));\n // }\n // return val;\n // };\n\n const getColor = function (val, bypassMap) {\n let col, t;\n if (bypassMap == null) {\n bypassMap = false;\n }\n if (isNaN(val) || val === null) {\n return _nacol;\n }\n if (!bypassMap) {\n if (_classes && _classes.length > 2) {\n // find the class\n const c = getClass(val);\n t = c / (_classes.length - 2);\n } else if (_max !== _min) {\n // just interpolate between min/max\n t = (val - _min) / (_max - _min);\n } else {\n t = 1;\n }\n } else {\n t = val;\n }\n\n // domain map\n t = tMapDomain(t);\n\n if (!bypassMap) {\n t = tMapLightness(t); // lightness correction\n }\n\n if (_gamma !== 1) {\n t = pow(t, _gamma);\n }\n\n t = _padding[0] + t * (1 - _padding[0] - _padding[1]);\n\n t = limit(t, 0, 1);\n\n const k = Math.floor(t * 10000);\n\n if (_useCache && _colorCache[k]) {\n col = _colorCache[k];\n } else {\n if (type(_colors) === 'array') {\n //for i in [0.._pos.length-1]\n for (let i = 0; i < _pos.length; i++) {\n const p = _pos[i];\n if (t <= p) {\n col = _colors[i];\n break;\n }\n if (t >= p && i === _pos.length - 1) {\n col = _colors[i];\n break;\n }\n if (t > p && t < _pos[i + 1]) {\n t = (t - p) / (_pos[i + 1] - p);\n col = chroma.interpolate(\n _colors[i],\n _colors[i + 1],\n t,\n _mode\n );\n break;\n }\n }\n } else if (type(_colors) === 'function') {\n col = _colors(t);\n }\n if (_useCache) {\n _colorCache[k] = col;\n }\n }\n return col;\n };\n\n var resetCache = () => (_colorCache = {});\n\n setColors(colors);\n\n // public interface\n\n const f = function (v) {\n const c = chroma(getColor(v));\n if (_out && c[_out]) {\n return c[_out]();\n } else {\n return c;\n }\n };\n\n f.classes = function (classes) {\n if (classes != null) {\n if (type(classes) === 'array') {\n _classes = classes;\n _domain = [classes[0], classes[classes.length - 1]];\n } else {\n const d = chroma.analyze(_domain);\n if (classes === 0) {\n _classes = [d.min, d.max];\n } else {\n _classes = chroma.limits(d, 'e', classes);\n }\n }\n return f;\n }\n return _classes;\n };\n\n f.domain = function (domain) {\n if (!arguments.length) {\n return _domain;\n }\n _min = domain[0];\n _max = domain[domain.length - 1];\n _pos = [];\n const k = _colors.length;\n if (domain.length === k && _min !== _max) {\n // update positions\n for (let d of Array.from(domain)) {\n _pos.push((d - _min) / (_max - _min));\n }\n } else {\n for (let c = 0; c < k; c++) {\n _pos.push(c / (k - 1));\n }\n if (domain.length > 2) {\n // set domain map\n const tOut = domain.map((d, i) => i / (domain.length - 1));\n const tBreaks = domain.map((d) => (d - _min) / (_max - _min));\n if (!tBreaks.every((val, i) => tOut[i] === val)) {\n tMapDomain = (t) => {\n if (t <= 0 || t >= 1) return t;\n let i = 0;\n while (t >= tBreaks[i + 1]) i++;\n const f =\n (t - tBreaks[i]) / (tBreaks[i + 1] - tBreaks[i]);\n const out = tOut[i] + f * (tOut[i + 1] - tOut[i]);\n return out;\n };\n }\n }\n }\n _domain = [_min, _max];\n return f;\n };\n\n f.mode = function (_m) {\n if (!arguments.length) {\n return _mode;\n }\n _mode = _m;\n resetCache();\n return f;\n };\n\n f.range = function (colors, _pos) {\n setColors(colors, _pos);\n return f;\n };\n\n f.out = function (_o) {\n _out = _o;\n return f;\n };\n\n f.spread = function (val) {\n if (!arguments.length) {\n return _spread;\n }\n _spread = val;\n return f;\n };\n\n f.correctLightness = function (v) {\n if (v == null) {\n v = true;\n }\n _correctLightness = v;\n resetCache();\n if (_correctLightness) {\n tMapLightness = function (t) {\n const L0 = getColor(0, true).lab()[0];\n const L1 = getColor(1, true).lab()[0];\n const pol = L0 > L1;\n let L_actual = getColor(t, true).lab()[0];\n const L_ideal = L0 + (L1 - L0) * t;\n let L_diff = L_actual - L_ideal;\n let t0 = 0;\n let t1 = 1;\n let max_iter = 20;\n while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {\n (function () {\n if (pol) {\n L_diff *= -1;\n }\n if (L_diff < 0) {\n t0 = t;\n t += (t1 - t) * 0.5;\n } else {\n t1 = t;\n t += (t0 - t) * 0.5;\n }\n L_actual = getColor(t, true).lab()[0];\n return (L_diff = L_actual - L_ideal);\n })();\n }\n return t;\n };\n } else {\n tMapLightness = (t) => t;\n }\n return f;\n };\n\n f.padding = function (p) {\n if (p != null) {\n if (type(p) === 'number') {\n p = [p, p];\n }\n _padding = p;\n return f;\n } else {\n return _padding;\n }\n };\n\n f.colors = function (numColors, out) {\n // If no arguments are given, return the original colors that were provided\n if (arguments.length < 2) {\n out = 'hex';\n }\n let result = [];\n\n if (arguments.length === 0) {\n result = _colors.slice(0);\n } else if (numColors === 1) {\n result = [f(0.5)];\n } else if (numColors > 1) {\n const dm = _domain[0];\n const dd = _domain[1] - dm;\n result = __range__(0, numColors, false).map((i) =>\n f(dm + (i / (numColors - 1)) * dd)\n );\n } else {\n // returns all colors based on the defined classes\n colors = [];\n let samples = [];\n if (_classes && _classes.length > 2) {\n for (\n let i = 1, end = _classes.length, asc = 1 <= end;\n asc ? i < end : i > end;\n asc ? i++ : i--\n ) {\n samples.push((_classes[i - 1] + _classes[i]) * 0.5);\n }\n } else {\n samples = _domain;\n }\n result = samples.map((v) => f(v));\n }\n\n if (chroma[out]) {\n result = result.map((c) => c[out]());\n }\n return result;\n };\n\n f.cache = function (c) {\n if (c != null) {\n _useCache = c;\n return f;\n } else {\n return _useCache;\n }\n };\n\n f.gamma = function (g) {\n if (g != null) {\n _gamma = g;\n return f;\n } else {\n return _gamma;\n }\n };\n\n f.nodata = function (d) {\n if (d != null) {\n _nacol = chroma(d);\n return f;\n } else {\n return _nacol;\n }\n };\n\n return f;\n}\n\nfunction __range__(left, right, inclusive) {\n let range = [];\n let ascending = left < right;\n let end = !inclusive ? right : ascending ? right + 1 : right - 1;\n for (let i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {\n range.push(i);\n }\n return range;\n}\n", "//\n// interpolates between a set of colors uzing a bezier spline\n//\n\n// @requires utils lab\nimport Color from '../Color.js';\nimport '../io/lab/index.js';\nimport scale from './scale.js';\n\n// nth row of the pascal triangle\nconst binom_row = function (n) {\n let row = [1, 1];\n for (let i = 1; i < n; i++) {\n let newrow = [1];\n for (let j = 1; j <= row.length; j++) {\n newrow[j] = (row[j] || 0) + row[j - 1];\n }\n row = newrow;\n }\n return row;\n};\n\nconst bezier = function (colors) {\n let I, lab0, lab1, lab2;\n colors = colors.map((c) => new Color(c));\n if (colors.length === 2) {\n // linear interpolation\n [lab0, lab1] = colors.map((c) => c.lab());\n I = function (t) {\n const lab = [0, 1, 2].map((i) => lab0[i] + t * (lab1[i] - lab0[i]));\n return new Color(lab, 'lab');\n };\n } else if (colors.length === 3) {\n // quadratic bezier interpolation\n [lab0, lab1, lab2] = colors.map((c) => c.lab());\n I = function (t) {\n const lab = [0, 1, 2].map(\n (i) =>\n (1 - t) * (1 - t) * lab0[i] +\n 2 * (1 - t) * t * lab1[i] +\n t * t * lab2[i]\n );\n return new Color(lab, 'lab');\n };\n } else if (colors.length === 4) {\n // cubic bezier interpolation\n let lab3;\n [lab0, lab1, lab2, lab3] = colors.map((c) => c.lab());\n I = function (t) {\n const lab = [0, 1, 2].map(\n (i) =>\n (1 - t) * (1 - t) * (1 - t) * lab0[i] +\n 3 * (1 - t) * (1 - t) * t * lab1[i] +\n 3 * (1 - t) * t * t * lab2[i] +\n t * t * t * lab3[i]\n );\n return new Color(lab, 'lab');\n };\n } else if (colors.length >= 5) {\n // general case (degree n bezier)\n let labs, row, n;\n labs = colors.map((c) => c.lab());\n n = colors.length - 1;\n row = binom_row(n);\n I = function (t) {\n const u = 1 - t;\n const lab = [0, 1, 2].map((i) =>\n labs.reduce(\n (sum, el, j) =>\n sum + row[j] * u ** (n - j) * t ** j * el[i],\n 0\n )\n );\n return new Color(lab, 'lab');\n };\n } else {\n throw new RangeError('No point in running bezier with only one color.');\n }\n return I;\n};\n\nexport default (colors) => {\n const f = bezier(colors);\n f.scale = () => scale(f);\n return f;\n};\n", "import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nconst { round } = Math;\n\nColor.prototype.rgb = function (rnd = true) {\n if (rnd === false) return this._rgb.slice(0, 3);\n return this._rgb.slice(0, 3).map(round);\n};\n\nColor.prototype.rgba = function (rnd = true) {\n return this._rgb.slice(0, 4).map((v, i) => {\n return i < 3 ? (rnd === false ? v : round(v)) : v;\n });\n};\n\nconst rgb = (...args) => new Color(...args, 'rgb');\nObject.assign(chroma, { rgb });\n\ninput.format.rgb = (...args) => {\n const rgba = unpack(args, 'rgba');\n if (rgba[3] === undefined) rgba[3] = 1;\n return rgba;\n};\n\ninput.autodetect.push({\n p: 3,\n test: (...args) => {\n args = unpack(args, 'rgba');\n if (\n type(args) === 'array' &&\n (args.length === 3 ||\n (args.length === 4 &&\n type(args[3]) == 'number' &&\n args[3] >= 0 &&\n args[3] <= 1))\n ) {\n return 'rgb';\n }\n }\n});\n\nexport { rgb };\n", "/*\n * interpolates between a set of colors uzing a bezier spline\n * blend mode formulas taken from https://web.archive.org/web/20180110014946/http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/\n */\n\nimport '../io/rgb/index.js';\nimport chroma from '../chroma.js';\n\nconst blend = (bottom, top, mode) => {\n if (!blend[mode]) {\n throw new Error('unknown blend mode ' + mode);\n }\n return blend[mode](bottom, top);\n};\n\nconst blend_f = (f) => (bottom, top) => {\n const c0 = chroma(top).rgb();\n const c1 = chroma(bottom).rgb();\n return chroma.rgb(f(c0, c1));\n};\n\nconst each = (f) => (c0, c1) => {\n const out = [];\n out[0] = f(c0[0], c1[0]);\n out[1] = f(c0[1], c1[1]);\n out[2] = f(c0[2], c1[2]);\n return out;\n};\n\nconst normal = (a) => a;\nconst multiply = (a, b) => (a * b) / 255;\nconst darken = (a, b) => (a > b ? b : a);\nconst lighten = (a, b) => (a > b ? a : b);\nconst screen = (a, b) => 255 * (1 - (1 - a / 255) * (1 - b / 255));\nconst overlay = (a, b) =>\n b < 128 ? (2 * a * b) / 255 : 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));\nconst burn = (a, b) => 255 * (1 - (1 - b / 255) / (a / 255));\nconst dodge = (a, b) => {\n if (a === 255) return 255;\n a = (255 * (b / 255)) / (1 - a / 255);\n return a > 255 ? 255 : a;\n};\n\n// # add = (a,b) ->\n// # if (a + b > 255) then 255 else a + b\n\nblend.normal = blend_f(each(normal));\nblend.multiply = blend_f(each(multiply));\nblend.screen = blend_f(each(screen));\nblend.overlay = blend_f(each(overlay));\nblend.darken = blend_f(each(darken));\nblend.lighten = blend_f(each(lighten));\nblend.dodge = blend_f(each(dodge));\nblend.burn = blend_f(each(burn));\n// blend.add = blend_f(each(add));\n\nexport default blend;\n", "// cubehelix interpolation\n// based on D.A. Green \"A colour scheme for the display of astronomical intensity images\"\n// http://astron-soc.in/bulletin/11June/289392011.pdf\nimport { type, clip_rgb, TWOPI } from '../utils/index.js';\nimport chroma from '../chroma.js';\nconst { pow, sin, cos } = Math;\n\nexport default function (\n start = 300,\n rotations = -1.5,\n hue = 1,\n gamma = 1,\n lightness = [0, 1]\n) {\n let dh = 0,\n dl;\n if (type(lightness) === 'array') {\n dl = lightness[1] - lightness[0];\n } else {\n dl = 0;\n lightness = [lightness, lightness];\n }\n const f = function (fract) {\n const a = TWOPI * ((start + 120) / 360 + rotations * fract);\n const l = pow(lightness[0] + dl * fract, gamma);\n const h = dh !== 0 ? hue[0] + fract * dh : hue;\n const amp = (h * l * (1 - l)) / 2;\n const cos_a = cos(a);\n const sin_a = sin(a);\n const r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);\n const g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);\n const b = l + amp * (+1.97294 * cos_a);\n return chroma(clip_rgb([r * 255, g * 255, b * 255, 1]));\n };\n f.start = function (s) {\n if (s == null) {\n return start;\n }\n start = s;\n return f;\n };\n f.rotations = function (r) {\n if (r == null) {\n return rotations;\n }\n rotations = r;\n return f;\n };\n f.gamma = function (g) {\n if (g == null) {\n return gamma;\n }\n gamma = g;\n return f;\n };\n f.hue = function (h) {\n if (h == null) {\n return hue;\n }\n hue = h;\n if (type(hue) === 'array') {\n dh = hue[1] - hue[0];\n if (dh === 0) {\n hue = hue[1];\n }\n } else {\n dh = 0;\n }\n return f;\n };\n f.lightness = function (h) {\n if (h == null) {\n return lightness;\n }\n if (type(h) === 'array') {\n lightness = h;\n dl = h[1] - h[0];\n } else {\n lightness = [h, h];\n dl = 0;\n }\n return f;\n };\n f.scale = () => chroma.scale(f);\n f.hue(hue);\n return f;\n}\n", "import Color from '../Color.js';\nconst digits = '0123456789abcdef';\n\nconst { floor, random } = Math;\n\nexport default () => {\n let code = '#';\n for (let i = 0; i < 6; i++) {\n code += digits.charAt(floor(random() * 16));\n }\n return new Color(code, 'hex');\n};\n", "import type from './type.js';\n\nconst { log, pow, floor, abs } = Math;\n\nexport function analyze(data, key = null) {\n const r = {\n min: Number.MAX_VALUE,\n max: Number.MAX_VALUE * -1,\n sum: 0,\n values: [],\n count: 0\n };\n if (type(data) === 'object') {\n data = Object.values(data);\n }\n data.forEach((val) => {\n if (key && type(val) === 'object') val = val[key];\n if (val !== undefined && val !== null && !isNaN(val)) {\n r.values.push(val);\n r.sum += val;\n if (val < r.min) r.min = val;\n if (val > r.max) r.max = val;\n r.count += 1;\n }\n });\n\n r.domain = [r.min, r.max];\n\n r.limits = (mode, num) => limits(r, mode, num);\n\n return r;\n}\n\nexport function limits(data, mode = 'equal', num = 7) {\n if (type(data) == 'array') {\n data = analyze(data);\n }\n const { min, max } = data;\n const values = data.values.sort((a, b) => a - b);\n\n if (num === 1) {\n return [min, max];\n }\n\n const limits = [];\n\n if (mode.substr(0, 1) === 'c') {\n // continuous\n limits.push(min);\n limits.push(max);\n }\n\n if (mode.substr(0, 1) === 'e') {\n // equal interval\n limits.push(min);\n for (let i = 1; i < num; i++) {\n limits.push(min + (i / num) * (max - min));\n }\n limits.push(max);\n } else if (mode.substr(0, 1) === 'l') {\n // log scale\n if (min <= 0) {\n throw new Error(\n 'Logarithmic scales are only possible for values > 0'\n );\n }\n const min_log = Math.LOG10E * log(min);\n const max_log = Math.LOG10E * log(max);\n limits.push(min);\n for (let i = 1; i < num; i++) {\n limits.push(pow(10, min_log + (i / num) * (max_log - min_log)));\n }\n limits.push(max);\n } else if (mode.substr(0, 1) === 'q') {\n // quantile scale\n limits.push(min);\n for (let i = 1; i < num; i++) {\n const p = ((values.length - 1) * i) / num;\n const pb = floor(p);\n if (pb === p) {\n limits.push(values[pb]);\n } else {\n // p > pb\n const pr = p - pb;\n limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);\n }\n }\n limits.push(max);\n } else if (mode.substr(0, 1) === 'k') {\n // k-means clustering\n /*\n implementation based on\n http://code.google.com/p/figue/source/browse/trunk/figue.js#336\n simplified for 1-d input values\n */\n let cluster;\n const n = values.length;\n const assignments = new Array(n);\n const clusterSizes = new Array(num);\n let repeat = true;\n let nb_iters = 0;\n let centroids = null;\n\n // get seed values\n centroids = [];\n centroids.push(min);\n for (let i = 1; i < num; i++) {\n centroids.push(min + (i / num) * (max - min));\n }\n centroids.push(max);\n\n while (repeat) {\n // assignment step\n for (let j = 0; j < num; j++) {\n clusterSizes[j] = 0;\n }\n for (let i = 0; i < n; i++) {\n const value = values[i];\n let mindist = Number.MAX_VALUE;\n let best;\n for (let j = 0; j < num; j++) {\n const dist = abs(centroids[j] - value);\n if (dist < mindist) {\n mindist = dist;\n best = j;\n }\n clusterSizes[best]++;\n assignments[i] = best;\n }\n }\n\n // update centroids step\n const newCentroids = new Array(num);\n for (let j = 0; j < num; j++) {\n newCentroids[j] = null;\n }\n for (let i = 0; i < n; i++) {\n cluster = assignments[i];\n if (newCentroids[cluster] === null) {\n newCentroids[cluster] = values[i];\n } else {\n newCentroids[cluster] += values[i];\n }\n }\n for (let j = 0; j < num; j++) {\n newCentroids[j] *= 1 / clusterSizes[j];\n }\n\n // check convergence\n repeat = false;\n for (let j = 0; j < num; j++) {\n if (newCentroids[j] !== centroids[j]) {\n repeat = true;\n break;\n }\n }\n\n centroids = newCentroids;\n nb_iters++;\n\n if (nb_iters > 200) {\n repeat = false;\n }\n }\n\n // finished k-means clustering\n // the next part is borrowed from gabrielflor.it\n const kClusters = {};\n for (let j = 0; j < num; j++) {\n kClusters[j] = [];\n }\n for (let i = 0; i < n; i++) {\n cluster = assignments[i];\n kClusters[cluster].push(values[i]);\n }\n let tmpKMeansBreaks = [];\n for (let j = 0; j < num; j++) {\n tmpKMeansBreaks.push(kClusters[j][0]);\n tmpKMeansBreaks.push(kClusters[j][kClusters[j].length - 1]);\n }\n tmpKMeansBreaks = tmpKMeansBreaks.sort((a, b) => a - b);\n limits.push(tmpKMeansBreaks[0]);\n for (let i = 1; i < tmpKMeansBreaks.length; i += 2) {\n const v = tmpKMeansBreaks[i];\n if (!isNaN(v) && limits.indexOf(v) === -1) {\n limits.push(v);\n }\n }\n }\n return limits;\n}\n", "import Color from '../Color.js';\nimport '../ops/luminance.js';\n\nexport default (a, b) => {\n // WCAG contrast ratio\n // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n a = new Color(a);\n b = new Color(b);\n const l1 = a.luminance();\n const l2 = b.luminance();\n return l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);\n};\n", "import Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\n/**\n * @license\n *\n * The APCA contrast prediction algorithm is based of the formulas published\n * in the APCA-1.0.98G specification by Myndex. The specification is available at:\n * https://raw.githubusercontent.com/Myndex/apca-w3/master/images/APCAw3_0.1.17_APCA0.0.98G.svg\n *\n * Note that the APCA implementation is still beta, so please update to\n * future versions of chroma.js when they become available.\n *\n * You can read more about the APCA Readability Criterion at\n * https://readtech.org/ARC/\n */\n\n// constants\nconst W_offset = 0.027;\nconst P_in = 0.0005;\nconst P_out = 0.1;\nconst R_scale = 1.14;\nconst B_threshold = 0.022;\nconst B_exp = 1.414;\n\nexport default (text, bg) => {\n // parse input colors\n text = new Color(text);\n bg = new Color(bg);\n // if text color has alpha, blend against background\n if (text.alpha() < 1) {\n text = mix(bg, text, text.alpha(), 'rgb');\n }\n const l_text = lum(...text.rgb());\n const l_bg = lum(...bg.rgb());\n\n // soft clamp black levels\n const Y_text =\n l_text >= B_threshold\n ? l_text\n : l_text + Math.pow(B_threshold - l_text, B_exp);\n const Y_bg =\n l_bg >= B_threshold ? l_bg : l_bg + Math.pow(B_threshold - l_bg, B_exp);\n\n // normal polarity (dark text on light background)\n const S_norm = Math.pow(Y_bg, 0.56) - Math.pow(Y_text, 0.57);\n // reverse polarity (light text on dark background)\n const S_rev = Math.pow(Y_bg, 0.65) - Math.pow(Y_text, 0.62);\n // clamp noise then scale\n const C =\n Math.abs(Y_bg - Y_text) < P_in\n ? 0\n : Y_text < Y_bg\n ? S_norm * R_scale\n : S_rev * R_scale;\n // clamp minimum contrast then offset\n const S_apc = Math.abs(C) < P_out ? 0 : C > 0 ? C - W_offset : C + W_offset;\n // scale to 100\n return S_apc * 100;\n};\n\nfunction lum(r, g, b) {\n return (\n 0.2126729 * Math.pow(r / 255, 2.4) +\n 0.7151522 * Math.pow(g / 255, 2.4) +\n 0.072175 * Math.pow(b / 255, 2.4)\n );\n}\n", "import Color from '../Color.js';\nconst { sqrt, pow, min, max, atan2, abs, cos, sin, exp, PI } = Math;\n\nexport default function (a, b, Kl = 1, Kc = 1, Kh = 1) {\n // Delta E (CIE 2000)\n // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CIE2000.html\n var rad2deg = function (rad) {\n return (360 * rad) / (2 * PI);\n };\n var deg2rad = function (deg) {\n return (2 * PI * deg) / 360;\n };\n a = new Color(a);\n b = new Color(b);\n const [L1, a1, b1] = Array.from(a.lab());\n const [L2, a2, b2] = Array.from(b.lab());\n const avgL = (L1 + L2) / 2;\n const C1 = sqrt(pow(a1, 2) + pow(b1, 2));\n const C2 = sqrt(pow(a2, 2) + pow(b2, 2));\n const avgC = (C1 + C2) / 2;\n const G = 0.5 * (1 - sqrt(pow(avgC, 7) / (pow(avgC, 7) + pow(25, 7))));\n const a1p = a1 * (1 + G);\n const a2p = a2 * (1 + G);\n const C1p = sqrt(pow(a1p, 2) + pow(b1, 2));\n const C2p = sqrt(pow(a2p, 2) + pow(b2, 2));\n const avgCp = (C1p + C2p) / 2;\n const arctan1 = rad2deg(atan2(b1, a1p));\n const arctan2 = rad2deg(atan2(b2, a2p));\n const h1p = arctan1 >= 0 ? arctan1 : arctan1 + 360;\n const h2p = arctan2 >= 0 ? arctan2 : arctan2 + 360;\n const avgHp =\n abs(h1p - h2p) > 180 ? (h1p + h2p + 360) / 2 : (h1p + h2p) / 2;\n const T =\n 1 -\n 0.17 * cos(deg2rad(avgHp - 30)) +\n 0.24 * cos(deg2rad(2 * avgHp)) +\n 0.32 * cos(deg2rad(3 * avgHp + 6)) -\n 0.2 * cos(deg2rad(4 * avgHp - 63));\n let deltaHp = h2p - h1p;\n deltaHp =\n abs(deltaHp) <= 180\n ? deltaHp\n : h2p <= h1p\n ? deltaHp + 360\n : deltaHp - 360;\n deltaHp = 2 * sqrt(C1p * C2p) * sin(deg2rad(deltaHp) / 2);\n const deltaL = L2 - L1;\n const deltaCp = C2p - C1p;\n const sl = 1 + (0.015 * pow(avgL - 50, 2)) / sqrt(20 + pow(avgL - 50, 2));\n const sc = 1 + 0.045 * avgCp;\n const sh = 1 + 0.015 * avgCp * T;\n const deltaTheta = 30 * exp(-pow((avgHp - 275) / 25, 2));\n const Rc = 2 * sqrt(pow(avgCp, 7) / (pow(avgCp, 7) + pow(25, 7)));\n const Rt = -Rc * sin(2 * deg2rad(deltaTheta));\n const result = sqrt(\n pow(deltaL / (Kl * sl), 2) +\n pow(deltaCp / (Kc * sc), 2) +\n pow(deltaHp / (Kh * sh), 2) +\n Rt * (deltaCp / (Kc * sc)) * (deltaHp / (Kh * sh))\n );\n return max(0, min(100, result));\n}\n", "import Color from '../Color.js';\n\n// simple Euclidean distance\nexport default function (a, b, mode = 'lab') {\n // Delta E (CIE 1976)\n // see http://www.brucelindbloom.com/index.html?Equations.html\n a = new Color(a);\n b = new Color(b);\n const l1 = a.get(mode);\n const l2 = b.get(mode);\n let sum_sq = 0;\n for (let i in l1) {\n const d = (l1[i] || 0) - (l2[i] || 0);\n sum_sq += d * d;\n }\n return Math.sqrt(sum_sq);\n}\n", "import Color from '../Color.js';\n\nexport default (...args) => {\n try {\n new Color(...args);\n return true;\n // eslint-disable-next-line\n } catch (e) {\n return false;\n }\n};\n", "// some pre-defined color scales:\nimport chroma from '../chroma.js';\nimport '../io/hsl/index.js';\nimport scale from '../generator/scale.js';\n\nexport default {\n cool() {\n return scale([chroma.hsl(180, 1, 0.9), chroma.hsl(250, 0.7, 0.4)]);\n },\n hot() {\n return scale(['#000', '#f00', '#ff0', '#fff'], [0, 0.25, 0.75, 1]).mode(\n 'rgb'\n );\n }\n};\n", "/**\n ColorBrewer colors for chroma.js\n\n Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The\n Pennsylvania State University.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software distributed\n under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n CONDITIONS OF ANY KIND, either express or implied. See the License for the\n specific language governing permissions and limitations under the License.\n*/\n\nconst colorbrewer = {\n // sequential\n OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],\n PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],\n BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],\n Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],\n BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],\n YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],\n YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],\n Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],\n RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],\n Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],\n YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],\n Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],\n GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],\n Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],\n YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],\n PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],\n Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],\n PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],\n Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],\n\n // diverging\n Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],\n RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],\n RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],\n PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],\n PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],\n RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],\n BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],\n RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],\n PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],\n\n // qualitative\n Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],\n Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],\n Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],\n Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],\n Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],\n Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],\n Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],\n Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']\n};\n\nconst colorbrewerTypes = Object.keys(colorbrewer);\nconst typeMap = new Map(colorbrewerTypes.map((key) => [key.toLowerCase(), key]));\n\n// use Proxy to allow case-insensitive access to palettes\nconst colorbrewerProxy =\n typeof Proxy === 'function'\n ? new Proxy(colorbrewer, {\n get(target, prop) {\n const lower = prop.toLowerCase();\n if (typeMap.has(lower)) {\n return target[typeMap.get(lower)];\n }\n },\n getOwnPropertyNames() {\n return Object.getOwnPropertyNames(colorbrewerTypes);\n }\n })\n : colorbrewer;\n\nexport default colorbrewerProxy;\n", "import { unpack } from '../../utils/index.js';\n\nconst cmyk2rgb = (...args) => {\n args = unpack(args, 'cmyk');\n const [c, m, y, k] = args;\n const alpha = args.length > 4 ? args[4] : 1;\n if (k === 1) return [0, 0, 0, alpha];\n return [\n c >= 1 ? 0 : 255 * (1 - c) * (1 - k), // r\n m >= 1 ? 0 : 255 * (1 - m) * (1 - k), // g\n y >= 1 ? 0 : 255 * (1 - y) * (1 - k), // b\n alpha\n ];\n};\n\nexport default cmyk2rgb;\n", "import { unpack } from '../../utils/index.js';\nconst { max } = Math;\n\nconst rgb2cmyk = (...args) => {\n let [r, g, b] = unpack(args, 'rgb');\n r = r / 255;\n g = g / 255;\n b = b / 255;\n const k = 1 - max(r, max(g, b));\n const f = k < 1 ? 1 / (1 - k) : 0;\n const c = (1 - r - k) * f;\n const m = (1 - g - k) * f;\n const y = (1 - b - k) * f;\n return [c, m, y, k];\n};\n\nexport default rgb2cmyk;\n", "import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nimport cmyk2rgb from './cmyk2rgb.js';\nimport rgb2cmyk from './rgb2cmyk.js';\n\nColor.prototype.cmyk = function () {\n return rgb2cmyk(this._rgb);\n};\n\nconst cmyk = (...args) => new Color(...args, 'cmyk');\nObject.assign(chroma, { cmyk });\n\ninput.format.cmyk = cmyk2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'cmyk');\n if (type(args) === 'array' && args.length === 4) {\n return 'cmyk';\n }\n }\n});\n\nexport { cmyk };\n", "import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - hsl2css(h,s,l)\n * - hsl2css(h,s,l,a)\n * - hsl2css([h,s,l], mode)\n * - hsl2css([h,s,l,a], mode)\n * - hsl2css({h,s,l,a}, mode)\n */\nconst hsl2css = (...args) => {\n const hsla = unpack(args, 'hsla');\n let mode = last(args) || 'lsa';\n hsla[0] = rnd2(hsla[0] || 0) + 'deg';\n hsla[1] = rnd2(hsla[1] * 100) + '%';\n hsla[2] = rnd2(hsla[2] * 100) + '%';\n if (mode === 'hsla' || (hsla.length > 3 && hsla[3] < 1)) {\n hsla[3] = '/ ' + (hsla.length > 3 ? hsla[3] : 1);\n mode = 'hsla';\n } else {\n hsla.length = 3;\n }\n return `${mode.substr(0, 3)}(${hsla.join(' ')})`;\n};\n\nexport default hsl2css;\n", "import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - lab2css(l,a,b)\n * - lab2css(l,a,b,alpha)\n * - lab2css([l,a,b], mode)\n * - lab2css([l,a,b,alpha], mode)\n */\nconst lab2css = (...args) => {\n const laba = unpack(args, 'lab');\n let mode = last(args) || 'lab';\n laba[0] = rnd2(laba[0]) + '%';\n laba[1] = rnd2(laba[1]);\n laba[2] = rnd2(laba[2]);\n if (mode === 'laba' || (laba.length > 3 && laba[3] < 1)) {\n laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);\n } else {\n laba.length = 3;\n }\n return `lab(${laba.join(' ')})`;\n};\n\nexport default lab2css;\n", "import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - lab2css(l,a,b)\n * - lab2css(l,a,b,alpha)\n * - lab2css([l,a,b], mode)\n * - lab2css([l,a,b,alpha], mode)\n */\nconst lch2css = (...args) => {\n const lcha = unpack(args, 'lch');\n let mode = last(args) || 'lab';\n lcha[0] = rnd2(lcha[0]) + '%';\n lcha[1] = rnd2(lcha[1]);\n lcha[2] = isNaN(lcha[2]) ? 'none' : rnd2(lcha[2]) + 'deg'; // add deg unit to hue\n if (mode === 'lcha' || (lcha.length > 3 && lcha[3] < 1)) {\n lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);\n } else {\n lcha.length = 3;\n }\n return `lch(${lcha.join(' ')})`;\n};\n\nexport default lch2css;\n", "import { unpack, rnd2, rnd3 } from '../../utils/index.js';\n\nconst oklab2css = (...args) => {\n const laba = unpack(args, 'lab');\n laba[0] = rnd2(laba[0] * 100) + '%';\n laba[1] = rnd3(laba[1]);\n laba[2] = rnd3(laba[2]);\n if (laba.length > 3 && laba[3] < 1) {\n laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);\n } else {\n laba.length = 3;\n }\n return `oklab(${laba.join(' ')})`;\n};\n\nexport default oklab2css;\n", "import { unpack } from '../../utils/index.js';\nimport rgb2oklab from '../oklab/rgb2oklab.js';\nimport lab2lch from '../lch/lab2lch.js';\n\nconst rgb2oklch = (...args) => {\n const [r, g, b, ...rest] = unpack(args, 'rgb');\n const [l, a, b_] = rgb2oklab(r, g, b);\n const [L, c, h] = lab2lch(l, a, b_);\n return [L, c, h, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default rgb2oklch;\n", "import { unpack, rnd2, rnd3 } from '../../utils/index.js';\n\nconst oklch2css = (...args) => {\n const lcha = unpack(args, 'lch');\n lcha[0] = rnd2(lcha[0] * 100) + '%';\n lcha[1] = rnd3(lcha[1]);\n lcha[2] = isNaN(lcha[2]) ? 'none' : rnd2(lcha[2]) + 'deg'; // add deg unit to hue\n if (lcha.length > 3 && lcha[3] < 1) {\n lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);\n } else {\n lcha.length = 3;\n }\n return `oklch(${lcha.join(' ')})`;\n};\n\nexport default oklch2css;\n", "import { unpack, last } from '../../utils/index.js';\nimport hsl2css from './hsl2css.js';\nimport rgb2hsl from '../hsl/rgb2hsl.js';\nimport lab2css from './lab2css.js';\nimport rgb2lab from '../lab/rgb2lab.js';\nimport lch2css from './lch2css.js';\nimport rgb2lch from '../lch/rgb2lch.js';\nimport rgb2oklab from '../oklab/rgb2oklab.js';\nimport oklab2css from './oklab2css.js';\nimport rgb2oklch from '../oklch/rgb2oklch.js';\nimport oklch2css from './oklch2css.js';\nimport { getLabWhitePoint, setLabWhitePoint } from '../lab/lab-constants.js';\nconst { round } = Math;\n\n/*\n * supported arguments:\n * - rgb2css(r,g,b)\n * - rgb2css(r,g,b,a)\n * - rgb2css([r,g,b], mode)\n * - rgb2css([r,g,b,a], mode)\n * - rgb2css({r,g,b,a}, mode)\n */\nconst rgb2css = (...args) => {\n const rgba = unpack(args, 'rgba');\n let mode = last(args) || 'rgb';\n if (mode.substr(0, 3) === 'hsl') {\n return hsl2css(rgb2hsl(rgba), mode);\n }\n if (mode.substr(0, 3) === 'lab') {\n // change to D50 lab whitepoint since this is what W3C is using for CSS Lab colors\n const prevWhitePoint = getLabWhitePoint();\n setLabWhitePoint('d50');\n const cssColor = lab2css(rgb2lab(rgba), mode);\n setLabWhitePoint(prevWhitePoint);\n return cssColor;\n }\n if (mode.substr(0, 3) === 'lch') {\n // change to D50 lab whitepoint since this is what W3C is using for CSS Lab colors\n const prevWhitePoint = getLabWhitePoint();\n setLabWhitePoint('d50');\n const cssColor = lch2css(rgb2lch(rgba), mode);\n setLabWhitePoint(prevWhitePoint);\n return cssColor;\n }\n if (mode.substr(0, 5) === 'oklab') {\n return oklab2css(rgb2oklab(rgba));\n }\n if (mode.substr(0, 5) === 'oklch') {\n return oklch2css(rgb2oklch(rgba));\n }\n rgba[0] = round(rgba[0]);\n rgba[1] = round(rgba[1]);\n rgba[2] = round(rgba[2]);\n if (mode === 'rgba' || (rgba.length > 3 && rgba[3] < 1)) {\n rgba[3] = '/ ' + (rgba.length > 3 ? rgba[3] : 1);\n mode = 'rgba';\n }\n return `${mode.substr(0, 3)}(${rgba.slice(0, mode === 'rgb' ? 3 : 4).join(' ')})`;\n};\n\nexport default rgb2css;\n", "import { unpack } from '../../utils/index.js';\nimport lch2lab from '../lch/lch2lab.js';\nimport oklab2rgb from '../oklab/oklab2rgb.js';\n\nconst oklch2rgb = (...args) => {\n args = unpack(args, 'lch');\n const [l, c, h, ...rest] = args;\n const [L, a, b_] = lch2lab(l, c, h);\n const [r, g, b] = oklab2rgb(L, a, b_);\n return [r, g, b, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default oklch2rgb;\n", "import hsl2rgb from '../hsl/hsl2rgb.js';\nimport lab2rgb from '../lab/lab2rgb.js';\nimport lch2rgb from '../lch/lch2rgb.js';\nimport oklab2rgb from '../oklab/oklab2rgb.js';\nimport oklch2rgb from '../oklch/oklch2rgb.js';\nimport input from '../input.js';\nimport limit from '../../utils/limit.js';\nimport { getLabWhitePoint, setLabWhitePoint } from '../lab/lab-constants.js';\n\nconst INT_OR_PCT = /((?:-?\\d+)|(?:-?\\d+(?:\\.\\d+)?)%|none)/.source;\nconst FLOAT_OR_PCT = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)%?)|none)/.source;\nconst PCT = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)%)|none)/.source;\nconst RE_S = /\\s*/.source;\nconst SEP = /\\s+/.source;\nconst COMMA = /\\s*,\\s*/.source;\nconst ANLGE = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:deg)?)|none)/.source;\nconst ALPHA = /\\s*(?:\\/\\s*((?:[01]|[01]?\\.\\d+)|\\d+(?:\\.\\d+)?%))?/.source;\n\n// e.g. rgb(250 20 0), rgb(100% 50% 20%), rgb(100% 50% 20% / 0.5)\nconst RE_RGB = new RegExp(\n '^rgba?\\\\(' +\n RE_S +\n [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT].join(SEP) +\n ALPHA +\n '\\\\)$'\n);\nconst RE_RGB_LEGACY = new RegExp(\n '^rgb\\\\(' +\n RE_S +\n [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT].join(COMMA) +\n RE_S +\n '\\\\)$'\n);\nconst RE_RGBA_LEGACY = new RegExp(\n '^rgba\\\\(' +\n RE_S +\n [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT, FLOAT_OR_PCT].join(COMMA) +\n RE_S +\n '\\\\)$'\n);\n\nconst RE_HSL = new RegExp(\n '^hsla?\\\\(' + RE_S + [ANLGE, PCT, PCT].join(SEP) + ALPHA + '\\\\)$'\n);\nconst RE_HSL_LEGACY = new RegExp(\n '^hsl?\\\\(' + RE_S + [ANLGE, PCT, PCT].join(COMMA) + RE_S + '\\\\)$'\n);\nconst RE_HSLA_LEGACY =\n /^hsla\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n\nconst RE_LAB = new RegExp(\n '^lab\\\\(' +\n RE_S +\n [FLOAT_OR_PCT, FLOAT_OR_PCT, FLOAT_OR_PCT].join(SEP) +\n ALPHA +\n '\\\\)$'\n);\nconst RE_LCH = new RegExp(\n '^lch\\\\(' +\n RE_S +\n [FLOAT_OR_PCT, FLOAT_OR_PCT, ANLGE].join(SEP) +\n ALPHA +\n '\\\\)$'\n);\nconst RE_OKLAB = new RegExp(\n '^oklab\\\\(' +\n RE_S +\n [FLOAT_OR_PCT, FLOAT_OR_PCT, FLOAT_OR_PCT].join(SEP) +\n ALPHA +\n '\\\\)$'\n);\nconst RE_OKLCH = new RegExp(\n '^oklch\\\\(' +\n RE_S +\n [FLOAT_OR_PCT, FLOAT_OR_PCT, ANLGE].join(SEP) +\n ALPHA +\n '\\\\)$'\n);\n\nconst { round } = Math;\n\nconst roundRGB = (rgb) => {\n return rgb.map((v, i) => (i <= 2 ? limit(round(v), 0, 255) : v));\n};\n\nconst percentToAbsolute = (pct, min = 0, max = 100, signed = false) => {\n if (typeof pct === 'string' && pct.endsWith('%')) {\n pct = parseFloat(pct.substring(0, pct.length - 1)) / 100;\n if (signed) {\n // signed percentages are in the range -100% to 100%\n pct = min + (pct + 1) * 0.5 * (max - min);\n } else {\n pct = min + pct * (max - min);\n }\n }\n return +pct;\n};\n\nconst noneToValue = (v, noneValue) => {\n return v === 'none' ? noneValue : v;\n};\n\nconst css2rgb = (css) => {\n css = css.toLowerCase().trim();\n\n if (css === 'transparent') {\n return [0, 0, 0, 0];\n }\n\n let m;\n\n if (input.format.named) {\n try {\n return input.format.named(css);\n // eslint-disable-next-line\n } catch (e) {}\n }\n\n // rgb(250 20 0) or rgb(250,20,0)\n if ((m = css.match(RE_RGB)) || (m = css.match(RE_RGB_LEGACY))) {\n let rgb = m.slice(1, 4);\n for (let i = 0; i < 3; i++) {\n rgb[i] = +percentToAbsolute(noneToValue(rgb[i], 0), 0, 255);\n }\n rgb = roundRGB(rgb);\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha; // default alpha\n return rgb;\n }\n\n // rgba(250,20,0,0.4)\n if ((m = css.match(RE_RGBA_LEGACY))) {\n const rgb = m.slice(1, 5);\n for (let i = 0; i < 4; i++) {\n rgb[i] = +percentToAbsolute(rgb[i], 0, 255);\n }\n return rgb;\n }\n\n // hsl(0,100%,50%)\n if ((m = css.match(RE_HSL)) || (m = css.match(RE_HSL_LEGACY))) {\n const hsl = m.slice(1, 4);\n hsl[0] = +noneToValue(hsl[0].replace('deg', ''), 0);\n hsl[1] = +percentToAbsolute(noneToValue(hsl[1], 0), 0, 100) * 0.01;\n hsl[2] = +percentToAbsolute(noneToValue(hsl[2], 0), 0, 100) * 0.01;\n const rgb = roundRGB(hsl2rgb(hsl));\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha;\n return rgb;\n }\n\n // hsla(0,100%,50%,0.5)\n if ((m = css.match(RE_HSLA_LEGACY))) {\n const hsl = m.slice(1, 4);\n hsl[1] *= 0.01;\n hsl[2] *= 0.01;\n const rgb = hsl2rgb(hsl);\n for (let i = 0; i < 3; i++) {\n rgb[i] = round(rgb[i]);\n }\n rgb[3] = +m[4]; // default alpha = 1\n return rgb;\n }\n\n if ((m = css.match(RE_LAB))) {\n const lab = m.slice(1, 4);\n lab[0] = percentToAbsolute(noneToValue(lab[0], 0), 0, 100);\n lab[1] = percentToAbsolute(noneToValue(lab[1], 0), -125, 125, true);\n lab[2] = percentToAbsolute(noneToValue(lab[2], 0), -125, 125, true);\n // convert to D50 Lab whitepoint\n const wp = getLabWhitePoint();\n setLabWhitePoint('d50');\n const rgb = roundRGB(lab2rgb(lab));\n // convert back to original Lab whitepoint\n setLabWhitePoint(wp);\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha;\n return rgb;\n }\n\n if ((m = css.match(RE_LCH))) {\n const lch = m.slice(1, 4);\n lch[0] = percentToAbsolute(lch[0], 0, 100);\n lch[1] = percentToAbsolute(noneToValue(lch[1], 0), 0, 150, false);\n lch[2] = +noneToValue(lch[2].replace('deg', ''), 0);\n // convert to D50 Lab whitepoint\n const wp = getLabWhitePoint();\n setLabWhitePoint('d50');\n const rgb = roundRGB(lch2rgb(lch));\n // convert back to original Lab whitepoint\n setLabWhitePoint(wp);\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha;\n return rgb;\n }\n\n if ((m = css.match(RE_OKLAB))) {\n const oklab = m.slice(1, 4);\n oklab[0] = percentToAbsolute(noneToValue(oklab[0], 0), 0, 1);\n oklab[1] = percentToAbsolute(noneToValue(oklab[1], 0), -0.4, 0.4, true);\n oklab[2] = percentToAbsolute(noneToValue(oklab[2], 0), -0.4, 0.4, true);\n const rgb = roundRGB(oklab2rgb(oklab));\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha;\n return rgb;\n }\n\n if ((m = css.match(RE_OKLCH))) {\n const oklch = m.slice(1, 4);\n oklch[0] = percentToAbsolute(noneToValue(oklch[0], 0), 0, 1);\n oklch[1] = percentToAbsolute(noneToValue(oklch[1], 0), 0, 0.4, false);\n oklch[2] = +noneToValue(oklch[2].replace('deg', ''), 0);\n const rgb = roundRGB(oklch2rgb(oklch));\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha;\n return rgb;\n }\n};\n\ncss2rgb.test = (s) => {\n return (\n // modern\n RE_RGB.test(s) ||\n RE_HSL.test(s) ||\n RE_LAB.test(s) ||\n RE_LCH.test(s) ||\n RE_OKLAB.test(s) ||\n RE_OKLCH.test(s) ||\n // legacy\n RE_RGB_LEGACY.test(s) ||\n RE_RGBA_LEGACY.test(s) ||\n RE_HSL_LEGACY.test(s) ||\n RE_HSLA_LEGACY.test(s) ||\n s === 'transparent'\n );\n};\n\nexport default css2rgb;\n", "import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport rgb2css from './rgb2css.js';\nimport css2rgb from './css2rgb.js';\n\nColor.prototype.css = function (mode) {\n return rgb2css(this._rgb, mode);\n};\n\nconst css = (...args) => new Color(...args, 'css');\nchroma.css = css;\n\ninput.format.css = css2rgb;\n\ninput.autodetect.push({\n p: 5,\n test: (h, ...rest) => {\n if (!rest.length && type(h) === 'string' && css2rgb.test(h)) {\n return 'css';\n }\n }\n});\n\nexport { css };\n", "import Color from '../../Color.js';\nimport chroma from '../../chroma.js';\nimport input from '../input.js';\nimport { unpack } from '../../utils/index.js';\n\ninput.format.gl = (...args) => {\n const rgb = unpack(args, 'rgba');\n rgb[0] *= 255;\n rgb[1] *= 255;\n rgb[2] *= 255;\n return rgb;\n};\n\nconst gl = (...args) => new Color(...args, 'gl');\nchroma.gl = gl;\n\nColor.prototype.gl = function () {\n const rgb = this._rgb;\n return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];\n};\n\nexport { gl };\n", "import Color from '../../Color.js';\nimport chroma from '../../chroma.js';\nimport { type } from '../../utils/index.js';\nimport input from '../input.js';\nimport hex2rgb from './hex2rgb.js';\nimport rgb2hex from './rgb2hex.js';\n\nColor.prototype.hex = function (mode) {\n return rgb2hex(this._rgb, mode);\n};\n\nconst hex = (...args) => new Color(...args, 'hex');\nchroma.hex = hex;\n\ninput.format.hex = hex2rgb;\ninput.autodetect.push({\n p: 4,\n test: (h, ...rest) => {\n if (\n !rest.length &&\n type(h) === 'string' &&\n [3, 4, 5, 6, 7, 8, 9].indexOf(h.length) >= 0\n ) {\n return 'hex';\n }\n }\n});\n\nexport { hex };\n", "/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n */\n\nconst { log } = Math;\n\nconst temperature2rgb = (kelvin) => {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255;\n g =\n temp < 6\n ? 0\n : -155.25485562709179 -\n 0.44596950469579133 * (g = temp - 2) +\n 104.49216199393888 * log(g);\n b =\n temp < 20\n ? 0\n : -254.76935184120902 +\n 0.8274096064007395 * (b = temp - 10) +\n 115.67994401066147 * log(b);\n } else {\n r =\n 351.97690566805693 +\n 0.114206453784165 * (r = temp - 55) -\n 40.25366309332127 * log(r);\n g =\n 325.4494125711974 +\n 0.07943456536662342 * (g = temp - 50) -\n 28.0852963507957 * log(g);\n b = 255;\n }\n return [r, g, b, 1];\n};\n\nexport default temperature2rgb;\n", "/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n **/\n\nimport temperature2rgb from './temperature2rgb.js';\nimport { unpack } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2temperature = (...args) => {\n const rgb = unpack(args, 'rgb');\n const r = rgb[0],\n b = rgb[2];\n let minTemp = 1000;\n let maxTemp = 40000;\n const eps = 0.4;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = temperature2rgb(temp);\n if (rgb[2] / rgb[0] >= b / r) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return round(temp);\n};\n\nexport default rgb2temperature;\n", "import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport temperature2rgb from './temperature2rgb.js';\nimport rgb2temperature from './rgb2temperature.js';\n\nColor.prototype.temp =\n Color.prototype.kelvin =\n Color.prototype.temperature =\n function () {\n return rgb2temperature(this._rgb);\n };\n\nconst temp = (...args) => new Color(...args, 'temp');\nObject.assign(chroma, { temp, kelvin: temp, temperature: temp });\n\ninput.format.temp =\n input.format.kelvin =\n input.format.temperature =\n temperature2rgb;\n\nexport { temp, temp as kelvin, temp as temperature };\n", "import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklch2rgb from './oklch2rgb.js';\nimport rgb2oklch from './rgb2oklch.js';\n\nColor.prototype.oklch = function () {\n return rgb2oklch(this._rgb);\n};\n\nconst oklch = (...args) => new Color(...args, 'oklch');\nObject.assign(chroma, { oklch });\n\ninput.format.oklch = oklch2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'oklch');\n if (type(args) === 'array' && args.length === 3) {\n return 'oklch';\n }\n }\n});\n\nexport { oklch };\n", "// feel free to comment out anything to rollup\n// a smaller chroma.js bundle\nimport chroma from './src/chroma.js';\n\n// io --> convert colors\nimport './src/io/named/index.js';\n\n// operators --> modify existing Colors\nimport './src/ops/alpha.js';\nimport './src/ops/clipped.js';\nimport './src/ops/darken.js';\nimport './src/ops/get.js';\nimport './src/ops/luminance.js';\nimport './src/ops/mix.js';\nimport './src/ops/premultiply.js';\nimport './src/ops/saturate.js';\nimport './src/ops/set.js';\nimport './src/ops/shade.js';\n\n// interpolators\nimport './src/interpolator/rgb.js';\nimport './src/interpolator/lrgb.js';\nimport './src/interpolator/lab.js';\nimport './src/interpolator/lch.js';\nimport './src/interpolator/num.js';\nimport './src/interpolator/hcg.js';\nimport './src/interpolator/hsi.js';\nimport './src/interpolator/hsl.js';\nimport './src/interpolator/hsv.js';\nimport './src/interpolator/oklab.js';\nimport './src/interpolator/oklch.js';\n\n// generators -- > create new colors\nimport average from './src/generator/average.js';\nimport bezier from './src/generator/bezier.js';\nimport blend from './src/generator/blend.js';\nimport cubehelix from './src/generator/cubehelix.js';\nimport mix from './src/generator/mix.js';\nimport random from './src/generator/random.js';\nimport scale from './src/generator/scale.js';\n\n// other utility methods\nimport { analyze } from './src/utils/analyze.js';\nimport contrast from './src/utils/contrast.js';\nimport contrastAPCA from './src/utils/contrastAPCA.js';\nimport deltaE from './src/utils/delta-e.js';\nimport distance from './src/utils/distance.js';\nimport { limits } from './src/utils/analyze.js';\nimport valid from './src/utils/valid.js';\nimport input from './src/io/input.js';\n\n// scale\nimport scales from './src/utils/scales.js';\n\n// colors\nimport colors from './src/colors/w3cx11.js';\nimport brewer from './src/colors/colorbrewer.js';\nimport Color from './src/Color.js';\n\nObject.assign(chroma, {\n analyze,\n average,\n bezier,\n blend,\n brewer,\n Color,\n colors,\n contrast,\n contrastAPCA,\n cubehelix,\n deltaE,\n distance,\n input,\n interpolate: mix,\n limits,\n mix,\n random,\n scale,\n scales,\n valid\n});\n\nexport default chroma;\n\nexport {\n analyze,\n average,\n bezier,\n blend,\n brewer,\n Color,\n colors,\n contrast,\n contrastAPCA,\n cubehelix,\n deltaE,\n distance,\n input,\n limits,\n mix,\n mix as interpolate,\n random,\n scale,\n scales,\n valid\n};\n\nexport * from './src/io/cmyk/index.js';\nexport * from './src/io/css/index.js';\nexport * from './src/io/gl/index.js';\nexport * from './src/io/hcg/index.js';\nexport * from './src/io/hex/index.js';\nexport * from './src/io/hsi/index.js';\nexport * from './src/io/hsl/index.js';\nexport * from './src/io/hsv/index.js';\nexport * from './src/io/lab/index.js';\nexport * from './src/io/lch/index.js';\nexport * from './src/io/num/index.js';\nexport * from './src/io/rgb/index.js';\nexport * from './src/io/temp/index.js';\nexport * from './src/io/oklab/index.js';\nexport * from './src/io/oklch/index.js';\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\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 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\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", "// \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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["METADATA_MAP", "DEBUG", "isFirefox", "BROWSER_MAX_HEIGHT", "AVG", "TOTAL", "START", "get_draw_fps", "now", "elapsed", "avg", "real_fps", "virtual_fps", "num_frames", "log_perf", "x", "html", "strings", "args", "str", "i", "a", "invertPromise", "_resolve", "promise", "resolve", "TAGS", "flush_tag", "tag", "throttle_tag", "f", "l", "container_default", "sub_cell_offsets_default", "RegularVirtualTableViewModel", "slot", "style", "virtual_panel", "table_clip", "nrows", "num_columns", "start_row", "end_row", "start_col", "end_col", "height", "row_height", "header_levels", "total_scroll_height", "percent_scroll", "clip_panel_row_height", "scroll_index_offset", "offset_width", "diff", "new_val", "vis_cols", "width", "w", "max_scroll_column", "invalid_column", "invalid_row", "cidx", "virtual_width", "viewport_width", "y", "invalid", "panel_width", "header_height", "virtual_panel_px_size", "options", "internal_draw", "viewport", "y_offset", "x_offset", "__debug_start_time__", "invalid_viewport", "preserve_width", "num_rows", "num_row_headers", "num_column_headers", "autosize_cells", "needs_sub_cell_update", "last_cells", "callbacks", "callback", "IOS_DISABLE_OVERSCROLL", "RegularViewEventModel", "event", "clientWidth", "clientHeight", "scrollTop", "scrollLeft", "total_scroll_width", "element", "is_resize", "metadata", "row", "td", "_virtual_x", "size_key", "start", "header_x", "header_element", "move", "up", "override_width", "should_redraw", "th", "virtual_x", "auto_width", "ElemFactory", "name", "elem", "ViewModel", "column_sizes", "container", "table", "ridx", "tr", "row_container", "new_td", "idx", "RegularHeaderViewModel", "offset_cache", "d", "column", "span", "resizeSpan", "column_name", "alias", "parts", "colspan", "x0", "column_header_merge_depth", "merge_headers", "output", "group_meta", "RegularBodyViewModel", "tagName", "val", "ridx_offset", "container_height", "column_state", "view_state", "column_data", "row_headers", "column_data_listener_metadata", "tds", "cidx_offset", "id", "obj", "row_header", "prev_row", "prev_row_metadata", "prev_col", "prev_col_metadata", "RegularTableViewModel", "thead", "tbody", "override_row_height", "cell", "box", "is_override", "container_size", "view_cache", "selected_id", "container_width", "view", "config", "data", "column_headers", "data_listener_metadata", "merge_row_headers", "merge_column_headers", "x1", "y1", "max", "sub_cell_offset", "cont_body", "first_col", "cont_heads", "header", "total", "hmetadata", "dcidx", "num_visible_columns", "missing_cidx", "end_col_offset", "size_extension", "estimate", "new_col_req", "new_col", "cont_head", "last_measured_col_width", "VIRTUAL_MODES", "RegularTableElement", "styleListener", "isSubscribed", "index", "start_len", "viewport_row_height", "row_height_offset", "real_row_height", "scroll_left", "dataListener", "virtual_mode", "preserve_state", "virtual_mode_changed", "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", "min", "max", "limit_default", "x", "low", "high", "clip_rgb_default", "rgb", "i", "limit_default", "classToType", "name", "type_default", "obj", "unpack_default", "args", "keyOrder", "type_default", "k", "last_default", "args", "l", "type_default", "PI", "min", "max", "rnd2", "a", "rnd3", "TWOPI", "PITHIRD", "DEG2RAD", "RAD2DEG", "reverse3", "arr", "input_default", "Color", "args", "me", "type_default", "mode", "last_default", "autodetect", "input_default", "a", "b", "chk", "rgb", "clip_rgb_default", "Color_default", "version", "chroma", "args", "Color_default", "version", "chroma_default", "w3cx11", "w3cx11_default", "RE_HEX", "RE_HEXA", "hex2rgb", "hex", "u", "r", "g", "b", "a", "hex2rgb_default", "round", "rgb2hex", "args", "r", "g", "b", "a", "unpack_default", "mode", "last_default", "str", "hxa", "rgb2hex_default", "Color_default", "hex", "rgb2hex_default", "n", "w3cx11_default", "input_default", "name", "hex2rgb_default", "h", "rest", "type_default", "Color_default", "a", "mutate", "type_default", "Color_default", "labConstants", "lab_constants_default", "ILLUMINANTS", "setLabWhitePoint", "name", "ill", "getLabWhitePoint", "lab2rgb", "args", "unpack_default", "L", "a", "b", "x", "y", "z", "lab2xyz", "r", "g", "b_", "xyz2rgb", "kE", "kK", "kKE", "Xn", "Yn", "Zn", "lab_constants_default", "fy", "fx", "fz", "fx3", "fz3", "xr", "yr", "zr", "compand", "linear", "sign", "MtxAdaptMa", "MtxAdaptMaI", "MtxXYZ2RGB", "RefWhiteRGB", "As", "Bs", "Cs", "Ad", "Bd", "Cd", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "lab2rgb_default", "rgb2lab", "args", "r", "g", "b", "rest", "unpack_default", "x", "y", "z", "rgb2xyz", "L", "a", "b_", "xyz2lab", "Xn", "Yn", "Zn", "kE", "kK", "lab_constants_default", "xr", "yr", "zr", "fx", "fy", "fz", "gammaAdjustSRGB", "companded", "sign", "MtxRGB2XYZ", "MtxAdaptMa", "MtxAdaptMaI", "As", "Bs", "Cs", "Ad", "Bd", "Cd", "X", "Y", "Z", "rgb2lab_default", "Color_default", "rgb2lab_default", "lab", "args", "chroma_default", "getLabWhitePoint", "setLabWhitePoint", "input_default", "lab2rgb_default", "unpack_default", "type_default", "Color_default", "amount", "me", "lab", "lab_constants_default", "Color_default", "mc", "mode", "channel", "src", "i", "pow", "EPS", "MAX_ITER", "Color_default", "lum", "mode", "type_default", "cur_lum", "max_iter", "test", "low", "high", "mid", "lm", "rgb", "rgb2luminance", "r", "g", "b", "luminance_x", "x", "interpolator_default", "mix_default", "col1", "col2", "f", "rest", "mode", "interpolator_default", "type_default", "Color_default", "Color_default", "col2", "f", "rest", "mix_default", "Color_default", "mutate", "rgb", "a", "sin", "cos", "lch2lab", "args", "l", "c", "h", "unpack_default", "DEG2RAD", "lch2lab_default", "lch2rgb", "args", "unpack_default", "l", "c", "h", "L", "a", "b_", "lch2lab_default", "r", "g", "b", "lab2rgb_default", "lch2rgb_default", "hcl2rgb", "args", "hcl", "reverse3", "unpack_default", "lch2rgb_default", "hcl2rgb_default", "sqrt", "atan2", "round", "lab2lch", "args", "l", "a", "b", "unpack_default", "c", "h", "RAD2DEG", "lab2lch_default", "rgb2lch", "args", "r", "g", "b", "rest", "unpack_default", "a", "b_", "rgb2lab_default", "L", "h", "lab2lch_default", "rgb2lch_default", "Color_default", "rgb2lch_default", "reverse3", "lch", "args", "hcl", "chroma_default", "input_default", "lch2rgb_default", "hcl2rgb_default", "m", "unpack_default", "type_default", "Color_default", "amount", "me", "lch", "lab_constants_default", "Color_default", "mc", "value", "mutate", "mode", "channel", "src", "type_default", "out", "Color_default", "f", "rest", "mix_default", "rgb", "col1", "col2", "f", "xyz0", "xyz1", "Color_default", "interpolator_default", "sqrt", "pow", "lrgb", "col1", "col2", "f", "x1", "y1", "z1", "x2", "y2", "z2", "Color_default", "interpolator_default", "lab", "col1", "col2", "f", "xyz0", "xyz1", "Color_default", "interpolator_default", "hsx_default", "col1", "col2", "f", "m", "xyz0", "xyz1", "hue0", "hue1", "sat0", "sat1", "lbv0", "lbv1", "sat", "hue", "lbv", "dh", "Color_default", "lch", "col1", "col2", "f", "hsx_default", "interpolator_default", "num2rgb", "num", "type_default", "r", "g", "b", "num2rgb_default", "rgb2num", "args", "r", "g", "b", "unpack_default", "rgb2num_default", "Color_default", "rgb2num_default", "num", "args", "chroma_default", "input_default", "num2rgb_default", "type_default", "num", "col1", "col2", "f", "c1", "c2", "Color_default", "interpolator_default", "floor", "hcg2rgb", "args", "unpack_default", "h", "c", "_g", "g", "b", "_c", "i", "f", "p", "q", "t", "v", "hcg2rgb_default", "rgb2hcg", "args", "r", "g", "b", "unpack_default", "minRgb", "min", "maxRgb", "max", "delta", "c", "_g", "h", "rgb2hcg_default", "Color_default", "rgb2hcg_default", "hcg", "args", "chroma_default", "input_default", "hcg2rgb_default", "unpack_default", "type_default", "hcg", "col1", "col2", "f", "hsx_default", "interpolator_default", "cos", "hsi2rgb", "args", "unpack_default", "h", "s", "i", "g", "b", "TWOPI", "PITHIRD", "limit_default", "hsi2rgb_default", "min", "sqrt", "acos", "rgb2hsi", "args", "r", "g", "b", "unpack_default", "h", "min_", "s", "TWOPI", "rgb2hsi_default", "Color_default", "rgb2hsi_default", "hsi", "args", "chroma_default", "input_default", "hsi2rgb_default", "unpack_default", "type_default", "hsi", "col1", "col2", "f", "hsx_default", "interpolator_default", "hsl2rgb", "args", "unpack_default", "h", "s", "l", "g", "b", "t3", "c", "t2", "t1", "h_", "i", "hsl2rgb_default", "rgb2hsl", "args", "unpack_default", "r", "g", "b", "minRgb", "min", "maxRgb", "max", "l", "s", "h", "rgb2hsl_default", "Color_default", "rgb2hsl_default", "hsl", "args", "chroma_default", "input_default", "hsl2rgb_default", "unpack_default", "type_default", "hsl", "col1", "col2", "f", "hsx_default", "interpolator_default", "floor", "hsv2rgb", "args", "unpack_default", "h", "s", "v", "g", "b", "i", "f", "p", "q", "t", "hsv2rgb_default", "min", "max", "rgb2hsl", "args", "unpack_default", "r", "g", "b", "min_", "max_", "delta", "h", "s", "v", "rgb2hsv_default", "Color_default", "rgb2hsv_default", "hsv", "args", "chroma_default", "input_default", "hsv2rgb_default", "unpack_default", "type_default", "hsv", "col1", "col2", "f", "hsx_default", "interpolator_default", "multiplyMatrices", "A", "B", "m", "x", "p", "B_cols", "_", "i", "product", "row", "col", "oklab2rgb", "args", "unpack_default", "L", "a", "b", "rest", "X", "Y", "Z", "OKLab_to_XYZ", "r", "g", "b_", "xyz2rgb", "OKLab", "LMStoXYZ", "OKLabtoLMS", "LMSnl", "multiplyMatrices", "c", "oklab2rgb_default", "rgb2oklab", "args", "r", "g", "b", "rest", "unpack_default", "xyz", "rgb2xyz", "XYZ_to_OKLab", "XYZ", "XYZtoLMS", "LMStoOKLab", "LMS", "multiplyMatrices", "c", "rgb2oklab_default", "Color_default", "rgb2oklab_default", "oklab", "args", "chroma_default", "input_default", "oklab2rgb_default", "unpack_default", "type_default", "oklab", "col1", "col2", "f", "xyz0", "xyz1", "Color_default", "interpolator_default", "oklch", "col1", "col2", "f", "hsx_default", "interpolator_default", "pow", "sqrt", "PI", "cos", "sin", "atan2", "average_default", "colors", "mode", "weights", "l", "k", "a", "b", "w", "i", "c", "Color_default", "_average_lrgb", "first", "xyz", "cnt", "dx", "dy", "A", "alpha", "ci", "xyz2", "col", "f", "rgb", "clip_rgb_default", "pow", "scale_default", "colors", "_mode", "_nacol", "chroma_default", "_spread", "_domain", "_pos", "_padding", "_classes", "_colors", "_out", "_min", "_max", "_correctLightness", "_colorCache", "_useCache", "_gamma", "setColors", "type_default", "c", "resetCache", "getClass", "value", "n", "i", "tMapLightness", "t", "tMapDomain", "getColor", "val", "bypassMap", "col", "limit_default", "k", "p", "f", "v", "classes", "d", "domain", "tOut", "tBreaks", "_m", "_o", "L0", "L1", "pol", "L_actual", "L_ideal", "L_diff", "t0", "t1", "max_iter", "numColors", "out", "result", "dm", "dd", "__range__", "samples", "end", "asc", "g", "left", "right", "inclusive", "range", "ascending", "binom_row", "n", "row", "i", "newrow", "j", "bezier", "colors", "I", "lab0", "lab1", "lab2", "c", "Color_default", "t", "lab", "lab3", "labs", "u", "sum", "el", "bezier_default", "f", "scale_default", "round", "Color_default", "rnd", "v", "i", "rgb", "args", "chroma_default", "input_default", "rgba", "unpack_default", "type_default", "blend", "bottom", "top", "mode", "blend_f", "f", "c0", "chroma_default", "c1", "each", "out", "normal", "a", "multiply", "b", "darken", "lighten", "screen", "overlay", "burn", "dodge", "blend_default", "pow", "sin", "cos", "cubehelix_default", "start", "rotations", "hue", "gamma", "lightness", "dh", "dl", "type_default", "f", "fract", "a", "TWOPI", "l", "amp", "cos_a", "sin_a", "r", "g", "b", "chroma_default", "clip_rgb_default", "s", "h", "digits", "floor", "random", "random_default", "code", "i", "Color_default", "log", "pow", "floor", "abs", "analyze", "data", "key", "r", "type_default", "val", "mode", "num", "limits", "min", "max", "values", "a", "b", "i", "min_log", "max_log", "p", "pb", "pr", "cluster", "n", "assignments", "clusterSizes", "repeat", "nb_iters", "centroids", "j", "value", "mindist", "best", "dist", "newCentroids", "kClusters", "tmpKMeansBreaks", "v", "contrast_default", "a", "b", "Color_default", "l1", "l2", "W_offset", "P_in", "P_out", "R_scale", "B_threshold", "B_exp", "contrastAPCA_default", "text", "bg", "Color_default", "mix_default", "l_text", "lum", "l_bg", "Y_text", "Y_bg", "S_norm", "S_rev", "C", "r", "g", "b", "sqrt", "pow", "min", "max", "atan2", "abs", "cos", "sin", "exp", "PI", "delta_e_default", "a", "b", "Kl", "Kc", "Kh", "rad2deg", "rad", "deg2rad", "deg", "Color_default", "L1", "a1", "b1", "L2", "a2", "b2", "avgL", "C1", "C2", "avgC", "G", "a1p", "a2p", "C1p", "C2p", "avgCp", "arctan1", "arctan2", "h1p", "h2p", "avgHp", "T", "deltaHp", "deltaL", "deltaCp", "sl", "sc", "sh", "deltaTheta", "Rt", "result", "distance_default", "a", "b", "mode", "Color_default", "l1", "l2", "sum_sq", "d", "valid_default", "args", "Color_default", "scales_default", "scale_default", "chroma_default", "colorbrewer", "colorbrewerTypes", "typeMap", "key", "colorbrewerProxy", "target", "prop", "lower", "colorbrewer_default", "cmyk2rgb", "args", "unpack_default", "c", "m", "y", "k", "alpha", "cmyk2rgb_default", "max", "rgb2cmyk", "args", "r", "g", "b", "unpack_default", "k", "f", "c", "m", "y", "rgb2cmyk_default", "Color_default", "rgb2cmyk_default", "cmyk", "args", "chroma_default", "input_default", "cmyk2rgb_default", "unpack_default", "type_default", "hsl2css", "args", "hsla", "unpack_default", "mode", "last_default", "rnd2", "hsl2css_default", "lab2css", "args", "laba", "unpack_default", "mode", "last_default", "rnd2", "lab2css_default", "lch2css", "args", "lcha", "unpack_default", "mode", "last_default", "rnd2", "lch2css_default", "oklab2css", "args", "laba", "unpack_default", "rnd2", "rnd3", "oklab2css_default", "rgb2oklch", "args", "r", "g", "b", "rest", "unpack_default", "a", "b_", "rgb2oklab_default", "L", "h", "lab2lch_default", "rgb2oklch_default", "oklch2css", "args", "lcha", "unpack_default", "rnd2", "rnd3", "oklch2css_default", "round", "rgb2css", "args", "rgba", "unpack_default", "mode", "last_default", "hsl2css_default", "rgb2hsl_default", "prevWhitePoint", "getLabWhitePoint", "setLabWhitePoint", "cssColor", "lab2css_default", "rgb2lab_default", "lch2css_default", "rgb2lch_default", "oklab2css_default", "rgb2oklab_default", "oklch2css_default", "rgb2oklch_default", "rgb2css_default", "oklch2rgb", "args", "unpack_default", "l", "c", "h", "rest", "L", "a", "b_", "lch2lab_default", "r", "g", "b", "oklab2rgb_default", "oklch2rgb_default", "INT_OR_PCT", "FLOAT_OR_PCT", "PCT", "RE_S", "SEP", "COMMA", "ANLGE", "ALPHA", "RE_RGB", "RE_RGB_LEGACY", "RE_RGBA_LEGACY", "RE_HSL", "RE_HSL_LEGACY", "RE_HSLA_LEGACY", "RE_LAB", "RE_LCH", "RE_OKLAB", "RE_OKLCH", "round", "roundRGB", "rgb", "v", "i", "limit_default", "percentToAbsolute", "pct", "min", "max", "signed", "noneToValue", "noneValue", "css2rgb", "css", "m", "input_default", "alpha", "hsl", "hsl2rgb_default", "lab", "wp", "getLabWhitePoint", "setLabWhitePoint", "lab2rgb_default", "lch", "lch2rgb_default", "oklab", "oklab2rgb_default", "oklch", "oklch2rgb_default", "s", "css2rgb_default", "Color_default", "mode", "rgb2css_default", "css", "args", "chroma_default", "input_default", "css2rgb_default", "h", "rest", "type_default", "input_default", "args", "rgb", "unpack_default", "gl", "Color_default", "chroma_default", "Color_default", "mode", "rgb2hex_default", "hex", "args", "chroma_default", "input_default", "hex2rgb_default", "h", "rest", "type_default", "log", "temperature2rgb", "kelvin", "temp", "r", "g", "b", "temperature2rgb_default", "round", "rgb2temperature", "args", "rgb", "unpack_default", "r", "b", "minTemp", "maxTemp", "eps", "temp", "temperature2rgb_default", "rgb2temperature_default", "Color_default", "rgb2temperature_default", "temp", "args", "chroma_default", "input_default", "temperature2rgb_default", "Color_default", "rgb2oklch_default", "oklch", "args", "chroma_default", "input_default", "oklch2rgb_default", "unpack_default", "type_default", "chroma_default", "analyze", "average_default", "bezier_default", "blend_default", "colorbrewer_default", "Color_default", "w3cx11_default", "contrast_default", "contrastAPCA_default", "cubehelix_default", "delta_e_default", "distance_default", "input_default", "mix_default", "limits", "random_default", "scale_default", "scales_default", "valid_default", "chroma_js_default", "blend", "a", "b", "chroma_js_default", "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", "b", "_gradhex", "a", "source", "foreground", "infer_foreground_from_background", "rgbaToRgb", "style_cell_flash", "gradhex", "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", "s", "l", "chroma_js_default", "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", "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_js_default", "_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"]
|
|
7
|
+
}
|