@d3p1/img2pxl 3.0.0 → 3.1.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/dist/core/index.js +2 -6237
- package/dist/core/index.js.map +1 -1
- package/dist/main-CjtNvjba.js +6240 -0
- package/dist/main-CjtNvjba.js.map +1 -0
- package/dist/react/components/Img2Pxl.d.ts +2 -0
- package/dist/react/hooks/useImg2Pxl.d.ts +2 -0
- package/dist/react/index.d.ts +3 -1
- package/dist/react/index.js +276 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/types/index.d.ts +5 -0
- package/package.json +10 -2
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../node_modules/three/examples/jsm/misc/Timer.js","../../src/core/services/renderer-manager.ts","../../node_modules/@tweakpane/core/dist/misc/type-util.js","../../node_modules/@tweakpane/core/dist/common/binding/binding.js","../../node_modules/@tweakpane/core/dist/common/tp-error.js","../../node_modules/@tweakpane/core/dist/common/binding/target.js","../../node_modules/@tweakpane/core/dist/common/model/emitter.js","../../node_modules/@tweakpane/core/dist/common/model/complex-value.js","../../node_modules/@tweakpane/core/dist/common/model/primitive-value.js","../../node_modules/@tweakpane/core/dist/common/model/readonly-primitive-value.js","../../node_modules/@tweakpane/core/dist/common/model/values.js","../../node_modules/@tweakpane/core/dist/common/model/value-map.js","../../node_modules/@tweakpane/core/dist/common/constraint/definite-range.js","../../node_modules/@tweakpane/core/dist/common/constraint/range.js","../../node_modules/@tweakpane/core/dist/common/constraint/step.js","../../node_modules/@tweakpane/core/dist/common/converter/ecma/nodes.js","../../node_modules/@tweakpane/core/dist/common/converter/ecma/reader.js","../../node_modules/@tweakpane/core/dist/common/converter/ecma/parser.js","../../node_modules/@tweakpane/core/dist/common/converter/number.js","../../node_modules/@tweakpane/core/dist/common/number/util.js","../../node_modules/@tweakpane/core/dist/common/point-nd/point-axis.js","../../node_modules/@tweakpane/core/dist/blade/common/api/blade.js","../../node_modules/@tweakpane/core/dist/blade/common/api/tp-event.js","../../node_modules/@tweakpane/core/dist/blade/binding/api/binding.js","../../node_modules/@tweakpane/core/dist/common/micro-parsers.js","../../node_modules/@tweakpane/core/dist/blade/common/controller/blade-state.js","../../node_modules/@tweakpane/core/dist/blade/common/controller/value-blade.js","../../node_modules/@tweakpane/core/dist/common/binding/value/binding.js","../../node_modules/@tweakpane/core/dist/common/dom-util.js","../../node_modules/@tweakpane/core/dist/common/model/reactive.js","../../node_modules/@tweakpane/core/dist/common/view/class-name.js","../../node_modules/@tweakpane/core/dist/common/label/view/label.js","../../node_modules/@tweakpane/core/dist/common/label/controller/label.js","../../node_modules/@tweakpane/core/dist/blade/common/model/blade-positions.js","../../node_modules/@tweakpane/core/dist/blade/common/controller/blade.js","../../node_modules/@tweakpane/core/dist/blade/button/api/button.js","../../node_modules/@tweakpane/core/dist/common/view/reactive.js","../../node_modules/@tweakpane/core/dist/blade/button/view/button.js","../../node_modules/@tweakpane/core/dist/blade/button/controller/button.js","../../node_modules/@tweakpane/core/dist/blade/button/controller/button-blade.js","../../node_modules/@tweakpane/core/dist/misc/semver.js","../../node_modules/@tweakpane/core/dist/version.js","../../node_modules/@tweakpane/core/dist/plugin/plugin.js","../../node_modules/@tweakpane/core/dist/blade/button/plugin.js","../../node_modules/@tweakpane/core/dist/blade/common/api/container.js","../../node_modules/@tweakpane/core/dist/blade/common/api/refreshable.js","../../node_modules/@tweakpane/core/dist/blade/common/api/rack.js","../../node_modules/@tweakpane/core/dist/blade/common/api/container-blade.js","../../node_modules/@tweakpane/core/dist/blade/common/controller/container-blade.js","../../node_modules/@tweakpane/core/dist/blade/common/model/nested-ordered-set.js","../../node_modules/@tweakpane/core/dist/blade/common/model/rack.js","../../node_modules/@tweakpane/core/dist/blade/common/controller/rack.js","../../node_modules/@tweakpane/core/dist/blade/common/model/blade.js","../../node_modules/@tweakpane/core/dist/blade/common/model/foldable.js","../../node_modules/@tweakpane/core/dist/blade/folder/api/folder.js","../../node_modules/@tweakpane/core/dist/blade/common/view/blade-container.js","../../node_modules/@tweakpane/core/dist/blade/folder/view/folder.js","../../node_modules/@tweakpane/core/dist/blade/folder/controller/folder.js","../../node_modules/@tweakpane/core/dist/blade/folder/plugin.js","../../node_modules/@tweakpane/core/dist/common/model/view-props.js","../../node_modules/@tweakpane/core/dist/blade/tab/view/tab-page.js","../../node_modules/@tweakpane/core/dist/blade/tab/view/tab-item.js","../../node_modules/@tweakpane/core/dist/blade/tab/controller/tab-item.js","../../node_modules/@tweakpane/core/dist/blade/tab/controller/tab-page.js","../../node_modules/@tweakpane/core/dist/blade/tab/api/tab.js","../../node_modules/@tweakpane/core/dist/blade/tab/api/tab-page.js","../../node_modules/@tweakpane/core/dist/blade/tab/model/tab.js","../../node_modules/@tweakpane/core/dist/blade/tab/view/tab.js","../../node_modules/@tweakpane/core/dist/blade/tab/controller/tab.js","../../node_modules/@tweakpane/core/dist/blade/tab/plugin.js","../../node_modules/@tweakpane/core/dist/common/api/list.js","../../node_modules/@tweakpane/core/dist/common/constraint/composite.js","../../node_modules/@tweakpane/core/dist/common/constraint/list.js","../../node_modules/@tweakpane/core/dist/common/list-util.js","../../node_modules/@tweakpane/core/dist/common/view/list.js","../../node_modules/@tweakpane/core/dist/common/controller/list.js","../../node_modules/@tweakpane/core/dist/common/view/popup.js","../../node_modules/@tweakpane/core/dist/common/controller/popup.js","../../node_modules/@tweakpane/core/dist/common/view/text.js","../../node_modules/@tweakpane/core/dist/common/controller/text.js","../../node_modules/@tweakpane/core/dist/common/converter/boolean.js","../../node_modules/@tweakpane/core/dist/common/converter/parser.js","../../node_modules/@tweakpane/core/dist/common/converter/percentage.js","../../node_modules/@tweakpane/core/dist/common/converter/string.js","../../node_modules/@tweakpane/core/dist/common/model/value-sync.js","../../node_modules/@tweakpane/core/dist/common/ui.js","../../node_modules/@tweakpane/core/dist/common/view/pointer-handler.js","../../node_modules/@tweakpane/core/dist/common/number/view/number-text.js","../../node_modules/@tweakpane/core/dist/common/number/controller/number-text.js","../../node_modules/@tweakpane/core/dist/common/number/view/slider.js","../../node_modules/@tweakpane/core/dist/common/number/controller/slider.js","../../node_modules/@tweakpane/core/dist/common/number/view/slider-text.js","../../node_modules/@tweakpane/core/dist/common/number/controller/slider-text.js","../../node_modules/@tweakpane/core/dist/common/view/css-vars.js","../../node_modules/@tweakpane/core/dist/common/point-nd/util.js","../../node_modules/@tweakpane/core/dist/common/picker-util.js","../../node_modules/@tweakpane/core/dist/common/primitive.js","../../node_modules/@tweakpane/core/dist/input-binding/boolean/view/checkbox.js","../../node_modules/@tweakpane/core/dist/input-binding/boolean/controller/checkbox.js","../../node_modules/@tweakpane/core/dist/input-binding/boolean/plugin.js","../../node_modules/@tweakpane/core/dist/input-binding/color/view/color.js","../../node_modules/@tweakpane/core/dist/input-binding/color/model/color-model.js","../../node_modules/@tweakpane/core/dist/input-binding/color/model/int-color.js","../../node_modules/@tweakpane/core/dist/input-binding/color/view/color-picker.js","../../node_modules/@tweakpane/core/dist/input-binding/color/util.js","../../node_modules/@tweakpane/core/dist/input-binding/color/model/float-color.js","../../node_modules/@tweakpane/core/dist/input-binding/color/model/colors.js","../../node_modules/@tweakpane/core/dist/input-binding/color/converter/color-string.js","../../node_modules/@tweakpane/core/dist/input-binding/color/view/a-palette.js","../../node_modules/@tweakpane/core/dist/input-binding/color/controller/a-palette.js","../../node_modules/@tweakpane/core/dist/input-binding/color/view/color-texts.js","../../node_modules/@tweakpane/core/dist/input-binding/color/controller/color-texts.js","../../node_modules/@tweakpane/core/dist/input-binding/color/view/h-palette.js","../../node_modules/@tweakpane/core/dist/input-binding/color/controller/h-palette.js","../../node_modules/@tweakpane/core/dist/input-binding/color/view/sv-palette.js","../../node_modules/@tweakpane/core/dist/input-binding/color/controller/sv-palette.js","../../node_modules/@tweakpane/core/dist/input-binding/color/controller/color-picker.js","../../node_modules/@tweakpane/core/dist/input-binding/color/view/color-swatch.js","../../node_modules/@tweakpane/core/dist/input-binding/color/controller/color-swatch.js","../../node_modules/@tweakpane/core/dist/input-binding/color/controller/color.js","../../node_modules/@tweakpane/core/dist/input-binding/color/converter/color-number.js","../../node_modules/@tweakpane/core/dist/input-binding/color/model/color.js","../../node_modules/@tweakpane/core/dist/input-binding/color/converter/writer.js","../../node_modules/@tweakpane/core/dist/input-binding/color/plugin-number.js","../../node_modules/@tweakpane/core/dist/input-binding/color/converter/color-object.js","../../node_modules/@tweakpane/core/dist/input-binding/color/plugin-object.js","../../node_modules/@tweakpane/core/dist/input-binding/color/plugin-string.js","../../node_modules/@tweakpane/core/dist/input-binding/common/constraint/point-nd.js","../../node_modules/@tweakpane/core/dist/input-binding/common/view/point-nd-text.js","../../node_modules/@tweakpane/core/dist/input-binding/common/controller/point-nd-text.js","../../node_modules/@tweakpane/core/dist/input-binding/number/api/slider.js","../../node_modules/@tweakpane/core/dist/input-binding/number/plugin.js","../../node_modules/@tweakpane/core/dist/input-binding/point-2d/model/point-2d.js","../../node_modules/@tweakpane/core/dist/input-binding/point-2d/view/point-2d.js","../../node_modules/@tweakpane/core/dist/input-binding/point-2d/view/point-2d-picker.js","../../node_modules/@tweakpane/core/dist/input-binding/point-2d/controller/point-2d-picker.js","../../node_modules/@tweakpane/core/dist/input-binding/point-2d/controller/point-2d.js","../../node_modules/@tweakpane/core/dist/input-binding/point-2d/converter/point-2d.js","../../node_modules/@tweakpane/core/dist/input-binding/point-2d/plugin.js","../../node_modules/@tweakpane/core/dist/input-binding/point-3d/model/point-3d.js","../../node_modules/@tweakpane/core/dist/input-binding/point-3d/converter/point-3d.js","../../node_modules/@tweakpane/core/dist/input-binding/point-3d/plugin.js","../../node_modules/@tweakpane/core/dist/input-binding/point-4d/model/point-4d.js","../../node_modules/@tweakpane/core/dist/input-binding/point-4d/converter/point-4d.js","../../node_modules/@tweakpane/core/dist/input-binding/point-4d/plugin.js","../../node_modules/@tweakpane/core/dist/input-binding/string/plugin.js","../../node_modules/@tweakpane/core/dist/misc/constants.js","../../node_modules/@tweakpane/core/dist/monitor-binding/common/view/multi-log.js","../../node_modules/@tweakpane/core/dist/monitor-binding/common/controller/multi-log.js","../../node_modules/@tweakpane/core/dist/monitor-binding/common/view/single-log.js","../../node_modules/@tweakpane/core/dist/monitor-binding/common/controller/single-log.js","../../node_modules/@tweakpane/core/dist/monitor-binding/boolean/plugin.js","../../node_modules/@tweakpane/core/dist/monitor-binding/number/api/graph-log.js","../../node_modules/@tweakpane/core/dist/monitor-binding/number/view/graph-log.js","../../node_modules/@tweakpane/core/dist/monitor-binding/number/controller/graph-log.js","../../node_modules/@tweakpane/core/dist/monitor-binding/number/plugin.js","../../node_modules/@tweakpane/core/dist/monitor-binding/string/plugin.js","../../src/core/services/debug-manager/copy/settings.ts","../../src/core/services/debug-manager.ts","../../src/core/app/main/runner/image/shader/vertex.glsl","../../src/core/app/main/runner/image/shader/fragment.glsl","../../src/core/app/main/runner/image.ts","../../src/core/app/main/runner/pointer/canvas.ts","../../src/core/app/main/runner/pointer.ts","../../src/core/app/main/runner/shader/pars_vertex.glsl","../../src/core/app/main/runner/shader/position_vertex.glsl","../../src/core/app/main/runner.ts","../../src/core/media/processor/displacement/pointer.png","../../src/core/media/processor/displacement/noise.png","../../src/core/services/image-manager.ts","../../src/core/app/main.ts"],"sourcesContent":["class Timer {\n\n\tconstructor() {\n\n\t\tthis._previousTime = 0;\n\t\tthis._currentTime = 0;\n\t\tthis._startTime = now();\n\n\t\tthis._delta = 0;\n\t\tthis._elapsed = 0;\n\n\t\tthis._timescale = 1;\n\n\t\t// use Page Visibility API to avoid large time delta values\n\n\t\tthis._usePageVisibilityAPI = ( typeof document !== 'undefined' && document.hidden !== undefined );\n\n\t\tif ( this._usePageVisibilityAPI === true ) {\n\n\t\t\tthis._pageVisibilityHandler = handleVisibilityChange.bind( this );\n\n\t\t\tdocument.addEventListener( 'visibilitychange', this._pageVisibilityHandler, false );\n\n\t\t}\n\n\t}\n\n\tgetDelta() {\n\n\t\treturn this._delta / 1000;\n\n\t}\n\n\tgetElapsed() {\n\n\t\treturn this._elapsed / 1000;\n\n\t}\n\n\tgetTimescale() {\n\n\t\treturn this._timescale;\n\n\t}\n\n\tsetTimescale( timescale ) {\n\n\t\tthis._timescale = timescale;\n\n\t\treturn this;\n\n\t}\n\n\treset() {\n\n\t\tthis._currentTime = now() - this._startTime;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this._usePageVisibilityAPI === true ) {\n\n\t\t\tdocument.removeEventListener( 'visibilitychange', this._pageVisibilityHandler );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( timestamp ) {\n\n\n\t\tif ( this._usePageVisibilityAPI === true && document.hidden === true ) {\n\n\t\t\tthis._delta = 0;\n\n\t\t} else {\n\n\t\t\tthis._previousTime = this._currentTime;\n\t\t\tthis._currentTime = ( timestamp !== undefined ? timestamp : now() ) - this._startTime;\n\n\t\t\tthis._delta = ( this._currentTime - this._previousTime ) * this._timescale;\n\t\t\tthis._elapsed += this._delta; // _elapsed is the accumulation of all previous deltas\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass FixedTimer extends Timer {\n\n\tconstructor( fps = 60 ) {\n\n\t\tsuper();\n\t\tthis._delta = ( 1 / fps ) * 1000;\n\n\t}\n\n\tupdate() {\n\n\t\tthis._elapsed += ( this._delta * this._timescale ); // _elapsed is the accumulation of all previous deltas\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn performance.now();\n\n}\n\nfunction handleVisibilityChange() {\n\n\tif ( document.hidden === false ) this.reset();\n\n}\n\nexport { Timer, FixedTimer };\n","/**\n * @description Renderer manager\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n * @note The idea behind this class is to encapsulate and wrap the\n * render logic\n */\nimport * as THREE from 'three'\n\nexport default class RendererManager {\n /**\n * @type {THREE.Scene}\n */\n scene: THREE.Scene\n\n /**\n * @type {THREE.WebGLRenderer}\n */\n renderer: THREE.WebGLRenderer\n\n /**\n * @type {THREE.OrthographicCamera}\n * @note It is used an orthographic camera because it is desired\n * to draw a 2d image without perspective\n */\n camera: THREE.OrthographicCamera\n\n /**\n * @type {number}\n */\n width: number\n\n /**\n * @type {number}\n */\n height: number\n\n /**\n * @type {number}\n * @note Device pixel ratio\n */\n dpr: number\n\n /**\n * Constructor\n *\n * @param {number} width\n * @param {number} height\n */\n constructor(width: number, height: number) {\n this.width = width\n this.height = height\n this.#initRenderer()\n this.#initScene()\n this.#initCamera()\n }\n\n /**\n * Update\n *\n * @returns {void}\n */\n update(): void {\n this.renderer.render(this.scene, this.camera)\n }\n\n /**\n * Compile shaders\n *\n * @returns {void}\n * {@link https://github.com/mrdoob/three.js/pull/10960}\n */\n compile(): void {\n this.renderer.compile(this.scene, this.camera)\n }\n\n /**\n * Dispose\n *\n * @returns {void}\n */\n dispose(): void {\n this.#disposeScene()\n this.#disposeRenderer()\n this.renderer.domElement.remove()\n }\n\n /**\n * Init renderer\n *\n * @returns {void}\n * @note The antialias is only enabled for devices with less than `2`\n * as a pixel ratio. This is done to improve performance because\n * devices with `2` or more as pixel ratio\n * do not require this feature\n */\n #initRenderer(): void {\n const canvas = document.createElement('canvas')\n document.body.append(canvas)\n\n this.dpr = Math.min(window.devicePixelRatio, 2)\n\n let antialias = false\n if (this.dpr <= 1) {\n antialias = true\n }\n this.renderer = new THREE.WebGLRenderer({\n canvas: canvas,\n antialias: antialias,\n })\n this.renderer.setPixelRatio(this.dpr)\n this.renderer.setSize(this.width, this.height)\n this.renderer.setClearAlpha(0)\n }\n\n /**\n * Init camera\n *\n * @returns {void}\n * @note The renderer will have the same dimensions as the image.\n * The idea is that a plane with the image as texture will be\n * used inside the renderer, and this plane also will have the\n * image dimensions.\n * An orthographic camera will be positioned to show exactly\n * that plane.\n * Because it is used an orthographic camera,\n * `1` world unit is `1` pixel, making it easy to position things\n * @link https://discourse.threejs.org/t/mapping-orthographiccamera-world-units-to-pixels/10142\n */\n #initCamera(): void {\n const left = -this.renderer.domElement.width / 2\n const right = this.renderer.domElement.width / 2\n const top = this.renderer.domElement.height / 2\n const bottom = -this.renderer.domElement.height / 2\n const near = 0.1\n const far = 1\n this.camera = new THREE.OrthographicCamera(\n left,\n right,\n top,\n bottom,\n near,\n far,\n )\n this.scene.add(this.camera)\n\n this.camera.position.z = far - 0.1\n }\n\n /**\n * Init scene\n *\n * @returns {void}\n */\n #initScene(): void {\n this.scene = new THREE.Scene()\n }\n\n /**\n * Dispose renderer\n *\n * @returns {void}\n */\n #disposeRenderer(): void {\n this.renderer.dispose()\n }\n\n /**\n * Dispose scene\n *\n * @returns {void}\n */\n #disposeScene(): void {\n while (this.scene.children.length > 0) {\n this.scene.remove(this.scene.children[0])\n }\n }\n}\n","export function forceCast(v) {\n return v;\n}\nexport function isEmpty(value) {\n return value === null || value === undefined;\n}\nexport function isObject(value) {\n return value !== null && typeof value === 'object';\n}\nexport function isRecord(value) {\n return value !== null && typeof value === 'object';\n}\nexport function deepEqualsArray(a1, a2) {\n if (a1.length !== a2.length) {\n return false;\n }\n for (let i = 0; i < a1.length; i++) {\n if (a1[i] !== a2[i]) {\n return false;\n }\n }\n return true;\n}\nexport function isPropertyWritable(obj, key) {\n let target = obj;\n do {\n const d = Object.getOwnPropertyDescriptor(target, key);\n if (d && (d.set !== undefined || d.writable === true)) {\n return true;\n }\n target = Object.getPrototypeOf(target);\n } while (target !== null);\n return false;\n}\nexport function deepMerge(r1, r2) {\n const keys = Array.from(new Set([...Object.keys(r1), ...Object.keys(r2)]));\n return keys.reduce((result, key) => {\n const v1 = r1[key];\n const v2 = r2[key];\n return isRecord(v1) && isRecord(v2)\n ? Object.assign(Object.assign({}, result), { [key]: deepMerge(v1, v2) }) : Object.assign(Object.assign({}, result), { [key]: key in r2 ? v2 : v1 });\n }, {});\n}\n","import { isObject } from '../../misc/type-util.js';\nexport function isBinding(value) {\n if (!isObject(value)) {\n return false;\n }\n return 'target' in value;\n}\n","import { forceCast } from '../misc/type-util.js';\nconst CREATE_MESSAGE_MAP = {\n alreadydisposed: () => 'View has been already disposed',\n invalidparams: (context) => `Invalid parameters for '${context.name}'`,\n nomatchingcontroller: (context) => `No matching controller for '${context.key}'`,\n nomatchingview: (context) => `No matching view for '${JSON.stringify(context.params)}'`,\n notbindable: () => `Value is not bindable`,\n notcompatible: (context) => `Not compatible with plugin '${context.id}'`,\n propertynotfound: (context) => `Property '${context.name}' not found`,\n shouldneverhappen: () => 'This error should never happen',\n};\nexport class TpError {\n static alreadyDisposed() {\n return new TpError({ type: 'alreadydisposed' });\n }\n static notBindable() {\n return new TpError({\n type: 'notbindable',\n });\n }\n static notCompatible(bundleId, id) {\n return new TpError({\n type: 'notcompatible',\n context: {\n id: `${bundleId}.${id}`,\n },\n });\n }\n static propertyNotFound(name) {\n return new TpError({\n type: 'propertynotfound',\n context: {\n name: name,\n },\n });\n }\n static shouldNeverHappen() {\n return new TpError({ type: 'shouldneverhappen' });\n }\n constructor(config) {\n var _a;\n this.message =\n (_a = CREATE_MESSAGE_MAP[config.type](forceCast(config.context))) !== null && _a !== void 0 ? _a : 'Unexpected error';\n this.name = this.constructor.name;\n this.stack = new Error(this.message).stack;\n this.type = config.type;\n }\n toString() {\n return this.message;\n }\n}\n","import { TpError } from '../tp-error.js';\n/**\n * A binding target.\n */\nexport class BindingTarget {\n /**\n * @hidden\n */\n constructor(obj, key) {\n this.obj_ = obj;\n this.key = key;\n }\n static isBindable(obj) {\n if (obj === null) {\n return false;\n }\n if (typeof obj !== 'object' && typeof obj !== 'function') {\n return false;\n }\n return true;\n }\n /**\n * Read a bound value.\n * @return A bound value\n */\n read() {\n return this.obj_[this.key];\n }\n /**\n * Write a value.\n * @param value The value to write to the target.\n */\n write(value) {\n this.obj_[this.key] = value;\n }\n /**\n * Write a value to the target property.\n * @param name The property name.\n * @param value The value to write to the target.\n */\n writeProperty(name, value) {\n const valueObj = this.read();\n if (!BindingTarget.isBindable(valueObj)) {\n throw TpError.notBindable();\n }\n if (!(name in valueObj)) {\n throw TpError.propertyNotFound(name);\n }\n valueObj[name] = value;\n }\n}\n","/**\n * A type-safe event emitter.\n * @template E The interface that maps event names and event objects.\n */\nexport class Emitter {\n constructor() {\n this.observers_ = {};\n }\n /**\n * Adds an event listener to the emitter.\n * @param eventName The event name to listen.\n * @param handler The event handler.\n * @param opt_options The options.\n * @param opt_options.key The key that can be used for removing the handler.\n */\n on(eventName, handler, opt_options) {\n var _a;\n let observers = this.observers_[eventName];\n if (!observers) {\n observers = this.observers_[eventName] = [];\n }\n observers.push({\n handler: handler,\n key: (_a = opt_options === null || opt_options === void 0 ? void 0 : opt_options.key) !== null && _a !== void 0 ? _a : handler,\n });\n return this;\n }\n /**\n * Removes an event listener from the emitter.\n * @param eventName The event name.\n * @param key The event handler to remove, or the key for removing the handler.\n */\n off(eventName, key) {\n const observers = this.observers_[eventName];\n if (observers) {\n this.observers_[eventName] = observers.filter((observer) => {\n return observer.key !== key;\n });\n }\n return this;\n }\n emit(eventName, event) {\n const observers = this.observers_[eventName];\n if (!observers) {\n return;\n }\n observers.forEach((observer) => {\n observer.handler(event);\n });\n }\n}\n","import { Emitter } from './emitter.js';\n/**\n * A complex value that has constraint and comparator.\n * @template T the type of the raw value.\n */\nexport class ComplexValue {\n constructor(initialValue, config) {\n var _a;\n this.constraint_ = config === null || config === void 0 ? void 0 : config.constraint;\n this.equals_ = (_a = config === null || config === void 0 ? void 0 : config.equals) !== null && _a !== void 0 ? _a : ((v1, v2) => v1 === v2);\n this.emitter = new Emitter();\n this.rawValue_ = initialValue;\n }\n get constraint() {\n return this.constraint_;\n }\n get rawValue() {\n return this.rawValue_;\n }\n set rawValue(rawValue) {\n this.setRawValue(rawValue, {\n forceEmit: false,\n last: true,\n });\n }\n setRawValue(rawValue, options) {\n const opts = options !== null && options !== void 0 ? options : {\n forceEmit: false,\n last: true,\n };\n const constrainedValue = this.constraint_\n ? this.constraint_.constrain(rawValue)\n : rawValue;\n const prevValue = this.rawValue_;\n const changed = !this.equals_(prevValue, constrainedValue);\n if (!changed && !opts.forceEmit) {\n return;\n }\n this.emitter.emit('beforechange', {\n sender: this,\n });\n this.rawValue_ = constrainedValue;\n this.emitter.emit('change', {\n options: opts,\n previousRawValue: prevValue,\n rawValue: constrainedValue,\n sender: this,\n });\n }\n}\n","import { Emitter } from './emitter.js';\n/**\n * A value that has a primitive raw value.\n * @template T the type of the raw value.\n */\nexport class PrimitiveValue {\n constructor(initialValue) {\n this.emitter = new Emitter();\n this.value_ = initialValue;\n }\n get rawValue() {\n return this.value_;\n }\n set rawValue(value) {\n this.setRawValue(value, {\n forceEmit: false,\n last: true,\n });\n }\n setRawValue(value, options) {\n const opts = options !== null && options !== void 0 ? options : {\n forceEmit: false,\n last: true,\n };\n const prevValue = this.value_;\n if (prevValue === value && !opts.forceEmit) {\n return;\n }\n this.emitter.emit('beforechange', {\n sender: this,\n });\n this.value_ = value;\n this.emitter.emit('change', {\n options: opts,\n previousRawValue: prevValue,\n rawValue: this.value_,\n sender: this,\n });\n }\n}\n","import { Emitter } from './emitter.js';\n/**\n * @hidden\n */\nexport class ReadonlyPrimitiveValue {\n constructor(value) {\n /**\n * The event emitter for value changes.\n */\n this.emitter = new Emitter();\n this.onValueBeforeChange_ = this.onValueBeforeChange_.bind(this);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value_ = value;\n this.value_.emitter.on('beforechange', this.onValueBeforeChange_);\n this.value_.emitter.on('change', this.onValueChange_);\n }\n /**\n * The raw value of the model.\n */\n get rawValue() {\n return this.value_.rawValue;\n }\n onValueBeforeChange_(ev) {\n this.emitter.emit('beforechange', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n onValueChange_(ev) {\n this.emitter.emit('change', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n}\n","import { ComplexValue } from './complex-value.js';\nimport { PrimitiveValue } from './primitive-value.js';\nimport { ReadonlyPrimitiveValue } from './readonly-primitive-value.js';\nexport function createValue(initialValue, config) {\n const constraint = config === null || config === void 0 ? void 0 : config.constraint;\n const equals = config === null || config === void 0 ? void 0 : config.equals;\n if (!constraint && !equals) {\n return new PrimitiveValue(initialValue);\n }\n return new ComplexValue(initialValue, config);\n}\nexport function createReadonlyValue(value) {\n return [\n new ReadonlyPrimitiveValue(value),\n (rawValue, options) => {\n value.setRawValue(rawValue, options);\n },\n ];\n}\n","import { Emitter } from './emitter.js';\nimport { createValue } from './values.js';\nexport class ValueMap {\n /**\n * @hidden\n */\n constructor(valueMap) {\n this.emitter = new Emitter();\n this.valMap_ = valueMap;\n for (const key in this.valMap_) {\n const v = this.valMap_[key];\n v.emitter.on('change', () => {\n this.emitter.emit('change', {\n key: key,\n sender: this,\n });\n });\n }\n }\n static createCore(initialValue) {\n const keys = Object.keys(initialValue);\n return keys.reduce((o, key) => {\n key;\n return Object.assign(o, {\n [key]: createValue(initialValue[key]),\n });\n }, {});\n }\n static fromObject(initialValue) {\n const core = this.createCore(initialValue);\n return new ValueMap(core);\n }\n get(key) {\n return this.valMap_[key].rawValue;\n }\n set(key, value) {\n this.valMap_[key].rawValue = value;\n }\n value(key) {\n return this.valMap_[key];\n }\n}\n","import { ValueMap } from '../model/value-map.js';\n/**\n * A number range constraint that cannot be undefined. Used for slider control.\n */\nexport class DefiniteRangeConstraint {\n constructor(config) {\n this.values = ValueMap.fromObject({\n max: config.max,\n min: config.min,\n });\n }\n constrain(value) {\n const max = this.values.get('max');\n const min = this.values.get('min');\n return Math.min(Math.max(value, min), max);\n }\n}\n","import { isEmpty } from '../../misc/type-util.js';\nimport { ValueMap } from '../model/value-map.js';\n/**\n * A number range constraint.\n */\nexport class RangeConstraint {\n constructor(config) {\n this.values = ValueMap.fromObject({\n max: config.max,\n min: config.min,\n });\n }\n constrain(value) {\n const max = this.values.get('max');\n const min = this.values.get('min');\n let result = value;\n if (!isEmpty(min)) {\n result = Math.max(result, min);\n }\n if (!isEmpty(max)) {\n result = Math.min(result, max);\n }\n return result;\n }\n}\n","/**\n * A number step range constraint.\n */\nexport class StepConstraint {\n constructor(step, origin = 0) {\n this.step = step;\n this.origin = origin;\n }\n constrain(value) {\n const o = this.origin % this.step;\n const r = Math.round((value - o) / this.step);\n return o + r * this.step;\n }\n}\n","export class NumberLiteralNode {\n constructor(text) {\n this.text = text;\n }\n evaluate() {\n return Number(this.text);\n }\n toString() {\n return this.text;\n }\n}\nconst BINARY_OPERATION_MAP = {\n '**': (v1, v2) => Math.pow(v1, v2),\n '*': (v1, v2) => v1 * v2,\n '/': (v1, v2) => v1 / v2,\n '%': (v1, v2) => v1 % v2,\n '+': (v1, v2) => v1 + v2,\n '-': (v1, v2) => v1 - v2,\n '<<': (v1, v2) => v1 << v2,\n '>>': (v1, v2) => v1 >> v2,\n '>>>': (v1, v2) => v1 >>> v2,\n '&': (v1, v2) => v1 & v2,\n '^': (v1, v2) => v1 ^ v2,\n '|': (v1, v2) => v1 | v2,\n};\nexport class BinaryOperationNode {\n constructor(operator, left, right) {\n this.left = left;\n this.operator = operator;\n this.right = right;\n }\n evaluate() {\n const op = BINARY_OPERATION_MAP[this.operator];\n if (!op) {\n throw new Error(`unexpected binary operator: '${this.operator}`);\n }\n return op(this.left.evaluate(), this.right.evaluate());\n }\n toString() {\n return [\n 'b(',\n this.left.toString(),\n this.operator,\n this.right.toString(),\n ')',\n ].join(' ');\n }\n}\nconst UNARY_OPERATION_MAP = {\n '+': (v) => v,\n '-': (v) => -v,\n '~': (v) => ~v,\n};\nexport class UnaryOperationNode {\n constructor(operator, expr) {\n this.operator = operator;\n this.expression = expr;\n }\n evaluate() {\n const op = UNARY_OPERATION_MAP[this.operator];\n if (!op) {\n throw new Error(`unexpected unary operator: '${this.operator}`);\n }\n return op(this.expression.evaluate());\n }\n toString() {\n return ['u(', this.operator, this.expression.toString(), ')'].join(' ');\n }\n}\n","function combineReader(parsers) {\n return (text, cursor) => {\n for (let i = 0; i < parsers.length; i++) {\n const result = parsers[i](text, cursor);\n if (result !== '') {\n return result;\n }\n }\n return '';\n };\n}\nexport function readWhitespace(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^\\s+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readNonZeroDigit(text, cursor) {\n const ch = text.substr(cursor, 1);\n return ch.match(/^[1-9]$/) ? ch : '';\n}\nfunction readDecimalDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[0-9]+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readSignedInteger(text, cursor) {\n const ds = readDecimalDigits(text, cursor);\n if (ds !== '') {\n return ds;\n }\n const sign = text.substr(cursor, 1);\n cursor += 1;\n if (sign !== '-' && sign !== '+') {\n return '';\n }\n const sds = readDecimalDigits(text, cursor);\n if (sds === '') {\n return '';\n }\n return sign + sds;\n}\nfunction readExponentPart(text, cursor) {\n const result = [];\n const e = text.substr(cursor, 1);\n cursor += 1;\n if (e.toLowerCase() !== 'e') {\n return '';\n }\n result.push(e);\n const si = readSignedInteger(text, cursor);\n if (si === '') {\n return '';\n }\n return e + si;\n}\nfunction readDecimalIntegerLiteral(text, cursor) {\n const ch = text.substr(cursor, 1);\n if (ch === '0') {\n return ch;\n }\n const nzd = readNonZeroDigit(text, cursor);\n cursor += nzd.length;\n if (nzd === '') {\n return '';\n }\n return nzd + readDecimalDigits(text, cursor);\n}\nfunction readDecimalLiteral1(text, cursor) {\n const dil = readDecimalIntegerLiteral(text, cursor);\n cursor += dil.length;\n if (dil === '') {\n return '';\n }\n const dot = text.substr(cursor, 1);\n cursor += dot.length;\n if (dot !== '.') {\n return '';\n }\n const dds = readDecimalDigits(text, cursor);\n cursor += dds.length;\n return dil + dot + dds + readExponentPart(text, cursor);\n}\nfunction readDecimalLiteral2(text, cursor) {\n const dot = text.substr(cursor, 1);\n cursor += dot.length;\n if (dot !== '.') {\n return '';\n }\n const dds = readDecimalDigits(text, cursor);\n cursor += dds.length;\n if (dds === '') {\n return '';\n }\n return dot + dds + readExponentPart(text, cursor);\n}\nfunction readDecimalLiteral3(text, cursor) {\n const dil = readDecimalIntegerLiteral(text, cursor);\n cursor += dil.length;\n if (dil === '') {\n return '';\n }\n return dil + readExponentPart(text, cursor);\n}\nconst readDecimalLiteral = combineReader([\n readDecimalLiteral1,\n readDecimalLiteral2,\n readDecimalLiteral3,\n]);\nfunction parseBinaryDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[01]+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readBinaryIntegerLiteral(text, cursor) {\n const prefix = text.substr(cursor, 2);\n cursor += prefix.length;\n if (prefix.toLowerCase() !== '0b') {\n return '';\n }\n const bds = parseBinaryDigits(text, cursor);\n if (bds === '') {\n return '';\n }\n return prefix + bds;\n}\nfunction readOctalDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[0-7]+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readOctalIntegerLiteral(text, cursor) {\n const prefix = text.substr(cursor, 2);\n cursor += prefix.length;\n if (prefix.toLowerCase() !== '0o') {\n return '';\n }\n const ods = readOctalDigits(text, cursor);\n if (ods === '') {\n return '';\n }\n return prefix + ods;\n}\nfunction readHexDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[0-9a-f]+/i);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readHexIntegerLiteral(text, cursor) {\n const prefix = text.substr(cursor, 2);\n cursor += prefix.length;\n if (prefix.toLowerCase() !== '0x') {\n return '';\n }\n const hds = readHexDigits(text, cursor);\n if (hds === '') {\n return '';\n }\n return prefix + hds;\n}\nconst readNonDecimalIntegerLiteral = combineReader([\n readBinaryIntegerLiteral,\n readOctalIntegerLiteral,\n readHexIntegerLiteral,\n]);\nexport const readNumericLiteral = combineReader([\n readNonDecimalIntegerLiteral,\n readDecimalLiteral,\n]);\n","import { BinaryOperationNode, NumberLiteralNode, UnaryOperationNode, } from './nodes.js';\nimport { readNumericLiteral, readWhitespace } from './reader.js';\nfunction parseLiteral(text, cursor) {\n const num = readNumericLiteral(text, cursor);\n cursor += num.length;\n if (num === '') {\n return null;\n }\n return {\n evaluable: new NumberLiteralNode(num),\n cursor: cursor,\n };\n}\nfunction parseParenthesizedExpression(text, cursor) {\n const op = text.substr(cursor, 1);\n cursor += op.length;\n if (op !== '(') {\n return null;\n }\n const expr = parseExpression(text, cursor);\n if (!expr) {\n return null;\n }\n cursor = expr.cursor;\n cursor += readWhitespace(text, cursor).length;\n const cl = text.substr(cursor, 1);\n cursor += cl.length;\n if (cl !== ')') {\n return null;\n }\n return {\n evaluable: expr.evaluable,\n cursor: cursor,\n };\n}\nfunction parsePrimaryExpression(text, cursor) {\n var _a;\n return ((_a = parseLiteral(text, cursor)) !== null && _a !== void 0 ? _a : parseParenthesizedExpression(text, cursor));\n}\nfunction parseUnaryExpression(text, cursor) {\n const expr = parsePrimaryExpression(text, cursor);\n if (expr) {\n return expr;\n }\n const op = text.substr(cursor, 1);\n cursor += op.length;\n if (op !== '+' && op !== '-' && op !== '~') {\n return null;\n }\n const num = parseUnaryExpression(text, cursor);\n if (!num) {\n return null;\n }\n cursor = num.cursor;\n return {\n cursor: cursor,\n evaluable: new UnaryOperationNode(op, num.evaluable),\n };\n}\nfunction readBinaryOperator(ops, text, cursor) {\n cursor += readWhitespace(text, cursor).length;\n const op = ops.filter((op) => text.startsWith(op, cursor))[0];\n if (!op) {\n return null;\n }\n cursor += op.length;\n cursor += readWhitespace(text, cursor).length;\n return {\n cursor: cursor,\n operator: op,\n };\n}\nfunction createBinaryOperationExpressionParser(exprParser, ops) {\n return (text, cursor) => {\n const firstExpr = exprParser(text, cursor);\n if (!firstExpr) {\n return null;\n }\n cursor = firstExpr.cursor;\n let expr = firstExpr.evaluable;\n for (;;) {\n const op = readBinaryOperator(ops, text, cursor);\n if (!op) {\n break;\n }\n cursor = op.cursor;\n const nextExpr = exprParser(text, cursor);\n if (!nextExpr) {\n return null;\n }\n cursor = nextExpr.cursor;\n expr = new BinaryOperationNode(op.operator, expr, nextExpr.evaluable);\n }\n return expr\n ? {\n cursor: cursor,\n evaluable: expr,\n }\n : null;\n };\n}\nconst parseBinaryOperationExpression = [\n ['**'],\n ['*', '/', '%'],\n ['+', '-'],\n ['<<', '>>>', '>>'],\n ['&'],\n ['^'],\n ['|'],\n].reduce((parser, ops) => {\n return createBinaryOperationExpressionParser(parser, ops);\n}, parseUnaryExpression);\nfunction parseExpression(text, cursor) {\n cursor += readWhitespace(text, cursor).length;\n return parseBinaryOperationExpression(text, cursor);\n}\n/**\n * Parse ECMAScript expression with numeric literals.\n * https://262.ecma-international.org/\n * @param text The string to be parsed.\n * @return A parsing result, or null if failed.\n */\nexport function parseEcmaNumberExpression(text) {\n const expr = parseExpression(text, 0);\n if (!expr) {\n return null;\n }\n const cursor = expr.cursor + readWhitespace(text, expr.cursor).length;\n if (cursor !== text.length) {\n return null;\n }\n return expr.evaluable;\n}\n","import { isEmpty } from '../../misc/type-util.js';\nimport { parseEcmaNumberExpression } from './ecma/parser.js';\nexport function parseNumber(text) {\n var _a;\n const r = parseEcmaNumberExpression(text);\n return (_a = r === null || r === void 0 ? void 0 : r.evaluate()) !== null && _a !== void 0 ? _a : null;\n}\nexport function numberFromUnknown(value) {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n const pv = parseNumber(value);\n if (!isEmpty(pv)) {\n return pv;\n }\n }\n return 0;\n}\nexport function numberToString(value) {\n return String(value);\n}\nexport function createNumberFormatter(digits) {\n return (value) => {\n // toFixed() of Safari doesn't support digits greater than 20\n // https://github.com/cocopon/tweakpane/pull/19\n return value.toFixed(Math.max(Math.min(digits, 20), 0));\n };\n}\n","import { isEmpty } from '../../misc/type-util.js';\nimport { DefiniteRangeConstraint } from '../constraint/definite-range.js';\nimport { RangeConstraint } from '../constraint/range.js';\nimport { StepConstraint } from '../constraint/step.js';\nimport { createNumberFormatter } from '../converter/number.js';\nexport function mapRange(value, start1, end1, start2, end2) {\n const p = (value - start1) / (end1 - start1);\n return start2 + p * (end2 - start2);\n}\nexport function getDecimalDigits(value) {\n const text = String(value.toFixed(10));\n const frac = text.split('.')[1];\n return frac.replace(/0+$/, '').length;\n}\nexport function constrainRange(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\nexport function loopRange(value, max) {\n return ((value % max) + max) % max;\n}\nexport function getSuitableDecimalDigits(params, rawValue) {\n return !isEmpty(params.step)\n ? getDecimalDigits(params.step)\n : Math.max(getDecimalDigits(rawValue), 2);\n}\nexport function getSuitableKeyScale(params) {\n var _a;\n return (_a = params.step) !== null && _a !== void 0 ? _a : 1;\n}\nexport function getSuitablePointerScale(params, rawValue) {\n var _a;\n const base = Math.abs((_a = params.step) !== null && _a !== void 0 ? _a : rawValue);\n return base === 0 ? 0.1 : Math.pow(10, Math.floor(Math.log10(base)) - 1);\n}\n/**\n * Tries to create a step constraint.\n * @param params The input parameters object.\n * @return A constraint or null if not found.\n */\nexport function createStepConstraint(params, initialValue) {\n if (!isEmpty(params.step)) {\n return new StepConstraint(params.step, initialValue);\n }\n return null;\n}\n/**\n * Tries to create a range constraint.\n * @param params The input parameters object.\n * @return A constraint or null if not found.\n */\nexport function createRangeConstraint(params) {\n if (!isEmpty(params.max) && !isEmpty(params.min)) {\n return new DefiniteRangeConstraint({\n max: params.max,\n min: params.min,\n });\n }\n if (!isEmpty(params.max) || !isEmpty(params.min)) {\n return new RangeConstraint({\n max: params.max,\n min: params.min,\n });\n }\n return null;\n}\nexport function createNumberTextPropsObject(params, initialValue) {\n var _a, _b, _c;\n return {\n formatter: (_a = params.format) !== null && _a !== void 0 ? _a : createNumberFormatter(getSuitableDecimalDigits(params, initialValue)),\n keyScale: (_b = params.keyScale) !== null && _b !== void 0 ? _b : getSuitableKeyScale(params),\n pointerScale: (_c = params.pointerScale) !== null && _c !== void 0 ? _c : getSuitablePointerScale(params, initialValue),\n };\n}\nexport function createNumberTextInputParamsParser(p) {\n return {\n format: p.optional.function,\n keyScale: p.optional.number,\n max: p.optional.number,\n min: p.optional.number,\n pointerScale: p.optional.number,\n step: p.optional.number,\n };\n}\n","import { ValueMap } from '../model/value-map.js';\nimport { createNumberTextPropsObject } from '../number/util.js';\nexport function createPointAxis(config) {\n return {\n constraint: config.constraint,\n textProps: ValueMap.fromObject(createNumberTextPropsObject(config.params, config.initialValue)),\n };\n}\n","export class BladeApi {\n /**\n * @hidden\n */\n constructor(controller) {\n this.controller = controller;\n }\n get element() {\n return this.controller.view.element;\n }\n get disabled() {\n return this.controller.viewProps.get('disabled');\n }\n set disabled(disabled) {\n this.controller.viewProps.set('disabled', disabled);\n }\n get hidden() {\n return this.controller.viewProps.get('hidden');\n }\n set hidden(hidden) {\n this.controller.viewProps.set('hidden', hidden);\n }\n dispose() {\n this.controller.viewProps.set('disposed', true);\n }\n importState(state) {\n return this.controller.importState(state);\n }\n exportState() {\n return this.controller.exportState();\n }\n}\n","/**\n * A base class for Tweakpane API events.\n * @template Target The event target.\n */\nexport class TpEvent {\n /**\n * @hidden\n */\n constructor(target) {\n this.target = target;\n }\n}\n/**\n * An event class for value changes.\n * @template T The type of the value.\n * @template Target The event target.\n */\nexport class TpChangeEvent extends TpEvent {\n /**\n * @hidden\n */\n constructor(target, value, last) {\n super(target);\n this.value = value;\n this.last = last !== null && last !== void 0 ? last : true;\n }\n}\n/**\n * An event class for folder.\n * @template Target The event target.\n */\nexport class TpFoldEvent extends TpEvent {\n /**\n * @hidden\n */\n constructor(target, expanded) {\n super(target);\n this.expanded = expanded;\n }\n}\n/**\n * An event class for tab selection.\n * @template Target The event target.\n */\nexport class TpTabSelectEvent extends TpEvent {\n /**\n * @hidden\n */\n constructor(target, index) {\n super(target);\n this.index = index;\n }\n}\n/**\n * An event class for mouse events.\n * @template Target The event target.\n */\nexport class TpMouseEvent extends TpEvent {\n /**\n * @hidden\n */\n constructor(target, nativeEvent) {\n super(target);\n this.native = nativeEvent;\n }\n}\n","import { Emitter } from '../../../common/model/emitter.js';\nimport { forceCast } from '../../../misc/type-util.js';\nimport { BladeApi } from '../../common/api/blade.js';\nimport { TpChangeEvent } from '../../common/api/tp-event.js';\n/**\n * The API for binding between the parameter and the pane.\n * @template In The internal type.\n * @template Ex The external type.\n */\nexport class BindingApi extends BladeApi {\n /**\n * @hidden\n */\n constructor(controller) {\n super(controller);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.emitter_ = new Emitter();\n this.controller.value.emitter.on('change', this.onValueChange_);\n }\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n /**\n * The key of the bound value.\n */\n get key() {\n return this.controller.value.binding.target.key;\n }\n /**\n * The generic tag with many uses.\n */\n get tag() {\n return this.controller.tag;\n }\n set tag(tag) {\n this.controller.tag = tag;\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n refresh() {\n this.controller.value.fetch();\n }\n onValueChange_(ev) {\n const value = this.controller.value;\n this.emitter_.emit('change', new TpChangeEvent(this, forceCast(value.binding.target.read()), ev.options.last));\n }\n}\n","import { forceCast } from '../misc/type-util.js';\nfunction parseObject(value, keyToParserMap) {\n const keys = Object.keys(keyToParserMap);\n const result = keys.reduce((tmp, key) => {\n if (tmp === undefined) {\n return undefined;\n }\n const parser = keyToParserMap[key];\n const result = parser(value[key]);\n return result.succeeded\n ? Object.assign(Object.assign({}, tmp), { [key]: result.value }) : undefined;\n }, {});\n return forceCast(result);\n}\nfunction parseArray(value, parseItem) {\n return value.reduce((tmp, item) => {\n if (tmp === undefined) {\n return undefined;\n }\n const result = parseItem(item);\n if (!result.succeeded || result.value === undefined) {\n return undefined;\n }\n return [...tmp, result.value];\n }, []);\n}\nfunction isObject(value) {\n if (value === null) {\n return false;\n }\n return typeof value === 'object';\n}\nfunction createMicroParserBuilder(parse) {\n return (optional) => (v) => {\n if (!optional && v === undefined) {\n return {\n succeeded: false,\n value: undefined,\n };\n }\n if (optional && v === undefined) {\n return {\n succeeded: true,\n value: undefined,\n };\n }\n const result = parse(v);\n return result !== undefined\n ? {\n succeeded: true,\n value: result,\n }\n : {\n succeeded: false,\n value: undefined,\n };\n };\n}\nfunction createMicroParserBuilders(optional) {\n return {\n custom: (parse) => createMicroParserBuilder(parse)(optional),\n boolean: createMicroParserBuilder((v) => typeof v === 'boolean' ? v : undefined)(optional),\n number: createMicroParserBuilder((v) => typeof v === 'number' ? v : undefined)(optional),\n string: createMicroParserBuilder((v) => typeof v === 'string' ? v : undefined)(optional),\n // eslint-disable-next-line @typescript-eslint/ban-types\n function: createMicroParserBuilder((v) => \n // eslint-disable-next-line @typescript-eslint/ban-types\n typeof v === 'function' ? v : undefined)(optional),\n constant: (value) => createMicroParserBuilder((v) => (v === value ? value : undefined))(optional),\n raw: createMicroParserBuilder((v) => v)(optional),\n object: (keyToParserMap) => createMicroParserBuilder((v) => {\n if (!isObject(v)) {\n return undefined;\n }\n return parseObject(v, keyToParserMap);\n })(optional),\n array: (itemParser) => createMicroParserBuilder((v) => {\n if (!Array.isArray(v)) {\n return undefined;\n }\n return parseArray(v, itemParser);\n })(optional),\n };\n}\nexport const MicroParsers = {\n optional: createMicroParserBuilders(true),\n required: createMicroParserBuilders(false),\n};\nexport function parseRecord(value, keyToParserMap) {\n const map = keyToParserMap(MicroParsers);\n const result = MicroParsers.required.object(map)(value);\n return result.succeeded ? result.value : undefined;\n}\n","import { parseRecord, } from '../../../common/micro-parsers.js';\nimport { deepMerge } from '../../../misc/type-util.js';\n/**\n * A utility function for importing a blade state.\n * @param state The state object.\n * @param superImport The function to invoke super.import(), or null for no super.\n * @param parser The state micro parser object.\n * @param callback The callback function that will be called when parsing is successful.\n * @return true if parsing is successful.\n */\nexport function importBladeState(state, superImport, parser, callback) {\n if (superImport && !superImport(state)) {\n return false;\n }\n const result = parseRecord(state, parser);\n return result ? callback(result) : false;\n}\n/**\n * A utility function for exporting a blade state.\n * @param superExport The function to invoke super.export(), or null for no super.\n * @param thisState The blade state from the current blade.\n * @return An exported object.\n */\nexport function exportBladeState(superExport, thisState) {\n var _a;\n return deepMerge((_a = superExport === null || superExport === void 0 ? void 0 : superExport()) !== null && _a !== void 0 ? _a : {}, thisState);\n}\n","export function isValueBladeController(bc) {\n return 'value' in bc;\n}\n","import { isObject } from '../../../misc/type-util.js';\nimport { isBinding } from '../binding.js';\nexport function isBindingValue(v) {\n if (!isObject(v) || !('binding' in v)) {\n return false;\n }\n const b = v.binding;\n return isBinding(b);\n}\n","import { forceCast } from '../misc/type-util.js';\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\nexport function forceReflow(element) {\n element.offsetHeight;\n}\nexport function disableTransitionTemporarily(element, callback) {\n const t = element.style.transition;\n element.style.transition = 'none';\n callback();\n element.style.transition = t;\n}\nexport function supportsTouch(doc) {\n return doc.ontouchstart !== undefined;\n}\nfunction getGlobalObject() {\n return globalThis;\n}\nexport function getWindowDocument() {\n const globalObj = forceCast(getGlobalObject());\n return globalObj.document;\n}\nexport function getCanvasContext(canvasElement) {\n const win = canvasElement.ownerDocument.defaultView;\n if (!win) {\n return null;\n }\n // HTMLCanvasElement.prototype.getContext is not defined on testing environment\n const isBrowser = 'document' in win;\n return isBrowser\n ? canvasElement.getContext('2d', {\n willReadFrequently: true,\n })\n : null;\n}\nconst ICON_ID_TO_INNER_HTML_MAP = {\n check: '<path d=\"M2 8l4 4l8 -8\"/>',\n dropdown: '<path d=\"M5 7h6l-3 3 z\"/>',\n p2dpad: '<path d=\"M8 4v8\"/><path d=\"M4 8h8\"/><circle cx=\"12\" cy=\"12\" r=\"1.2\"/>',\n};\nexport function createSvgIconElement(document, iconId) {\n const elem = document.createElementNS(SVG_NS, 'svg');\n elem.innerHTML = ICON_ID_TO_INNER_HTML_MAP[iconId];\n return elem;\n}\nexport function insertElementAt(parentElement, element, index) {\n parentElement.insertBefore(element, parentElement.children[index]);\n}\nexport function removeElement(element) {\n if (element.parentElement) {\n element.parentElement.removeChild(element);\n }\n}\nexport function removeChildElements(element) {\n while (element.children.length > 0) {\n element.removeChild(element.children[0]);\n }\n}\nexport function removeChildNodes(element) {\n while (element.childNodes.length > 0) {\n element.removeChild(element.childNodes[0]);\n }\n}\nexport function indexOfChildElement(element) {\n const parentElem = element.parentElement;\n if (!parentElem) {\n return -1;\n }\n const children = Array.prototype.slice.call(parentElem.children);\n return children.indexOf(element);\n}\nexport function findNextTarget(ev) {\n if (ev.relatedTarget) {\n return forceCast(ev.relatedTarget);\n }\n // Workaround for Firefox\n if ('explicitOriginalTarget' in ev) {\n return ev.explicitOriginalTarget;\n }\n // TODO: Workaround for Safari\n // Safari doesn't set next target for some elements\n // (e.g. button, input[type=checkbox], etc.)\n return null;\n}\n","export function bindValue(value, applyValue) {\n value.emitter.on('change', (ev) => {\n applyValue(ev.rawValue);\n });\n applyValue(value.rawValue);\n}\nexport function bindValueMap(valueMap, key, applyValue) {\n bindValue(valueMap.value(key), applyValue);\n}\n","const PREFIX = 'tp';\n/**\n * A utility function for generating BEM-like class name.\n * @param viewName The name of the view. Used as part of the block name.\n * @return A class name generator function.\n */\nexport function ClassName(viewName) {\n /**\n * Generates a class name.\n * @param [opt_elementName] The name of the element.\n * @param [opt_modifier] The name of the modifier.\n * @return A class name.\n */\n const fn = (opt_elementName, opt_modifier) => {\n return [\n PREFIX,\n '-',\n viewName,\n 'v',\n opt_elementName ? `_${opt_elementName}` : '',\n opt_modifier ? `-${opt_modifier}` : '',\n ].join('');\n };\n return fn;\n}\n","import { isEmpty } from '../../../misc/type-util.js';\nimport { removeChildNodes } from '../../dom-util.js';\nimport { bindValueMap } from '../../model/reactive.js';\nimport { ClassName } from '../../view/class-name.js';\nconst cn = ClassName('lbl');\nfunction createLabelNode(doc, label) {\n const frag = doc.createDocumentFragment();\n const lineNodes = label.split('\\n').map((line) => {\n return doc.createTextNode(line);\n });\n lineNodes.forEach((lineNode, index) => {\n if (index > 0) {\n frag.appendChild(doc.createElement('br'));\n }\n frag.appendChild(lineNode);\n });\n return frag;\n}\n/**\n * @hidden\n */\nexport class LabelView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const labelElem = doc.createElement('div');\n labelElem.classList.add(cn('l'));\n bindValueMap(config.props, 'label', (value) => {\n if (isEmpty(value)) {\n this.element.classList.add(cn(undefined, 'nol'));\n }\n else {\n this.element.classList.remove(cn(undefined, 'nol'));\n removeChildNodes(labelElem);\n labelElem.appendChild(createLabelNode(doc, value));\n }\n });\n this.element.appendChild(labelElem);\n this.labelElement = labelElem;\n const valueElem = doc.createElement('div');\n valueElem.classList.add(cn('v'));\n this.element.appendChild(valueElem);\n this.valueElement = valueElem;\n }\n}\n","import { exportBladeState, importBladeState, } from '../../../blade/common/controller/blade-state.js';\nimport { LabelView } from '../view/label.js';\n/**\n * @hidden\n */\nexport class LabelController {\n constructor(doc, config) {\n this.props = config.props;\n this.valueController = config.valueController;\n this.viewProps = config.valueController.viewProps;\n this.view = new LabelView(doc, {\n props: config.props,\n viewProps: this.viewProps,\n });\n this.view.valueElement.appendChild(this.valueController.view.element);\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n label: p.optional.string,\n }), (result) => {\n this.props.set('label', result.label);\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n label: this.props.get('label'),\n });\n }\n}\n","export function getAllBladePositions() {\n return ['veryfirst', 'first', 'last', 'verylast'];\n}\n","import { removeElement } from '../../../common/dom-util.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nimport { getAllBladePositions } from '../model/blade-positions.js';\nimport { exportBladeState, importBladeState } from './blade-state.js';\nconst cn = ClassName('');\nconst POS_TO_CLASS_NAME_MAP = {\n veryfirst: 'vfst',\n first: 'fst',\n last: 'lst',\n verylast: 'vlst',\n};\n/**\n * @hidden\n */\nexport class BladeController {\n constructor(config) {\n this.parent_ = null;\n this.blade = config.blade;\n this.view = config.view;\n this.viewProps = config.viewProps;\n const elem = this.view.element;\n this.blade.value('positions').emitter.on('change', () => {\n getAllBladePositions().forEach((pos) => {\n elem.classList.remove(cn(undefined, POS_TO_CLASS_NAME_MAP[pos]));\n });\n this.blade.get('positions').forEach((pos) => {\n elem.classList.add(cn(undefined, POS_TO_CLASS_NAME_MAP[pos]));\n });\n });\n this.viewProps.handleDispose(() => {\n removeElement(elem);\n });\n }\n get parent() {\n return this.parent_;\n }\n set parent(parent) {\n this.parent_ = parent;\n this.viewProps.set('parent', this.parent_ ? this.parent_.viewProps : null);\n }\n /**\n * Import a state from the object.\n * @param state The object to import.\n * @return true if succeeded, false otherwise.\n */\n importState(state) {\n return importBladeState(state, null, (p) => ({\n disabled: p.required.boolean,\n hidden: p.required.boolean,\n }), (result) => {\n this.viewProps.importState(result);\n return true;\n });\n }\n /**\n * Export a state to the object.\n * @return A state object.\n */\n exportState() {\n return exportBladeState(null, Object.assign({}, this.viewProps.exportState()));\n }\n}\n","import { BladeApi } from '../../common/api/blade.js';\nimport { TpMouseEvent } from '../../common/api/tp-event.js';\nexport class ButtonApi extends BladeApi {\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n get title() {\n var _a;\n return (_a = this.controller.buttonController.props.get('title')) !== null && _a !== void 0 ? _a : '';\n }\n set title(title) {\n this.controller.buttonController.props.set('title', title);\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n const emitter = this.controller.buttonController.emitter;\n emitter.on(eventName, (ev) => {\n bh(new TpMouseEvent(this, ev.nativeEvent));\n });\n return this;\n }\n off(eventName, handler) {\n const emitter = this.controller.buttonController.emitter;\n emitter.off(eventName, handler);\n return this;\n }\n}\n","import { bindValue } from '../model/reactive.js';\nfunction applyClass(elem, className, active) {\n if (active) {\n elem.classList.add(className);\n }\n else {\n elem.classList.remove(className);\n }\n}\nexport function valueToClassName(elem, className) {\n return (value) => {\n applyClass(elem, className, value);\n };\n}\nexport function bindValueToTextContent(value, elem) {\n bindValue(value, (text) => {\n elem.textContent = text !== null && text !== void 0 ? text : '';\n });\n}\n","import { ClassName } from '../../../common/view/class-name.js';\nimport { bindValueToTextContent } from '../../../common/view/reactive.js';\nconst cn = ClassName('btn');\n/**\n * @hidden\n */\nexport class ButtonView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn('b'));\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const titleElem = doc.createElement('div');\n titleElem.classList.add(cn('t'));\n bindValueToTextContent(config.props.value('title'), titleElem);\n this.buttonElement.appendChild(titleElem);\n }\n}\n","import { Emitter } from '../../../common/model/emitter.js';\nimport { exportBladeState, importBladeState, } from '../../common/controller/blade-state.js';\nimport { ButtonView } from '../view/button.js';\n/**\n * @hidden\n */\nexport class ButtonController {\n /**\n * @hidden\n */\n constructor(doc, config) {\n this.emitter = new Emitter();\n this.onClick_ = this.onClick_.bind(this);\n this.props = config.props;\n this.viewProps = config.viewProps;\n this.view = new ButtonView(doc, {\n props: this.props,\n viewProps: this.viewProps,\n });\n this.view.buttonElement.addEventListener('click', this.onClick_);\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n title: p.optional.string,\n }), (result) => {\n this.props.set('title', result.title);\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n title: this.props.get('title'),\n });\n }\n onClick_(ev) {\n this.emitter.emit('click', {\n nativeEvent: ev,\n sender: this,\n });\n }\n}\n","import { LabelController } from '../../../common/label/controller/label.js';\nimport { BladeController } from '../../common/controller/blade.js';\nimport { exportBladeState, importBladeState, } from '../../common/controller/blade-state.js';\nimport { ButtonController } from './button.js';\nexport class ButtonBladeController extends BladeController {\n constructor(doc, config) {\n const bc = new ButtonController(doc, {\n props: config.buttonProps,\n viewProps: config.viewProps,\n });\n const lc = new LabelController(doc, {\n blade: config.blade,\n props: config.labelProps,\n valueController: bc,\n });\n super({\n blade: config.blade,\n view: lc.view,\n viewProps: config.viewProps,\n });\n this.buttonController = bc;\n this.labelController = lc;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s) &&\n this.buttonController.importProps(s) &&\n this.labelController.importProps(s), () => ({}), () => true);\n }\n exportState() {\n return exportBladeState(() => super.exportState(), Object.assign(Object.assign({}, this.buttonController.exportProps()), this.labelController.exportProps()));\n }\n}\n","/***\n * A simple semantic versioning perser.\n */\nexport class Semver {\n /**\n * @hidden\n */\n constructor(text) {\n const [core, prerelease] = text.split('-');\n const coreComps = core.split('.');\n this.major = parseInt(coreComps[0], 10);\n this.minor = parseInt(coreComps[1], 10);\n this.patch = parseInt(coreComps[2], 10);\n this.prerelease = prerelease !== null && prerelease !== void 0 ? prerelease : null;\n }\n toString() {\n const core = [this.major, this.minor, this.patch].join('.');\n return this.prerelease !== null ? [core, this.prerelease].join('-') : core;\n }\n}\n","import { Semver } from './misc/semver.js';\nexport const VERSION = new Semver('2.0.5');\n","import { VERSION } from '../version.js';\n/**\n * Creates a plugin with the current core.\n * @param plugin The plugin without the core version.\n * @return A plugin with the core version.\n */\nexport function createPlugin(plugin) {\n return Object.assign({ core: VERSION }, plugin);\n}\n","import { parseRecord } from '../../common/micro-parsers.js';\nimport { ValueMap } from '../../common/model/value-map.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { ButtonApi } from './api/button.js';\nimport { ButtonBladeController } from './controller/button-blade.js';\nexport const ButtonBladePlugin = createPlugin({\n id: 'button',\n type: 'blade',\n accept(params) {\n const result = parseRecord(params, (p) => ({\n title: p.required.string,\n view: p.required.constant('button'),\n label: p.optional.string,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n return new ButtonBladeController(args.document, {\n blade: args.blade,\n buttonProps: ValueMap.fromObject({\n title: args.params.title,\n }),\n labelProps: ValueMap.fromObject({\n label: args.params.label,\n }),\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (args.controller instanceof ButtonBladeController) {\n return new ButtonApi(args.controller);\n }\n return null;\n },\n});\n","export function addButtonAsBlade(api, params) {\n return api.addBlade(Object.assign(Object.assign({}, params), { view: 'button' }));\n}\nexport function addFolderAsBlade(api, params) {\n return api.addBlade(Object.assign(Object.assign({}, params), { view: 'folder' }));\n}\nexport function addTabAsBlade(api, params) {\n return api.addBlade(Object.assign(Object.assign({}, params), { view: 'tab' }));\n}\n","import { isObject } from '../../../misc/type-util.js';\nexport function isRefreshable(value) {\n if (!isObject(value)) {\n return false;\n }\n return 'refresh' in value && typeof value.refresh === 'function';\n}\n","import { BindingTarget } from '../../../common/binding/target.js';\nimport { isBindingValue } from '../../../common/binding/value/binding.js';\nimport { Emitter } from '../../../common/model/emitter.js';\nimport { TpError } from '../../../common/tp-error.js';\nimport { addButtonAsBlade, addFolderAsBlade, addTabAsBlade, } from './container.js';\nimport { isRefreshable } from './refreshable.js';\nimport { TpChangeEvent } from './tp-event.js';\nfunction createBindingTarget(obj, key) {\n if (!BindingTarget.isBindable(obj)) {\n throw TpError.notBindable();\n }\n return new BindingTarget(obj, key);\n}\n/**\n * @hidden\n */\nexport class RackApi {\n constructor(controller, pool) {\n this.onRackValueChange_ = this.onRackValueChange_.bind(this);\n this.controller_ = controller;\n this.emitter_ = new Emitter();\n this.pool_ = pool;\n const rack = this.controller_.rack;\n rack.emitter.on('valuechange', this.onRackValueChange_);\n }\n get children() {\n return this.controller_.rack.children.map((bc) => this.pool_.createApi(bc));\n }\n addBinding(object, key, opt_params) {\n const params = opt_params !== null && opt_params !== void 0 ? opt_params : {};\n const doc = this.controller_.element.ownerDocument;\n const bc = this.pool_.createBinding(doc, createBindingTarget(object, key), params);\n const api = this.pool_.createBindingApi(bc);\n return this.add(api, params.index);\n }\n addFolder(params) {\n return addFolderAsBlade(this, params);\n }\n addButton(params) {\n return addButtonAsBlade(this, params);\n }\n addTab(params) {\n return addTabAsBlade(this, params);\n }\n add(api, opt_index) {\n const bc = api.controller;\n this.controller_.rack.add(bc, opt_index);\n return api;\n }\n remove(api) {\n this.controller_.rack.remove(api.controller);\n }\n addBlade(params) {\n const doc = this.controller_.element.ownerDocument;\n const bc = this.pool_.createBlade(doc, params);\n const api = this.pool_.createApi(bc);\n return this.add(api, params.index);\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n refresh() {\n this.children.forEach((c) => {\n if (isRefreshable(c)) {\n c.refresh();\n }\n });\n }\n onRackValueChange_(ev) {\n const bc = ev.bladeController;\n const api = this.pool_.createApi(bc);\n const binding = isBindingValue(bc.value) ? bc.value.binding : null;\n this.emitter_.emit('change', new TpChangeEvent(api, binding ? binding.target.read() : bc.value.rawValue, ev.options.last));\n }\n}\n","import { BladeApi } from './blade.js';\nimport { RackApi } from './rack.js';\nexport class ContainerBladeApi extends BladeApi {\n /**\n * @hidden\n */\n constructor(controller, pool) {\n super(controller);\n this.rackApi_ = new RackApi(controller.rackController, pool);\n }\n refresh() {\n this.rackApi_.refresh();\n }\n}\nexport function isContainerBladeApi(api) {\n return 'rackApi_' in api;\n}\n","import { BladeController } from './blade.js';\nimport { exportBladeState, importBladeState } from './blade-state.js';\n/**\n * @hidden\n */\nexport class ContainerBladeController extends BladeController {\n constructor(config) {\n super({\n blade: config.blade,\n view: config.view,\n viewProps: config.rackController.viewProps,\n });\n this.rackController = config.rackController;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s), (p) => ({\n children: p.required.array(p.required.raw),\n }), (result) => {\n return this.rackController.rack.children.every((c, index) => {\n return c.importState(result.children[index]);\n });\n });\n }\n exportState() {\n return exportBladeState(() => super.exportState(), {\n children: this.rackController.rack.children.map((c) => c.exportState()),\n });\n }\n}\nexport function isContainerBladeController(bc) {\n return 'rackController' in bc;\n}\n","import { Emitter } from '../../../common/model/emitter.js';\nimport { TpError } from '../../../common/tp-error.js';\n/**\n * @hidden\n */\nexport class NestedOrderedSet {\n constructor(extract) {\n this.emitter = new Emitter();\n this.items_ = [];\n this.cache_ = new Set();\n this.onSubListAdd_ = this.onSubListAdd_.bind(this);\n this.onSubListRemove_ = this.onSubListRemove_.bind(this);\n this.extract_ = extract;\n }\n get items() {\n return this.items_;\n }\n allItems() {\n return Array.from(this.cache_);\n }\n find(callback) {\n for (const item of this.allItems()) {\n if (callback(item)) {\n return item;\n }\n }\n return null;\n }\n includes(item) {\n return this.cache_.has(item);\n }\n add(item, opt_index) {\n if (this.includes(item)) {\n throw TpError.shouldNeverHappen();\n }\n const index = opt_index !== undefined ? opt_index : this.items_.length;\n this.items_.splice(index, 0, item);\n this.cache_.add(item);\n const subList = this.extract_(item);\n if (subList) {\n subList.emitter.on('add', this.onSubListAdd_);\n subList.emitter.on('remove', this.onSubListRemove_);\n subList.allItems().forEach((i) => {\n this.cache_.add(i);\n });\n }\n this.emitter.emit('add', {\n index: index,\n item: item,\n root: this,\n target: this,\n });\n }\n remove(item) {\n const index = this.items_.indexOf(item);\n if (index < 0) {\n return;\n }\n this.items_.splice(index, 1);\n this.cache_.delete(item);\n const subList = this.extract_(item);\n if (subList) {\n subList.allItems().forEach((i) => {\n this.cache_.delete(i);\n });\n subList.emitter.off('add', this.onSubListAdd_);\n subList.emitter.off('remove', this.onSubListRemove_);\n }\n this.emitter.emit('remove', {\n index: index,\n item: item,\n root: this,\n target: this,\n });\n }\n onSubListAdd_(ev) {\n this.cache_.add(ev.item);\n this.emitter.emit('add', {\n index: ev.index,\n item: ev.item,\n root: this,\n target: ev.target,\n });\n }\n onSubListRemove_(ev) {\n this.cache_.delete(ev.item);\n this.emitter.emit('remove', {\n index: ev.index,\n item: ev.item,\n root: this,\n target: ev.target,\n });\n }\n}\n","import { Emitter } from '../../../common/model/emitter.js';\nimport { TpError } from '../../../common/tp-error.js';\nimport { isContainerBladeController } from '../controller/container-blade.js';\nimport { isValueBladeController } from '../controller/value-blade.js';\nimport { NestedOrderedSet, } from './nested-ordered-set.js';\nfunction findValueBladeController(bcs, v) {\n for (let i = 0; i < bcs.length; i++) {\n const bc = bcs[i];\n if (isValueBladeController(bc) && bc.value === v) {\n return bc;\n }\n }\n return null;\n}\nfunction findSubBladeControllerSet(bc) {\n return isContainerBladeController(bc)\n ? bc.rackController.rack['bcSet_']\n : null;\n}\n/**\n * A collection of blade controllers that manages positions and event propagation.\n * @hidden\n */\nexport class Rack {\n constructor(config) {\n var _a, _b;\n this.emitter = new Emitter();\n this.onBladePositionsChange_ = this.onBladePositionsChange_.bind(this);\n this.onSetAdd_ = this.onSetAdd_.bind(this);\n this.onSetRemove_ = this.onSetRemove_.bind(this);\n this.onChildDispose_ = this.onChildDispose_.bind(this);\n this.onChildPositionsChange_ = this.onChildPositionsChange_.bind(this);\n this.onChildValueChange_ = this.onChildValueChange_.bind(this);\n this.onChildViewPropsChange_ = this.onChildViewPropsChange_.bind(this);\n this.onRackLayout_ = this.onRackLayout_.bind(this);\n this.onRackValueChange_ = this.onRackValueChange_.bind(this);\n this.blade_ = (_a = config.blade) !== null && _a !== void 0 ? _a : null;\n (_b = this.blade_) === null || _b === void 0 ? void 0 : _b.value('positions').emitter.on('change', this.onBladePositionsChange_);\n this.viewProps = config.viewProps;\n this.bcSet_ = new NestedOrderedSet(findSubBladeControllerSet);\n this.bcSet_.emitter.on('add', this.onSetAdd_);\n this.bcSet_.emitter.on('remove', this.onSetRemove_);\n }\n get children() {\n return this.bcSet_.items;\n }\n add(bc, opt_index) {\n var _a;\n (_a = bc.parent) === null || _a === void 0 ? void 0 : _a.remove(bc);\n bc.parent = this;\n this.bcSet_.add(bc, opt_index);\n }\n remove(bc) {\n bc.parent = null;\n this.bcSet_.remove(bc);\n }\n find(finder) {\n return this.bcSet_.allItems().filter(finder);\n }\n onSetAdd_(ev) {\n this.updatePositions_();\n const root = ev.target === ev.root;\n this.emitter.emit('add', {\n bladeController: ev.item,\n index: ev.index,\n root: root,\n sender: this,\n });\n if (!root) {\n return;\n }\n const bc = ev.item;\n bc.viewProps.emitter.on('change', this.onChildViewPropsChange_);\n bc.blade\n .value('positions')\n .emitter.on('change', this.onChildPositionsChange_);\n bc.viewProps.handleDispose(this.onChildDispose_);\n if (isValueBladeController(bc)) {\n bc.value.emitter.on('change', this.onChildValueChange_);\n }\n else if (isContainerBladeController(bc)) {\n const rack = bc.rackController.rack;\n if (rack) {\n const emitter = rack.emitter;\n emitter.on('layout', this.onRackLayout_);\n emitter.on('valuechange', this.onRackValueChange_);\n }\n }\n }\n onSetRemove_(ev) {\n this.updatePositions_();\n const root = ev.target === ev.root;\n this.emitter.emit('remove', {\n bladeController: ev.item,\n root: root,\n sender: this,\n });\n if (!root) {\n return;\n }\n const bc = ev.item;\n if (isValueBladeController(bc)) {\n bc.value.emitter.off('change', this.onChildValueChange_);\n }\n else if (isContainerBladeController(bc)) {\n const rack = bc.rackController.rack;\n if (rack) {\n const emitter = rack.emitter;\n emitter.off('layout', this.onRackLayout_);\n emitter.off('valuechange', this.onRackValueChange_);\n }\n }\n }\n updatePositions_() {\n const visibleItems = this.bcSet_.items.filter((bc) => !bc.viewProps.get('hidden'));\n const firstVisibleItem = visibleItems[0];\n const lastVisibleItem = visibleItems[visibleItems.length - 1];\n this.bcSet_.items.forEach((bc) => {\n const ps = [];\n if (bc === firstVisibleItem) {\n ps.push('first');\n if (!this.blade_ ||\n this.blade_.get('positions').includes('veryfirst')) {\n ps.push('veryfirst');\n }\n }\n if (bc === lastVisibleItem) {\n ps.push('last');\n if (!this.blade_ || this.blade_.get('positions').includes('verylast')) {\n ps.push('verylast');\n }\n }\n bc.blade.set('positions', ps);\n });\n }\n onChildPositionsChange_() {\n this.updatePositions_();\n this.emitter.emit('layout', {\n sender: this,\n });\n }\n onChildViewPropsChange_(_ev) {\n this.updatePositions_();\n this.emitter.emit('layout', {\n sender: this,\n });\n }\n onChildDispose_() {\n const disposedUcs = this.bcSet_.items.filter((bc) => {\n return bc.viewProps.get('disposed');\n });\n disposedUcs.forEach((bc) => {\n this.bcSet_.remove(bc);\n });\n }\n onChildValueChange_(ev) {\n const bc = findValueBladeController(this.find(isValueBladeController), ev.sender);\n if (!bc) {\n throw TpError.alreadyDisposed();\n }\n this.emitter.emit('valuechange', {\n bladeController: bc,\n options: ev.options,\n sender: this,\n });\n }\n onRackLayout_(_) {\n this.updatePositions_();\n this.emitter.emit('layout', {\n sender: this,\n });\n }\n onRackValueChange_(ev) {\n this.emitter.emit('valuechange', {\n bladeController: ev.bladeController,\n options: ev.options,\n sender: this,\n });\n }\n onBladePositionsChange_() {\n this.updatePositions_();\n }\n}\n","import { insertElementAt, removeElement } from '../../../common/dom-util.js';\nimport { Rack } from '../model/rack.js';\n/**\n * @hidden\n */\nexport class RackController {\n constructor(config) {\n this.onRackAdd_ = this.onRackAdd_.bind(this);\n this.onRackRemove_ = this.onRackRemove_.bind(this);\n this.element = config.element;\n this.viewProps = config.viewProps;\n const rack = new Rack({\n blade: config.root ? undefined : config.blade,\n viewProps: config.viewProps,\n });\n rack.emitter.on('add', this.onRackAdd_);\n rack.emitter.on('remove', this.onRackRemove_);\n this.rack = rack;\n this.viewProps.handleDispose(() => {\n for (let i = this.rack.children.length - 1; i >= 0; i--) {\n const bc = this.rack.children[i];\n bc.viewProps.set('disposed', true);\n }\n });\n }\n onRackAdd_(ev) {\n if (!ev.root) {\n return;\n }\n insertElementAt(this.element, ev.bladeController.view.element, ev.index);\n }\n onRackRemove_(ev) {\n if (!ev.root) {\n return;\n }\n removeElement(ev.bladeController.view.element);\n }\n}\n","import { ValueMap } from '../../../common/model/value-map.js';\nimport { createValue } from '../../../common/model/values.js';\nimport { deepEqualsArray } from '../../../misc/type-util.js';\nexport function createBlade() {\n return new ValueMap({\n positions: createValue([], {\n equals: deepEqualsArray,\n }),\n });\n}\n","import { disableTransitionTemporarily, forceReflow, } from '../../../common/dom-util.js';\nimport { bindValueMap } from '../../../common/model/reactive.js';\nimport { ValueMap } from '../../../common/model/value-map.js';\nimport { isEmpty } from '../../../misc/type-util.js';\n/**\n * @hidden\n */\nexport class Foldable extends ValueMap {\n constructor(valueMap) {\n super(valueMap);\n }\n static create(expanded) {\n const coreObj = {\n completed: true,\n expanded: expanded,\n expandedHeight: null,\n shouldFixHeight: false,\n temporaryExpanded: null,\n };\n const core = ValueMap.createCore(coreObj);\n return new Foldable(core);\n }\n get styleExpanded() {\n var _a;\n return (_a = this.get('temporaryExpanded')) !== null && _a !== void 0 ? _a : this.get('expanded');\n }\n get styleHeight() {\n if (!this.styleExpanded) {\n return '0';\n }\n const exHeight = this.get('expandedHeight');\n if (this.get('shouldFixHeight') && !isEmpty(exHeight)) {\n return `${exHeight}px`;\n }\n return 'auto';\n }\n bindExpandedClass(elem, expandedClassName) {\n const onExpand = () => {\n const expanded = this.styleExpanded;\n if (expanded) {\n elem.classList.add(expandedClassName);\n }\n else {\n elem.classList.remove(expandedClassName);\n }\n };\n bindValueMap(this, 'expanded', onExpand);\n bindValueMap(this, 'temporaryExpanded', onExpand);\n }\n cleanUpTransition() {\n this.set('shouldFixHeight', false);\n this.set('expandedHeight', null);\n this.set('completed', true);\n }\n}\nfunction computeExpandedFolderHeight(folder, containerElement) {\n let height = 0;\n disableTransitionTemporarily(containerElement, () => {\n // Expand folder temporarily\n folder.set('expandedHeight', null);\n folder.set('temporaryExpanded', true);\n forceReflow(containerElement);\n // Compute height\n height = containerElement.clientHeight;\n // Restore expanded\n folder.set('temporaryExpanded', null);\n forceReflow(containerElement);\n });\n return height;\n}\nfunction applyHeight(foldable, elem) {\n elem.style.height = foldable.styleHeight;\n}\nexport function bindFoldable(foldable, elem) {\n foldable.value('expanded').emitter.on('beforechange', () => {\n foldable.set('completed', false);\n if (isEmpty(foldable.get('expandedHeight'))) {\n const h = computeExpandedFolderHeight(foldable, elem);\n if (h > 0) {\n foldable.set('expandedHeight', h);\n }\n }\n foldable.set('shouldFixHeight', true);\n forceReflow(elem);\n });\n foldable.emitter.on('change', () => {\n applyHeight(foldable, elem);\n });\n applyHeight(foldable, elem);\n elem.addEventListener('transitionend', (ev) => {\n if (ev.propertyName !== 'height') {\n return;\n }\n foldable.cleanUpTransition();\n });\n}\n","import { Emitter } from '../../../common/model/emitter.js';\nimport { ContainerBladeApi } from '../../common/api/container-blade.js';\nimport { TpFoldEvent } from '../../common/api/tp-event.js';\nexport class FolderApi extends ContainerBladeApi {\n /**\n * @hidden\n */\n constructor(controller, pool) {\n super(controller, pool);\n this.emitter_ = new Emitter();\n this.controller.foldable\n .value('expanded')\n .emitter.on('change', (ev) => {\n this.emitter_.emit('fold', new TpFoldEvent(this, ev.sender.rawValue));\n });\n this.rackApi_.on('change', (ev) => {\n this.emitter_.emit('change', ev);\n });\n }\n get expanded() {\n return this.controller.foldable.get('expanded');\n }\n set expanded(expanded) {\n this.controller.foldable.set('expanded', expanded);\n }\n get title() {\n return this.controller.props.get('title');\n }\n set title(title) {\n this.controller.props.set('title', title);\n }\n get children() {\n return this.rackApi_.children;\n }\n addBinding(object, key, opt_params) {\n return this.rackApi_.addBinding(object, key, opt_params);\n }\n addFolder(params) {\n return this.rackApi_.addFolder(params);\n }\n addButton(params) {\n return this.rackApi_.addButton(params);\n }\n addTab(params) {\n return this.rackApi_.addTab(params);\n }\n add(api, opt_index) {\n return this.rackApi_.add(api, opt_index);\n }\n remove(api) {\n this.rackApi_.remove(api);\n }\n addBlade(params) {\n return this.rackApi_.addBlade(params);\n }\n /**\n * Adds a global event listener. It handles all events of child inputs/monitors.\n * @param eventName The event name to listen.\n * @param handler The event handler.\n * @return The API object itself.\n */\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n /**\n * Removes a global event listener.\n * @param eventName The event name to listen.\n * @param handler The event handler.\n * @returns The API object itself.\n */\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n}\n","import { ClassName } from '../../../common/view/class-name.js';\nexport const bladeContainerClassName = ClassName('cnt');\n","import { bindValueMap } from '../../../common/model/reactive.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nimport { bindValueToTextContent, valueToClassName, } from '../../../common/view/reactive.js';\nimport { isEmpty } from '../../../misc/type-util.js';\nimport { bladeContainerClassName } from '../../common/view/blade-container.js';\n/**\n * @hidden\n */\nexport class FolderView {\n constructor(doc, config) {\n var _a;\n this.className_ = ClassName((_a = config.viewName) !== null && _a !== void 0 ? _a : 'fld');\n this.element = doc.createElement('div');\n this.element.classList.add(this.className_(), bladeContainerClassName());\n config.viewProps.bindClassModifiers(this.element);\n this.foldable_ = config.foldable;\n this.foldable_.bindExpandedClass(this.element, this.className_(undefined, 'expanded'));\n bindValueMap(this.foldable_, 'completed', valueToClassName(this.element, this.className_(undefined, 'cpl')));\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(this.className_('b'));\n bindValueMap(config.props, 'title', (title) => {\n if (isEmpty(title)) {\n this.element.classList.add(this.className_(undefined, 'not'));\n }\n else {\n this.element.classList.remove(this.className_(undefined, 'not'));\n }\n });\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const indentElem = doc.createElement('div');\n indentElem.classList.add(this.className_('i'));\n this.element.appendChild(indentElem);\n const titleElem = doc.createElement('div');\n titleElem.classList.add(this.className_('t'));\n bindValueToTextContent(config.props.value('title'), titleElem);\n this.buttonElement.appendChild(titleElem);\n this.titleElement = titleElem;\n const markElem = doc.createElement('div');\n markElem.classList.add(this.className_('m'));\n this.buttonElement.appendChild(markElem);\n const containerElem = doc.createElement('div');\n containerElem.classList.add(this.className_('c'));\n this.element.appendChild(containerElem);\n this.containerElement = containerElem;\n }\n}\n","import { exportBladeState, importBladeState, } from '../../common/controller/blade-state.js';\nimport { ContainerBladeController } from '../../common/controller/container-blade.js';\nimport { RackController } from '../../common/controller/rack.js';\nimport { bindFoldable, Foldable } from '../../common/model/foldable.js';\nimport { FolderView } from '../view/folder.js';\n/**\n * @hidden\n */\nexport class FolderController extends ContainerBladeController {\n /**\n * @hidden\n */\n constructor(doc, config) {\n var _a;\n const foldable = Foldable.create((_a = config.expanded) !== null && _a !== void 0 ? _a : true);\n const view = new FolderView(doc, {\n foldable: foldable,\n props: config.props,\n viewName: config.root ? 'rot' : undefined,\n viewProps: config.viewProps,\n });\n super(Object.assign(Object.assign({}, config), { rackController: new RackController({\n blade: config.blade,\n element: view.containerElement,\n root: config.root,\n viewProps: config.viewProps,\n }), view: view }));\n this.onTitleClick_ = this.onTitleClick_.bind(this);\n this.props = config.props;\n this.foldable = foldable;\n bindFoldable(this.foldable, this.view.containerElement);\n // Clean up transition manually\n // Toggling `expanded` doesn't fire transition events in some cases\n // (e.g. expanding empty folder: 0px -> 0px)\n this.rackController.rack.emitter.on('add', () => {\n this.foldable.cleanUpTransition();\n });\n this.rackController.rack.emitter.on('remove', () => {\n this.foldable.cleanUpTransition();\n });\n this.view.buttonElement.addEventListener('click', this.onTitleClick_);\n }\n get document() {\n return this.view.element.ownerDocument;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s), (p) => ({\n expanded: p.required.boolean,\n title: p.optional.string,\n }), (result) => {\n this.foldable.set('expanded', result.expanded);\n this.props.set('title', result.title);\n return true;\n });\n }\n exportState() {\n return exportBladeState(() => super.exportState(), {\n expanded: this.foldable.get('expanded'),\n title: this.props.get('title'),\n });\n }\n onTitleClick_() {\n this.foldable.set('expanded', !this.foldable.get('expanded'));\n }\n}\n","import { parseRecord } from '../../common/micro-parsers.js';\nimport { ValueMap } from '../../common/model/value-map.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { FolderApi } from './api/folder.js';\nimport { FolderController } from './controller/folder.js';\nexport const FolderBladePlugin = createPlugin({\n id: 'folder',\n type: 'blade',\n accept(params) {\n const result = parseRecord(params, (p) => ({\n title: p.required.string,\n view: p.required.constant('folder'),\n expanded: p.optional.boolean,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n return new FolderController(args.document, {\n blade: args.blade,\n expanded: args.params.expanded,\n props: ValueMap.fromObject({\n title: args.params.title,\n }),\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (!(args.controller instanceof FolderController)) {\n return null;\n }\n return new FolderApi(args.controller, args.pool);\n },\n});\n","import { ClassName } from '../view/class-name.js';\nimport { valueToClassName } from '../view/reactive.js';\nimport { bindValue, bindValueMap } from './reactive.js';\nimport { ValueMap } from './value-map.js';\nimport { createReadonlyValue, createValue } from './values.js';\nconst cn = ClassName('');\nfunction valueToModifier(elem, modifier) {\n return valueToClassName(elem, cn(undefined, modifier));\n}\nexport class ViewProps extends ValueMap {\n /**\n * @hidden\n */\n constructor(valueMap) {\n var _a;\n super(valueMap);\n this.onDisabledChange_ = this.onDisabledChange_.bind(this);\n this.onParentChange_ = this.onParentChange_.bind(this);\n this.onParentGlobalDisabledChange_ =\n this.onParentGlobalDisabledChange_.bind(this);\n [this.globalDisabled_, this.setGlobalDisabled_] = createReadonlyValue(createValue(this.getGlobalDisabled_()));\n this.value('disabled').emitter.on('change', this.onDisabledChange_);\n this.value('parent').emitter.on('change', this.onParentChange_);\n (_a = this.get('parent')) === null || _a === void 0 ? void 0 : _a.globalDisabled.emitter.on('change', this.onParentGlobalDisabledChange_);\n }\n static create(opt_initialValue) {\n var _a, _b, _c;\n const initialValue = opt_initialValue !== null && opt_initialValue !== void 0 ? opt_initialValue : {};\n return new ViewProps(ValueMap.createCore({\n disabled: (_a = initialValue.disabled) !== null && _a !== void 0 ? _a : false,\n disposed: false,\n hidden: (_b = initialValue.hidden) !== null && _b !== void 0 ? _b : false,\n parent: (_c = initialValue.parent) !== null && _c !== void 0 ? _c : null,\n }));\n }\n get globalDisabled() {\n return this.globalDisabled_;\n }\n bindClassModifiers(elem) {\n bindValue(this.globalDisabled_, valueToModifier(elem, 'disabled'));\n bindValueMap(this, 'hidden', valueToModifier(elem, 'hidden'));\n }\n bindDisabled(target) {\n bindValue(this.globalDisabled_, (disabled) => {\n target.disabled = disabled;\n });\n }\n bindTabIndex(elem) {\n bindValue(this.globalDisabled_, (disabled) => {\n elem.tabIndex = disabled ? -1 : 0;\n });\n }\n handleDispose(callback) {\n this.value('disposed').emitter.on('change', (disposed) => {\n if (disposed) {\n callback();\n }\n });\n }\n importState(state) {\n this.set('disabled', state.disabled);\n this.set('hidden', state.hidden);\n }\n exportState() {\n return {\n disabled: this.get('disabled'),\n hidden: this.get('hidden'),\n };\n }\n /**\n * Gets a global disabled of the view.\n * Disabled of the view will be affected by its disabled and its parent disabled.\n */\n getGlobalDisabled_() {\n const parent = this.get('parent');\n const parentDisabled = parent ? parent.globalDisabled.rawValue : false;\n return parentDisabled || this.get('disabled');\n }\n updateGlobalDisabled_() {\n this.setGlobalDisabled_(this.getGlobalDisabled_());\n }\n onDisabledChange_() {\n this.updateGlobalDisabled_();\n }\n onParentGlobalDisabledChange_() {\n this.updateGlobalDisabled_();\n }\n onParentChange_(ev) {\n var _a;\n const prevParent = ev.previousRawValue;\n prevParent === null || prevParent === void 0 ? void 0 : prevParent.globalDisabled.emitter.off('change', this.onParentGlobalDisabledChange_);\n (_a = this.get('parent')) === null || _a === void 0 ? void 0 : _a.globalDisabled.emitter.on('change', this.onParentGlobalDisabledChange_);\n this.updateGlobalDisabled_();\n }\n}\n","import { ClassName } from '../../../common/view/class-name.js';\nconst cn = ClassName('tbp');\n/**\n * @hidden\n */\nexport class TabPageView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const containerElem = doc.createElement('div');\n containerElem.classList.add(cn('c'));\n this.element.appendChild(containerElem);\n this.containerElement = containerElem;\n }\n}\n","import { bindValueMap } from '../../../common/model/reactive.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nimport { bindValueToTextContent } from '../../../common/view/reactive.js';\nconst cn = ClassName('tbi');\n/**\n * @hidden\n */\nexport class TabItemView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n bindValueMap(config.props, 'selected', (selected) => {\n if (selected) {\n this.element.classList.add(cn(undefined, 'sel'));\n }\n else {\n this.element.classList.remove(cn(undefined, 'sel'));\n }\n });\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn('b'));\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const titleElem = doc.createElement('div');\n titleElem.classList.add(cn('t'));\n bindValueToTextContent(config.props.value('title'), titleElem);\n this.buttonElement.appendChild(titleElem);\n this.titleElement = titleElem;\n }\n}\n","import { Emitter } from '../../../common/model/emitter.js';\nimport { TabItemView } from '../view/tab-item.js';\n/**\n * @hidden\n */\nexport class TabItemController {\n constructor(doc, config) {\n this.emitter = new Emitter();\n this.onClick_ = this.onClick_.bind(this);\n this.props = config.props;\n this.viewProps = config.viewProps;\n this.view = new TabItemView(doc, {\n props: config.props,\n viewProps: config.viewProps,\n });\n this.view.buttonElement.addEventListener('click', this.onClick_);\n }\n onClick_() {\n this.emitter.emit('click', {\n sender: this,\n });\n }\n}\n","import { bindValueMap } from '../../../common/model/reactive.js';\nimport { ViewProps } from '../../../common/model/view-props.js';\nimport { exportBladeState, importBladeState, } from '../../common/controller/blade-state.js';\nimport { ContainerBladeController } from '../../common/controller/container-blade.js';\nimport { RackController } from '../../common/controller/rack.js';\nimport { TabPageView } from '../view/tab-page.js';\nimport { TabItemController } from './tab-item.js';\n/**\n * @hidden\n */\nexport class TabPageController extends ContainerBladeController {\n constructor(doc, config) {\n const view = new TabPageView(doc, {\n viewProps: config.viewProps,\n });\n super(Object.assign(Object.assign({}, config), { rackController: new RackController({\n blade: config.blade,\n element: view.containerElement,\n viewProps: config.viewProps,\n }), view: view }));\n this.onItemClick_ = this.onItemClick_.bind(this);\n this.ic_ = new TabItemController(doc, {\n props: config.itemProps,\n viewProps: ViewProps.create(),\n });\n this.ic_.emitter.on('click', this.onItemClick_);\n this.props = config.props;\n bindValueMap(this.props, 'selected', (selected) => {\n this.itemController.props.set('selected', selected);\n this.viewProps.set('hidden', !selected);\n });\n }\n get itemController() {\n return this.ic_;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s), (p) => ({\n selected: p.required.boolean,\n title: p.required.string,\n }), (result) => {\n this.ic_.props.set('selected', result.selected);\n this.ic_.props.set('title', result.title);\n return true;\n });\n }\n exportState() {\n return exportBladeState(() => super.exportState(), {\n selected: this.ic_.props.get('selected'),\n title: this.ic_.props.get('title'),\n });\n }\n onItemClick_() {\n this.props.set('selected', true);\n }\n}\n","import { Emitter } from '../../../common/model/emitter.js';\nimport { ValueMap } from '../../../common/model/value-map.js';\nimport { ViewProps } from '../../../common/model/view-props.js';\nimport { ContainerBladeApi } from '../../common/api/container-blade.js';\nimport { TpTabSelectEvent } from '../../common/api/tp-event.js';\nimport { createBlade } from '../../common/model/blade.js';\nimport { TabPageController } from '../controller/tab-page.js';\nexport class TabApi extends ContainerBladeApi {\n /**\n * @hidden\n */\n constructor(controller, pool) {\n super(controller, pool);\n this.emitter_ = new Emitter();\n this.onSelect_ = this.onSelect_.bind(this);\n this.pool_ = pool;\n this.rackApi_.on('change', (ev) => {\n this.emitter_.emit('change', ev);\n });\n this.controller.tab.selectedIndex.emitter.on('change', this.onSelect_);\n }\n get pages() {\n return this.rackApi_.children;\n }\n addPage(params) {\n const doc = this.controller.view.element.ownerDocument;\n const pc = new TabPageController(doc, {\n blade: createBlade(),\n itemProps: ValueMap.fromObject({\n selected: false,\n title: params.title,\n }),\n props: ValueMap.fromObject({\n selected: false,\n }),\n viewProps: ViewProps.create(),\n });\n const papi = this.pool_.createApi(pc);\n return this.rackApi_.add(papi, params.index);\n }\n removePage(index) {\n this.rackApi_.remove(this.rackApi_.children[index]);\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n onSelect_(ev) {\n this.emitter_.emit('select', new TpTabSelectEvent(this, ev.rawValue));\n }\n}\n","import { ContainerBladeApi } from '../../common/api/container-blade.js';\nexport class TabPageApi extends ContainerBladeApi {\n get title() {\n var _a;\n return (_a = this.controller.itemController.props.get('title')) !== null && _a !== void 0 ? _a : '';\n }\n set title(title) {\n this.controller.itemController.props.set('title', title);\n }\n get selected() {\n return this.controller.props.get('selected');\n }\n set selected(selected) {\n this.controller.props.set('selected', selected);\n }\n get children() {\n return this.rackApi_.children;\n }\n addButton(params) {\n return this.rackApi_.addButton(params);\n }\n addFolder(params) {\n return this.rackApi_.addFolder(params);\n }\n addTab(params) {\n return this.rackApi_.addTab(params);\n }\n add(api, opt_index) {\n this.rackApi_.add(api, opt_index);\n }\n remove(api) {\n this.rackApi_.remove(api);\n }\n addBinding(object, key, opt_params) {\n return this.rackApi_.addBinding(object, key, opt_params);\n }\n addBlade(params) {\n return this.rackApi_.addBlade(params);\n }\n}\n","import { createValue } from '../../../common/model/values.js';\nconst INDEX_NOT_SELECTED = -1;\n/**\n * @hidden\n */\nexport class Tab {\n constructor() {\n this.onItemSelectedChange_ = this.onItemSelectedChange_.bind(this);\n this.empty = createValue(true);\n this.selectedIndex = createValue(INDEX_NOT_SELECTED);\n this.items_ = [];\n }\n add(item, opt_index) {\n const index = opt_index !== null && opt_index !== void 0 ? opt_index : this.items_.length;\n this.items_.splice(index, 0, item);\n item.emitter.on('change', this.onItemSelectedChange_);\n this.keepSelection_();\n }\n remove(item) {\n const index = this.items_.indexOf(item);\n if (index < 0) {\n return;\n }\n this.items_.splice(index, 1);\n item.emitter.off('change', this.onItemSelectedChange_);\n this.keepSelection_();\n }\n keepSelection_() {\n if (this.items_.length === 0) {\n this.selectedIndex.rawValue = INDEX_NOT_SELECTED;\n this.empty.rawValue = true;\n return;\n }\n const firstSelIndex = this.items_.findIndex((s) => s.rawValue);\n if (firstSelIndex < 0) {\n this.items_.forEach((s, i) => {\n s.rawValue = i === 0;\n });\n this.selectedIndex.rawValue = 0;\n }\n else {\n this.items_.forEach((s, i) => {\n s.rawValue = i === firstSelIndex;\n });\n this.selectedIndex.rawValue = firstSelIndex;\n }\n this.empty.rawValue = false;\n }\n onItemSelectedChange_(ev) {\n if (ev.rawValue) {\n const index = this.items_.findIndex((s) => s === ev.sender);\n this.items_.forEach((s, i) => {\n s.rawValue = i === index;\n });\n this.selectedIndex.rawValue = index;\n }\n else {\n this.keepSelection_();\n }\n }\n}\n","import { bindValue } from '../../../common/model/reactive.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nimport { valueToClassName } from '../../../common/view/reactive.js';\nimport { bladeContainerClassName } from '../../common/view/blade-container.js';\nconst cn = ClassName('tab');\n/**\n * @hidden\n */\nexport class TabView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn(), bladeContainerClassName());\n config.viewProps.bindClassModifiers(this.element);\n bindValue(config.empty, valueToClassName(this.element, cn(undefined, 'nop')));\n const titleElem = doc.createElement('div');\n titleElem.classList.add(cn('t'));\n this.element.appendChild(titleElem);\n this.itemsElement = titleElem;\n const indentElem = doc.createElement('div');\n indentElem.classList.add(cn('i'));\n this.element.appendChild(indentElem);\n const contentsElem = doc.createElement('div');\n contentsElem.classList.add(cn('c'));\n this.element.appendChild(contentsElem);\n this.contentsElement = contentsElem;\n }\n}\n","import { insertElementAt, removeElement } from '../../../common/dom-util.js';\nimport { ContainerBladeController } from '../../common/controller/container-blade.js';\nimport { RackController } from '../../common/controller/rack.js';\nimport { Tab } from '../model/tab.js';\nimport { TabView } from '../view/tab.js';\n/**\n * @hidden\n */\nexport class TabController extends ContainerBladeController {\n constructor(doc, config) {\n const tab = new Tab();\n const view = new TabView(doc, {\n empty: tab.empty,\n viewProps: config.viewProps,\n });\n super({\n blade: config.blade,\n rackController: new RackController({\n blade: config.blade,\n element: view.contentsElement,\n viewProps: config.viewProps,\n }),\n view: view,\n });\n this.onRackAdd_ = this.onRackAdd_.bind(this);\n this.onRackRemove_ = this.onRackRemove_.bind(this);\n const rack = this.rackController.rack;\n rack.emitter.on('add', this.onRackAdd_);\n rack.emitter.on('remove', this.onRackRemove_);\n this.tab = tab;\n }\n add(pc, opt_index) {\n this.rackController.rack.add(pc, opt_index);\n }\n remove(index) {\n this.rackController.rack.remove(this.rackController.rack.children[index]);\n }\n onRackAdd_(ev) {\n if (!ev.root) {\n return;\n }\n const pc = ev.bladeController;\n insertElementAt(this.view.itemsElement, pc.itemController.view.element, ev.index);\n pc.itemController.viewProps.set('parent', this.viewProps);\n this.tab.add(pc.props.value('selected'));\n }\n onRackRemove_(ev) {\n if (!ev.root) {\n return;\n }\n const pc = ev.bladeController;\n removeElement(pc.itemController.view.element);\n pc.itemController.viewProps.set('parent', null);\n this.tab.remove(pc.props.value('selected'));\n }\n}\n","import { parseRecord } from '../../common/micro-parsers.js';\nimport { ValueMap } from '../../common/model/value-map.js';\nimport { ViewProps } from '../../common/model/view-props.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { createBlade } from '../common/model/blade.js';\nimport { TabApi } from './api/tab.js';\nimport { TabPageApi } from './api/tab-page.js';\nimport { TabController } from './controller/tab.js';\nimport { TabPageController } from './controller/tab-page.js';\nexport const TabBladePlugin = createPlugin({\n id: 'tab',\n type: 'blade',\n accept(params) {\n const result = parseRecord(params, (p) => ({\n pages: p.required.array(p.required.object({ title: p.required.string })),\n view: p.required.constant('tab'),\n }));\n if (!result || result.pages.length === 0) {\n return null;\n }\n return { params: result };\n },\n controller(args) {\n const c = new TabController(args.document, {\n blade: args.blade,\n viewProps: args.viewProps,\n });\n args.params.pages.forEach((p) => {\n const pc = new TabPageController(args.document, {\n blade: createBlade(),\n itemProps: ValueMap.fromObject({\n selected: false,\n title: p.title,\n }),\n props: ValueMap.fromObject({\n selected: false,\n }),\n viewProps: ViewProps.create(),\n });\n c.add(pc);\n });\n return c;\n },\n api(args) {\n if (args.controller instanceof TabController) {\n return new TabApi(args.controller, args.pool);\n }\n if (args.controller instanceof TabPageController) {\n return new TabPageApi(args.controller, args.pool);\n }\n return null;\n },\n});\n","import { BindingApi } from '../../blade/binding/api/binding.js';\nexport class ListInputBindingApi extends BindingApi {\n get options() {\n return this.controller.valueController.props.get('options');\n }\n set options(options) {\n this.controller.valueController.props.set('options', options);\n }\n}\n","/**\n * A constraint to combine multiple constraints.\n * @template T The type of the value.\n */\nexport class CompositeConstraint {\n constructor(constraints) {\n this.constraints = constraints;\n }\n constrain(value) {\n return this.constraints.reduce((result, c) => {\n return c.constrain(result);\n }, value);\n }\n}\nexport function findConstraint(c, constraintClass) {\n if (c instanceof constraintClass) {\n return c;\n }\n if (c instanceof CompositeConstraint) {\n const result = c.constraints.reduce((tmpResult, sc) => {\n if (tmpResult) {\n return tmpResult;\n }\n return sc instanceof constraintClass ? sc : null;\n }, null);\n if (result) {\n return result;\n }\n }\n return null;\n}\n","import { ValueMap } from '../model/value-map.js';\n/**\n * A list constranit.\n * @template T The type of the value.\n */\nexport class ListConstraint {\n constructor(options) {\n this.values = ValueMap.fromObject({\n options: options,\n });\n }\n constrain(value) {\n const opts = this.values.get('options');\n if (opts.length === 0) {\n return value;\n }\n const matched = opts.filter((item) => {\n return item.value === value;\n }).length > 0;\n return matched ? value : opts[0].value;\n }\n}\n","import { forceCast, isEmpty } from '../misc/type-util.js';\nimport { ListConstraint } from './constraint/list.js';\nimport { MicroParsers, parseRecord } from './micro-parsers.js';\nexport function parseListOptions(value) {\n var _a;\n const p = MicroParsers;\n if (Array.isArray(value)) {\n return (_a = parseRecord({ items: value }, (p) => ({\n items: p.required.array(p.required.object({\n text: p.required.string,\n value: p.required.raw,\n })),\n }))) === null || _a === void 0 ? void 0 : _a.items;\n }\n if (typeof value === 'object') {\n return p.required.raw(value)\n .value;\n }\n return undefined;\n}\nexport function normalizeListOptions(options) {\n if (Array.isArray(options)) {\n return options;\n }\n const items = [];\n Object.keys(options).forEach((text) => {\n items.push({ text: text, value: options[text] });\n });\n return items;\n}\n/**\n * Tries to create a list constraint.\n * @template T The type of the raw value.\n * @param options The list options.\n * @return A constraint or null if not found.\n */\nexport function createListConstraint(options) {\n return !isEmpty(options)\n ? new ListConstraint(normalizeListOptions(forceCast(options)))\n : null;\n}\n","import { createSvgIconElement, removeChildElements } from '../dom-util.js';\nimport { bindValueMap } from '../model/reactive.js';\nimport { ClassName } from './class-name.js';\nconst cn = ClassName('lst');\n/**\n * @hidden\n */\nexport class ListView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.props_ = config.props;\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const selectElem = doc.createElement('select');\n selectElem.classList.add(cn('s'));\n config.viewProps.bindDisabled(selectElem);\n this.element.appendChild(selectElem);\n this.selectElement = selectElem;\n const markElem = doc.createElement('div');\n markElem.classList.add(cn('m'));\n markElem.appendChild(createSvgIconElement(doc, 'dropdown'));\n this.element.appendChild(markElem);\n config.value.emitter.on('change', this.onValueChange_);\n this.value_ = config.value;\n bindValueMap(this.props_, 'options', (opts) => {\n removeChildElements(this.selectElement);\n opts.forEach((item) => {\n const optionElem = doc.createElement('option');\n optionElem.textContent = item.text;\n this.selectElement.appendChild(optionElem);\n });\n this.update_();\n });\n }\n update_() {\n const values = this.props_.get('options').map((o) => o.value);\n this.selectElement.selectedIndex = values.indexOf(this.value_.rawValue);\n }\n onValueChange_() {\n this.update_();\n }\n}\n","import { exportBladeState, importBladeState, } from '../../blade/common/controller/blade-state.js';\nimport { forceCast } from '../../misc/type-util.js';\nimport { normalizeListOptions, parseListOptions } from '../list-util.js';\nimport { ListView } from '../view/list.js';\n/**\n * @hidden\n */\nexport class ListController {\n constructor(doc, config) {\n this.onSelectChange_ = this.onSelectChange_.bind(this);\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new ListView(doc, {\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.selectElement.addEventListener('change', this.onSelectChange_);\n }\n onSelectChange_(e) {\n const selectElem = forceCast(e.currentTarget);\n this.value.rawValue =\n this.props.get('options')[selectElem.selectedIndex].value;\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n options: p.required.custom(parseListOptions),\n }), (result) => {\n this.props.set('options', normalizeListOptions(result.options));\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n options: this.props.get('options'),\n });\n }\n}\n","import { bindValue } from '../model/reactive.js';\nimport { ClassName } from './class-name.js';\nimport { valueToClassName } from './reactive.js';\nconst cn = ClassName('pop');\n/**\n * @hidden\n */\nexport class PopupView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n bindValue(config.shows, valueToClassName(this.element, cn(undefined, 'v')));\n }\n}\n","import { createValue } from '../model/values.js';\nimport { PopupView } from '../view/popup.js';\nexport class PopupController {\n constructor(doc, config) {\n this.shows = createValue(false);\n this.viewProps = config.viewProps;\n this.view = new PopupView(doc, {\n shows: this.shows,\n viewProps: this.viewProps,\n });\n }\n}\n","import { ClassName } from './class-name.js';\nconst cn = ClassName('txt');\n/**\n * @hidden\n */\nexport class TextView {\n constructor(doc, config) {\n this.onChange_ = this.onChange_.bind(this);\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onChange_);\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn('i'));\n inputElem.type = 'text';\n config.viewProps.bindDisabled(inputElem);\n this.element.appendChild(inputElem);\n this.inputElement = inputElem;\n config.value.emitter.on('change', this.onChange_);\n this.value_ = config.value;\n this.refresh();\n }\n refresh() {\n const formatter = this.props_.get('formatter');\n this.inputElement.value = formatter(this.value_.rawValue);\n }\n onChange_() {\n this.refresh();\n }\n}\n","import { forceCast, isEmpty } from '../../misc/type-util.js';\nimport { TextView } from '../view/text.js';\n/**\n * @hidden\n */\nexport class TextController {\n constructor(doc, config) {\n this.onInputChange_ = this.onInputChange_.bind(this);\n this.parser_ = config.parser;\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new TextView(doc, {\n props: config.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.inputElement.addEventListener('change', this.onInputChange_);\n }\n onInputChange_(e) {\n const inputElem = forceCast(e.currentTarget);\n const value = inputElem.value;\n const parsedValue = this.parser_(value);\n if (!isEmpty(parsedValue)) {\n this.value.rawValue = parsedValue;\n }\n this.view.refresh();\n }\n}\n","export function boolToString(value) {\n return String(value);\n}\nexport function boolFromUnknown(value) {\n if (value === 'false') {\n return false;\n }\n return !!value;\n}\nexport function BooleanFormatter(value) {\n return boolToString(value);\n}\n","export function composeParsers(parsers) {\n return (text) => {\n return parsers.reduce((result, parser) => {\n if (result !== null) {\n return result;\n }\n return parser(text);\n }, null);\n };\n}\n","import { createNumberFormatter } from './number.js';\nconst innerFormatter = createNumberFormatter(0);\nexport function formatPercentage(value) {\n return innerFormatter(value) + '%';\n}\n","export function stringFromUnknown(value) {\n return String(value);\n}\nexport function formatString(value) {\n return value;\n}\n","/**\n * Synchronizes two values.\n */\nexport function connectValues({ primary, secondary, forward, backward, }) {\n // Prevents an event firing loop\n // e.g.\n // primary changed\n // -> applies changes to secondary\n // -> secondary changed\n // -> applies changes to primary\n // -> ...\n let changing = false;\n function preventFeedback(callback) {\n if (changing) {\n return;\n }\n changing = true;\n callback();\n changing = false;\n }\n primary.emitter.on('change', (ev) => {\n preventFeedback(() => {\n secondary.setRawValue(forward(primary.rawValue, secondary.rawValue), ev.options);\n });\n });\n secondary.emitter.on('change', (ev) => {\n preventFeedback(() => {\n primary.setRawValue(backward(primary.rawValue, secondary.rawValue), ev.options);\n });\n // Re-update secondary value\n // to apply change from constraint of primary value\n preventFeedback(() => {\n secondary.setRawValue(forward(primary.rawValue, secondary.rawValue), ev.options);\n });\n });\n preventFeedback(() => {\n secondary.setRawValue(forward(primary.rawValue, secondary.rawValue), {\n forceEmit: false,\n last: true,\n });\n });\n}\n","export function getStepForKey(keyScale, keys) {\n const step = keyScale * (keys.altKey ? 0.1 : 1) * (keys.shiftKey ? 10 : 1);\n if (keys.upKey) {\n return +step;\n }\n else if (keys.downKey) {\n return -step;\n }\n return 0;\n}\nexport function getVerticalStepKeys(ev) {\n return {\n altKey: ev.altKey,\n downKey: ev.key === 'ArrowDown',\n shiftKey: ev.shiftKey,\n upKey: ev.key === 'ArrowUp',\n };\n}\nexport function getHorizontalStepKeys(ev) {\n return {\n altKey: ev.altKey,\n downKey: ev.key === 'ArrowLeft',\n shiftKey: ev.shiftKey,\n upKey: ev.key === 'ArrowRight',\n };\n}\nexport function isVerticalArrowKey(key) {\n return key === 'ArrowUp' || key === 'ArrowDown';\n}\nexport function isArrowKey(key) {\n return isVerticalArrowKey(key) || key === 'ArrowLeft' || key === 'ArrowRight';\n}\n","import { Emitter } from '../model/emitter.js';\nfunction computeOffset(ev, elem) {\n var _a, _b;\n // NOTE: OffsetX/Y should be computed from page and window properties to capture mouse events\n const win = elem.ownerDocument.defaultView;\n const rect = elem.getBoundingClientRect();\n return {\n x: ev.pageX - (((_a = (win && win.scrollX)) !== null && _a !== void 0 ? _a : 0) + rect.left),\n y: ev.pageY - (((_b = (win && win.scrollY)) !== null && _b !== void 0 ? _b : 0) + rect.top),\n };\n}\n/**\n * A utility class to handle both mouse and touch events.\n */\nexport class PointerHandler {\n /**\n * @hidden\n */\n constructor(element) {\n this.lastTouch_ = null;\n this.onDocumentMouseMove_ = this.onDocumentMouseMove_.bind(this);\n this.onDocumentMouseUp_ = this.onDocumentMouseUp_.bind(this);\n this.onMouseDown_ = this.onMouseDown_.bind(this);\n this.onTouchEnd_ = this.onTouchEnd_.bind(this);\n this.onTouchMove_ = this.onTouchMove_.bind(this);\n this.onTouchStart_ = this.onTouchStart_.bind(this);\n this.elem_ = element;\n this.emitter = new Emitter();\n element.addEventListener('touchstart', this.onTouchStart_, {\n passive: false,\n });\n element.addEventListener('touchmove', this.onTouchMove_, {\n passive: true,\n });\n element.addEventListener('touchend', this.onTouchEnd_);\n element.addEventListener('mousedown', this.onMouseDown_);\n }\n computePosition_(offset) {\n const rect = this.elem_.getBoundingClientRect();\n return {\n bounds: {\n width: rect.width,\n height: rect.height,\n },\n point: offset\n ? {\n x: offset.x,\n y: offset.y,\n }\n : null,\n };\n }\n onMouseDown_(ev) {\n var _a;\n // Prevent native text selection\n ev.preventDefault();\n (_a = ev.currentTarget) === null || _a === void 0 ? void 0 : _a.focus();\n const doc = this.elem_.ownerDocument;\n doc.addEventListener('mousemove', this.onDocumentMouseMove_);\n doc.addEventListener('mouseup', this.onDocumentMouseUp_);\n this.emitter.emit('down', {\n altKey: ev.altKey,\n data: this.computePosition_(computeOffset(ev, this.elem_)),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n onDocumentMouseMove_(ev) {\n this.emitter.emit('move', {\n altKey: ev.altKey,\n data: this.computePosition_(computeOffset(ev, this.elem_)),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n onDocumentMouseUp_(ev) {\n const doc = this.elem_.ownerDocument;\n doc.removeEventListener('mousemove', this.onDocumentMouseMove_);\n doc.removeEventListener('mouseup', this.onDocumentMouseUp_);\n this.emitter.emit('up', {\n altKey: ev.altKey,\n data: this.computePosition_(computeOffset(ev, this.elem_)),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n onTouchStart_(ev) {\n // Prevent native page scroll\n ev.preventDefault();\n const touch = ev.targetTouches.item(0);\n const rect = this.elem_.getBoundingClientRect();\n this.emitter.emit('down', {\n altKey: ev.altKey,\n data: this.computePosition_(touch\n ? {\n x: touch.clientX - rect.left,\n y: touch.clientY - rect.top,\n }\n : undefined),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n this.lastTouch_ = touch;\n }\n onTouchMove_(ev) {\n const touch = ev.targetTouches.item(0);\n const rect = this.elem_.getBoundingClientRect();\n this.emitter.emit('move', {\n altKey: ev.altKey,\n data: this.computePosition_(touch\n ? {\n x: touch.clientX - rect.left,\n y: touch.clientY - rect.top,\n }\n : undefined),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n this.lastTouch_ = touch;\n }\n onTouchEnd_(ev) {\n var _a;\n const touch = (_a = ev.targetTouches.item(0)) !== null && _a !== void 0 ? _a : this.lastTouch_;\n const rect = this.elem_.getBoundingClientRect();\n this.emitter.emit('up', {\n altKey: ev.altKey,\n data: this.computePosition_(touch\n ? {\n x: touch.clientX - rect.left,\n y: touch.clientY - rect.top,\n }\n : undefined),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n}\n","import { SVG_NS } from '../../../common/dom-util.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nimport { constrainRange } from '../util.js';\nconst cn = ClassName('txt');\n/**\n * @hidden\n */\nexport class NumberTextView {\n constructor(doc, config) {\n this.onChange_ = this.onChange_.bind(this);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn(), cn(undefined, 'num'));\n if (config.arrayPosition) {\n this.element.classList.add(cn(undefined, config.arrayPosition));\n }\n config.viewProps.bindClassModifiers(this.element);\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn('i'));\n inputElem.type = 'text';\n config.viewProps.bindDisabled(inputElem);\n this.element.appendChild(inputElem);\n this.inputElement = inputElem;\n this.onDraggingChange_ = this.onDraggingChange_.bind(this);\n this.dragging_ = config.dragging;\n this.dragging_.emitter.on('change', this.onDraggingChange_);\n this.element.classList.add(cn());\n this.inputElement.classList.add(cn('i'));\n const knobElem = doc.createElement('div');\n knobElem.classList.add(cn('k'));\n this.element.appendChild(knobElem);\n this.knobElement = knobElem;\n const guideElem = doc.createElementNS(SVG_NS, 'svg');\n guideElem.classList.add(cn('g'));\n this.knobElement.appendChild(guideElem);\n const bodyElem = doc.createElementNS(SVG_NS, 'path');\n bodyElem.classList.add(cn('gb'));\n guideElem.appendChild(bodyElem);\n this.guideBodyElem_ = bodyElem;\n const headElem = doc.createElementNS(SVG_NS, 'path');\n headElem.classList.add(cn('gh'));\n guideElem.appendChild(headElem);\n this.guideHeadElem_ = headElem;\n const tooltipElem = doc.createElement('div');\n tooltipElem.classList.add(ClassName('tt')());\n this.knobElement.appendChild(tooltipElem);\n this.tooltipElem_ = tooltipElem;\n config.value.emitter.on('change', this.onChange_);\n this.value = config.value;\n this.refresh();\n }\n onDraggingChange_(ev) {\n if (ev.rawValue === null) {\n this.element.classList.remove(cn(undefined, 'drg'));\n return;\n }\n this.element.classList.add(cn(undefined, 'drg'));\n const x = ev.rawValue / this.props_.get('pointerScale');\n const aox = x + (x > 0 ? -1 : x < 0 ? +1 : 0);\n const adx = constrainRange(-aox, -4, +4);\n this.guideHeadElem_.setAttributeNS(null, 'd', [`M ${aox + adx},0 L${aox},4 L${aox + adx},8`, `M ${x},-1 L${x},9`].join(' '));\n this.guideBodyElem_.setAttributeNS(null, 'd', `M 0,4 L${x},4`);\n const formatter = this.props_.get('formatter');\n this.tooltipElem_.textContent = formatter(this.value.rawValue);\n this.tooltipElem_.style.left = `${x}px`;\n }\n refresh() {\n const formatter = this.props_.get('formatter');\n this.inputElement.value = formatter(this.value.rawValue);\n }\n onChange_() {\n this.refresh();\n }\n}\n","import { forceCast, isEmpty } from '../../../misc/type-util.js';\nimport { createValue } from '../../model/values.js';\nimport { getStepForKey, getVerticalStepKeys } from '../../ui.js';\nimport { PointerHandler, } from '../../view/pointer-handler.js';\nimport { NumberTextView } from '../view/number-text.js';\n/**\n * @hidden\n */\nexport class NumberTextController {\n constructor(doc, config) {\n var _a;\n this.originRawValue_ = 0;\n this.onInputChange_ = this.onInputChange_.bind(this);\n this.onInputKeyDown_ = this.onInputKeyDown_.bind(this);\n this.onInputKeyUp_ = this.onInputKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.parser_ = config.parser;\n this.props = config.props;\n this.sliderProps_ = (_a = config.sliderProps) !== null && _a !== void 0 ? _a : null;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.dragging_ = createValue(null);\n this.view = new NumberTextView(doc, {\n arrayPosition: config.arrayPosition,\n dragging: this.dragging_,\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.inputElement.addEventListener('change', this.onInputChange_);\n this.view.inputElement.addEventListener('keydown', this.onInputKeyDown_);\n this.view.inputElement.addEventListener('keyup', this.onInputKeyUp_);\n const ph = new PointerHandler(this.view.knobElement);\n ph.emitter.on('down', this.onPointerDown_);\n ph.emitter.on('move', this.onPointerMove_);\n ph.emitter.on('up', this.onPointerUp_);\n }\n constrainValue_(value) {\n var _a, _b;\n const min = (_a = this.sliderProps_) === null || _a === void 0 ? void 0 : _a.get('min');\n const max = (_b = this.sliderProps_) === null || _b === void 0 ? void 0 : _b.get('max');\n let v = value;\n if (min !== undefined) {\n v = Math.max(v, min);\n }\n if (max !== undefined) {\n v = Math.min(v, max);\n }\n return v;\n }\n onInputChange_(e) {\n const inputElem = forceCast(e.currentTarget);\n const value = inputElem.value;\n const parsedValue = this.parser_(value);\n if (!isEmpty(parsedValue)) {\n this.value.rawValue = this.constrainValue_(parsedValue);\n }\n this.view.refresh();\n }\n onInputKeyDown_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getVerticalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.constrainValue_(this.value.rawValue + step), {\n forceEmit: false,\n last: false,\n });\n }\n onInputKeyUp_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getVerticalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n onPointerDown_() {\n this.originRawValue_ = this.value.rawValue;\n this.dragging_.rawValue = 0;\n }\n computeDraggingValue_(data) {\n if (!data.point) {\n return null;\n }\n const dx = data.point.x - data.bounds.width / 2;\n return this.constrainValue_(this.originRawValue_ + dx * this.props.get('pointerScale'));\n }\n onPointerMove_(ev) {\n const v = this.computeDraggingValue_(ev.data);\n if (v === null) {\n return;\n }\n this.value.setRawValue(v, {\n forceEmit: false,\n last: false,\n });\n this.dragging_.rawValue = this.value.rawValue - this.originRawValue_;\n }\n onPointerUp_(ev) {\n const v = this.computeDraggingValue_(ev.data);\n if (v === null) {\n return;\n }\n this.value.setRawValue(v, {\n forceEmit: true,\n last: true,\n });\n this.dragging_.rawValue = null;\n }\n}\n","import { ClassName } from '../../../common/view/class-name.js';\nimport { constrainRange, mapRange } from '../util.js';\nconst cn = ClassName('sld');\n/**\n * @hidden\n */\nexport class SliderView {\n constructor(doc, config) {\n this.onChange_ = this.onChange_.bind(this);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const trackElem = doc.createElement('div');\n trackElem.classList.add(cn('t'));\n config.viewProps.bindTabIndex(trackElem);\n this.element.appendChild(trackElem);\n this.trackElement = trackElem;\n const knobElem = doc.createElement('div');\n knobElem.classList.add(cn('k'));\n this.trackElement.appendChild(knobElem);\n this.knobElement = knobElem;\n config.value.emitter.on('change', this.onChange_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n const p = constrainRange(mapRange(this.value.rawValue, this.props_.get('min'), this.props_.get('max'), 0, 100), 0, 100);\n this.knobElement.style.width = `${p}%`;\n }\n onChange_() {\n this.update_();\n }\n}\n","import { getHorizontalStepKeys, getStepForKey } from '../../ui.js';\nimport { PointerHandler, } from '../../view/pointer-handler.js';\nimport { constrainRange, mapRange } from '../util.js';\nimport { SliderView } from '../view/slider.js';\n/**\n * @hidden\n */\nexport class SliderController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDownOrMove_ = this.onPointerDownOrMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.props = config.props;\n this.view = new SliderView(doc, {\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.trackElement);\n this.ptHandler_.emitter.on('down', this.onPointerDownOrMove_);\n this.ptHandler_.emitter.on('move', this.onPointerDownOrMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.trackElement.addEventListener('keydown', this.onKeyDown_);\n this.view.trackElement.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n this.value.setRawValue(mapRange(constrainRange(d.point.x, 0, d.bounds.width), 0, d.bounds.width, this.props.get('min'), this.props.get('max')), opts);\n }\n onPointerDownOrMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue + step, {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n","import { ClassName } from '../../../common/view/class-name.js';\nconst cn = ClassName('sldtxt');\n/**\n * @hidden\n */\nexport class SliderTextView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n const sliderElem = doc.createElement('div');\n sliderElem.classList.add(cn('s'));\n this.sliderView_ = config.sliderView;\n sliderElem.appendChild(this.sliderView_.element);\n this.element.appendChild(sliderElem);\n const textElem = doc.createElement('div');\n textElem.classList.add(cn('t'));\n this.textView_ = config.textView;\n textElem.appendChild(this.textView_.element);\n this.element.appendChild(textElem);\n }\n}\n","import { exportBladeState, importBladeState, } from '../../../blade/common/controller/blade-state.js';\nimport { ValueMap } from '../../model/value-map.js';\nimport { createValue } from '../../model/values.js';\nimport { SliderTextView } from '../view/slider-text.js';\nimport { NumberTextController } from './number-text.js';\nimport { SliderController } from './slider.js';\n/**\n * @hidden\n */\nexport class SliderTextController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.sliderC_ = new SliderController(doc, {\n props: config.sliderProps,\n value: config.value,\n viewProps: this.viewProps,\n });\n this.textC_ = new NumberTextController(doc, {\n parser: config.parser,\n props: config.textProps,\n sliderProps: config.sliderProps,\n value: config.value,\n viewProps: config.viewProps,\n });\n this.view = new SliderTextView(doc, {\n sliderView: this.sliderC_.view,\n textView: this.textC_.view,\n });\n }\n get sliderController() {\n return this.sliderC_;\n }\n get textController() {\n return this.textC_;\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n max: p.required.number,\n min: p.required.number,\n }), (result) => {\n const sliderProps = this.sliderC_.props;\n sliderProps.set('max', result.max);\n sliderProps.set('min', result.min);\n return true;\n });\n }\n exportProps() {\n const sliderProps = this.sliderC_.props;\n return exportBladeState(null, {\n max: sliderProps.get('max'),\n min: sliderProps.get('min'),\n });\n }\n}\nexport function createSliderTextProps(config) {\n return {\n sliderProps: new ValueMap({\n keyScale: config.keyScale,\n max: config.max,\n min: config.min,\n }),\n textProps: new ValueMap({\n formatter: createValue(config.formatter),\n keyScale: config.keyScale,\n pointerScale: createValue(config.pointerScale),\n }),\n };\n}\n","const CSS_VAR_MAP = {\n containerUnitSize: 'cnt-usz',\n};\n/**\n * Gets a name of the internal CSS variable.\n * @param key The key for the CSS variable.\n * @return A name of the internal CSS variable.\n */\nexport function getCssVar(key) {\n return `--${CSS_VAR_MAP[key]}`;\n}\n","import { isRecord } from '../../misc/type-util.js';\nimport { CompositeConstraint } from '../constraint/composite.js';\nimport { parseRecord } from '../micro-parsers.js';\nimport { createNumberTextInputParamsParser, createRangeConstraint, createStepConstraint, } from '../number/util.js';\nexport function createPointDimensionParser(p) {\n return createNumberTextInputParamsParser(p);\n}\nexport function parsePointDimensionParams(value) {\n if (!isRecord(value)) {\n return undefined;\n }\n return parseRecord(value, createPointDimensionParser);\n}\nexport function createDimensionConstraint(params, initialValue) {\n if (!params) {\n return undefined;\n }\n const constraints = [];\n const cs = createStepConstraint(params, initialValue);\n if (cs) {\n constraints.push(cs);\n }\n const rs = createRangeConstraint(params);\n if (rs) {\n constraints.push(rs);\n }\n return new CompositeConstraint(constraints);\n}\n","export function parsePickerLayout(value) {\n if (value === 'inline' || value === 'popup') {\n return value;\n }\n return undefined;\n}\n","/**\n * Writes the primitive value.\n * @param target The target to be written.\n * @param value The value to write.\n */\nexport function writePrimitive(target, value) {\n target.write(value);\n}\n","import { createSvgIconElement } from '../../../common/dom-util.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nconst cn = ClassName('ckb');\n/**\n * @hidden\n */\nexport class CheckboxView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const labelElem = doc.createElement('label');\n labelElem.classList.add(cn('l'));\n this.element.appendChild(labelElem);\n this.labelElement = labelElem;\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn('i'));\n inputElem.type = 'checkbox';\n this.labelElement.appendChild(inputElem);\n this.inputElement = inputElem;\n config.viewProps.bindDisabled(this.inputElement);\n const wrapperElem = doc.createElement('div');\n wrapperElem.classList.add(cn('w'));\n this.labelElement.appendChild(wrapperElem);\n const markElem = createSvgIconElement(doc, 'check');\n wrapperElem.appendChild(markElem);\n config.value.emitter.on('change', this.onValueChange_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n this.inputElement.checked = this.value.rawValue;\n }\n onValueChange_() {\n this.update_();\n }\n}\n","import { forceCast } from '../../../misc/type-util.js';\nimport { CheckboxView } from '../view/checkbox.js';\n/**\n * @hidden\n */\nexport class CheckboxController {\n constructor(doc, config) {\n this.onInputChange_ = this.onInputChange_.bind(this);\n this.onLabelMouseDown_ = this.onLabelMouseDown_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new CheckboxView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.inputElement.addEventListener('change', this.onInputChange_);\n this.view.labelElement.addEventListener('mousedown', this.onLabelMouseDown_);\n }\n onInputChange_(ev) {\n const inputElem = forceCast(ev.currentTarget);\n this.value.rawValue = inputElem.checked;\n ev.preventDefault();\n ev.stopPropagation();\n }\n onLabelMouseDown_(ev) {\n // Prevent unwanted text selection\n // https://github.com/cocopon/tweakpane/issues/545\n ev.preventDefault();\n }\n}\n","import { ListInputBindingApi } from '../../common/api/list.js';\nimport { CompositeConstraint, findConstraint, } from '../../common/constraint/composite.js';\nimport { ListConstraint } from '../../common/constraint/list.js';\nimport { ListController } from '../../common/controller/list.js';\nimport { boolFromUnknown } from '../../common/converter/boolean.js';\nimport { createListConstraint, parseListOptions, } from '../../common/list-util.js';\nimport { parseRecord } from '../../common/micro-parsers.js';\nimport { ValueMap } from '../../common/model/value-map.js';\nimport { writePrimitive } from '../../common/primitive.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { CheckboxController } from './controller/checkbox.js';\nfunction createConstraint(params) {\n const constraints = [];\n const lc = createListConstraint(params.options);\n if (lc) {\n constraints.push(lc);\n }\n return new CompositeConstraint(constraints);\n}\n/**\n * @hidden\n */\nexport const BooleanInputPlugin = createPlugin({\n id: 'input-bool',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'boolean') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n options: p.optional.custom(parseListOptions),\n readonly: p.optional.constant(false),\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => boolFromUnknown,\n constraint: (args) => createConstraint(args.params),\n writer: (_args) => writePrimitive,\n },\n controller: (args) => {\n const doc = args.document;\n const value = args.value;\n const c = args.constraint;\n const lc = c && findConstraint(c, ListConstraint);\n if (lc) {\n return new ListController(doc, {\n props: new ValueMap({\n options: lc.values.value('options'),\n }),\n value: value,\n viewProps: args.viewProps,\n });\n }\n return new CheckboxController(doc, {\n value: value,\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (typeof args.controller.value.rawValue !== 'boolean') {\n return null;\n }\n if (args.controller.valueController instanceof ListController) {\n return new ListInputBindingApi(args.controller);\n }\n return null;\n },\n});\n","import { bindValueMap } from '../../../common/model/reactive.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nimport { valueToClassName } from '../../../common/view/reactive.js';\nconst cn = ClassName('col');\n/**\n * @hidden\n */\nexport class ColorView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.foldable.bindExpandedClass(this.element, cn(undefined, 'expanded'));\n bindValueMap(config.foldable, 'completed', valueToClassName(this.element, cn(undefined, 'cpl')));\n const headElem = doc.createElement('div');\n headElem.classList.add(cn('h'));\n this.element.appendChild(headElem);\n const swatchElem = doc.createElement('div');\n swatchElem.classList.add(cn('s'));\n headElem.appendChild(swatchElem);\n this.swatchElement = swatchElem;\n const textElem = doc.createElement('div');\n textElem.classList.add(cn('t'));\n headElem.appendChild(textElem);\n this.textElement = textElem;\n if (config.pickerLayout === 'inline') {\n const pickerElem = doc.createElement('div');\n pickerElem.classList.add(cn('p'));\n this.element.appendChild(pickerElem);\n this.pickerElement = pickerElem;\n }\n else {\n this.pickerElement = null;\n }\n }\n}\n","import { constrainRange, loopRange } from '../../../common/number/util.js';\n/**\n * Converts RGB color components into HSL (cylindrical, used in CSS).\n */\nfunction rgbToHslInt(r, g, b) {\n const rp = constrainRange(r / 255, 0, 1);\n const gp = constrainRange(g / 255, 0, 1);\n const bp = constrainRange(b / 255, 0, 1);\n const cmax = Math.max(rp, gp, bp);\n const cmin = Math.min(rp, gp, bp);\n const c = cmax - cmin;\n let h = 0;\n let s = 0;\n const l = (cmin + cmax) / 2;\n if (c !== 0) {\n s = c / (1 - Math.abs(cmax + cmin - 1));\n if (rp === cmax) {\n h = (gp - bp) / c;\n }\n else if (gp === cmax) {\n h = 2 + (bp - rp) / c;\n }\n else {\n h = 4 + (rp - gp) / c;\n }\n h = h / 6 + (h < 0 ? 1 : 0);\n }\n return [h * 360, s * 100, l * 100];\n}\nfunction hslToRgbInt(h, s, l) {\n const hp = ((h % 360) + 360) % 360;\n const sp = constrainRange(s / 100, 0, 1);\n const lp = constrainRange(l / 100, 0, 1);\n const c = (1 - Math.abs(2 * lp - 1)) * sp;\n const x = c * (1 - Math.abs(((hp / 60) % 2) - 1));\n const m = lp - c / 2;\n let rp, gp, bp;\n if (hp >= 0 && hp < 60) {\n [rp, gp, bp] = [c, x, 0];\n }\n else if (hp >= 60 && hp < 120) {\n [rp, gp, bp] = [x, c, 0];\n }\n else if (hp >= 120 && hp < 180) {\n [rp, gp, bp] = [0, c, x];\n }\n else if (hp >= 180 && hp < 240) {\n [rp, gp, bp] = [0, x, c];\n }\n else if (hp >= 240 && hp < 300) {\n [rp, gp, bp] = [x, 0, c];\n }\n else {\n [rp, gp, bp] = [c, 0, x];\n }\n return [(rp + m) * 255, (gp + m) * 255, (bp + m) * 255];\n}\nfunction rgbToHsvInt(r, g, b) {\n const rp = constrainRange(r / 255, 0, 1);\n const gp = constrainRange(g / 255, 0, 1);\n const bp = constrainRange(b / 255, 0, 1);\n const cmax = Math.max(rp, gp, bp);\n const cmin = Math.min(rp, gp, bp);\n const d = cmax - cmin;\n let h;\n if (d === 0) {\n h = 0;\n }\n else if (cmax === rp) {\n h = 60 * (((((gp - bp) / d) % 6) + 6) % 6);\n }\n else if (cmax === gp) {\n h = 60 * ((bp - rp) / d + 2);\n }\n else {\n h = 60 * ((rp - gp) / d + 4);\n }\n const s = cmax === 0 ? 0 : d / cmax;\n const v = cmax;\n return [h, s * 100, v * 100];\n}\nexport function hsvToRgbInt(h, s, v) {\n const hp = loopRange(h, 360);\n const sp = constrainRange(s / 100, 0, 1);\n const vp = constrainRange(v / 100, 0, 1);\n const c = vp * sp;\n const x = c * (1 - Math.abs(((hp / 60) % 2) - 1));\n const m = vp - c;\n let rp, gp, bp;\n if (hp >= 0 && hp < 60) {\n [rp, gp, bp] = [c, x, 0];\n }\n else if (hp >= 60 && hp < 120) {\n [rp, gp, bp] = [x, c, 0];\n }\n else if (hp >= 120 && hp < 180) {\n [rp, gp, bp] = [0, c, x];\n }\n else if (hp >= 180 && hp < 240) {\n [rp, gp, bp] = [0, x, c];\n }\n else if (hp >= 240 && hp < 300) {\n [rp, gp, bp] = [x, 0, c];\n }\n else {\n [rp, gp, bp] = [c, 0, x];\n }\n return [(rp + m) * 255, (gp + m) * 255, (bp + m) * 255];\n}\nexport function hslToHsvInt(h, s, l) {\n const sd = l + (s * (100 - Math.abs(2 * l - 100))) / (2 * 100);\n return [\n h,\n sd !== 0 ? (s * (100 - Math.abs(2 * l - 100))) / sd : 0,\n l + (s * (100 - Math.abs(2 * l - 100))) / (2 * 100),\n ];\n}\nexport function hsvToHslInt(h, s, v) {\n const sd = 100 - Math.abs((v * (200 - s)) / 100 - 100);\n return [h, sd !== 0 ? (s * v) / sd : 0, (v * (200 - s)) / (2 * 100)];\n}\nexport function removeAlphaComponent(comps) {\n return [comps[0], comps[1], comps[2]];\n}\nexport function appendAlphaComponent(comps, alpha) {\n return [comps[0], comps[1], comps[2], alpha];\n}\nconst MODE_CONVERTER_MAP = {\n hsl: {\n hsl: (h, s, l) => [h, s, l],\n hsv: hslToHsvInt,\n rgb: hslToRgbInt,\n },\n hsv: {\n hsl: hsvToHslInt,\n hsv: (h, s, v) => [h, s, v],\n rgb: hsvToRgbInt,\n },\n rgb: {\n hsl: rgbToHslInt,\n hsv: rgbToHsvInt,\n rgb: (r, g, b) => [r, g, b],\n },\n};\nexport function getColorMaxComponents(mode, type) {\n return [\n type === 'float' ? 1 : mode === 'rgb' ? 255 : 360,\n type === 'float' ? 1 : mode === 'rgb' ? 255 : 100,\n type === 'float' ? 1 : mode === 'rgb' ? 255 : 100,\n ];\n}\nfunction loopHueRange(hue, max) {\n // Maximum value of the slider (e.g. 360deg) should be kept\n return hue === max ? max : loopRange(hue, max);\n}\nexport function constrainColorComponents(components, mode, type) {\n var _a;\n const ms = getColorMaxComponents(mode, type);\n return [\n mode === 'rgb'\n ? constrainRange(components[0], 0, ms[0])\n : loopHueRange(components[0], ms[0]),\n constrainRange(components[1], 0, ms[1]),\n constrainRange(components[2], 0, ms[2]),\n constrainRange((_a = components[3]) !== null && _a !== void 0 ? _a : 1, 0, 1),\n ];\n}\nfunction convertColorType(comps, mode, from, to) {\n const fms = getColorMaxComponents(mode, from);\n const tms = getColorMaxComponents(mode, to);\n return comps.map((c, index) => (c / fms[index]) * tms[index]);\n}\nexport function convertColor(components, from, to) {\n const intComps = convertColorType(components, from.mode, from.type, 'int');\n const result = MODE_CONVERTER_MAP[from.mode][to.mode](...intComps);\n return convertColorType(result, to.mode, 'int', to.type);\n}\n","import { appendAlphaComponent, constrainColorComponents, convertColor, removeAlphaComponent, } from './color-model.js';\nexport class IntColor {\n static black() {\n return new IntColor([0, 0, 0], 'rgb');\n }\n constructor(comps, mode) {\n this.type = 'int';\n this.mode = mode;\n this.comps_ = constrainColorComponents(comps, mode, this.type);\n }\n getComponents(opt_mode) {\n return appendAlphaComponent(convertColor(removeAlphaComponent(this.comps_), { mode: this.mode, type: this.type }, { mode: opt_mode !== null && opt_mode !== void 0 ? opt_mode : this.mode, type: this.type }), this.comps_[3]);\n }\n toRgbaObject() {\n const rgbComps = this.getComponents('rgb');\n return {\n r: rgbComps[0],\n g: rgbComps[1],\n b: rgbComps[2],\n a: rgbComps[3],\n };\n }\n}\n","import { ClassName } from '../../../common/view/class-name.js';\nconst cn = ClassName('colp');\n/**\n * @hidden\n */\nexport class ColorPickerView {\n constructor(doc, config) {\n this.alphaViews_ = null;\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const hsvElem = doc.createElement('div');\n hsvElem.classList.add(cn('hsv'));\n const svElem = doc.createElement('div');\n svElem.classList.add(cn('sv'));\n this.svPaletteView_ = config.svPaletteView;\n svElem.appendChild(this.svPaletteView_.element);\n hsvElem.appendChild(svElem);\n const hElem = doc.createElement('div');\n hElem.classList.add(cn('h'));\n this.hPaletteView_ = config.hPaletteView;\n hElem.appendChild(this.hPaletteView_.element);\n hsvElem.appendChild(hElem);\n this.element.appendChild(hsvElem);\n const rgbElem = doc.createElement('div');\n rgbElem.classList.add(cn('rgb'));\n this.textsView_ = config.textsView;\n rgbElem.appendChild(this.textsView_.element);\n this.element.appendChild(rgbElem);\n if (config.alphaViews) {\n this.alphaViews_ = {\n palette: config.alphaViews.palette,\n text: config.alphaViews.text,\n };\n const aElem = doc.createElement('div');\n aElem.classList.add(cn('a'));\n const apElem = doc.createElement('div');\n apElem.classList.add(cn('ap'));\n apElem.appendChild(this.alphaViews_.palette.element);\n aElem.appendChild(apElem);\n const atElem = doc.createElement('div');\n atElem.classList.add(cn('at'));\n atElem.appendChild(this.alphaViews_.text.element);\n aElem.appendChild(atElem);\n this.element.appendChild(aElem);\n }\n }\n get allFocusableElements() {\n const elems = [\n this.svPaletteView_.element,\n this.hPaletteView_.element,\n this.textsView_.modeSelectElement,\n ...this.textsView_.inputViews.map((v) => v.inputElement),\n ];\n if (this.alphaViews_) {\n elems.push(this.alphaViews_.palette.element, this.alphaViews_.text.inputElement);\n }\n return elems;\n }\n}\n","import { parseRecord } from '../../common/micro-parsers.js';\nimport { parsePickerLayout } from '../../common/picker-util.js';\nfunction parseColorType(value) {\n return value === 'int' ? 'int' : value === 'float' ? 'float' : undefined;\n}\nexport function parseColorInputParams(params) {\n return parseRecord(params, (p) => ({\n color: p.optional.object({\n alpha: p.optional.boolean,\n type: p.optional.custom(parseColorType),\n }),\n expanded: p.optional.boolean,\n picker: p.optional.custom(parsePickerLayout),\n readonly: p.optional.constant(false),\n }));\n}\nexport function getKeyScaleForColor(forAlpha) {\n return forAlpha ? 0.1 : 1;\n}\nexport function extractColorType(params) {\n var _a;\n return (_a = params.color) === null || _a === void 0 ? void 0 : _a.type;\n}\n","import { appendAlphaComponent, constrainColorComponents, convertColor, removeAlphaComponent, } from './color-model.js';\nexport class FloatColor {\n constructor(comps, mode) {\n this.type = 'float';\n this.mode = mode;\n this.comps_ = constrainColorComponents(comps, mode, this.type);\n }\n getComponents(opt_mode) {\n return appendAlphaComponent(convertColor(removeAlphaComponent(this.comps_), { mode: this.mode, type: this.type }, { mode: opt_mode !== null && opt_mode !== void 0 ? opt_mode : this.mode, type: this.type }), this.comps_[3]);\n }\n toRgbaObject() {\n const rgbComps = this.getComponents('rgb');\n return {\n r: rgbComps[0],\n g: rgbComps[1],\n b: rgbComps[2],\n a: rgbComps[3],\n };\n }\n}\n","import { mapRange } from '../../../common/number/util.js';\nimport { TpError } from '../../../common/tp-error.js';\nimport { getColorMaxComponents, } from './color-model.js';\nimport { FloatColor } from './float-color.js';\nimport { IntColor } from './int-color.js';\nconst TYPE_TO_CONSTRUCTOR_MAP = {\n int: (comps, mode) => new IntColor(comps, mode),\n float: (comps, mode) => new FloatColor(comps, mode),\n};\nexport function createColor(comps, mode, type) {\n return TYPE_TO_CONSTRUCTOR_MAP[type](comps, mode);\n}\nfunction isFloatColor(c) {\n return c.type === 'float';\n}\nfunction isIntColor(c) {\n return c.type === 'int';\n}\nfunction convertFloatToInt(cf) {\n const comps = cf.getComponents();\n const ms = getColorMaxComponents(cf.mode, 'int');\n return new IntColor([\n Math.round(mapRange(comps[0], 0, 1, 0, ms[0])),\n Math.round(mapRange(comps[1], 0, 1, 0, ms[1])),\n Math.round(mapRange(comps[2], 0, 1, 0, ms[2])),\n comps[3],\n ], cf.mode);\n}\nfunction convertIntToFloat(ci) {\n const comps = ci.getComponents();\n const ms = getColorMaxComponents(ci.mode, 'int');\n return new FloatColor([\n mapRange(comps[0], 0, ms[0], 0, 1),\n mapRange(comps[1], 0, ms[1], 0, 1),\n mapRange(comps[2], 0, ms[2], 0, 1),\n comps[3],\n ], ci.mode);\n}\nexport function mapColorType(c, type) {\n if (c.type === type) {\n return c;\n }\n if (isIntColor(c) && type === 'float') {\n return convertIntToFloat(c);\n }\n /* istanbul ignore else */\n if (isFloatColor(c) && type === 'int') {\n return convertFloatToInt(c);\n }\n /* istanbul ignore next */\n throw TpError.shouldNeverHappen();\n}\n","import { createNumberFormatter } from '../../../common/converter/number.js';\nimport { composeParsers } from '../../../common/converter/parser.js';\nimport { formatPercentage } from '../../../common/converter/percentage.js';\nimport { constrainRange, mapRange } from '../../../common/number/util.js';\nimport { removeAlphaComponent, } from '../model/color-model.js';\nimport { createColor, mapColorType } from '../model/colors.js';\nimport { IntColor } from '../model/int-color.js';\nfunction equalsStringColorFormat(f1, f2) {\n return (f1.alpha === f2.alpha &&\n f1.mode === f2.mode &&\n f1.notation === f2.notation &&\n f1.type === f2.type);\n}\nfunction parseCssNumberOrPercentage(text, max) {\n const m = text.match(/^(.+)%$/);\n if (!m) {\n return Math.min(parseFloat(text), max);\n }\n return Math.min(parseFloat(m[1]) * 0.01 * max, max);\n}\nconst ANGLE_TO_DEG_MAP = {\n deg: (angle) => angle,\n grad: (angle) => (angle * 360) / 400,\n rad: (angle) => (angle * 360) / (2 * Math.PI),\n turn: (angle) => angle * 360,\n};\nfunction parseCssNumberOrAngle(text) {\n const m = text.match(/^([0-9.]+?)(deg|grad|rad|turn)$/);\n if (!m) {\n return parseFloat(text);\n }\n const angle = parseFloat(m[1]);\n const unit = m[2];\n return ANGLE_TO_DEG_MAP[unit](angle);\n}\nfunction parseFunctionalRgbColorComponents(text) {\n const m = text.match(/^rgb\\(\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrPercentage(m[1], 255),\n parseCssNumberOrPercentage(m[2], 255),\n parseCssNumberOrPercentage(m[3], 255),\n ];\n if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalRgbColor(text) {\n const comps = parseFunctionalRgbColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseFunctionalRgbaColorComponents(text) {\n const m = text.match(/^rgba\\(\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrPercentage(m[1], 255),\n parseCssNumberOrPercentage(m[2], 255),\n parseCssNumberOrPercentage(m[3], 255),\n parseCssNumberOrPercentage(m[4], 1),\n ];\n if (isNaN(comps[0]) ||\n isNaN(comps[1]) ||\n isNaN(comps[2]) ||\n isNaN(comps[3])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalRgbaColor(text) {\n const comps = parseFunctionalRgbaColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseFunctionalHslColorComponents(text) {\n const m = text.match(/^hsl\\(\\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrAngle(m[1]),\n parseCssNumberOrPercentage(m[2], 100),\n parseCssNumberOrPercentage(m[3], 100),\n ];\n if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalHslColor(text) {\n const comps = parseFunctionalHslColorComponents(text);\n return comps ? new IntColor(comps, 'hsl') : null;\n}\nfunction parseHslaColorComponents(text) {\n const m = text.match(/^hsla\\(\\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrAngle(m[1]),\n parseCssNumberOrPercentage(m[2], 100),\n parseCssNumberOrPercentage(m[3], 100),\n parseCssNumberOrPercentage(m[4], 1),\n ];\n if (isNaN(comps[0]) ||\n isNaN(comps[1]) ||\n isNaN(comps[2]) ||\n isNaN(comps[3])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalHslaColor(text) {\n const comps = parseHslaColorComponents(text);\n return comps ? new IntColor(comps, 'hsl') : null;\n}\nfunction parseHexRgbColorComponents(text) {\n const mRgb = text.match(/^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);\n if (mRgb) {\n return [\n parseInt(mRgb[1] + mRgb[1], 16),\n parseInt(mRgb[2] + mRgb[2], 16),\n parseInt(mRgb[3] + mRgb[3], 16),\n ];\n }\n const mRrggbb = text.match(/^(?:#|0x)([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);\n if (mRrggbb) {\n return [\n parseInt(mRrggbb[1], 16),\n parseInt(mRrggbb[2], 16),\n parseInt(mRrggbb[3], 16),\n ];\n }\n return null;\n}\nfunction parseHexRgbColor(text) {\n const comps = parseHexRgbColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseHexRgbaColorComponents(text) {\n const mRgb = text.match(/^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);\n if (mRgb) {\n return [\n parseInt(mRgb[1] + mRgb[1], 16),\n parseInt(mRgb[2] + mRgb[2], 16),\n parseInt(mRgb[3] + mRgb[3], 16),\n mapRange(parseInt(mRgb[4] + mRgb[4], 16), 0, 255, 0, 1),\n ];\n }\n const mRrggbb = text.match(/^(?:#|0x)?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);\n if (mRrggbb) {\n return [\n parseInt(mRrggbb[1], 16),\n parseInt(mRrggbb[2], 16),\n parseInt(mRrggbb[3], 16),\n mapRange(parseInt(mRrggbb[4], 16), 0, 255, 0, 1),\n ];\n }\n return null;\n}\nfunction parseHexRgbaColor(text) {\n const comps = parseHexRgbaColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseObjectRgbColorComponents(text) {\n const m = text.match(/^\\{\\s*r\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*g\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*b\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*\\}$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseFloat(m[1]),\n parseFloat(m[2]),\n parseFloat(m[3]),\n ];\n if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n return null;\n }\n return comps;\n}\nfunction createObjectRgbColorParser(type) {\n return (text) => {\n const comps = parseObjectRgbColorComponents(text);\n return comps ? createColor(comps, 'rgb', type) : null;\n };\n}\nfunction parseObjectRgbaColorComponents(text) {\n const m = text.match(/^\\{\\s*r\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*g\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*b\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*a\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*\\}$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseFloat(m[1]),\n parseFloat(m[2]),\n parseFloat(m[3]),\n parseFloat(m[4]),\n ];\n if (isNaN(comps[0]) ||\n isNaN(comps[1]) ||\n isNaN(comps[2]) ||\n isNaN(comps[3])) {\n return null;\n }\n return comps;\n}\nfunction createObjectRgbaColorParser(type) {\n return (text) => {\n const comps = parseObjectRgbaColorComponents(text);\n return comps ? createColor(comps, 'rgb', type) : null;\n };\n}\nconst PARSER_AND_RESULT = [\n {\n parser: parseHexRgbColorComponents,\n result: {\n alpha: false,\n mode: 'rgb',\n notation: 'hex',\n },\n },\n {\n parser: parseHexRgbaColorComponents,\n result: {\n alpha: true,\n mode: 'rgb',\n notation: 'hex',\n },\n },\n {\n parser: parseFunctionalRgbColorComponents,\n result: {\n alpha: false,\n mode: 'rgb',\n notation: 'func',\n },\n },\n {\n parser: parseFunctionalRgbaColorComponents,\n result: {\n alpha: true,\n mode: 'rgb',\n notation: 'func',\n },\n },\n {\n parser: parseFunctionalHslColorComponents,\n result: {\n alpha: false,\n mode: 'hsl',\n notation: 'func',\n },\n },\n {\n parser: parseHslaColorComponents,\n result: {\n alpha: true,\n mode: 'hsl',\n notation: 'func',\n },\n },\n {\n parser: parseObjectRgbColorComponents,\n result: {\n alpha: false,\n mode: 'rgb',\n notation: 'object',\n },\n },\n {\n parser: parseObjectRgbaColorComponents,\n result: {\n alpha: true,\n mode: 'rgb',\n notation: 'object',\n },\n },\n];\nfunction detectStringColor(text) {\n return PARSER_AND_RESULT.reduce((prev, { parser, result: detection }) => {\n if (prev) {\n return prev;\n }\n return parser(text) ? detection : null;\n }, null);\n}\nexport function detectStringColorFormat(text, type = 'int') {\n const r = detectStringColor(text);\n if (!r) {\n return null;\n }\n if (r.notation === 'hex' && type !== 'float') {\n return Object.assign(Object.assign({}, r), { type: 'int' });\n }\n if (r.notation === 'func') {\n return Object.assign(Object.assign({}, r), { type: type });\n }\n return null;\n}\nexport function createColorStringParser(type) {\n const parsers = [\n parseHexRgbColor,\n parseHexRgbaColor,\n parseFunctionalRgbColor,\n parseFunctionalRgbaColor,\n parseFunctionalHslColor,\n parseFunctionalHslaColor,\n ];\n if (type === 'int') {\n parsers.push(createObjectRgbColorParser('int'), createObjectRgbaColorParser('int'));\n }\n if (type === 'float') {\n parsers.push(createObjectRgbColorParser('float'), createObjectRgbaColorParser('float'));\n }\n const parser = composeParsers(parsers);\n return (text) => {\n const result = parser(text);\n return result ? mapColorType(result, type) : null;\n };\n}\nexport function readIntColorString(value) {\n const parser = createColorStringParser('int');\n if (typeof value !== 'string') {\n return IntColor.black();\n }\n const result = parser(value);\n return result !== null && result !== void 0 ? result : IntColor.black();\n}\nfunction zerofill(comp) {\n const hex = constrainRange(Math.floor(comp), 0, 255).toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n}\nexport function colorToHexRgbString(value, prefix = '#') {\n const hexes = removeAlphaComponent(value.getComponents('rgb'))\n .map(zerofill)\n .join('');\n return `${prefix}${hexes}`;\n}\nexport function colorToHexRgbaString(value, prefix = '#') {\n const rgbaComps = value.getComponents('rgb');\n const hexes = [rgbaComps[0], rgbaComps[1], rgbaComps[2], rgbaComps[3] * 255]\n .map(zerofill)\n .join('');\n return `${prefix}${hexes}`;\n}\nexport function colorToFunctionalRgbString(value) {\n const formatter = createNumberFormatter(0);\n const ci = mapColorType(value, 'int');\n const comps = removeAlphaComponent(ci.getComponents('rgb')).map((comp) => formatter(comp));\n return `rgb(${comps.join(', ')})`;\n}\nexport function colorToFunctionalRgbaString(value) {\n const aFormatter = createNumberFormatter(2);\n const rgbFormatter = createNumberFormatter(0);\n const ci = mapColorType(value, 'int');\n const comps = ci.getComponents('rgb').map((comp, index) => {\n const formatter = index === 3 ? aFormatter : rgbFormatter;\n return formatter(comp);\n });\n return `rgba(${comps.join(', ')})`;\n}\nexport function colorToFunctionalHslString(value) {\n const formatters = [\n createNumberFormatter(0),\n formatPercentage,\n formatPercentage,\n ];\n const ci = mapColorType(value, 'int');\n const comps = removeAlphaComponent(ci.getComponents('hsl')).map((comp, index) => formatters[index](comp));\n return `hsl(${comps.join(', ')})`;\n}\nexport function colorToFunctionalHslaString(value) {\n const formatters = [\n createNumberFormatter(0),\n formatPercentage,\n formatPercentage,\n createNumberFormatter(2),\n ];\n const ci = mapColorType(value, 'int');\n const comps = ci\n .getComponents('hsl')\n .map((comp, index) => formatters[index](comp));\n return `hsla(${comps.join(', ')})`;\n}\nexport function colorToObjectRgbString(value, type) {\n const formatter = createNumberFormatter(type === 'float' ? 2 : 0);\n const names = ['r', 'g', 'b'];\n const cc = mapColorType(value, type);\n const comps = removeAlphaComponent(cc.getComponents('rgb')).map((comp, index) => `${names[index]}: ${formatter(comp)}`);\n return `{${comps.join(', ')}}`;\n}\nfunction createObjectRgbColorFormatter(type) {\n return (value) => colorToObjectRgbString(value, type);\n}\nexport function colorToObjectRgbaString(value, type) {\n const aFormatter = createNumberFormatter(2);\n const rgbFormatter = createNumberFormatter(type === 'float' ? 2 : 0);\n const names = ['r', 'g', 'b', 'a'];\n const cc = mapColorType(value, type);\n const comps = cc.getComponents('rgb').map((comp, index) => {\n const formatter = index === 3 ? aFormatter : rgbFormatter;\n return `${names[index]}: ${formatter(comp)}`;\n });\n return `{${comps.join(', ')}}`;\n}\nfunction createObjectRgbaColorFormatter(type) {\n return (value) => colorToObjectRgbaString(value, type);\n}\nconst FORMAT_AND_STRINGIFIERS = [\n {\n format: {\n alpha: false,\n mode: 'rgb',\n notation: 'hex',\n type: 'int',\n },\n stringifier: colorToHexRgbString,\n },\n {\n format: {\n alpha: true,\n mode: 'rgb',\n notation: 'hex',\n type: 'int',\n },\n stringifier: colorToHexRgbaString,\n },\n {\n format: {\n alpha: false,\n mode: 'rgb',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalRgbString,\n },\n {\n format: {\n alpha: true,\n mode: 'rgb',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalRgbaString,\n },\n {\n format: {\n alpha: false,\n mode: 'hsl',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalHslString,\n },\n {\n format: {\n alpha: true,\n mode: 'hsl',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalHslaString,\n },\n ...['int', 'float'].reduce((prev, type) => {\n return [\n ...prev,\n {\n format: {\n alpha: false,\n mode: 'rgb',\n notation: 'object',\n type: type,\n },\n stringifier: createObjectRgbColorFormatter(type),\n },\n {\n format: {\n alpha: true,\n mode: 'rgb',\n notation: 'object',\n type: type,\n },\n stringifier: createObjectRgbaColorFormatter(type),\n },\n ];\n }, []),\n];\nexport function findColorStringifier(format) {\n return FORMAT_AND_STRINGIFIERS.reduce((prev, fas) => {\n if (prev) {\n return prev;\n }\n return equalsStringColorFormat(fas.format, format)\n ? fas.stringifier\n : null;\n }, null);\n}\n","import { mapRange } from '../../../common/number/util.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nimport { colorToFunctionalRgbaString } from '../converter/color-string.js';\nimport { IntColor } from '../model/int-color.js';\nconst cn = ClassName('apl');\n/**\n * @hidden\n */\nexport class APaletteView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value = config.value;\n this.value.emitter.on('change', this.onValueChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n config.viewProps.bindTabIndex(this.element);\n const barElem = doc.createElement('div');\n barElem.classList.add(cn('b'));\n this.element.appendChild(barElem);\n const colorElem = doc.createElement('div');\n colorElem.classList.add(cn('c'));\n barElem.appendChild(colorElem);\n this.colorElem_ = colorElem;\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn('m'));\n this.element.appendChild(markerElem);\n this.markerElem_ = markerElem;\n const previewElem = doc.createElement('div');\n previewElem.classList.add(cn('p'));\n this.markerElem_.appendChild(previewElem);\n this.previewElem_ = previewElem;\n this.update_();\n }\n update_() {\n const c = this.value.rawValue;\n const rgbaComps = c.getComponents('rgb');\n const leftColor = new IntColor([rgbaComps[0], rgbaComps[1], rgbaComps[2], 0], 'rgb');\n const rightColor = new IntColor([rgbaComps[0], rgbaComps[1], rgbaComps[2], 255], 'rgb');\n const gradientComps = [\n 'to right',\n colorToFunctionalRgbaString(leftColor),\n colorToFunctionalRgbaString(rightColor),\n ];\n this.colorElem_.style.background = `linear-gradient(${gradientComps.join(',')})`;\n this.previewElem_.style.backgroundColor = colorToFunctionalRgbaString(c);\n const left = mapRange(rgbaComps[3], 0, 1, 0, 100);\n this.markerElem_.style.left = `${left}%`;\n }\n onValueChange_() {\n this.update_();\n }\n}\n","import { getHorizontalStepKeys, getStepForKey } from '../../../common/ui.js';\nimport { PointerHandler, } from '../../../common/view/pointer-handler.js';\nimport { IntColor } from '../model/int-color.js';\nimport { getKeyScaleForColor } from '../util.js';\nimport { APaletteView } from '../view/a-palette.js';\n/**\n * @hidden\n */\nexport class APaletteController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new APaletteView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.element);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.element.addEventListener('keydown', this.onKeyDown_);\n this.view.element.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const alpha = d.point.x / d.bounds.width;\n const c = this.value.rawValue;\n const [h, s, v] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([h, s, v, alpha], 'hsv'), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n const step = getStepForKey(getKeyScaleForColor(true), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n const c = this.value.rawValue;\n const [h, s, v, a] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([h, s, v, a + step], 'hsv'), {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const step = getStepForKey(getKeyScaleForColor(true), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n","import { createSvgIconElement, removeChildElements, } from '../../../common/dom-util.js';\nimport { bindValue } from '../../../common/model/reactive.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nconst cn = ClassName('coltxt');\nfunction createModeSelectElement(doc) {\n const selectElem = doc.createElement('select');\n const items = [\n { text: 'RGB', value: 'rgb' },\n { text: 'HSL', value: 'hsl' },\n { text: 'HSV', value: 'hsv' },\n { text: 'HEX', value: 'hex' },\n ];\n selectElem.appendChild(items.reduce((frag, item) => {\n const optElem = doc.createElement('option');\n optElem.textContent = item.text;\n optElem.value = item.value;\n frag.appendChild(optElem);\n return frag;\n }, doc.createDocumentFragment()));\n return selectElem;\n}\n/**\n * @hidden\n */\nexport class ColorTextsView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const modeElem = doc.createElement('div');\n modeElem.classList.add(cn('m'));\n this.modeElem_ = createModeSelectElement(doc);\n this.modeElem_.classList.add(cn('ms'));\n modeElem.appendChild(this.modeSelectElement);\n config.viewProps.bindDisabled(this.modeElem_);\n const modeMarkerElem = doc.createElement('div');\n modeMarkerElem.classList.add(cn('mm'));\n modeMarkerElem.appendChild(createSvgIconElement(doc, 'dropdown'));\n modeElem.appendChild(modeMarkerElem);\n this.element.appendChild(modeElem);\n const inputsElem = doc.createElement('div');\n inputsElem.classList.add(cn('w'));\n this.element.appendChild(inputsElem);\n this.inputsElem_ = inputsElem;\n this.inputViews_ = config.inputViews;\n this.applyInputViews_();\n bindValue(config.mode, (mode) => {\n this.modeElem_.value = mode;\n });\n }\n get modeSelectElement() {\n return this.modeElem_;\n }\n get inputViews() {\n return this.inputViews_;\n }\n set inputViews(inputViews) {\n this.inputViews_ = inputViews;\n this.applyInputViews_();\n }\n applyInputViews_() {\n removeChildElements(this.inputsElem_);\n const doc = this.element.ownerDocument;\n this.inputViews_.forEach((v) => {\n const compElem = doc.createElement('div');\n compElem.classList.add(cn('c'));\n compElem.appendChild(v.element);\n this.inputsElem_.appendChild(compElem);\n });\n }\n}\n","import { DefiniteRangeConstraint } from '../../../common/constraint/definite-range.js';\nimport { TextController } from '../../../common/controller/text.js';\nimport { createNumberFormatter, parseNumber, } from '../../../common/converter/number.js';\nimport { ValueMap } from '../../../common/model/value-map.js';\nimport { connectValues } from '../../../common/model/value-sync.js';\nimport { createValue } from '../../../common/model/values.js';\nimport { NumberTextController } from '../../../common/number/controller/number-text.js';\nimport { colorToHexRgbString, createColorStringParser, } from '../converter/color-string.js';\nimport { appendAlphaComponent, getColorMaxComponents, removeAlphaComponent, } from '../model/color-model.js';\nimport { createColor, mapColorType } from '../model/colors.js';\nimport { IntColor } from '../model/int-color.js';\nimport { getKeyScaleForColor } from '../util.js';\nimport { ColorTextsView } from '../view/color-texts.js';\nfunction createFormatter(type) {\n return createNumberFormatter(type === 'float' ? 2 : 0);\n}\nfunction createConstraint(mode, type, index) {\n const max = getColorMaxComponents(mode, type)[index];\n return new DefiniteRangeConstraint({\n min: 0,\n max: max,\n });\n}\nfunction createComponentController(doc, config, index) {\n return new NumberTextController(doc, {\n arrayPosition: index === 0 ? 'fst' : index === 3 - 1 ? 'lst' : 'mid',\n parser: config.parser,\n props: ValueMap.fromObject({\n formatter: createFormatter(config.colorType),\n keyScale: getKeyScaleForColor(false),\n pointerScale: config.colorType === 'float' ? 0.01 : 1,\n }),\n value: createValue(0, {\n constraint: createConstraint(config.colorMode, config.colorType, index),\n }),\n viewProps: config.viewProps,\n });\n}\nfunction createComponentControllers(doc, config) {\n const cc = {\n colorMode: config.colorMode,\n colorType: config.colorType,\n parser: parseNumber,\n viewProps: config.viewProps,\n };\n return [0, 1, 2].map((i) => {\n const c = createComponentController(doc, cc, i);\n connectValues({\n primary: config.value,\n secondary: c.value,\n forward(p) {\n const mc = mapColorType(p, config.colorType);\n return mc.getComponents(config.colorMode)[i];\n },\n backward(p, s) {\n const pickedMode = config.colorMode;\n const mc = mapColorType(p, config.colorType);\n const comps = mc.getComponents(pickedMode);\n comps[i] = s;\n const c = createColor(appendAlphaComponent(removeAlphaComponent(comps), comps[3]), pickedMode, config.colorType);\n return mapColorType(c, 'int');\n },\n });\n return c;\n });\n}\nfunction createHexController(doc, config) {\n const c = new TextController(doc, {\n parser: createColorStringParser('int'),\n props: ValueMap.fromObject({\n formatter: colorToHexRgbString,\n }),\n value: createValue(IntColor.black()),\n viewProps: config.viewProps,\n });\n connectValues({\n primary: config.value,\n secondary: c.value,\n forward: (p) => new IntColor(removeAlphaComponent(p.getComponents()), p.mode),\n backward: (p, s) => new IntColor(appendAlphaComponent(removeAlphaComponent(s.getComponents(p.mode)), p.getComponents()[3]), p.mode),\n });\n return [c];\n}\nfunction isColorMode(mode) {\n return mode !== 'hex';\n}\n/**\n * @hidden\n */\nexport class ColorTextsController {\n constructor(doc, config) {\n this.onModeSelectChange_ = this.onModeSelectChange_.bind(this);\n this.colorType_ = config.colorType;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.colorMode = createValue(this.value.rawValue.mode);\n this.ccs_ = this.createComponentControllers_(doc);\n this.view = new ColorTextsView(doc, {\n mode: this.colorMode,\n inputViews: [this.ccs_[0].view, this.ccs_[1].view, this.ccs_[2].view],\n viewProps: this.viewProps,\n });\n this.view.modeSelectElement.addEventListener('change', this.onModeSelectChange_);\n }\n createComponentControllers_(doc) {\n const mode = this.colorMode.rawValue;\n if (isColorMode(mode)) {\n return createComponentControllers(doc, {\n colorMode: mode,\n colorType: this.colorType_,\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n return createHexController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n onModeSelectChange_(ev) {\n const selectElem = ev.currentTarget;\n this.colorMode.rawValue = selectElem.value;\n this.ccs_ = this.createComponentControllers_(this.view.element.ownerDocument);\n this.view.inputViews = this.ccs_.map((cc) => cc.view);\n }\n}\n","import { mapRange } from '../../../common/number/util.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nimport { colorToFunctionalRgbString } from '../converter/color-string.js';\nimport { IntColor } from '../model/int-color.js';\nconst cn = ClassName('hpl');\n/**\n * @hidden\n */\nexport class HPaletteView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value = config.value;\n this.value.emitter.on('change', this.onValueChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n config.viewProps.bindTabIndex(this.element);\n const colorElem = doc.createElement('div');\n colorElem.classList.add(cn('c'));\n this.element.appendChild(colorElem);\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn('m'));\n this.element.appendChild(markerElem);\n this.markerElem_ = markerElem;\n this.update_();\n }\n update_() {\n const c = this.value.rawValue;\n const [h] = c.getComponents('hsv');\n this.markerElem_.style.backgroundColor = colorToFunctionalRgbString(new IntColor([h, 100, 100], 'hsv'));\n const left = mapRange(h, 0, 360, 0, 100);\n this.markerElem_.style.left = `${left}%`;\n }\n onValueChange_() {\n this.update_();\n }\n}\n","import { constrainRange, mapRange } from '../../../common/number/util.js';\nimport { getHorizontalStepKeys, getStepForKey } from '../../../common/ui.js';\nimport { PointerHandler, } from '../../../common/view/pointer-handler.js';\nimport { IntColor } from '../model/int-color.js';\nimport { getKeyScaleForColor } from '../util.js';\nimport { HPaletteView } from '../view/h-palette.js';\n/**\n * @hidden\n */\nexport class HPaletteController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new HPaletteView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.element);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.element.addEventListener('keydown', this.onKeyDown_);\n this.view.element.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const hue = mapRange(constrainRange(d.point.x, 0, d.bounds.width), 0, d.bounds.width, 0, 360);\n const c = this.value.rawValue;\n const [, s, v, a] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([hue, s, v, a], 'hsv'), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n const step = getStepForKey(getKeyScaleForColor(false), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n const c = this.value.rawValue;\n const [h, s, v, a] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([h + step, s, v, a], 'hsv'), {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const step = getStepForKey(getKeyScaleForColor(false), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n","import { getCanvasContext } from '../../../common/dom-util.js';\nimport { mapRange } from '../../../common/number/util.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nimport { hsvToRgbInt } from '../model/color-model.js';\nconst cn = ClassName('svp');\nconst CANVAS_RESOL = 64;\n/**\n * @hidden\n */\nexport class SvPaletteView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value = config.value;\n this.value.emitter.on('change', this.onValueChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n config.viewProps.bindTabIndex(this.element);\n const canvasElem = doc.createElement('canvas');\n canvasElem.height = CANVAS_RESOL;\n canvasElem.width = CANVAS_RESOL;\n canvasElem.classList.add(cn('c'));\n this.element.appendChild(canvasElem);\n this.canvasElement = canvasElem;\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn('m'));\n this.element.appendChild(markerElem);\n this.markerElem_ = markerElem;\n this.update_();\n }\n update_() {\n const ctx = getCanvasContext(this.canvasElement);\n if (!ctx) {\n return;\n }\n const c = this.value.rawValue;\n const hsvComps = c.getComponents('hsv');\n const width = this.canvasElement.width;\n const height = this.canvasElement.height;\n const imgData = ctx.getImageData(0, 0, width, height);\n const data = imgData.data;\n for (let iy = 0; iy < height; iy++) {\n for (let ix = 0; ix < width; ix++) {\n const s = mapRange(ix, 0, width, 0, 100);\n const v = mapRange(iy, 0, height, 100, 0);\n const rgbComps = hsvToRgbInt(hsvComps[0], s, v);\n const i = (iy * width + ix) * 4;\n data[i] = rgbComps[0];\n data[i + 1] = rgbComps[1];\n data[i + 2] = rgbComps[2];\n data[i + 3] = 255;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n const left = mapRange(hsvComps[1], 0, 100, 0, 100);\n this.markerElem_.style.left = `${left}%`;\n const top = mapRange(hsvComps[2], 0, 100, 100, 0);\n this.markerElem_.style.top = `${top}%`;\n }\n onValueChange_() {\n this.update_();\n }\n}\n","import { mapRange } from '../../../common/number/util.js';\nimport { getHorizontalStepKeys, getStepForKey, getVerticalStepKeys, isArrowKey, } from '../../../common/ui.js';\nimport { PointerHandler, } from '../../../common/view/pointer-handler.js';\nimport { IntColor } from '../model/int-color.js';\nimport { getKeyScaleForColor } from '../util.js';\nimport { SvPaletteView } from '../view/sv-palette.js';\n/**\n * @hidden\n */\nexport class SvPaletteController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new SvPaletteView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.element);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.element.addEventListener('keydown', this.onKeyDown_);\n this.view.element.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const saturation = mapRange(d.point.x, 0, d.bounds.width, 0, 100);\n const value = mapRange(d.point.y, 0, d.bounds.height, 100, 0);\n const [h, , , a] = this.value.rawValue.getComponents('hsv');\n this.value.setRawValue(new IntColor([h, saturation, value, a], 'hsv'), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n if (isArrowKey(ev.key)) {\n ev.preventDefault();\n }\n const [h, s, v, a] = this.value.rawValue.getComponents('hsv');\n const keyScale = getKeyScaleForColor(false);\n const ds = getStepForKey(keyScale, getHorizontalStepKeys(ev));\n const dv = getStepForKey(keyScale, getVerticalStepKeys(ev));\n if (ds === 0 && dv === 0) {\n return;\n }\n this.value.setRawValue(new IntColor([h, s + ds, v + dv, a], 'hsv'), {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const keyScale = getKeyScaleForColor(false);\n const ds = getStepForKey(keyScale, getHorizontalStepKeys(ev));\n const dv = getStepForKey(keyScale, getVerticalStepKeys(ev));\n if (ds === 0 && dv === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n","import { DefiniteRangeConstraint } from '../../../common/constraint/definite-range.js';\nimport { createNumberFormatter, parseNumber, } from '../../../common/converter/number.js';\nimport { ValueMap } from '../../../common/model/value-map.js';\nimport { connectValues } from '../../../common/model/value-sync.js';\nimport { createValue } from '../../../common/model/values.js';\nimport { NumberTextController } from '../../../common/number/controller/number-text.js';\nimport { IntColor } from '../model/int-color.js';\nimport { ColorPickerView } from '../view/color-picker.js';\nimport { APaletteController } from './a-palette.js';\nimport { ColorTextsController } from './color-texts.js';\nimport { HPaletteController } from './h-palette.js';\nimport { SvPaletteController } from './sv-palette.js';\n/**\n * @hidden\n */\nexport class ColorPickerController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.hPaletteC_ = new HPaletteController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.svPaletteC_ = new SvPaletteController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.alphaIcs_ = config.supportsAlpha\n ? {\n palette: new APaletteController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n }),\n text: new NumberTextController(doc, {\n parser: parseNumber,\n props: ValueMap.fromObject({\n pointerScale: 0.01,\n keyScale: 0.1,\n formatter: createNumberFormatter(2),\n }),\n value: createValue(0, {\n constraint: new DefiniteRangeConstraint({ min: 0, max: 1 }),\n }),\n viewProps: this.viewProps,\n }),\n }\n : null;\n if (this.alphaIcs_) {\n connectValues({\n primary: this.value,\n secondary: this.alphaIcs_.text.value,\n forward: (p) => p.getComponents()[3],\n backward: (p, s) => {\n const comps = p.getComponents();\n comps[3] = s;\n return new IntColor(comps, p.mode);\n },\n });\n }\n this.textsC_ = new ColorTextsController(doc, {\n colorType: config.colorType,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view = new ColorPickerView(doc, {\n alphaViews: this.alphaIcs_\n ? {\n palette: this.alphaIcs_.palette.view,\n text: this.alphaIcs_.text.view,\n }\n : null,\n hPaletteView: this.hPaletteC_.view,\n supportsAlpha: config.supportsAlpha,\n svPaletteView: this.svPaletteC_.view,\n textsView: this.textsC_.view,\n viewProps: this.viewProps,\n });\n }\n get textsController() {\n return this.textsC_;\n }\n}\n","import { ClassName } from '../../../common/view/class-name.js';\nimport { colorToHexRgbaString } from '../converter/color-string.js';\nconst cn = ClassName('colsw');\n/**\n * @hidden\n */\nexport class ColorSwatchView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n config.value.emitter.on('change', this.onValueChange_);\n this.value = config.value;\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const swatchElem = doc.createElement('div');\n swatchElem.classList.add(cn('sw'));\n this.element.appendChild(swatchElem);\n this.swatchElem_ = swatchElem;\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn('b'));\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n this.update_();\n }\n update_() {\n const value = this.value.rawValue;\n this.swatchElem_.style.backgroundColor = colorToHexRgbaString(value);\n }\n onValueChange_() {\n this.update_();\n }\n}\n","import { ColorSwatchView } from '../view/color-swatch.js';\n/**\n * @hidden\n */\nexport class ColorSwatchController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new ColorSwatchView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n}\n","import { bindFoldable, Foldable } from '../../../blade/common/model/foldable.js';\nimport { PopupController } from '../../../common/controller/popup.js';\nimport { TextController } from '../../../common/controller/text.js';\nimport { findNextTarget, supportsTouch } from '../../../common/dom-util.js';\nimport { ValueMap } from '../../../common/model/value-map.js';\nimport { connectValues } from '../../../common/model/value-sync.js';\nimport { forceCast } from '../../../misc/type-util.js';\nimport { ColorView } from '../view/color.js';\nimport { ColorPickerController } from './color-picker.js';\nimport { ColorSwatchController } from './color-swatch.js';\n/**\n * @hidden\n */\nexport class ColorController {\n constructor(doc, config) {\n this.onButtonBlur_ = this.onButtonBlur_.bind(this);\n this.onButtonClick_ = this.onButtonClick_.bind(this);\n this.onPopupChildBlur_ = this.onPopupChildBlur_.bind(this);\n this.onPopupChildKeydown_ = this.onPopupChildKeydown_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.foldable_ = Foldable.create(config.expanded);\n this.swatchC_ = new ColorSwatchController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n const buttonElem = this.swatchC_.view.buttonElement;\n buttonElem.addEventListener('blur', this.onButtonBlur_);\n buttonElem.addEventListener('click', this.onButtonClick_);\n this.textC_ = new TextController(doc, {\n parser: config.parser,\n props: ValueMap.fromObject({\n formatter: config.formatter,\n }),\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view = new ColorView(doc, {\n foldable: this.foldable_,\n pickerLayout: config.pickerLayout,\n });\n this.view.swatchElement.appendChild(this.swatchC_.view.element);\n this.view.textElement.appendChild(this.textC_.view.element);\n this.popC_ =\n config.pickerLayout === 'popup'\n ? new PopupController(doc, {\n viewProps: this.viewProps,\n })\n : null;\n const pickerC = new ColorPickerController(doc, {\n colorType: config.colorType,\n supportsAlpha: config.supportsAlpha,\n value: this.value,\n viewProps: this.viewProps,\n });\n pickerC.view.allFocusableElements.forEach((elem) => {\n elem.addEventListener('blur', this.onPopupChildBlur_);\n elem.addEventListener('keydown', this.onPopupChildKeydown_);\n });\n this.pickerC_ = pickerC;\n if (this.popC_) {\n this.view.element.appendChild(this.popC_.view.element);\n this.popC_.view.element.appendChild(pickerC.view.element);\n connectValues({\n primary: this.foldable_.value('expanded'),\n secondary: this.popC_.shows,\n forward: (p) => p,\n backward: (_, s) => s,\n });\n }\n else if (this.view.pickerElement) {\n this.view.pickerElement.appendChild(this.pickerC_.view.element);\n bindFoldable(this.foldable_, this.view.pickerElement);\n }\n }\n get textController() {\n return this.textC_;\n }\n onButtonBlur_(e) {\n if (!this.popC_) {\n return;\n }\n const elem = this.view.element;\n const nextTarget = forceCast(e.relatedTarget);\n if (!nextTarget || !elem.contains(nextTarget)) {\n this.popC_.shows.rawValue = false;\n }\n }\n onButtonClick_() {\n this.foldable_.set('expanded', !this.foldable_.get('expanded'));\n if (this.foldable_.get('expanded')) {\n this.pickerC_.view.allFocusableElements[0].focus();\n }\n }\n onPopupChildBlur_(ev) {\n if (!this.popC_) {\n return;\n }\n const elem = this.popC_.view.element;\n const nextTarget = findNextTarget(ev);\n if (nextTarget && elem.contains(nextTarget)) {\n // Next target is in the picker\n return;\n }\n if (nextTarget &&\n nextTarget === this.swatchC_.view.buttonElement &&\n !supportsTouch(elem.ownerDocument)) {\n // Next target is the trigger button\n return;\n }\n this.popC_.shows.rawValue = false;\n }\n onPopupChildKeydown_(ev) {\n if (this.popC_) {\n if (ev.key === 'Escape') {\n this.popC_.shows.rawValue = false;\n }\n }\n else if (this.view.pickerElement) {\n if (ev.key === 'Escape') {\n this.swatchC_.view.buttonElement.focus();\n }\n }\n }\n}\n","import { mapRange } from '../../../common/number/util.js';\nimport { removeAlphaComponent } from '../model/color-model.js';\nimport { IntColor } from '../model/int-color.js';\nexport function colorToRgbNumber(value) {\n return removeAlphaComponent(value.getComponents('rgb')).reduce((result, comp) => {\n return (result << 8) | (Math.floor(comp) & 0xff);\n }, 0);\n}\nexport function colorToRgbaNumber(value) {\n return (value.getComponents('rgb').reduce((result, comp, index) => {\n const hex = Math.floor(index === 3 ? comp * 255 : comp) & 0xff;\n return (result << 8) | hex;\n }, 0) >>> 0);\n}\nexport function numberToRgbColor(num) {\n return new IntColor([(num >> 16) & 0xff, (num >> 8) & 0xff, num & 0xff], 'rgb');\n}\nexport function numberToRgbaColor(num) {\n return new IntColor([\n (num >> 24) & 0xff,\n (num >> 16) & 0xff,\n (num >> 8) & 0xff,\n mapRange(num & 0xff, 0, 255, 0, 1),\n ], 'rgb');\n}\nexport function colorFromRgbNumber(value) {\n if (typeof value !== 'number') {\n return IntColor.black();\n }\n return numberToRgbColor(value);\n}\nexport function colorFromRgbaNumber(value) {\n if (typeof value !== 'number') {\n return IntColor.black();\n }\n return numberToRgbaColor(value);\n}\n","import { isEmpty } from '../../../misc/type-util.js';\nfunction isRgbColorComponent(obj, key) {\n if (typeof obj !== 'object' || isEmpty(obj)) {\n return false;\n }\n return key in obj && typeof obj[key] === 'number';\n}\nexport function isRgbColorObject(obj) {\n return (isRgbColorComponent(obj, 'r') &&\n isRgbColorComponent(obj, 'g') &&\n isRgbColorComponent(obj, 'b'));\n}\nexport function isRgbaColorObject(obj) {\n return isRgbColorObject(obj) && isRgbColorComponent(obj, 'a');\n}\nexport function isColorObject(obj) {\n return isRgbColorObject(obj);\n}\nexport function equalsColor(v1, v2) {\n if (v1.mode !== v2.mode) {\n return false;\n }\n if (v1.type !== v2.type) {\n return false;\n }\n const comps1 = v1.getComponents();\n const comps2 = v2.getComponents();\n for (let i = 0; i < comps1.length; i++) {\n if (comps1[i] !== comps2[i]) {\n return false;\n }\n }\n return true;\n}\nexport function createColorComponentsFromRgbObject(obj) {\n return 'a' in obj ? [obj.r, obj.g, obj.b, obj.a] : [obj.r, obj.g, obj.b];\n}\n","import { writePrimitive } from '../../../common/primitive.js';\nimport { colorToRgbaNumber, colorToRgbNumber, } from '../converter/color-number.js';\nimport { findColorStringifier, } from '../converter/color-string.js';\nimport { mapColorType } from '../model/colors.js';\nexport function createColorStringWriter(format) {\n const stringify = findColorStringifier(format);\n return stringify\n ? (target, value) => {\n writePrimitive(target, stringify(value));\n }\n : null;\n}\nexport function createColorNumberWriter(supportsAlpha) {\n const colorToNumber = supportsAlpha ? colorToRgbaNumber : colorToRgbNumber;\n return (target, value) => {\n writePrimitive(target, colorToNumber(value));\n };\n}\nexport function writeRgbaColorObject(target, value, type) {\n const cc = mapColorType(value, type);\n const obj = cc.toRgbaObject();\n target.writeProperty('r', obj.r);\n target.writeProperty('g', obj.g);\n target.writeProperty('b', obj.b);\n target.writeProperty('a', obj.a);\n}\nexport function writeRgbColorObject(target, value, type) {\n const cc = mapColorType(value, type);\n const obj = cc.toRgbaObject();\n target.writeProperty('r', obj.r);\n target.writeProperty('g', obj.g);\n target.writeProperty('b', obj.b);\n}\nexport function createColorObjectWriter(supportsAlpha, type) {\n return (target, inValue) => {\n if (supportsAlpha) {\n writeRgbaColorObject(target, inValue, type);\n }\n else {\n writeRgbColorObject(target, inValue, type);\n }\n };\n}\n","import { createPlugin } from '../../plugin/plugin.js';\nimport { ColorController } from './controller/color.js';\nimport { colorFromRgbaNumber, colorFromRgbNumber, } from './converter/color-number.js';\nimport { colorToHexRgbaString, colorToHexRgbString, createColorStringParser, } from './converter/color-string.js';\nimport { createColorNumberWriter } from './converter/writer.js';\nimport { equalsColor } from './model/color.js';\nimport { parseColorInputParams } from './util.js';\nfunction shouldSupportAlpha(inputParams) {\n var _a;\n if ((_a = inputParams === null || inputParams === void 0 ? void 0 : inputParams.color) === null || _a === void 0 ? void 0 : _a.alpha) {\n return true;\n }\n return false;\n}\nfunction createFormatter(supportsAlpha) {\n return supportsAlpha\n ? (v) => colorToHexRgbaString(v, '0x')\n : (v) => colorToHexRgbString(v, '0x');\n}\nfunction isForColor(params) {\n if ('color' in params) {\n return true;\n }\n if (params.view === 'color') {\n return true;\n }\n return false;\n}\n/**\n * @hidden\n */\nexport const NumberColorInputPlugin = createPlugin({\n id: 'input-color-number',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'number') {\n return null;\n }\n if (!isForColor(params)) {\n return null;\n }\n const result = parseColorInputParams(params);\n return result\n ? {\n initialValue: value,\n params: Object.assign(Object.assign({}, result), { supportsAlpha: shouldSupportAlpha(params) }),\n }\n : null;\n },\n binding: {\n reader: (args) => {\n return args.params.supportsAlpha\n ? colorFromRgbaNumber\n : colorFromRgbNumber;\n },\n equals: equalsColor,\n writer: (args) => {\n return createColorNumberWriter(args.params.supportsAlpha);\n },\n },\n controller: (args) => {\n var _a, _b;\n return new ColorController(args.document, {\n colorType: 'int',\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n formatter: createFormatter(args.params.supportsAlpha),\n parser: createColorStringParser('int'),\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n supportsAlpha: args.params.supportsAlpha,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n","import { createColorComponentsFromRgbObject, isColorObject, } from '../model/color.js';\nimport { mapColorType } from '../model/colors.js';\nimport { FloatColor } from '../model/float-color.js';\nimport { IntColor } from '../model/int-color.js';\nexport function colorFromObject(value, type) {\n if (!isColorObject(value)) {\n return mapColorType(IntColor.black(), type);\n }\n if (type === 'int') {\n const comps = createColorComponentsFromRgbObject(value);\n return new IntColor(comps, 'rgb');\n }\n if (type === 'float') {\n const comps = createColorComponentsFromRgbObject(value);\n return new FloatColor(comps, 'rgb');\n }\n return mapColorType(IntColor.black(), 'int');\n}\n","import { createPlugin } from '../../plugin/plugin.js';\nimport { ColorController } from './controller/color.js';\nimport { colorFromObject } from './converter/color-object.js';\nimport { colorToObjectRgbaString, colorToObjectRgbString, createColorStringParser, } from './converter/color-string.js';\nimport { createColorObjectWriter } from './converter/writer.js';\nimport { equalsColor, isColorObject, isRgbaColorObject, } from './model/color.js';\nimport { mapColorType } from './model/colors.js';\nimport { extractColorType, parseColorInputParams } from './util.js';\nfunction shouldSupportAlpha(initialValue) {\n return isRgbaColorObject(initialValue);\n}\nfunction createColorObjectBindingReader(type) {\n return (value) => {\n const c = colorFromObject(value, type);\n return mapColorType(c, 'int');\n };\n}\nfunction createColorObjectFormatter(supportsAlpha, type) {\n return (value) => {\n if (supportsAlpha) {\n return colorToObjectRgbaString(value, type);\n }\n return colorToObjectRgbString(value, type);\n };\n}\n/**\n * @hidden\n */\nexport const ObjectColorInputPlugin = createPlugin({\n id: 'input-color-object',\n type: 'input',\n accept: (value, params) => {\n var _a;\n if (!isColorObject(value)) {\n return null;\n }\n const result = parseColorInputParams(params);\n return result\n ? {\n initialValue: value,\n params: Object.assign(Object.assign({}, result), { colorType: (_a = extractColorType(params)) !== null && _a !== void 0 ? _a : 'int' }),\n }\n : null;\n },\n binding: {\n reader: (args) => createColorObjectBindingReader(args.params.colorType),\n equals: equalsColor,\n writer: (args) => createColorObjectWriter(shouldSupportAlpha(args.initialValue), args.params.colorType),\n },\n controller: (args) => {\n var _a, _b;\n const supportsAlpha = isRgbaColorObject(args.initialValue);\n return new ColorController(args.document, {\n colorType: args.params.colorType,\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n formatter: createColorObjectFormatter(supportsAlpha, args.params.colorType),\n parser: createColorStringParser('int'),\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n supportsAlpha: supportsAlpha,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n","import { TpError } from '../../common/tp-error.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { ColorController } from './controller/color.js';\nimport { createColorStringParser, detectStringColorFormat, findColorStringifier, readIntColorString, } from './converter/color-string.js';\nimport { createColorStringWriter } from './converter/writer.js';\nimport { equalsColor } from './model/color.js';\nimport { extractColorType, parseColorInputParams } from './util.js';\n/**\n * @hidden\n */\nexport const StringColorInputPlugin = createPlugin({\n id: 'input-color-string',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'string') {\n return null;\n }\n if (params.view === 'text') {\n return null;\n }\n const format = detectStringColorFormat(value, extractColorType(params));\n if (!format) {\n return null;\n }\n const stringifier = findColorStringifier(format);\n if (!stringifier) {\n return null;\n }\n const result = parseColorInputParams(params);\n return result\n ? {\n initialValue: value,\n params: Object.assign(Object.assign({}, result), { format: format, stringifier: stringifier }),\n }\n : null;\n },\n binding: {\n reader: () => readIntColorString,\n equals: equalsColor,\n writer: (args) => {\n const writer = createColorStringWriter(args.params.format);\n if (!writer) {\n throw TpError.notBindable();\n }\n return writer;\n },\n },\n controller: (args) => {\n var _a, _b;\n return new ColorController(args.document, {\n colorType: args.params.format.type,\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n formatter: args.params.stringifier,\n parser: createColorStringParser('int'),\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n supportsAlpha: args.params.format.alpha,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n","/**\n * @hidden\n */\nexport class PointNdConstraint {\n constructor(config) {\n this.components = config.components;\n this.asm_ = config.assembly;\n }\n constrain(value) {\n const comps = this.asm_\n .toComponents(value)\n .map((comp, index) => { var _a, _b; return (_b = (_a = this.components[index]) === null || _a === void 0 ? void 0 : _a.constrain(comp)) !== null && _b !== void 0 ? _b : comp; });\n return this.asm_.fromComponents(comps);\n }\n}\n","import { ClassName } from '../../../common/view/class-name.js';\nconst cn = ClassName('pndtxt');\n/**\n * @hidden\n */\nexport class PointNdTextView {\n constructor(doc, config) {\n this.textViews = config.textViews;\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n this.textViews.forEach((v) => {\n const axisElem = doc.createElement('div');\n axisElem.classList.add(cn('a'));\n axisElem.appendChild(v.element);\n this.element.appendChild(axisElem);\n });\n }\n}\n","import { connectValues } from '../../../common/model/value-sync.js';\nimport { createValue } from '../../../common/model/values.js';\nimport { NumberTextController } from '../../../common/number/controller/number-text.js';\nimport { PointNdTextView } from '../view/point-nd-text.js';\nfunction createAxisController(doc, config, index) {\n return new NumberTextController(doc, {\n arrayPosition: index === 0 ? 'fst' : index === config.axes.length - 1 ? 'lst' : 'mid',\n parser: config.parser,\n props: config.axes[index].textProps,\n value: createValue(0, {\n constraint: config.axes[index].constraint,\n }),\n viewProps: config.viewProps,\n });\n}\n/**\n * @hidden\n */\nexport class PointNdTextController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.acs_ = config.axes.map((_, index) => createAxisController(doc, config, index));\n this.acs_.forEach((c, index) => {\n connectValues({\n primary: this.value,\n secondary: c.value,\n forward: (p) => config.assembly.toComponents(p)[index],\n backward: (p, s) => {\n const comps = config.assembly.toComponents(p);\n comps[index] = s;\n return config.assembly.fromComponents(comps);\n },\n });\n });\n this.view = new PointNdTextView(doc, {\n textViews: this.acs_.map((ac) => ac.view),\n });\n }\n get textControllers() {\n return this.acs_;\n }\n}\n","import { BindingApi } from '../../../blade/binding/api/binding.js';\nexport class SliderInputBindingApi extends BindingApi {\n get max() {\n return this.controller.valueController.sliderController.props.get('max');\n }\n set max(max) {\n this.controller.valueController.sliderController.props.set('max', max);\n }\n get min() {\n return this.controller.valueController.sliderController.props.get('min');\n }\n set min(max) {\n this.controller.valueController.sliderController.props.set('min', max);\n }\n}\n","import { ListInputBindingApi } from '../../common/api/list.js';\nimport { CompositeConstraint, findConstraint, } from '../../common/constraint/composite.js';\nimport { DefiniteRangeConstraint } from '../../common/constraint/definite-range.js';\nimport { ListConstraint } from '../../common/constraint/list.js';\nimport { ListController } from '../../common/controller/list.js';\nimport { numberFromUnknown, parseNumber } from '../../common/converter/number.js';\nimport { createListConstraint, parseListOptions, } from '../../common/list-util.js';\nimport { parseRecord } from '../../common/micro-parsers.js';\nimport { ValueMap } from '../../common/model/value-map.js';\nimport { createValue } from '../../common/model/values.js';\nimport { NumberTextController } from '../../common/number/controller/number-text.js';\nimport { createSliderTextProps, SliderTextController, } from '../../common/number/controller/slider-text.js';\nimport { createNumberTextInputParamsParser, createNumberTextPropsObject, createRangeConstraint, createStepConstraint, } from '../../common/number/util.js';\nimport { writePrimitive } from '../../common/primitive.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { SliderInputBindingApi } from './api/slider.js';\nfunction createConstraint(params, initialValue) {\n const constraints = [];\n const sc = createStepConstraint(params, initialValue);\n if (sc) {\n constraints.push(sc);\n }\n const rc = createRangeConstraint(params);\n if (rc) {\n constraints.push(rc);\n }\n const lc = createListConstraint(params.options);\n if (lc) {\n constraints.push(lc);\n }\n return new CompositeConstraint(constraints);\n}\n/**\n * @hidden\n */\nexport const NumberInputPlugin = createPlugin({\n id: 'input-number',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'number') {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createNumberTextInputParamsParser(p)), { options: p.optional.custom(parseListOptions), readonly: p.optional.constant(false) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => numberFromUnknown,\n constraint: (args) => createConstraint(args.params, args.initialValue),\n writer: (_args) => writePrimitive,\n },\n controller: (args) => {\n const value = args.value;\n const c = args.constraint;\n const lc = c && findConstraint(c, ListConstraint);\n if (lc) {\n return new ListController(args.document, {\n props: new ValueMap({\n options: lc.values.value('options'),\n }),\n value: value,\n viewProps: args.viewProps,\n });\n }\n const textPropsObj = createNumberTextPropsObject(args.params, value.rawValue);\n const drc = c && findConstraint(c, DefiniteRangeConstraint);\n if (drc) {\n return new SliderTextController(args.document, Object.assign(Object.assign({}, createSliderTextProps(Object.assign(Object.assign({}, textPropsObj), { keyScale: createValue(textPropsObj.keyScale), max: drc.values.value('max'), min: drc.values.value('min') }))), { parser: parseNumber, value: value, viewProps: args.viewProps }));\n }\n return new NumberTextController(args.document, {\n parser: parseNumber,\n props: ValueMap.fromObject(textPropsObj),\n value: value,\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (typeof args.controller.value.rawValue !== 'number') {\n return null;\n }\n if (args.controller.valueController instanceof SliderTextController) {\n return new SliderInputBindingApi(args.controller);\n }\n if (args.controller.valueController instanceof ListController) {\n return new ListInputBindingApi(args.controller);\n }\n return null;\n },\n});\n","import { isEmpty } from '../../../misc/type-util.js';\nexport class Point2d {\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n getComponents() {\n return [this.x, this.y];\n }\n static isObject(obj) {\n if (isEmpty(obj)) {\n return false;\n }\n const x = obj.x;\n const y = obj.y;\n if (typeof x !== 'number' || typeof y !== 'number') {\n return false;\n }\n return true;\n }\n static equals(v1, v2) {\n return v1.x === v2.x && v1.y === v2.y;\n }\n toObject() {\n return {\n x: this.x,\n y: this.y,\n };\n }\n}\nexport const Point2dAssembly = {\n toComponents: (p) => p.getComponents(),\n fromComponents: (comps) => new Point2d(...comps),\n};\n","import { createSvgIconElement } from '../../../common/dom-util.js';\nimport { bindValue } from '../../../common/model/reactive.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nimport { valueToClassName } from '../../../common/view/reactive.js';\nconst cn = ClassName('p2d');\n/**\n * @hidden\n */\nexport class Point2dView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n bindValue(config.expanded, valueToClassName(this.element, cn(undefined, 'expanded')));\n const headElem = doc.createElement('div');\n headElem.classList.add(cn('h'));\n this.element.appendChild(headElem);\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn('b'));\n buttonElem.appendChild(createSvgIconElement(doc, 'p2dpad'));\n config.viewProps.bindDisabled(buttonElem);\n headElem.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const textElem = doc.createElement('div');\n textElem.classList.add(cn('t'));\n headElem.appendChild(textElem);\n this.textElement = textElem;\n if (config.pickerLayout === 'inline') {\n const pickerElem = doc.createElement('div');\n pickerElem.classList.add(cn('p'));\n this.element.appendChild(pickerElem);\n this.pickerElement = pickerElem;\n }\n else {\n this.pickerElement = null;\n }\n }\n}\n","import { SVG_NS } from '../../../common/dom-util.js';\nimport { mapRange } from '../../../common/number/util.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nconst cn = ClassName('p2dp');\n/**\n * @hidden\n */\nexport class Point2dPickerView {\n constructor(doc, config) {\n this.onFoldableChange_ = this.onFoldableChange_.bind(this);\n this.onPropsChange_ = this.onPropsChange_.bind(this);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onPropsChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n if (config.layout === 'popup') {\n this.element.classList.add(cn(undefined, 'p'));\n }\n config.viewProps.bindClassModifiers(this.element);\n const padElem = doc.createElement('div');\n padElem.classList.add(cn('p'));\n config.viewProps.bindTabIndex(padElem);\n this.element.appendChild(padElem);\n this.padElement = padElem;\n const svgElem = doc.createElementNS(SVG_NS, 'svg');\n svgElem.classList.add(cn('g'));\n this.padElement.appendChild(svgElem);\n this.svgElem_ = svgElem;\n const xAxisElem = doc.createElementNS(SVG_NS, 'line');\n xAxisElem.classList.add(cn('ax'));\n xAxisElem.setAttributeNS(null, 'x1', '0');\n xAxisElem.setAttributeNS(null, 'y1', '50%');\n xAxisElem.setAttributeNS(null, 'x2', '100%');\n xAxisElem.setAttributeNS(null, 'y2', '50%');\n this.svgElem_.appendChild(xAxisElem);\n const yAxisElem = doc.createElementNS(SVG_NS, 'line');\n yAxisElem.classList.add(cn('ax'));\n yAxisElem.setAttributeNS(null, 'x1', '50%');\n yAxisElem.setAttributeNS(null, 'y1', '0');\n yAxisElem.setAttributeNS(null, 'x2', '50%');\n yAxisElem.setAttributeNS(null, 'y2', '100%');\n this.svgElem_.appendChild(yAxisElem);\n const lineElem = doc.createElementNS(SVG_NS, 'line');\n lineElem.classList.add(cn('l'));\n lineElem.setAttributeNS(null, 'x1', '50%');\n lineElem.setAttributeNS(null, 'y1', '50%');\n this.svgElem_.appendChild(lineElem);\n this.lineElem_ = lineElem;\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn('m'));\n this.padElement.appendChild(markerElem);\n this.markerElem_ = markerElem;\n config.value.emitter.on('change', this.onValueChange_);\n this.value = config.value;\n this.update_();\n }\n get allFocusableElements() {\n return [this.padElement];\n }\n update_() {\n const [x, y] = this.value.rawValue.getComponents();\n const max = this.props_.get('max');\n const px = mapRange(x, -max, +max, 0, 100);\n const py = mapRange(y, -max, +max, 0, 100);\n const ipy = this.props_.get('invertsY') ? 100 - py : py;\n this.lineElem_.setAttributeNS(null, 'x2', `${px}%`);\n this.lineElem_.setAttributeNS(null, 'y2', `${ipy}%`);\n this.markerElem_.style.left = `${px}%`;\n this.markerElem_.style.top = `${ipy}%`;\n }\n onValueChange_() {\n this.update_();\n }\n onPropsChange_() {\n this.update_();\n }\n onFoldableChange_() {\n this.update_();\n }\n}\n","import { mapRange } from '../../../common/number/util.js';\nimport { getHorizontalStepKeys, getStepForKey, getVerticalStepKeys, isArrowKey, } from '../../../common/ui.js';\nimport { PointerHandler, } from '../../../common/view/pointer-handler.js';\nimport { Point2d } from '../model/point-2d.js';\nimport { Point2dPickerView, } from '../view/point-2d-picker.js';\nfunction computeOffset(ev, keyScales, invertsY) {\n return [\n getStepForKey(keyScales[0], getHorizontalStepKeys(ev)),\n getStepForKey(keyScales[1], getVerticalStepKeys(ev)) * (invertsY ? 1 : -1),\n ];\n}\n/**\n * @hidden\n */\nexport class Point2dPickerController {\n constructor(doc, config) {\n this.onPadKeyDown_ = this.onPadKeyDown_.bind(this);\n this.onPadKeyUp_ = this.onPadKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new Point2dPickerView(doc, {\n layout: config.layout,\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.padElement);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.padElement.addEventListener('keydown', this.onPadKeyDown_);\n this.view.padElement.addEventListener('keyup', this.onPadKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const max = this.props.get('max');\n const px = mapRange(d.point.x, 0, d.bounds.width, -max, +max);\n const py = mapRange(this.props.get('invertsY') ? d.bounds.height - d.point.y : d.point.y, 0, d.bounds.height, -max, +max);\n this.value.setRawValue(new Point2d(px, py), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onPadKeyDown_(ev) {\n if (isArrowKey(ev.key)) {\n ev.preventDefault();\n }\n const [dx, dy] = computeOffset(ev, [this.props.get('xKeyScale'), this.props.get('yKeyScale')], this.props.get('invertsY'));\n if (dx === 0 && dy === 0) {\n return;\n }\n this.value.setRawValue(new Point2d(this.value.rawValue.x + dx, this.value.rawValue.y + dy), {\n forceEmit: false,\n last: false,\n });\n }\n onPadKeyUp_(ev) {\n const [dx, dy] = computeOffset(ev, [this.props.get('xKeyScale'), this.props.get('yKeyScale')], this.props.get('invertsY'));\n if (dx === 0 && dy === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n","import { bindFoldable, Foldable } from '../../../blade/common/model/foldable.js';\nimport { PopupController } from '../../../common/controller/popup.js';\nimport { findNextTarget, supportsTouch } from '../../../common/dom-util.js';\nimport { ValueMap } from '../../../common/model/value-map.js';\nimport { connectValues } from '../../../common/model/value-sync.js';\nimport { createValue } from '../../../common/model/values.js';\nimport { forceCast } from '../../../misc/type-util.js';\nimport { PointNdTextController } from '../../common/controller/point-nd-text.js';\nimport { Point2dAssembly } from '../model/point-2d.js';\nimport { Point2dView } from '../view/point-2d.js';\nimport { Point2dPickerController } from './point-2d-picker.js';\n/**\n * @hidden\n */\nexport class Point2dController {\n constructor(doc, config) {\n var _a, _b;\n this.onPopupChildBlur_ = this.onPopupChildBlur_.bind(this);\n this.onPopupChildKeydown_ = this.onPopupChildKeydown_.bind(this);\n this.onPadButtonBlur_ = this.onPadButtonBlur_.bind(this);\n this.onPadButtonClick_ = this.onPadButtonClick_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.foldable_ = Foldable.create(config.expanded);\n this.popC_ =\n config.pickerLayout === 'popup'\n ? new PopupController(doc, {\n viewProps: this.viewProps,\n })\n : null;\n const padC = new Point2dPickerController(doc, {\n layout: config.pickerLayout,\n props: new ValueMap({\n invertsY: createValue(config.invertsY),\n max: createValue(config.max),\n xKeyScale: config.axes[0].textProps.value('keyScale'),\n yKeyScale: config.axes[1].textProps.value('keyScale'),\n }),\n value: this.value,\n viewProps: this.viewProps,\n });\n padC.view.allFocusableElements.forEach((elem) => {\n elem.addEventListener('blur', this.onPopupChildBlur_);\n elem.addEventListener('keydown', this.onPopupChildKeydown_);\n });\n this.pickerC_ = padC;\n this.textC_ = new PointNdTextController(doc, {\n assembly: Point2dAssembly,\n axes: config.axes,\n parser: config.parser,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view = new Point2dView(doc, {\n expanded: this.foldable_.value('expanded'),\n pickerLayout: config.pickerLayout,\n viewProps: this.viewProps,\n });\n this.view.textElement.appendChild(this.textC_.view.element);\n (_a = this.view.buttonElement) === null || _a === void 0 ? void 0 : _a.addEventListener('blur', this.onPadButtonBlur_);\n (_b = this.view.buttonElement) === null || _b === void 0 ? void 0 : _b.addEventListener('click', this.onPadButtonClick_);\n if (this.popC_) {\n this.view.element.appendChild(this.popC_.view.element);\n this.popC_.view.element.appendChild(this.pickerC_.view.element);\n connectValues({\n primary: this.foldable_.value('expanded'),\n secondary: this.popC_.shows,\n forward: (p) => p,\n backward: (_, s) => s,\n });\n }\n else if (this.view.pickerElement) {\n this.view.pickerElement.appendChild(this.pickerC_.view.element);\n bindFoldable(this.foldable_, this.view.pickerElement);\n }\n }\n get textController() {\n return this.textC_;\n }\n onPadButtonBlur_(e) {\n if (!this.popC_) {\n return;\n }\n const elem = this.view.element;\n const nextTarget = forceCast(e.relatedTarget);\n if (!nextTarget || !elem.contains(nextTarget)) {\n this.popC_.shows.rawValue = false;\n }\n }\n onPadButtonClick_() {\n this.foldable_.set('expanded', !this.foldable_.get('expanded'));\n if (this.foldable_.get('expanded')) {\n this.pickerC_.view.allFocusableElements[0].focus();\n }\n }\n onPopupChildBlur_(ev) {\n if (!this.popC_) {\n return;\n }\n const elem = this.popC_.view.element;\n const nextTarget = findNextTarget(ev);\n if (nextTarget && elem.contains(nextTarget)) {\n // Next target is in the popup\n return;\n }\n if (nextTarget &&\n nextTarget === this.view.buttonElement &&\n !supportsTouch(elem.ownerDocument)) {\n // Next target is the trigger button\n return;\n }\n this.popC_.shows.rawValue = false;\n }\n onPopupChildKeydown_(ev) {\n if (this.popC_) {\n if (ev.key === 'Escape') {\n this.popC_.shows.rawValue = false;\n }\n }\n else if (this.view.pickerElement) {\n if (ev.key === 'Escape') {\n this.view.buttonElement.focus();\n }\n }\n }\n}\n","import { Point2d } from '../model/point-2d.js';\nexport function point2dFromUnknown(value) {\n return Point2d.isObject(value)\n ? new Point2d(value.x, value.y)\n : new Point2d();\n}\nexport function writePoint2d(target, value) {\n target.writeProperty('x', value.x);\n target.writeProperty('y', value.y);\n}\n","import { parseNumber } from '../../common/converter/number.js';\nimport { parseRecord } from '../../common/micro-parsers.js';\nimport { getSuitableKeyScale } from '../../common/number/util.js';\nimport { parsePickerLayout } from '../../common/picker-util.js';\nimport { createPointAxis } from '../../common/point-nd/point-axis.js';\nimport { createPointDimensionParser } from '../../common/point-nd/util.js';\nimport { parsePointDimensionParams } from '../../common/point-nd/util.js';\nimport { createDimensionConstraint } from '../../common/point-nd/util.js';\nimport { deepMerge, isEmpty } from '../../misc/type-util.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { PointNdConstraint } from '../common/constraint/point-nd.js';\nimport { Point2dController } from './controller/point-2d.js';\nimport { point2dFromUnknown, writePoint2d } from './converter/point-2d.js';\nimport { Point2d, Point2dAssembly } from './model/point-2d.js';\nfunction createConstraint(params, initialValue) {\n return new PointNdConstraint({\n assembly: Point2dAssembly,\n components: [\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.x), initialValue.x),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.y), initialValue.y),\n ],\n });\n}\nfunction getSuitableMaxDimensionValue(params, rawValue) {\n var _a, _b;\n if (!isEmpty(params.min) || !isEmpty(params.max)) {\n return Math.max(Math.abs((_a = params.min) !== null && _a !== void 0 ? _a : 0), Math.abs((_b = params.max) !== null && _b !== void 0 ? _b : 0));\n }\n const step = getSuitableKeyScale(params);\n return Math.max(Math.abs(step) * 10, Math.abs(rawValue) * 10);\n}\nexport function getSuitableMax(params, initialValue) {\n var _a, _b;\n const xr = getSuitableMaxDimensionValue(deepMerge(params, ((_a = params.x) !== null && _a !== void 0 ? _a : {})), initialValue.x);\n const yr = getSuitableMaxDimensionValue(deepMerge(params, ((_b = params.y) !== null && _b !== void 0 ? _b : {})), initialValue.y);\n return Math.max(xr, yr);\n}\nfunction shouldInvertY(params) {\n if (!('y' in params)) {\n return false;\n }\n const yParams = params.y;\n if (!yParams) {\n return false;\n }\n return 'inverted' in yParams ? !!yParams.inverted : false;\n}\n/**\n * @hidden\n */\nexport const Point2dInputPlugin = createPlugin({\n id: 'input-point2d',\n type: 'input',\n accept: (value, params) => {\n if (!Point2d.isObject(value)) {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createPointDimensionParser(p)), { expanded: p.optional.boolean, picker: p.optional.custom(parsePickerLayout), readonly: p.optional.constant(false), x: p.optional.custom(parsePointDimensionParams), y: p.optional.object(Object.assign(Object.assign({}, createPointDimensionParser(p)), { inverted: p.optional.boolean })) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: () => point2dFromUnknown,\n constraint: (args) => createConstraint(args.params, args.initialValue),\n equals: Point2d.equals,\n writer: () => writePoint2d,\n },\n controller: (args) => {\n var _a, _b;\n const doc = args.document;\n const value = args.value;\n const c = args.constraint;\n const dParams = [args.params.x, args.params.y];\n return new Point2dController(doc, {\n axes: value.rawValue.getComponents().map((comp, i) => {\n var _a;\n return createPointAxis({\n constraint: c.components[i],\n initialValue: comp,\n params: deepMerge(args.params, ((_a = dParams[i]) !== null && _a !== void 0 ? _a : {})),\n });\n }),\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n invertsY: shouldInvertY(args.params),\n max: getSuitableMax(args.params, value.rawValue),\n parser: parseNumber,\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n","import { isEmpty } from '../../../misc/type-util.js';\nexport class Point3d {\n constructor(x = 0, y = 0, z = 0) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n getComponents() {\n return [this.x, this.y, this.z];\n }\n static isObject(obj) {\n if (isEmpty(obj)) {\n return false;\n }\n const x = obj.x;\n const y = obj.y;\n const z = obj.z;\n if (typeof x !== 'number' ||\n typeof y !== 'number' ||\n typeof z !== 'number') {\n return false;\n }\n return true;\n }\n static equals(v1, v2) {\n return v1.x === v2.x && v1.y === v2.y && v1.z === v2.z;\n }\n toObject() {\n return {\n x: this.x,\n y: this.y,\n z: this.z,\n };\n }\n}\nexport const Point3dAssembly = {\n toComponents: (p) => p.getComponents(),\n fromComponents: (comps) => new Point3d(...comps),\n};\n","import { Point3d } from '../model/point-3d.js';\nexport function point3dFromUnknown(value) {\n return Point3d.isObject(value)\n ? new Point3d(value.x, value.y, value.z)\n : new Point3d();\n}\nexport function writePoint3d(target, value) {\n target.writeProperty('x', value.x);\n target.writeProperty('y', value.y);\n target.writeProperty('z', value.z);\n}\n","import { parseNumber } from '../../common/converter/number.js';\nimport { parseRecord } from '../../common/micro-parsers.js';\nimport { createPointAxis } from '../../common/point-nd/point-axis.js';\nimport { createDimensionConstraint, createPointDimensionParser, parsePointDimensionParams, } from '../../common/point-nd/util.js';\nimport { deepMerge } from '../../misc/type-util.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { PointNdConstraint } from '../common/constraint/point-nd.js';\nimport { PointNdTextController } from '../common/controller/point-nd-text.js';\nimport { point3dFromUnknown, writePoint3d } from './converter/point-3d.js';\nimport { Point3d, Point3dAssembly } from './model/point-3d.js';\nfunction createConstraint(params, initialValue) {\n return new PointNdConstraint({\n assembly: Point3dAssembly,\n components: [\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.x), initialValue.x),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.y), initialValue.y),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.z), initialValue.z),\n ],\n });\n}\n/**\n * @hidden\n */\nexport const Point3dInputPlugin = createPlugin({\n id: 'input-point3d',\n type: 'input',\n accept: (value, params) => {\n if (!Point3d.isObject(value)) {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createPointDimensionParser(p)), { readonly: p.optional.constant(false), x: p.optional.custom(parsePointDimensionParams), y: p.optional.custom(parsePointDimensionParams), z: p.optional.custom(parsePointDimensionParams) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => point3dFromUnknown,\n constraint: (args) => createConstraint(args.params, args.initialValue),\n equals: Point3d.equals,\n writer: (_args) => writePoint3d,\n },\n controller: (args) => {\n const value = args.value;\n const c = args.constraint;\n const dParams = [args.params.x, args.params.y, args.params.z];\n return new PointNdTextController(args.document, {\n assembly: Point3dAssembly,\n axes: value.rawValue.getComponents().map((comp, i) => {\n var _a;\n return createPointAxis({\n constraint: c.components[i],\n initialValue: comp,\n params: deepMerge(args.params, ((_a = dParams[i]) !== null && _a !== void 0 ? _a : {})),\n });\n }),\n parser: parseNumber,\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n","import { isEmpty } from '../../../misc/type-util.js';\nexport class Point4d {\n constructor(x = 0, y = 0, z = 0, w = 0) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n getComponents() {\n return [this.x, this.y, this.z, this.w];\n }\n static isObject(obj) {\n if (isEmpty(obj)) {\n return false;\n }\n const x = obj.x;\n const y = obj.y;\n const z = obj.z;\n const w = obj.w;\n if (typeof x !== 'number' ||\n typeof y !== 'number' ||\n typeof z !== 'number' ||\n typeof w !== 'number') {\n return false;\n }\n return true;\n }\n static equals(v1, v2) {\n return v1.x === v2.x && v1.y === v2.y && v1.z === v2.z && v1.w === v2.w;\n }\n toObject() {\n return {\n x: this.x,\n y: this.y,\n z: this.z,\n w: this.w,\n };\n }\n}\nexport const Point4dAssembly = {\n toComponents: (p) => p.getComponents(),\n fromComponents: (comps) => new Point4d(...comps),\n};\n","import { Point4d } from '../model/point-4d.js';\nexport function point4dFromUnknown(value) {\n return Point4d.isObject(value)\n ? new Point4d(value.x, value.y, value.z, value.w)\n : new Point4d();\n}\nexport function writePoint4d(target, value) {\n target.writeProperty('x', value.x);\n target.writeProperty('y', value.y);\n target.writeProperty('z', value.z);\n target.writeProperty('w', value.w);\n}\n","import { parseNumber } from '../../common/converter/number.js';\nimport { parseRecord } from '../../common/micro-parsers.js';\nimport { createPointAxis } from '../../common/point-nd/point-axis.js';\nimport { createDimensionConstraint, createPointDimensionParser, parsePointDimensionParams, } from '../../common/point-nd/util.js';\nimport { deepMerge } from '../../misc/type-util.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { PointNdConstraint } from '../common/constraint/point-nd.js';\nimport { PointNdTextController } from '../common/controller/point-nd-text.js';\nimport { point4dFromUnknown, writePoint4d } from './converter/point-4d.js';\nimport { Point4d, Point4dAssembly } from './model/point-4d.js';\nfunction createConstraint(params, initialValue) {\n return new PointNdConstraint({\n assembly: Point4dAssembly,\n components: [\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.x), initialValue.x),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.y), initialValue.y),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.z), initialValue.z),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.w), initialValue.w),\n ],\n });\n}\n/**\n * @hidden\n */\nexport const Point4dInputPlugin = createPlugin({\n id: 'input-point4d',\n type: 'input',\n accept: (value, params) => {\n if (!Point4d.isObject(value)) {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createPointDimensionParser(p)), { readonly: p.optional.constant(false), w: p.optional.custom(parsePointDimensionParams), x: p.optional.custom(parsePointDimensionParams), y: p.optional.custom(parsePointDimensionParams), z: p.optional.custom(parsePointDimensionParams) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => point4dFromUnknown,\n constraint: (args) => createConstraint(args.params, args.initialValue),\n equals: Point4d.equals,\n writer: (_args) => writePoint4d,\n },\n controller: (args) => {\n const value = args.value;\n const c = args.constraint;\n const dParams = [\n args.params.x,\n args.params.y,\n args.params.z,\n args.params.w,\n ];\n return new PointNdTextController(args.document, {\n assembly: Point4dAssembly,\n axes: value.rawValue.getComponents().map((comp, i) => {\n var _a;\n return createPointAxis({\n constraint: c.components[i],\n initialValue: comp,\n params: deepMerge(args.params, ((_a = dParams[i]) !== null && _a !== void 0 ? _a : {})),\n });\n }),\n parser: parseNumber,\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n","import { ListInputBindingApi } from '../../common/api/list.js';\nimport { CompositeConstraint, findConstraint, } from '../../common/constraint/composite.js';\nimport { ListConstraint } from '../../common/constraint/list.js';\nimport { ListController } from '../../common/controller/list.js';\nimport { TextController } from '../../common/controller/text.js';\nimport { formatString, stringFromUnknown, } from '../../common/converter/string.js';\nimport { createListConstraint, parseListOptions, } from '../../common/list-util.js';\nimport { parseRecord } from '../../common/micro-parsers.js';\nimport { ValueMap } from '../../common/model/value-map.js';\nimport { writePrimitive } from '../../common/primitive.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nfunction createConstraint(params) {\n const constraints = [];\n const lc = createListConstraint(params.options);\n if (lc) {\n constraints.push(lc);\n }\n return new CompositeConstraint(constraints);\n}\n/**\n * @hidden\n */\nexport const StringInputPlugin = createPlugin({\n id: 'input-string',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'string') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n readonly: p.optional.constant(false),\n options: p.optional.custom(parseListOptions),\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => stringFromUnknown,\n constraint: (args) => createConstraint(args.params),\n writer: (_args) => writePrimitive,\n },\n controller: (args) => {\n const doc = args.document;\n const value = args.value;\n const c = args.constraint;\n const lc = c && findConstraint(c, ListConstraint);\n if (lc) {\n return new ListController(doc, {\n props: new ValueMap({\n options: lc.values.value('options'),\n }),\n value: value,\n viewProps: args.viewProps,\n });\n }\n return new TextController(doc, {\n parser: (v) => v,\n props: ValueMap.fromObject({\n formatter: formatString,\n }),\n value: value,\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (typeof args.controller.value.rawValue !== 'string') {\n return null;\n }\n if (args.controller.valueController instanceof ListController) {\n return new ListInputBindingApi(args.controller);\n }\n return null;\n },\n});\n","export const Constants = {\n monitor: {\n defaultInterval: 200,\n defaultRows: 3,\n },\n};\n","import { ClassName } from '../../../common/view/class-name.js';\nimport { getCssVar } from '../../../common/view/css-vars.js';\nconst cn = ClassName('mll');\n/**\n * @hidden\n */\nexport class MultiLogView {\n constructor(doc, config) {\n this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n this.formatter_ = config.formatter;\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const textareaElem = doc.createElement('textarea');\n textareaElem.classList.add(cn('i'));\n textareaElem.style.height = `calc(var(${getCssVar('containerUnitSize')}) * ${config.rows})`;\n textareaElem.readOnly = true;\n config.viewProps.bindDisabled(textareaElem);\n this.element.appendChild(textareaElem);\n this.textareaElem_ = textareaElem;\n config.value.emitter.on('change', this.onValueUpdate_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n const elem = this.textareaElem_;\n const shouldScroll = elem.scrollTop === elem.scrollHeight - elem.clientHeight;\n const lines = [];\n this.value.rawValue.forEach((value) => {\n if (value !== undefined) {\n lines.push(this.formatter_(value));\n }\n });\n elem.textContent = lines.join('\\n');\n if (shouldScroll) {\n elem.scrollTop = elem.scrollHeight;\n }\n }\n onValueUpdate_() {\n this.update_();\n }\n}\n","import { MultiLogView } from '../view/multi-log.js';\n/**\n * @hidden\n */\nexport class MultiLogController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new MultiLogView(doc, {\n formatter: config.formatter,\n rows: config.rows,\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n}\n","import { ClassName } from '../../../common/view/class-name.js';\nconst cn = ClassName('sgl');\n/**\n * @hidden\n */\nexport class SingleLogView {\n constructor(doc, config) {\n this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n this.formatter_ = config.formatter;\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn('i'));\n inputElem.readOnly = true;\n inputElem.type = 'text';\n config.viewProps.bindDisabled(inputElem);\n this.element.appendChild(inputElem);\n this.inputElement = inputElem;\n config.value.emitter.on('change', this.onValueUpdate_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n const values = this.value.rawValue;\n const lastValue = values[values.length - 1];\n this.inputElement.value =\n lastValue !== undefined ? this.formatter_(lastValue) : '';\n }\n onValueUpdate_() {\n this.update_();\n }\n}\n","import { SingleLogView } from '../view/single-log.js';\n/**\n * @hidden\n */\nexport class SingleLogController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new SingleLogView(doc, {\n formatter: config.formatter,\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n}\n","import { BooleanFormatter, boolFromUnknown, } from '../../common/converter/boolean.js';\nimport { parseRecord } from '../../common/micro-parsers.js';\nimport { Constants } from '../../misc/constants.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { MultiLogController } from '../common/controller/multi-log.js';\nimport { SingleLogController } from '../common/controller/single-log.js';\n/**\n * @hidden\n */\nexport const BooleanMonitorPlugin = createPlugin({\n id: 'monitor-bool',\n type: 'monitor',\n accept: (value, params) => {\n if (typeof value !== 'boolean') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n readonly: p.required.constant(true),\n rows: p.optional.number,\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => boolFromUnknown,\n },\n controller: (args) => {\n var _a;\n if (args.value.rawValue.length === 1) {\n return new SingleLogController(args.document, {\n formatter: BooleanFormatter,\n value: args.value,\n viewProps: args.viewProps,\n });\n }\n return new MultiLogController(args.document, {\n formatter: BooleanFormatter,\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n","import { BindingApi } from '../../../blade/binding/api/binding.js';\nexport class GraphLogMonitorBindingApi extends BindingApi {\n get max() {\n return this.controller.valueController.props.get('max');\n }\n set max(max) {\n this.controller.valueController.props.set('max', max);\n }\n get min() {\n return this.controller.valueController.props.get('min');\n }\n set min(min) {\n this.controller.valueController.props.set('min', min);\n }\n}\n","import { forceReflow, SVG_NS } from '../../../common/dom-util.js';\nimport { mapRange } from '../../../common/number/util.js';\nimport { ClassName } from '../../../common/view/class-name.js';\nimport { getCssVar } from '../../../common/view/css-vars.js';\nconst cn = ClassName('grl');\n/**\n * @hidden\n */\nexport class GraphLogView {\n constructor(doc, config) {\n this.onCursorChange_ = this.onCursorChange_.bind(this);\n this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n this.formatter_ = config.formatter;\n this.props_ = config.props;\n this.cursor_ = config.cursor;\n this.cursor_.emitter.on('change', this.onCursorChange_);\n const svgElem = doc.createElementNS(SVG_NS, 'svg');\n svgElem.classList.add(cn('g'));\n svgElem.style.height = `calc(var(${getCssVar('containerUnitSize')}) * ${config.rows})`;\n this.element.appendChild(svgElem);\n this.svgElem_ = svgElem;\n const lineElem = doc.createElementNS(SVG_NS, 'polyline');\n this.svgElem_.appendChild(lineElem);\n this.lineElem_ = lineElem;\n const tooltipElem = doc.createElement('div');\n tooltipElem.classList.add(cn('t'), ClassName('tt')());\n this.element.appendChild(tooltipElem);\n this.tooltipElem_ = tooltipElem;\n config.value.emitter.on('change', this.onValueUpdate_);\n this.value = config.value;\n this.update_();\n }\n get graphElement() {\n return this.svgElem_;\n }\n update_() {\n const { clientWidth: w, clientHeight: h } = this.element;\n // Graph\n const maxIndex = this.value.rawValue.length - 1;\n const min = this.props_.get('min');\n const max = this.props_.get('max');\n const points = [];\n this.value.rawValue.forEach((v, index) => {\n if (v === undefined) {\n return;\n }\n const x = mapRange(index, 0, maxIndex, 0, w);\n const y = mapRange(v, min, max, h, 0);\n points.push([x, y].join(','));\n });\n this.lineElem_.setAttributeNS(null, 'points', points.join(' '));\n // Cursor\n const tooltipElem = this.tooltipElem_;\n const value = this.value.rawValue[this.cursor_.rawValue];\n if (value === undefined) {\n tooltipElem.classList.remove(cn('t', 'a'));\n return;\n }\n const tx = mapRange(this.cursor_.rawValue, 0, maxIndex, 0, w);\n const ty = mapRange(value, min, max, h, 0);\n tooltipElem.style.left = `${tx}px`;\n tooltipElem.style.top = `${ty}px`;\n tooltipElem.textContent = `${this.formatter_(value)}`;\n if (!tooltipElem.classList.contains(cn('t', 'a'))) {\n // Suppresses unwanted initial transition\n tooltipElem.classList.add(cn('t', 'a'), cn('t', 'in'));\n forceReflow(tooltipElem);\n tooltipElem.classList.remove(cn('t', 'in'));\n }\n }\n onValueUpdate_() {\n this.update_();\n }\n onCursorChange_() {\n this.update_();\n }\n}\n","import { exportBladeState, importBladeState, } from '../../../blade/common/controller/blade-state.js';\nimport { supportsTouch } from '../../../common/dom-util.js';\nimport { createValue } from '../../../common/model/values.js';\nimport { mapRange } from '../../../common/number/util.js';\nimport { PointerHandler, } from '../../../common/view/pointer-handler.js';\nimport { GraphLogView } from '../view/graph-log.js';\n/**\n * @hidden\n */\nexport class GraphLogController {\n constructor(doc, config) {\n this.onGraphMouseMove_ = this.onGraphMouseMove_.bind(this);\n this.onGraphMouseLeave_ = this.onGraphMouseLeave_.bind(this);\n this.onGraphPointerDown_ = this.onGraphPointerDown_.bind(this);\n this.onGraphPointerMove_ = this.onGraphPointerMove_.bind(this);\n this.onGraphPointerUp_ = this.onGraphPointerUp_.bind(this);\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.cursor_ = createValue(-1);\n this.view = new GraphLogView(doc, {\n cursor: this.cursor_,\n formatter: config.formatter,\n rows: config.rows,\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n if (!supportsTouch(doc)) {\n this.view.element.addEventListener('mousemove', this.onGraphMouseMove_);\n this.view.element.addEventListener('mouseleave', this.onGraphMouseLeave_);\n }\n else {\n const ph = new PointerHandler(this.view.element);\n ph.emitter.on('down', this.onGraphPointerDown_);\n ph.emitter.on('move', this.onGraphPointerMove_);\n ph.emitter.on('up', this.onGraphPointerUp_);\n }\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n max: p.required.number,\n min: p.required.number,\n }), (result) => {\n this.props.set('max', result.max);\n this.props.set('min', result.min);\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n max: this.props.get('max'),\n min: this.props.get('min'),\n });\n }\n onGraphMouseLeave_() {\n this.cursor_.rawValue = -1;\n }\n onGraphMouseMove_(ev) {\n const { clientWidth: w } = this.view.element;\n this.cursor_.rawValue = Math.floor(mapRange(ev.offsetX, 0, w, 0, this.value.rawValue.length));\n }\n onGraphPointerDown_(ev) {\n this.onGraphPointerMove_(ev);\n }\n onGraphPointerMove_(ev) {\n if (!ev.data.point) {\n this.cursor_.rawValue = -1;\n return;\n }\n this.cursor_.rawValue = Math.floor(mapRange(ev.data.point.x, 0, ev.data.bounds.width, 0, this.value.rawValue.length));\n }\n onGraphPointerUp_() {\n this.cursor_.rawValue = -1;\n }\n}\n","import { createNumberFormatter, numberFromUnknown, } from '../../common/converter/number.js';\nimport { parseRecord } from '../../common/micro-parsers.js';\nimport { ValueMap } from '../../common/model/value-map.js';\nimport { Constants } from '../../misc/constants.js';\nimport { isEmpty } from '../../misc/type-util.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { MultiLogController } from '../common/controller/multi-log.js';\nimport { SingleLogController } from '../common/controller/single-log.js';\nimport { GraphLogMonitorBindingApi } from './api/graph-log.js';\nimport { GraphLogController } from './controller/graph-log.js';\nfunction createFormatter(params) {\n return !isEmpty(params.format) ? params.format : createNumberFormatter(2);\n}\nfunction createTextMonitor(args) {\n var _a;\n if (args.value.rawValue.length === 1) {\n return new SingleLogController(args.document, {\n formatter: createFormatter(args.params),\n value: args.value,\n viewProps: args.viewProps,\n });\n }\n return new MultiLogController(args.document, {\n formatter: createFormatter(args.params),\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n value: args.value,\n viewProps: args.viewProps,\n });\n}\nfunction createGraphMonitor(args) {\n var _a, _b, _c;\n return new GraphLogController(args.document, {\n formatter: createFormatter(args.params),\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n props: ValueMap.fromObject({\n max: (_b = args.params.max) !== null && _b !== void 0 ? _b : 100,\n min: (_c = args.params.min) !== null && _c !== void 0 ? _c : 0,\n }),\n value: args.value,\n viewProps: args.viewProps,\n });\n}\nfunction shouldShowGraph(params) {\n return params.view === 'graph';\n}\n/**\n * @hidden\n */\nexport const NumberMonitorPlugin = createPlugin({\n id: 'monitor-number',\n type: 'monitor',\n accept: (value, params) => {\n if (typeof value !== 'number') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n format: p.optional.function,\n max: p.optional.number,\n min: p.optional.number,\n readonly: p.required.constant(true),\n rows: p.optional.number,\n view: p.optional.string,\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n defaultBufferSize: (params) => (shouldShowGraph(params) ? 64 : 1),\n reader: (_args) => numberFromUnknown,\n },\n controller: (args) => {\n if (shouldShowGraph(args.params)) {\n return createGraphMonitor(args);\n }\n return createTextMonitor(args);\n },\n api: (args) => {\n if (args.controller.valueController instanceof GraphLogController) {\n return new GraphLogMonitorBindingApi(args.controller);\n }\n return null;\n },\n});\n","import { formatString, stringFromUnknown, } from '../../common/converter/string.js';\nimport { parseRecord } from '../../common/micro-parsers.js';\nimport { Constants } from '../../misc/constants.js';\nimport { createPlugin } from '../../plugin/plugin.js';\nimport { MultiLogController } from '../common/controller/multi-log.js';\nimport { SingleLogController } from '../common/controller/single-log.js';\n/**\n * @hidden\n */\nexport const StringMonitorPlugin = createPlugin({\n id: 'monitor-string',\n type: 'monitor',\n accept: (value, params) => {\n if (typeof value !== 'string') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n multiline: p.optional.boolean,\n readonly: p.required.constant(true),\n rows: p.optional.number,\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => stringFromUnknown,\n },\n controller: (args) => {\n var _a;\n const value = args.value;\n const multiline = value.rawValue.length > 1 || args.params.multiline;\n if (multiline) {\n return new MultiLogController(args.document, {\n formatter: formatString,\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n value: value,\n viewProps: args.viewProps,\n });\n }\n return new SingleLogController(args.document, {\n formatter: formatString,\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n","/**\n * @description Debug manager raw settings\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n * @note It is returned a plain text of the settings that\n * should be used to instance current effect.\n * This plain text is used by the copy button of the\n * debug manager\n */\nexport const getSettings = (\n imagePixelSize: string,\n imagePixelMotionFrequency: string,\n imagePixelMotionAmplitude: string,\n imageMotionFrequency: string,\n imageMotionAmplitude: string,\n pointerSize: string,\n pointerTrailing: string,\n) => {\n return `{\n images: {\n 0: {\n src: <image-src>,\n width: <image-width>,\n height: <image-height>,\n resolution: {\n width: <image-resolution-width>,\n height: <image-resolution-height>\n },\n pixel: {\n size: ${imagePixelSize},\n motion: {\n displacement: {\n frequency: ${imagePixelMotionFrequency},\n amplitude: ${imagePixelMotionAmplitude}\n }\n }\n },\n motion: {\n noise: {\n frequency: ${imageMotionFrequency},\n amplitude: ${imageMotionAmplitude}\n }\n }\n }\n },\n pointer: {\n size: ${pointerSize},\n trailing: {\n factor: ${pointerTrailing}\n }\n }\n }`\n}\n","/**\n * @description Debug manager\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n * @note The idea behind this class is to encapsulate and wrap the\n * debug management logic\n */\nimport {Pane} from 'tweakpane'\nimport type {FolderApi, BindingParams, FolderParams} from 'tweakpane'\nimport {BindingApi} from '@tweakpane/core'\nimport {getSettings} from './debug-manager/copy/settings.js'\n\nexport default class DebugManager {\n /**\n * @type {Pane}\n */\n debugger: Pane\n\n /**\n * Constructor\n */\n constructor() {\n this.debugger = new Pane()\n this.#addCopyButton()\n }\n\n /**\n * Enable. Show debugger\n *\n * @returns {void}\n */\n enable(): void {\n this.debugger.element.style.display = 'block'\n }\n\n /**\n * Disable. Hide debugger\n *\n * @returns {void}\n */\n disable(): void {\n this.debugger.element.style.display = 'none'\n }\n\n /**\n * Dispose\n *\n * @returns {void}\n */\n dispose(): void {\n this.debugger.dispose()\n this.debugger.element.remove()\n }\n\n /**\n * Add folder\n *\n * @param {{title: string; expanded?: boolean;}} config\n * @returns {object}\n */\n addFolder(config: FolderParams): FolderApi {\n config = {expanded: false, ...config}\n return this.debugger.addFolder(config)\n }\n\n /**\n * Add binding with on change handler\n *\n * @param {object} object\n * @param {string} property\n * @param {string} label\n * @param {object | undefined} config\n * @param {object | undefined} folder\n * @returns {object}\n */\n addBindingWithOnChange<K extends string, V>(\n object: {[key in K]: V},\n property: K,\n label: string,\n config: BindingParams | undefined,\n folder: FolderApi | undefined = undefined,\n ): BindingApi<unknown, V> {\n return this.addBinding(label, object[property], config, folder).on(\n 'change',\n (e) => {\n object[property] = e.value\n },\n )\n }\n\n /**\n * Add binding\n *\n * @param {string} label\n * @param {string | number} value\n * @param {object | undefined} config\n * @param {object | undefined} folder\n * @returns {object}\n */\n addBinding<V>(\n label: string,\n value: V,\n config: BindingParams | undefined,\n folder: FolderApi | undefined = undefined,\n ): BindingApi<unknown, V> {\n let debuggerObj: Pane | FolderApi = this.debugger\n if (folder) {\n debuggerObj = folder\n }\n\n return debuggerObj.addBinding(\n {\n [label]: value,\n },\n label,\n config,\n )\n }\n\n /**\n * Add copy button\n *\n * @returns {void}\n */\n #addCopyButton(): void {\n const btn = this.debugger.addButton({\n title: 'Copy',\n })\n btn.on('click', () => {\n const state = this.debugger.exportState()\n\n if (state.children && state.children instanceof Array) {\n const pointer = state.children[1]\n const pointerSize = pointer.children[0]['binding']['value']\n const pointerTrailing = pointer.children[1]['binding']['value']\n\n const imagePixel = state.children[4]\n const imagePixelSize = imagePixel.children[0]['binding']['value']\n\n const imagePixelMotion = state.children[5]\n const imagePixelMotionFrequency =\n imagePixelMotion.children[0]['binding']['value']\n const imagePixelMotionAmplitude =\n imagePixelMotion.children[1]['binding']['value']\n\n const imageMotion = state.children[6]\n const imageMotionFrequency = imageMotion.children[0]['binding']['value']\n const imageMotionAmplitude = imageMotion.children[1]['binding']['value']\n\n const settings = getSettings(\n imagePixelSize,\n imagePixelMotionFrequency,\n imagePixelMotionAmplitude,\n imageMotionFrequency,\n imageMotionAmplitude,\n pointerSize,\n pointerTrailing,\n )\n\n navigator.clipboard.writeText(settings).then(() => {\n btn.title = 'Copied!'\n setTimeout(() => {\n btn.title = 'Copy'\n }, 1000)\n })\n }\n })\n }\n}\n","/**\n * @description Image vertex shader\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n */\nuniform sampler2D uImageTexture;\nuniform float uPointSize;\n\nvarying vec4 vColor;\n\nvoid main() {\n vec3 vertexPosition = position;\n\n vec4 modelPosition = modelMatrix * vec4(vertexPosition, 1.0);\n vec4 viewPosition = viewMatrix * modelPosition;\n vec4 projectionPosition = projectionMatrix * viewPosition;\n\n gl_Position = projectionPosition;\n gl_PointSize = uPointSize;\n\n vColor = texture(uImageTexture, uv);\n}","/**\n * @description Image fragment shader\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n * @note It is introduced a `discard` logic to avoid issues\n * on mobile devices where transparent pixels of the border\n * of the image, are not tested correctly against\n * the alpha test param and are incorrectly shown\n */\nuniform float uAlphaTest;\n\nvarying vec4 vColor;\n\nvoid main() {\n if (vColor.a < uAlphaTest) {\n discard;\n }\n\n gl_FragColor = vColor;\n\n #include <tonemapping_fragment>\n #include <colorspace_fragment>\n}","/**\n * @description Image\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n * @note This class handles the logic related to the\n * transformation of the image into vertices/points/pixels\n */\nimport * as THREE from 'three'\nimport RendererManager from '../../../services/renderer-manager.js'\nimport DebugManager from '../../../services/debug-manager.js'\nimport imageVertexShader from './image/shader/vertex.glsl'\nimport imageFragmentShader from './image/shader/fragment.glsl'\n\nexport default class Image {\n /**\n * @type {THREE.Points}\n */\n points: THREE.Points<THREE.PlaneGeometry, THREE.ShaderMaterial>\n\n /**\n * @type {THREE.Texture}\n */\n #imageTexture: THREE.Texture\n\n /**\n * @type {RendererManager}\n */\n #rendererManager: RendererManager\n\n /**\n * @type {DebugManager}\n */\n #debugManager: DebugManager\n\n /**\n * Constructor\n *\n * @param {RendererManager} rendererManager\n * @param {DebugManager} debugManager\n * @param {string} imageSrc\n * @param {number} resolutionWidth\n * @param {number} resolutionHeight\n * @param {number} pointSize\n * @param {number} alphaTest\n */\n constructor(\n rendererManager: RendererManager,\n debugManager: DebugManager,\n imageSrc: string,\n resolutionWidth: number,\n resolutionHeight: number,\n pointSize: number = 1,\n alphaTest: number = 0.1,\n ) {\n this.#rendererManager = rendererManager\n this.#debugManager = debugManager\n this.#initPoints(\n imageSrc,\n resolutionWidth,\n resolutionHeight,\n pointSize,\n alphaTest,\n )\n }\n\n /**\n * Enable debug mode\n *\n * @returns {void}\n */\n debug(): void {\n const resolutionFolder = this.#debugManager.addFolder({\n title: 'Image Resolution',\n })\n\n this.#debugManager\n .addBinding(\n 'width',\n this.points.geometry.parameters.widthSegments,\n {min: 0, max: this.points.geometry.parameters.width, step: 1},\n resolutionFolder,\n )\n .on('change', (e) => {\n if (e.last) {\n this.#replaceImageGeometry(\n e.value,\n this.points.geometry.parameters.heightSegments,\n )\n }\n })\n\n this.#debugManager\n .addBinding(\n 'height',\n this.points.geometry.parameters.heightSegments,\n {min: 0, max: this.points.geometry.parameters.height, step: 1},\n resolutionFolder,\n )\n .on('change', (e) => {\n if (e.last) {\n this.#replaceImageGeometry(\n this.points.geometry.parameters.widthSegments,\n e.value,\n )\n }\n })\n\n const pixelFolder = this.#debugManager.addFolder({title: 'Image Pixel'})\n\n this.#debugManager\n .addBinding(\n 'size',\n this.points.material.uniforms.uPointSize.value,\n {min: 1, max: 100, step: 1},\n pixelFolder,\n )\n .on('change', (e) => {\n if (e.last) {\n this.points.material.uniforms.uPointSize.value = e.value\n }\n })\n }\n\n /**\n * Dispose\n *\n * @returns {void}\n */\n dispose(): void {\n this.points.geometry.dispose()\n this.points.material.dispose()\n this.#imageTexture.dispose()\n }\n\n /**\n * Init points\n *\n * @param {string} imageSrc\n * @param {number} resolutionWidth\n * @param {number} resolutionHeight\n * @param {number} pointSize\n * @param {number} alphaTest\n * @returns {void}\n */\n #initPoints(\n imageSrc: string,\n resolutionWidth: number,\n resolutionHeight: number,\n pointSize: number,\n alphaTest: number,\n ): void {\n const textureLoader = new THREE.TextureLoader()\n this.#imageTexture = textureLoader.load(imageSrc)\n\n const imageGeometry = this.#createImageGeometry(\n resolutionWidth,\n resolutionHeight,\n )\n\n const imageMaterial = new THREE.ShaderMaterial({\n vertexShader: imageVertexShader,\n fragmentShader: imageFragmentShader,\n uniforms: {\n uImageTexture: new THREE.Uniform(this.#imageTexture),\n uPointSize: new THREE.Uniform(pointSize),\n uAlphaTest: new THREE.Uniform(alphaTest),\n },\n transparent: true,\n depthWrite: false,\n alphaTest: alphaTest,\n })\n\n this.points = new THREE.Points(imageGeometry, imageMaterial)\n }\n\n /**\n * Replace image geometry\n *\n * @param {number} resolutionWidth\n * @param {number} resolutionHeight\n * @returns {void}\n * @note It is sent old attributes to be persisted by the new geometry.\n * New generated geometry attributes will replace old ones if\n * they exist in the old geometry\n */\n #replaceImageGeometry(\n resolutionWidth: number,\n resolutionHeight: number,\n ): void {\n const attributes = this.points.geometry.attributes\n this.points.geometry.dispose()\n this.points.geometry = this.#createImageGeometry(\n resolutionWidth,\n resolutionHeight,\n attributes,\n )\n }\n\n /**\n * Create image geometry\n *\n * @param {number} resolutionWidth\n * @param {number} resolutionHeight\n * @param {THREE.NormalBufferAttributes | null} attributes\n * @returns {THREE.PlaneGeometry}\n * @note It is created a plane that occupies all the render\n * @note The dom element width and height of the renderer include\n * the device pixel ratio, so it is important to use them\n * to create a plane that take all the render space/pixels\n * @note It is removed the index and normals from the geometry\n * to improve performance.\n * Normals are not going to be needed.\n * The index could cause the draw of multiple points/pixels in the\n * same place. That is why it is required to remove it\n */\n #createImageGeometry(\n resolutionWidth: number,\n resolutionHeight: number,\n attributes: THREE.NormalBufferAttributes | null = null,\n ): THREE.PlaneGeometry {\n const geometry = new THREE.PlaneGeometry(\n this.#rendererManager.renderer.domElement.width,\n this.#rendererManager.renderer.domElement.height,\n resolutionWidth * this.#rendererManager.dpr,\n resolutionHeight * this.#rendererManager.dpr,\n )\n geometry.setIndex(null)\n geometry.deleteAttribute('normal')\n\n if (attributes) {\n geometry.attributes = {...attributes, ...geometry.attributes}\n }\n\n return geometry\n }\n}\n","/**\n * @description Pointer canvas\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n * @note This canvas will be used as a texture that will be sent\n * to the vertex shader. This texture will be updated\n * to mark where the pointer is in relation with the image.\n * In that way, it allows selecting which vertices/points/pixels\n * should be displaced\n */\nimport * as THREE from 'three'\nimport DebugManager from '../../../../services/debug-manager.js'\n\nexport default class Canvas {\n /**\n * @type {DebugManager}\n */\n #debugManager: DebugManager\n\n /**\n * @type {THREE.CanvasTexture}\n */\n texture: THREE.Texture\n\n /**\n * @type {HTMLCanvasElement}\n */\n element: HTMLCanvasElement\n\n /**\n * @type {CanvasRenderingContext2D}\n */\n #context: CanvasRenderingContext2D\n\n /**\n * @type {HTMLImageElement}\n * @note Image that will represent the pointer.\n * This image is used to\n * select which vertices/points/pixels\n * should be displaced\n */\n #pointerImage: HTMLImageElement\n\n /**\n * @type {number}\n * @note This value defines how many pixels are affected by the\n * pointer effect.\n * It is defined as a proportion of the image resolution width\n */\n #pointerImageSize: number\n\n /**\n * @type {number}\n * @note This value defines the strength of the\n * pointer trailing effect on the\n * pixels' displacement\n */\n #pointerTrailingFactor: number\n\n /**\n * Constructor\n *\n * @param {DebugManager} debugManager\n * @param {number} resolutionWidth\n * @param {number} resolutionHeight\n * @param {string} pointerImageSrc\n * @param {number} pointerImageSize\n * @param {number} pointerTrailingFactor\n */\n constructor(\n debugManager: DebugManager,\n resolutionWidth: number,\n resolutionHeight: number,\n pointerImageSrc: string,\n pointerImageSize: number = 0.1,\n pointerTrailingFactor: number = 0.05,\n ) {\n this.#debugManager = debugManager\n this.#pointerTrailingFactor = pointerTrailingFactor\n this.#initCanvasTexture(resolutionWidth, resolutionHeight)\n this.#initPointerImage(pointerImageSrc, pointerImageSize)\n }\n\n /**\n * Update\n *\n * @param {number | null} dx\n * @param {number | null} dy\n * @returns {void}\n */\n update(dx: number | null, dy: number | null): void {\n this.#clear()\n\n if (dx && dy) {\n this.#draw(dx, dy)\n }\n\n this.texture.needsUpdate = true\n }\n\n /**\n * Enable debug mode\n *\n * @returns {void}\n */\n debug(): void {\n const pointerFolder = this.#debugManager.addFolder({\n title: 'Pointer',\n })\n\n this.#debugManager\n .addBinding(\n 'size',\n this.#pointerImageSize / this.element.width,\n {\n min: 0,\n max: 1,\n step: 0.01,\n },\n pointerFolder,\n )\n .on('change', (e) => this.#processPointerImageSize(e.value))\n\n this.#debugManager\n .addBinding(\n 'trailing',\n this.#pointerTrailingFactor,\n {\n min: 0,\n max: 1,\n step: 0.01,\n },\n pointerFolder,\n )\n .on('change', (e) => (this.#pointerTrailingFactor = e.value))\n\n const pointerCanvasFolder = this.#debugManager.addFolder({\n title: 'Pointer Canvas',\n })\n\n this.#debugManager\n .addBinding('show', false, undefined, pointerCanvasFolder)\n .on('change', (e) => {\n if (e.value) {\n document.body.appendChild(this.element)\n this.element.style.position = 'fixed'\n this.element.style.top = '0'\n this.element.style.left = '0'\n this.element.style.border = '1px solid #fff'\n } else {\n document.body.removeChild(this.element)\n }\n })\n }\n\n /**\n * Dispose\n *\n * @returns {void}\n */\n dispose(): void {\n this.texture.dispose()\n }\n\n /**\n * Draw\n *\n * @param {number} dx\n * @param {number} dy\n * @returns {void}\n * @note The destination of the image is moved half its size\n * so it is drawn at the center of the destination position\n */\n #draw(dx: number, dy: number): void {\n dx -= this.#pointerImageSize / 2\n dy -= this.#pointerImageSize / 2\n\n this.#context.save()\n this.#context.globalCompositeOperation = 'lighten'\n this.#context.drawImage(\n this.#pointerImage,\n dx,\n dy,\n this.#pointerImageSize,\n this.#pointerImageSize,\n )\n this.#context.restore()\n }\n\n /**\n * Clear\n *\n * @returns {void}\n * @note The idea is to draw a white image that will\n * indicate how much points inside them will be displaced.\n * That is why it is required to clear the canvas with black color\n */\n #clear(): void {\n this.#context.save()\n this.#context.globalAlpha = this.#pointerTrailingFactor\n this.#context.fillStyle = '#000'\n this.#context.fillRect(0, 0, this.element.width, this.element.height)\n this.#context.restore()\n }\n\n /**\n * Init canvas texture used to detect pointer location and\n * displace points\n *\n * @param {number} resolutionWidth\n * @param {number} resolutionHeight\n * @returns {void}\n * @note The canvas will have the same number of pixels as the\n * image.\n * That is why it is used the image resolution as its dimensions\n */\n #initCanvasTexture(resolutionWidth: number, resolutionHeight: number): void {\n this.element = document.createElement('canvas')\n this.element.width = resolutionWidth\n this.element.height = resolutionHeight\n this.texture = new THREE.CanvasTexture(this.element)\n\n this.#context = this.element.getContext('2d') as CanvasRenderingContext2D\n }\n\n /**\n * Init pointer image\n *\n * @param {string} pointerImageSrc\n * @param {number} pointerImageSize\n * @returns {void}\n * @note It is considered that the pointer image will be\n * a white image that will indicate which pixels should be displaced\n */\n #initPointerImage(pointerImageSrc: string, pointerImageSize: number): void {\n this.#pointerImage = new Image()\n this.#pointerImage.src = pointerImageSrc\n this.#processPointerImageSize(pointerImageSize)\n }\n\n /**\n * Process pointer image size\n *\n * @param {number} pointerImageSize\n * @returns {void}\n * @note The aspect ratio of the image is always square\n * (the same size is used for the width and the height of the image).\n * It is proportional to the canvas width.\n * This approach is considered correct because web elements\n * adjust only their width to fit in the page\n */\n #processPointerImageSize(pointerImageSize: number): void {\n this.#pointerImageSize = pointerImageSize * this.element.width\n }\n}\n","/**\n * @description Pointer\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n */\nimport * as THREE from 'three'\nimport RendererManager from '../../../services/renderer-manager.js'\nimport Canvas from './pointer/canvas.js'\n\nexport default class Pointer {\n /**\n * @type {THREE.Vector2 | {x: number | undefined, y: number | undefined}}\n */\n coord: THREE.Vector2 | {x: number | undefined; y: number | undefined}\n\n /**\n * @type {Canvas}\n */\n canvas: Canvas\n\n /**\n * @type {THREE.Raycaster}\n */\n raycaster: THREE.Raycaster\n\n /**\n * @type {THREE.Mesh}\n */\n raycasterPlane: THREE.Mesh<THREE.PlaneGeometry, THREE.MeshBasicMaterial>\n\n /**\n * @type {RendererManager}\n */\n #rendererManager: RendererManager\n\n /**\n * @type {Function}\n */\n #boundPointerMove: (e: PointerEvent) => void\n\n /**\n * @type {Function}\n */\n #boundPointerLeave: (e: PointerEvent) => void\n\n /**\n * Constructor\n *\n * @param {RendererManager} rendererManager\n * @param {Canvas} canvas\n */\n constructor(rendererManager: RendererManager, canvas: Canvas) {\n this.canvas = canvas\n this.coord = new THREE.Vector2(undefined, undefined)\n this.#rendererManager = rendererManager\n this.#initRaycaster()\n }\n\n /**\n * Update\n *\n * @returns {void}\n */\n update(): void {\n let dx: number | null = null\n let dy: number | null = null\n\n if (this.coord.x && this.coord.y) {\n this.raycaster.setFromCamera(\n this.coord as THREE.Vector2,\n this.#rendererManager.camera,\n )\n const intersections = this.raycaster.intersectObject(this.raycasterPlane)\n if (intersections.length) {\n const uv = intersections[0].uv as THREE.Vector2\n dx = uv.x * this.canvas.element.width\n dy = (1 - uv.y) * this.canvas.element.height\n }\n }\n\n this.canvas.update(dx, dy)\n }\n\n /**\n * Enable debug mode\n *\n * @returns {void}\n */\n debug(): void {\n this.canvas.debug()\n }\n\n /**\n * Dispose\n *\n * @returns {void}\n */\n dispose(): void {\n this.canvas.dispose()\n this.#disposeRaycaster()\n }\n\n /**\n * Process pointer move\n *\n * @param {PointerEvent} e\n * @returns {void}\n * @note Pointer coordinates are normalized to\n * clip space (NDC - Normalized Device Coordinate) to\n * use it for raycasting\n */\n #processPointerMove(e: PointerEvent): void {\n const target = e.target as EventTarget & {width: number; height: number}\n this.coord.x = (e.offsetX / target.width - 0.5) * 2\n this.coord.y = -(e.offsetY / target.height - 0.5) * 2\n }\n\n /**\n * Process pointer leave\n *\n * @returns {void}\n */\n #processPointerLeave(): void {\n this.coord.x = undefined\n this.coord.y = undefined\n }\n\n /**\n * Init raycaster\n *\n * @returns {void}\n * @note It is created low poly plane in front of the image\n * to avoid performance issues that could arise while\n * working between the raycaster and image points\n */\n #initRaycaster(): void {\n this.raycaster = new THREE.Raycaster()\n\n this.#boundPointerMove = this.#processPointerMove.bind(this)\n this.#rendererManager.renderer.domElement.addEventListener(\n 'pointermove',\n this.#boundPointerMove,\n )\n\n this.#boundPointerLeave = this.#processPointerLeave.bind(this)\n this.#rendererManager.renderer.domElement.addEventListener(\n 'pointerleave',\n this.#boundPointerLeave,\n )\n\n this.raycasterPlane = new THREE.Mesh(\n new THREE.PlaneGeometry(\n this.#rendererManager.width,\n this.#rendererManager.height,\n ),\n new THREE.MeshBasicMaterial(),\n )\n this.raycasterPlane.visible = false\n }\n\n /**\n * Dispose raycaster\n *\n * @returns {void}\n */\n #disposeRaycaster(): void {\n this.#rendererManager.renderer.domElement.removeEventListener(\n 'pointermove',\n this.#boundPointerMove,\n )\n this.#rendererManager.renderer.domElement.removeEventListener(\n 'pointerleave',\n this.#boundPointerLeave,\n )\n\n this.raycasterPlane.geometry.dispose()\n this.raycasterPlane.material.dispose()\n }\n}\n","/**\n * @description Shader chunk used to define params used in the\n * image vertex shader\n * to handle vertex/point/pixel displacement\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n * @note This file is called `pars_vertex.glsl` to mantain the\n * same naming style used by Three.js for its `.glsl` chunk\n * files that define shader params\n */\nattribute float aDisAngle;\nattribute float aDisAmplitude;\n\nuniform float uTime;\nuniform float uDisFrequency;\nuniform float uDisAmplitude;\nuniform sampler2D uDisTexture;\nuniform float uNoiseFrequency;\nuniform float uNoiseAmplitude;\nuniform sampler2D uNoiseTexture;\n\nvarying vec4 vColor;","/**\n * @description Shader chunk used to handle vertex/point/pixel displacement\n * to handle vertex/point/pixel displacement\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n */\nvec3 vertexPosition = position;\n\nvec2 noiseUv = vec2(uv.x - uNoiseFrequency * uTime, uv.y);\nfloat noiseFactor = texture(uNoiseTexture, noiseUv).r * uNoiseAmplitude;\nfloat noiseX = cos(aDisAngle) * noiseFactor;\nfloat noiseY = sin(aDisAngle) * noiseFactor;\nvec2 noise = vec2(noiseX, noiseY);\n vertexPosition.xy += noise;\n\nfloat disFactor = texture(uDisTexture, uv).r;\n disFactor = smoothstep(0.2, 0.8, disFactor);\n disFactor = (sin(uDisFrequency * uTime) + 1.5) / (2.5) *\n disFactor *\n uDisAmplitude;\n disFactor *= aDisAmplitude;\n\nfloat displacementX = cos(aDisAngle) * disFactor;\nfloat displacementY = sin(aDisAngle) * disFactor;\nvec2 displacement = vec2(displacementX, displacementY);\n vertexPosition.xy += displacement;","/**\n * @description Runner\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n * @note This class will manage how the renderer manager,\n * debug manager, the image, the pointer\n * and the motion (pixels' default motion, noise, etc.)\n * interact between each other\n */\nimport * as THREE from 'three'\nimport RendererManager from '../../services/renderer-manager.js'\nimport DebugManager from '../../services/debug-manager.js'\nimport Image from './runner/image.js'\nimport Pointer from './runner/pointer.js'\nimport parsVertexShader from './runner/shader/pars_vertex.glsl'\nimport positionVertexShader from './runner/shader/position_vertex.glsl'\n\nexport default class Runner {\n /**\n * @type {Image}\n */\n #image: Image\n\n /**\n * @type {Pointer}\n */\n #pointer: Pointer\n\n /**\n * @type {RendererManager}\n */\n #rendererManager: RendererManager\n\n /**\n * @type {DebugManager}\n */\n #debugManager: DebugManager\n\n /**\n * Constructor\n *\n * @param {Image} image\n * @param {Pointer} pointer\n * @param {RendererManager} rendererManager\n * @param {DebugManager} debugManager\n * @param {string} noiseImageSrc\n * @param {number} noiseFrequency\n * @param {number} noiseAmplitude\n * @param {number} displacementFrequency\n * @param {number} displacementAmplitude\n */\n constructor(\n image: Image,\n pointer: Pointer,\n rendererManager: RendererManager,\n debugManager: DebugManager,\n noiseImageSrc: string,\n noiseFrequency: number = 0.1,\n noiseAmplitude: number = 5,\n displacementFrequency: number = 5,\n displacementAmplitude: number = 50,\n ) {\n this.#image = image\n this.#pointer = pointer\n this.#rendererManager = rendererManager\n this.#debugManager = debugManager\n this.#initImage(\n noiseImageSrc,\n noiseFrequency,\n noiseAmplitude,\n displacementFrequency,\n displacementAmplitude,\n )\n this.#initPointer()\n }\n\n /**\n * Update\n *\n * @param {number} elapsed\n * @returns {void}\n */\n update(elapsed: number): void {\n this.#image.points.material.uniforms.uTime.value = elapsed\n this.#pointer.update()\n this.#rendererManager.update()\n }\n\n /**\n * Enable debug mode\n *\n * @returns {void}\n */\n debug(): void {\n this.#pointer.debug()\n\n this.#image.debug()\n\n const pixelMotionFolder = this.#debugManager.addFolder({\n title: 'Image Pixel Motion',\n })\n\n this.#debugManager.addBindingWithOnChange(\n this.#image.points.material.uniforms.uDisFrequency,\n 'value',\n 'frequency',\n {min: 0, max: 10 * 2 * Math.PI, step: 0.01},\n pixelMotionFolder,\n )\n\n this.#debugManager.addBindingWithOnChange(\n this.#image.points.material.uniforms.uDisAmplitude,\n 'value',\n 'amplitude',\n {min: 0, max: this.#rendererManager.width, step: 1},\n pixelMotionFolder,\n )\n\n const imageMotionFolder = this.#debugManager.addFolder({\n title: 'Image Motion',\n })\n\n this.#debugManager.addBindingWithOnChange(\n this.#image.points.material.uniforms.uNoiseFrequency,\n 'value',\n 'frequency',\n {min: 0, max: 2 * Math.PI, step: 0.01},\n imageMotionFolder,\n )\n\n this.#debugManager.addBindingWithOnChange(\n this.#image.points.material.uniforms.uNoiseAmplitude,\n 'value',\n 'amplitude',\n {min: 0, max: this.#rendererManager.width, step: 1},\n imageMotionFolder,\n )\n }\n\n /**\n * Dispose\n *\n * @returns {void}\n */\n dispose(): void {\n this.#image.dispose()\n this.#pointer.dispose()\n }\n\n /**\n * Init image\n *\n * @param {string} noiseImageSrc\n * @param {number} noiseFrequency\n * @param {number} noiseAmplitude\n * @param {number} displacementFrequency\n * @param {number} displacementAmplitude\n * @returns {void}\n */\n #initImage(\n noiseImageSrc: string,\n noiseFrequency: number,\n noiseAmplitude: number,\n displacementFrequency: number,\n displacementAmplitude: number,\n ): void {\n this.#rendererManager.scene.add(this.#image.points)\n this.#addDisplacementAttributesToImage()\n this.#addDisplacementHandlerToImage(\n noiseImageSrc,\n noiseFrequency,\n noiseAmplitude,\n displacementFrequency,\n displacementAmplitude,\n )\n }\n\n /**\n * Init pointer\n *\n * @returns {void}\n */\n #initPointer(): void {\n this.#pointer.raycasterPlane.position.copy(this.#image.points.position)\n this.#pointer.raycasterPlane.position.z += 0.01\n\n this.#rendererManager.scene.add(this.#pointer.raycasterPlane)\n }\n\n /**\n * Add logic that handles vertex/point/pixel displacement to image\n *\n * @param {string} noiseImageSrc\n * @param {number} noiseFrequency\n * @param {number} noiseAmplitude\n * @param {number} displacementFrequency\n * @param {number} displacementAmplitude\n * @returns {void}\n * @note Take into consideration that the pointer canvas/image/texture\n * is called `uDisTexture` inside the shader because\n * it is considered that the shader does not need to know\n * that this texture is related to a pointer\n * @note Force shader compilation with `compile()`.\n * If it is not forced the shader compilation, then\n * uniforms will be undefined until first render of the scene\n * {@link https://github.com/mrdoob/three.js/pull/10960}\n */\n #addDisplacementHandlerToImage(\n noiseImageSrc: string,\n noiseFrequency: number,\n noiseAmplitude: number,\n displacementFrequency: number,\n displacementAmplitude: number,\n ): void {\n const textureLoader = new THREE.TextureLoader()\n const noiseTexture = textureLoader.load(noiseImageSrc)\n noiseTexture.wrapS = THREE.RepeatWrapping\n\n this.#image.points.material.onBeforeCompile = (\n shader: THREE.WebGLProgramParametersWithUniforms,\n ) => {\n shader.uniforms['uTime'] = new THREE.Uniform(0)\n shader.uniforms['uDisFrequency'] = new THREE.Uniform(\n displacementFrequency,\n )\n shader.uniforms['uDisAmplitude'] = new THREE.Uniform(\n displacementAmplitude,\n )\n shader.uniforms['uDisTexture'] = new THREE.Uniform(\n this.#pointer.canvas.texture,\n )\n shader.uniforms['uNoiseFrequency'] = new THREE.Uniform(noiseFrequency)\n shader.uniforms['uNoiseAmplitude'] = new THREE.Uniform(noiseAmplitude)\n shader.uniforms['uNoiseTexture'] = new THREE.Uniform(noiseTexture)\n\n shader.vertexShader = shader.vertexShader.replace(\n 'varying vec4 vColor;',\n parsVertexShader,\n )\n shader.vertexShader = shader.vertexShader.replace(\n 'vec3 vertexPosition = position;',\n positionVertexShader,\n )\n }\n\n this.#rendererManager.compile()\n }\n\n /**\n * Add attributes that handle displacement to image\n *\n * @returns {void}\n */\n #addDisplacementAttributesToImage(): void {\n const vertices = this.#image.points.geometry.attributes.position.count\n const disAngle = new Float32Array(vertices)\n const disAmplitude = new Float32Array(vertices)\n for (let i = 0; i < vertices; i++) {\n disAngle[i] = Math.random() * 2 * Math.PI\n disAmplitude[i] = Math.random()\n }\n this.#image.points.geometry.setAttribute(\n 'aDisAngle',\n new THREE.BufferAttribute(disAngle, 1),\n )\n this.#image.points.geometry.setAttribute(\n 'aDisAmplitude',\n new THREE.BufferAttribute(disAmplitude, 1),\n )\n }\n}\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","/**\n * @description Image manager\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n * @note The idea behind this class is to encapsulate and wrap the\n * image management logic.\n * It is defined an image by breakpoint, so it is necessary\n * to handle which image should be used\n */\nimport type {ImgSource, ImgSourceCollection} from '../types'\n\n/**\n * @note The `0` breakpoint for image must always be set.\n * It defines the image that should be used by default\n */\nconst DEFAULT_IMAGE_BREAKPOINT = 0\n\nexport default class ImageManager {\n /**\n * @type {{\n * src : string;\n * width : number;\n * height : number;\n * resolution: {\n * width : number;\n * height: number;\n * }\n * pixel?: {\n * size ?: number;\n * alphaTest?: number;\n * motion ?: {\n * displacement?: {\n * frequency?: number;\n * amplitude?: number;\n * };\n * };\n * };\n * motion?: {\n * noise?: {\n * src ?: string;\n * frequency?: number;\n * amplitude?: number;\n * };\n * };\n * }[]}\n */\n images: ImgSourceCollection\n\n /**\n * @type {{\n * src : string;\n * width : number;\n * height : number;\n * resolution: {\n * width : number;\n * height: number;\n * };\n * pixel?: {\n * size ?: number;\n * alphaTest?: number;\n * motion ?: {\n * displacement?: {\n * frequency?: number;\n * amplitude?: number;\n * }\n * };\n * };\n * motion?: {\n * noise?: {\n * src ?: string;\n * frequency?: number;\n * amplitude?: number;\n * };\n * };\n * }}\n */\n currentImage: ImgSource\n\n /**\n * @type {number}\n */\n #currentBreakpoint: number\n\n /**\n * @type {number[]}\n */\n #breakpoints: number[]\n\n /**\n * Constructor\n *\n * @param {{\n * src : string;\n * width : number;\n * height : number;\n * resolution: {\n * width : number;\n * height: number;\n * };\n * pixel?: {\n * size ?: number;\n * alphaTest?: number;\n * motion ?: {\n * displacement?: {\n * frequency?: number;\n * amplitude?: number;\n * };\n * };\n * };\n * motion?: {\n * noise?: {\n * src ?: string;\n * frequency?: number;\n * amplitude?: number;\n * };\n * };\n * }[]} images\n * @throws {Error}\n */\n constructor(images: ImgSourceCollection) {\n this.images = images\n this.#initBreakpointsFromImages(Object.keys(this.images).map(Number))\n this.update()\n }\n\n /**\n * Taking into consideration window size,\n * it is selected the breakpoint and image to be used\n *\n * @returns {boolean}\n * @note Each breakpoint defines the `min-width` at which\n * a specific image should be used.\n * That is why it is returned\n * the greater breakpoint that is less than or equal\n * the window size\n */\n update(): boolean {\n const width = window.innerWidth\n\n const currentBreakpoint = this.#breakpoints.reduce(\n (max, breakpoint) =>\n breakpoint <= width && breakpoint > max ? breakpoint : max,\n DEFAULT_IMAGE_BREAKPOINT,\n )\n\n if (currentBreakpoint !== this.#currentBreakpoint) {\n this.#currentBreakpoint = currentBreakpoint\n this.currentImage = this.images[this.#currentBreakpoint]\n return true\n }\n\n return false\n }\n\n /**\n * Init breakpoints from image\n *\n * @param {number[]} breakpoints\n * @returns {void}\n * @throws {Error}\n */\n #initBreakpointsFromImages(breakpoints: number[]): void {\n if (\n breakpoints.find(\n (breakpoint) => breakpoint === DEFAULT_IMAGE_BREAKPOINT,\n ) === undefined\n ) {\n throw new Error(\n 'The `0` breakpoint is required. It defines the default image that should be used.',\n )\n }\n\n this.#breakpoints = breakpoints\n }\n}\n","/**\n * @description Main\n * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)\n * @note This class works as the entry point of the library.\n * It is like a dependency injection manager (DI container).\n * Also, it adds features not related to the effect itself,\n * like enable debug to tweak effect parameters or\n * effect parent container configuration\n */\nimport {Timer} from 'three/addons'\nimport Runner from './main/runner.ts'\nimport RendererManager from '../services/renderer-manager.js'\nimport DebugManager from '../services/debug-manager.js'\nimport Image from './main/runner/image.js'\nimport Pointer from './main/runner/pointer.js'\nimport PointerCanvas from './main/runner/pointer/canvas.js'\nimport pointerImage from '../media/processor/displacement/pointer.png'\nimport noiseImage from '../media/processor/displacement/noise.png'\nimport type {Config} from '../types'\nimport ImageManager from '../services/image-manager.js'\n\nexport default class Main {\n /**\n * @type {RendererManager}\n */\n rendererManager: RendererManager\n\n /**\n * @type {DebugManager}\n */\n debugManager: DebugManager\n\n /**\n * @type {Runner}\n */\n #runner: Runner\n\n /**\n * @type {ImageManager}\n */\n #imageManager: ImageManager\n\n /**\n * @type {Timer}\n */\n #timer: Timer\n\n /**\n * @type {{\n * containerSelector?: string;\n * image : {\n * src : string;\n * width : number;\n * height : number;\n * resolution: {\n * width : number;\n * height: number;\n * };\n * pixel?: {\n * size ?: number;\n * motion?: {\n * displacement?: {\n * frequency?: number;\n * amplitude?: number;\n * }\n * }\n * };\n * motion?: {\n * noise?: {\n * src ?: string;\n * frequency?: number;\n * amplitude?: number;\n * }\n * }\n * }[];\n * pointer?: {\n * src ?: string;\n * size ?: number;\n * trailing?: {\n * factor?: number;\n * }\n * };\n * isDebugging?: boolean;\n * }}\n */\n #config: Config\n\n /**\n * @type {boolean}\n */\n #isDebugging: boolean\n\n /**\n * @type {number}\n */\n #requestAnimationId: number\n\n /**\n * @type {Function}\n */\n #boundHandleDebug: (e: KeyboardEvent) => void\n\n /**\n * @type {Function}\n */\n #boundHandleResize: (e: Event) => void\n\n /**\n * Constructor\n *\n * @param {{\n * containerSelector?: string;\n * image : {\n * src : string;\n * width : number;\n * height : number;\n * resolution: {\n * width : number;\n * height: number;\n * };\n * pixel?: {\n * size ?: number;\n * alphaTest?: number;\n * motion ?: {\n * displacement?: {\n * frequency?: number;\n * amplitude?: number;\n * }\n * }\n * };\n * motion?: {\n * noise?: {\n * src ?: string;\n * frequency?: number;\n * amplitude?: number;\n * }\n * }\n * }[];\n * pointer?: {\n * src ?: string;\n * size ?: number;\n * trailing?: {\n * factor?: number;\n * }\n * };\n * isDebugging?: boolean;\n * }} config\n * @throws {Error}\n */\n constructor(config: Config) {\n this.#config = config\n this.#isDebugging = config.isDebugging ?? false\n this.#imageManager = new ImageManager(config.images)\n\n this.#init()\n }\n\n /**\n * Debug\n *\n * @returns {void}\n */\n debug(): void {\n if (!this.#isDebugging) {\n this.#enableDebug()\n this.#isDebugging = true\n }\n }\n\n /**\n * Dispose\n *\n * @returns {void}\n */\n dispose(): void {\n cancelAnimationFrame(this.#requestAnimationId)\n\n window.removeEventListener('keydown', this.#boundHandleDebug)\n window.removeEventListener('resize', this.#boundHandleResize)\n\n this.#timer.dispose()\n\n this.#runner.dispose()\n\n this.rendererManager.dispose()\n\n this.debugManager.dispose()\n }\n\n /**\n * Init\n *\n * @returns {void}\n */\n #init(): void {\n this.rendererManager = new RendererManager(\n this.#imageManager.currentImage.width,\n this.#imageManager.currentImage.height,\n )\n\n this.#timer = new Timer()\n\n this.#initDebugManager()\n\n this.#initRunner()\n\n if (this.#config.containerSelector) {\n this.#initDom(this.#config.containerSelector)\n }\n\n this.#boundHandleDebug = this.#handleDebug.bind(this)\n window.addEventListener('keydown', this.#boundHandleDebug)\n if (this.#isDebugging) {\n this.#enableDebug()\n } else {\n this.#disableDebug()\n }\n\n this.#boundHandleResize = () => {\n if (this.#imageManager.update()) {\n this.dispose()\n this.#init()\n }\n }\n window.addEventListener('resize', this.#boundHandleResize)\n\n this.#render()\n }\n\n /**\n * Render\n *\n * @params {number} t\n * @returns {void}\n */\n #render(t = 0): void {\n this.#timer.update(t)\n\n this.#runner.update(this.#timer.getElapsed())\n\n this.#requestAnimationId = requestAnimationFrame(this.#render.bind(this))\n }\n\n /**\n * Handle debug\n *\n * @param {KeyboardEvent} e\n * @returns {void}\n */\n #handleDebug(e: KeyboardEvent): void {\n if (e.key === 'd') {\n this.debug()\n }\n }\n\n /**\n * Enable debug\n *\n * @returns {void}\n */\n #enableDebug(): void {\n this.#runner.debug()\n this.debugManager.enable()\n }\n\n /**\n * Disable debug\n *\n * @returns {void}\n */\n #disableDebug(): void {\n this.debugManager.disable()\n }\n\n /**\n * Init runner\n *\n * @returns {void}\n */\n #initRunner(): void {\n this.#runner = new Runner(\n new Image(\n this.rendererManager,\n this.debugManager,\n this.#imageManager.currentImage.src,\n this.#imageManager.currentImage.resolution.width,\n this.#imageManager.currentImage.resolution.height,\n this.#imageManager.currentImage.pixel?.size ?? 1,\n this.#imageManager.currentImage.pixel?.alphaTest ?? 0.1,\n ),\n new Pointer(\n this.rendererManager,\n new PointerCanvas(\n this.debugManager,\n this.#imageManager.currentImage.resolution.width,\n this.#imageManager.currentImage.resolution.height,\n this.#config.pointer?.src ?? pointerImage,\n this.#config.pointer?.size ?? 0.15,\n this.#config.pointer?.trailing?.factor ?? 0.01,\n ),\n ),\n this.rendererManager,\n this.debugManager,\n this.#imageManager.currentImage.motion?.noise?.src ?? noiseImage,\n this.#imageManager.currentImage.motion?.noise?.frequency ?? 0.05,\n this.#imageManager.currentImage.motion?.noise?.amplitude ?? 3,\n this.#imageManager.currentImage.pixel?.motion?.displacement?.frequency ??\n 5,\n this.#imageManager.currentImage.pixel?.motion?.displacement?.amplitude ??\n 4,\n )\n }\n\n /**\n * Init debug manager\n *\n * @returns {void}\n */\n #initDebugManager(): void {\n this.debugManager = new DebugManager()\n }\n\n /**\n * Init DOM\n *\n * @param {string} containerSelector\n * @returns {void}\n */\n #initDom(containerSelector: string): void {\n const node = document.querySelector(containerSelector)\n node?.appendChild(this.rendererManager.renderer.domElement)\n node?.appendChild(this.debugManager.debugger.element)\n }\n}\n"],"names":["Timer","now","handleVisibilityChange","timescale","timestamp","RendererManager","width","height","#initRenderer","#initScene","#initCamera","#disposeScene","#disposeRenderer","canvas","antialias","THREE","left","right","top","bottom","near","far","isEmpty","value","isObject","isRecord","deepEqualsArray","a1","a2","i","deepMerge","r1","r2","result","key","v1","v2","isBinding","CREATE_MESSAGE_MAP","context","TpError","bundleId","id","name","config","_a","BindingTarget","obj","valueObj","Emitter","eventName","handler","opt_options","observers","observer","event","ComplexValue","initialValue","rawValue","options","opts","constrainedValue","prevValue","PrimitiveValue","ReadonlyPrimitiveValue","ev","createValue","constraint","equals","createReadonlyValue","ValueMap","valueMap","o","core","DefiniteRangeConstraint","max","min","RangeConstraint","StepConstraint","step","origin","r","NumberLiteralNode","text","BINARY_OPERATION_MAP","BinaryOperationNode","operator","op","UNARY_OPERATION_MAP","v","UnaryOperationNode","expr","combineReader","parsers","cursor","readWhitespace","m","readNonZeroDigit","ch","readDecimalDigits","readSignedInteger","ds","sign","sds","readExponentPart","e","si","readDecimalIntegerLiteral","nzd","readDecimalLiteral1","dil","dot","dds","readDecimalLiteral2","readDecimalLiteral3","readDecimalLiteral","parseBinaryDigits","readBinaryIntegerLiteral","prefix","bds","readOctalDigits","readOctalIntegerLiteral","ods","readHexDigits","readHexIntegerLiteral","hds","readNonDecimalIntegerLiteral","readNumericLiteral","parseLiteral","num","parseParenthesizedExpression","parseExpression","cl","parsePrimaryExpression","parseUnaryExpression","readBinaryOperator","ops","createBinaryOperationExpressionParser","exprParser","firstExpr","nextExpr","parseBinaryOperationExpression","parser","parseEcmaNumberExpression","parseNumber","numberFromUnknown","pv","createNumberFormatter","digits","mapRange","start1","end1","start2","end2","p","getDecimalDigits","constrainRange","loopRange","getSuitableDecimalDigits","params","getSuitableKeyScale","getSuitablePointerScale","base","createStepConstraint","createRangeConstraint","createNumberTextPropsObject","_b","_c","createNumberTextInputParamsParser","createPointAxis","BladeApi","controller","disabled","hidden","state","TpEvent","target","TpChangeEvent","last","TpFoldEvent","expanded","TpTabSelectEvent","index","TpMouseEvent","nativeEvent","BindingApi","label","tag","bh","parseObject","keyToParserMap","tmp","parseArray","parseItem","item","createMicroParserBuilder","parse","optional","createMicroParserBuilders","itemParser","MicroParsers","parseRecord","map","importBladeState","superImport","callback","exportBladeState","superExport","thisState","isValueBladeController","bc","isBindingValue","b","SVG_NS","forceReflow","element","disableTransitionTemporarily","supportsTouch","doc","getCanvasContext","canvasElement","win","ICON_ID_TO_INNER_HTML_MAP","createSvgIconElement","document","iconId","elem","insertElementAt","parentElement","removeElement","removeChildElements","removeChildNodes","findNextTarget","bindValue","applyValue","bindValueMap","PREFIX","ClassName","viewName","opt_elementName","opt_modifier","cn","createLabelNode","frag","line","lineNode","LabelView","labelElem","valueElem","LabelController","getAllBladePositions","POS_TO_CLASS_NAME_MAP","BladeController","pos","parent","ButtonApi","title","applyClass","className","active","valueToClassName","bindValueToTextContent","ButtonView","buttonElem","titleElem","ButtonController","ButtonBladeController","lc","s","Semver","prerelease","coreComps","VERSION","createPlugin","plugin","args","addButtonAsBlade","api","addFolderAsBlade","addTabAsBlade","isRefreshable","createBindingTarget","RackApi","pool","object","opt_params","opt_index","c","binding","ContainerBladeApi","ContainerBladeController","isContainerBladeController","NestedOrderedSet","extract","subList","findValueBladeController","bcs","findSubBladeControllerSet","Rack","finder","root","rack","emitter","visibleItems","firstVisibleItem","lastVisibleItem","ps","_ev","_","RackController","createBlade","Foldable","coreObj","exHeight","expandedClassName","onExpand","computeExpandedFolderHeight","folder","containerElement","applyHeight","foldable","bindFoldable","h","FolderApi","bladeContainerClassName","FolderView","indentElem","markElem","containerElem","FolderController","view","valueToModifier","modifier","ViewProps","opt_initialValue","disposed","prevParent","TabPageView","TabItemView","selected","TabItemController","TabPageController","TabApi","pc","papi","TabPageApi","INDEX_NOT_SELECTED","Tab","firstSelIndex","TabView","contentsElem","TabController","tab","ListInputBindingApi","CompositeConstraint","constraints","findConstraint","constraintClass","tmpResult","sc","ListConstraint","parseListOptions","normalizeListOptions","items","createListConstraint","ListView","selectElem","optionElem","values","ListController","PopupView","PopupController","TextView","inputElem","formatter","TextController","parsedValue","boolToString","boolFromUnknown","BooleanFormatter","composeParsers","innerFormatter","formatPercentage","stringFromUnknown","formatString","connectValues","primary","secondary","forward","backward","changing","preventFeedback","getStepForKey","keyScale","keys","getVerticalStepKeys","getHorizontalStepKeys","isVerticalArrowKey","isArrowKey","computeOffset","rect","PointerHandler","offset","touch","NumberTextView","knobElem","guideElem","bodyElem","headElem","tooltipElem","x","aox","adx","NumberTextController","ph","data","dx","SliderView","trackElem","SliderController","d","SliderTextView","sliderElem","textElem","SliderTextController","sliderProps","createSliderTextProps","CSS_VAR_MAP","getCssVar","createPointDimensionParser","parsePointDimensionParams","createDimensionConstraint","cs","rs","parsePickerLayout","writePrimitive","CheckboxView","wrapperElem","CheckboxController","createConstraint","_args","ColorView","swatchElem","pickerElem","rgbToHslInt","g","rp","gp","bp","cmax","cmin","l","hslToRgbInt","hp","sp","lp","rgbToHsvInt","hsvToRgbInt","vp","hslToHsvInt","sd","hsvToHslInt","removeAlphaComponent","comps","appendAlphaComponent","alpha","MODE_CONVERTER_MAP","getColorMaxComponents","mode","type","loopHueRange","hue","constrainColorComponents","components","ms","convertColorType","from","to","fms","tms","convertColor","intComps","IntColor","opt_mode","rgbComps","ColorPickerView","hsvElem","svElem","hElem","rgbElem","aElem","apElem","atElem","elems","parseColorType","parseColorInputParams","getKeyScaleForColor","forAlpha","extractColorType","FloatColor","TYPE_TO_CONSTRUCTOR_MAP","createColor","isFloatColor","isIntColor","convertFloatToInt","cf","convertIntToFloat","ci","mapColorType","equalsStringColorFormat","f1","f2","parseCssNumberOrPercentage","ANGLE_TO_DEG_MAP","angle","parseCssNumberOrAngle","unit","parseFunctionalRgbColorComponents","parseFunctionalRgbColor","parseFunctionalRgbaColorComponents","parseFunctionalRgbaColor","parseFunctionalHslColorComponents","parseFunctionalHslColor","parseHslaColorComponents","parseFunctionalHslaColor","parseHexRgbColorComponents","mRgb","mRrggbb","parseHexRgbColor","parseHexRgbaColorComponents","parseHexRgbaColor","parseObjectRgbColorComponents","createObjectRgbColorParser","parseObjectRgbaColorComponents","createObjectRgbaColorParser","PARSER_AND_RESULT","detectStringColor","prev","detection","detectStringColorFormat","createColorStringParser","readIntColorString","zerofill","comp","hex","colorToHexRgbString","hexes","colorToHexRgbaString","rgbaComps","colorToFunctionalRgbString","colorToFunctionalRgbaString","aFormatter","rgbFormatter","colorToFunctionalHslString","formatters","colorToFunctionalHslaString","colorToObjectRgbString","names","cc","createObjectRgbColorFormatter","colorToObjectRgbaString","createObjectRgbaColorFormatter","FORMAT_AND_STRINGIFIERS","findColorStringifier","format","fas","APaletteView","barElem","colorElem","markerElem","previewElem","leftColor","rightColor","gradientComps","APaletteController","createModeSelectElement","optElem","ColorTextsView","modeElem","modeMarkerElem","inputsElem","inputViews","compElem","createFormatter","createComponentController","createComponentControllers","pickedMode","createHexController","isColorMode","ColorTextsController","HPaletteView","HPaletteController","CANVAS_RESOL","SvPaletteView","canvasElem","ctx","hsvComps","imgData","iy","ix","SvPaletteController","saturation","a","dv","ColorPickerController","ColorSwatchView","ColorSwatchController","ColorController","pickerC","nextTarget","colorToRgbNumber","colorToRgbaNumber","numberToRgbColor","numberToRgbaColor","colorFromRgbNumber","colorFromRgbaNumber","isRgbColorComponent","isRgbColorObject","isRgbaColorObject","isColorObject","equalsColor","comps1","comps2","createColorComponentsFromRgbObject","createColorStringWriter","stringify","createColorNumberWriter","supportsAlpha","colorToNumber","writeRgbaColorObject","writeRgbColorObject","createColorObjectWriter","inValue","shouldSupportAlpha","inputParams","isForColor","colorFromObject","createColorObjectBindingReader","createColorObjectFormatter","stringifier","writer","PointNdConstraint","PointNdTextView","axisElem","createAxisController","PointNdTextController","ac","SliderInputBindingApi","rc","textPropsObj","drc","Point2d","y","Point2dAssembly","Point2dView","Point2dPickerView","padElem","svgElem","xAxisElem","yAxisElem","lineElem","px","py","ipy","keyScales","invertsY","Point2dPickerController","dy","Point2dController","padC","point2dFromUnknown","writePoint2d","getSuitableMaxDimensionValue","getSuitableMax","xr","yr","shouldInvertY","yParams","dParams","Point3d","z","Point3dAssembly","point3dFromUnknown","writePoint3d","Point4d","w","Point4dAssembly","point4dFromUnknown","writePoint4d","Constants","MultiLogView","textareaElem","shouldScroll","lines","MultiLogController","SingleLogView","lastValue","SingleLogController","GraphLogMonitorBindingApi","GraphLogView","maxIndex","points","tx","ty","GraphLogController","createTextMonitor","createGraphMonitor","shouldShowGraph","getSettings","imagePixelSize","imagePixelMotionFrequency","imagePixelMotionAmplitude","imageMotionFrequency","imageMotionAmplitude","pointerSize","pointerTrailing","DebugManager","Pane","#addCopyButton","property","debuggerObj","btn","pointer","imagePixelMotion","imageMotion","settings","vertex_default","fragment_default","Image$1","#imageTexture","#rendererManager","#debugManager","rendererManager","debugManager","imageSrc","resolutionWidth","resolutionHeight","pointSize","alphaTest","#initPoints","resolutionFolder","#replaceImageGeometry","pixelFolder","textureLoader","imageGeometry","#createImageGeometry","imageMaterial","imageVertexShader","imageFragmentShader","attributes","geometry","Canvas","#context","#pointerImage","#pointerImageSize","#pointerTrailingFactor","pointerImageSrc","pointerImageSize","pointerTrailingFactor","#initCanvasTexture","#initPointerImage","#clear","#draw","pointerFolder","#processPointerImageSize","pointerCanvasFolder","Pointer","#boundPointerMove","#boundPointerLeave","#initRaycaster","intersections","uv","#disposeRaycaster","#processPointerMove","#processPointerLeave","pars_vertex_default","position_vertex_default","Runner","#image","#pointer","image","noiseImageSrc","noiseFrequency","noiseAmplitude","displacementFrequency","displacementAmplitude","#initImage","#initPointer","elapsed","pixelMotionFolder","imageMotionFolder","#addDisplacementAttributesToImage","#addDisplacementHandlerToImage","noiseTexture","shader","parsVertexShader","positionVertexShader","vertices","disAngle","disAmplitude","pointerImage","noiseImage","DEFAULT_IMAGE_BREAKPOINT","ImageManager","#currentBreakpoint","#breakpoints","images","#initBreakpointsFromImages","currentBreakpoint","breakpoint","breakpoints","Main","#runner","#imageManager","#timer","#config","#isDebugging","#requestAnimationId","#boundHandleDebug","#boundHandleResize","#init","#enableDebug","#initDebugManager","#initRunner","#initDom","#handleDebug","#disableDebug","#render","t","Image","PointerCanvas","containerSelector","node"],"mappings":"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","x_google_ignoreList":[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|