@decidables/accumulable-elements 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"accumulableElements.umd.min.js","sources":["../../../node_modules/@lit/reactive-element/css-tag.js","../../../node_modules/@lit/reactive-element/reactive-element.js","../../../node_modules/lit-html/lit-html.js","../../../node_modules/lit-element/lit-element.js","../../../node_modules/d3-array/src/ascending.js","../../../node_modules/d3-array/src/descending.js","../../../node_modules/d3-array/src/bisector.js","../../../node_modules/d3-array/src/bisect.js","../../../node_modules/d3-array/src/number.js","../../../node_modules/d3-array/src/ticks.js","../../../node_modules/d3-axis/src/identity.js","../../../node_modules/d3-axis/src/axis.js","../../../node_modules/d3-dispatch/src/dispatch.js","../../../node_modules/d3-selection/src/namespaces.js","../../../node_modules/d3-selection/src/namespace.js","../../../node_modules/d3-selection/src/creator.js","../../../node_modules/d3-selection/src/selector.js","../../../node_modules/d3-selection/src/selectorAll.js","../../../node_modules/d3-selection/src/selection/selectAll.js","../../../node_modules/d3-selection/src/array.js","../../../node_modules/d3-selection/src/matcher.js","../../../node_modules/d3-selection/src/selection/selectChild.js","../../../node_modules/d3-selection/src/selection/selectChildren.js","../../../node_modules/d3-selection/src/selection/sparse.js","../../../node_modules/d3-selection/src/selection/enter.js","../../../node_modules/d3-selection/src/selection/data.js","../../../node_modules/d3-selection/src/selection/sort.js","../../../node_modules/d3-selection/src/selection/attr.js","../../../node_modules/d3-selection/src/window.js","../../../node_modules/d3-selection/src/selection/style.js","../../../node_modules/d3-selection/src/selection/property.js","../../../node_modules/d3-selection/src/selection/classed.js","../../../node_modules/d3-selection/src/selection/text.js","../../../node_modules/d3-selection/src/selection/html.js","../../../node_modules/d3-selection/src/selection/raise.js","../../../node_modules/d3-selection/src/selection/lower.js","../../../node_modules/d3-selection/src/selection/insert.js","../../../node_modules/d3-selection/src/selection/remove.js","../../../node_modules/d3-selection/src/selection/clone.js","../../../node_modules/d3-selection/src/selection/on.js","../../../node_modules/d3-selection/src/selection/dispatch.js","../../../node_modules/d3-selection/src/selection/index.js","../../../node_modules/d3-selection/src/select.js","../../../node_modules/d3-selection/src/selection/select.js","../../../node_modules/d3-selection/src/selection/filter.js","../../../node_modules/d3-selection/src/constant.js","../../../node_modules/d3-selection/src/selection/exit.js","../../../node_modules/d3-selection/src/selection/join.js","../../../node_modules/d3-selection/src/selection/merge.js","../../../node_modules/d3-selection/src/selection/order.js","../../../node_modules/d3-selection/src/selection/call.js","../../../node_modules/d3-selection/src/selection/nodes.js","../../../node_modules/d3-selection/src/selection/node.js","../../../node_modules/d3-selection/src/selection/size.js","../../../node_modules/d3-selection/src/selection/empty.js","../../../node_modules/d3-selection/src/selection/each.js","../../../node_modules/d3-selection/src/selection/append.js","../../../node_modules/d3-selection/src/selection/datum.js","../../../node_modules/d3-selection/src/selection/iterator.js","../../../node_modules/d3-selection/src/local.js","../../../node_modules/d3-selection/src/pointer.js","../../../node_modules/d3-selection/src/sourceEvent.js","../../../node_modules/d3-drag/src/noevent.js","../../../node_modules/d3-drag/src/constant.js","../../../node_modules/d3-drag/src/event.js","../../../node_modules/d3-drag/src/drag.js","../../../node_modules/d3-drag/src/nodrag.js","../../../node_modules/d3-color/src/define.js","../../../node_modules/d3-color/src/color.js","../../../node_modules/d3-interpolate/src/constant.js","../../../node_modules/d3-interpolate/src/color.js","../../../node_modules/d3-interpolate/src/rgb.js","../../../node_modules/d3-interpolate/src/numberArray.js","../../../node_modules/d3-interpolate/src/array.js","../../../node_modules/d3-interpolate/src/date.js","../../../node_modules/d3-interpolate/src/number.js","../../../node_modules/d3-interpolate/src/object.js","../../../node_modules/d3-interpolate/src/string.js","../../../node_modules/d3-interpolate/src/value.js","../../../node_modules/d3-interpolate/src/round.js","../../../node_modules/d3-interpolate/src/transform/decompose.js","../../../node_modules/d3-interpolate/src/transform/parse.js","../../../node_modules/d3-interpolate/src/transform/index.js","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3-timer/src/timeout.js","../../../node_modules/d3-transition/src/transition/schedule.js","../../../node_modules/d3-transition/src/transition/tween.js","../../../node_modules/d3-transition/src/transition/interpolate.js","../../../node_modules/d3-transition/src/transition/attr.js","../../../node_modules/d3-transition/src/transition/attrTween.js","../../../node_modules/d3-transition/src/transition/delay.js","../../../node_modules/d3-transition/src/transition/duration.js","../../../node_modules/d3-transition/src/transition/selection.js","../../../node_modules/d3-transition/src/transition/style.js","../../../node_modules/d3-transition/src/transition/index.js","../../../node_modules/d3-transition/src/transition/select.js","../../../node_modules/d3-transition/src/transition/selectAll.js","../../../node_modules/d3-transition/src/transition/filter.js","../../../node_modules/d3-transition/src/transition/merge.js","../../../node_modules/d3-transition/src/transition/transition.js","../../../node_modules/d3-transition/src/transition/on.js","../../../node_modules/d3-transition/src/transition/styleTween.js","../../../node_modules/d3-transition/src/transition/text.js","../../../node_modules/d3-transition/src/transition/textTween.js","../../../node_modules/d3-transition/src/transition/remove.js","../../../node_modules/d3-transition/src/transition/ease.js","../../../node_modules/d3-transition/src/transition/easeVarying.js","../../../node_modules/d3-transition/src/transition/end.js","../../../node_modules/d3-ease/src/linear.js","../../../node_modules/d3-ease/src/cubic.js","../../../node_modules/d3-transition/src/selection/transition.js","../../../node_modules/d3-transition/src/selection/index.js","../../../node_modules/d3-transition/src/selection/interrupt.js","../../../node_modules/d3-transition/src/interrupt.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-format/src/formatDecimal.js","../../../node_modules/d3-format/src/exponent.js","../../../node_modules/d3-format/src/formatSpecifier.js","../../../node_modules/d3-format/src/formatPrefixAuto.js","../../../node_modules/d3-format/src/formatRounded.js","../../../node_modules/d3-format/src/formatTypes.js","../../../node_modules/d3-format/src/identity.js","../../../node_modules/d3-format/src/locale.js","../../../node_modules/d3-format/src/defaultLocale.js","../../../node_modules/d3-format/src/formatGroup.js","../../../node_modules/d3-format/src/formatNumerals.js","../../../node_modules/d3-format/src/formatTrim.js","../../../node_modules/d3-random/src/defaultSource.js","../../../node_modules/d3-random/src/uniform.js","../../../node_modules/d3-random/src/normal.js","../../../node_modules/d3-random/src/lcg.js","../../../node_modules/d3-scale/src/init.js","../../../node_modules/d3-scale/src/number.js","../../../node_modules/d3-scale/src/continuous.js","../../../node_modules/d3-scale/src/constant.js","../../../node_modules/d3-scale/src/tickFormat.js","../../../node_modules/d3-format/src/precisionPrefix.js","../../../node_modules/d3-format/src/precisionRound.js","../../../node_modules/d3-format/src/precisionFixed.js","../../../node_modules/d3-scale/src/linear.js","../../../node_modules/d3/node_modules/d3-shape/src/constant.js","../../../node_modules/d3/node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3/node_modules/d3-shape/src/point.js","../../../node_modules/d3/node_modules/d3-shape/src/line.js","../../../node_modules/d3/node_modules/d3-shape/src/path.js","../../../node_modules/d3/node_modules/d3-shape/src/array.js","../../../node_modules/d3-zoom/src/transform.js","../../decidables-elements/src/decidables-element.js","../../decidables-elements/src/button.js","../../../node_modules/lit-html/directives/if-defined.js","../../decidables-elements/src/slider.js","../../decidables-elements/src/spinner.js","../../decidables-elements/src/switch.js","../../decidables-elements/src/toggle.js","../../decidables-elements/src/mixin-resizeable.js","../../decidables-elements/src/toggle-option.js","../src/accumulable-element.js","../src/components/accumulable-control.js","../../accumulable-math/src/ddm-math.js","../src/components/accumulable-response.js","../src/components/accumulable-table.js","../src/components/ddm-fit.js","../src/components/ddm-parameters.js","../src/components/ddm-model.js","../src/components/rdk-2afc-task.js","../../../node_modules/d3-timer/src/interval.js","../src/equations/ddm-equation.js","../src/equations/azv2pc.js","../src/equations/azvt02m.js","../src/examples/ddm-example.js","../src/examples/human.js","../src/examples/interactive.js","../src/examples/model.js"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1]),t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){const e=this.constructor,h=this[t];if(i??=e.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(e._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach((t=>this._$ET(t,this[t]))),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.1\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t.trustedTypes,s=i?i.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,e=\"$lit$\",h=`lit$${Math.random().toFixed(9).slice(2)}$`,o=\"?\"+h,n=`<${o}>`,r=document,l=()=>r.createComment(\"\"),c=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,a=Array.isArray,u=t=>a(t)||\"function\"==typeof t?.[Symbol.iterator],d=\"[ \\t\\n\\f\\r]\",f=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,v=/-->/g,_=/>/g,m=RegExp(`>|${d}(?:([^\\\\s\"'>=/]+)(${d}*=${d}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),p=/'/g,g=/\"/g,$=/^(?:script|style|textarea|title)$/i,y=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),x=y(1),b=y(2),w=y(3),T=Symbol.for(\"lit-noChange\"),E=Symbol.for(\"lit-nothing\"),A=new WeakMap,C=r.createTreeWalker(r,129);function P(t,i){if(!a(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==s?s.createHTML(i):i}const V=(t,i)=>{const s=t.length-1,o=[];let r,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=f;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,y=0;for(;y<s.length&&(c.lastIndex=y,u=c.exec(s),null!==u);)y=c.lastIndex,c===f?\"!--\"===u[1]?c=v:void 0!==u[1]?c=_:void 0!==u[2]?($.test(u[2])&&(r=RegExp(\"</\"+u[2],\"g\")),c=m):void 0!==u[3]&&(c=m):c===m?\">\"===u[0]?(c=r??f,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?m:'\"'===u[3]?g:p):c===g||c===p?c=m:c===v||c===_?c=f:(c=m,r=void 0);const x=c===m&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===f?s+n:d>=0?(o.push(a),s.slice(0,d)+e+s.slice(d)+h+x):s+h+(-2===d?i:x)}return[P(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),o]};class N{constructor({strings:t,_$litType$:s},n){let r;this.parts=[];let c=0,a=0;const u=t.length-1,d=this.parts,[f,v]=V(t,s);if(this.el=N.createElement(f,n),C.currentNode=this.el.content,2===s||3===s){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=C.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(e)){const i=v[a++],s=r.getAttribute(t).split(h),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:c,name:e[2],strings:s,ctor:\".\"===e[1]?H:\"?\"===e[1]?I:\"@\"===e[1]?L:k}),r.removeAttribute(t)}else t.startsWith(h)&&(d.push({type:6,index:c}),r.removeAttribute(t));if($.test(r.tagName)){const t=r.textContent.split(h),s=t.length-1;if(s>0){r.textContent=i?i.emptyScript:\"\";for(let i=0;i<s;i++)r.append(t[i],l()),C.nextNode(),d.push({type:2,index:++c});r.append(t[s],l())}}}else if(8===r.nodeType)if(r.data===o)d.push({type:2,index:c});else{let t=-1;for(;-1!==(t=r.data.indexOf(h,t+1));)d.push({type:7,index:c}),t+=h.length-1}c++}}static createElement(t,i){const s=r.createElement(\"template\");return s.innerHTML=t,s}}function S(t,i,s=t,e){if(i===T)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=c(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=S(t,h._$AS(t,i.values),h,e)),i}class M{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??r).importNode(i,!0);C.currentNode=e;let h=C.nextNode(),o=0,n=0,l=s[0];for(;void 0!==l;){if(o===l.index){let i;2===l.type?i=new R(h,h.nextSibling,this,t):1===l.type?i=new l.ctor(h,l.name,l.strings,this,t):6===l.type&&(i=new z(h,this,t)),this._$AV.push(i),l=s[++n]}o!==l?.index&&(h=C.nextNode(),o++)}return C.currentNode=r,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class R{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=E,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=S(this,t,i),c(t)?t===E||null==t||\"\"===t?(this._$AH!==E&&this._$AR(),this._$AH=E):t!==this._$AH&&t!==T&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):u(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==E&&c(this._$AH)?this._$AA.nextSibling.data=t:this.T(r.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=N.createElement(P(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new M(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=A.get(t.strings);return void 0===i&&A.set(t.strings,i=new N(t)),i}k(t){a(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new R(this.O(l()),this.O(l()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,i){for(this._$AP?.(!1,!0,i);t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class k{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=E,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=E}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=S(this,t,i,0),o=!c(t)||t!==this._$AH&&t!==T,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=S(this,e[s+n],i,n),r===T&&(r=this._$AH[n]),o||=!c(r)||r!==this._$AH[n],r===E?t=E:t!==E&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===E?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class H extends k{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===E?void 0:t}}class I extends k{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==E)}}class L extends k{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=S(this,t,i,0)??E)===T)return;const s=this._$AH,e=t===E&&s!==E||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==E&&(s===E||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){S(this,t)}}const Z={M:e,P:h,A:o,C:1,L:V,R:M,D:u,V:S,I:R,H:k,N:I,U:L,B:H,F:z},j=t.litHtmlPolyfillSupport;j?.(N,R),(t.litHtmlVersions??=[]).push(\"3.3.1\");const B=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new R(i.insertBefore(l(),t),t,void 0,s??{})}return h._$AI(t),h};export{Z as _$LH,x as html,w as mathml,T as noChange,E as nothing,B as render,b as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.1\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","export default x => () => x;\n","export default function DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view)\n .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n nodrag(event.view);\n nopropagation(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","export const linear = t => +t;\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","export default Math.random;\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomUniform(source) {\n function randomUniform(min, max) {\n min = min == null ? 0 : +min;\n max = max == null ? 1 : +max;\n if (arguments.length === 1) max = min, min = 0;\n else max -= min;\n return function() {\n return source() * max + min;\n };\n }\n\n randomUniform.source = sourceRandomUniform;\n\n return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomNormal(source) {\n function randomNormal(mu, sigma) {\n var x, r;\n mu = mu == null ? 0 : +mu;\n sigma = sigma == null ? 1 : +sigma;\n return function() {\n var y;\n\n // If available, use the second previously-generated uniform random.\n if (x != null) y = x, x = null;\n\n // Otherwise, generate a new x and y.\n else do {\n x = source() * 2 - 1;\n y = source() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n\n return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n };\n }\n\n randomNormal.source = sourceRandomNormal;\n\n return randomNormal;\n})(defaultSource);\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst mul = 0x19660D;\nconst inc = 0x3C6EF35F;\nconst eps = 1 / 0x100000000;\n\nexport default function lcg(seed = Math.random()) {\n let state = (0 <= seed && seed < 1 ? seed / eps : Math.abs(seed)) | 0;\n return () => (state = mul * state + inc | 0, eps * (state >>> 0));\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","\nimport {\n LitElement,\n css,\n svg,\n unsafeCSS,\n} from 'lit';\nimport * as d3 from 'd3';\n\n/*\n DecidablesElement Base Class - Not intended for instantiation!\n <decidables-element>\n*/\nexport default class DecidablesElement extends LitElement {\n getComputedStyleValue(property) {\n return getComputedStyle(this).getPropertyValue(property).trim();\n }\n\n firstUpdated(changedProperties) {\n super.firstUpdated(changedProperties);\n\n // Use focus highlighting if keyboard is used at all\n d3.select(this.renderRoot.host)\n .classed('keyboard', true)\n .on('mousemove.keyboard touchstart.keyboard', (event) => {\n const element = event.currentTarget;\n d3.select(element.renderRoot.host)\n .classed('keyboard', false)\n .on('mousemove.keyboard touchstart.keyboard', null);\n })\n .on('keydown.keyboard', (event) => {\n const element = event.currentTarget;\n d3.select(element.renderRoot.host)\n .classed('keyboard', true)\n .on('keydown.keyboard mousemove.keyboard touchstart.keyboard', null);\n });\n }\n\n static get greys() {\n const grey = '#999999';\n const greys = {};\n greys.white = '#ffffff';\n greys.light75 = d3.interpolateRgb(grey, '#ffffff')(0.75);\n greys.light50 = d3.interpolateRgb(grey, '#ffffff')(0.5);\n greys.light25 = d3.interpolateRgb(grey, '#ffffff')(0.25);\n greys.grey = grey;\n greys.dark25 = d3.interpolateRgb(grey, '#000000')(0.25);\n greys.dark50 = d3.interpolateRgb(grey, '#000000')(0.5);\n greys.dark75 = d3.interpolateRgb(grey, '#000000')(0.75);\n greys.black = '#000000';\n return greys;\n }\n\n static get shadows() {\n // Material Design elevation styles\n // References:\n // https://github.com/material-components/material-components-web/tree/master/packages/mdc-elevation\n // https://codepen.io/hanger/pen/yOGvQp\n /* eslint-disable key-spacing, object-curly-newline */\n return {\n elevations: [0, 2, 4, 8, 16],\n baselineColor: '#000000',\n baselineColorString: '0, 0, 0',\n inverseBaselineColor: '#FFFFFF',\n inverseBaselineColorString: '255, 255, 255',\n opacityUmbra: 0.2,\n opacityPenumbra: 0.14,\n opacityAmbient: 0.12,\n opacityBoost: 0.2,\n mapUmbra: {// $mdc-elevation-umbra-map\n 0: {x: 0, y: 0, b: 0, s: 0}, // offset-x, offset-y, blur-radius, spread-radius\n 2: {x: 0, y: 3, b: 1, s: -2},\n 4: {x: 0, y: 2, b: 4, s: -1},\n 8: {x: 0, y: 5, b: 5, s: -3},\n 16: {x: 0, y: 8, b: 10, s: -5},\n },\n mapPenumbra: {// $mdc-elevation-penumbra-map\n 0: {x: 0, y: 0, b: 0, s: 0}, // offset-x, offset-y, blur-radius, spread-radius\n 2: {x: 0, y: 2, b: 2, s: 0},\n 4: {x: 0, y: 4, b: 5, s: 0},\n 8: {x: 0, y: 8, b: 10, s: 1},\n 16: {x: 0, y: 16, b: 24, s: 2},\n },\n mapAmbient: {// $mdc-elevation-ambient-map\n 0: {x: 0, y: 0, b: 0, s: 0}, // offset-x, offset-y, blur-radius, spread-radius\n 2: {x: 0, y: 1, b: 5, s: 0},\n 4: {x: 0, y: 1, b: 10, s: 0},\n 8: {x: 0, y: 3, b: 14, s: 2},\n 16: {x: 0, y: 6, b: 30, s: 5},\n },\n };\n /* eslint-enable key-spacing, object-curly-newline */\n }\n\n static cssBoxShadow(elevation, rotate = false, inverse = false) {\n const umbraO = this.shadows.opacityUmbra + this.shadows.opacityBoost;\n const penumbraO = this.shadows.opacityPenumbra + this.shadows.opacityBoost;\n const ambientO = this.shadows.opacityAmbient + this.shadows.opacityBoost;\n\n const umbraC = (inverse)\n ? `rgba(${this.shadows.inverseBaselineColorString}, ${umbraO})`\n : `rgba(${this.shadows.baselineColorString}, ${umbraO})`;\n const penumbraC = (inverse)\n ? `rgba(${this.shadows.inverseBaselineColorString}, ${penumbraO})`\n : `rgba(${this.shadows.baselineColorString}, ${penumbraO})`;\n const ambientC = (inverse)\n ? `rgba(${this.shadows.inverseBaselineColorString}, ${ambientO})`\n : `rgba(${this.shadows.baselineColorString}, ${ambientO})`;\n\n const umbraM = this.shadows.mapUmbra[elevation];\n const penumbraM = this.shadows.mapPenumbra[elevation];\n const ambientM = this.shadows.mapAmbient[elevation];\n\n const umbraS = (rotate)\n ? `${-umbraM.y}px ${umbraM.y / 2}px ${umbraM.b}px ${umbraM.s}px`\n : `${umbraM.y / 2}px ${umbraM.y}px ${umbraM.b}px ${umbraM.s}px`;\n const penumbraS = (rotate)\n ? `${-penumbraM.y}px ${penumbraM.y / 2}px ${penumbraM.b}px ${penumbraM.s}px`\n : `${penumbraM.y / 2}px ${penumbraM.y}px ${penumbraM.b}px ${penumbraM.s}px`;\n const ambientS = (rotate)\n ? `${-ambientM.y}px ${ambientM.y / 2}px ${ambientM.b}px ${ambientM.s}px`\n : `${ambientM.y / 2}px ${ambientM.y}px ${ambientM.b}px ${ambientM.s}px`;\n\n return `${umbraS} ${umbraC}, ${penumbraS} ${penumbraC}, ${ambientS} ${ambientC}`;\n }\n\n static get svgDefs() {\n const shadows = DecidablesElement.shadows; /* eslint-disable-line prefer-destructuring */\n\n const filters = shadows.elevations.map((z) => {\n return `\n <filter id=${`shadow-${z}`} filterUnits=\"userSpaceOnUse\" x=\"-100%\" y=\"-100%\" width=\"200%\" height=\"200%\">\n <feComponentTransfer in=\"SourceAlpha\" result=\"solid\">\n <feFuncA type=\"table\" tableValues=\"0 1 1\"/>\n </feComponentTransfer>\n <feOffset in=\"solid\" result=\"offU\" dx=${shadows.mapUmbra[z].y / 2} dy=${shadows.mapUmbra[z].y} />\n <feOffset in=\"solid\" result=\"offP\" dx=${shadows.mapPenumbra[z].y / 2} dy=${shadows.mapPenumbra[z].y} />\n <feOffset in=\"solid\" result=\"offA\" dx=${shadows.mapAmbient[z].y / 2} dy=${shadows.mapAmbient[z].y} />\n ${(shadows.mapUmbra[z].s === 0)\n ? ''\n : `<feMorphology in=\"offU\" result=\"spreadU\" operator=${(shadows.mapUmbra[z].s > 0) ? 'dilate' : 'erode'} radius=${Math.abs(shadows.mapUmbra[z].s)} />`\n }\n ${(shadows.mapPenumbra[z].s === 0)\n ? ''\n : `<feMorphology in=\"offP\" result=\"spreadP\" operator=${(shadows.mapPenumbra[z].s > 0) ? 'dilate' : 'erode'} radius=${Math.abs(shadows.mapPenumbra[z].s)} />`\n }\n ${(shadows.mapAmbient[z].s === 0)\n ? ''\n : `<feMorphology in=\"offA\" result=\"spreadA\" operator=${(shadows.mapAmbient[z].s > 0) ? 'dilate' : 'erode'} radius=${Math.abs(shadows.mapAmbient[z].s)} />`\n }\n <feGaussianBlur in=${(shadows.mapUmbra[z].s === 0) ? 'offU' : 'spreadU'} result=\"blurU\" stdDeviation=${shadows.mapUmbra[z].b / 2} />\n <feGaussianBlur in=${(shadows.mapPenumbra[z].s === 0) ? 'offP' : 'spreadP'} result=\"blurP\" stdDeviation=${shadows.mapPenumbra[z].b / 2} />\n <feGaussianBlur in=${(shadows.mapAmbient[z].s === 0) ? 'offA' : 'spreadA'} result=\"blurA\" stdDeviation=${shadows.mapAmbient[z].b / 2} />\n <feFlood in=\"SourceGraphic\" result=\"opU\" flood-color=${shadows.baselineColor} flood-opacity=${shadows.opacityUmbra + shadows.opacityBoost} />\n <feFlood in=\"SourceGraphic\" result=\"opP\" flood-color=${shadows.baselineColor} flood-opacity=${shadows.opacityPenumbra + shadows.opacityBoost} />\n <feFlood in=\"SourceGraphic\" result=\"opA\" flood-color=${shadows.baselineColor} flood-opacity=${shadows.opacityAmbient + shadows.opacityBoost} />\n <feComposite in=\"opU\" in2=\"blurU\" result=\"shU\" operator=\"in\" />\n <feComposite in=\"opP\" in2=\"blurP\" result=\"shP\" operator=\"in\" />\n <feComposite in=\"opA\" in2=\"blurA\" result=\"shA\" operator=\"in\" />\n <feMorphology in=\"solid\" result=\"smaller\" operator=\"erode\" radius=\"1\" />\n <feComposite in=\"shU\" in2=\"smaller\" result=\"finalU\" operator=\"out\" />\n <feComposite in=\"shP\" in2=\"smaller\" result=\"finalP\" operator=\"out\" />\n <feComposite in=\"shA\" in2=\"smaller\" result=\"finalA\" operator=\"out\" />\n <feMerge>\n <feMergeNode in=\"finalU\" />\n <feMergeNode in=\"finalP\" />\n <feMergeNode in=\"finalA\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>`;\n });\n\n return `\n <defs>\n ${filters}\n </defs>\n `;\n }\n\n static get svgFilters() {\n const shadows = DecidablesElement.shadows; /* eslint-disable-line prefer-destructuring */\n\n const filters = shadows.elevations.map((z) => {\n return svg`\n <filter id=${`shadow-${z}`} x=\"-250%\" y=\"-250%\" width=\"600%\" height=\"600%\">\n <feComponentTransfer in=\"SourceAlpha\" result=\"solid\">\n <feFuncA type=\"table\" tableValues=\"0 1 1\"/>\n </feComponentTransfer>\n <feOffset in=\"solid\" result=\"offU\" dx=${shadows.mapUmbra[z].y / 2} dy=${shadows.mapUmbra[z].y} />\n <feOffset in=\"solid\" result=\"offP\" dx=${shadows.mapPenumbra[z].y / 2} dy=${shadows.mapPenumbra[z].y} />\n <feOffset in=\"solid\" result=\"offA\" dx=${shadows.mapAmbient[z].y / 2} dy=${shadows.mapAmbient[z].y} />\n ${(shadows.mapUmbra[z].s === 0)\n ? svg``\n : svg`<feMorphology in=\"offU\" result=\"spreadU\" operator=${(shadows.mapUmbra[z].s > 0) ? 'dilate' : 'erode'} radius=${Math.abs(shadows.mapUmbra[z].s)} />`\n }\n ${(shadows.mapPenumbra[z].s === 0)\n ? svg``\n : svg`<feMorphology in=\"offP\" result=\"spreadP\" operator=${(shadows.mapPenumbra[z].s > 0) ? 'dilate' : 'erode'} radius=${Math.abs(shadows.mapPenumbra[z].s)} />`\n }\n ${(shadows.mapAmbient[z].s === 0)\n ? svg``\n : svg`<feMorphology in=\"offA\" result=\"spreadA\" operator=${(shadows.mapAmbient[z].s > 0) ? 'dilate' : 'erode'} radius=${Math.abs(shadows.mapAmbient[z].s)} />`\n }\n <feGaussianBlur in=${(shadows.mapUmbra[z].s === 0) ? 'offU' : 'spreadU'} result=\"blurU\" stdDeviation=${shadows.mapUmbra[z].b / 2} />\n <feGaussianBlur in=${(shadows.mapPenumbra[z].s === 0) ? 'offP' : 'spreadP'} result=\"blurP\" stdDeviation=${shadows.mapPenumbra[z].b / 2} />\n <feGaussianBlur in=${(shadows.mapAmbient[z].s === 0) ? 'offA' : 'spreadA'} result=\"blurA\" stdDeviation=${shadows.mapAmbient[z].b / 2} />\n <feFlood in=\"SourceGraphic\" result=\"opU\" flood-color=${shadows.baselineColor} flood-opacity=${shadows.opacityUmbra + shadows.opacityBoost} />\n <feFlood in=\"SourceGraphic\" result=\"opP\" flood-color=${shadows.baselineColor} flood-opacity=${shadows.opacityPenumbra + shadows.opacityBoost} />\n <feFlood in=\"SourceGraphic\" result=\"opA\" flood-color=${shadows.baselineColor} flood-opacity=${shadows.opacityAmbient + shadows.opacityBoost} />\n <feComposite in=\"opU\" in2=\"blurU\" result=\"shU\" operator=\"in\" />\n <feComposite in=\"opP\" in2=\"blurP\" result=\"shP\" operator=\"in\" />\n <feComposite in=\"opA\" in2=\"blurA\" result=\"shA\" operator=\"in\" />\n <feMorphology in=\"solid\" result=\"smaller\" operator=\"erode\" radius=\"1\" />\n <feComposite in=\"shU\" in2=\"smaller\" result=\"finalU\" operator=\"out\" />\n <feComposite in=\"shP\" in2=\"smaller\" result=\"finalP\" operator=\"out\" />\n <feComposite in=\"shA\" in2=\"smaller\" result=\"finalA\" operator=\"out\" />\n <feMerge>\n <feMergeNode in=\"finalU\" />\n <feMergeNode in=\"finalP\" />\n <feMergeNode in=\"finalA\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>`;\n });\n\n return svg`\n <svg class=\"defs\">\n <defs>\n ${filters}\n </defs>\n </svg>\n `;\n }\n\n static get styles() {\n return css`\n :host {\n ---shadow-0: var(--shadow-0, ${unsafeCSS(this.cssBoxShadow(0))});\n ---shadow-2: var(--shadow-2, ${unsafeCSS(this.cssBoxShadow(2))});\n ---shadow-4: var(--shadow-4, ${unsafeCSS(this.cssBoxShadow(4))});\n ---shadow-8: var(--shadow-8, ${unsafeCSS(this.cssBoxShadow(8))});\n\n ---color-background: var(--color-background, ${unsafeCSS(this.greys.white)});\n ---color-border: var(--color-border, ${unsafeCSS(this.greys.light75)});\n ---color-text: var(--color-text, ${unsafeCSS(this.greys.dark75)});\n ---color-text-inverse: var(--color-text-inverse, ${unsafeCSS(this.greys.white)});\n ---color-link: var(--color-link, ${unsafeCSS(this.greys.dark25)});\n ---color-element-background: var(--color-element-background, ${unsafeCSS(this.greys.light75)});\n ---color-element-disabled: var(--color-element-disabled, ${unsafeCSS(this.greys.light50)});\n ---color-element-enabled: var(--color-element-enabled, ${unsafeCSS(this.greys.dark25)});\n ---color-element-selected: var(--color-element-selected, ${unsafeCSS(this.greys.grey)});\n ---color-element-border: var(--color-element-border, ${unsafeCSS(this.greys.dark50)});\n ---color-element-emphasis: var(--color-element-emphasis, ${unsafeCSS(this.greys.dark75)});\n\n ---font-family-base: var(--font-family-base, \"Source Sans\", sans-serif);\n ---font-family-math: var(--font-family-math, \"Source Serif\", serif);\n\n ---border: var(--border, 1px solid var(---color-border));\n ---border-radius: var(--border-radius, 0.25rem);\n ---transition-duration: var(--transition-duration, 500ms);\n\n font-family: var(---font-family-base);\n font-weight: normal;\n }\n\n :host,\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: border-box;\n }\n\n .math-greek {\n font-family: var(---font-family-math);\n font-style: normal;\n }\n\n .math-num {\n font-family: var(---font-family-base);\n font-style: normal;\n }\n\n .math-var {\n font-family: var(---font-family-math);\n font-style: italic;\n }\n\n .defs {\n display: block;\n\n width: 0;\n height: 0;\n }\n `;\n }\n}\n","\nimport {html, css} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesButton extends DecidablesElement {\n static get properties() {\n return {\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.disabled = false;\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n ---decidables-button-background-color-disabled: var(--decidables-button-background-color, var(---color-element-disabled));\n ---decidables-button-background-color-enabled: var(--decidables-button-background-color, var(---color-element-enabled));\n\n margin: 0.25rem;\n }\n\n button {\n width: 100%;\n height: 100%;\n padding: 0.375rem 0.75rem;\n\n font-family: var(---font-family-base);\n font-size: 1.125rem;\n line-height: 1.5;\n color: var(---color-text-inverse);\n\n border: 0;\n border-radius: var(---border-radius);\n outline: none;\n }\n\n button:disabled {\n background-color: var(---decidables-button-background-color-disabled);\n outline: none;\n box-shadow: none;\n }\n\n button:enabled {\n cursor: pointer;\n\n background-color: var(---decidables-button-background-color-enabled);\n outline: none;\n box-shadow: var(---shadow-2);\n }\n\n button:enabled:hover {\n outline: none;\n box-shadow: var(---shadow-4);\n }\n\n button:enabled:active {\n outline: none;\n box-shadow: var(---shadow-8);\n }\n\n :host(.keyboard) button:enabled:focus {\n outline: none;\n box-shadow: var(---shadow-4);\n }\n\n :host(.keyboard) button:enabled:focus:active {\n outline: none;\n box-shadow: var(---shadow-8);\n }\n `,\n ];\n }\n\n render() {\n return html`\n <button ?disabled=${this.disabled}>\n <slot></slot>\n </button>\n `;\n }\n}\n\ncustomElements.define('decidables-button', DecidablesButton);\n","import{nothing as t}from\"../lit-html.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o=o=>o??t;export{o as ifDefined};\n//# sourceMappingURL=if-defined.js.map\n","\nimport {ifDefined} from 'lit/directives/if-defined.js'; /* eslint-disable-line import/extensions */\nimport {html, css, unsafeCSS} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesSlider extends DecidablesElement {\n static get properties() {\n return {\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n\n scale: {\n attribute: 'scale',\n type: Boolean,\n reflect: true,\n },\n\n max: {\n attribute: 'max',\n type: Number,\n reflect: true,\n },\n min: {\n attribute: 'min',\n type: Number,\n reflect: true,\n },\n step: {\n attribute: 'step',\n type: Number,\n reflect: true,\n },\n value: {\n attribute: 'value',\n type: Number,\n reflect: true,\n },\n\n nonlinear: {\n attribute: false,\n type: Boolean,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.disabled = false;\n\n this.scale = false;\n\n this.max = undefined;\n this.min = undefined;\n this.step = undefined;\n this.value = undefined;\n\n this.nonlinear = false;\n\n // Properties\n this.rangeMax = undefined;\n this.rangeMin = undefined;\n this.rangeStep = undefined;\n this.rangeValue = undefined;\n\n // Transform\n this.toRange = undefined;\n this.fromRange = undefined;\n }\n\n nonlinearRange(nonlinear, toRange, fromRange) {\n this.nonlinear = nonlinear;\n\n this.toRange = nonlinear ? toRange : undefined;\n this.fromRange = nonlinear ? fromRange : undefined;\n }\n\n rangeChanged(event) {\n this.value = this.nonlinear ? this.fromRange(event.target.value) : event.target.value;\n this.dispatchEvent(new CustomEvent('change', {\n detail: {\n value: this.value,\n },\n bubbles: true,\n }));\n }\n\n rangeInputted(event) {\n this.value = this.nonlinear ? this.fromRange(event.target.value) : event.target.value;\n }\n\n spinnerInputted(event) {\n this.value = event.target.value;\n }\n\n willUpdate() {\n this.rangeMax = (this.max === undefined)\n ? undefined\n : this.nonlinear\n ? this.toRange(this.max)\n : this.max;\n this.rangeMin = (this.min === undefined)\n ? undefined\n : this.nonlinear\n ? this.toRange(this.min)\n : this.min;\n this.rangeStep = (this.step === undefined)\n ? undefined\n : this.nonlinear\n ? 'any'\n : this.step;\n this.rangeValue = (this.value === undefined)\n ? undefined\n : this.nonlinear\n ? this.toRange(this.value)\n : this.value;\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n ---decidables-slider-background-color: var(--decidables-slider-background-color, var(---color-element-disabled));\n ---decidables-slider-color: var(--decidables-slider-color, var(---color-element-enabled));\n ---decidables-spinner-background-color: var(--decidables-slider-background-color, none);\n\n ---shadow-2-rotate: var(--shadow-2-rotate, ${unsafeCSS(this.cssBoxShadow(2, true, false))});\n ---shadow-4-rotate: var(--shadow-4-rotate, ${unsafeCSS(this.cssBoxShadow(4, true, false))});\n ---shadow-8-rotate: var(--shadow-8-rotate, ${unsafeCSS(this.cssBoxShadow(8, true, false))});\n\n display: flex;\n\n flex-direction: column;\n\n align-items: center;\n justify-content: center;\n }\n\n label {\n margin: 0.25rem 0.25rem 0;\n }\n\n .range {\n position: relative;\n display: flex;\n\n flex-direction: row;\n\n width: 3.5rem;\n height: 4.75rem;\n margin: 0 0.25rem 0.25rem;\n }\n\n decidables-spinner {\n --decidables-spinner-input-width: 3.5rem;\n\n margin: 0 0.25rem 0.25rem;\n\n background: var(---decidables-spinner-background-color);\n }\n\n /* Adapted from http://danielstern.ca/range.css/#/ */\n /* Overall */\n input[type=range] {\n width: 4.75rem;\n height: 3.5rem;\n padding: 0;\n margin: 0;\n\n background-color: unset;\n\n transform: rotate(-90deg);\n transform-origin: 2.375rem 2.375rem;\n\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-appearance: none;\n }\n\n input[type=range]:enabled {\n cursor: ns-resize;\n }\n\n input[type=range]:focus {\n outline: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-ms-tooltip {\n display: none;\n }\n\n /* Track */\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-webkit-slider-runnable-track {\n width: 100%;\n height: 4px;\n\n background: var(---decidables-slider-background-color);\n border: 0;\n border-radius: 2px;\n box-shadow: none;\n }\n\n input[type=range]:focus::-webkit-slider-runnable-track {\n background: var(---decidables-slider-background-color);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-moz-range-track {\n width: 100%;\n height: 4px;\n\n background: var(---decidables-slider-background-color);\n border: 0;\n border-radius: 2px;\n box-shadow: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-ms-track {\n width: 100%;\n height: 4px;\n\n color: transparent;\n\n background: transparent;\n border-color: transparent;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-ms-fill-lower {\n background: #cccccc;\n /* background: var(---decidables-slider-background-color); */\n border: 0;\n border-radius: 2px;\n box-shadow: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-ms-fill-upper {\n background: #cccccc;\n /* background: var(---decidables-slider-background-color); */\n border: 0;\n border-radius: 2px;\n box-shadow: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:focus::-ms-fill-lower {\n background: var(---decidables-slider-background-color);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:focus::-ms-fill-upper {\n background: var(---decidables-slider-background-color);\n }\n\n /* Thumb */\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-webkit-slider-thumb {\n width: 10px;\n height: 20px;\n margin-top: -8px;\n\n border: 0;\n border-radius: 4px;\n\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-appearance: none;\n }\n\n input[type=range]:disabled::-webkit-slider-thumb {\n background: var(---decidables-slider-background-color);\n box-shadow: none;\n }\n\n input[type=range]:enabled::-webkit-slider-thumb {\n background: var(---decidables-slider-color);\n box-shadow: var(---shadow-2-rotate);\n }\n\n input[type=range]:enabled:hover::-webkit-slider-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n input[type=range]:enabled:active::-webkit-slider-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n :host(.keyboard) input[type=range]:enabled:focus::-webkit-slider-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n :host(.keyboard) input[type=range]:focus:active::-webkit-slider-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-moz-range-thumb {\n width: 10px;\n height: 20px;\n\n border: 0;\n border-radius: 4px;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:disabled::-moz-range-thumb {\n background: var(---decidables-slider-background-color);\n box-shadow: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled::-moz-range-thumb {\n background: var(---decidables-slider-color);\n box-shadow: var(---shadow-2-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled:hover::-moz-range-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled:active::-moz-range-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n :host(.keyboard) input[type=range]:enabled:focus::-moz-range-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n :host(.keyboard) input[type=range]:enabled:focus:active::-moz-range-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-ms-thumb {\n width: 10px;\n height: 20px;\n margin-top: 0;\n\n background: #999999;\n /* background: var(---color-element-enabled); */\n border: 0;\n border-radius: 4px;\n box-shadow: var(---shadow-2-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:disabled::-ms-thumb {\n background: var(---decidables-slider-background-color);\n box-shadow: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled::-ms-thumb {\n background: var(---decidables-slider-color);\n box-shadow: var(---shadow-2-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled:hover::-ms-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled:active::-ms-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n :host(.keyboard) input[type=range]:enabled:focus::-ms-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n :host(.keyboard) input[type=range]:enabled:focus:active::-ms-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n datalist {\n position: absolute;\n left: 2rem;\n z-index: -1;\n display: flex;\n\n flex-direction: column;\n\n align-items: flex-start;\n justify-content: space-between;\n\n height: 4.75rem;\n\n font-size: 0.75rem;\n }\n\n option {\n padding: 0;\n\n line-height: 0.8;\n min-block-size: 0;\n }\n\n option::before {\n content: \"– \";\n }\n `,\n ];\n }\n\n render() {\n return html`\n <label for=\"slider\">\n <slot></slot>\n </label>\n <div class=\"range\">\n <input ?disabled=${this.disabled} type=\"range\" id=\"slider\" min=${ifDefined(this.rangeMin)} max=${ifDefined(this.rangeMax)} step=${ifDefined(this.rangeStep)} .value=${this.rangeValue} @change=${this.rangeChanged.bind(this)} @input=${this.rangeInputted.bind(this)}>\n ${this.scale\n ? html`\n <datalist id=\"ticks\">\n <option value=${ifDefined(this.rangeMax)} label=${ifDefined(this.max)}></option>\n <option value=${ifDefined(this.rangeMin)} label=${ifDefined(this.min)}></option>\n </datalist>\n `\n : html``\n }\n </div>\n <decidables-spinner ?disabled=${this.disabled} min=${ifDefined(this.min)} max=${ifDefined(this.max)} step=${ifDefined(this.step)} .value=${this.value} @input=${this.spinnerInputted.bind(this)}></decidables-spinner>\n `;\n }\n}\n\ncustomElements.define('decidables-slider', DecidablesSlider);\n","\nimport {ifDefined} from 'lit/directives/if-defined.js'; /* eslint-disable-line import/extensions */\nimport {html, css} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesSpinner extends DecidablesElement {\n static get properties() {\n return {\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n max: {\n attribute: 'max',\n type: Number,\n reflect: true,\n },\n min: {\n attribute: 'min',\n type: Number,\n reflect: true,\n },\n step: {\n attribute: 'step',\n type: Number,\n reflect: true,\n },\n value: {\n attribute: 'value',\n type: Number,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.disabled = false;\n this.max = undefined;\n this.min = undefined;\n this.step = undefined;\n this.value = undefined;\n }\n\n inputted(event) {\n this.value = event.target.value;\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n ---decidables-spinner-font-size: var(--decidables-spinner-font-size, 1.125rem);\n ---decidables-spinner-input-width: var(--decidables-spinner-input-width, 4rem);\n ---decidables-spinner-prefix: var(--decidables-spinner-prefix, \"\");\n\n ---decidables-spinner-postfix: var(--decidables-spinner-postfix, \"\");\n ---decidables-spinner-postfix-padding: var(--decidables-spinner-postfix-padding, 0);\n\n display: block;\n }\n\n label {\n position: relative;\n display: flex;\n\n flex-direction: column;\n\n align-items: center;\n\n margin: 0;\n\n font-size: 0.75rem;\n }\n\n label::before {\n position: absolute;\n bottom: 1px;\n left: calc(50% - var(---decidables-spinner-input-width) / 2 + 0.25rem);\n\n font-size: var(---decidables-spinner-font-size);\n line-height: normal;\n\n content: var(---decidables-spinner-prefix);\n }\n\n label::after {\n position: absolute;\n right: 0.25rem;\n bottom: 1px;\n\n font-size: var(---decidables-spinner-font-size);\n line-height: normal;\n\n content: var(---decidables-spinner-postfix);\n }\n\n input[type=number] {\n width: var(---decidables-spinner-input-width);\n padding-right: var(---decidables-spinner-postfix-padding);\n\n font-family: var(---font-family-base);\n font-size: var(---decidables-spinner-font-size);\n color: inherit;\n text-align: right;\n\n background: none;\n border: 0;\n border-radius: 0;\n outline: none;\n box-shadow: var(---shadow-2);\n\n -webkit-appearance: none; /* stylelint-disable-line property-no-vendor-prefix */\n }\n\n input[type=number]:hover {\n box-shadow: var(---shadow-4);\n }\n\n input[type=number]:focus,\n input[type=number]:active {\n box-shadow: var(---shadow-8);\n }\n\n input[type=number]:disabled {\n color: var(---color-text);\n\n border: 0;\n box-shadow: none;\n\n /* HACK: Use correct text color in Safari */\n -webkit-opacity: 1;\n /* HACK: Hide spinners in disabled input for Firefox and Safari */\n -moz-appearance: textfield; /* stylelint-disable-line property-no-vendor-prefix */\n /* HACK: Use correct text color in Safari */\n -webkit-text-fill-color: var(---color-text);\n }\n\n /* HACK: Hide spinners in disabled input for Firefox and Safari */\n input[type=number]:disabled::-webkit-outer-spin-button,\n input[type=number]:disabled::-webkit-inner-spin-button {\n margin: 0;\n -webkit-appearance: none; /* stylelint-disable-line property-no-vendor-prefix */\n }\n `,\n ];\n }\n\n render() {\n return html`\n <label>\n <slot></slot>\n <input ?disabled=${this.disabled} type=\"number\" min=${ifDefined(this.min)} max=${ifDefined(this.max)} step=${ifDefined(this.step)} .value=${this.value} @input=${this.inputted.bind(this)}>\n </label>\n `;\n }\n}\n\ncustomElements.define('decidables-spinner', DecidablesSpinner);\n","\nimport {html, css} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesSwitch extends DecidablesElement {\n static get properties() {\n return {\n checked: {\n attribute: 'checked',\n type: Boolean,\n reflect: true,\n },\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.checked = false;\n this.disabled = false;\n }\n\n changed(event) {\n this.checked = event.target.checked;\n this.dispatchEvent(new CustomEvent('change', {\n detail: {\n checked: this.checked,\n },\n bubbles: true,\n }));\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: flex;\n\n flex-direction: column;\n\n align-items: center;\n justify-content: center;\n }\n\n /* Adapted from https://codepen.io/guuslieben/pen/YyPRVP */\n input[type=checkbox] {\n /* visuallyhidden: https://github.com/h5bp/html5-boilerplate/blob/master/dist/doc/css.md */\n position: absolute;\n\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n\n white-space: nowrap;\n\n border: 0;\n clip-path: inset(100%); /* May cause a performance issue: https://github.com/h5bp/html5-boilerplate/issues/2021 */\n }\n\n input[type=checkbox] + label {\n order: 1;\n\n margin: 0 0.25rem 0.25rem;\n\n font-weight: 400;\n }\n\n input[type=checkbox] + label + label {\n position: relative;\n\n min-width: 24px;\n padding: 0 0 36px;\n margin: 0.25rem 0.25rem 0;\n\n font-weight: 400;\n\n outline: none;\n }\n\n input[type=checkbox] + label + label::before,\n input[type=checkbox] + label + label::after {\n position: absolute;\n\n left: 50%;\n\n margin: 0;\n\n content: \"\";\n\n outline: 0;\n\n transition: all var(---transition-duration) ease;\n transform: translate(-50%, 0);\n }\n\n input[type=checkbox] + label + label::before {\n bottom: 1px;\n\n width: 8px;\n height: 34px;\n\n background-color: var(---color-element-disabled);\n border-radius: 4px;\n }\n\n input[type=checkbox] + label + label::after {\n bottom: 0;\n\n width: 18px;\n height: 18px;\n\n background-color: var(---color-element-enabled);\n border-radius: 50%;\n box-shadow: var(---shadow-2);\n }\n\n input[type=checkbox]:checked + label + label::after {\n transform: translate(-50%, -100%);\n }\n\n input[type=checkbox]:disabled + label + label::after {\n background-color: var(---color-element-disabled);\n box-shadow: none;\n }\n\n input[type=checkbox]:enabled + label,\n input[type=checkbox]:enabled + label + label {\n cursor: pointer;\n }\n\n input[type=checkbox]:enabled + label:hover + label::after,\n input[type=checkbox]:enabled + label + label:hover::after {\n box-shadow: var(---shadow-4);\n }\n\n input[type=checkbox]:enabled + label:active + label::after,\n input[type=checkbox]:enabled + label + label:active::after {\n box-shadow: var(---shadow-8);\n }\n\n /* stylelint-disable-next-line selector-max-compound-selectors */\n :host(.keyboard) input[type=checkbox]:enabled:focus + label + label::after {\n box-shadow: var(---shadow-4);\n }\n\n /* stylelint-disable selector-max-compound-selectors */\n :host(.keyboard) input[type=checkbox]:enabled:focus + label + label:active::after,\n :host(.keyboard) input[type=checkbox]:enabled:focus:active + label + label::after {\n box-shadow: var(---shadow-8);\n }\n /* stylelint-enable selector-max-compound-selectors */\n `,\n ];\n }\n\n render() {\n return html`\n <input type=\"checkbox\" id=\"switch\" ?checked=${this.checked} ?disabled=${this.disabled} @change=${this.changed.bind(this)}>\n <label for=\"switch\">\n <slot name=\"off-label\"></slot>\n </label>\n <label for=\"switch\">\n <slot></slot>\n </label>\n `;\n }\n}\n\ncustomElements.define('decidables-switch', DecidablesSwitch);\n","\nimport {html, css} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesToggle extends DecidablesElement {\n static get properties() {\n return {\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.disabled = false;\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n fieldset {\n display: flex;\n\n flex-direction: column;\n\n align-items: stretch;\n justify-content: center;\n\n margin: 0.25rem;\n\n border: 0;\n }\n\n legend {\n text-align: center;\n }\n `,\n ];\n }\n\n render() {\n return html`\n <fieldset ?disabled=${this.disabled}>\n <legend><slot name=\"label\"></slot></legend>\n <slot></slot>\n </fieldset>\n `;\n }\n}\n\ncustomElements.define('decidables-toggle', DecidablesToggle);\n","\nexport default function DecidablesMixinResizeable(superClass) {\n return class extends superClass {\n static get properties() {\n return {\n width: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n height: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n rem: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n this.width = NaN;\n this.height = NaN;\n this.rem = NaN;\n }\n\n getDimensions() {\n this.width = parseFloat(this.getComputedStyleValue('width'), 10);\n this.height = parseFloat(this.getComputedStyleValue('height'), 10);\n this.rem = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('font-size'), 10);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.resizeObserver = new ResizeObserver(this.getDimensions.bind(this));\n this.resizeObserver.observe(this);\n }\n\n disconnectedCallback() {\n this.resizeObserver.unobserve(this);\n\n super.disconnectedCallback();\n }\n };\n}\n","\nimport {html, css} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesToggleOption extends DecidablesElement {\n static get properties() {\n return {\n checked: {\n attribute: 'checked',\n type: Boolean,\n reflect: true,\n },\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n name: {\n attribute: 'name',\n type: String,\n reflect: true,\n },\n value: {\n attribute: 'value',\n type: String,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.checked = false;\n this.disabled = false;\n this.name = undefined;\n this.value = undefined;\n }\n\n changed(event) {\n this.checked = event.target.checked;\n this.dispatchEvent(new CustomEvent('change', {\n detail: {\n checked: this.checked,\n value: this.value,\n },\n bubbles: true,\n }));\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: flex;\n }\n\n input[type=radio] {\n /* visuallyhidden: https://github.com/h5bp/html5-boilerplate/blob/master/dist/doc/css.md */\n position: absolute;\n\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n\n white-space: nowrap;\n\n border: 0;\n clip-path: inset(100%); /* May cause a performance issue: https://github.com/h5bp/html5-boilerplate/issues/2021 */\n }\n\n input[type=radio] + label {\n width: 100%;\n padding: 0.375rem 0.75rem;\n\n font-family: var(---font-family-base);\n font-size: 1.125rem;\n line-height: 1.5;\n color: var(---color-text-inverse);\n text-align: center;\n\n cursor: pointer;\n\n background-color: var(---color-element-enabled);\n border: 0;\n border-radius: 0;\n outline: none;\n\n box-shadow: var(---shadow-2);\n }\n\n input[type=radio]:checked + label {\n background-color: var(---color-element-selected);\n outline: none;\n box-shadow: var(---shadow-2);\n }\n\n input[type=radio] + label:hover {\n z-index: 1;\n\n outline: none;\n box-shadow: var(---shadow-4);\n }\n\n input[type=radio] + label:active {\n z-index: 2;\n\n outline: none;\n box-shadow: var(---shadow-8);\n }\n\n :host(:first-of-type) input[type=radio] + label {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n }\n\n :host(:last-of-type) input[type=radio] + label {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n }\n\n :host(.keyboard) input[type=radio]:focus + label {\n z-index: 1;\n\n outline: none;\n box-shadow: var(---shadow-4);\n }\n\n :host(.keyboard) input[type=radio]:focus:checked + label {\n z-index: 1;\n\n background-color: var(---color-element-selected);\n outline: none;\n box-shadow: var(---shadow-4);\n }\n\n :host(.keyboard) input[type=radio]:focus + label:active {\n z-index: 2;\n\n outline: none;\n box-shadow: var(---shadow-8);\n }\n `,\n ];\n }\n\n render() {\n return html`\n <input type=\"radio\" id=\"toggle-option\" name=${this.name} value=${this.value} .checked=${this.checked} @change=${this.changed.bind(this)}>\n <label for=\"toggle-option\">\n <slot></slot>\n </label>\n `;\n }\n}\n\ncustomElements.define('decidables-toggle-option', DecidablesToggleOption);\n","\nimport {\n css,\n unsafeCSS,\n} from 'lit';\nimport * as d3 from 'd3';\n\nimport {DecidablesElement} from '@decidables/decidables-elements';\n\nimport {colors} from './colors.yml';\n\n/*\n AccumulableElement Base Class - Not intended for instantiation!\n*/\nexport default class AccumulableElement extends DecidablesElement {\n static get properties() {\n return {\n interactive: {\n attribute: 'interactive',\n type: Boolean,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n this.interactive = false;\n }\n\n static get colors() {\n return colors;\n }\n\n static get lights() {\n return Object.keys(AccumulableElement.colors).reduce((acc, cur) => {\n acc[cur] = d3.interpolateRgb(AccumulableElement.colors[cur], '#ffffff')(0.5);\n return acc;\n }, {});\n }\n\n static get darks() {\n return Object.keys(AccumulableElement.colors).reduce((acc, cur) => {\n acc[cur] = d3.interpolateRgb(AccumulableElement.colors[cur], '#000000')(0.5);\n return acc;\n }, {});\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n /* Declare base colors */\n ${\n unsafeCSS(Object.keys(AccumulableElement.colors).map((color) => {\n return `---color-${color}: var(--color-${color}, ${this.colors[color]});`;\n }).join('\\n'))\n }\n\n /* Declare light colors */\n ${\n unsafeCSS(Object.keys(AccumulableElement.colors).map((color) => {\n return `---color-${color}-light: var(--color-${color}-light, ${this.lights[color]});`;\n }).join('\\n'))\n }\n\n /* Declare dark colors */\n ${\n unsafeCSS(Object.keys(AccumulableElement.colors).map((color) => {\n return `---color-${color}-dark: var(--color-${color}-dark, ${this.darks[color]});`;\n }).join('\\n'))\n }\n }\n `,\n ];\n }\n}\n","\nimport {html, css} from 'lit';\n\nimport '@decidables/decidables-elements/button';\nimport '@decidables/decidables-elements/slider';\nimport '@decidables/decidables-elements/switch';\nimport '@decidables/decidables-elements/toggle';\nimport '@decidables/decidables-elements/toggle-option';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n AccumulableControl element\n <accumulable-control>\n\n Attributes:\n\n*/\nexport default class AccumulableControl extends AccumulableElement {\n static get properties() {\n return {\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n resample: {\n attribute: 'resample',\n type: Boolean,\n reflect: true,\n },\n\n duration: {\n attribute: 'duration',\n type: Number,\n reflect: true,\n },\n coherence: {\n attribute: 'coherence',\n type: Number,\n reflect: true,\n },\n color: {\n attribute: 'color',\n type: String,\n reflect: true,\n },\n\n run: {\n attribute: 'run',\n type: Boolean,\n reflect: true,\n },\n pause: {\n attribute: 'pause',\n type: Boolean,\n reflect: true,\n },\n reset: {\n attribute: 'reset',\n type: Boolean,\n reflect: true,\n },\n\n state: {\n attribute: false,\n type: String,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.trials = undefined;\n this.resample = false;\n\n this.duration = undefined;\n this.coherence = undefined;\n this.colors = ['none', 'measure', 'outcome', 'all'];\n this.color = undefined;\n\n this.run = false;\n this.pause = false;\n this.reset = false;\n\n // Properties\n this.states = ['resetted', 'running', 'paused', 'ended'];\n this.state = 'resetted';\n }\n\n setTrials(e) {\n this.trials = e.target.value;\n this.dispatchEvent(new CustomEvent('accumulable-control-trials', {\n detail: {\n trials: this.trials,\n },\n bubbles: true,\n }));\n }\n\n doResample() {\n this.dispatchEvent(new CustomEvent('accumulable-control-resample', {\n detail: {},\n bubbles: true,\n }));\n }\n\n setDuration(e) {\n this.duration = e.target.value;\n this.dispatchEvent(new CustomEvent('accumulable-control-duration', {\n detail: {\n duration: this.duration,\n },\n bubbles: true,\n }));\n }\n\n setCoherence(e) {\n this.coherence = e.target.value;\n this.dispatchEvent(new CustomEvent('accumulable-control-coherence', {\n detail: {\n coherence: this.coherence,\n },\n bubbles: true,\n }));\n }\n\n chooseColor(e) {\n this.color = e.target.value;\n this.dispatchEvent(new CustomEvent('accumulable-control-color', {\n detail: {\n color: this.color,\n },\n bubbles: true,\n }));\n }\n\n doRun() {\n this.state = 'running';\n this.dispatchEvent(new CustomEvent('accumulable-control-run', {\n detail: {},\n bubbles: true,\n }));\n }\n\n doPause() {\n this.state = 'paused';\n this.dispatchEvent(new CustomEvent('accumulable-control-pause', {\n detail: {},\n bubbles: true,\n }));\n }\n\n doReset() {\n this.state = 'resetted';\n this.dispatchEvent(new CustomEvent('accumulable-control-reset', {\n detail: {},\n bubbles: true,\n }));\n }\n\n complete() {\n this.state = 'ended';\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n }\n\n .holder {\n display: flex;\n\n flex-direction: row;\n\n align-items: stretch;\n justify-content: center;\n }\n\n .buttons {\n display: flex;\n\n flex-direction: column;\n\n align-items: stretch;\n justify-content: center;\n }\n `,\n ];\n }\n\n render() {\n return html`\n <div class=\"holder\">\n ${this.trials != null\n ? html`<decidables-slider class=\"trials\" min=\"1\" max=\"100\" step=\"1\" .value=${this.trials} @change=${this.setTrials.bind(this)} @input=${this.setTrials.bind(this)}>Trials</decidables-slider>`\n : html``}\n ${this.resample\n ? html`\n <div class=\"buttons\">\n ${this.resample\n ? html`<decidables-button name=\"resample\" @click=${this.doResample.bind(this)}>Resample</decidables-button>`\n : html``}\n </div>\n `\n : html``}\n ${this.duration != null\n ? html`<decidables-slider class=\"duration\" min=\"10\" max=\"2000\" step=\"10\" .value=${this.duration} @change=${this.setDuration.bind(this)} @input=${this.setDuration.bind(this)}>Duration</decidables-slider>`\n : html``}\n ${this.coherence != null\n ? html`<decidables-slider class=\"coherence\" min=\"0\" max=\"1\" step=\".01\" .value=${this.coherence} @change=${this.setCoherence.bind(this)} @input=${this.setCoherence.bind(this)}>Coherence</decidables-slider>`\n : html``}\n ${this.color != null\n ? html`\n <decidables-toggle class=\"color\" @change=${this.chooseColor.bind(this)}>\n <span slot=\"label\">Emphasis</span>\n <decidables-toggle-option name=\"toggle\" value=\"none\" ?checked=${this.color === 'none'}>None</decidables-toggle-option>\n <decidables-toggle-option name=\"toggle\" value=\"measure\" ?checked=${this.color === 'measure'}>Measure</decidables-toggle-option>\n <decidables-toggle-option name=\"toggle\" value=\"outcome\" ?checked=${this.color === 'outcome'}>Outcome</decidables-toggle-option>\n <decidables-toggle-option name=\"toggle\" value=\"all\" ?checked=${this.color === 'all'}>All</decidables-toggle-option>\n </decidables-toggle>\n `\n : html``}\n ${this.run || this.pause || this.reset\n ? html`\n <div class=\"buttons\">\n ${this.run\n ? html`<decidables-button name=\"run\" ?disabled=${this.state === 'running' || this.state === 'ended'} @click=${this.doRun.bind(this)}>Run</decidables-button>`\n : html``}\n ${this.pause\n ? html`<decidables-button name=\"pause\" ?disabled=${this.state !== 'running'} @click=${this.doPause.bind(this)}>Pause</decidables-button>`\n : html``}\n ${this.reset\n ? html`<decidables-button name=\"reset\" ?disabled=${this.state === 'resetted'} @click=${this.doReset.bind(this)}>Reset</decidables-button>`\n : html``}\n </div>\n `\n : html``}\n </div>`;\n }\n}\n\ncustomElements.define('accumulable-control', AccumulableControl);\n","\n/*\n DDMMath Static Class - Not intended for instantiation!\n\n Model parameters:\n a = boundary separation [0, Infinity)\n z = starting point as a proportion of a (0, 1)\n v = drift rate (per second) (-Infinity, Infinity)\n t0 = non-decision time (in milliseconds) (0, Infinity)\n s = within-trial variability in drift rate (s^2 = infinitesimal variance) [0, Infinity)\n\n zPrime = starting point on a 0-to-a scale (typically used in published equations) [0, Infinity)\n\n Behavioral variables:\n pE = proportion of error trials\n pC = proportion of correct trials\n m = mean of overall RTs (in milliseconds)\n mE = mean of error RTs (in milliseconds)\n mC = mean correct RTs (in milliseconds)\n sd = standard deviation of overall RTs (in milliseconds)\n sdE = standard deviation of error RTs (in milliseconds)\n sdC = standard deviation of correct RTs (in milliseconds)\n\n Equations:\n Probability of correct and error responses (Alexandrowicz, 2020)\n Mean of overall, error, and correct RTs (Grasman et al., 2009)\n Standard deviation of overall, error, and correct RTs (Grasman et al., 2009)\n Density of error and correct RT distributions (Alexandrowicz, 2020)\n EZ-diffusion model (Wagenmakers et al., 2007)\n*/\nexport default class DDMMath {\n static s = {\n DEFAULT: 1,\n };\n\n static a = {\n DEFAULT: 1.2,\n MIN: 0.01,\n MAX: 2.0,\n STEP: 0.01,\n JUMP: 0.1,\n };\n\n static z = {\n DEFAULT: 0.55,\n MIN: 0.01,\n MAX: 0.99,\n STEP: 0.01,\n JUMP: 0.1,\n };\n\n static v = {\n DEFAULT: 1.5,\n MIN: 0.01,\n MAX: 5.0,\n STEP: 0.01,\n JUMP: 0.1,\n };\n\n static t0 = {\n DEFAULT: 150,\n MIN: 0,\n MAX: 500,\n STEP: 1,\n JUMP: 10,\n };\n\n // Calculate a bunch of statistics for an array of trials\n static trials2stats(trials) {\n const stats = {};\n\n // First-order sums\n const sums = trials.reduce(\n (accumulator, trial) => {\n switch (trial.outcome) {\n case 'correct':\n accumulator.correctCount += 1;\n accumulator.correctRTSum += trial.rt;\n break;\n case 'error':\n accumulator.errorCount += 1;\n accumulator.errorRTSum += trial.rt;\n break;\n case 'nr':\n accumulator.nrCount += 1;\n break;\n default:\n // No-op\n }\n return accumulator;\n },\n {\n correctCount: 0,\n errorCount: 0,\n nrCount: 0,\n\n correctRTSum: 0,\n errorRTSum: 0,\n },\n );\n\n // First-order stats\n stats.correctCount = sums.correctCount;\n stats.errorCount = sums.errorCount;\n stats.nrCount = sums.nrCount;\n stats.accuracy = sums.correctCount / (sums.correctCount + sums.errorCount + sums.nrCount);\n\n stats.correctMeanRT = sums.correctRTSum / sums.correctCount;\n stats.errorMeanRT = sums.errorRTSum / sums.errorCount;\n stats.meanRT = (sums.correctRTSum + sums.errorRTSum) / (sums.correctCount + sums.errorCount);\n\n // Second-order sums\n const sums2 = trials.reduce(\n (accumulator, trial) => {\n switch (trial.outcome) {\n case 'correct':\n accumulator.ss += (trial.rt - stats.meanRT) ** 2;\n accumulator.correctSS += (trial.rt - stats.correctMeanRT) ** 2;\n break;\n case 'error':\n accumulator.ss += (trial.rt - stats.meanRT) ** 2;\n accumulator.errorSS += (trial.rt - stats.errorMeanRT) ** 2;\n break;\n default:\n // No-op\n }\n return accumulator;\n },\n {\n ss: 0,\n correctSS: 0,\n errorSS: 0,\n },\n );\n\n // Second-order stats\n stats.correctSDRT = (stats.correctCount > 1)\n ? Math.sqrt(sums2.correctSS / (stats.correctCount - 1))\n : NaN;\n stats.errorSDRT = (stats.errorCount > 1)\n ? Math.sqrt(sums2.errorSS / (stats.errorCount - 1))\n : NaN;\n stats.sdRT = (stats.correctCount + stats.errorCount > 1)\n ? Math.sqrt(sums2.ss / (stats.correctCount + stats.errorCount - 1))\n : NaN;\n\n return stats;\n }\n\n // Probability of an Error Response\n static azv2pE(a, z, v, s = DDMMath.s.DEFAULT) {\n const zPrime = a * z;\n\n const A = Math.exp((-2 * v * a) / s ** 2);\n const Z = Math.exp((-2 * v * zPrime) / s ** 2);\n\n return (A - Z) / (A - 1);\n }\n\n // Probability of a Correct Response\n static azv2pC(a, z, v, s = DDMMath.s.DEFAULT) {\n return DDMMath.azv2pE(a, 1 - z, -v, s);\n }\n\n // Mean Overall RT\n // Equation 5 (Grasman et al., 2009)\n static azvt02m(a, z, v, t0, s = DDMMath.s.DEFAULT) {\n const zPrime = a * z;\n const A = Math.exp((-2 * v * a) / s ** 2) - 1;\n const Z = Math.exp((-2 * v * zPrime) / s ** 2) - 1;\n\n const mean = -(zPrime / v) + (a / v) * (Z / A);\n return t0 + mean * 1000;\n }\n\n // SD Overall RT\n // Equation 6 (Grasman et al., 2009)\n static azv2sd(a, z, v, s = DDMMath.s.DEFAULT) {\n const zPrime = a * z;\n const A = Math.exp((-2 * v * a) / s ** 2) - 1;\n const Z = Math.exp((-2 * v * zPrime) / s ** 2) - 1;\n\n const variance = (\n (\n (-v * a ** 2 * (Z + 4) * Z) / A ** 2\n ) + (\n ((-3 * v * a ** 2 + 4 * v * zPrime * a + s ** 2 * a) * Z + 4 * v * zPrime * a) / A\n ) - (\n s ** 2 * zPrime\n )\n ) / v ** 3;\n\n return Math.sqrt(variance) * 1000;\n }\n\n // Mean Error RT\n // Equation 13 (Grasman et al., 2009)\n static azvt02mE(a, z, v, t0, s = DDMMath.s.DEFAULT) {\n function phi(x, y) {\n return Math.exp((2 * v * y) / (s ** 2)) - Math.exp((2 * v * x) / (s ** 2));\n }\n const zPrime = a * z;\n\n const mean = (zPrime * (phi(zPrime - a, a) + phi(0, zPrime)) + 2 * a * phi(zPrime, 0))\n / (v * phi(zPrime, a) * phi(-a, 0));\n return t0 + mean * 1000;\n }\n\n // SD Error RT\n // Equation 14 (Grasman et al., 2009)\n static azv2sdE(a, z, v, s = DDMMath.s.DEFAULT) {\n function phi(x, y) {\n return Math.exp((2 * v * y) / (s ** 2)) - Math.exp((2 * v * x) / (s ** 2));\n }\n const zPrime = a * z;\n\n const variance = (\n (\n -2 * a * phi(0, zPrime)\n * ((2 * v * a * phi(zPrime, 2 * a)) + (s ** 2 * phi(0, a) * phi(zPrime, a)))\n * Math.exp((2 * v * a) / s ** 2)\n ) / (\n v ** 3 * phi(0, a) ** 2 * phi(zPrime, a) ** 2\n )\n ) + (\n (\n 4 * v * zPrime * (2 * a - zPrime) * Math.exp((2 * v * (zPrime + a)) / s ** 2)\n + zPrime * s ** 2 * phi(2 * zPrime, 2 * a)\n ) / (\n v ** 3 * phi(zPrime, a) ** 2\n )\n );\n\n return Math.sqrt(variance) * 1000;\n }\n\n // Mean Correct RT\n static azvt02mC(a, z, v, t0, s = DDMMath.s.DEFAULT) {\n return DDMMath.azvt02mE(a, 1 - z, -v, t0, s);\n }\n\n // SD Correct RT\n static azv2sdC(a, z, v, s = DDMMath.s.DEFAULT) {\n return DDMMath.azv2sdE(a, 1 - z, -v, s);\n }\n\n // Density of Error RT\n static tazv2gE(t, a, z, v, s = DDMMath.s.DEFAULT) {\n if (!t) return 0;\n\n const zPrime = a * z;\n const base = ((Math.PI * s ** 2) / a ** 2) * Math.exp((-zPrime * v) / s ** 2);\n\n let k = 0;\n let term = 0;\n let sum = 0;\n do {\n k += 1;\n\n term = k\n * Math.sin((Math.PI * zPrime * k) / a)\n * Math.exp(-0.5 * ((v ** 2 / s ** 2) + ((Math.PI ** 2 * k ** 2 * s ** 2) / a ** 2)) * t);\n\n sum += term;\n } while (k < 200); // ?? HACK\n\n return base * sum;\n }\n\n // Density of Correct RT\n static tazv2gC(t, a, z, v, s = DDMMath.s.DEFAULT) {\n return DDMMath.tazv2gE(t, a, 1 - z, -v, s);\n }\n\n // Adapted from https://raoul.socsci.uva.nl/EZ2/EZ2_new.html\n // EZ-function for starting values\n // input: obj - Object with properties\n // pC - Proportion correct\n // sd - sample standard deviation of the RT's in ms\n // m - sample mean of the RT's in ms\n // s - diffusion standard deviation\n // returns: Object with properties v, a, and t0, containing EZ-estimates of these parameters\n static data2ez({\n accuracy: pC,\n sdRT: sd,\n meanRT: m,\n s,\n }) {\n function sign(r) {\n return ((r > 0) ? 1 : ((r === 0) ? 0 : -1));\n }\n\n function logit(p) {\n return Math.log(p / (1 - p));\n }\n\n const vrt = (sd / 1000) ** 2;\n const mrt = m / 1000;\n\n const s2 = s ** 2;\n const l = logit(pC);\n const x = (l * (l * pC ** 2 - l * pC + pC - 0.5)) / vrt;\n const v = sign(pC - 0.5) * s * x ** (1 / 4);\n const a = (s2 * logit(pC)) / v;\n const y = (-v * a) / s2;\n const mdt = ((a / (2 * v)) * (1 - Math.exp(y))) / (1 + Math.exp(y));\n const t0 = (mrt ? mrt - mdt : null); // compute Ter only if MRT was provided\n\n const t0Prime = t0 * 1000;\n return {\n v,\n a,\n t0: t0Prime,\n s,\n };\n }\n\n static data2ez2() {\n throw new Error('data2ez2 is not implemented!');\n }\n}\n","\nimport {html, css} from 'lit';\n\nimport DDMMath from '@decidables/accumulable-math';\nimport '@decidables/decidables-elements/button';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n AccumulableResponse element\n <accumulable-response>\n\n Attributes:\n\n*/\nexport default class AccumulableResponse extends AccumulableElement {\n static get properties() {\n return {\n feedback: {\n attribute: 'feedback',\n type: Boolean,\n reflect: true,\n },\n trial: {\n attribute: 'trial',\n type: Boolean,\n reflect: true,\n },\n payoff: {\n attribute: 'payoff',\n type: String,\n reflect: true,\n },\n correctPayoff: {\n attribute: 'correct-payoff',\n type: Number,\n reflect: true,\n },\n errorPayoff: {\n attribute: 'error-payoff',\n type: Number,\n reflect: true,\n },\n nrPayoff: {\n attribute: 'no-response-payoff',\n type: Number,\n reflect: true,\n },\n\n state: {\n attribute: false,\n type: String,\n reflect: false,\n },\n trialCount: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n trialTotal: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.feedback = false; // Display feedback?\n this.trial = false; // Show trial count?\n this.payoffs = ['none', 'trial', 'total']; // Possible types of 'payoff' info\n this.payoff = 'none'; // What payoff info to display\n\n this.correctPayoff = 0; // Correct payoff\n this.errorPayoff = 0; // Error payoff\n this.nrPayoff = 0; // No Response payoff\n\n // Properties\n this.states = ['off', 'waiting', 'feedback']; // Possible states\n this.state = 'off'; // Current state\n\n this.trialCount = 0; // Current trial\n this.trialTotal = 0; // Total trials\n\n // Private\n this.signals = ['left', 'right']; // Possible values of 'signal'\n this.signal = undefined; // Signal for current trial\n this.responses = ['left', 'right']; // Possible values of 'response'\n this.response = undefined; // Response for current trial\n this.outcomes = ['correct', 'error', 'nr']; // Possible values of 'outcome'\n this.outcome = undefined; // Outcome for current trial\n this.startTime = undefined; // Start time of current trial\n this.rt = undefined; // RT for current trial\n\n this.data = {};\n\n this.trials = []; // Record of trials in block\n this.alignState();\n }\n\n get trialPayoff() {\n switch (this.outcome) {\n case 'correct':\n return this.correctPayoff;\n case 'error':\n return this.errorPayoff;\n case 'nr':\n return this.nrPayoff;\n default:\n return undefined;\n }\n }\n\n get totalPayoff() {\n return ((this.data.correctCount * this.correctPayoff)\n + (this.data.errorCount * this.errorPayoff)\n + (this.data.nrCount * this.nrPayoff));\n }\n\n alignState() {\n this.data = DDMMath.trials2stats(this.trials);\n }\n\n start(signal, trial) {\n this.startTime = Date.now();\n this.trialCount = trial;\n this.state = 'waiting';\n this.signal = signal;\n this.response = undefined;\n this.outcome = undefined;\n this.rt = undefined;\n }\n\n stop() {\n this.state = 'feedback';\n if (this.response === undefined) {\n this.outcome = 'nr';\n this.rt = undefined;\n\n this.trials.push({\n trial: this.trialCount,\n rt: this.rt,\n signal: this.signal,\n response: this.response,\n outcome: this.outcome,\n payoff: this.trialPayoff,\n });\n this.alignState();\n }\n }\n\n left() {\n this.responded('left');\n }\n\n right() {\n this.responded('right');\n }\n\n responded(response) {\n this.rt = Date.now() - this.startTime;\n this.state = 'feedback';\n this.response = response;\n if (this.signal === this.response) {\n this.outcome = 'correct';\n } else if (this.signal !== this.response) {\n this.outcome = 'error';\n }\n this.trials.push({\n trial: this.trialCount,\n rt: this.rt,\n signal: this.signal,\n response: this.response,\n outcome: this.outcome,\n payoff: this.trialPayoff,\n });\n this.alignState();\n\n this.dispatchEvent(new CustomEvent('accumulable-response', {\n detail: {\n trial: this.trialCount,\n rt: this.rt,\n signal: this.signal,\n response: this.response,\n outcome: this.outcome,\n payoff: this.trialPayoff,\n\n data: this.data,\n\n totalPayoff: this.totalPayoff,\n },\n bubbles: true,\n }));\n }\n\n reset() {\n this.state = 'off';\n this.trialCount = 0;\n this.rt = undefined;\n this.signal = undefined;\n this.response = undefined;\n this.outcome = undefined;\n\n this.trials = [];\n this.alignState();\n }\n\n keydown(event) {\n if (this.state === 'waiting') {\n if (event.key === 'ArrowLeft') {\n this.responded('left');\n event.preventDefault();\n } else if (event.key === 'ArrowRight') {\n this.responded('right');\n event.preventDefault();\n }\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n window.addEventListener('keydown', this.keydown.bind(this));\n }\n\n disconnectedCallback() {\n window.removeEventListener('keydown', this.keydown.bind(this));\n\n super.disconnectedCallback();\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n }\n\n /* Overall container */\n .holder {\n display: flex;\n\n flex-direction: column;\n }\n\n /* Response buttons */\n .responses {\n display: flex;\n\n flex-direction: row;\n\n align-items: stretch;\n justify-content: center;\n }\n\n .response {\n flex: 1 0 50%;\n }\n\n .waiting[disabled] {\n --decidables-button-background-color: var(---color-element-enabled);\n }\n\n .selected[disabled][name=\"left\"] {\n --decidables-button-background-color: var(---color-left);\n }\n\n .selected[disabled][name=\"right\"] {\n --decidables-button-background-color: var(---color-right);\n }\n\n /* Feedback messages */\n .feedbacks {\n display: flex;\n\n flex-direction: column;\n\n align-items: center;\n\n margin: 0.25rem;\n }\n\n /* Trial feedback */\n .trial {\n text-align: center;\n }\n\n .trial .label {\n font-weight: 600;\n }\n\n /* Outcome feedback */\n .feedback {\n display: flex;\n\n flex-direction: column;\n\n align-items: center;\n justify-content: center;\n\n width: 6rem;\n height: 3.5rem;\n padding: 0.375rem 0.75rem;\n margin: 0.25rem;\n\n text-align: center;\n\n background-color: var(---color-element-background);\n border: 1px solid var(---color-element-border);\n }\n\n :host([payoff=\"trial\"]) .feedback,\n :host([payoff=\"total\"]) .feedback {\n height: 5rem;\n }\n\n .feedback.correct {\n background-color: var(---color-correct-light);\n }\n\n .feedback.error {\n background-color: var(---color-error-light);\n }\n\n .feedback.nr {\n background-color: var(---color-nr-light);\n }\n\n .feedback .outcome {\n font-weight: 600;\n line-height: 1.15;\n }\n\n /* Payoff feedback */\n .total {\n text-align: center;\n }\n\n .total .label {\n font-weight: 600;\n }\n `,\n ];\n }\n\n render() {\n const payoffFormatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n const payoffFormat = (number) => {\n return payoffFormatter.formatToParts(number).map(({type, value}) => {\n if (type === 'minusSign') {\n return '−';\n }\n return value;\n }).reduce((string, part) => { return string + part; });\n };\n\n return html`\n <div class=\"holder\">\n <div class=\"responses\">\n <decidables-button name=\"left\" class=${`response ${(this.state === 'feedback' && this.response === 'left') ? 'selected' : ((this.state === 'waiting') ? 'waiting' : '')}`} ?disabled=${this.state !== 'waiting' || this.interactive !== true} @click=${this.left.bind(this)}>Left</decidables-button>\n <decidables-button name=\"right\" class=${`response ${(this.state === 'feedback' && this.response === 'right') ? 'selected' : ((this.state === 'waiting') ? 'waiting' : '')}`} ?disabled=${this.state !== 'waiting' || this.interactive !== true} @click=${this.right.bind(this)}>Right</decidables-button>\n </div>\n ${(this.trial || this.feedback || this.payoff === 'total')\n ? html`\n <div class=\"feedbacks\">\n ${(this.trial)\n ? html`\n <div class=\"trial\">\n <span class=\"label\">Trial: </span><span class=\"count\">${this.trialCount}</span><span class=\"of\"> of </span><span class=\"total\">${this.trialTotal}</span>\n </div>`\n : html``}\n ${(this.feedback)\n ? html`\n <div class=${`feedback ${((this.state === 'feedback') && this.feedback)\n ? this.outcome\n : ''}`}>\n ${((this.state === 'feedback') && this.feedback)\n ? (this.outcome === 'correct')\n ? html`<span class=\"outcome\">Correct</span>`\n : (this.outcome === 'error')\n ? html`<span class=\"outcome\">Error</span>`\n : html`<span class=\"outcome\">No<br>Response</span>`\n : ''}\n ${((this.state === 'feedback') && (this.payoff === 'trial' || this.payoff === 'total'))\n ? html`<span class=\"payoff\">${payoffFormat(this.trialPayoff)}</span>`\n : html``}\n </div>`\n : html``}\n ${(this.payoff === 'total')\n ? html`\n <div class=\"total\">\n <span class=\"label\">Total: </span><span class=\"value\">${payoffFormat(this.totalPayoff)}</span>\n </div>`\n : html``}\n </div>`\n : html``}\n </div>`;\n }\n}\n\ncustomElements.define('accumulable-response', AccumulableResponse);\n","\nimport {html, css} from 'lit';\n\nimport '@decidables/decidables-elements/spinner';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n AccumulableTable element\n <accumulable-table>\n\n Attributes:\n ????Hit; Miss; FalseAlarm; CorrectRejection;\n*/\nexport default class AccumulableTable extends AccumulableElement {\n static get properties() {\n return {\n numeric: {\n attribute: 'numeric',\n type: Boolean,\n reflect: true,\n },\n summary: {\n attribute: 'summary',\n type: Boolean,\n reflect: true,\n },\n color: {\n attribute: 'color',\n type: String,\n reflect: true,\n },\n\n correctCount: {\n attribute: 'correct-count',\n type: Number,\n reflect: true,\n },\n errorCount: {\n attribute: 'error-count',\n type: Number,\n reflect: true,\n },\n nrCount: {\n attribute: 'nr-count',\n type: Number,\n reflect: true,\n },\n accuracy: {\n attribute: 'accuracy',\n type: Number,\n reflect: true,\n },\n correctMeanRT: {\n attribute: 'correct-mean-rt',\n type: Number,\n reflect: true,\n },\n errorMeanRT: {\n attribute: 'error-mean-rt',\n type: Number,\n reflect: true,\n },\n meanRT: {\n attribute: 'mean-rt',\n type: Number,\n reflect: true,\n },\n correctSDRT: {\n attribute: 'correct-sd-rt',\n type: Number,\n reflect: true,\n },\n errorSDRT: {\n attribute: 'error-sd-rt',\n type: Number,\n reflect: true,\n },\n sdRT: {\n attribute: 'sd-rt',\n type: Number,\n reflect: true,\n },\n\n payoff: {\n attribute: 'payoff',\n type: Boolean,\n reflect: true,\n },\n correctPayoff: {\n attribute: 'correct-payoff',\n type: Number,\n reflect: true,\n },\n errorPayoff: {\n attribute: 'error-payoff',\n type: Number,\n reflect: true,\n },\n nrPayoff: {\n attribute: 'no-response-payoff',\n type: Number,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n this.numeric = false;\n this.summary = false;\n\n this.colors = ['none', 'measure', 'outcome', 'all'];\n this.color = 'all';\n\n this.payoff = false;\n this.correctPayoff = undefined; // Correct payoff\n this.errorPayoff = undefined; // Error payoff\n this.nrPayoff = undefined; // No Response payoff\n\n this.correctCount = NaN;\n this.errorCount = NaN;\n this.nrCount = NaN;\n this.accuracy = NaN;\n this.correctMeanRT = NaN;\n this.errorMeanRT = NaN;\n this.meanRT = NaN;\n this.correctSDRT = NaN;\n this.errorSDRT = NaN;\n this.sdRT = NaN;\n }\n\n sendEvent() {\n this.dispatchEvent(new CustomEvent('accumulable-table-change', {\n detail: {\n correctCount: this.correctCount,\n errorCount: this.errorCount,\n nrCount: this.nrCount,\n accuracy: this.accuracy,\n correctMeanRT: this.correctMeanRT,\n errorMeanRT: this.errorMeanRT,\n meanRT: this.meanRT,\n correctSDRT: this.correctSDRT,\n errorSDRT: this.errorSDRT,\n sdRT: this.sdRT,\n },\n bubbles: true,\n }));\n }\n\n correctCountInput(e) {\n this.correctCount = parseInt(e.target.value, 10);\n this.sendEvent();\n }\n\n errorCountInput(e) {\n this.errorCount = parseInt(e.target.value, 10);\n this.sendEvent();\n }\n\n accuracyInput(e) {\n this.accuracy = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n correctMeanRTInput(e) {\n this.correctMeanRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n errorMeanRTInput(e) {\n this.errorMeanRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n meanRTInput(e) {\n this.meanRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n correctSDRTInput(e) {\n this.correctSDRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n errorSDRTInput(e) {\n this.errorSDRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n sdRTInput(e) {\n this.sdRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n }\n\n /* Overall element */\n table {\n text-align: center;\n\n border-collapse: collapse;\n\n border: 0;\n }\n\n /* Headers */\n .th-main {\n padding: 0;\n\n font-weight: bold;\n }\n\n .th-sub {\n padding: 0 0.25rem;\n\n font-weight: 600;\n }\n\n .th-left {\n padding-left: 0;\n\n text-align: right;\n }\n\n /* Cells */\n .td {\n width: 10rem;\n\n padding: 0.25rem 0.25rem 0.375rem;\n\n transition: all var(---transition-duration) ease;\n }\n\n .numeric .td {\n width: 7rem;\n }\n\n /* Labels */\n .payoff {\n font-weight: 600;\n line-height: 0.75rem;\n }\n\n /* User interaction <input> */\n .td-data decidables-spinner {\n --decidables-spinner-input-width: 3.5rem;\n }\n\n .td-summary decidables-spinner {\n --decidables-spinner-input-width: 4.5rem;\n }\n\n /* Table emphasis */\n .td-data.correct {\n border-left: 2px solid var(---color-element-emphasis);\n }\n\n .td-data.error {\n border-right: 2px solid var(---color-element-emphasis);\n }\n\n .td-data.count {\n border-top: 2px solid var(---color-element-emphasis);\n }\n\n .td-data.sd-rt {\n border-bottom: 2px solid var(---color-element-emphasis);\n }\n\n /* Color schemes */\n\n /* (Default) All color scheme */\n .correct.count {\n background: var(---color-element-background); /* ###### */\n }\n\n .error.count {\n background: var(---color-element-background); /* ###### */\n }\n\n .overall.proportion-correct {\n background: var(---color-element-background); /* ###### */\n }\n\n .correct.mean-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n .error.mean-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n .overall.mean-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n .correct.sd-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n .error.sd-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n .overall.sd-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n /* Outcome color scheme */\n :host([color=\"outcome\"]) .correct {\n background: var(---color-correct-light);\n }\n\n :host([color=\"outcome\"]) .error {\n background: var(---color-error-light);\n }\n\n :host([color=\"outcome\"]) .overall {\n background: var(---color-element-background);\n }\n\n /* Measure color scheme */\n :host([color=\"measure\"]) .count,\n :host([color=\"measure\"]) .proportion-correct {\n background: var(---color-element-background); /* ###### */\n }\n\n :host([color=\"measure\"]) .mean-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n :host([color=\"measure\"]) .sd-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n /* No color scheme */\n :host([color=\"none\"]) .td-data,\n :host([color=\"none\"]) .td-summary {\n background: var(---color-element-background);\n }\n `,\n ];\n }\n\n render() {\n const payoffFormatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n const payoffFormat = (number) => {\n return payoffFormatter.formatToParts(number).map(({type, value}) => {\n if (type === 'minusSign') {\n return '−';\n }\n return value;\n }).reduce((string, part) => { return string + part; });\n };\n\n let correctCount;\n let errorCount;\n let accuracy;\n let correctMeanRT;\n let errorMeanRT;\n let meanRT;\n let correctSDRT;\n let errorSDRT;\n let sdRT;\n if (this.numeric) {\n correctCount = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.correctCount}\" @input=${this.correctCountInput.bind(this)}>\n <span>Correct Count</span>\n ${this.payoff ? html`<span class=\"payoff\">${payoffFormat(this.correctPayoff)}</span>` : html``}\n </decidables-spinner>\n `;\n errorCount = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.errorCount}\" @input=${this.errorCountInput.bind(this)}>\n <span>Error Count</span>\n ${this.payoff ? html`<span class=\"payoff\">${payoffFormat(this.errorPayoff)}</span>` : html``}\n </decidables-spinner>\n `;\n accuracy = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" max=\"1\" step=\".01\" .value=\"${+this.accuracy.toFixed(2)}\" @input=${this.accuracyInput.bind(this)}>\n <span>Accuracy</span>\n </decidables-spinner>\n `;\n correctMeanRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.correctMeanRT.toFixed(0)}\" @input=${this.correctMeanRTInput.bind(this)}>\n <span>Correct Mean RT</span>\n </decidables-spinner>\n `;\n errorMeanRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.errorMeanRT.toFixed(0)}\" @input=${this.errorMeanRTInput.bind(this)}>\n <span>Error Mean RT</span>\n </decidables-spinner>\n `;\n meanRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.meanRT.toFixed(0)}\" @input=${this.meanRTInput.bind(this)}>\n <span>Mean RT</span>\n </decidables-spinner>\n `;\n correctSDRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.correctSDRT.toFixed(0)}\" @input=${this.correctSDRTInput.bind(this)}>\n <span>Correct SD RT</span>\n </decidables-spinner>\n `;\n errorSDRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.errorSDRT.toFixed(0)}\" @input=${this.errorSDRTInput.bind(this)}>\n <span>Error SD RT</span>\n </decidables-spinner>\n `;\n sdRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.sdRT.toFixed(0)}\" @input=${this.sdRTInput.bind(this)}>\n <span>SD RT</span>\n </decidables-spinner>\n `;\n } else {\n correctCount = html`<span>Correct Count</span>\n ${this.payoff ? html`<span class=\"payoff\">${payoffFormat(this.correctPayoff)}</span>` : html``}`;\n errorCount = html`<span>Error Count</span>\n ${this.payoff ? html`<span class=\"payoff\">${payoffFormat(this.errorPayoff)}</span>` : html``}`;\n accuracy = html`<span>Accuracy</span>`;\n correctMeanRT = html`<span>Correct Mean RT</span>`;\n errorMeanRT = html`<span>Error Mean RT</span>`;\n meanRT = html`<span>Mean RT</span>`;\n correctSDRT = html`<span>Correct SD RT</span>`;\n errorSDRT = html`<span>Error SD RT</span>`;\n sdRT = html`<span>SD RT</span>`;\n }\n return html`\n <table class=${this.numeric ? 'numeric' : ''}>\n <thead>\n <tr>\n <th rowspan=\"2\"></th>\n <th class=\"th th-main\" colspan=\"2\" scope=\"col\">\n Outcome\n </th>\n </tr>\n <tr>\n <th class=\"th th-sub\" scope=\"col\">\n Correct\n </th>\n <th class=\"th th-sub\" scope=\"col\">\n Error\n </th>\n ${(this.summary)\n ? html`\n <th class=\"th th-main\" scope=\"col\">\n Overall\n </th>`\n : html``}\n </tr>\n </thead>\n <tbody>\n <tr>\n <th class=\"th th-sub th-left\" scope=\"row\">\n Count\n </th>\n <td class=\"td td-data correct count\">\n ${correctCount}\n </td>\n <td class=\"td td-data error count\">\n ${errorCount}\n </td>\n ${(this.summary)\n ? html`\n <td class=\"td td-summary overall proportion-correct\">\n ${accuracy}\n </td>`\n : html``}\n </tr>\n <tr>\n <th class=\"th th-sub th-left\" scope=\"row\">\n Mean RT\n </th>\n <td class=\"td td-data correct mean-rt\">\n ${correctMeanRT}\n </td>\n <td class=\"td td-data error mean-rt\">\n ${errorMeanRT}\n </td>\n ${(this.summary)\n ? html`\n <td class=\"td td-summary overall mean-rt\">\n ${meanRT}\n </td>`\n : html``}\n </tr>\n <tr>\n <th class=\"th th-sub th-left\" scope=\"row\">\n SD RT\n </th>\n <td class=\"td td-data correct sd-rt\">\n ${correctSDRT}\n </td>\n <td class=\"td td-data error sd-rt\">\n ${errorSDRT}\n </td>\n ${(this.summary)\n ? html`\n <td class=\"td td-summary overall sd-rt\">\n ${sdRT}\n </td>`\n : html``}\n </tr>\n </tbody>\n </table>`;\n }\n}\n\ncustomElements.define('accumulable-table', AccumulableTable);\n","\nimport {html, css} from 'lit';\n\nimport DDMMath from '@decidables/accumulable-math';\n\n// Special Web Worker import for rollup-plugin-web-worker-loader\nimport DDMFitWorker from 'web-worker:./ddm-fit-worker'; /* eslint-disable-line import/no-unresolved */\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n DDMFit element\n <ddm-fit>\n\n Attributes:\n interactive: true/false\n*/\nexport default class DDMFit extends AccumulableElement {\n static get properties() {\n return {\n };\n }\n\n constructor() {\n super();\n\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n\n this.observed = {};\n this.predicted = {};\n\n this.working = false;\n this.queued = false;\n this.worker = new DDMFitWorker();\n\n this.worker.onmessage = (event) => {\n this.working = false;\n this.predicted = event.data.predicted;\n this.a = event.data.params.a;\n this.z = event.data.params.z;\n this.v = event.data.params.v;\n this.t0 = event.data.params.t0;\n this.requestUpdate();\n\n this.dispatchEvent(new CustomEvent('ddm-fit-update', {\n detail: {\n a: this.a,\n z: this.z,\n v: this.v,\n t0: this.t0,\n },\n bubbles: true,\n }));\n\n if (this.queued) {\n this.fit();\n }\n };\n\n this.fit();\n }\n\n fit() {\n if (!this.working) {\n this.worker.postMessage(this.observed);\n this.working = true;\n this.queued = false;\n } else {\n this.queued = true;\n }\n }\n\n clear() {\n this.observed = {};\n\n this.fit();\n }\n\n set(data) {\n // Deep copy\n this.observed = structuredClone(data);\n\n this.fit();\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n }\n `,\n ];\n }\n\n render() {\n return html`\n <div>\n <div><b>Observed:</b>\n <br/>Accuracy = ${this.observed.accuracy?.toFixed(2)},\n <br/>Correct Mean RT = ${this.observed.correctMeanRT?.toFixed(0)},\n Error Mean RT = ${this.observed.errorMeanRT?.toFixed(0)},\n Mean RT = ${this.observed.meanRT?.toFixed(0)},\n <br/>Correct SD RT = ${this.observed.correctSDRT?.toFixed(0)},\n Error SD RT = ${this.observed.errorSDRT?.toFixed(0)},\n SD RT = ${this.observed.sdRT?.toFixed(0)},\n </div>\n <div><b>Parameters:</b>\n <br/><var class=\"math-var a\">a</var> = ${this.a.toFixed(2)},\n <var class=\"math-var z\">z</var> = ${this.z.toFixed(2)},\n <var class=\"math-var v\">v</var> = ${this.v.toFixed(2)},\n <var class=\"math-var t0\">t0</var> = ${this.t0.toFixed(0)}\n </div>\n <div><b>Predicted:</b>\n <br/>Accuracy = ${this.predicted.accuracy?.toFixed(2)},\n <br/>Correct Mean RT = ${this.predicted.correctMeanRT?.toFixed(0)},\n Error Mean RT = ${this.predicted.errorMeanRT?.toFixed(0)},\n Mean RT = ${this.predicted.meanRT?.toFixed(0)},\n <br/>Correct SD RT = ${this.predicted.correctSDRT?.toFixed(0)},\n Error SD RT = ${this.predicted.errorSDRT?.toFixed(0)},\n SD RT = ${this.predicted.sdRT?.toFixed(0)},\n </div>\n </div>\n `;\n }\n}\n\ncustomElements.define('ddm-fit', DDMFit);\n","\nimport {html, css} from 'lit';\n\nimport '@decidables/decidables-elements/slider';\nimport DDMMath from '@decidables/accumulable-math';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n DDMParameters element\n <ddm-paramters>\n\n Attributes:\n\n*/\nexport default class DDMParameters extends AccumulableElement {\n static get properties() {\n return {\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n t0: {\n attribute: 'nondecision-time',\n type: Number,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.a = undefined;\n this.z = undefined;\n this.v = undefined;\n this.t0 = undefined;\n }\n\n setBoundarySeparation(e) {\n this.a = +e.target.value;\n this.dispatchEvent(new CustomEvent('ddm-parameters-a', {\n detail: {\n a: this.a,\n },\n bubbles: true,\n }));\n }\n\n setStartingPoint(e) {\n this.z = +e.target.value;\n this.dispatchEvent(new CustomEvent('ddm-parameters-z', {\n detail: {\n z: this.z,\n },\n bubbles: true,\n }));\n }\n\n setDriftRate(e) {\n this.v = +e.target.value;\n this.dispatchEvent(new CustomEvent('ddm-parameters-v', {\n detail: {\n v: this.v,\n },\n bubbles: true,\n }));\n }\n\n setNondecisionTime(e) {\n this.t0 = +e.target.value;\n this.dispatchEvent(new CustomEvent('ddm-parameters-t0', {\n detail: {\n t0: this.t0,\n },\n bubbles: true,\n }));\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n }\n\n .holder {\n display: flex;\n\n flex-direction: row;\n\n align-items: stretch;\n justify-content: center;\n }\n\n decidables-slider {\n line-height: 1;\n text-align: center;\n }\n\n decidables-slider div {\n margin-bottom: 0.25rem;\n }\n\n .a {\n --decidables-slider-background-color: var(---color-a-light);\n --decidables-slider-color: var(---color-a);\n }\n\n .z {\n --decidables-slider-background-color: var(---color-z-light);\n --decidables-slider-color: var(---color-z);\n }\n\n .v {\n --decidables-slider-background-color: var(---color-v-light);\n --decidables-slider-color: var(---color-v);\n }\n\n .t0 {\n --decidables-slider-background-color: var(---color-t0-light);\n --decidables-slider-color: var(---color-t0);\n }\n `,\n ];\n }\n\n render() {\n return html`\n <div class=\"holder\">\n ${this.a != null\n ? html`<decidables-slider class=\"a\"\n ?disabled=${!this.interactive}\n scale\n min=${DDMMath.a.MIN}\n max=${DDMMath.a.MAX}\n step=${DDMMath.a.STEP}\n .value=${+this.a.toFixed(2)}\n @change=${this.setBoundarySeparation.bind(this)}\n @input=${this.setBoundarySeparation.bind(this)}\n ><div>Boundary Separation<br><span class=\"math-var\">a</span></div></decidables-slider>`\n : html``}\n ${this.z != null\n ? html`<decidables-slider class=\"z\"\n ?disabled=${!this.interactive}\n scale\n min=${DDMMath.z.MIN}\n max=${DDMMath.z.MAX}\n step=${DDMMath.z.STEP}\n .value=${+this.z.toFixed(2)}\n @change=${this.setStartingPoint.bind(this)}\n @input=${this.setStartingPoint.bind(this)}\n ><div>Starting Point<br><span class=\"math-var\">z</span></div></decidables-slider>`\n : html``}\n ${this.v != null\n ? html`<decidables-slider class=\"v\"\n ?disabled=${!this.interactive}\n scale\n min=${DDMMath.v.MIN}\n max=${DDMMath.v.MAX}\n step=${DDMMath.v.STEP}\n .value=${+this.v.toFixed(2)}\n @change=${this.setDriftRate.bind(this)}\n @input=${this.setDriftRate.bind(this)}\n ><div>Drift Rate<br><span class=\"math-var\">v</span></div></decidables-slider>`\n : html``}\n ${this.t0 != null\n ? html`<decidables-slider class=\"t0\" \n ?disabled=${!this.interactive}\n scale\n min=${DDMMath.t0.MIN}\n max=${DDMMath.t0.MAX}\n step=${DDMMath.t0.STEP}\n .value=${+this.t0.toFixed(0)}\n @change=${this.setNondecisionTime.bind(this)}\n @input=${this.setNondecisionTime.bind(this)}\n ><div>Nondecision Time<br><span class=\"math-var\">t₀</span></div></decidables-slider>`\n : html``}\n </div>`;\n }\n}\n\ncustomElements.define('ddm-parameters', DDMParameters);\n","\nimport {css, html} from 'lit';\nimport * as d3 from 'd3';\n\nimport DDMMath from '@decidables/accumulable-math';\nimport {DecidablesMixinResizeable} from '@decidables/decidables-elements';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n DDMModel element\n <ddm-model>\n\n Attributes:\n interactive: true/false\n\n measures: boolean\n means: boolean\n\n seed: numeric\n trials: numeric\n\n a: numeric\n z: numeric\n v: numeric\n t0: numeric\n\n // s: numeric\n // sz: numeric\n // eta: numeric\n // st: numeric\n\n Styles:\n ??\n*/\nexport default class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {\n static get properties() {\n return {\n measures: {\n attribute: 'measures',\n type: Boolean,\n reflect: true,\n },\n means: {\n attribute: 'means',\n type: Boolean,\n reflect: true,\n },\n sds: {\n attribute: 'sds',\n type: Boolean,\n reflect: true,\n },\n\n human: {\n attribute: 'human',\n type: Boolean,\n reflect: true,\n },\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n seed: {\n attribute: 'seed',\n type: Number,\n reflect: true,\n },\n\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n t0: {\n attribute: 'nondecision-time',\n type: Number,\n reflect: true,\n },\n\n // s: {\n // attribute: false, // within-trial variability in drift rate\n // type: Number,\n // reflect: false,\n // },\n // sz: {\n // attribute: false, // starting point range\n // type: Number,\n // reflect: false,\n // },\n // eta: {\n // attribute: false, // standard deviation for across-trial variability in drift rate\n // type: Number,\n // reflect: false,\n // },\n // st: {\n // attribute: false, // nondecision-time range\n // type: Number,\n // reflect: false,\n // },\n };\n }\n\n constructor() {\n super();\n\n this.firstUpdate = true;\n this.drag = false;\n\n this.scale = {\n time: {\n min: 0,\n max: 1000,\n step: 1,\n round: Math.round,\n },\n evidence: {\n min: -1,\n max: 1,\n step: 0.01,\n round: Math.round,\n },\n density: {\n min: 0,\n max: 10,\n step: 0.01,\n round: Math.round,\n },\n };\n\n this.measures = false;\n this.means = false;\n this.sds = false;\n\n this.resample();\n this.human = false;\n this.trials = 10;\n\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n\n // this.s = null;\n // this.sz = null;\n // this.eta = null;\n // this.st = null;\n\n this.precision = 0.005;\n this.random = null;\n\n this.bounds = null;\n this.startingPoint = null;\n\n this.data = {};\n this.model = {};\n this.animate = false;\n this.paused = false;\n\n this.alignState();\n }\n\n clear() {\n this.trials = 0;\n this.data.trials = [];\n }\n\n trial(trial = {}) {\n this.trials += 1;\n if (this.human) {\n this.data.trials.push(trial);\n } else {\n this.animate = true;\n }\n }\n\n // Called to pause trial animations!\n pauseTrial() {\n const pathNew = d3.select(this.renderRoot).select('.path[data-new-trial-ease-time]');\n pathNew.interrupt('new').select('.curve').interrupt('new');\n this.paused = true;\n }\n\n // Called to resume trial animations!\n resumeTrial() {\n this.paused = false;\n this.requestUpdate();\n }\n\n resample() {\n this.seed = d3.randomUniform(0, 1)();\n }\n\n alignPath(seed, a, z, v, t0) {\n const random = d3.randomNormal.source(d3.randomLcg(seed))(0, this.precision ** 0.5);\n const bounds = {\n lower: -a / 2,\n upper: a / 2,\n };\n const startingPoint = a * z - a / 2;\n const drift = v * this.precision;\n\n const path = [];\n path.push(\n {t: t0, e: startingPoint},\n );\n while ((path.at(-1).e > bounds.lower) && (path.at(-1).e < bounds.upper)) {\n path.push({\n t: path.at(-1).t + (this.precision * 1000),\n e: path.at(-1).e + drift + DDMMath.s.DEFAULT * random(),\n });\n }\n return path;\n }\n\n alignCorrectDistribution(a, z, v, t0) {\n const proportionCorrect = DDMMath.azv2pC(a, z, v);\n\n const dist = [\n {t: 0, d: 0},\n {t: this.t0, d: 0},\n ];\n for (\n let i = this.scale.time.min;\n i <= (this.scale.time.max - (t0));\n i += this.scale.time.step) {\n if (i > 0) {\n dist.push({\n t: t0 + i,\n d: DDMMath.tazv2gC(i / 1000, a, z, v) / proportionCorrect,\n });\n }\n }\n\n return dist;\n }\n\n alignErrorDistribution(a, z, v, t0) {\n const proportionError = DDMMath.azv2pE(a, z, v);\n\n const dist = [\n {t: 0, d: 0},\n {t: this.t0, d: 0},\n ];\n for (\n let i = this.scale.time.min;\n i <= (this.scale.time.max - (t0));\n i += this.scale.time.step) {\n if (i > 0) {\n dist.push({\n t: t0 + i,\n d: DDMMath.tazv2gE(i / 1000, a, z, v) / proportionError,\n });\n }\n }\n\n return dist;\n }\n\n alignState() {\n this.random = d3.randomUniform.source(d3.randomLcg(this.seed))(0, 1);\n\n this.bounds = {\n lower: -this.a / 2,\n upper: this.a / 2,\n };\n this.startingPoint = this.a * this.z - this.a / 2;\n\n // Data Trials\n if (this.human) {\n this.trials = this.data.trials.length;\n } else {\n this.data.trials = Array.from({length: this.trials}, (element, index) => {\n const seed = (this.random() / 1000) * 997; // HACK to avoid randomLcg repetition\n const animate = this.animate && (index === (this.trials - 1));\n\n // Sample Paths\n const path = this.alignPath(seed, this.a, this.z, this.v, this.t0);\n const outcome = (path.at(-1).e <= this.bounds.lower)\n ? 'error'\n : (path.at(-1).e >= this.bounds.upper)\n ? 'correct'\n : 'nr';\n const rt = (outcome === 'error')\n ? path.at(-2).t + (\n ((this.bounds.lower - path.at(-2).e) / (path.at(-1).e - path.at(-2).e))\n * (this.precision * 1000)\n )\n : (outcome === 'correct')\n ? path.at(-2).t + (\n ((this.bounds.upper - path.at(-2).e) / (path.at(-1).e - path.at(-2).e))\n * (this.precision * 1000)\n )\n : null;\n\n return {\n index, seed, path, rt, outcome, animate,\n };\n });\n }\n\n // Data Summary Stats\n const dataStats = DDMMath.trials2stats(\n this.data.trials.filter((path) => { return !path.animate; }),\n );\n this.data = {...this.data, ...dataStats};\n\n // Model Summary Stats\n this.model.accuracy = DDMMath.azv2pC(this.a, this.z, this.v);\n\n this.model.correctMeanRT = DDMMath.azvt02mC(this.a, this.z, this.v, this.t0);\n this.model.errorMeanRT = DDMMath.azvt02mE(this.a, this.z, this.v, this.t0);\n\n this.model.correctSDRT = DDMMath.azv2sdC(this.a, this.z, this.v);\n this.model.errorSDRT = DDMMath.azv2sdE(this.a, this.z, this.v);\n\n // Model Distributions\n this.model.correctDist = this.alignCorrectDistribution(this.a, this.z, this.v, this.t0);\n this.model.errorDist = this.alignErrorDistribution(this.a, this.z, this.v, this.t0);\n\n this.dispatchEvent(new CustomEvent('ddm-model-output', {\n detail: {\n data: this.data,\n model: this.model,\n },\n bubbles: true,\n }));\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n\n width: 27rem;\n height: 18rem;\n }\n\n .main {\n width: 100%;\n height: 100%;\n }\n\n text {\n /* stylelint-disable property-no-vendor-prefix */\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* \n UNDERLAYER\n */\n .background {\n fill: var(---color-element-background);\n stroke: none;\n stroke-width: 1;\n shape-rendering: crispEdges;\n }\n\n .title {\n font-weight: 600;\n\n fill: currentColor;\n }\n\n .axis path,\n .axis line {\n stroke: var(---color-element-border);\n /* shape-rendering: crispEdges; */\n }\n\n .tick {\n font-size: 0.75rem;\n }\n\n /* \n CONTENT\n */\n .line {\n fill: none;\n stroke: var(---color-element-emphasis);\n stroke-width: 2;\n }\n\n .curve {\n stroke-width: 2;\n }\n\n .path .curve {\n opacity: 0.5;\n\n fill: none;\n\n transition: opacity 0.5s;\n }\n\n .path.highlight .curve {\n filter: url(\"#shadow-2\");\n opacity: 1;\n }\n\n .path.correct .curve {\n /* stroke: var(---color-correct); */\n }\n\n .path.error .curve {\n /* stroke: var(---color-error); */\n }\n\n .stop-0 {\n stop-color: var(---color-correct);\n }\n\n .stop-100 {\n stop-color: var(---color-error);\n }\n\n .path.animate .curve {\n opacity: 1;\n\n stroke: url(\"#path-animate\");\n }\n\n .dist.correct .curve {\n fill: var(---color-correct-light);\n stroke: var(---color-correct);\n }\n\n .dist.error .curve {\n fill: var(---color-error-light);\n stroke: var(---color-error);\n }\n\n .rt .mark {\n stroke-width: 1;\n }\n\n .accuracy.model .bar {\n stroke: none;\n }\n\n .accuracy.model.correct .bar {\n fill: var(---color-correct);\n }\n\n .accuracy.model.error .bar {\n fill: var(---color-error);\n }\n\n .accuracy.data .mark {\n stroke-width: 2;\n }\n\n .accuracy.data.correct .mark {\n stroke: var(---color-correct-light);\n }\n\n .accuracy.data.error .mark {\n stroke: var(---color-error-light);\n }\n\n /*\n OVERLAYER\n */\n .interactive {\n filter: url(\"#shadow-2\");\n outline: none;\n }\n\n .interactive:hover {\n filter: url(\"#shadow-4\");\n }\n\n .interactive:active {\n filter: url(\"#shadow-8\");\n }\n\n :host(.keyboard) .interactive:focus {\n filter: url(\"#shadow-8\");\n }\n\n .boundary {\n fill: none;\n stroke: var(---color-element-emphasis);\n stroke-width: 2;\n }\n\n .boundary.interactive {\n cursor: ns-resize;\n }\n\n .drift {\n pointer-events: visible;\n\n fill: none;\n stroke: var(---color-element-emphasis);\n stroke-dasharray: 8 4;\n stroke-width: 2;\n }\n\n .drift.interactive {\n cursor: ns-resize;\n }\n\n .drift .arrow {\n stroke-dasharray: none;\n }\n\n .t0z.interactive {\n cursor: move;\n }\n\n .t0z .point {\n fill: var(---color-element-emphasis);\n stroke-width: 0;\n\n r: 6px;\n }\n\n /* Make larger targets for touch users */\n .interactive .touch {\n stroke: #000000;\n stroke-dasharray: none;\n stroke-opacity: 0;\n }\n\n @media (pointer: coarse) {\n .interactive .touch {\n stroke-linecap: round;\n stroke-width: 12;\n }\n }\n\n .measure .line.short {\n stroke-width: 0;\n }\n\n .measure .markers {\n fill: none;\n stroke-width: 0;\n }\n\n .measure .label {\n font-size: 0.75rem;\n\n fill: currentColor;\n }\n\n .measure.a .line {\n stroke: var(---color-a);\n }\n\n .measure.a .label {\n dominant-baseline: auto;\n text-anchor: end;\n }\n\n .measure.z .line {\n stroke: var(---color-z);\n }\n\n .measure.z .label,\n /* Hack to avoid Safari weirdness */\n .measure.z .label tspan {\n dominant-baseline: hanging;\n text-anchor: start;\n }\n\n .measure.v .line {\n stroke: var(---color-v);\n }\n\n .measure.v .label {\n dominant-baseline: auto;\n text-anchor: start;\n }\n\n .measure.t0 .line {\n stroke: var(---color-t0);\n }\n\n .measure.t0 .label {\n dominant-baseline: auto;\n text-anchor: middle;\n }\n\n .measure-arrow {\n fill: context-stroke;\n stroke: context-stroke;\n }\n\n .measure-arrow .arrow {\n stroke-width: 1;\n }\n\n .measure-arrow.capped .cap {\n stroke-width: 2;\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .measure-arrow.a {\n fill: var(---color-a);\n stroke: var(---color-a);\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .measure-arrow.z {\n fill: var(---color-z);\n stroke: var(---color-z);\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .measure-arrow.v {\n fill: var(---color-v);\n stroke: var(---color-v);\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .measure-arrow.t0 {\n fill: var(---color-t0);\n stroke: var(---color-t0);\n }\n\n .sd .indicator,\n .mean .indicator {\n stroke-width: 2;\n }\n\n .sd.model .indicator,\n .mean.model .indicator {\n stroke-dasharray: 2 2;\n }\n\n .sd.data .indicator,\n .mean.data .indicator {\n stroke-dasharray: 1 1;\n }\n\n .sd.correct .indicator,\n .mean.correct .indicator {\n stroke: var(---color-correct-dark);\n }\n\n .sd.error .indicator,\n .mean.error .indicator {\n stroke: var(---color-error-dark);\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .cap.correct {\n fill: var(---color-correct-dark);\n stroke: var(---color-correct-dark);\n stroke-dasharray: 100%;\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .cap.error {\n fill: var(---color-error-dark);\n stroke: var(---color-error-dark);\n stroke-dasharray: 100%;\n }\n\n .rt-label rect {\n filter: url(\"#shadow-2\");\n\n fill: var(--color-background);\n rx: 4;\n }\n\n .rt-label text {\n font-size: 0.75rem;\n \n text-anchor: middle;\n }\n\n .rt-label.correct text {\n dominant-baseline: auto;\n }\n\n .rt-label.error text {\n dominant-baseline: hanging;\n }\n `,\n ];\n }\n\n render() { /* eslint-disable-line class-methods-use-this */\n return html``;\n }\n\n willUpdate() {\n this.alignState();\n }\n\n update(changedProperties) {\n super.update(changedProperties);\n\n // Bail out if we can't get the width/height\n if (Number.isNaN(this.width) || Number.isNaN(this.height) || Number.isNaN(this.rem)) {\n return;\n }\n\n const hostWidth = this.width;\n const hostHeight = this.height;\n const hostAspectRatio = hostWidth / hostHeight;\n\n const elementAspectRatio = 1.5;\n let elementWidth;\n let elementHeight;\n\n if (hostAspectRatio > elementAspectRatio) {\n elementHeight = hostHeight;\n elementWidth = elementHeight * elementAspectRatio;\n } else {\n elementWidth = hostWidth;\n elementHeight = elementWidth / elementAspectRatio;\n }\n\n const margin = {\n top: 1 * this.rem,\n bottom: 3 * this.rem,\n left: 3.75 * this.rem,\n right: 3.25 * this.rem,\n };\n const height = elementHeight - (margin.top + margin.bottom);\n const width = elementWidth - (margin.left + margin.right);\n\n const gapHeight = 0.75 * this.rem;\n const evidenceHeight = height * 0.5;\n const densityHeight = height * 0.25 - gapHeight;\n\n const gapWidth = 0.75 * this.rem;\n const timeWidth = width * 0.90;\n const accuracyWidth = width * 0.10 - gapWidth;\n\n const transitionDuration = parseInt(this.getComputedStyleValue('---transition-duration'), 10);\n\n //\n // SCALES\n //\n\n // Time Scale\n const timeScale = d3.scaleLinear()\n .domain([this.scale.time.min, this.scale.time.max])\n .range([0, timeWidth]);\n\n // Evidence Scale\n const evidenceScale = d3.scaleLinear()\n .domain([this.scale.evidence.min, this.scale.evidence.max])\n .range([evidenceHeight, 0]);\n\n // Correct Density Scale\n const correctDensityScale = d3.scaleLinear()\n .domain([this.scale.density.min, this.scale.density.max])\n .range([densityHeight, 0]);\n\n // Error Density Scale\n const errorDensityScale = d3.scaleLinear()\n .domain([this.scale.density.min, this.scale.density.max])\n .range([0, densityHeight]);\n\n // Accuracy Scale\n const accuracyScale = d3.scaleLinear()\n .domain([0, 1])\n .range([0, height]);\n\n //\n // DRAG BEHAVIORS\n //\n\n // Nondecision Time/Starting Point Drag behavior\n const dragT0z = d3.drag()\n .subject((event, datum) => {\n return {x: timeScale(datum.t0), y: evidenceScale(datum.startingPoint)};\n })\n .on('start', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', true);\n })\n .on('drag', (event) => {\n this.drag = true;\n const shift = event.sourceEvent.shiftKey\n ? (Math.abs(event.x - event.subject.x) > Math.abs(event.y - event.subject.y))\n ? 't0'\n : 'z'\n : false;\n let t0 = timeScale.invert(event.x);\n let z = (evidenceScale.invert(event.y) + (this.a / 2)) / this.a;\n // Clamp t0\n t0 = (shift === 'z')\n ? timeScale.invert(event.subject.x)\n : (t0 < DDMMath.t0.MIN)\n ? DDMMath.t0.MIN\n : (t0 > DDMMath.t0.MAX)\n ? DDMMath.t0.MAX\n : t0;\n // Clamp z\n z = (shift === 't0')\n ? (evidenceScale.invert(event.subject.y) + (this.a / 2)) / this.a\n : (z < DDMMath.z.MIN)\n ? DDMMath.z.MIN\n : (z > DDMMath.z.MAX)\n ? DDMMath.z.MAX\n : z;\n this.t0 = t0;\n this.z = z;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-t0', {\n detail: {\n t0: this.t0,\n },\n bubbles: true,\n }));\n this.dispatchEvent(new CustomEvent('ddm-model-z', {\n detail: {\n z: this.z,\n },\n bubbles: true,\n }));\n })\n .on('end', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', false);\n this.drag = false;\n });\n\n // Drift Rate Drag behavior\n const dragDrift = d3.drag()\n .on('start', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', true);\n })\n .on('drag', (event) => {\n this.drag = true;\n let v = ((evidenceScale.invert(event.y) - this.startingPoint)\n / (timeScale.invert(event.x) - this.t0)) * 1000;\n // Clamp drift rate\n v = (v < DDMMath.v.MIN)\n ? DDMMath.v.MIN\n : (v > DDMMath.v.MAX)\n ? DDMMath.v.MAX\n : v;\n this.v = v;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-v', {\n detail: {\n v: this.v,\n },\n bubbles: true,\n }));\n })\n .on('end', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', false);\n this.drag = false;\n });\n\n // Boundary Drag behavior\n const dragBoundary = d3.drag()\n .subject((event, datum) => {\n return {x: 0, y: evidenceScale(datum.value)};\n })\n .on('start', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', true);\n })\n .on('drag', (event) => {\n this.drag = true;\n const boundary = evidenceScale.invert(event.y);\n let a = Math.abs(boundary * 2);\n // Clamp a\n a = (a < DDMMath.a.MIN)\n ? DDMMath.a.MIN\n : (a > DDMMath.a.MAX)\n ? DDMMath.a.MAX\n : a;\n this.a = a;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-a', {\n detail: {\n a: this.a,\n },\n bubbles: true,\n }));\n })\n .on('end', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', false);\n this.drag = false;\n });\n\n //\n // LINES\n //\n\n // Line for time/evidence space\n const evidenceLine = d3.line()\n .x((datum) => { return timeScale(datum.t); })\n .y((datum) => { return evidenceScale(datum.e); });\n\n // Line for correct time/density space\n const correctDensityLine = d3.line()\n .x((datum) => { return timeScale(datum.t); })\n .y((datum) => { return correctDensityScale(datum.d); });\n\n // Line for error time/density space\n const errorDensityLine = d3.line()\n .x((datum) => { return timeScale(datum.t); })\n .y((datum) => { return errorDensityScale(datum.d); });\n\n //\n // PLOTS\n //\n\n // Svg\n // DATA-JOIN\n const svgUpdate = d3.select(this.renderRoot).selectAll('.main')\n .data([{\n width: this.width,\n height: this.height,\n rem: this.rem,\n }]);\n // ENTER\n const svgEnter = svgUpdate.enter().append('svg')\n .classed('main', true)\n .html(AccumulableElement.svgDefs);\n const svgDefs = svgEnter.append('defs');\n // Arrowhead marker for measures\n const measureArrow = (parameter) => {\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n svgDefs.append('marker')\n .attr('id', `measure-arrow-${parameter}`)\n .attr('class', `measure-arrow ${parameter}`)\n .attr('orient', 'auto-start-reverse')\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('viewBox', '-10 -6 12 12')\n .attr('refX', '0')\n .attr('refY', '0')\n .attr('markerWidth', '12')\n .attr('markerHeight', '12')\n .append('path')\n .attr('class', 'arrow')\n .attr('d', 'M -7 -3 l 6 3 l -6 3 z');\n };\n const measureCappedArrow = (parameter) => {\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n const marker = svgDefs.append('marker')\n .attr('id', `measure-capped-arrow-${parameter}`)\n .attr('class', `measure-arrow capped ${parameter}`)\n .attr('orient', 'auto-start-reverse')\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('viewBox', '-10 -6 12 12')\n .attr('refX', '0')\n .attr('refY', '0')\n .attr('markerWidth', '12')\n .attr('markerHeight', '12');\n marker\n .append('path')\n .attr('class', 'arrow')\n .attr('d', 'M -7 -3 l 6 3 l -6 3 z');\n marker\n .append('path')\n .attr('class', 'cap')\n .attr('d', 'M 0 -4 l 0 8');\n };\n measureArrow('a');\n measureArrow('z');\n measureCappedArrow('v');\n measureArrow('t0');\n measureCappedArrow('t0');\n // Flat markers for SDs\n const sdCap = (outcome) => {\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n svgDefs.append('marker')\n .attr('id', `model-sd-cap-${outcome}`)\n .attr('class', `model-sd cap ${outcome}`)\n .attr('orient', 'auto-start-reverse')\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('viewBox', '-5 -5 10 10')\n .attr('refX', '0')\n .attr('refY', '0')\n .attr('markerWidth', '10')\n .attr('markerHeight', '10')\n .append('path')\n .attr('stroke', 'context-stroke')\n .attr('fill', 'context-stroke')\n .attr('stroke-width', '2')\n .attr('d', 'M 0 -4 l 0 8');\n svgDefs.append('marker')\n .attr('id', `data-sd-cap-${outcome}`)\n .attr('class', `data-sd cap ${outcome}`)\n .attr('orient', 'auto-start-reverse')\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('viewBox', '-5 -5 10 10')\n .attr('refX', '0')\n .attr('refY', '0')\n .attr('markerWidth', '10')\n .attr('markerHeight', '10')\n .append('path')\n .attr('stroke', 'context-stroke')\n .attr('fill', 'context-stroke')\n .attr('stroke-width', '2')\n .attr('d', 'M 0 -3 l 0 6');\n };\n sdCap('error');\n sdCap('correct');\n const gradient = svgDefs.append('linearGradient')\n .attr('id', 'path-animate')\n .attr('gradientUnits', 'userSpaceOnUse')\n .attr('color-interpolation', 'linearRGB')\n .attr('x1', '0')\n .attr('x2', '0')\n .attr('y1', evidenceScale(this.bounds.upper))\n .attr('y2', evidenceScale(this.bounds.lower));\n gradient.append('stop')\n .classed('stop-0', true)\n .attr('offset', '0%');\n gradient.append('stop')\n .classed('stop-100', true)\n .attr('offset', '100%');\n // MERGE\n const svgMerge = svgEnter.merge(svgUpdate)\n .attr('viewBox', `0 0 ${elementWidth} ${elementHeight}`);\n\n // Plots\n // DATA-JOIN\n const densityPlotUpdate = svgMerge.selectAll('.plot.density')\n .data([\n {\n outcome: 'correct',\n data: {\n meanRT: this.data.correctMeanRT,\n sdRT: this.data.correctSDRT,\n },\n model: {\n meanRT: this.model.correctMeanRT,\n sdRT: this.model.correctSDRT,\n dist: this.model.correctDist,\n },\n densityScale: correctDensityScale,\n densityLine: correctDensityLine,\n alignDistribution: this.alignCorrectDistribution.bind(this),\n },\n {\n outcome: 'error',\n data: {\n meanRT: this.data.errorMeanRT,\n sdRT: this.data.errorSDRT,\n },\n model: {\n meanRT: this.model.errorMeanRT,\n sdRT: this.model.errorSDRT,\n dist: this.model.errorDist,\n },\n densityScale: errorDensityScale,\n densityLine: errorDensityLine,\n alignDistribution: this.alignErrorDistribution.bind(this),\n },\n ]);\n // ENTER\n const evidencePlotEnter = svgEnter.append('g')\n .classed('plot evidence', true);\n const densityPlotEnter = densityPlotUpdate.enter().append('g')\n .attr('class', (datum) => { return `plot density ${datum.outcome}`; });\n const accuracyPlotEnter = svgEnter.append('g')\n .classed('plot accuracy', true);\n // MERGE\n const evidencePlotMerge = svgMerge.select('.plot.evidence')\n .attr('transform', `translate(${margin.left}, ${margin.top + densityHeight + gapHeight})`);\n const densityPlotMerge = densityPlotEnter.merge(densityPlotUpdate)\n .attr('transform', (datum) => {\n return `translate(${margin.left}, ${\n (datum.outcome === 'correct')\n ? margin.top\n : margin.top + densityHeight + evidenceHeight + 2 * gapHeight\n })`;\n });\n const accuracyPlotMerge = svgMerge.select('.plot.accuracy')\n .attr('transform', `translate(${margin.left + timeWidth + gapWidth}, ${margin.top})`);\n\n // Clippaths\n // ENTER\n evidencePlotEnter.append('clipPath')\n .attr('id', 'clip-evidence')\n .append('rect');\n // MERGE\n evidencePlotMerge.select('clipPath rect')\n .attr('y', evidenceScale(this.bounds.upper))\n .attr('height', evidenceScale(this.bounds.lower) - evidenceScale(this.bounds.upper) + 1)\n .attr('width', timeWidth + 1);\n\n //\n // LAYERS\n //\n\n // Underlayers\n // ENTER\n const evidenceUnderlayerEnter = evidencePlotEnter.append('g')\n .classed('underlayer', true);\n const densityUnderlayerEnter = densityPlotEnter.append('g')\n .classed('underlayer', true);\n const accuracyUnderlayerEnter = accuracyPlotEnter.append('g')\n .classed('underlayer', true);\n // MERGE\n const evidenceUnderlayerMerge = evidencePlotMerge.select('.underlayer');\n const densityUnderlayerMerge = densityPlotMerge.select('.underlayer');\n const accuracyUnderlayerMerge = accuracyPlotMerge.select('.underlayer');\n\n // Contents\n // ENTER\n evidencePlotEnter.append('g')\n .classed('content', true)\n .append('g').classed('paths', true);\n const densityContentEnter = densityPlotEnter.append('g')\n .classed('content', true);\n accuracyPlotEnter.append('g')\n .classed('content', true);\n // MERGE\n const evidenceContentMerge = evidencePlotMerge.select('.content');\n const densityContentMerge = densityPlotMerge.select('.content');\n const accuracyContentMerge = accuracyPlotMerge.select('.content');\n\n // Overlayers\n // ENTER\n evidencePlotEnter.append('g')\n .classed('overlayer', true);\n densityPlotEnter.append('g')\n .classed('overlayer', true);\n accuracyPlotEnter.append('g')\n .classed('overlayer', true);\n // MERGE\n const evidenceOverlayerMerge = evidencePlotMerge.select('.overlayer');\n const densityOverlayerMerge = densityPlotMerge.select('.overlayer');\n // const accuracyOverlayerMerge = accuracyPlotMerge.select('.overlayer');\n\n //\n // UNDERLAYERS\n //\n\n // Backgrounds\n // ENTER\n evidenceUnderlayerEnter.append('rect')\n .classed('background', true);\n densityUnderlayerEnter.append('rect')\n .classed('background', true);\n // MERGE\n evidenceUnderlayerMerge.select('.background')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('y', evidenceScale(this.bounds.upper))\n .attr('height', evidenceScale(this.bounds.lower) - evidenceScale(this.bounds.upper))\n .attr('width', timeWidth);\n densityUnderlayerMerge.select('.background')\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('height', densityHeight)\n .attr('width', timeWidth);\n\n // X Axes (Time)\n // ENTER\n densityUnderlayerEnter\n .filter((datum) => { return datum.outcome === 'error'; })\n .append('g')\n .classed('axis time', true);\n // MERGE\n const timeScaleMerge = densityUnderlayerMerge\n .filter((datum) => { return datum.outcome === 'error'; })\n .select('.axis.time')\n .attr('transform', `translate(0, ${densityHeight + (0.25 * this.rem)})`);\n const timeScaleTransition = timeScaleMerge.transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .call(d3.axisBottom(timeScale))\n .attr('font-size', null)\n .attr('font-family', null);\n timeScaleTransition.selectAll('line, path')\n .attr('stroke', null);\n\n // X Axes Titles\n // ENTER\n const timeTitleEnter = densityUnderlayerEnter\n .filter((datum) => { return datum.outcome === 'error'; })\n .append('text')\n .classed('title time', true)\n .attr('text-anchor', 'middle');\n timeTitleEnter.append('tspan')\n .classed('name', true)\n .text('Time (ms)');\n // MERGE\n densityUnderlayerMerge\n .filter((datum) => { return datum.outcome === 'error'; })\n .select('.title.time')\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .attr(\n 'transform',\n `translate(${(timeWidth / 2)}, ${(densityHeight + (2.5 * this.rem))})`,\n );\n\n // Y Axes (Evidence, Density, Accuracy)\n // ENTER\n evidenceUnderlayerEnter.append('g')\n .classed('axis evidence', true);\n densityUnderlayerEnter.append('g')\n .attr('class', (datum) => { return `axis density ${datum.outcome}`; });\n accuracyUnderlayerEnter.append('g')\n .classed('axis accuracy', true);\n // MERGE\n const evidenceScaleMerge = evidenceUnderlayerMerge.select('.axis.evidence')\n .attr('transform', `translate(${-0.25 * this.rem}, 0)`);\n const densityScaleMerge = densityUnderlayerMerge.select('.axis.density')\n .attr('transform', `translate(${-0.25 * this.rem}, 0)`);\n const accuracyScaleMerge = accuracyUnderlayerMerge.select('.axis.accuracy')\n .attr('transform', `translate(${accuracyWidth + (0.25 * this.rem)}, 0)`);\n const evidenceScaleTransition = evidenceScaleMerge.transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .call(d3.axisLeft(evidenceScale))\n .attr('font-size', null)\n .attr('font-family', null);\n const densityScaleTransition = densityScaleMerge.transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .each((datum, index, elements) => {\n d3.axisLeft(datum.densityScale).ticks(2)(d3.select(elements[index]));\n })\n .attr('font-size', null)\n .attr('font-family', null);\n const accuracyScaleTransition = accuracyScaleMerge.transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .call(d3.axisRight(accuracyScale))\n .attr('font-size', null)\n .attr('font-family', null);\n evidenceScaleTransition.selectAll('line, path')\n .attr('stroke', null);\n densityScaleTransition.selectAll('line, path')\n .attr('stroke', null);\n accuracyScaleTransition.selectAll('line, path')\n .attr('stroke', null);\n\n // Y Axes Titles (Evidence & Density)\n // ENTER\n const evidenceTitleEnter = evidenceUnderlayerEnter.append('text')\n .classed('title evidence', true)\n .attr('text-anchor', 'middle');\n const densityTitleEnter = densityUnderlayerEnter.append('text')\n .attr('class', (datum) => { return `title density ${datum.outcome}`; })\n .attr('text-anchor', 'middle');\n const accuracyTitleEnter = accuracyUnderlayerEnter.append('text')\n .classed('title accuracy', true)\n .attr('text-anchor', 'middle');\n evidenceTitleEnter.append('tspan')\n .classed('name', true)\n .text('Evidence');\n densityTitleEnter.append('tspan')\n .classed('name', true)\n .text('Density');\n accuracyTitleEnter.append('tspan')\n .classed('name', true)\n .text('Accuracy');\n // MERGE\n evidenceUnderlayerMerge.select('.title.evidence')\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('transform', `translate(${-2.5 * this.rem}, ${(evidenceHeight / 2)})rotate(-90)`);\n densityUnderlayerMerge.select('.title.density')\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('transform', `translate(${-2.5 * this.rem}, ${(densityHeight / 2)})rotate(-90)`);\n accuracyUnderlayerMerge.select('.title.accuracy')\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('transform', `translate(${accuracyWidth + 2.25 * this.rem}, ${(height / 2)})rotate(90)`);\n\n //\n // CONTENTS\n //\n\n // Paths\n // DATA-JOIN\n const pathUpdate = evidenceContentMerge.select('.paths').selectAll('.path')\n .data(\n this.data.trials.filter((trial) => { return trial.path !== undefined; }),\n );\n // ENTER\n const rtLabel = d3.local();\n const pathEnter = pathUpdate.enter().append('g')\n .classed('path', true)\n .attr('data-new-trial-ease-time', 0)\n .on('pointerenter', (event, datum) => {\n if (!this.drag) {\n d3.select(event.currentTarget)\n .classed('highlight', true)\n .raise();\n const myRtLabel = evidenceOverlayerMerge.append('g')\n .classed(`rt-label ${datum.outcome}`, true);\n const rect = myRtLabel.append('rect');\n const text = myRtLabel.append('text')\n .text(`RT = ${datum.rt.toFixed()}`)\n .attr('x', timeScale(datum.rt))\n .attr('y', datum.outcome === 'correct'\n ? evidenceScale(this.bounds.upper) - this.rem * 0.25\n : evidenceScale(this.bounds.lower) + this.rem * 0.125);\n const bbox = text.node().getBBox();\n rect\n .attr('x', bbox.x - this.rem * 0.125)\n .attr('y', bbox.y + this.rem * 0.125)\n .attr('width', bbox.width + this.rem * 0.25)\n .attr('height', bbox.height - this.rem * 0.25);\n rtLabel.set(event.currentTarget, myRtLabel);\n }\n })\n .on('pointerout', (event, datum) => {\n if (!this.drag) {\n d3.select(event.currentTarget)\n .classed('highlight', false)\n .lower();\n event.currentTarget.parentNode.insertBefore(\n event.currentTarget,\n event.currentTarget.parentNode.children[datum.index],\n );\n rtLabel.get(event.currentTarget).remove();\n }\n });\n pathEnter.append('path')\n .classed('curve', true)\n .attr('clip-path', 'url(#clip-evidence)')\n .attr('pathLength', 1)\n .attr('stroke-dashoffset', 1);\n // MERGE\n const pathMerge = pathEnter.merge(pathUpdate)\n .attr('class', (datum) => {\n return `path ${datum.outcome}`;\n });\n pathMerge.select('.curve')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('stroke', (datum) => {\n return this.getComputedStyleValue(`---color-${datum.outcome}`);\n })\n .attrTween('d', (datum, index, elements) => {\n const element = elements[index];\n const interpolateA = d3.interpolate(\n (element.a !== undefined) ? element.a : this.a,\n this.a,\n );\n const interpolateZ = d3.interpolate(\n (element.z !== undefined) ? element.z : this.z,\n this.z,\n );\n const interpolateV = d3.interpolate(\n (element.v !== undefined) ? element.v : this.v,\n this.v,\n );\n const interpolateT0 = d3.interpolate(\n (element.t0 !== undefined) ? element.t0 : this.t0,\n this.t0,\n );\n return (time) => {\n element.a = interpolateA(time);\n element.z = interpolateZ(time);\n element.v = interpolateV(time);\n element.t0 = interpolateT0(time);\n const path = this.alignPath(datum.seed, element.a, element.z, element.v, element.t0);\n return evidenceLine(path);\n };\n });\n // MERGE - Active Animate Paths\n const pathMergeNewActive = pathMerge.filter((datum) => {\n return (datum.animate && !this.paused);\n });\n if (!pathMergeNewActive.empty()) {\n const easeTime = pathMergeNewActive.attr('data-new-trial-ease-time');\n const scaleIn = (time) => {\n return d3.scaleLinear().domain([0, 1]).range([easeTime, 1])(time);\n };\n const scaleOutGenerator = (easeFunction) => {\n return (time) => {\n return d3.scaleLinear()\n .domain([easeFunction(easeTime), 1]).range([0, 1])(easeFunction(time));\n };\n };\n pathMergeNewActive\n .classed('animate', true)\n .select('.curve')\n .attr('stroke-dasharray', 1);\n pathMergeNewActive\n .transition('new')\n .duration((datum) => {\n // scale the RT for viewing pleasure\n return Math.floor((datum.rt * 1.5) * (1 - easeTime));\n })\n .ease(scaleIn)\n .attr('data-new-trial-ease-time', 1)\n .select('.curve')\n .attrTween('stroke-dashoffset', (datum, index, elements) => {\n const element = elements[index];\n const interpolator = d3.interpolate(\n element.getAttribute('stroke-dashoffset'),\n 0,\n );\n return (time) => { return interpolator(scaleOutGenerator(d3.easeLinear)(time)); };\n })\n .on('end', (datum, index, elements) => {\n const element = elements[index];\n d3.select(element.parentElement)\n .classed('animate', false)\n .attr('data-new-trial-ease-time', null);\n datum.animate = false;\n this.animate = false;\n this.alignState();\n this.requestUpdate();\n this.dispatchEvent(new CustomEvent('accumulable-response', {\n detail: {\n outcome: datum.outcome,\n data: this.data,\n model: this.model,\n },\n bubbles: true,\n }));\n });\n }\n // MERGE - Paused Animate Paths\n const pathMergeNewPaused = pathMerge.filter((datum) => {\n return (datum.animate && this.paused);\n });\n if (!pathMergeNewPaused.empty()) {\n const easeTime = pathMergeNewPaused.attr('data-new-trial-ease-time');\n pathMergeNewPaused\n .classed('animate', true)\n .select('.curve')\n .attr('stroke-dasharray', 1)\n .attr('stroke-dashoffset', () => {\n const interpolator = d3.interpolate(1, 0);\n return interpolator(d3.easeLinear(easeTime));\n });\n }\n // MERGE - Non-Animate Paths\n pathMerge.filter((datum) => { return (!datum.animate); })\n .attr('data-new-trial-ease-time', null);\n // EXIT\n pathUpdate.exit().remove();\n\n // Distributions\n // ENTER\n const distEnter = densityContentEnter.append('g')\n .attr('class', (datum) => { return `dist ${datum.outcome}`; });\n distEnter.append('path')\n .classed('curve', true);\n // MERGE\n densityContentMerge.select('.dist').select('.curve')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attrTween('d', (datum, index, elements) => {\n const element = elements[index];\n const interpolateA = d3.interpolate(\n (element.a !== undefined) ? element.a : this.a,\n this.a,\n );\n const interpolateZ = d3.interpolate(\n (element.z !== undefined) ? element.z : this.z,\n this.z,\n );\n const interpolateV = d3.interpolate(\n (element.v !== undefined) ? element.v : this.v,\n this.v,\n );\n const interpolateT0 = d3.interpolate(\n (element.t0 !== undefined) ? element.t0 : this.t0,\n this.t0,\n );\n return (time) => {\n element.a = interpolateA(time);\n element.z = interpolateZ(time);\n element.v = interpolateV(time);\n element.t0 = interpolateT0(time);\n const path = datum.alignDistribution(element.a, element.z, element.v, element.t0);\n return datum.densityLine(path);\n };\n });\n\n // RTs\n // DATA-JOIN\n const rtUpdate = evidenceContentMerge.selectAll('.rt')\n .data(this.data.trials);\n // ENTER\n const rtEnter = rtUpdate.enter().append('g');\n rtEnter.append('line')\n .classed('mark', true)\n .attr('x1', (datum) => {\n return timeScale(datum.rt);\n })\n .attr('x2', (datum) => {\n return timeScale(datum.rt);\n })\n .attr('y1', (datum) => {\n return (datum.outcome === 'correct')\n ? evidenceScale(1) - 0.125 * this.rem\n : evidenceScale(-1) + 0.125 * this.rem;\n })\n .attr('y2', (datum) => {\n return (datum.outcome === 'correct')\n ? evidenceScale(1) - 0.675 * this.rem\n : evidenceScale(-1) + 0.675 * this.rem;\n });\n // MERGE\n const rtMerge = rtEnter.merge(rtUpdate)\n .attr('class', (datum) => { return `rt ${datum.outcome}`; });\n rtMerge.filter((datum) => { return (!datum.animate); }).select('.mark')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('stroke', (datum) => {\n return this.getComputedStyleValue(`---color-${datum.outcome}`);\n })\n .attr('x1', (datum) => {\n return timeScale(datum.rt);\n })\n .attr('x2', (datum) => {\n return timeScale(datum.rt);\n })\n .attr('y1', (datum) => {\n return (datum.outcome === 'correct')\n ? evidenceScale(1) - 0.125 * this.rem\n : evidenceScale(-1) + 0.125 * this.rem;\n })\n .attr('y2', (datum) => {\n return (datum.outcome === 'correct')\n ? evidenceScale(1) - 0.675 * this.rem\n : evidenceScale(-1) + 0.675 * this.rem;\n });\n // EXIT\n rtUpdate.exit().remove();\n\n // Model Accuracy\n // DATA-JOIN\n const accuracyUpdate = accuracyContentMerge.selectAll('.accuracy.model')\n .data(\n [this.model.accuracy, 1 - this.model.accuracy],\n );\n // ENTER\n const accuracyEnter = accuracyUpdate.enter().append('g')\n .attr('class', (_, index) => {\n return `accuracy model ${(index === 0) ? 'correct' : 'error'}`;\n });\n accuracyEnter.append('rect')\n .classed('bar', true)\n .attr('x', 0);\n // MERGE\n accuracyEnter.merge(accuracyUpdate).select('rect')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n // ## Tween based on params?\n .attr('y', (datum, index) => {\n return (index === 0) ? accuracyScale(0) : accuracyScale(1 - datum);\n })\n .attr('width', accuracyWidth)\n .attr('height', (datum) => {\n return accuracyScale(datum);\n });\n // EXIT\n accuracyUpdate.exit().remove();\n\n // Data Accuracy\n // DATA-JOIN\n const dataAccuracyUpdate = accuracyContentMerge.selectAll('.accuracy.data')\n .data(\n !Number.isNaN(this.data.accuracy) ? [this.data.accuracy] : [],\n );\n // ENTER\n const dataAccuracyEnter = dataAccuracyUpdate.enter().append('g')\n .classed('accuracy data', true);\n dataAccuracyEnter.append('line')\n .classed('mark', true);\n // MERGE\n const dataAccuracyMerge = dataAccuracyEnter.merge(dataAccuracyUpdate)\n .attr('class', (datum) => {\n return `accuracy data ${(datum < this.model.accuracy.correct) ? 'correct' : 'error'}`;\n });\n dataAccuracyMerge.select('.mark')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n // ## Tween based on params?\n .attr('x1', 0 + 0.25 * this.rem)\n .attr('x2', accuracyWidth - 0.25 * this.rem)\n .attr('y1', (datum) => {\n return accuracyScale(datum) - 1;\n })\n .attr('y2', (datum) => {\n return accuracyScale(datum) - 1;\n });\n // EXIT\n dataAccuracyUpdate.exit().remove();\n\n //\n // OVERLAYERS\n //\n\n // Boundaries\n // DATA-JOIN\n const boundaryUpdate = evidenceOverlayerMerge.selectAll('.boundary')\n .data([\n {bound: 'upper', value: this.bounds.upper},\n {bound: 'lower', value: this.bounds.lower},\n ]);\n // ENTER\n const boundaryEnter = boundaryUpdate.enter().append('g')\n .attr('class', (_, index) => {\n return `boundary ${(index === 0) ? 'correct' : 'error'}`;\n });\n boundaryEnter.append('line')\n .classed('line', true);\n boundaryEnter.append('line')\n .classed('line touch', true);\n // MERGE\n const boundaryMerge = boundaryEnter.merge(boundaryUpdate)\n .attr('tabindex', this.interactive ? 0 : null)\n .classed('interactive', this.interactive)\n .on('keydown', this.interactive\n ? (event, datum) => {\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n let {a} = this;\n switch (event.key) {\n case 'ArrowUp':\n a += (datum.bound === 'upper')\n ? event.shiftKey\n ? DDMMath.a.STEP\n : DDMMath.a.JUMP\n : event.shiftKey\n ? -DDMMath.a.STEP\n : -DDMMath.a.JUMP;\n break;\n case 'ArrowDown':\n a += (datum.bound === 'upper')\n ? event.shiftKey\n ? -DDMMath.a.STEP\n : -DDMMath.a.JUMP\n : event.shiftKey\n ? DDMMath.a.STEP\n : DDMMath.a.JUMP;\n break;\n default:\n }\n // Clamp a\n a = (a < DDMMath.a.MIN)\n ? DDMMath.a.MIN\n : (a > DDMMath.a.MAX)\n ? DDMMath.a.MAX\n : a;\n this.a = a;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-a', {\n detail: {\n a: this.a,\n },\n bubbles: true,\n }));\n event.preventDefault();\n }\n }\n : null);\n if (\n this.firstUpdate\n || changedProperties.has('interactive')\n ) {\n if (this.interactive) {\n boundaryMerge.call(dragBoundary);\n } else {\n boundaryMerge.on('.drag', null);\n }\n }\n boundaryMerge.select('.line')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.min))\n .attr('x2', timeScale(this.scale.time.max))\n .attr('y1', (datum) => {\n return evidenceScale(datum.value);\n })\n .attr('y2', (datum) => {\n return evidenceScale(datum.value);\n });\n boundaryMerge.select('.line.touch')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.min))\n .attr('x2', timeScale(this.scale.time.max))\n .attr('y1', (datum) => {\n return evidenceScale(datum.value);\n })\n .attr('y2', (datum) => {\n return evidenceScale(datum.value);\n });\n // EXIT\n boundaryUpdate.exit().remove();\n\n // Drift Rate\n // DATA-JOIN\n const driftUpdate = evidenceOverlayerMerge.selectAll('.drift')\n .data([\n {v: this.v, t0: this.t0, startingPoint: this.startingPoint},\n ]);\n // ENTER\n const driftEnter = driftUpdate.enter().append('g')\n .classed('drift', true);\n driftEnter.append('line')\n .classed('line', true);\n driftEnter.append('line')\n .classed('line touch', true);\n driftEnter.append('path')\n .classed('arrow', true);\n driftEnter.append('path')\n .classed('arrow touch', true);\n // MERGE\n const driftMerge = driftEnter.merge(driftUpdate)\n .attr('tabindex', this.interactive ? 0 : null)\n .classed('interactive', this.interactive)\n .on('keydown', this.interactive\n ? (event) => {\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n let {v} = this;\n switch (event.key) {\n case 'ArrowUp':\n v += event.shiftKey\n ? DDMMath.v.STEP\n : DDMMath.v.JUMP;\n break;\n case 'ArrowDown':\n v -= event.shiftKey\n ? DDMMath.v.STEP\n : DDMMath.v.JUMP;\n break;\n default:\n }\n // Clamp z\n v = (v < DDMMath.v.MIN)\n ? DDMMath.v.MIN\n : (v > DDMMath.v.MAX)\n ? DDMMath.v.MAX\n : v;\n this.v = v;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-v', {\n detail: {\n v: this.v,\n },\n bubbles: true,\n }));\n event.preventDefault();\n }\n }\n : null);\n if (\n this.firstUpdate\n || changedProperties.has('interactive')\n ) {\n if (this.interactive) {\n driftMerge.call(dragDrift);\n } else {\n driftMerge.on('.drag', null);\n }\n }\n const scaleRatio = (evidenceScale(0) - evidenceScale(1)) / (timeScale(1) - timeScale(0));\n driftMerge\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('transform', (datum) => {\n return `translate(${timeScale(datum.t0)}, ${evidenceScale(datum.startingPoint)})\n rotate(${-Math.atan((datum.v / 1000) * scaleRatio) * (180 / Math.PI)})`;\n });\n driftMerge.select('.line')\n .attr('x2', timeScale(200));\n driftMerge.select('.line.touch')\n .attr('x2', timeScale(200));\n driftMerge.select('.arrow')\n .attr('d', `\n M ${timeScale(200) - this.rem * 0.5},${-this.rem * 0.5}\n l ${this.rem * 0.5},${this.rem * 0.5}\n l ${-this.rem * 0.5},${this.rem * 0.5}\n `);\n driftMerge.select('.arrow.touch')\n .attr('d', `\n M ${timeScale(200) - this.rem * 0.5},${-this.rem * 0.5}\n l ${this.rem * 0.5},${this.rem * 0.5}\n l ${-this.rem * 0.5},${this.rem * 0.5}\n `);\n // EXIT\n driftUpdate.exit().remove();\n\n // Nondecision Time/Starting Point\n // DATA-JOIN\n const t0zUpdate = evidenceOverlayerMerge.selectAll('.t0z')\n .data([\n {t0: this.t0, startingPoint: this.startingPoint},\n ]);\n // ENTER\n const t0zEnter = t0zUpdate.enter().append('g')\n .classed('t0z', true);\n t0zEnter.append('line')\n .classed('line', true);\n t0zEnter.append('line')\n .classed('line touch', true);\n t0zEnter.append('circle')\n .classed('point touch', true);\n // MERGE\n const t0zMerge = t0zEnter.merge(t0zUpdate)\n .attr('tabindex', this.interactive ? 0 : null)\n .classed('interactive', this.interactive)\n .on('keydown', this.interactive\n ? (event) => {\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n let {z} = this;\n switch (event.key) {\n case 'ArrowUp':\n z += event.shiftKey\n ? DDMMath.z.STEP\n : DDMMath.z.JUMP;\n break;\n case 'ArrowDown':\n z -= event.shiftKey\n ? DDMMath.z.STEP\n : DDMMath.z.JUMP;\n break;\n default:\n }\n // Clamp z\n z = (z < DDMMath.z.MIN)\n ? DDMMath.z.MIN\n : (z > DDMMath.z.MAX)\n ? DDMMath.z.MAX\n : z;\n this.z = z;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-z', {\n detail: {\n z: this.z,\n },\n bubbles: true,\n }));\n event.preventDefault();\n }\n if (['ArrowLeft', 'ArrowRight'].includes(event.key)) {\n let t0 = this.t0; /* eslint-disable-line prefer-destructuring */\n switch (event.key) {\n case 'ArrowRight':\n t0 += event.shiftKey\n ? DDMMath.t0.STEP\n : DDMMath.t0.JUMP;\n break;\n case 'ArrowLeft':\n t0 -= event.shiftKey\n ? DDMMath.t0.STEP\n : DDMMath.t0.JUMP;\n break;\n default:\n }\n // Clamp t0\n t0 = (t0 < DDMMath.t0.MIN)\n ? DDMMath.t0.MIN\n : (t0 > DDMMath.t0.MAX)\n ? DDMMath.t0.MAX\n : t0;\n this.t0 = t0;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-t0', {\n detail: {\n t0: this.t0,\n },\n bubbles: true,\n }));\n event.preventDefault();\n }\n }\n : null);\n if (\n this.firstUpdate\n || changedProperties.has('interactive')\n ) {\n if (this.interactive) {\n t0zMerge.call(dragT0z);\n } else {\n t0zMerge.on('.drag', null);\n }\n }\n t0zMerge.select('.line')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(0))\n .attr('x2', (datum) => { return timeScale(datum.t0); })\n .attr('y1', (datum) => { return evidenceScale(datum.startingPoint); })\n .attr('y2', (datum) => { return evidenceScale(datum.startingPoint); });\n t0zMerge.select('.line.touch')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(0))\n .attr('x2', (datum) => { return timeScale(datum.t0); })\n .attr('y1', (datum) => { return evidenceScale(datum.startingPoint); })\n .attr('y2', (datum) => { return evidenceScale(datum.startingPoint); });\n t0zMerge.select('.point')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('cx', (datum) => { return timeScale(datum.t0); })\n .attr('cy', (datum) => { return evidenceScale(datum.startingPoint); });\n // EXIT\n t0zUpdate.exit().remove();\n\n // Measures\n const markerCorrection = 2;\n\n // a Measure\n // DATA-JOIN\n const aUpdate = evidenceOverlayerMerge.selectAll('.measure.a')\n .data(this.measures ? [this.a] : []);\n // ENTER\n const aEnter = aUpdate.enter().append('g')\n .classed('measure a', true);\n aEnter.append('line')\n .classed('line', true);\n aEnter.append('line')\n .classed('markers', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', 'url(#measure-arrow-a)')\n .attr('marker-end', 'url(#measure-arrow-a)');\n const aLabel = aEnter.append('text')\n .classed('label', true);\n aLabel.append('tspan')\n .classed('a math-var', true)\n .text('a');\n aLabel.append('tspan')\n .classed('equals', true)\n .text(' = ');\n aLabel.append('tspan')\n .classed('value', true);\n // MERGE\n const aLength = Math.abs(evidenceScale(this.bounds.upper) - evidenceScale(this.bounds.lower));\n const aShort = aLength <= (markerCorrection * 2);\n const aMerge = aEnter.merge(aUpdate);\n aMerge.select('.line')\n .classed('short', aShort)\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.max) - this.rem * 0.75)\n .attr('y1', evidenceScale(this.bounds.upper) + markerCorrection)\n .attr('x2', timeScale(this.scale.time.max) - this.rem * 0.75)\n .attr('y2', evidenceScale(this.bounds.lower) - markerCorrection);\n aMerge.select('.markers')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.max) - this.rem * 0.75)\n .attr('y1', evidenceScale(this.bounds.upper))\n .attr('x2', timeScale(this.scale.time.max) - this.rem * 0.75)\n .attr('y2', evidenceScale(this.bounds.lower));\n const aLabelMerge = aMerge.select('.label')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x', timeScale(this.scale.time.max))\n .attr('y', evidenceScale(this.bounds.upper) - this.rem * 0.25);\n aLabelMerge.select('.value')\n .text(d3.format('.2f')(this.a));\n // EXIT\n aUpdate.exit().remove();\n\n // z Measure\n // DATA-JOIN\n const zUpdate = evidenceOverlayerMerge.selectAll('.measure.z')\n .data(this.measures ? [this.z] : []);\n // ENTER\n const zEnter = zUpdate.enter().append('g')\n .classed('measure z', true);\n zEnter.append('line')\n .classed('line', true);\n zEnter.append('line')\n .classed('markers', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', 'url(#measure-arrow-z)')\n .attr('marker-end', 'url(#measure-arrow-z)');\n const zLabel = zEnter.append('text')\n .classed('label', true);\n zLabel.append('tspan')\n .classed('z math-var', true)\n .text('z');\n zLabel.append('tspan')\n .classed('equals', true)\n .text(' = ');\n zLabel.append('tspan')\n .classed('value', true);\n // MERGE\n const zLength = Math.abs(evidenceScale(this.startingPoint) - evidenceScale(this.bounds.lower));\n const zShort = zLength <= (markerCorrection * 2);\n const zMerge = zEnter.merge(zUpdate);\n zMerge.select('.line')\n .classed('short', zShort)\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.min) + this.rem * 0.75)\n .attr('y1', evidenceScale(this.startingPoint) + markerCorrection)\n .attr('x2', timeScale(this.scale.time.min) + this.rem * 0.75)\n .attr('y2', evidenceScale(this.bounds.lower) - markerCorrection);\n zMerge.select('.markers')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.min) + this.rem * 0.75)\n .attr('y1', evidenceScale(this.startingPoint))\n .attr('x2', timeScale(this.scale.time.min) + this.rem * 0.75)\n .attr('y2', evidenceScale(this.bounds.lower));\n const zLabelMerge = zMerge.select('.label')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x', timeScale(this.scale.time.min))\n .attr('y', evidenceScale(this.bounds.lower) + this.rem * 0.125);\n zLabelMerge.select('.value')\n .text(d3.format('.0%')(this.z));\n // EXIT\n zUpdate.exit().remove();\n\n // v Measure\n // DATA-JOIN\n const vUpdate = evidenceOverlayerMerge.selectAll('.measure.v')\n .data(this.measures ? [this.v] : []);\n // ENTER\n const vEnter = vUpdate.enter().append('g')\n .classed('measure v', true);\n vEnter.append('path')\n .classed('line', true);\n vEnter.append('path')\n .classed('markers', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', 'url(#measure-capped-arrow-v)')\n .attr('marker-end', 'url(#measure-capped-arrow-v)');\n const vLabel = vEnter.append('text')\n .classed('label', true);\n vLabel.append('tspan')\n .classed('v math-var', true)\n .text('v');\n vLabel.append('tspan')\n .classed('equals', true)\n .text(' = ');\n vLabel.append('tspan')\n .classed('value', true);\n // MERGE\n // Full path\n const driftHypotenuse = timeScale(200) - timeScale(0) + this.rem * 0.75;\n const driftAngle = Math.atan((this.v / 1000) * scaleRatio);\n const driftX = Math.cos(driftAngle) * driftHypotenuse;\n const driftY = Math.sin(driftAngle) * driftHypotenuse;\n // Corrected path\n const driftCorrection = markerCorrection / driftHypotenuse;\n const driftAngleCorrected = Math.atan((this.v / 1000) * scaleRatio) - driftCorrection;\n const driftStartX = Math.cos(driftCorrection) * driftHypotenuse;\n const driftStartY = Math.sin(driftCorrection) * driftHypotenuse;\n const driftEndX = Math.cos(driftAngleCorrected) * driftHypotenuse;\n const driftEndY = Math.sin(driftAngleCorrected) * driftHypotenuse;\n // Short path?\n const vLength = driftAngleCorrected * driftHypotenuse;\n const vShort = vLength <= (markerCorrection * 2);\n const vMerge = vEnter.merge(vUpdate);\n vMerge.select('.line')\n .classed('short', vShort)\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('d', `\n M ${timeScale(this.t0) + driftStartX}, ${evidenceScale(this.startingPoint) - driftStartY}\n A ${timeScale(200) - timeScale(0) + this.rem * 0.75} ${timeScale(200) - timeScale(0) + this.rem * 0.75} 0 0 0 ${timeScale(this.t0) + driftEndX} ${evidenceScale(this.startingPoint) - driftEndY}\n `);\n vMerge.select('.markers')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('d', `\n M ${timeScale(this.t0 + 200) + this.rem * 0.75}, ${evidenceScale(this.startingPoint)}\n A ${timeScale(200) - timeScale(0) + this.rem * 0.75} ${timeScale(200) - timeScale(0) + this.rem * 0.75} 0 0 0 ${timeScale(this.t0) + driftX} ${evidenceScale(this.startingPoint) - driftY}\n `);\n const vLabelMerge = vMerge.select('.label')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x', timeScale(this.t0 + 200) + this.rem * 0.5)\n .attr('y', evidenceScale(this.bounds.upper) - this.rem * 0.25);\n vLabelMerge.select('.value')\n .text(d3.format('.2f')(this.v));\n // EXIT\n vUpdate.exit().remove();\n\n // t0 Measure\n // DATA-JOIN\n const t0Update = evidenceOverlayerMerge.selectAll('.measure.t0')\n .data(this.measures ? [this.t0] : []);\n // ENTER\n const t0Enter = t0Update.enter().append('g')\n .classed('measure t0', true);\n t0Enter.append('line')\n .classed('line', true);\n t0Enter.append('line')\n .classed('markers', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', 'url(#measure-arrow-t0)')\n .attr('marker-end', 'url(#measure-capped-arrow-t0)');\n const t0Label = t0Enter.append('text')\n .classed('label', true);\n t0Label.append('tspan')\n .classed('t0 math-var', true)\n .text('t₀');\n t0Label.append('tspan')\n .classed('equals', true)\n .text(' = ');\n t0Label.append('tspan')\n .classed('value', true);\n // MERGE\n const t0Length = Math.abs(timeScale(0) - timeScale(this.t0));\n const t0Short = t0Length <= (markerCorrection * 2);\n const t0Merge = t0Enter.merge(t0Update);\n t0Merge.select('.line')\n .classed('short', t0Short)\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(0) + markerCorrection)\n .attr('y1', evidenceScale(this.startingPoint) - this.rem * 0.75)\n .attr('x2', timeScale(this.t0) - markerCorrection)\n .attr('y2', evidenceScale(this.startingPoint) - this.rem * 0.75);\n t0Merge.select('.markers')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(0))\n .attr('y1', evidenceScale(this.startingPoint) - this.rem * 0.75)\n .attr('x2', timeScale(this.t0))\n .attr('y2', evidenceScale(this.startingPoint) - this.rem * 0.75);\n const t0LabelMerge = t0Merge.select('.label')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x', timeScale(this.t0) + this.rem * 0.25)\n .attr('y', evidenceScale(this.bounds.upper) - this.rem * 0.25);\n t0LabelMerge.select('.value')\n .text(d3.format('d')(this.t0));\n // EXIT\n t0Update.exit().remove();\n\n // Means\n // DATA-JOIN\n const meanUpdate = densityOverlayerMerge.selectAll('.model.mean')\n .data((datum) => {\n return this.means ? [datum] : [];\n });\n // ENTER\n const meanEnter = meanUpdate.enter().append('g')\n .attr('class', (datum) => { return `model mean ${datum.outcome}`; });\n meanEnter.append('line')\n .classed('indicator', true);\n // MERGE\n const meanMerge = meanEnter.merge(meanUpdate);\n meanMerge.select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', (datum) => { return timeScale(datum.model.meanRT); })\n .attr('x2', (datum) => { return timeScale(datum.model.meanRT); })\n .attr('y1', (datum) => { return datum.densityScale(this.scale.density.min); })\n .attr('y2', (datum) => { return datum.densityScale(this.scale.density.max); });\n // EXIT\n meanUpdate.exit().remove();\n\n // Data Means\n // DATA-JOIN\n const dataMeanUpdate = densityOverlayerMerge.selectAll('.data.mean')\n .data((datum) => {\n return (this.means && !Number.isNaN(datum.data.meanRT)) ? [datum] : [];\n });\n // ENTER\n const dataMeanEnter = dataMeanUpdate.enter().append('g')\n .attr('class', (datum) => { return `data mean ${datum.outcome}`; });\n dataMeanEnter.append('line')\n .classed('indicator', true)\n .attr('y1', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.125 : -0.125) * this.rem;\n })\n .attr('y2', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.675 : -0.675) * this.rem;\n });\n // MERGE\n const dataMeanMerge = dataMeanEnter.merge(dataMeanUpdate);\n dataMeanMerge.select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', (datum) => { return timeScale(datum.data.meanRT); })\n .attr('x2', (datum) => { return timeScale(datum.data.meanRT); })\n .attr('y1', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.125 : -0.125) * this.rem;\n })\n .attr('y2', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.675 : -0.675) * this.rem;\n });\n // EXIT\n dataMeanUpdate.exit().select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', 0)\n .attr('x2', 0)\n .on('end', (datum, index, elements) => {\n d3.select(elements[index].parentElement).remove();\n });\n\n // Standard Deviations\n // DATA-JOIN\n const sdUpdate = densityOverlayerMerge.selectAll('.model.sd')\n .data((datum) => {\n return this.sds ? [datum] : [];\n });\n // ENTER\n const sdEnter = sdUpdate.enter().append('g')\n .attr('class', (datum) => { return `model sd ${datum.outcome}`; });\n sdEnter.append('line')\n .classed('indicator', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', (datum) => { return `url(#model-sd-cap-${datum.outcome})`; })\n .attr('marker-end', (datum) => { return `url(#model-sd-cap-${datum.outcome})`; });\n // MERGE\n const sdMerge = sdEnter.merge(sdUpdate);\n sdMerge.select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', (datum) => { return timeScale(datum.model.meanRT - (datum.model.sdRT / 2)); })\n .attr('x2', (datum) => { return timeScale(datum.model.meanRT + (datum.model.sdRT / 2)); })\n .attr('y1', (datum) => { return datum.densityScale(5); })\n .attr('y2', (datum) => { return datum.densityScale(5); });\n // EXIT\n sdUpdate.exit().remove();\n\n // Data Standard Deviation\n // DATA-JOIN\n const dataSDUpdate = densityOverlayerMerge.selectAll('.data.sd')\n .data((datum) => {\n return (this.sds && !Number.isNaN(datum.data.meanRT) && !Number.isNaN(datum.data.sdRT))\n ? [datum]\n : [];\n });\n // ENTER\n const dataSDEnter = dataSDUpdate.enter().append('g')\n .attr('class', (datum) => { return `data sd ${datum.outcome}`; });\n dataSDEnter.append('line')\n .classed('indicator', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', (datum) => { return `url(#data-sd-cap-${datum.outcome})`; })\n .attr('marker-end', (datum) => { return `url(#data-sd-cap-${datum.outcome})`; })\n .attr('y1', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.375 : -0.375) * this.rem;\n })\n .attr('y2', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.375 : -0.375) * this.rem;\n });\n // MERGE\n const dataSDMerge = dataSDEnter.merge(dataSDUpdate);\n dataSDMerge.select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', (datum) => {\n return timeScale(datum.data.meanRT - (datum.data.sdRT / 2));\n })\n .attr('x2', (datum) => {\n return timeScale(datum.data.meanRT + (datum.data.sdRT / 2));\n })\n .attr('y1', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.375 : -0.375) * this.rem;\n })\n .attr('y2', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.375 : -0.375) * this.rem;\n });\n // EXIT\n dataSDUpdate.exit().select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', 0)\n .attr('x2', 0)\n .on('end', (datum, index, elements) => {\n d3.select(elements[index].parentElement).remove();\n });\n\n this.firstUpdate = false;\n }\n}\n\ncustomElements.define('ddm-model', DDMModel);\n","\nimport {html, css} from 'lit';\nimport * as d3 from 'd3';\n\nimport {DecidablesMixinResizeable} from '@decidables/decidables-elements';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n RDK2AFCTask element\n <rdk-2afc-task>\n\n Attributes:\n Dots; Coherence;\n # Direction, Speed, Lifetime\n*/\nexport default class RDK2AFCTask extends DecidablesMixinResizeable(AccumulableElement) {\n static get properties() {\n return {\n coherence: {\n attribute: 'coherence',\n type: Number,\n reflect: true,\n },\n count: {\n attribute: 'count',\n type: Number,\n reflect: true,\n },\n probability: {\n attribute: 'probability',\n type: Number,\n reflect: true,\n },\n duration: {\n attribute: 'duration',\n type: Number,\n reflect: true,\n },\n wait: {\n attribute: 'wait',\n type: Number,\n reflect: true,\n },\n iti: {\n attribute: 'iti',\n type: Number,\n reflect: true,\n },\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n running: {\n attribute: 'running',\n type: Boolean,\n reflect: true,\n },\n\n lifetime: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n speed: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.coherence = 0.5; // Proportion of dots moving coherently\n this.count = 100; // Number of dots\n this.probability = 0.5; // Probability of left (as opposed to right)\n this.duration = 2000; // Duration of stimulus in milliseconds\n this.wait = 2000; // Duration of wait period for response in milliseconds\n this.iti = 2000; // Duration of inter-trial interval in milliseconds\n this.trials = 5; // Number of trials per block\n this.running = false; // Currently executing block of trials\n\n // Properties\n this.lifetime = 400; // Lifetime of each dot in milliseconds\n this.speed = 50; // Rate of dot movement in pixels per second\n\n // Private\n this.firstUpdate = true;\n this.COHERENT = 0; // \"Constant\" for index to coherent dots\n this.RANDOM = 1; // \"Constant\" for index to random dots\n this.dots = [[], []]; // Array of array of dots\n this.trial = 0; // Count of current trial\n\n this.states = ['resetted', 'iti', 'stimulus', 'wait', 'ended']; // Possible states of task\n this.state = 'resetted'; // Current state of task\n\n this.baseTime = 0; // Real time, in milliseconds, that the current block started\n this.pauseTime = 0; // Real time, in milliseconds, that block was paused at\n this.startTime = 0; // Virtual time, in milliseconds, that current stage of trial started\n this.lastTime = 0; // Virtual time, in milliseconds, of the most recent frame\n\n this.LEFT = 180; // \"Constant\" for left stimulus direction\n this.RIGHT = 0; // \"Constant\" for right stimulus direction\n this.currentDirection = undefined; // Direction in degrees for current trial\n\n this.signals = ['left', 'right']; // Possible trial types\n this.signal = undefined; // Current trial type\n\n this.runner = undefined; // D3 Interval for frame timing\n this.xScale = undefined; // D3 Scale for x-axis\n this.yScale = undefined; // D3 Scale for y-axis\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n\n width: 10rem;\n height: 10rem;\n }\n\n .main {\n width: 100%;\n height: 100%;\n }\n\n .background {\n fill: var(---color-element-disabled);\n stroke: none;\n }\n\n .outline {\n fill: none;\n stroke: var(---color-element-emphasis);\n stroke-width: 2px;\n }\n\n .dot {\n r: 2px;\n }\n\n .dots.coherent {\n fill: var(---color-background);\n }\n\n .dots.random {\n fill: var(---color-background);\n }\n\n .fixation {\n stroke: var(---color-text);\n stroke-width: 2px;\n }\n\n .query {\n font-size: 1.75rem;\n font-weight: 600;\n }\n `,\n ];\n }\n\n render() { /* eslint-disable-line class-methods-use-this */\n return html``;\n }\n\n update(changedProperties) {\n super.update(changedProperties);\n\n // Bail out if we can't get the width/height/rem\n if (Number.isNaN(this.width) || Number.isNaN(this.height) || Number.isNaN(this.rem)) {\n return;\n }\n\n const elementWidth = this.width;\n const elementHeight = this.height;\n const elementSize = Math.min(elementWidth, elementHeight);\n\n const margin = {\n top: 0.25 * this.rem,\n bottom: 0.25 * this.rem,\n left: 0.25 * this.rem,\n right: 0.25 * this.rem,\n };\n const height = elementSize - (margin.top + margin.bottom);\n const width = elementSize - (margin.left + margin.right);\n\n // X Scale\n this.xScale = d3.scaleLinear()\n .domain([-1, 1])\n .range([0, width]);\n\n // Y Scale\n this.yScale = d3.scaleLinear()\n .domain([1, -1])\n .range([0, height]);\n\n // Svg\n // DATA-JOIN\n const svgUpdate = d3.select(this.renderRoot).selectAll('.main')\n .data([{\n width: this.width,\n height: this.height,\n rem: this.rem,\n }]);\n // ENTER\n const svgEnter = svgUpdate.enter().append('svg')\n .classed('main', true);\n // MERGE\n const svgMerge = svgEnter.merge(svgUpdate)\n .attr('viewBox', `0 0 ${elementSize} ${elementSize}`);\n\n // Clippath\n // ENTER\n svgEnter.append('clipPath')\n .attr('id', 'clip-rdk-task')\n .append('circle');\n // MERGE\n svgMerge.select('clipPath circle')\n .attr('cx', this.xScale(0))\n .attr('cy', this.yScale(0))\n .attr('r', this.xScale(1) - this.xScale(0));\n\n // Plot\n // ENTER\n const plotEnter = svgEnter.append('g')\n .classed('plot', true);\n // MERGE\n const plotMerge = svgMerge.select('.plot')\n .attr('transform', `translate(${margin.left}, ${margin.top})`);\n\n // Underlayer\n // ENTER\n const underlayerEnter = plotEnter.append('g')\n .classed('underlayer', true);\n // MERGE\n const underlayerMerge = plotMerge.select('.underlayer');\n\n // Background\n // ENTER\n underlayerEnter.append('circle')\n .classed('background', true);\n // MERGE\n underlayerMerge.select('.background')\n .attr('cx', this.xScale(0))\n .attr('cy', this.yScale(0))\n .attr('r', this.xScale(1) - this.xScale(0));\n\n // Content\n // ENTER\n plotEnter.append('g')\n .classed('content', true)\n .attr('clip-path', 'url(#clip-rdk-task)');\n // MERGE\n const contentMerge = plotMerge.select('.content');\n\n // Dot Groups\n // DATA-JOIN\n const dotsUpdate = contentMerge.selectAll('.dots')\n .data([[], []]);\n // ENTER\n dotsUpdate.enter().append('g')\n .classed('dots', true)\n .classed('coherent', (datum, index) => { return index === this.COHERENT; })\n .classed('random', (datum, index) => { return index === this.RANDOM; });\n\n // Overlayer\n // ENTER\n const overlayerEnter = plotEnter.append('g')\n .classed('overlayer', true);\n // MERGE\n const overlayerMerge = plotMerge.select('.overlayer');\n\n // Outline\n // ENTER\n overlayerEnter.append('circle')\n .classed('outline', true);\n // MERGE\n overlayerMerge.select('.outline')\n .attr('cx', this.xScale(0))\n .attr('cy', this.yScale(0))\n .attr('r', this.xScale(1) - this.yScale(0));\n\n // Start or stop trial block\n if (this.firstUpdate || changedProperties.has('running')) {\n if (this.running) {\n // (Re)Start\n if (this.pauseTime) {\n // Shift timeline forward as if paused time never happened\n this.baseTime += (d3.now() - this.pauseTime);\n this.pauseTime = 0;\n }\n this.runner = d3.interval(this.run.bind(this), 20); // FIXME??\n } else if (this.runner !== undefined) {\n // Pause\n this.runner.stop();\n this.pauseTime = d3.now();\n }\n }\n\n this.firstUpdate = false;\n }\n\n reset() {\n if (this.runner !== undefined) {\n this.runner.stop();\n }\n this.running = false;\n this.trial = 0;\n this.state = 'resetted';\n this.baseTime = 0;\n this.pauseTime = 0;\n this.startTime = 0;\n this.lastTime = 0;\n this.signal = undefined;\n this.currentDirection = undefined;\n\n const dotsUpdate = d3.select(this.renderRoot).select('.content').selectAll('.dots')\n .data([[], []]);\n const dotUpdate = dotsUpdate.selectAll('.dot')\n .data((datum) => { return datum; });\n dotUpdate.exit()\n .remove();\n\n const fixationUpdate = d3.select(this.renderRoot).select('.content').selectAll('.fixation')\n .data([]);\n fixationUpdate.exit()\n .remove();\n const queryUpdate = d3.select(this.renderRoot).select('.content').selectAll('.query')\n .data([]);\n queryUpdate.exit()\n .remove();\n }\n\n run(/* elapsed */) {\n const realTime = d3.now();\n const currentTime = (this.baseTime) ? (realTime - this.baseTime) : 0;\n const elapsedTime = (this.baseTime) ? (currentTime - this.startTime) : 0;\n const frameTime = (this.baseTime) ? (currentTime - this.lastTime) : 0;\n this.lastTime = currentTime;\n let newTrial = false;\n if (this.state === 'resetted') {\n // Start block with an ITI\n this.state = 'iti';\n this.baseTime = realTime;\n this.startTime = 0;\n this.dispatchEvent(new CustomEvent('rdk-block-start', {\n detail: {\n trials: this.trials,\n },\n bubbles: true,\n }));\n } else if ((this.state === 'iti') && (elapsedTime >= this.iti)) {\n // Start new trial with a stimulus\n newTrial = true;\n this.trial += 1;\n this.state = 'stimulus';\n this.startTime = currentTime;\n this.signal = (Math.random() < this.probability) ? 'left' : 'right';\n this.currentDirection = (this.signal === 'left')\n ? this.LEFT\n : this.RIGHT;\n this.dispatchEvent(new CustomEvent('rdk-trial-start', {\n detail: {\n trials: this.trials,\n duration: this.duration,\n wait: this.wait,\n iti: this.iti,\n trial: this.trial,\n signal: this.signal,\n },\n bubbles: true,\n }));\n } else if ((this.state === 'stimulus') && (elapsedTime >= this.duration)) {\n // Stimulus is over, now wait\n this.state = 'wait';\n this.startTime = currentTime;\n this.dispatchEvent(new CustomEvent('rdk-trial-middle', {\n detail: {\n trials: this.trials,\n duration: this.duration,\n wait: this.wait,\n iti: this.iti,\n trial: this.trial,\n signal: this.signal,\n },\n bubbles: true,\n }));\n } else if ((this.state === 'wait') && (elapsedTime >= this.wait)) {\n // Wait is over, end of trial\n this.dispatchEvent(new CustomEvent('rdk-trial-end', {\n detail: {\n trials: this.trials,\n duration: this.duration,\n wait: this.wait,\n iti: this.iti,\n trial: this.trial,\n signal: this.signal,\n },\n bubbles: true,\n }));\n if (this.trial >= this.trials) {\n // End of block\n this.runner.stop();\n this.running = false;\n this.state = 'ended';\n this.baseTime = 0;\n this.pauseTime = 0;\n this.startTime = 0;\n this.lastTime = 0;\n this.signal = undefined;\n this.currentDirection = undefined;\n this.dispatchEvent(new CustomEvent('rdk-block-end', {\n detail: {\n trials: this.trial,\n },\n bubbles: true,\n }));\n } else {\n // ITI\n this.state = 'iti';\n this.startTime = currentTime;\n }\n }\n\n // Dots\n if (this.state === 'stimulus') {\n this.dots[this.COHERENT].length = Math.round(this.count * this.coherence);\n this.dots[this.RANDOM].length = (this.count - this.dots[this.COHERENT].length);\n\n for (let t = 0; t < this.dots.length; t += 1) {\n for (let i = 0; i < this.dots[t].length; i += 1) {\n const newDot = (this.dots[t][i] === undefined);\n if (newDot) {\n this.dots[t][i] = {};\n }\n const dot = this.dots[t][i];\n if (newTrial || newDot) {\n dot.direction = (t === this.RANDOM) ? (Math.random() * 360) : this.currentDirection;\n dot.birth = currentTime - Math.floor(Math.random() * this.lifetime);\n const angle = Math.random() * 2 * Math.PI;\n const radius = Math.sqrt(Math.random());\n dot.x = this.xScale(radius * Math.cos(angle));\n dot.y = this.yScale(radius * Math.sin(angle));\n } else if (currentTime > (dot.birth + this.lifetime)) {\n // Dot has died, so rebirth\n dot.birth += this.lifetime;\n dot.direction = (t === this.RANDOM) ? (Math.random() * 360) : this.currentDirection;\n const angle = Math.random() * 2 * Math.PI;\n const radius = Math.sqrt(Math.random());\n dot.x = this.xScale(radius * Math.cos(angle));\n dot.y = this.yScale(radius * Math.sin(angle));\n } else {\n if (t === this.COHERENT) {\n dot.direction = this.currentDirection;\n }\n const directionR = dot.direction * (Math.PI / 180);\n dot.dx = this.speed * (frameTime / 1000) * Math.cos(directionR);\n dot.dy = this.speed * (frameTime / 1000) * Math.sin(directionR);\n // Update position\n dot.x += dot.dx;\n dot.y += dot.dy;\n // Calculate squared distance from center\n const distance2 = ((dot.x - this.xScale(0)) ** 2) + ((dot.y - this.yScale(0)) ** 2);\n const radius2 = (this.xScale(1) - this.xScale(0)) ** 2;\n if (distance2 > radius2) {\n // Dot has exited so move to other side\n dot.x = -(dot.x - this.xScale(0)) + this.xScale(0);\n dot.y = -(dot.y - this.yScale(0)) + this.yScale(0);\n }\n }\n }\n }\n }\n\n // Fixation\n // DATA-JOIN\n const fixationUpdate = d3.select(this.renderRoot).select('.content').selectAll('.fixation')\n .data((this.state === 'iti') ? [true] : []);\n // ENTER\n const fixationEnter = fixationUpdate.enter().append('g')\n .classed('fixation', true);\n fixationEnter.append('line')\n .attr('x1', this.xScale(-0.1))\n .attr('y1', this.xScale(0))\n .attr('x2', this.xScale(0.1))\n .attr('y2', this.xScale(0));\n fixationEnter.append('line')\n .attr('x1', this.xScale(0))\n .attr('y1', this.xScale(-0.1))\n .attr('x2', this.xScale(0))\n .attr('y2', this.xScale(0.1));\n // EXIT\n fixationUpdate.exit().remove();\n\n // Dots\n // DATA-JOIN\n const dotsUpdate = d3.select(this.renderRoot).select('.content').selectAll('.dots')\n .data((this.state === 'stimulus') ? this.dots : [[], []]);\n const dotUpdate = dotsUpdate.selectAll('.dot')\n .data((datum) => { return datum; });\n // ENTER\n const dotEnter = dotUpdate.enter().append('circle')\n .classed('dot', true);\n // MERGE\n dotEnter.merge(dotUpdate)\n .attr('cx', (datum) => { return datum.x; })\n .attr('cy', (datum) => { return datum.y; });\n // EXIT\n dotUpdate.exit().remove();\n\n // Query\n // DATA-JOIN\n const queryUpdate = d3.select(this.renderRoot).select('.content').selectAll('.query')\n .data((this.state === 'wait') ? [true] : []);\n // ENTER\n const queryEnter = queryUpdate.enter().append('g')\n .classed('query', true);\n queryEnter.append('text')\n .attr('x', this.xScale(0))\n .attr('y', this.xScale(0))\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .text('?');\n // EXIT\n queryUpdate.exit().remove();\n }\n}\n\ncustomElements.define('rdk-2afc-task', RDK2AFCTask);\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n t._restart = t.restart;\n t.restart = function(callback, delay, time) {\n delay = +delay, time = time == null ? now() : +time;\n t._restart(function tick(elapsed) {\n elapsed += total;\n t._restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n }\n t.restart(callback, delay, time);\n return t;\n}\n","\nimport {css} from 'lit';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n DDMEquation Base Class - Not intended for instantiation!\n*/\nexport default class DDMEquation extends AccumulableElement {\n static get properties() {\n return {\n numeric: {\n attribute: 'numeric',\n type: Boolean,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n this.numeric = false;\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: block;\n\n margin: 1rem;\n }\n\n /* Containing <div> */\n .holder {\n display: flex;\n\n flex-direction: row;\n\n justify-content: left;\n }\n\n /* Overall <table> */\n .equation {\n text-align: center;\n white-space: nowrap;\n\n border-collapse: collapse;\n\n border: 0;\n }\n\n /* Modifies <td> */\n .underline {\n border-bottom: 1px solid var(---color-text);\n }\n\n /* Basic <span> and <var> w/modifiers */\n span,\n var {\n padding: 0 0.25rem;\n\n font-style: normal;\n }\n\n var {\n border-radius: var(---border-radius);\n }\n\n .tight {\n padding: 0;\n }\n\n .paren {\n font-size: 150%;\n }\n\n .bracket {\n font-size: 175%;\n }\n\n .brace {\n font-size: 200%;\n }\n\n .addend {\n position: relative;\n display: inline-block;\n }\n\n .comparison {\n position: relative;\n display: inline-block;\n\n font-size: 125%;\n font-weight: 600;\n }\n\n .function {\n display: inline-block;\n\n border-radius: var(---border-radius);\n }\n\n :host([numeric]) .function {\n padding: 0.25rem;\n }\n\n .exp {\n display: inline-block;\n\n font-size: 0.75rem;\n }\n\n .subscript {\n display: inline-block;\n\n font-size: 66.667%;\n }\n\n .summation {\n display: flex;\n\n flex-direction: column;\n\n line-height: 0.8;\n }\n\n .sigma {\n display: inline-block;\n\n font-size: 200%;\n }\n\n /* Input wrapping <label> */\n decidables-spinner {\n --decidables-spinner-input-width: 4rem;\n\n display: inline-block;\n\n padding: 0.125rem 0.375rem 0.375rem;\n\n line-height: 1.5;\n vertical-align: middle;\n\n border-radius: var(---border-radius);\n }\n\n .n {\n --decidables-spinner-input-width: 2rem;\n }\n\n .left {\n text-align: left;\n }\n\n .right {\n text-align: right;\n }\n\n .bottom {\n vertical-align: bottom;\n }\n\n .top {\n vertical-align: top;\n }\n\n /* Color scheme */\n .a {\n background: var(---color-a-light);\n }\n\n .z {\n background: var(---color-z-light);\n }\n\n .v {\n background: var(---color-v-light);\n }\n\n .t0 {\n background: var(---color-t0-light);\n }\n\n .s {\n background: var(---color-s-light);\n }\n `,\n ];\n }\n}\n","\nimport {html} from 'lit';\n\nimport '@decidables/decidables-elements/spinner';\nimport DDMMath from '@decidables/accumulable-math';\n\nimport DDMEquation from './ddm-equation';\n\n/*\n DDMEquationAZV2PC element\n <ddm-equation-azv2pc>\n\n Attributes:\n*/\nexport default class DDMEquationAZV2PC extends DDMEquation {\n static get properties() {\n return {\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n\n accuracy: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.alignState();\n }\n\n alignState() {\n this.accuracy = DDMMath.azv2pC(this.a, this.z, this.v);\n }\n\n sendEvent() {\n this.dispatchEvent(new CustomEvent('ddm-equation-azv2pc-change', {\n detail: {\n a: this.a,\n z: this.z,\n v: this.v,\n accuracy: this.accuracy,\n },\n bubbles: true,\n }));\n }\n\n aInput(event) {\n this.a = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n zInput(event) {\n this.z = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n vInput(event) {\n this.v = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n willUpdate() {\n this.alignState();\n }\n\n render() {\n let a;\n let z;\n let v;\n let s;\n let accuracy;\n if (this.numeric) {\n a = html`<decidables-spinner class=\"a bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.a.MIN}\n max=${DDMMath.a.MAX}\n step=${DDMMath.a.STEP}\n .value=${this.a}\n @input=${this.aInput.bind(this)}\n >\n <var class=\"math-var\">a</var>\n </decidables-spinner>`;\n z = html`<decidables-spinner class=\"z bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.z.MIN}\n max=${DDMMath.z.MAX}\n step=${DDMMath.z.STEP}\n .value=${this.z}\n @input=${this.zInput.bind(this)}\n >\n <var class=\"math-var\">z</var>\n </decidables-spinner>`;\n v = html`<decidables-spinner class=\"v bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.v.MIN}\n max=${DDMMath.v.MAX}\n step=${DDMMath.v.STEP}\n .value=${this.v}\n @input=${this.vInput.bind(this)}\n >\n <var class=\"math-var\">v</var>\n </decidables-spinner>`;\n s = html`<decidables-spinner class=\"s bottom\"\n disabled\n .value=${DDMMath.s.DEFAULT}\n >\n <var class=\"math-var\">s</var>\n </decidables-spinner>`;\n accuracy = html`<decidables-spinner class=\"accuracy bottom\"\n disabled\n .value=${+this.accuracy.toFixed(2)}\n >\n <var>Accuracy</var>\n </decidables-spinner>`;\n } else {\n a = html`<var class=\"math-var a\">a</var>`;\n z = html`<var class=\"math-var z\">z</var>`;\n v = html`<var class=\"math-var v\">v</var>`;\n s = html`<var class=\"math-var s\">s</var>`;\n accuracy = html`<var class=\"accuracy\">Accuracy</var>`;\n }\n const equation = html`\n <tr>\n <td rowspan=\"2\">\n ${accuracy}<span class=\"equals\">=</span>\n </td>\n <td class=\"underline\">\n <var class=\"math-greek e tight\">e</var><sup class=\"exp\"><span class=\"minus tight\">−</span><span class=\"paren tight\">(</span>2${v}${a} / ${s}<sup class=\"exp\">2</sup><span class=\"paren tight\">)</span></sup>\n <span class=\"minus\">−</span>\n <var class=\"math-greek e tight\">e</var><sup class=\"exp\"><span class=\"minus tight\">−</span><span class=\"paren tight\">(</span>2${v}${z} / ${s}<sup class=\"exp\">2</sup><span class=\"paren tight\">)</span></sup>\n </td>\n </tr>\n <tr>\n <td>\n <var class=\"math-greek e tight\">e</var><sup class=\"exp\"><span class=\"minus tight\">−</span><span class=\"paren tight\">(</span>2${v}${a} / ${s}<sup class=\"exp\">2</sup><span class=\"paren tight\">)</span></sup>\n <span class=\"minus\">−</span>\n 1\n </td>\n </tr>`;\n return html`\n <div class=\"holder\">\n <table class=\"equation\">\n <tbody>\n ${equation}\n </tbody>\n </table>\n </div>`;\n }\n}\n\ncustomElements.define('ddm-equation-azv2pc', DDMEquationAZV2PC);\n","\nimport {html} from 'lit';\n\nimport '@decidables/decidables-elements/spinner';\nimport DDMMath from '@decidables/accumulable-math';\n\nimport DDMEquation from './ddm-equation';\n\n/*\n DDMEquationAZVT02M element\n <ddm-equation-azvt02m>\n\n Attributes:\n*/\nexport default class DDMEquationAZVT02M extends DDMEquation {\n static get properties() {\n return {\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n t0: {\n attribute: 'nondecision-time',\n type: Number,\n reflect: true,\n },\n\n meanRT: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n this.alignState();\n }\n\n alignState() {\n this.meanRT = DDMMath.azvt02m(this.a, this.z, this.v, this.t0);\n }\n\n sendEvent() {\n this.dispatchEvent(new CustomEvent('ddm-equation-azvt02m-change', {\n detail: {\n a: this.a,\n z: this.z,\n v: this.v,\n t0: this.t0,\n meanRT: this.meanRT,\n },\n bubbles: true,\n }));\n }\n\n aInput(event) {\n this.a = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n zInput(event) {\n this.z = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n vInput(event) {\n this.v = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n t0Input(event) {\n this.t0 = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n willUpdate() {\n this.alignState();\n }\n\n render() {\n let a;\n let z;\n let v;\n let t0;\n let s;\n let meanRT;\n if (this.numeric) {\n a = html`<decidables-spinner class=\"a bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.a.MIN}\n max=${DDMMath.a.MAX}\n step=${DDMMath.a.STEP}\n .value=${this.a}\n @input=${this.aInput.bind(this)}\n >\n <var class=\"math-var\">a</var>\n </decidables-spinner>`;\n z = html`<decidables-spinner class=\"z bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.z.MIN}\n max=${DDMMath.z.MAX}\n step=${DDMMath.z.STEP}\n .value=${this.z}\n @input=${this.zInput.bind(this)}\n >\n <var class=\"math-var\">z</var>\n </decidables-spinner>`;\n v = html`<decidables-spinner class=\"v bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.v.MIN}\n max=${DDMMath.v.MAX}\n step=${DDMMath.v.STEP}\n .value=${this.v}\n @input=${this.vInput.bind(this)}\n >\n <var class=\"math-var\">v</var>\n </decidables-spinner>`;\n t0 = html`<decidables-spinner class=\"t0 bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.t0.MIN}\n max=${DDMMath.t0.MAX}\n step=${DDMMath.t0.STEP}\n .value=${this.t0}\n @input=${this.t0Input.bind(this)}\n >\n <var class=\"math-var\">t<sub>0</sub></var>\n </decidables-spinner>`;\n s = html`<decidables-spinner class=\"s bottom\"\n disabled\n .value=${DDMMath.s.DEFAULT}\n >\n <var class=\"math-var\">s</var>\n </decidables-spinner>`;\n meanRT = html`<decidables-spinner class=\"mean-rt bottom\"\n disabled\n .value=${+this.meanRT.toFixed(0)}\n >\n <var>Mean RT</var>\n </decidables-spinner>`;\n } else {\n a = html`<var class=\"math-var a\">a</var>`;\n z = html`<var class=\"math-var z\">z</var>`;\n v = html`<var class=\"math-var v\">v</var>`;\n t0 = html`<var class=\"math-var t0\">t<sub>0</sub></var>`;\n s = html`<var class=\"math-var s\">s</var>`;\n meanRT = html`<var class=\"mean-rt\">Mean RT</var>`;\n }\n const equation = html`\n <tr>\n <td rowspan=\"2\">\n ${meanRT}<span class=\"equals\">=</span>\n ${t0}\n <span class=\"minus\">−</span>\n </td>\n <td class=\"underline\">\n ${z}\n </td>\n <td rowspan=\"2\">\n <span class=\"plus\">+</span>\n </td>\n <td class=\"underline\">\n ${a}\n </td>\n <td rowspan=\"2\">&nbsp;</td>\n <td class=\"underline\">\n <var class=\"math-greek e tight\">e</var><sup class=\"exp\"><span class=\"minus tight\">−</span><span class=\"paren tight\">(</span>2${v}${z} / ${s}<sup class=\"exp\">2</sup><span class=\"paren tight\">)</span></sup>\n <span class=\"minus\">−</span>\n 1\n </td>\n </tr>\n <tr>\n <td>\n ${v}\n </td>\n <td>\n ${v}\n </td>\n <td>\n <var class=\"math-greek e tight\">e</var><sup class=\"exp\"><span class=\"minus tight\">−</span><span class=\"paren tight\">(</span>2${v}${a} / ${s}<sup class=\"exp\">2</sup><span class=\"paren tight\">)</span></sup>\n <span class=\"minus\">−</span>\n 1\n </td>\n </tr>`;\n return html`\n <div class=\"holder\">\n <table class=\"equation\">\n <tbody>\n ${equation}\n </tbody>\n </table>\n </div>`;\n }\n}\n\ncustomElements.define('ddm-equation-azvt02m', DDMEquationAZVT02M);\n","\nimport {html, css} from 'lit';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n DDMExample Base Class - Not intended for instantiation!\n*/\nexport default class DDMExample extends AccumulableElement {\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n ---border: var(--border, 1px solid var(---color-border));\n display: inline-block;\n\n margin-bottom: 1rem;\n }\n\n .holder {\n display: flex;\n }\n\n .body {\n display: flex;\n\n flex-wrap: wrap;\n\n align-items: center;\n justify-content: left;\n\n padding: 0.625rem;\n\n border: var(---border);\n border-radius: 0.25rem;\n }\n\n .body ::slotted(*) {\n margin: 0.625rem;\n }\n\n /* HACK: Sibling selectors not working with ::slotted */\n /* .body > rdk-task + sdt-response,\n ::slotted(rdk-task) + ::slotted(sdt-response) { */\n /* .body ::slotted(sdt-response) {\n margin-left: 0;\n } */\n\n /* HACK: Sibling selectors not working with ::slotted */\n /* .body > sdt-control + rdk-task,\n ::slotted(sdt-control) + ::slotted(rdk-task) {\n margin-left: 0;\n } */\n /* .body ::slotted(rdk-task) {\n margin-left: 0;\n } */\n `,\n ];\n }\n\n render() { /* eslint-disable-line class-methods-use-this */\n return html`\n <div class=\"holder\">\n <div class=\"body\">\n <slot>Empty!</slot>\n </div>\n </div>`;\n }\n}\n\ncustomElements.define('ddm-example', DDMExample);\n","\nimport DDMMath from '@decidables/accumulable-math';\n\nimport DDMExample from './ddm-example';\n\n/*\n DDMExampleHuman element\n <ddm-example-human>\n*/\nexport default class DDMExampleHuman extends DDMExample {\n static get properties() {\n return {\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n duration: {\n attribute: 'duration',\n type: Number,\n reflect: true,\n },\n coherence: {\n attribute: 'coherence',\n type: Number,\n reflect: true,\n },\n color: {\n attribute: 'color',\n type: String,\n reflect: true,\n },\n\n a: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n z: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n v: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n t0: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n this.trials = 10;\n this.duration = 2000;\n this.coherence = 0.5;\n this.colors = ['none', 'measure', 'outcome', 'all'];\n this.color = 'outcome';\n\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n\n this.accumulableControl = null;\n this.rdkTask = null;\n this.accumulableResponse = null;\n this.accumulableTable = null;\n this.ddmParameters = null;\n this.ddmModel = null;\n this.ddmFit = null;\n\n this.data = undefined;\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.accumulableControl = this.querySelector('accumulable-control');\n this.rdkTask = this.querySelector('rdk-2afc-task');\n this.accumulableResponse = this.querySelector('accumulable-response');\n this.accumulableTable = this.querySelector('accumulable-table');\n this.ddmParameters = this.querySelector('ddm-parameters');\n this.ddmModel = this.querySelector('ddm-model');\n this.ddmFit = this.querySelector('ddm-fit');\n\n // Initialize\n this.ddmModel.clear();\n\n if (this.accumulableControl) {\n this.accumulableControl.addEventListener('accumulable-control-trials', (event) => {\n this.trials = event.detail.trials;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-duration', (event) => {\n this.duration = event.detail.duration;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-coherence', (event) => {\n this.coherence = event.detail.coherence;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-color', (event) => {\n this.color = event.detail.color;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-run', (/* event */) => {\n if (this.rdkTask) {\n this.rdkTask.running = true;\n }\n });\n\n this.accumulableControl.addEventListener('accumulable-control-pause', (/* event */) => {\n if (this.rdkTask) {\n this.rdkTask.running = false;\n }\n });\n\n this.accumulableControl.addEventListener('accumulable-control-reset', (/* event */) => {\n if (this.rdkTask) {\n this.rdkTask.reset();\n }\n\n if (this.accumulableResponse) {\n this.accumulableResponse.reset();\n }\n\n if (this.accumulableTable) {\n this.accumulableTable.correctCount = NaN;\n this.accumulableTable.errorCount = NaN;\n this.accumulableTable.nrCount = NaN;\n this.accumulableTable.accuracy = NaN;\n this.accumulableTable.correctMeanRT = NaN;\n this.accumulableTable.errorMeanRT = NaN;\n this.accumulableTable.meanRT = NaN;\n this.accumulableTable.correctSDRT = NaN;\n this.accumulableTable.errorSDRT = NaN;\n this.accumulableTable.sdRT = NaN;\n }\n\n // if (this.ddmParameters) {\n // }\n\n if (this.ddmModel) {\n this.ddmModel.clear();\n }\n\n if (this.ddmFit) {\n this.ddmFit.clear();\n }\n });\n }\n\n if (this.rdkTask) {\n this.rdkTask.addEventListener('rdk-trial-start', (event) => {\n if (this.accumulableResponse) {\n this.accumulableResponse.start(event.detail.signal, event.detail.trial);\n }\n });\n }\n\n if (this.rdkTask) {\n this.rdkTask.addEventListener('rdk-trial-end', (/* event */) => {\n if (this.accumulableResponse) {\n this.accumulableResponse.stop();\n }\n });\n }\n\n if (this.rdkTask) {\n this.rdkTask.addEventListener('rdk-block-end', (/* event */) => {\n if (this.accumulableControl) {\n this.accumulableControl.complete();\n }\n });\n }\n\n if (this.accumulableResponse) {\n this.accumulableResponse.addEventListener('accumulable-response', (event) => {\n this.data = event.detail.data;\n\n if (this.ddmModel) {\n this.ddmModel.trial({\n index: event.detail.trial,\n rt: event.detail.rt,\n outcome: event.detail.outcome,\n });\n }\n\n if (this.ddmFit) {\n this.ddmFit.set({\n accuracy: event.detail.data.accuracy,\n correctMeanRT: event.detail.data.correctMeanRT,\n errorMeanRT: event.detail.data.errorMeanRT,\n meanRT: event.detail.data.meanRT,\n correctSDRT: event.detail.data.correctSDRT,\n errorSDRT: event.detail.data.errorSDRT,\n sdRT: event.detail.data.sdRT,\n });\n }\n\n this.requestUpdate();\n });\n }\n\n if (this.ddmFit) {\n this.ddmFit.addEventListener('ddm-fit-update', (event) => {\n this.a = event.detail.a;\n this.z = 0.5; // event.detail.z;\n this.v = event.detail.v;\n this.t0 = event.detail.t0;\n });\n }\n }\n\n update(changedProperties) {\n super.update(changedProperties);\n\n if (this.accumulableControl) {\n this.accumulableControl.trials = (this.accumulableControl.trials != null)\n ? this.trials\n : undefined;\n this.accumulableControl.duration = (this.accumulableControl.duration != null)\n ? this.duration\n : undefined;\n this.accumulableControl.coherence = (this.accumulableControl.coherence != null)\n ? this.coherence\n : undefined;\n this.accumulableControl.color = (this.accumulableControl.color != null)\n ? this.color\n : undefined;\n }\n\n if (this.rdkTask) {\n this.rdkTask.trials = this.trials;\n this.rdkTask.duration = this.duration;\n this.rdkTask.wait = this.duration;\n this.rdkTask.iti = this.duration;\n this.rdkTask.coherence = this.coherence;\n }\n\n if (this.ddmParameters) {\n this.ddmParameters.a = (this.ddmParameters.a != null)\n ? this.a\n : undefined;\n this.ddmParameters.z = (this.ddmParameters.z != null)\n ? this.z\n : undefined;\n this.ddmParameters.v = (this.ddmParameters.a != null)\n ? this.v\n : undefined;\n this.ddmParameters.t0 = (this.ddmParameters.t0 != null)\n ? this.t0\n : undefined;\n }\n\n if (this.ddmModel) {\n this.ddmModel.a = +this.a;\n this.ddmModel.z = +this.z;\n this.ddmModel.v = +this.v;\n this.ddmModel.t0 = +this.t0;\n }\n\n if (this.accumulableResponse) {\n this.accumulableResponse.trialTotal = this.trials;\n }\n\n if (this.accumulableTable) {\n this.accumulableTable.color = this.color;\n }\n\n if (this.accumulableTable && this.data) {\n this.accumulableTable.correctCount = this.data.correctCount;\n this.accumulableTable.errorCount = this.data.errorCount;\n this.accumulableTable.nrCount = this.data.nrCount;\n this.accumulableTable.accuracy = this.data.accuracy;\n this.accumulableTable.correctMeanRT = this.data.correctMeanRT;\n this.accumulableTable.errorMeanRT = this.data.errorMeanRT;\n this.accumulableTable.meanRT = this.data.meanRT;\n this.accumulableTable.correctSDRT = this.data.correctSDRT;\n this.accumulableTable.errorSDRT = this.data.errorSDRT;\n this.accumulableTable.sdRT = this.data.sdRT;\n }\n }\n}\n\ncustomElements.define('ddm-example-human', DDMExampleHuman);\n","\nimport DDMMath from '@decidables/accumulable-math';\n\nimport DDMExample from './ddm-example';\n\n/*\n DDMExampleInteractive element\n <ddm-example-interactive>\n*/\nexport default class DDMExampleInteractive extends DDMExample {\n static get properties() {\n return {\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n color: {\n attribute: 'color',\n type: String,\n reflect: true,\n },\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n t0: {\n attribute: 'nondecision-time',\n type: Number,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n this.trials = 10;\n this.colors = ['none', 'measure', 'outcome', 'all'];\n this.color = 'outcome';\n\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n\n this.accumulableControl = null;\n this.accumulableTable = null;\n this.ddmParameters = null;\n this.ddmModel = null;\n\n this.data = undefined;\n this.model = undefined;\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.accumulableControl = this.querySelector('accumulable-control');\n this.accumulableTable = this.querySelector('accumulable-table');\n this.ddmParameters = this.querySelector('ddm-parameters');\n this.ddmModel = this.querySelector('ddm-model');\n\n if (this.accumulableControl) {\n this.accumulableControl.addEventListener('accumulable-control-resample', (/* event */) => {\n this.ddmModel?.resample();\n this.requestUpdate();\n });\n this.accumulableControl.addEventListener('accumulable-control-trials', (event) => {\n this.trials = event.detail.trials;\n });\n this.accumulableControl.addEventListener('accumulable-control-color', (event) => {\n this.color = event.detail.color;\n });\n }\n\n if (this.ddmParameters) {\n this.ddmParameters.addEventListener('ddm-parameters-a', (event) => {\n this.a = event.detail.a;\n });\n this.ddmParameters.addEventListener('ddm-parameters-z', (event) => {\n this.z = event.detail.z;\n });\n this.ddmParameters.addEventListener('ddm-parameters-v', (event) => {\n this.v = event.detail.v;\n });\n this.ddmParameters.addEventListener('ddm-parameters-t0', (event) => {\n this.t0 = event.detail.t0;\n });\n }\n\n if (this.ddmModel) {\n this.ddmModel.addEventListener('ddm-model-a', (event) => {\n this.a = event.detail.a;\n });\n this.ddmModel.addEventListener('ddm-model-z', (event) => {\n this.z = event.detail.z;\n });\n this.ddmModel.addEventListener('ddm-model-v', (event) => {\n this.v = event.detail.v;\n });\n this.ddmModel.addEventListener('ddm-model-t0', (event) => {\n this.t0 = event.detail.t0;\n });\n this.ddmModel.addEventListener('ddm-model-output', (event) => {\n this.data = event.detail.data;\n this.model = event.detail.model;\n this.requestUpdate();\n });\n }\n\n this.requestUpdate();\n }\n\n update(changedProperties) {\n super.update(changedProperties);\n\n if (this.accumulableControl) {\n this.accumulableControl.trials = (this.accumulableControl.trials != null)\n ? this.trials\n : undefined;\n this.accumulableControl.color = (this.accumulableControl.color != null)\n ? this.color\n : undefined;\n }\n\n if (this.accumulableTable) {\n this.accumulableTable.color = this.color;\n }\n\n if (this.accumulableTable && this.data) {\n this.accumulableTable.correctCount = this.data.correctCount;\n this.accumulableTable.errorCount = this.data.errorCount;\n this.accumulableTable.nrCount = this.data.nrCount;\n this.accumulableTable.accuracy = this.data.accuracy;\n this.accumulableTable.correctMeanRT = this.data.correctMeanRT;\n this.accumulableTable.errorMeanRT = this.data.errorMeanRT;\n this.accumulableTable.meanRT = this.data.meanRT;\n this.accumulableTable.correctSDRT = this.data.correctSDRT;\n this.accumulableTable.errorSDRT = this.data.errorSDRT;\n this.accumulableTable.sdRT = this.data.sdRT;\n }\n\n if (this.ddmParameters) {\n this.ddmParameters.a = (this.ddmParameters.a != null)\n ? this.a\n : undefined;\n this.ddmParameters.z = (this.ddmParameters.z != null)\n ? this.z\n : undefined;\n this.ddmParameters.v = (this.ddmParameters.a != null)\n ? this.v\n : undefined;\n this.ddmParameters.t0 = (this.ddmParameters.t0 != null)\n ? this.t0\n : undefined;\n }\n\n if (this.ddmModel) {\n this.ddmModel.trials = this.trials;\n this.ddmModel.a = +this.a;\n this.ddmModel.z = +this.z;\n this.ddmModel.v = +this.v;\n this.ddmModel.t0 = +this.t0;\n }\n }\n}\n\ncustomElements.define('ddm-example-interactive', DDMExampleInteractive);\n","\nimport DDMMath from '@decidables/accumulable-math';\n\nimport DDMExample from './ddm-example';\n\n/*\n DDMExampleModel element\n <ddm-example-model>\n*/\nexport default class DDMExampleModel extends DDMExample {\n static get properties() {\n return {\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n duration: {\n attribute: 'duration',\n type: Number,\n reflect: true,\n },\n coherence: {\n attribute: 'coherence',\n type: Number,\n reflect: true,\n },\n color: {\n attribute: 'color',\n type: String,\n reflect: true,\n },\n\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n t0: {\n attribute: 'nondecision-time',\n type: Number,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n this.trials = 10;\n this.duration = 2000;\n this.coherence = 0.5;\n this.colors = ['none', 'measure', 'outcome', 'all'];\n this.color = 'outcome';\n\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n\n this.accumulableControl = null;\n this.rdkTask = null;\n this.ddmParameters = null;\n this.ddmModel = null;\n this.accumulableResponse = null;\n this.accumulableTable = null;\n\n this.trialCount = 0;\n this.signals = ['left', 'right']; // Possible values of 'signal'\n this.signal = undefined; // Signal for current trial\n this.data = undefined;\n this.model = undefined;\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.accumulableControl = this.querySelector('accumulable-control');\n this.rdkTask = this.querySelector('rdk-2afc-task');\n this.ddmParameters = this.querySelector('ddm-parameters');\n this.ddmModel = this.querySelector('ddm-model');\n this.accumulableResponse = this.querySelector('accumulable-response');\n this.accumulableTable = this.querySelector('accumulable-table');\n\n if (this.accumulableControl) {\n this.accumulableControl.addEventListener('accumulable-control-trials', (event) => {\n this.trials = event.detail.trials;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-duration', (event) => {\n this.duration = event.detail.duration;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-color', (event) => {\n this.color = event.detail.color;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-run', (/* event */) => {\n if (this.rdkTask) {\n this.rdkTask.running = true;\n }\n\n if (this.ddmModel) {\n this.ddmModel.resumeTrial();\n }\n });\n\n this.accumulableControl.addEventListener('accumulable-control-pause', (/* event */) => {\n if (this.rdkTask) {\n this.rdkTask.running = false;\n }\n\n if (this.ddmModel) {\n this.ddmModel.pauseTrial();\n }\n });\n\n this.accumulableControl.addEventListener('accumulable-control-reset', (/* event */) => {\n this.trialCount = 0;\n this.signal = undefined;\n\n if (this.rdkTask) {\n this.rdkTask.reset();\n }\n\n if (this.ddmModel) {\n this.ddmModel.trials = this.trialCount;\n }\n\n if (this.accumulableResponse) {\n this.accumulableResponse.reset();\n }\n\n if (this.accumulableTable) {\n // this.accumulableTable.clear();\n }\n });\n }\n\n if (this.rdkTask) {\n this.rdkTask.addEventListener('rdk-trial-start', (event) => {\n this.signal = event.detail.signal;\n\n if (this.accumulableResponse) {\n this.accumulableResponse.start(\n event.detail.signal,\n event.detail.trial,\n );\n }\n\n if (this.ddmModel) {\n this.trialCount += 1;\n this.ddmModel.trial();\n }\n });\n\n this.rdkTask.addEventListener('rdk-trial-end', (/* event */) => {\n this.signal = undefined;\n\n if (this.accumulableResponse) {\n this.accumulableResponse.stop();\n }\n });\n\n this.rdkTask.addEventListener('rdk-block-end', (/* event */) => {\n if (this.accumulableControl) {\n this.accumulableControl.complete();\n }\n });\n }\n\n if (this.ddmParameters) {\n this.ddmParameters.addEventListener('ddm-parameters-a', (event) => {\n this.a = event.detail.a;\n });\n this.ddmParameters.addEventListener('ddm-parameters-z', (event) => {\n this.z = event.detail.z;\n });\n this.ddmParameters.addEventListener('ddm-parameters-v', (event) => {\n this.v = event.detail.v;\n });\n this.ddmParameters.addEventListener('ddm-parameters-t0', (event) => {\n this.t0 = event.detail.t0;\n });\n }\n\n if (this.ddmModel) {\n this.ddmModel.addEventListener('ddm-model-a', (event) => {\n this.a = event.detail.a;\n });\n this.ddmModel.addEventListener('ddm-model-z', (event) => {\n this.z = event.detail.z;\n });\n this.ddmModel.addEventListener('ddm-model-v', (event) => {\n this.v = event.detail.v;\n });\n this.ddmModel.addEventListener('ddm-model-t0', (event) => {\n this.t0 = event.detail.t0;\n });\n this.ddmModel.addEventListener('ddm-model-output', (event) => {\n this.data = event.detail.data;\n this.model = event.detail.model;\n this.requestUpdate();\n });\n\n this.ddmModel.addEventListener('accumulable-response', (event) => {\n if (this.accumulableResponse) {\n const response = (event.detail.outcome === 'correct')\n ? this.signal\n : (this.signal === 'left')\n ? 'right'\n : 'left';\n this.accumulableResponse.responded(response);\n }\n\n this.data = event.detail.data;\n this.model = event.detail.model;\n this.requestUpdate();\n });\n }\n\n this.requestUpdate();\n }\n\n update(changedProperties) {\n super.update(changedProperties);\n\n if (this.trialCount > this.trials) {\n this.trialCount = this.trials;\n }\n\n if (this.accumulableControl) {\n this.accumulableControl.trials = (this.accumulableControl.trials != null)\n ? this.trials\n : undefined;\n this.accumulableControl.duration = (this.accumulableControl.duration != null)\n ? this.duration\n : undefined;\n this.accumulableControl.coherence = (this.accumulableControl.coherence != null)\n ? this.coherence\n : undefined;\n this.accumulableControl.color = (this.accumulableControl.color != null)\n ? this.color\n : undefined;\n }\n\n if (this.rdkTask) {\n this.rdkTask.trials = this.trials;\n this.rdkTask.duration = this.duration;\n this.rdkTask.coherence = this.coherence;\n }\n\n if (this.ddmParameters) {\n this.ddmParameters.a = (this.ddmParameters.a != null)\n ? this.a\n : undefined;\n this.ddmParameters.z = (this.ddmParameters.z != null)\n ? this.z\n : undefined;\n this.ddmParameters.v = (this.ddmParameters.a != null)\n ? this.v\n : undefined;\n this.ddmParameters.t0 = (this.ddmParameters.t0 != null)\n ? this.t0\n : undefined;\n }\n\n if (this.ddmModel) {\n this.ddmModel.trials = this.trialCount;\n this.ddmModel.a = +this.a;\n this.ddmModel.z = +this.z;\n this.ddmModel.v = +this.v;\n this.ddmModel.t0 = +this.t0;\n }\n\n if (this.accumulableResponse) {\n this.accumulableResponse.trialTotal = this.trials;\n }\n\n if (this.accumulableTable) {\n this.accumulableTable.color = this.color;\n }\n\n if (this.accumulableTable && this.data) {\n this.accumulableTable.correctCount = this.data.correctCount;\n this.accumulableTable.errorCount = this.data.errorCount;\n this.accumulableTable.nrCount = this.data.nrCount;\n this.accumulableTable.accuracy = this.data.accuracy;\n this.accumulableTable.correctMeanRT = this.data.correctMeanRT;\n this.accumulableTable.errorMeanRT = this.data.errorMeanRT;\n this.accumulableTable.meanRT = this.data.meanRT;\n this.accumulableTable.correctSDRT = this.data.correctSDRT;\n this.accumulableTable.errorSDRT = this.data.errorSDRT;\n this.accumulableTable.sdRT = this.data.sdRT;\n }\n }\n}\n\ncustomElements.define('ddm-example-model', DDMExampleModel);\n"],"names":["t","globalThis","e","ShadowRoot","ShadyCSS","nativeShadow","Document","prototype","CSSStyleSheet","s","Symbol","o","WeakMap","n$2","constructor","this","_$cssResult$","Error","cssText","styleSheet","length","get","replaceSync","set","toString","r","n","i","css","reduce","c","cssRules","is","defineProperty","getOwnPropertyDescriptor","h","getOwnPropertyNames","getOwnPropertySymbols","getPrototypeOf","Object","a","trustedTypes","l","emptyScript","p","reactiveElementPolyfillSupport","d","JSCompiler_renameProperty","u","toAttribute","Boolean","Array","JSON","stringify","fromAttribute","Number","parse","f","notEqual","b","attribute","type","String","converter","reflect","useDefault","hasChanged","metadata","litPropertyMetadata","HTMLElement","addInitializer","_$Ei","push","observedAttributes","finalize","_$Eh","keys","createProperty","state","hasOwnProperty","create","wrapped","elementProperties","noAccessor","getPropertyDescriptor","call","requestUpdate","configurable","enumerable","getPropertyOptions","Map","finalized","properties","_$Eu","elementStyles","finalizeStyles","styles","isArray","Set","flat","reverse","unshift","toLowerCase","super","_$Ep","isUpdatePending","hasUpdated","_$Em","_$Ev","_$ES","Promise","enableUpdating","_$AL","_$E_","forEach","addController","_$EO","add","renderRoot","isConnected","hostConnected","removeController","delete","size","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","adoptStyles","adoptedStyleSheets","map","document","createElement","litNonce","setAttribute","textContent","appendChild","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$ET","removeAttribute","_$Ej","hasAttribute","C","_$EP","has","_$Eq","reject","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","update","_$EM","_$AE","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","y","mode","ReactiveElement","reactiveElementVersions","createPolicy","createHTML","Math","random","toFixed","slice","createMarker","createComment","v","_","m","RegExp","g","$","_$litType$","strings","values","x","T","for","E","A","createTreeWalker","P","V","getTemplateHtml","lastIndex","exec","test","startsWith","N","parts","el","currentNode","content","firstChild","replaceWith","childNodes","nextNode","nodeType","hasAttributes","getAttributeNames","endsWith","getAttribute","split","index","name","ctor","H","I","L","k","tagName","append","data","indexOf","innerHTML","S","_$Co","_$Cl","_$litDirective$","_$AO","_$AT","_$AS","M","_$AV","_$AN","_$AD","_$AM","parentNode","_$AU","creationScope","importNode","R","nextSibling","z","_$AI","_$Cv","_$AH","_$AA","_$AB","options","startNode","endNode","_$AR","iterator","O","insertBefore","createTextNode","_$AC","_$AP","remove","setConnected","element","fill","j","arguments","toggleAttribute","capture","once","passive","removeEventListener","addEventListener","handleEvent","host","litHtmlPolyfillSupport","litHtmlVersions","renderOptions","_$Do","renderBefore","render","_$litPart$","_$litElement$","litElementHydrateSupport","LitElement","litElementPolyfillSupport","ascending","NaN","descending","bisector","compare1","compare2","delta","left","lo","hi","mid","zero","center","right","litElementVersions","bisectRight","e10","sqrt","e5","e2","tickSpec","start","stop","count","step","max","power","floor","log10","error","pow","factor","i1","i2","inc","round","tickIncrement","identity$3","epsilon","translateX","translateY","number","scale","offset","bandwidth","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","window","devicePixelRatio","transform","context","ticks","apply","domain","format","identity","spacing","range","range0","range1","position","copy","selection","path","selectAll","tick","order","tickExit","exit","tickEnter","enter","attr","line","select","text","merge","insert","transition","isFinite","filter","each","from","tickSize","axisLeft","noop","value","dispatch","Dispatch","callback","concat","on","typename","types","trim","that","args","xhtml","namespaces","svg","xlink","xml","xmlns","namespace","prefix","space","local","creatorInherit","ownerDocument","uri","namespaceURI","documentElement","createElementNS","creatorFixed","fullname","creator","none","selector","querySelector","empty","selectorAll","querySelectorAll","arrayAll","array","matcher","matches","childMatcher","node","find","childFirst","firstElementChild","children","sparse","EnterNode","parent","datum","_next","_parent","__data__","bindIndex","group","groupLength","dataLength","bindKey","key","keyValue","nodeByKeyValue","keyValues","arraylike","attrRemove","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","defaultView","styleRemove","style","removeProperty","styleConstant","priority","setProperty","styleFunction","styleValue","getPropertyValue","getComputedStyle","propertyRemove","propertyConstant","propertyFunction","classArray","string","classList","ClassList","_node","_names","classedAdd","names","list","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","lower","previousSibling","constantNull","removeChild","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","onRemove","__on","listener","onAdd","event","contextListener","dispatchEvent","params","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","child","next","join","splice","contains","root","Selection","groups","parents","_groups","_parents","subgroups","subnode","subgroup","selectChild","match","childFind","selectChildren","childrenFilter","bind","constant","enterGroup","updateGroup","previous","i0","_enter","_exit","onenter","onupdate","onexit","groups0","groups1","m0","m1","min","merges","group0","group1","compareDocumentPosition","sort","compare","compareNode","sortgroups","sortgroup","nodes","getAttributeNS","property","classed","html","before","deep","typenames","parseTypenames","nextId","Local","pointer","sourceEvent","undefined","currentTarget","ownerSVGElement","createSVGPoint","point","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","rect","clientLeft","top","clientTop","pageX","pageY","id","nonpassive","nonpassivecapture","nopropagation","stopImmediatePropagation","noevent","preventDefault","constant$2","DragEvent","subject","target","identifier","active","dx","dy","defineProperties","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","navigator","maxTouchPoints","drag","mousedownx","mousedowny","mousemoving","touchending","container","touchable","gestures","listeners","clickDistance2","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","view","mousemoved","mouseupped","__noselect","MozUserSelect","nodrag","mouse","noclick","setTimeout","yesdrag","touches","changedTouches","clearTimeout","touch","p0","clickDistance","define","factory","extend","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","parseInt","rgbn","Rgb","rgba","hsla","opacity","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","isNaN","Hsl","hslConvert","clamph","clampt","hsl2rgb","m2","channels","assign","displayable","formatHex8","formatHsl","clamp","constant$1","gamma","nogamma","exponential","linear","interpolateRgb","rgbGamma","end","colorRgb","numberArray","genericArray","nb","na","date","Date","setTime","interpolateNumber","object","reA","reB","source","interpolateString","am","bm","bs","bi","q","one","interpolate$1","ArrayBuffer","isView","DataView","isNumberArray","valueOf","interpolateRound","svgNode","degrees","PI","rotate","skewX","scaleX","scaleY","decompose","atan2","atan","interpolateTransform","pxComma","pxParen","degParen","pop","xa","ya","xb","yb","translate","taskHead","taskTail","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","interpolateTransformSvg","baseVal","consolidate","matrix","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","setFrame","requestAnimationFrame","clearNow","Timer","_call","_time","timer","delay","time","restart","wake","timerFlush","t0","t2","t1","Infinity","sleep","nap","poke","clearInterval","setInterval","elapsed","TypeError","emptyOn","emptyTween","schedule","timing","schedules","__transition","self","tween","duration","ease","init","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","interpolate","value1","string00","interpolate0","string1","string0","string10","attrTweenNS","attrInterpolateNS","_value","attrTween","attrInterpolate","delayFunction","delayConstant","durationFunction","durationConstant","Transition","_name","newId","selection_prototype","inherit","id0","id1","on0","on1","sit","every","onFunction","styleTween","styleNull","listener0","styleMaybeRemove","styleInterpolate","textTween","textInterpolate","removeFunction","easeConstant","easeVarying","resolve","cancel","interrupt","cubicOut","defaultTiming","pi","tau","tauEpsilon","Path","digits","_x0","_y0","_x1","_y1","_append","appendRound","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","abs","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","cos","sin","cw","da","w","formatDecimalParts","toExponential","coefficient","exponent","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","align","sign","symbol","width","comma","precision","formatRounded","formatTypes","%","toLocaleString","replace","toPrecision","X","toUpperCase","identity$1","locale","formatPrefix","prefixes","formatLocale","grouping","thousands","substring","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","charCodeAt","padding","defaultSource","uniform","sourceRandomUniform","randomUniform","normal","sourceRandomNormal","randomNormal","mu","sigma","log","eps","lcg","seed","initRange","unit","normalize","bimap","d0","d1","r0","r1","polymap","bisect","transformer","untransform","unknown","piecewise","output","input","interpolateValue","rescale","clamper","invert","rangeRound","tickStep","precisionPrefix","precisionRound","precisionFixed","linearish","nice","prestep","maxIter","ceil","Linear","_context","curveLinear","defined","curve","shape","RangeError","withPath","buffer","defined0","lineStart","lineEnd","pointX","pointY","Transform","areaStart","_line","areaEnd","_point","applyX","applyY","location","invertX","invertY","rescaleX","rescaleY","DecidablesElement","getComputedStyleValue","changedProperties","d3","greys","light75","light50","light25","dark25","dark50","dark75","shadows","elevations","baselineColor","baselineColorString","inverseBaselineColor","inverseBaselineColorString","opacityUmbra","opacityPenumbra","opacityAmbient","opacityBoost","mapUmbra","mapPenumbra","mapAmbient","cssBoxShadow","elevation","umbraO","penumbraO","ambientO","umbraC","penumbraC","ambientC","umbraM","penumbraM","ambientM","svgDefs","filters","svgFilters","unsafeCSS","customElements","disabled","nonlinear","rangeMax","rangeMin","rangeStep","rangeValue","toRange","fromRange","nonlinearRange","rangeChanged","rangeInputted","spinnerInputted","ifDefined","inputted","checked","changed","DecidablesMixinResizeable","superClass","height","rem","getDimensions","parseFloat","resizeObserver","ResizeObserver","observe","unobserve","AccumulableElement","interactive","colors","lights","acc","cur","darks","AccumulableControl","trials","resample","coherence","run","pause","reset","states","setTrials","doResample","setDuration","setCoherence","chooseColor","doRun","doPause","doReset","complete","DDMMath","static","DEFAULT","MIN","MAX","STEP","JUMP","trials2stats","stats","sums","accumulator","trial","outcome","correctCount","correctRTSum","rt","errorCount","errorRTSum","nrCount","accuracy","correctMeanRT","errorMeanRT","meanRT","sums2","ss","correctSS","errorSS","correctSDRT","errorSDRT","sdRT","azv2pE","zPrime","exp","azv2pC","azvt02m","azv2sd","Z","variance","azvt02mE","phi","azv2sdE","azvt02mC","azv2sdC","tazv2gE","base","term","sum","tazv2gC","data2ez","pC","sd","logit","vrt","mrt","s2","mdt","data2ez2","AccumulableResponse","feedback","payoff","correctPayoff","errorPayoff","nrPayoff","trialCount","trialTotal","payoffs","signals","signal","responses","response","outcomes","startTime","alignState","trialPayoff","totalPayoff","responded","keydown","payoffFormatter","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","payoffFormat","formatToParts","part","AccumulableTable","numeric","summary","sendEvent","correctCountInput","errorCountInput","accuracyInput","correctMeanRTInput","errorMeanRTInput","meanRTInput","correctSDRTInput","errorSDRTInput","sdRTInput","DDMFit","observed","predicted","working","queued","worker","DDMFitWorker","onmessage","fit","postMessage","clear","structuredClone","DDMParameters","setBoundarySeparation","setStartingPoint","setDriftRate","setNondecisionTime","DDMModel","measures","means","sds","human","firstUpdate","evidence","density","bounds","startingPoint","model","animate","paused","pauseTrial","resumeTrial","alignPath","drift","at","alignCorrectDistribution","proportionCorrect","dist","alignErrorDistribution","proportionError","upper","dataStats","correctDist","errorDist","hostWidth","hostHeight","elementWidth","elementHeight","margin","gapHeight","evidenceHeight","densityHeight","gapWidth","timeWidth","accuracyWidth","transitionDuration","timeScale","evidenceScale","correctDensityScale","errorDensityScale","accuracyScale","dragT0z","shift","shiftKey","dragDrift","dragBoundary","boundary","evidenceLine","correctDensityLine","errorDensityLine","svgUpdate","svgEnter","measureArrow","parameter","measureCappedArrow","marker","sdCap","gradient","svgMerge","densityPlotUpdate","densityScale","densityLine","alignDistribution","evidencePlotEnter","densityPlotEnter","accuracyPlotEnter","evidencePlotMerge","densityPlotMerge","accuracyPlotMerge","evidenceUnderlayerEnter","densityUnderlayerEnter","accuracyUnderlayerEnter","evidenceUnderlayerMerge","densityUnderlayerMerge","accuracyUnderlayerMerge","densityContentEnter","evidenceContentMerge","densityContentMerge","accuracyContentMerge","evidenceOverlayerMerge","densityOverlayerMerge","timeScaleMerge","timeTitleEnter","evidenceScaleMerge","densityScaleMerge","accuracyScaleMerge","evidenceScaleTransition","densityScaleTransition","elements","accuracyScaleTransition","evidenceTitleEnter","densityTitleEnter","accuracyTitleEnter","pathUpdate","rtLabel","pathEnter","myRtLabel","bbox","getBBox","pathMerge","interpolateA","interpolateZ","interpolateV","interpolateT0","pathMergeNewActive","easeTime","scaleIn","scaleOutGenerator","easeFunction","interpolator","parentElement","pathMergeNewPaused","distEnter","rtUpdate","rtEnter","rtMerge","accuracyUpdate","accuracyEnter","dataAccuracyUpdate","dataAccuracyEnter","dataAccuracyMerge","correct","boundaryUpdate","bound","boundaryEnter","boundaryMerge","includes","driftUpdate","driftEnter","driftMerge","scaleRatio","t0zUpdate","t0zEnter","t0zMerge","aUpdate","aEnter","aLabel","aShort","markerCorrection","aMerge","zUpdate","zEnter","zLabel","zShort","zMerge","vUpdate","vEnter","vLabel","driftHypotenuse","driftAngle","driftX","driftY","driftCorrection","driftAngleCorrected","driftStartX","driftStartY","driftEndX","driftEndY","vShort","vMerge","t0Update","t0Enter","t0Label","t0Short","t0Merge","meanUpdate","meanEnter","dataMeanUpdate","dataMeanEnter","sdUpdate","sdEnter","dataSDUpdate","dataSDEnter","RDK2AFCTask","probability","wait","iti","running","lifetime","speed","COHERENT","RANDOM","dots","baseTime","pauseTime","lastTime","LEFT","RIGHT","currentDirection","runner","xScale","yScale","elementSize","plotEnter","plotMerge","underlayerEnter","underlayerMerge","overlayerEnter","overlayerMerge","total","_restart","dotUpdate","realTime","currentTime","elapsedTime","frameTime","newTrial","newDot","dot","direction","birth","angle","radius","directionR","fixationUpdate","fixationEnter","queryUpdate","DDMEquation","DDMEquationAZV2PC","aInput","zInput","vInput","equation","DDMEquationAZVT02M","t0Input","DDMExample","DDMExampleHuman","accumulableControl","rdkTask","accumulableResponse","accumulableTable","ddmParameters","ddmModel","ddmFit","DDMExampleInteractive","DDMExampleModel"],"mappings":"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","x_google_ignoreList":[0,1,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,149,165]}
1
+ {"version":3,"file":"accumulableElements.umd.min.js","sources":["../../../node_modules/@lit/reactive-element/css-tag.js","../../../node_modules/@lit/reactive-element/reactive-element.js","../../../node_modules/lit-html/lit-html.js","../../../node_modules/lit-element/lit-element.js","../../../node_modules/d3-array/src/ascending.js","../../../node_modules/d3-array/src/descending.js","../../../node_modules/d3-array/src/bisector.js","../../../node_modules/d3-array/src/bisect.js","../../../node_modules/d3-array/src/number.js","../../../node_modules/d3-array/src/ticks.js","../../../node_modules/d3-axis/src/identity.js","../../../node_modules/d3-axis/src/axis.js","../../../node_modules/d3-dispatch/src/dispatch.js","../../../node_modules/d3-selection/src/namespaces.js","../../../node_modules/d3-selection/src/namespace.js","../../../node_modules/d3-selection/src/creator.js","../../../node_modules/d3-selection/src/selector.js","../../../node_modules/d3-selection/src/selectorAll.js","../../../node_modules/d3-selection/src/selection/selectAll.js","../../../node_modules/d3-selection/src/array.js","../../../node_modules/d3-selection/src/matcher.js","../../../node_modules/d3-selection/src/selection/selectChild.js","../../../node_modules/d3-selection/src/selection/selectChildren.js","../../../node_modules/d3-selection/src/selection/sparse.js","../../../node_modules/d3-selection/src/selection/enter.js","../../../node_modules/d3-selection/src/selection/data.js","../../../node_modules/d3-selection/src/selection/sort.js","../../../node_modules/d3-selection/src/selection/attr.js","../../../node_modules/d3-selection/src/window.js","../../../node_modules/d3-selection/src/selection/style.js","../../../node_modules/d3-selection/src/selection/property.js","../../../node_modules/d3-selection/src/selection/classed.js","../../../node_modules/d3-selection/src/selection/text.js","../../../node_modules/d3-selection/src/selection/html.js","../../../node_modules/d3-selection/src/selection/raise.js","../../../node_modules/d3-selection/src/selection/lower.js","../../../node_modules/d3-selection/src/selection/insert.js","../../../node_modules/d3-selection/src/selection/remove.js","../../../node_modules/d3-selection/src/selection/clone.js","../../../node_modules/d3-selection/src/selection/on.js","../../../node_modules/d3-selection/src/selection/dispatch.js","../../../node_modules/d3-selection/src/selection/index.js","../../../node_modules/d3-selection/src/select.js","../../../node_modules/d3-selection/src/selection/select.js","../../../node_modules/d3-selection/src/selection/filter.js","../../../node_modules/d3-selection/src/constant.js","../../../node_modules/d3-selection/src/selection/exit.js","../../../node_modules/d3-selection/src/selection/join.js","../../../node_modules/d3-selection/src/selection/merge.js","../../../node_modules/d3-selection/src/selection/order.js","../../../node_modules/d3-selection/src/selection/call.js","../../../node_modules/d3-selection/src/selection/nodes.js","../../../node_modules/d3-selection/src/selection/node.js","../../../node_modules/d3-selection/src/selection/size.js","../../../node_modules/d3-selection/src/selection/empty.js","../../../node_modules/d3-selection/src/selection/each.js","../../../node_modules/d3-selection/src/selection/append.js","../../../node_modules/d3-selection/src/selection/datum.js","../../../node_modules/d3-selection/src/selection/iterator.js","../../../node_modules/d3-selection/src/local.js","../../../node_modules/d3-selection/src/pointer.js","../../../node_modules/d3-selection/src/sourceEvent.js","../../../node_modules/d3-drag/src/noevent.js","../../../node_modules/d3-drag/src/constant.js","../../../node_modules/d3-drag/src/event.js","../../../node_modules/d3-drag/src/drag.js","../../../node_modules/d3-drag/src/nodrag.js","../../../node_modules/d3-color/src/define.js","../../../node_modules/d3-color/src/color.js","../../../node_modules/d3-interpolate/src/constant.js","../../../node_modules/d3-interpolate/src/color.js","../../../node_modules/d3-interpolate/src/rgb.js","../../../node_modules/d3-interpolate/src/numberArray.js","../../../node_modules/d3-interpolate/src/array.js","../../../node_modules/d3-interpolate/src/date.js","../../../node_modules/d3-interpolate/src/number.js","../../../node_modules/d3-interpolate/src/object.js","../../../node_modules/d3-interpolate/src/string.js","../../../node_modules/d3-interpolate/src/value.js","../../../node_modules/d3-interpolate/src/round.js","../../../node_modules/d3-interpolate/src/transform/decompose.js","../../../node_modules/d3-interpolate/src/transform/parse.js","../../../node_modules/d3-interpolate/src/transform/index.js","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3-timer/src/timeout.js","../../../node_modules/d3-transition/src/transition/schedule.js","../../../node_modules/d3-transition/src/transition/tween.js","../../../node_modules/d3-transition/src/transition/interpolate.js","../../../node_modules/d3-transition/src/transition/attr.js","../../../node_modules/d3-transition/src/transition/attrTween.js","../../../node_modules/d3-transition/src/transition/delay.js","../../../node_modules/d3-transition/src/transition/duration.js","../../../node_modules/d3-transition/src/transition/selection.js","../../../node_modules/d3-transition/src/transition/style.js","../../../node_modules/d3-transition/src/transition/index.js","../../../node_modules/d3-transition/src/transition/select.js","../../../node_modules/d3-transition/src/transition/selectAll.js","../../../node_modules/d3-transition/src/transition/filter.js","../../../node_modules/d3-transition/src/transition/merge.js","../../../node_modules/d3-transition/src/transition/transition.js","../../../node_modules/d3-transition/src/transition/on.js","../../../node_modules/d3-transition/src/transition/styleTween.js","../../../node_modules/d3-transition/src/transition/text.js","../../../node_modules/d3-transition/src/transition/textTween.js","../../../node_modules/d3-transition/src/transition/remove.js","../../../node_modules/d3-transition/src/transition/ease.js","../../../node_modules/d3-transition/src/transition/easeVarying.js","../../../node_modules/d3-transition/src/transition/end.js","../../../node_modules/d3-ease/src/linear.js","../../../node_modules/d3-ease/src/cubic.js","../../../node_modules/d3-transition/src/selection/transition.js","../../../node_modules/d3-transition/src/selection/index.js","../../../node_modules/d3-transition/src/selection/interrupt.js","../../../node_modules/d3-transition/src/interrupt.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-format/src/formatDecimal.js","../../../node_modules/d3-format/src/exponent.js","../../../node_modules/d3-format/src/formatSpecifier.js","../../../node_modules/d3-format/src/formatPrefixAuto.js","../../../node_modules/d3-format/src/formatRounded.js","../../../node_modules/d3-format/src/formatTypes.js","../../../node_modules/d3-format/src/identity.js","../../../node_modules/d3-format/src/locale.js","../../../node_modules/d3-format/src/defaultLocale.js","../../../node_modules/d3-format/src/formatGroup.js","../../../node_modules/d3-format/src/formatNumerals.js","../../../node_modules/d3-format/src/formatTrim.js","../../../node_modules/d3-random/src/defaultSource.js","../../../node_modules/d3-random/src/uniform.js","../../../node_modules/d3-random/src/normal.js","../../../node_modules/d3-random/src/lcg.js","../../../node_modules/d3-scale/src/init.js","../../../node_modules/d3-scale/src/number.js","../../../node_modules/d3-scale/src/continuous.js","../../../node_modules/d3-scale/src/constant.js","../../../node_modules/d3-scale/src/tickFormat.js","../../../node_modules/d3-format/src/precisionPrefix.js","../../../node_modules/d3-format/src/precisionRound.js","../../../node_modules/d3-format/src/precisionFixed.js","../../../node_modules/d3-scale/src/linear.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-shape/src/point.js","../../../node_modules/d3-shape/src/line.js","../../../node_modules/d3-shape/src/path.js","../../../node_modules/d3-shape/src/array.js","../../../node_modules/d3-zoom/src/transform.js","../../decidables-elements/src/decidables-element.js","../../decidables-elements/src/button.js","../../../node_modules/lit-html/directives/if-defined.js","../../decidables-elements/src/slider.js","../../decidables-elements/src/spinner.js","../../decidables-elements/src/switch.js","../../decidables-elements/src/toggle.js","../../decidables-elements/src/mixin-resizeable.js","../../decidables-elements/src/toggle-option.js","../src/accumulable-element.js","../src/components/accumulable-control.js","../../accumulable-math/src/ddm-math.js","../src/components/accumulable-response.js","../src/components/accumulable-table.js","../src/components/ddm-fit.js","../src/components/ddm-parameters.js","../src/components/ddm-model.js","../src/components/rdk-2afc-task.js","../../../node_modules/d3-timer/src/interval.js","../src/equations/ddm-equation.js","../src/equations/azv2pc.js","../src/equations/azvt02m.js","../src/examples/ddm-example.js","../src/examples/human.js","../src/examples/interactive.js","../src/examples/model.js"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1]),t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){const e=this.constructor,h=this[t];if(i??=e.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(e._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach((t=>this._$ET(t,this[t]))),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.1\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t.trustedTypes,s=i?i.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,e=\"$lit$\",h=`lit$${Math.random().toFixed(9).slice(2)}$`,o=\"?\"+h,n=`<${o}>`,r=document,l=()=>r.createComment(\"\"),c=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,a=Array.isArray,u=t=>a(t)||\"function\"==typeof t?.[Symbol.iterator],d=\"[ \\t\\n\\f\\r]\",f=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,v=/-->/g,_=/>/g,m=RegExp(`>|${d}(?:([^\\\\s\"'>=/]+)(${d}*=${d}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),p=/'/g,g=/\"/g,$=/^(?:script|style|textarea|title)$/i,y=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),x=y(1),b=y(2),w=y(3),T=Symbol.for(\"lit-noChange\"),E=Symbol.for(\"lit-nothing\"),A=new WeakMap,C=r.createTreeWalker(r,129);function P(t,i){if(!a(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==s?s.createHTML(i):i}const V=(t,i)=>{const s=t.length-1,o=[];let r,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=f;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,y=0;for(;y<s.length&&(c.lastIndex=y,u=c.exec(s),null!==u);)y=c.lastIndex,c===f?\"!--\"===u[1]?c=v:void 0!==u[1]?c=_:void 0!==u[2]?($.test(u[2])&&(r=RegExp(\"</\"+u[2],\"g\")),c=m):void 0!==u[3]&&(c=m):c===m?\">\"===u[0]?(c=r??f,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?m:'\"'===u[3]?g:p):c===g||c===p?c=m:c===v||c===_?c=f:(c=m,r=void 0);const x=c===m&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===f?s+n:d>=0?(o.push(a),s.slice(0,d)+e+s.slice(d)+h+x):s+h+(-2===d?i:x)}return[P(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),o]};class N{constructor({strings:t,_$litType$:s},n){let r;this.parts=[];let c=0,a=0;const u=t.length-1,d=this.parts,[f,v]=V(t,s);if(this.el=N.createElement(f,n),C.currentNode=this.el.content,2===s||3===s){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=C.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(e)){const i=v[a++],s=r.getAttribute(t).split(h),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:c,name:e[2],strings:s,ctor:\".\"===e[1]?H:\"?\"===e[1]?I:\"@\"===e[1]?L:k}),r.removeAttribute(t)}else t.startsWith(h)&&(d.push({type:6,index:c}),r.removeAttribute(t));if($.test(r.tagName)){const t=r.textContent.split(h),s=t.length-1;if(s>0){r.textContent=i?i.emptyScript:\"\";for(let i=0;i<s;i++)r.append(t[i],l()),C.nextNode(),d.push({type:2,index:++c});r.append(t[s],l())}}}else if(8===r.nodeType)if(r.data===o)d.push({type:2,index:c});else{let t=-1;for(;-1!==(t=r.data.indexOf(h,t+1));)d.push({type:7,index:c}),t+=h.length-1}c++}}static createElement(t,i){const s=r.createElement(\"template\");return s.innerHTML=t,s}}function S(t,i,s=t,e){if(i===T)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=c(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=S(t,h._$AS(t,i.values),h,e)),i}class M{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??r).importNode(i,!0);C.currentNode=e;let h=C.nextNode(),o=0,n=0,l=s[0];for(;void 0!==l;){if(o===l.index){let i;2===l.type?i=new R(h,h.nextSibling,this,t):1===l.type?i=new l.ctor(h,l.name,l.strings,this,t):6===l.type&&(i=new z(h,this,t)),this._$AV.push(i),l=s[++n]}o!==l?.index&&(h=C.nextNode(),o++)}return C.currentNode=r,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class R{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=E,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=S(this,t,i),c(t)?t===E||null==t||\"\"===t?(this._$AH!==E&&this._$AR(),this._$AH=E):t!==this._$AH&&t!==T&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):u(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==E&&c(this._$AH)?this._$AA.nextSibling.data=t:this.T(r.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=N.createElement(P(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new M(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=A.get(t.strings);return void 0===i&&A.set(t.strings,i=new N(t)),i}k(t){a(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new R(this.O(l()),this.O(l()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,i){for(this._$AP?.(!1,!0,i);t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class k{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=E,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=E}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=S(this,t,i,0),o=!c(t)||t!==this._$AH&&t!==T,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=S(this,e[s+n],i,n),r===T&&(r=this._$AH[n]),o||=!c(r)||r!==this._$AH[n],r===E?t=E:t!==E&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===E?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class H extends k{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===E?void 0:t}}class I extends k{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==E)}}class L extends k{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=S(this,t,i,0)??E)===T)return;const s=this._$AH,e=t===E&&s!==E||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==E&&(s===E||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){S(this,t)}}const Z={M:e,P:h,A:o,C:1,L:V,R:M,D:u,V:S,I:R,H:k,N:I,U:L,B:H,F:z},j=t.litHtmlPolyfillSupport;j?.(N,R),(t.litHtmlVersions??=[]).push(\"3.3.1\");const B=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new R(i.insertBefore(l(),t),t,void 0,s??{})}return h._$AI(t),h};export{Z as _$LH,x as html,w as mathml,T as noChange,E as nothing,B as render,b as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.1\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","export default x => () => x;\n","export default function DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view)\n .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n nodrag(event.view);\n nopropagation(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","export const linear = t => +t;\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","export default Math.random;\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomUniform(source) {\n function randomUniform(min, max) {\n min = min == null ? 0 : +min;\n max = max == null ? 1 : +max;\n if (arguments.length === 1) max = min, min = 0;\n else max -= min;\n return function() {\n return source() * max + min;\n };\n }\n\n randomUniform.source = sourceRandomUniform;\n\n return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomNormal(source) {\n function randomNormal(mu, sigma) {\n var x, r;\n mu = mu == null ? 0 : +mu;\n sigma = sigma == null ? 1 : +sigma;\n return function() {\n var y;\n\n // If available, use the second previously-generated uniform random.\n if (x != null) y = x, x = null;\n\n // Otherwise, generate a new x and y.\n else do {\n x = source() * 2 - 1;\n y = source() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n\n return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n };\n }\n\n randomNormal.source = sourceRandomNormal;\n\n return randomNormal;\n})(defaultSource);\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst mul = 0x19660D;\nconst inc = 0x3C6EF35F;\nconst eps = 1 / 0x100000000;\n\nexport default function lcg(seed = Math.random()) {\n let state = (0 <= seed && seed < 1 ? seed / eps : Math.abs(seed)) | 0;\n return () => (state = mul * state + inc | 0, eps * (state >>> 0));\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","\nimport {\n LitElement,\n css,\n svg,\n unsafeCSS,\n} from 'lit';\nimport * as d3 from 'd3';\n\n/*\n DecidablesElement Base Class - Not intended for instantiation!\n <decidables-element>\n*/\nexport default class DecidablesElement extends LitElement {\n getComputedStyleValue(property) {\n return getComputedStyle(this).getPropertyValue(property).trim();\n }\n\n firstUpdated(changedProperties) {\n super.firstUpdated(changedProperties);\n\n // Use focus highlighting if keyboard is used at all\n d3.select(this.renderRoot.host)\n .classed('keyboard', true)\n .on('mousemove.keyboard touchstart.keyboard', (event) => {\n const element = event.currentTarget;\n d3.select(element.renderRoot.host)\n .classed('keyboard', false)\n .on('mousemove.keyboard touchstart.keyboard', null);\n })\n .on('keydown.keyboard', (event) => {\n const element = event.currentTarget;\n d3.select(element.renderRoot.host)\n .classed('keyboard', true)\n .on('keydown.keyboard mousemove.keyboard touchstart.keyboard', null);\n });\n }\n\n static get greys() {\n const grey = '#999999';\n const greys = {};\n greys.white = '#ffffff';\n greys.light75 = d3.interpolateRgb(grey, '#ffffff')(0.75);\n greys.light50 = d3.interpolateRgb(grey, '#ffffff')(0.5);\n greys.light25 = d3.interpolateRgb(grey, '#ffffff')(0.25);\n greys.grey = grey;\n greys.dark25 = d3.interpolateRgb(grey, '#000000')(0.25);\n greys.dark50 = d3.interpolateRgb(grey, '#000000')(0.5);\n greys.dark75 = d3.interpolateRgb(grey, '#000000')(0.75);\n greys.black = '#000000';\n return greys;\n }\n\n static get shadows() {\n // Material Design elevation styles\n // References:\n // https://github.com/material-components/material-components-web/tree/master/packages/mdc-elevation\n // https://codepen.io/hanger/pen/yOGvQp\n /* eslint-disable key-spacing, object-curly-newline */\n return {\n elevations: [0, 2, 4, 8, 16],\n baselineColor: '#000000',\n baselineColorString: '0, 0, 0',\n inverseBaselineColor: '#FFFFFF',\n inverseBaselineColorString: '255, 255, 255',\n opacityUmbra: 0.2,\n opacityPenumbra: 0.14,\n opacityAmbient: 0.12,\n opacityBoost: 0.2,\n mapUmbra: {// $mdc-elevation-umbra-map\n 0: {x: 0, y: 0, b: 0, s: 0}, // offset-x, offset-y, blur-radius, spread-radius\n 2: {x: 0, y: 3, b: 1, s: -2},\n 4: {x: 0, y: 2, b: 4, s: -1},\n 8: {x: 0, y: 5, b: 5, s: -3},\n 16: {x: 0, y: 8, b: 10, s: -5},\n },\n mapPenumbra: {// $mdc-elevation-penumbra-map\n 0: {x: 0, y: 0, b: 0, s: 0}, // offset-x, offset-y, blur-radius, spread-radius\n 2: {x: 0, y: 2, b: 2, s: 0},\n 4: {x: 0, y: 4, b: 5, s: 0},\n 8: {x: 0, y: 8, b: 10, s: 1},\n 16: {x: 0, y: 16, b: 24, s: 2},\n },\n mapAmbient: {// $mdc-elevation-ambient-map\n 0: {x: 0, y: 0, b: 0, s: 0}, // offset-x, offset-y, blur-radius, spread-radius\n 2: {x: 0, y: 1, b: 5, s: 0},\n 4: {x: 0, y: 1, b: 10, s: 0},\n 8: {x: 0, y: 3, b: 14, s: 2},\n 16: {x: 0, y: 6, b: 30, s: 5},\n },\n };\n /* eslint-enable key-spacing, object-curly-newline */\n }\n\n static cssBoxShadow(elevation, rotate = false, inverse = false) {\n const umbraO = this.shadows.opacityUmbra + this.shadows.opacityBoost;\n const penumbraO = this.shadows.opacityPenumbra + this.shadows.opacityBoost;\n const ambientO = this.shadows.opacityAmbient + this.shadows.opacityBoost;\n\n const umbraC = (inverse)\n ? `rgba(${this.shadows.inverseBaselineColorString}, ${umbraO})`\n : `rgba(${this.shadows.baselineColorString}, ${umbraO})`;\n const penumbraC = (inverse)\n ? `rgba(${this.shadows.inverseBaselineColorString}, ${penumbraO})`\n : `rgba(${this.shadows.baselineColorString}, ${penumbraO})`;\n const ambientC = (inverse)\n ? `rgba(${this.shadows.inverseBaselineColorString}, ${ambientO})`\n : `rgba(${this.shadows.baselineColorString}, ${ambientO})`;\n\n const umbraM = this.shadows.mapUmbra[elevation];\n const penumbraM = this.shadows.mapPenumbra[elevation];\n const ambientM = this.shadows.mapAmbient[elevation];\n\n const umbraS = (rotate)\n ? `${-umbraM.y}px ${umbraM.y / 2}px ${umbraM.b}px ${umbraM.s}px`\n : `${umbraM.y / 2}px ${umbraM.y}px ${umbraM.b}px ${umbraM.s}px`;\n const penumbraS = (rotate)\n ? `${-penumbraM.y}px ${penumbraM.y / 2}px ${penumbraM.b}px ${penumbraM.s}px`\n : `${penumbraM.y / 2}px ${penumbraM.y}px ${penumbraM.b}px ${penumbraM.s}px`;\n const ambientS = (rotate)\n ? `${-ambientM.y}px ${ambientM.y / 2}px ${ambientM.b}px ${ambientM.s}px`\n : `${ambientM.y / 2}px ${ambientM.y}px ${ambientM.b}px ${ambientM.s}px`;\n\n return `${umbraS} ${umbraC}, ${penumbraS} ${penumbraC}, ${ambientS} ${ambientC}`;\n }\n\n static get svgFilters() {\n const shadows = DecidablesElement.shadows; /* eslint-disable-line prefer-destructuring */\n\n const filters = shadows.elevations.map((z) => {\n return svg`\n <filter id=${`shadow-${z}`} filterUnits=\"userSpaceOnUse\" x=\"-100%\" y=\"-100%\" width=\"200%\" height=\"200%\">\n <feComponentTransfer in=\"SourceAlpha\" result=\"solid\">\n <feFuncA type=\"table\" tableValues=\"0 1 1\"/>\n </feComponentTransfer>\n <feOffset in=\"solid\" result=\"offU\" dx=${shadows.mapUmbra[z].y / 2} dy=${shadows.mapUmbra[z].y} />\n <feOffset in=\"solid\" result=\"offP\" dx=${shadows.mapPenumbra[z].y / 2} dy=${shadows.mapPenumbra[z].y} />\n <feOffset in=\"solid\" result=\"offA\" dx=${shadows.mapAmbient[z].y / 2} dy=${shadows.mapAmbient[z].y} />\n ${(shadows.mapUmbra[z].s === 0)\n ? svg``\n : svg`<feMorphology in=\"offU\" result=\"spreadU\" operator=${(shadows.mapUmbra[z].s > 0) ? 'dilate' : 'erode'} radius=${Math.abs(shadows.mapUmbra[z].s)} />`\n }\n ${(shadows.mapPenumbra[z].s === 0)\n ? svg``\n : svg`<feMorphology in=\"offP\" result=\"spreadP\" operator=${(shadows.mapPenumbra[z].s > 0) ? 'dilate' : 'erode'} radius=${Math.abs(shadows.mapPenumbra[z].s)} />`\n }\n ${(shadows.mapAmbient[z].s === 0)\n ? svg``\n : svg`<feMorphology in=\"offA\" result=\"spreadA\" operator=${(shadows.mapAmbient[z].s > 0) ? 'dilate' : 'erode'} radius=${Math.abs(shadows.mapAmbient[z].s)} />`\n }\n <feGaussianBlur in=${(shadows.mapUmbra[z].s === 0) ? 'offU' : 'spreadU'} result=\"blurU\" stdDeviation=${shadows.mapUmbra[z].b / 2} />\n <feGaussianBlur in=${(shadows.mapPenumbra[z].s === 0) ? 'offP' : 'spreadP'} result=\"blurP\" stdDeviation=${shadows.mapPenumbra[z].b / 2} />\n <feGaussianBlur in=${(shadows.mapAmbient[z].s === 0) ? 'offA' : 'spreadA'} result=\"blurA\" stdDeviation=${shadows.mapAmbient[z].b / 2} />\n <feFlood in=\"SourceGraphic\" result=\"opU\" flood-color=${shadows.baselineColor} flood-opacity=${shadows.opacityUmbra + shadows.opacityBoost} />\n <feFlood in=\"SourceGraphic\" result=\"opP\" flood-color=${shadows.baselineColor} flood-opacity=${shadows.opacityPenumbra + shadows.opacityBoost} />\n <feFlood in=\"SourceGraphic\" result=\"opA\" flood-color=${shadows.baselineColor} flood-opacity=${shadows.opacityAmbient + shadows.opacityBoost} />\n <feComposite in=\"opU\" in2=\"blurU\" result=\"shU\" operator=\"in\" />\n <feComposite in=\"opP\" in2=\"blurP\" result=\"shP\" operator=\"in\" />\n <feComposite in=\"opA\" in2=\"blurA\" result=\"shA\" operator=\"in\" />\n <feMorphology in=\"solid\" result=\"smaller\" operator=\"erode\" radius=\"1\" />\n <feComposite in=\"shU\" in2=\"smaller\" result=\"finalU\" operator=\"out\" />\n <feComposite in=\"shP\" in2=\"smaller\" result=\"finalP\" operator=\"out\" />\n <feComposite in=\"shA\" in2=\"smaller\" result=\"finalA\" operator=\"out\" />\n <feMerge>\n <feMergeNode in=\"finalU\" />\n <feMergeNode in=\"finalP\" />\n <feMergeNode in=\"finalA\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>`;\n });\n\n return svg`\n <defs class=\"filtersUser\">\n ${filters}\n </defs>\n `;\n }\n\n static get styles() {\n return css`\n :host {\n ---shadow-0: var(--shadow-0, ${unsafeCSS(this.cssBoxShadow(0))});\n ---shadow-2: var(--shadow-2, ${unsafeCSS(this.cssBoxShadow(2))});\n ---shadow-4: var(--shadow-4, ${unsafeCSS(this.cssBoxShadow(4))});\n ---shadow-8: var(--shadow-8, ${unsafeCSS(this.cssBoxShadow(8))});\n\n ---color-background: var(--color-background, ${unsafeCSS(this.greys.white)});\n ---color-border: var(--color-border, ${unsafeCSS(this.greys.light75)});\n ---color-text: var(--color-text, ${unsafeCSS(this.greys.dark75)});\n ---color-text-inverse: var(--color-text-inverse, ${unsafeCSS(this.greys.white)});\n ---color-link: var(--color-link, ${unsafeCSS(this.greys.dark25)});\n ---color-element-background: var(--color-element-background, ${unsafeCSS(this.greys.light75)});\n ---color-element-disabled: var(--color-element-disabled, ${unsafeCSS(this.greys.light50)});\n ---color-element-enabled: var(--color-element-enabled, ${unsafeCSS(this.greys.dark25)});\n ---color-element-selected: var(--color-element-selected, ${unsafeCSS(this.greys.grey)});\n ---color-element-border: var(--color-element-border, ${unsafeCSS(this.greys.dark50)});\n ---color-element-emphasis: var(--color-element-emphasis, ${unsafeCSS(this.greys.dark75)});\n\n ---font-family-base: var(--font-family-base, \"Source Sans\", sans-serif);\n ---font-family-math: var(--font-family-math, \"Source Serif\", serif);\n\n ---border: var(--border, 1px solid var(---color-border));\n ---border-radius: var(--border-radius, 0.25rem);\n ---transition-duration: var(--transition-duration, 500ms);\n\n font-family: var(---font-family-base);\n font-weight: normal;\n }\n\n :host,\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: border-box;\n }\n\n .math-greek {\n font-family: var(---font-family-math);\n font-style: normal;\n }\n\n .math-num {\n font-family: var(---font-family-base);\n font-style: normal;\n }\n\n .math-var {\n font-family: var(---font-family-math);\n font-style: italic;\n }\n\n .defs {\n display: block;\n\n width: 0;\n height: 0;\n }\n `;\n }\n}\n","\nimport {css, html} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesButton extends DecidablesElement {\n static get properties() {\n return {\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.disabled = false;\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n ---decidables-button-background-color-disabled: var(--decidables-button-background-color, var(---color-element-disabled));\n ---decidables-button-background-color-enabled: var(--decidables-button-background-color, var(---color-element-enabled));\n\n margin: 0.25rem;\n }\n\n button {\n width: 100%;\n height: 100%;\n padding: 0.375rem 0.75rem;\n\n font-family: var(---font-family-base);\n font-size: 1.125rem;\n line-height: 1.5;\n color: var(---color-text-inverse);\n\n border: 0;\n border-radius: var(---border-radius);\n outline: none;\n }\n\n button:disabled {\n background-color: var(---decidables-button-background-color-disabled);\n outline: none;\n box-shadow: none;\n }\n\n button:enabled {\n cursor: pointer;\n\n background-color: var(---decidables-button-background-color-enabled);\n outline: none;\n box-shadow: var(---shadow-2);\n }\n\n button:enabled:hover {\n outline: none;\n box-shadow: var(---shadow-4);\n }\n\n button:enabled:active {\n outline: none;\n box-shadow: var(---shadow-8);\n }\n\n :host(.keyboard) button:enabled:focus {\n outline: none;\n box-shadow: var(---shadow-4);\n }\n\n :host(.keyboard) button:enabled:focus:active {\n outline: none;\n box-shadow: var(---shadow-8);\n }\n `,\n ];\n }\n\n render() {\n return html`\n <button ?disabled=${this.disabled}>\n <slot></slot>\n </button>\n `;\n }\n}\n\ncustomElements.define('decidables-button', DecidablesButton);\n","import{nothing as t}from\"../lit-html.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o=o=>o??t;export{o as ifDefined};\n//# sourceMappingURL=if-defined.js.map\n","\nimport {ifDefined} from 'lit/directives/if-defined.js'; /* eslint-disable-line import/extensions */\nimport {html, css, unsafeCSS} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesSlider extends DecidablesElement {\n static get properties() {\n return {\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n\n scale: {\n attribute: 'scale',\n type: Boolean,\n reflect: true,\n },\n\n max: {\n attribute: 'max',\n type: Number,\n reflect: true,\n },\n min: {\n attribute: 'min',\n type: Number,\n reflect: true,\n },\n step: {\n attribute: 'step',\n type: Number,\n reflect: true,\n },\n value: {\n attribute: 'value',\n type: Number,\n reflect: true,\n },\n\n nonlinear: {\n attribute: false,\n type: Boolean,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.disabled = false;\n\n this.scale = false;\n\n this.max = undefined;\n this.min = undefined;\n this.step = undefined;\n this.value = undefined;\n\n this.nonlinear = false;\n\n // Properties\n this.rangeMax = undefined;\n this.rangeMin = undefined;\n this.rangeStep = undefined;\n this.rangeValue = undefined;\n\n // Transform\n this.toRange = undefined;\n this.fromRange = undefined;\n }\n\n nonlinearRange(nonlinear, toRange, fromRange) {\n this.nonlinear = nonlinear;\n\n this.toRange = nonlinear ? toRange : undefined;\n this.fromRange = nonlinear ? fromRange : undefined;\n }\n\n rangeChanged(event) {\n this.value = this.nonlinear ? this.fromRange(event.target.value) : event.target.value;\n this.dispatchEvent(new CustomEvent('change', {\n detail: {\n value: this.value,\n },\n bubbles: true,\n }));\n }\n\n rangeInputted(event) {\n this.value = this.nonlinear ? this.fromRange(event.target.value) : event.target.value;\n }\n\n spinnerInputted(event) {\n this.value = event.target.value;\n }\n\n willUpdate() {\n this.rangeMax = (this.max === undefined)\n ? undefined\n : this.nonlinear\n ? this.toRange(this.max)\n : this.max;\n this.rangeMin = (this.min === undefined)\n ? undefined\n : this.nonlinear\n ? this.toRange(this.min)\n : this.min;\n this.rangeStep = (this.step === undefined)\n ? undefined\n : this.nonlinear\n ? 'any'\n : this.step;\n this.rangeValue = (this.value === undefined)\n ? undefined\n : this.nonlinear\n ? this.toRange(this.value)\n : this.value;\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n ---decidables-slider-background-color: var(--decidables-slider-background-color, var(---color-element-disabled));\n ---decidables-slider-color: var(--decidables-slider-color, var(---color-element-enabled));\n ---decidables-spinner-background-color: var(--decidables-slider-background-color, none);\n\n ---shadow-2-rotate: var(--shadow-2-rotate, ${unsafeCSS(this.cssBoxShadow(2, true, false))});\n ---shadow-4-rotate: var(--shadow-4-rotate, ${unsafeCSS(this.cssBoxShadow(4, true, false))});\n ---shadow-8-rotate: var(--shadow-8-rotate, ${unsafeCSS(this.cssBoxShadow(8, true, false))});\n\n display: flex;\n\n flex-direction: column;\n\n align-items: center;\n justify-content: center;\n }\n\n label {\n margin: 0.25rem 0.25rem 0;\n }\n\n .range {\n position: relative;\n display: flex;\n\n flex-direction: row;\n\n width: 3.5rem;\n height: 4.75rem;\n margin: 0 0.25rem 0.25rem;\n }\n\n decidables-spinner {\n --decidables-spinner-input-width: 3.5rem;\n\n margin: 0 0.25rem 0.25rem;\n\n background: var(---decidables-spinner-background-color);\n }\n\n /* Adapted from http://danielstern.ca/range.css/#/ */\n /* Overall */\n input[type=range] {\n width: 4.75rem;\n height: 3.5rem;\n padding: 0;\n margin: 0;\n\n background-color: unset;\n\n transform: rotate(-90deg);\n transform-origin: 2.375rem 2.375rem;\n\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-appearance: none;\n }\n\n input[type=range]:enabled {\n cursor: ns-resize;\n }\n\n input[type=range]:focus {\n outline: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-ms-tooltip {\n display: none;\n }\n\n /* Track */\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-webkit-slider-runnable-track {\n width: 100%;\n height: 4px;\n\n background: var(---decidables-slider-background-color);\n border: 0;\n border-radius: 2px;\n box-shadow: none;\n }\n\n input[type=range]:focus::-webkit-slider-runnable-track {\n background: var(---decidables-slider-background-color);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-moz-range-track {\n width: 100%;\n height: 4px;\n\n background: var(---decidables-slider-background-color);\n border: 0;\n border-radius: 2px;\n box-shadow: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-ms-track {\n width: 100%;\n height: 4px;\n\n color: transparent;\n\n background: transparent;\n border-color: transparent;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-ms-fill-lower {\n background: #cccccc;\n /* background: var(---decidables-slider-background-color); */\n border: 0;\n border-radius: 2px;\n box-shadow: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-ms-fill-upper {\n background: #cccccc;\n /* background: var(---decidables-slider-background-color); */\n border: 0;\n border-radius: 2px;\n box-shadow: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:focus::-ms-fill-lower {\n background: var(---decidables-slider-background-color);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:focus::-ms-fill-upper {\n background: var(---decidables-slider-background-color);\n }\n\n /* Thumb */\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-webkit-slider-thumb {\n width: 10px;\n height: 20px;\n margin-top: -8px;\n\n border: 0;\n border-radius: 4px;\n\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-appearance: none;\n }\n\n input[type=range]:disabled::-webkit-slider-thumb {\n background: var(---decidables-slider-background-color);\n box-shadow: none;\n }\n\n input[type=range]:enabled::-webkit-slider-thumb {\n background: var(---decidables-slider-color);\n box-shadow: var(---shadow-2-rotate);\n }\n\n input[type=range]:enabled:hover::-webkit-slider-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n input[type=range]:enabled:active::-webkit-slider-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n :host(.keyboard) input[type=range]:enabled:focus::-webkit-slider-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n :host(.keyboard) input[type=range]:focus:active::-webkit-slider-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-moz-range-thumb {\n width: 10px;\n height: 20px;\n\n border: 0;\n border-radius: 4px;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:disabled::-moz-range-thumb {\n background: var(---decidables-slider-background-color);\n box-shadow: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled::-moz-range-thumb {\n background: var(---decidables-slider-color);\n box-shadow: var(---shadow-2-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled:hover::-moz-range-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled:active::-moz-range-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n :host(.keyboard) input[type=range]:enabled:focus::-moz-range-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n :host(.keyboard) input[type=range]:enabled:focus:active::-moz-range-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]::-ms-thumb {\n width: 10px;\n height: 20px;\n margin-top: 0;\n\n background: #999999;\n /* background: var(---color-element-enabled); */\n border: 0;\n border-radius: 4px;\n box-shadow: var(---shadow-2-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:disabled::-ms-thumb {\n background: var(---decidables-slider-background-color);\n box-shadow: none;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled::-ms-thumb {\n background: var(---decidables-slider-color);\n box-shadow: var(---shadow-2-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled:hover::-ms-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n input[type=range]:enabled:active::-ms-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */\n :host(.keyboard) input[type=range]:enabled:focus::-ms-thumb {\n box-shadow: var(---shadow-4-rotate);\n }\n\n :host(.keyboard) input[type=range]:enabled:focus:active::-ms-thumb {\n box-shadow: var(---shadow-8-rotate);\n }\n\n datalist {\n position: absolute;\n left: 2rem;\n z-index: -1;\n display: flex;\n\n flex-direction: column;\n\n align-items: flex-start;\n justify-content: space-between;\n\n height: 4.75rem;\n\n font-size: 0.75rem;\n }\n\n option {\n padding: 0;\n\n line-height: 0.8;\n min-block-size: 0;\n }\n\n option::before {\n content: \"– \";\n }\n `,\n ];\n }\n\n render() {\n return html`\n <label for=\"slider\">\n <slot></slot>\n </label>\n <div class=\"range\">\n <input ?disabled=${this.disabled} type=\"range\" id=\"slider\" min=${ifDefined(this.rangeMin)} max=${ifDefined(this.rangeMax)} step=${ifDefined(this.rangeStep)} .value=${this.rangeValue} @change=${this.rangeChanged.bind(this)} @input=${this.rangeInputted.bind(this)}>\n ${this.scale\n ? html`\n <datalist id=\"ticks\">\n <option value=${ifDefined(this.rangeMax)} label=${ifDefined(this.max)}></option>\n <option value=${ifDefined(this.rangeMin)} label=${ifDefined(this.min)}></option>\n </datalist>\n `\n : html``\n }\n </div>\n <decidables-spinner ?disabled=${this.disabled} min=${ifDefined(this.min)} max=${ifDefined(this.max)} step=${ifDefined(this.step)} .value=${this.value} @input=${this.spinnerInputted.bind(this)}></decidables-spinner>\n `;\n }\n}\n\ncustomElements.define('decidables-slider', DecidablesSlider);\n","\nimport {ifDefined} from 'lit/directives/if-defined.js'; /* eslint-disable-line import/extensions */\nimport {css, html} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesSpinner extends DecidablesElement {\n static get properties() {\n return {\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n max: {\n attribute: 'max',\n type: Number,\n reflect: true,\n },\n min: {\n attribute: 'min',\n type: Number,\n reflect: true,\n },\n step: {\n attribute: 'step',\n type: Number,\n reflect: true,\n },\n value: {\n attribute: 'value',\n type: Number,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.disabled = false;\n this.max = undefined;\n this.min = undefined;\n this.step = undefined;\n this.value = undefined;\n }\n\n inputted(event) {\n this.value = event.target.value;\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n ---decidables-spinner-font-size: var(--decidables-spinner-font-size, 1.125rem);\n ---decidables-spinner-input-width: var(--decidables-spinner-input-width, 4rem);\n ---decidables-spinner-prefix: var(--decidables-spinner-prefix, \"\");\n\n ---decidables-spinner-postfix: var(--decidables-spinner-postfix, \"\");\n ---decidables-spinner-postfix-padding: var(--decidables-spinner-postfix-padding, 0);\n\n display: block;\n }\n\n label {\n position: relative;\n display: flex;\n\n flex-direction: column;\n\n align-items: center;\n\n margin: 0;\n\n font-size: 0.75rem;\n }\n\n label::before {\n position: absolute;\n bottom: 1px;\n left: calc(50% - var(---decidables-spinner-input-width) / 2 + 0.25rem);\n\n font-size: var(---decidables-spinner-font-size);\n line-height: normal;\n\n content: var(---decidables-spinner-prefix);\n }\n\n label::after {\n position: absolute;\n right: 0.25rem;\n bottom: 1px;\n\n font-size: var(---decidables-spinner-font-size);\n line-height: normal;\n\n content: var(---decidables-spinner-postfix);\n }\n\n input[type=number] {\n width: var(---decidables-spinner-input-width);\n padding-right: var(---decidables-spinner-postfix-padding);\n\n font-family: var(---font-family-base);\n font-size: var(---decidables-spinner-font-size);\n color: inherit;\n text-align: right;\n\n background: none;\n border: 0;\n border-radius: 0;\n outline: none;\n box-shadow: var(---shadow-2);\n\n -webkit-appearance: none; /* stylelint-disable-line property-no-vendor-prefix */\n }\n\n input[type=number]:hover {\n box-shadow: var(---shadow-4);\n }\n\n input[type=number]:focus,\n input[type=number]:active {\n box-shadow: var(---shadow-8);\n }\n\n input[type=number]:disabled {\n color: var(---color-text);\n\n border: 0;\n box-shadow: none;\n\n /* HACK: Use correct text color in Safari */\n -webkit-opacity: 1;\n /* HACK: Hide spinners in disabled input for Firefox and Safari */\n -moz-appearance: textfield; /* stylelint-disable-line property-no-vendor-prefix */\n /* HACK: Use correct text color in Safari */\n -webkit-text-fill-color: var(---color-text);\n }\n\n /* HACK: Hide spinners in disabled input for Firefox and Safari */\n input[type=number]:disabled::-webkit-outer-spin-button,\n input[type=number]:disabled::-webkit-inner-spin-button {\n margin: 0;\n -webkit-appearance: none; /* stylelint-disable-line property-no-vendor-prefix */\n }\n `,\n ];\n }\n\n render() {\n return html`\n <label>\n <slot></slot>\n <input ?disabled=${this.disabled} type=\"number\" min=${ifDefined(this.min)} max=${ifDefined(this.max)} step=${ifDefined(this.step)} .value=${this.value} @input=${this.inputted.bind(this)}>\n </label>\n `;\n }\n}\n\ncustomElements.define('decidables-spinner', DecidablesSpinner);\n","\nimport {css, html} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesSwitch extends DecidablesElement {\n static get properties() {\n return {\n checked: {\n attribute: 'checked',\n type: Boolean,\n reflect: true,\n },\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.checked = false;\n this.disabled = false;\n }\n\n changed(event) {\n this.checked = event.target.checked;\n this.dispatchEvent(new CustomEvent('change', {\n detail: {\n checked: this.checked,\n },\n bubbles: true,\n }));\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: flex;\n\n flex-direction: column;\n\n align-items: center;\n justify-content: center;\n }\n\n /* Adapted from https://codepen.io/guuslieben/pen/YyPRVP */\n input[type=checkbox] {\n /* visuallyhidden: https://github.com/h5bp/html5-boilerplate/blob/master/dist/doc/css.md */\n position: absolute;\n\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n\n white-space: nowrap;\n\n border: 0;\n clip-path: inset(100%); /* May cause a performance issue: https://github.com/h5bp/html5-boilerplate/issues/2021 */\n }\n\n input[type=checkbox] + label {\n order: 1;\n\n margin: 0 0.25rem 0.25rem;\n\n font-weight: 400;\n }\n\n input[type=checkbox] + label + label {\n position: relative;\n\n min-width: 24px;\n padding: 0 0 36px;\n margin: 0.25rem 0.25rem 0;\n\n font-weight: 400;\n\n outline: none;\n }\n\n input[type=checkbox] + label + label::before,\n input[type=checkbox] + label + label::after {\n position: absolute;\n\n left: 50%;\n\n margin: 0;\n\n content: \"\";\n\n outline: 0;\n\n transition: all var(---transition-duration) ease;\n transform: translate(-50%, 0);\n }\n\n input[type=checkbox] + label + label::before {\n bottom: 1px;\n\n width: 8px;\n height: 34px;\n\n background-color: var(---color-element-disabled);\n border-radius: 4px;\n }\n\n input[type=checkbox] + label + label::after {\n bottom: 0;\n\n width: 18px;\n height: 18px;\n\n background-color: var(---color-element-enabled);\n border-radius: 50%;\n box-shadow: var(---shadow-2);\n }\n\n input[type=checkbox]:checked + label + label::after {\n transform: translate(-50%, -100%);\n }\n\n input[type=checkbox]:disabled + label + label::after {\n background-color: var(---color-element-disabled);\n box-shadow: none;\n }\n\n input[type=checkbox]:enabled + label,\n input[type=checkbox]:enabled + label + label {\n cursor: pointer;\n }\n\n input[type=checkbox]:enabled + label:hover + label::after,\n input[type=checkbox]:enabled + label + label:hover::after {\n box-shadow: var(---shadow-4);\n }\n\n input[type=checkbox]:enabled + label:active + label::after,\n input[type=checkbox]:enabled + label + label:active::after {\n box-shadow: var(---shadow-8);\n }\n\n /* stylelint-disable-next-line selector-max-compound-selectors */\n :host(.keyboard) input[type=checkbox]:enabled:focus + label + label::after {\n box-shadow: var(---shadow-4);\n }\n\n /* stylelint-disable selector-max-compound-selectors */\n :host(.keyboard) input[type=checkbox]:enabled:focus + label + label:active::after,\n :host(.keyboard) input[type=checkbox]:enabled:focus:active + label + label::after {\n box-shadow: var(---shadow-8);\n }\n /* stylelint-enable selector-max-compound-selectors */\n `,\n ];\n }\n\n render() {\n return html`\n <input type=\"checkbox\" id=\"switch\" ?checked=${this.checked} ?disabled=${this.disabled} @change=${this.changed.bind(this)}>\n <label for=\"switch\">\n <slot name=\"off-label\"></slot>\n </label>\n <label for=\"switch\">\n <slot></slot>\n </label>\n `;\n }\n}\n\ncustomElements.define('decidables-switch', DecidablesSwitch);\n","\nimport {css, html} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesToggle extends DecidablesElement {\n static get properties() {\n return {\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.disabled = false;\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n fieldset {\n display: flex;\n\n flex-direction: column;\n\n align-items: stretch;\n justify-content: center;\n\n margin: 0.25rem;\n\n border: 0;\n }\n\n legend {\n text-align: center;\n }\n `,\n ];\n }\n\n render() {\n return html`\n <fieldset ?disabled=${this.disabled}>\n <legend><slot name=\"label\"></slot></legend>\n <slot></slot>\n </fieldset>\n `;\n }\n}\n\ncustomElements.define('decidables-toggle', DecidablesToggle);\n","\nexport default function DecidablesMixinResizeable(superClass) {\n return class extends superClass {\n static get properties() {\n return {\n width: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n height: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n rem: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n this.width = NaN;\n this.height = NaN;\n this.rem = NaN;\n }\n\n getDimensions() {\n this.width = parseFloat(this.getComputedStyleValue('width'), 10);\n this.height = parseFloat(this.getComputedStyleValue('height'), 10);\n this.rem = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('font-size'), 10);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.resizeObserver = new ResizeObserver(this.getDimensions.bind(this));\n this.resizeObserver.observe(this);\n }\n\n disconnectedCallback() {\n this.resizeObserver.unobserve(this);\n\n super.disconnectedCallback();\n }\n };\n}\n","\nimport {css, html} from 'lit';\n\nimport DecidablesElement from './decidables-element';\n\nexport default class DecidablesToggleOption extends DecidablesElement {\n static get properties() {\n return {\n checked: {\n attribute: 'checked',\n type: Boolean,\n reflect: true,\n },\n disabled: {\n attribute: 'disabled',\n type: Boolean,\n reflect: true,\n },\n name: {\n attribute: 'name',\n type: String,\n reflect: true,\n },\n value: {\n attribute: 'value',\n type: String,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.checked = false;\n this.disabled = false;\n this.name = undefined;\n this.value = undefined;\n }\n\n changed(event) {\n this.checked = event.target.checked;\n this.dispatchEvent(new CustomEvent('change', {\n detail: {\n checked: this.checked,\n value: this.value,\n },\n bubbles: true,\n }));\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: flex;\n }\n\n input[type=radio] {\n /* visuallyhidden: https://github.com/h5bp/html5-boilerplate/blob/master/dist/doc/css.md */\n position: absolute;\n\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n\n white-space: nowrap;\n\n border: 0;\n clip-path: inset(100%); /* May cause a performance issue: https://github.com/h5bp/html5-boilerplate/issues/2021 */\n }\n\n input[type=radio] + label {\n width: 100%;\n padding: 0.375rem 0.75rem;\n\n font-family: var(---font-family-base);\n font-size: 1.125rem;\n line-height: 1.5;\n color: var(---color-text-inverse);\n text-align: center;\n\n cursor: pointer;\n\n background-color: var(---color-element-enabled);\n border: 0;\n border-radius: 0;\n outline: none;\n\n box-shadow: var(---shadow-2);\n }\n\n input[type=radio]:checked + label {\n background-color: var(---color-element-selected);\n outline: none;\n box-shadow: var(---shadow-2);\n }\n\n input[type=radio] + label:hover {\n z-index: 1;\n\n outline: none;\n box-shadow: var(---shadow-4);\n }\n\n input[type=radio] + label:active {\n z-index: 2;\n\n outline: none;\n box-shadow: var(---shadow-8);\n }\n\n :host(:first-of-type) input[type=radio] + label {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n }\n\n :host(:last-of-type) input[type=radio] + label {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n }\n\n :host(.keyboard) input[type=radio]:focus + label {\n z-index: 1;\n\n outline: none;\n box-shadow: var(---shadow-4);\n }\n\n :host(.keyboard) input[type=radio]:focus:checked + label {\n z-index: 1;\n\n background-color: var(---color-element-selected);\n outline: none;\n box-shadow: var(---shadow-4);\n }\n\n :host(.keyboard) input[type=radio]:focus + label:active {\n z-index: 2;\n\n outline: none;\n box-shadow: var(---shadow-8);\n }\n `,\n ];\n }\n\n render() {\n return html`\n <input type=\"radio\" id=\"toggle-option\" name=${this.name} value=${this.value} .checked=${this.checked} @change=${this.changed.bind(this)}>\n <label for=\"toggle-option\">\n <slot></slot>\n </label>\n `;\n }\n}\n\ncustomElements.define('decidables-toggle-option', DecidablesToggleOption);\n","\nimport {\n css,\n unsafeCSS,\n} from 'lit';\nimport * as d3 from 'd3';\n\nimport {DecidablesElement} from '@decidables/decidables-elements';\n\nimport {colors} from './colors.yml';\n\n/*\n AccumulableElement Base Class - Not intended for instantiation!\n*/\nexport default class AccumulableElement extends DecidablesElement {\n static get properties() {\n return {\n interactive: {\n attribute: 'interactive',\n type: Boolean,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n this.interactive = false;\n }\n\n static get colors() {\n return colors;\n }\n\n static get lights() {\n return Object.keys(AccumulableElement.colors).reduce((acc, cur) => {\n acc[cur] = d3.interpolateRgb(AccumulableElement.colors[cur], '#ffffff')(0.5);\n return acc;\n }, {});\n }\n\n static get darks() {\n return Object.keys(AccumulableElement.colors).reduce((acc, cur) => {\n acc[cur] = d3.interpolateRgb(AccumulableElement.colors[cur], '#000000')(0.5);\n return acc;\n }, {});\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n /* Declare base colors */\n ${\n unsafeCSS(Object.keys(AccumulableElement.colors).map((color) => {\n return `---color-${color}: var(--color-${color}, ${this.colors[color]});`;\n }).join('\\n'))\n }\n\n /* Declare light colors */\n ${\n unsafeCSS(Object.keys(AccumulableElement.colors).map((color) => {\n return `---color-${color}-light: var(--color-${color}-light, ${this.lights[color]});`;\n }).join('\\n'))\n }\n\n /* Declare dark colors */\n ${\n unsafeCSS(Object.keys(AccumulableElement.colors).map((color) => {\n return `---color-${color}-dark: var(--color-${color}-dark, ${this.darks[color]});`;\n }).join('\\n'))\n }\n }\n `,\n ];\n }\n}\n","\nimport {css, html} from 'lit';\n\nimport '@decidables/decidables-elements/button';\nimport '@decidables/decidables-elements/slider';\nimport '@decidables/decidables-elements/switch';\nimport '@decidables/decidables-elements/toggle';\nimport '@decidables/decidables-elements/toggle-option';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n AccumulableControl element\n <accumulable-control>\n\n Attributes:\n\n*/\nexport default class AccumulableControl extends AccumulableElement {\n static get properties() {\n return {\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n resample: {\n attribute: 'resample',\n type: Boolean,\n reflect: true,\n },\n\n duration: {\n attribute: 'duration',\n type: Number,\n reflect: true,\n },\n coherence: {\n attribute: 'coherence',\n type: Number,\n reflect: true,\n },\n color: {\n attribute: 'color',\n type: String,\n reflect: true,\n },\n\n run: {\n attribute: 'run',\n type: Boolean,\n reflect: true,\n },\n pause: {\n attribute: 'pause',\n type: Boolean,\n reflect: true,\n },\n reset: {\n attribute: 'reset',\n type: Boolean,\n reflect: true,\n },\n\n state: {\n attribute: false,\n type: String,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.trials = undefined;\n this.resample = false;\n\n this.duration = undefined;\n this.coherence = undefined;\n this.colors = ['none', 'measure', 'outcome', 'all'];\n this.color = undefined;\n\n this.run = false;\n this.pause = false;\n this.reset = false;\n\n // Properties\n this.states = ['resetted', 'running', 'paused', 'ended'];\n this.state = 'resetted';\n }\n\n setTrials(e) {\n this.trials = e.target.value;\n this.dispatchEvent(new CustomEvent('accumulable-control-trials', {\n detail: {\n trials: this.trials,\n },\n bubbles: true,\n }));\n }\n\n doResample() {\n this.dispatchEvent(new CustomEvent('accumulable-control-resample', {\n detail: {},\n bubbles: true,\n }));\n }\n\n setDuration(e) {\n this.duration = e.target.value;\n this.dispatchEvent(new CustomEvent('accumulable-control-duration', {\n detail: {\n duration: this.duration,\n },\n bubbles: true,\n }));\n }\n\n setCoherence(e) {\n this.coherence = e.target.value;\n this.dispatchEvent(new CustomEvent('accumulable-control-coherence', {\n detail: {\n coherence: this.coherence,\n },\n bubbles: true,\n }));\n }\n\n chooseColor(e) {\n this.color = e.target.value;\n this.dispatchEvent(new CustomEvent('accumulable-control-color', {\n detail: {\n color: this.color,\n },\n bubbles: true,\n }));\n }\n\n doRun() {\n this.state = 'running';\n this.dispatchEvent(new CustomEvent('accumulable-control-run', {\n detail: {},\n bubbles: true,\n }));\n }\n\n doPause() {\n this.state = 'paused';\n this.dispatchEvent(new CustomEvent('accumulable-control-pause', {\n detail: {},\n bubbles: true,\n }));\n }\n\n doReset() {\n this.state = 'resetted';\n this.dispatchEvent(new CustomEvent('accumulable-control-reset', {\n detail: {},\n bubbles: true,\n }));\n }\n\n complete() {\n this.state = 'ended';\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n }\n\n .holder {\n display: flex;\n\n flex-direction: row;\n\n align-items: stretch;\n justify-content: center;\n }\n\n .buttons {\n display: flex;\n\n flex-direction: column;\n\n align-items: stretch;\n justify-content: center;\n }\n `,\n ];\n }\n\n render() {\n return html`\n <div class=\"holder\">\n ${this.trials != null\n ? html`<decidables-slider class=\"trials\" min=\"1\" max=\"100\" step=\"1\" .value=${this.trials} @change=${this.setTrials.bind(this)} @input=${this.setTrials.bind(this)}>Trials</decidables-slider>`\n : html``}\n ${this.resample\n ? html`\n <div class=\"buttons\">\n ${this.resample\n ? html`<decidables-button name=\"resample\" @click=${this.doResample.bind(this)}>Resample</decidables-button>`\n : html``}\n </div>\n `\n : html``}\n ${this.duration != null\n ? html`<decidables-slider class=\"duration\" min=\"10\" max=\"2000\" step=\"10\" .value=${this.duration} @change=${this.setDuration.bind(this)} @input=${this.setDuration.bind(this)}>Duration</decidables-slider>`\n : html``}\n ${this.coherence != null\n ? html`<decidables-slider class=\"coherence\" min=\"0\" max=\"1\" step=\".01\" .value=${this.coherence} @change=${this.setCoherence.bind(this)} @input=${this.setCoherence.bind(this)}>Coherence</decidables-slider>`\n : html``}\n ${this.color != null\n ? html`\n <decidables-toggle class=\"color\" @change=${this.chooseColor.bind(this)}>\n <span slot=\"label\">Emphasis</span>\n <decidables-toggle-option name=\"toggle\" value=\"none\" ?checked=${this.color === 'none'}>None</decidables-toggle-option>\n <decidables-toggle-option name=\"toggle\" value=\"measure\" ?checked=${this.color === 'measure'}>Measure</decidables-toggle-option>\n <decidables-toggle-option name=\"toggle\" value=\"outcome\" ?checked=${this.color === 'outcome'}>Outcome</decidables-toggle-option>\n <decidables-toggle-option name=\"toggle\" value=\"all\" ?checked=${this.color === 'all'}>All</decidables-toggle-option>\n </decidables-toggle>\n `\n : html``}\n ${this.run || this.pause || this.reset\n ? html`\n <div class=\"buttons\">\n ${this.run\n ? html`<decidables-button name=\"run\" ?disabled=${this.state === 'running' || this.state === 'ended'} @click=${this.doRun.bind(this)}>Run</decidables-button>`\n : html``}\n ${this.pause\n ? html`<decidables-button name=\"pause\" ?disabled=${this.state !== 'running'} @click=${this.doPause.bind(this)}>Pause</decidables-button>`\n : html``}\n ${this.reset\n ? html`<decidables-button name=\"reset\" ?disabled=${this.state === 'resetted'} @click=${this.doReset.bind(this)}>Reset</decidables-button>`\n : html``}\n </div>\n `\n : html``}\n </div>`;\n }\n}\n\ncustomElements.define('accumulable-control', AccumulableControl);\n","\n/*\n DDMMath Static Class - Not intended for instantiation!\n\n Model parameters:\n a = boundary separation [0, Infinity)\n z = starting point as a proportion of a (0, 1)\n v = drift rate (per second) (-Infinity, Infinity)\n t0 = non-decision time (in milliseconds) (0, Infinity)\n s = within-trial variability in drift rate (s^2 = infinitesimal variance) [0, Infinity)\n\n zPrime = starting point on a 0-to-a scale (typically used in published equations) [0, Infinity)\n\n Behavioral variables:\n pE = proportion of error trials\n pC = proportion of correct trials\n m = mean of overall RTs (in milliseconds)\n mE = mean of error RTs (in milliseconds)\n mC = mean correct RTs (in milliseconds)\n sd = standard deviation of overall RTs (in milliseconds)\n sdE = standard deviation of error RTs (in milliseconds)\n sdC = standard deviation of correct RTs (in milliseconds)\n\n Equations:\n Probability of correct and error responses (Alexandrowicz, 2020)\n Mean of overall, error, and correct RTs (Grasman et al., 2009)\n Standard deviation of overall, error, and correct RTs (Grasman et al., 2009)\n Density of error and correct RT distributions (Alexandrowicz, 2020)\n EZ-diffusion model (Wagenmakers et al., 2007)\n*/\nexport default class DDMMath {\n static s = {\n DEFAULT: 1,\n };\n\n static a = {\n DEFAULT: 1.2,\n MIN: 0.01,\n MAX: 2.0,\n STEP: 0.01,\n JUMP: 0.1,\n };\n\n static z = {\n DEFAULT: 0.55,\n MIN: 0.01,\n MAX: 0.99,\n STEP: 0.01,\n JUMP: 0.1,\n };\n\n static v = {\n DEFAULT: 1.5,\n MIN: 0.01,\n MAX: 5.0,\n STEP: 0.01,\n JUMP: 0.1,\n };\n\n static t0 = {\n DEFAULT: 150,\n MIN: 0,\n MAX: 500,\n STEP: 1,\n JUMP: 10,\n };\n\n // Calculate a bunch of statistics for an array of trials\n static trials2stats(trials) {\n const stats = {};\n\n // First-order sums\n const sums = trials.reduce(\n (accumulator, trial) => {\n switch (trial.outcome) {\n case 'correct':\n accumulator.correctCount += 1;\n accumulator.correctRTSum += trial.rt;\n break;\n case 'error':\n accumulator.errorCount += 1;\n accumulator.errorRTSum += trial.rt;\n break;\n case 'nr':\n accumulator.nrCount += 1;\n break;\n default:\n // No-op\n }\n return accumulator;\n },\n {\n correctCount: 0,\n errorCount: 0,\n nrCount: 0,\n\n correctRTSum: 0,\n errorRTSum: 0,\n },\n );\n\n // First-order stats\n stats.correctCount = sums.correctCount;\n stats.errorCount = sums.errorCount;\n stats.nrCount = sums.nrCount;\n stats.accuracy = sums.correctCount / (sums.correctCount + sums.errorCount + sums.nrCount);\n\n stats.correctMeanRT = sums.correctRTSum / sums.correctCount;\n stats.errorMeanRT = sums.errorRTSum / sums.errorCount;\n stats.meanRT = (sums.correctRTSum + sums.errorRTSum) / (sums.correctCount + sums.errorCount);\n\n // Second-order sums\n const sums2 = trials.reduce(\n (accumulator, trial) => {\n switch (trial.outcome) {\n case 'correct':\n accumulator.ss += (trial.rt - stats.meanRT) ** 2;\n accumulator.correctSS += (trial.rt - stats.correctMeanRT) ** 2;\n break;\n case 'error':\n accumulator.ss += (trial.rt - stats.meanRT) ** 2;\n accumulator.errorSS += (trial.rt - stats.errorMeanRT) ** 2;\n break;\n default:\n // No-op\n }\n return accumulator;\n },\n {\n ss: 0,\n correctSS: 0,\n errorSS: 0,\n },\n );\n\n // Second-order stats\n stats.correctSDRT = (stats.correctCount > 1)\n ? Math.sqrt(sums2.correctSS / (stats.correctCount - 1))\n : NaN;\n stats.errorSDRT = (stats.errorCount > 1)\n ? Math.sqrt(sums2.errorSS / (stats.errorCount - 1))\n : NaN;\n stats.sdRT = (stats.correctCount + stats.errorCount > 1)\n ? Math.sqrt(sums2.ss / (stats.correctCount + stats.errorCount - 1))\n : NaN;\n\n return stats;\n }\n\n // Probability of an Error Response\n static azv2pE(a, z, v, s = DDMMath.s.DEFAULT) {\n const zPrime = a * z;\n\n const A = Math.exp((-2 * v * a) / s ** 2);\n const Z = Math.exp((-2 * v * zPrime) / s ** 2);\n\n return (A - Z) / (A - 1);\n }\n\n // Probability of a Correct Response\n static azv2pC(a, z, v, s = DDMMath.s.DEFAULT) {\n return DDMMath.azv2pE(a, 1 - z, -v, s);\n }\n\n // Mean Overall RT\n // Equation 5 (Grasman et al., 2009)\n static azvt02m(a, z, v, t0, s = DDMMath.s.DEFAULT) {\n const zPrime = a * z;\n const A = Math.exp((-2 * v * a) / s ** 2) - 1;\n const Z = Math.exp((-2 * v * zPrime) / s ** 2) - 1;\n\n const mean = -(zPrime / v) + (a / v) * (Z / A);\n return t0 + mean * 1000;\n }\n\n // SD Overall RT\n // Equation 6 (Grasman et al., 2009)\n static azv2sd(a, z, v, s = DDMMath.s.DEFAULT) {\n const zPrime = a * z;\n const A = Math.exp((-2 * v * a) / s ** 2) - 1;\n const Z = Math.exp((-2 * v * zPrime) / s ** 2) - 1;\n\n const variance = (\n (\n (-v * a ** 2 * (Z + 4) * Z) / A ** 2\n ) + (\n ((-3 * v * a ** 2 + 4 * v * zPrime * a + s ** 2 * a) * Z + 4 * v * zPrime * a) / A\n ) - (\n s ** 2 * zPrime\n )\n ) / v ** 3;\n\n return Math.sqrt(variance) * 1000;\n }\n\n // Mean Error RT\n // Equation 13 (Grasman et al., 2009)\n static azvt02mE(a, z, v, t0, s = DDMMath.s.DEFAULT) {\n function phi(x, y) {\n return Math.exp((2 * v * y) / (s ** 2)) - Math.exp((2 * v * x) / (s ** 2));\n }\n const zPrime = a * z;\n\n const mean = (zPrime * (phi(zPrime - a, a) + phi(0, zPrime)) + 2 * a * phi(zPrime, 0))\n / (v * phi(zPrime, a) * phi(-a, 0));\n return t0 + mean * 1000;\n }\n\n // SD Error RT\n // Equation 14 (Grasman et al., 2009)\n static azv2sdE(a, z, v, s = DDMMath.s.DEFAULT) {\n function phi(x, y) {\n return Math.exp((2 * v * y) / (s ** 2)) - Math.exp((2 * v * x) / (s ** 2));\n }\n const zPrime = a * z;\n\n const variance = (\n (\n -2 * a * phi(0, zPrime)\n * ((2 * v * a * phi(zPrime, 2 * a)) + (s ** 2 * phi(0, a) * phi(zPrime, a)))\n * Math.exp((2 * v * a) / s ** 2)\n ) / (\n v ** 3 * phi(0, a) ** 2 * phi(zPrime, a) ** 2\n )\n ) + (\n (\n 4 * v * zPrime * (2 * a - zPrime) * Math.exp((2 * v * (zPrime + a)) / s ** 2)\n + zPrime * s ** 2 * phi(2 * zPrime, 2 * a)\n ) / (\n v ** 3 * phi(zPrime, a) ** 2\n )\n );\n\n return Math.sqrt(variance) * 1000;\n }\n\n // Mean Correct RT\n static azvt02mC(a, z, v, t0, s = DDMMath.s.DEFAULT) {\n return DDMMath.azvt02mE(a, 1 - z, -v, t0, s);\n }\n\n // SD Correct RT\n static azv2sdC(a, z, v, s = DDMMath.s.DEFAULT) {\n return DDMMath.azv2sdE(a, 1 - z, -v, s);\n }\n\n // Density of Error RT\n static tazv2gE(t, a, z, v, s = DDMMath.s.DEFAULT) {\n if (!t) return 0;\n\n const zPrime = a * z;\n const base = ((Math.PI * s ** 2) / a ** 2) * Math.exp((-zPrime * v) / s ** 2);\n\n let k = 0;\n let term = 0;\n let sum = 0;\n do {\n k += 1;\n\n term = k\n * Math.sin((Math.PI * zPrime * k) / a)\n * Math.exp(-0.5 * ((v ** 2 / s ** 2) + ((Math.PI ** 2 * k ** 2 * s ** 2) / a ** 2)) * t);\n\n sum += term;\n } while (k < 200); // ?? HACK\n\n return base * sum;\n }\n\n // Density of Correct RT\n static tazv2gC(t, a, z, v, s = DDMMath.s.DEFAULT) {\n return DDMMath.tazv2gE(t, a, 1 - z, -v, s);\n }\n\n // Adapted from https://raoul.socsci.uva.nl/EZ2/EZ2_new.html\n // EZ-function for starting values\n // input: obj - Object with properties\n // pC - Proportion correct\n // sd - sample standard deviation of the RT's in ms\n // m - sample mean of the RT's in ms\n // s - diffusion standard deviation\n // returns: Object with properties v, a, and t0, containing EZ-estimates of these parameters\n static data2ez({\n accuracy: pC,\n sdRT: sd,\n meanRT: m,\n s,\n }) {\n function sign(r) {\n return ((r > 0) ? 1 : ((r === 0) ? 0 : -1));\n }\n\n function logit(p) {\n return Math.log(p / (1 - p));\n }\n\n const vrt = (sd / 1000) ** 2;\n const mrt = m / 1000;\n\n const s2 = s ** 2;\n const l = logit(pC);\n const x = (l * (l * pC ** 2 - l * pC + pC - 0.5)) / vrt;\n const v = sign(pC - 0.5) * s * x ** (1 / 4);\n const a = (s2 * logit(pC)) / v;\n const y = (-v * a) / s2;\n const mdt = ((a / (2 * v)) * (1 - Math.exp(y))) / (1 + Math.exp(y));\n const t0 = (mrt ? mrt - mdt : null); // compute Ter only if MRT was provided\n\n const t0Prime = t0 * 1000;\n return {\n v,\n a,\n t0: t0Prime,\n s,\n };\n }\n\n static data2ez2() {\n throw new Error('data2ez2 is not implemented!');\n }\n}\n","\nimport {css, html} from 'lit';\n\nimport DDMMath from '@decidables/accumulable-math';\nimport '@decidables/decidables-elements/button';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n AccumulableResponse element\n <accumulable-response>\n\n Attributes:\n\n*/\nexport default class AccumulableResponse extends AccumulableElement {\n static get properties() {\n return {\n feedback: {\n attribute: 'feedback',\n type: Boolean,\n reflect: true,\n },\n trial: {\n attribute: 'trial',\n type: Boolean,\n reflect: true,\n },\n payoff: {\n attribute: 'payoff',\n type: String,\n reflect: true,\n },\n correctPayoff: {\n attribute: 'correct-payoff',\n type: Number,\n reflect: true,\n },\n errorPayoff: {\n attribute: 'error-payoff',\n type: Number,\n reflect: true,\n },\n nrPayoff: {\n attribute: 'no-response-payoff',\n type: Number,\n reflect: true,\n },\n\n state: {\n attribute: false,\n type: String,\n reflect: false,\n },\n trialCount: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n trialTotal: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.feedback = false; // Display feedback?\n this.trial = false; // Show trial count?\n this.payoffs = ['none', 'trial', 'total']; // Possible types of 'payoff' info\n this.payoff = 'none'; // What payoff info to display\n\n this.correctPayoff = 0; // Correct payoff\n this.errorPayoff = 0; // Error payoff\n this.nrPayoff = 0; // No Response payoff\n\n // Properties\n this.states = ['off', 'waiting', 'feedback']; // Possible states\n this.state = 'off'; // Current state\n\n this.trialCount = 0; // Current trial\n this.trialTotal = 0; // Total trials\n\n // Private\n this.signals = ['left', 'right']; // Possible values of 'signal'\n this.signal = undefined; // Signal for current trial\n this.responses = ['left', 'right']; // Possible values of 'response'\n this.response = undefined; // Response for current trial\n this.outcomes = ['correct', 'error', 'nr']; // Possible values of 'outcome'\n this.outcome = undefined; // Outcome for current trial\n this.startTime = undefined; // Start time of current trial\n this.rt = undefined; // RT for current trial\n\n this.data = {};\n\n this.trials = []; // Record of trials in block\n this.alignState();\n }\n\n get trialPayoff() {\n switch (this.outcome) {\n case 'correct':\n return this.correctPayoff;\n case 'error':\n return this.errorPayoff;\n case 'nr':\n return this.nrPayoff;\n default:\n return undefined;\n }\n }\n\n get totalPayoff() {\n return ((this.data.correctCount * this.correctPayoff)\n + (this.data.errorCount * this.errorPayoff)\n + (this.data.nrCount * this.nrPayoff));\n }\n\n alignState() {\n this.data = DDMMath.trials2stats(this.trials);\n }\n\n start(signal, trial) {\n this.startTime = Date.now();\n this.trialCount = trial;\n this.state = 'waiting';\n this.signal = signal;\n this.response = undefined;\n this.outcome = undefined;\n this.rt = undefined;\n }\n\n stop() {\n this.state = 'feedback';\n if (this.response === undefined) {\n this.outcome = 'nr';\n this.rt = undefined;\n\n this.trials.push({\n trial: this.trialCount,\n rt: this.rt,\n signal: this.signal,\n response: this.response,\n outcome: this.outcome,\n payoff: this.trialPayoff,\n });\n this.alignState();\n }\n }\n\n left() {\n this.responded('left');\n }\n\n right() {\n this.responded('right');\n }\n\n responded(response) {\n this.rt = Date.now() - this.startTime;\n this.state = 'feedback';\n this.response = response;\n if (this.signal === this.response) {\n this.outcome = 'correct';\n } else if (this.signal !== this.response) {\n this.outcome = 'error';\n }\n this.trials.push({\n trial: this.trialCount,\n rt: this.rt,\n signal: this.signal,\n response: this.response,\n outcome: this.outcome,\n payoff: this.trialPayoff,\n });\n this.alignState();\n\n this.dispatchEvent(new CustomEvent('accumulable-response', {\n detail: {\n trial: this.trialCount,\n rt: this.rt,\n signal: this.signal,\n response: this.response,\n outcome: this.outcome,\n payoff: this.trialPayoff,\n\n data: this.data,\n\n totalPayoff: this.totalPayoff,\n },\n bubbles: true,\n }));\n }\n\n reset() {\n this.state = 'off';\n this.trialCount = 0;\n this.rt = undefined;\n this.signal = undefined;\n this.response = undefined;\n this.outcome = undefined;\n\n this.trials = [];\n this.alignState();\n }\n\n keydown(event) {\n if (this.state === 'waiting') {\n if (event.key === 'ArrowLeft') {\n this.responded('left');\n event.preventDefault();\n } else if (event.key === 'ArrowRight') {\n this.responded('right');\n event.preventDefault();\n }\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n window.addEventListener('keydown', this.keydown.bind(this));\n }\n\n disconnectedCallback() {\n window.removeEventListener('keydown', this.keydown.bind(this));\n\n super.disconnectedCallback();\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n }\n\n /* Overall container */\n .holder {\n display: flex;\n\n flex-direction: column;\n }\n\n /* Response buttons */\n .responses {\n display: flex;\n\n flex-direction: row;\n\n align-items: stretch;\n justify-content: center;\n }\n\n .response {\n flex: 1 0 50%;\n }\n\n .waiting[disabled] {\n --decidables-button-background-color: var(---color-element-enabled);\n }\n\n .selected[disabled][name=\"left\"] {\n --decidables-button-background-color: var(---color-left);\n }\n\n .selected[disabled][name=\"right\"] {\n --decidables-button-background-color: var(---color-right);\n }\n\n /* Feedback messages */\n .feedbacks {\n display: flex;\n\n flex-direction: column;\n\n align-items: center;\n\n margin: 0.25rem;\n }\n\n /* Trial feedback */\n .trial {\n text-align: center;\n }\n\n .trial .label {\n font-weight: 600;\n }\n\n /* Outcome feedback */\n .feedback {\n display: flex;\n\n flex-direction: column;\n\n align-items: center;\n justify-content: center;\n\n width: 6rem;\n height: 3.5rem;\n padding: 0.375rem 0.75rem;\n margin: 0.25rem;\n\n text-align: center;\n\n background-color: var(---color-element-background);\n border: 1px solid var(---color-element-border);\n }\n\n :host([payoff=\"trial\"]) .feedback,\n :host([payoff=\"total\"]) .feedback {\n height: 5rem;\n }\n\n .feedback.correct {\n background-color: var(---color-correct-light);\n }\n\n .feedback.error {\n background-color: var(---color-error-light);\n }\n\n .feedback.nr {\n background-color: var(---color-nr-light);\n }\n\n .feedback .outcome {\n font-weight: 600;\n line-height: 1.15;\n }\n\n /* Payoff feedback */\n .total {\n text-align: center;\n }\n\n .total .label {\n font-weight: 600;\n }\n `,\n ];\n }\n\n render() {\n const payoffFormatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n const payoffFormat = (number) => {\n return payoffFormatter.formatToParts(number).map(({type, value}) => {\n if (type === 'minusSign') {\n return '−';\n }\n return value;\n }).reduce((string, part) => { return string + part; });\n };\n\n return html`\n <div class=\"holder\">\n <div class=\"responses\">\n <decidables-button name=\"left\" class=${`response ${(this.state === 'feedback' && this.response === 'left') ? 'selected' : ((this.state === 'waiting') ? 'waiting' : '')}`} ?disabled=${this.state !== 'waiting' || this.interactive !== true} @click=${this.left.bind(this)}>Left</decidables-button>\n <decidables-button name=\"right\" class=${`response ${(this.state === 'feedback' && this.response === 'right') ? 'selected' : ((this.state === 'waiting') ? 'waiting' : '')}`} ?disabled=${this.state !== 'waiting' || this.interactive !== true} @click=${this.right.bind(this)}>Right</decidables-button>\n </div>\n ${(this.trial || this.feedback || this.payoff === 'total')\n ? html`\n <div class=\"feedbacks\">\n ${(this.trial)\n ? html`\n <div class=\"trial\">\n <span class=\"label\">Trial: </span><span class=\"count\">${this.trialCount}</span><span class=\"of\"> of </span><span class=\"total\">${this.trialTotal}</span>\n </div>`\n : html``}\n ${(this.feedback)\n ? html`\n <div class=${`feedback ${((this.state === 'feedback') && this.feedback)\n ? this.outcome\n : ''}`}>\n ${((this.state === 'feedback') && this.feedback)\n ? (this.outcome === 'correct')\n ? html`<span class=\"outcome\">Correct</span>`\n : (this.outcome === 'error')\n ? html`<span class=\"outcome\">Error</span>`\n : html`<span class=\"outcome\">No<br>Response</span>`\n : ''}\n ${((this.state === 'feedback') && (this.payoff === 'trial' || this.payoff === 'total'))\n ? html`<span class=\"payoff\">${payoffFormat(this.trialPayoff)}</span>`\n : html``}\n </div>`\n : html``}\n ${(this.payoff === 'total')\n ? html`\n <div class=\"total\">\n <span class=\"label\">Total: </span><span class=\"value\">${payoffFormat(this.totalPayoff)}</span>\n </div>`\n : html``}\n </div>`\n : html``}\n </div>`;\n }\n}\n\ncustomElements.define('accumulable-response', AccumulableResponse);\n","\nimport {css, html} from 'lit';\n\nimport '@decidables/decidables-elements/spinner';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n AccumulableTable element\n <accumulable-table>\n\n Attributes:\n ????Hit; Miss; FalseAlarm; CorrectRejection;\n*/\nexport default class AccumulableTable extends AccumulableElement {\n static get properties() {\n return {\n numeric: {\n attribute: 'numeric',\n type: Boolean,\n reflect: true,\n },\n summary: {\n attribute: 'summary',\n type: Boolean,\n reflect: true,\n },\n color: {\n attribute: 'color',\n type: String,\n reflect: true,\n },\n\n correctCount: {\n attribute: 'correct-count',\n type: Number,\n reflect: true,\n },\n errorCount: {\n attribute: 'error-count',\n type: Number,\n reflect: true,\n },\n nrCount: {\n attribute: 'nr-count',\n type: Number,\n reflect: true,\n },\n accuracy: {\n attribute: 'accuracy',\n type: Number,\n reflect: true,\n },\n correctMeanRT: {\n attribute: 'correct-mean-rt',\n type: Number,\n reflect: true,\n },\n errorMeanRT: {\n attribute: 'error-mean-rt',\n type: Number,\n reflect: true,\n },\n meanRT: {\n attribute: 'mean-rt',\n type: Number,\n reflect: true,\n },\n correctSDRT: {\n attribute: 'correct-sd-rt',\n type: Number,\n reflect: true,\n },\n errorSDRT: {\n attribute: 'error-sd-rt',\n type: Number,\n reflect: true,\n },\n sdRT: {\n attribute: 'sd-rt',\n type: Number,\n reflect: true,\n },\n\n payoff: {\n attribute: 'payoff',\n type: Boolean,\n reflect: true,\n },\n correctPayoff: {\n attribute: 'correct-payoff',\n type: Number,\n reflect: true,\n },\n errorPayoff: {\n attribute: 'error-payoff',\n type: Number,\n reflect: true,\n },\n nrPayoff: {\n attribute: 'no-response-payoff',\n type: Number,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n this.numeric = false;\n this.summary = false;\n\n this.colors = ['none', 'measure', 'outcome', 'all'];\n this.color = 'all';\n\n this.payoff = false;\n this.correctPayoff = undefined; // Correct payoff\n this.errorPayoff = undefined; // Error payoff\n this.nrPayoff = undefined; // No Response payoff\n\n this.correctCount = NaN;\n this.errorCount = NaN;\n this.nrCount = NaN;\n this.accuracy = NaN;\n this.correctMeanRT = NaN;\n this.errorMeanRT = NaN;\n this.meanRT = NaN;\n this.correctSDRT = NaN;\n this.errorSDRT = NaN;\n this.sdRT = NaN;\n }\n\n sendEvent() {\n this.dispatchEvent(new CustomEvent('accumulable-table-change', {\n detail: {\n correctCount: this.correctCount,\n errorCount: this.errorCount,\n nrCount: this.nrCount,\n accuracy: this.accuracy,\n correctMeanRT: this.correctMeanRT,\n errorMeanRT: this.errorMeanRT,\n meanRT: this.meanRT,\n correctSDRT: this.correctSDRT,\n errorSDRT: this.errorSDRT,\n sdRT: this.sdRT,\n },\n bubbles: true,\n }));\n }\n\n correctCountInput(e) {\n this.correctCount = parseInt(e.target.value, 10);\n this.sendEvent();\n }\n\n errorCountInput(e) {\n this.errorCount = parseInt(e.target.value, 10);\n this.sendEvent();\n }\n\n accuracyInput(e) {\n this.accuracy = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n correctMeanRTInput(e) {\n this.correctMeanRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n errorMeanRTInput(e) {\n this.errorMeanRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n meanRTInput(e) {\n this.meanRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n correctSDRTInput(e) {\n this.correctSDRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n errorSDRTInput(e) {\n this.errorSDRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n sdRTInput(e) {\n this.sdRT = parseFloat(e.target.value);\n this.sendEvent();\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n }\n\n /* Overall element */\n table {\n text-align: center;\n\n border-collapse: collapse;\n\n border: 0;\n }\n\n /* Headers */\n .th-main {\n padding: 0;\n\n font-weight: bold;\n }\n\n .th-sub {\n padding: 0 0.25rem;\n\n font-weight: 600;\n }\n\n .th-left {\n padding-left: 0;\n\n text-align: right;\n }\n\n /* Cells */\n .td {\n width: 10rem;\n\n padding: 0.25rem 0.25rem 0.375rem;\n\n transition: all var(---transition-duration) ease;\n }\n\n .numeric .td {\n width: 7rem;\n }\n\n /* Labels */\n .payoff {\n font-weight: 600;\n line-height: 0.75rem;\n }\n\n /* User interaction <input> */\n .td-data decidables-spinner {\n --decidables-spinner-input-width: 3.5rem;\n }\n\n .td-summary decidables-spinner {\n --decidables-spinner-input-width: 4.5rem;\n }\n\n /* Table emphasis */\n .td-data.correct {\n border-left: 2px solid var(---color-element-emphasis);\n }\n\n .td-data.error {\n border-right: 2px solid var(---color-element-emphasis);\n }\n\n .td-data.count {\n border-top: 2px solid var(---color-element-emphasis);\n }\n\n .td-data.sd-rt {\n border-bottom: 2px solid var(---color-element-emphasis);\n }\n\n /* Color schemes */\n\n /* (Default) All color scheme */\n .correct.count {\n background: var(---color-element-background); /* ###### */\n }\n\n .error.count {\n background: var(---color-element-background); /* ###### */\n }\n\n .overall.proportion-correct {\n background: var(---color-element-background); /* ###### */\n }\n\n .correct.mean-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n .error.mean-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n .overall.mean-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n .correct.sd-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n .error.sd-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n .overall.sd-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n /* Outcome color scheme */\n :host([color=\"outcome\"]) .correct {\n background: var(---color-correct-light);\n }\n\n :host([color=\"outcome\"]) .error {\n background: var(---color-error-light);\n }\n\n :host([color=\"outcome\"]) .overall {\n background: var(---color-element-background);\n }\n\n /* Measure color scheme */\n :host([color=\"measure\"]) .count,\n :host([color=\"measure\"]) .proportion-correct {\n background: var(---color-element-background); /* ###### */\n }\n\n :host([color=\"measure\"]) .mean-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n :host([color=\"measure\"]) .sd-rt {\n background: var(---color-element-background); /* ###### */\n }\n\n /* No color scheme */\n :host([color=\"none\"]) .td-data,\n :host([color=\"none\"]) .td-summary {\n background: var(---color-element-background);\n }\n `,\n ];\n }\n\n render() {\n const payoffFormatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n const payoffFormat = (number) => {\n return payoffFormatter.formatToParts(number).map(({type, value}) => {\n if (type === 'minusSign') {\n return '−';\n }\n return value;\n }).reduce((string, part) => { return string + part; });\n };\n\n let correctCount;\n let errorCount;\n let accuracy;\n let correctMeanRT;\n let errorMeanRT;\n let meanRT;\n let correctSDRT;\n let errorSDRT;\n let sdRT;\n if (this.numeric) {\n correctCount = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.correctCount}\" @input=${this.correctCountInput.bind(this)}>\n <span>Correct Count</span>\n ${this.payoff ? html`<span class=\"payoff\">${payoffFormat(this.correctPayoff)}</span>` : html``}\n </decidables-spinner>\n `;\n errorCount = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.errorCount}\" @input=${this.errorCountInput.bind(this)}>\n <span>Error Count</span>\n ${this.payoff ? html`<span class=\"payoff\">${payoffFormat(this.errorPayoff)}</span>` : html``}\n </decidables-spinner>\n `;\n accuracy = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" max=\"1\" step=\".01\" .value=\"${+this.accuracy.toFixed(2)}\" @input=${this.accuracyInput.bind(this)}>\n <span>Accuracy</span>\n </decidables-spinner>\n `;\n correctMeanRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.correctMeanRT.toFixed(0)}\" @input=${this.correctMeanRTInput.bind(this)}>\n <span>Correct Mean RT</span>\n </decidables-spinner>\n `;\n errorMeanRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.errorMeanRT.toFixed(0)}\" @input=${this.errorMeanRTInput.bind(this)}>\n <span>Error Mean RT</span>\n </decidables-spinner>\n `;\n meanRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.meanRT.toFixed(0)}\" @input=${this.meanRTInput.bind(this)}>\n <span>Mean RT</span>\n </decidables-spinner>\n `;\n correctSDRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.correctSDRT.toFixed(0)}\" @input=${this.correctSDRTInput.bind(this)}>\n <span>Correct SD RT</span>\n </decidables-spinner>\n `;\n errorSDRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.errorSDRT.toFixed(0)}\" @input=${this.errorSDRTInput.bind(this)}>\n <span>Error SD RT</span>\n </decidables-spinner>\n `;\n sdRT = html`\n <decidables-spinner ?disabled=${!this.interactive} min=\"0\" .value=\"${+this.sdRT.toFixed(0)}\" @input=${this.sdRTInput.bind(this)}>\n <span>SD RT</span>\n </decidables-spinner>\n `;\n } else {\n correctCount = html`<span>Correct Count</span>\n ${this.payoff ? html`<span class=\"payoff\">${payoffFormat(this.correctPayoff)}</span>` : html``}`;\n errorCount = html`<span>Error Count</span>\n ${this.payoff ? html`<span class=\"payoff\">${payoffFormat(this.errorPayoff)}</span>` : html``}`;\n accuracy = html`<span>Accuracy</span>`;\n correctMeanRT = html`<span>Correct Mean RT</span>`;\n errorMeanRT = html`<span>Error Mean RT</span>`;\n meanRT = html`<span>Mean RT</span>`;\n correctSDRT = html`<span>Correct SD RT</span>`;\n errorSDRT = html`<span>Error SD RT</span>`;\n sdRT = html`<span>SD RT</span>`;\n }\n return html`\n <table class=${this.numeric ? 'numeric' : ''}>\n <thead>\n <tr>\n <th rowspan=\"2\"></th>\n <th class=\"th th-main\" colspan=\"2\" scope=\"col\">\n Outcome\n </th>\n </tr>\n <tr>\n <th class=\"th th-sub\" scope=\"col\">\n Correct\n </th>\n <th class=\"th th-sub\" scope=\"col\">\n Error\n </th>\n ${(this.summary)\n ? html`\n <th class=\"th th-main\" scope=\"col\">\n Overall\n </th>`\n : html``}\n </tr>\n </thead>\n <tbody>\n <tr>\n <th class=\"th th-sub th-left\" scope=\"row\">\n Count\n </th>\n <td class=\"td td-data correct count\">\n ${correctCount}\n </td>\n <td class=\"td td-data error count\">\n ${errorCount}\n </td>\n ${(this.summary)\n ? html`\n <td class=\"td td-summary overall proportion-correct\">\n ${accuracy}\n </td>`\n : html``}\n </tr>\n <tr>\n <th class=\"th th-sub th-left\" scope=\"row\">\n Mean RT\n </th>\n <td class=\"td td-data correct mean-rt\">\n ${correctMeanRT}\n </td>\n <td class=\"td td-data error mean-rt\">\n ${errorMeanRT}\n </td>\n ${(this.summary)\n ? html`\n <td class=\"td td-summary overall mean-rt\">\n ${meanRT}\n </td>`\n : html``}\n </tr>\n <tr>\n <th class=\"th th-sub th-left\" scope=\"row\">\n SD RT\n </th>\n <td class=\"td td-data correct sd-rt\">\n ${correctSDRT}\n </td>\n <td class=\"td td-data error sd-rt\">\n ${errorSDRT}\n </td>\n ${(this.summary)\n ? html`\n <td class=\"td td-summary overall sd-rt\">\n ${sdRT}\n </td>`\n : html``}\n </tr>\n </tbody>\n </table>`;\n }\n}\n\ncustomElements.define('accumulable-table', AccumulableTable);\n","\nimport {css, html} from 'lit';\n\nimport DDMMath from '@decidables/accumulable-math';\n\n// Special Web Worker import for rollup-plugin-web-worker-loader\nimport DDMFitWorker from 'web-worker:./ddm-fit-worker'; /* eslint-disable-line import/no-unresolved */\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n DDMFit element\n <ddm-fit>\n\n Attributes:\n interactive: true/false\n*/\nexport default class DDMFit extends AccumulableElement {\n static get properties() {\n return {\n };\n }\n\n constructor() {\n super();\n\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n\n this.observed = {};\n this.predicted = {};\n\n this.working = false;\n this.queued = false;\n this.worker = new DDMFitWorker();\n\n this.worker.onmessage = (event) => {\n this.working = false;\n this.predicted = event.data.predicted;\n this.a = event.data.params.a;\n this.z = event.data.params.z;\n this.v = event.data.params.v;\n this.t0 = event.data.params.t0;\n this.requestUpdate();\n\n this.dispatchEvent(new CustomEvent('ddm-fit-update', {\n detail: {\n a: this.a,\n z: this.z,\n v: this.v,\n t0: this.t0,\n },\n bubbles: true,\n }));\n\n if (this.queued) {\n this.fit();\n }\n };\n\n this.fit();\n }\n\n fit() {\n if (!this.working) {\n this.worker.postMessage(this.observed);\n this.working = true;\n this.queued = false;\n } else {\n this.queued = true;\n }\n }\n\n clear() {\n this.observed = {};\n\n this.fit();\n }\n\n set(data) {\n // Deep copy\n this.observed = structuredClone(data);\n\n this.fit();\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n }\n `,\n ];\n }\n\n render() {\n return html`\n <div>\n <div><b>Observed:</b>\n <br/>Accuracy = ${this.observed.accuracy?.toFixed(2)},\n <br/>Correct Mean RT = ${this.observed.correctMeanRT?.toFixed(0)},\n Error Mean RT = ${this.observed.errorMeanRT?.toFixed(0)},\n Mean RT = ${this.observed.meanRT?.toFixed(0)},\n <br/>Correct SD RT = ${this.observed.correctSDRT?.toFixed(0)},\n Error SD RT = ${this.observed.errorSDRT?.toFixed(0)},\n SD RT = ${this.observed.sdRT?.toFixed(0)},\n </div>\n <div><b>Parameters:</b>\n <br/><var class=\"math-var a\">a</var> = ${this.a.toFixed(2)},\n <var class=\"math-var z\">z</var> = ${this.z.toFixed(2)},\n <var class=\"math-var v\">v</var> = ${this.v.toFixed(2)},\n <var class=\"math-var t0\">t0</var> = ${this.t0.toFixed(0)}\n </div>\n <div><b>Predicted:</b>\n <br/>Accuracy = ${this.predicted.accuracy?.toFixed(2)},\n <br/>Correct Mean RT = ${this.predicted.correctMeanRT?.toFixed(0)},\n Error Mean RT = ${this.predicted.errorMeanRT?.toFixed(0)},\n Mean RT = ${this.predicted.meanRT?.toFixed(0)},\n <br/>Correct SD RT = ${this.predicted.correctSDRT?.toFixed(0)},\n Error SD RT = ${this.predicted.errorSDRT?.toFixed(0)},\n SD RT = ${this.predicted.sdRT?.toFixed(0)},\n </div>\n </div>\n `;\n }\n}\n\ncustomElements.define('ddm-fit', DDMFit);\n","\nimport {css, html} from 'lit';\n\nimport '@decidables/decidables-elements/slider';\nimport DDMMath from '@decidables/accumulable-math';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n DDMParameters element\n <ddm-paramters>\n\n Attributes:\n\n*/\nexport default class DDMParameters extends AccumulableElement {\n static get properties() {\n return {\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n t0: {\n attribute: 'nondecision-time',\n type: Number,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.a = undefined;\n this.z = undefined;\n this.v = undefined;\n this.t0 = undefined;\n }\n\n setBoundarySeparation(e) {\n this.a = +e.target.value;\n this.dispatchEvent(new CustomEvent('ddm-parameters-a', {\n detail: {\n a: this.a,\n },\n bubbles: true,\n }));\n }\n\n setStartingPoint(e) {\n this.z = +e.target.value;\n this.dispatchEvent(new CustomEvent('ddm-parameters-z', {\n detail: {\n z: this.z,\n },\n bubbles: true,\n }));\n }\n\n setDriftRate(e) {\n this.v = +e.target.value;\n this.dispatchEvent(new CustomEvent('ddm-parameters-v', {\n detail: {\n v: this.v,\n },\n bubbles: true,\n }));\n }\n\n setNondecisionTime(e) {\n this.t0 = +e.target.value;\n this.dispatchEvent(new CustomEvent('ddm-parameters-t0', {\n detail: {\n t0: this.t0,\n },\n bubbles: true,\n }));\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n }\n\n .holder {\n display: flex;\n\n flex-direction: row;\n\n align-items: stretch;\n justify-content: center;\n }\n\n decidables-slider {\n line-height: 1;\n text-align: center;\n }\n\n decidables-slider div {\n margin-bottom: 0.25rem;\n }\n\n .a {\n --decidables-slider-background-color: var(---color-a-light);\n --decidables-slider-color: var(---color-a);\n }\n\n .z {\n --decidables-slider-background-color: var(---color-z-light);\n --decidables-slider-color: var(---color-z);\n }\n\n .v {\n --decidables-slider-background-color: var(---color-v-light);\n --decidables-slider-color: var(---color-v);\n }\n\n .t0 {\n --decidables-slider-background-color: var(---color-t0-light);\n --decidables-slider-color: var(---color-t0);\n }\n `,\n ];\n }\n\n render() {\n return html`\n <div class=\"holder\">\n ${this.a != null\n ? html`<decidables-slider class=\"a\"\n ?disabled=${!this.interactive}\n scale\n min=${DDMMath.a.MIN}\n max=${DDMMath.a.MAX}\n step=${DDMMath.a.STEP}\n .value=${+this.a.toFixed(2)}\n @change=${this.setBoundarySeparation.bind(this)}\n @input=${this.setBoundarySeparation.bind(this)}\n ><div>Boundary Separation<br><span class=\"math-var\">a</span></div></decidables-slider>`\n : html``}\n ${this.z != null\n ? html`<decidables-slider class=\"z\"\n ?disabled=${!this.interactive}\n scale\n min=${DDMMath.z.MIN}\n max=${DDMMath.z.MAX}\n step=${DDMMath.z.STEP}\n .value=${+this.z.toFixed(2)}\n @change=${this.setStartingPoint.bind(this)}\n @input=${this.setStartingPoint.bind(this)}\n ><div>Starting Point<br><span class=\"math-var\">z</span></div></decidables-slider>`\n : html``}\n ${this.v != null\n ? html`<decidables-slider class=\"v\"\n ?disabled=${!this.interactive}\n scale\n min=${DDMMath.v.MIN}\n max=${DDMMath.v.MAX}\n step=${DDMMath.v.STEP}\n .value=${+this.v.toFixed(2)}\n @change=${this.setDriftRate.bind(this)}\n @input=${this.setDriftRate.bind(this)}\n ><div>Drift Rate<br><span class=\"math-var\">v</span></div></decidables-slider>`\n : html``}\n ${this.t0 != null\n ? html`<decidables-slider class=\"t0\" \n ?disabled=${!this.interactive}\n scale\n min=${DDMMath.t0.MIN}\n max=${DDMMath.t0.MAX}\n step=${DDMMath.t0.STEP}\n .value=${+this.t0.toFixed(0)}\n @change=${this.setNondecisionTime.bind(this)}\n @input=${this.setNondecisionTime.bind(this)}\n ><div>Nondecision Time<br><span class=\"math-var\">t₀</span></div></decidables-slider>`\n : html``}\n </div>`;\n }\n}\n\ncustomElements.define('ddm-parameters', DDMParameters);\n","\nimport {css, html, render} from 'lit';\nimport * as d3 from 'd3';\n\nimport DDMMath from '@decidables/accumulable-math';\nimport {DecidablesMixinResizeable} from '@decidables/decidables-elements';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n DDMModel element\n <ddm-model>\n\n Attributes:\n interactive: true/false\n\n measures: boolean\n means: boolean\n\n seed: numeric\n trials: numeric\n\n a: numeric\n z: numeric\n v: numeric\n t0: numeric\n\n // s: numeric\n // sz: numeric\n // eta: numeric\n // st: numeric\n\n Styles:\n ??\n*/\nexport default class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {\n static get properties() {\n return {\n measures: {\n attribute: 'measures',\n type: Boolean,\n reflect: true,\n },\n means: {\n attribute: 'means',\n type: Boolean,\n reflect: true,\n },\n sds: {\n attribute: 'sds',\n type: Boolean,\n reflect: true,\n },\n\n human: {\n attribute: 'human',\n type: Boolean,\n reflect: true,\n },\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n seed: {\n attribute: 'seed',\n type: Number,\n reflect: true,\n },\n\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n t0: {\n attribute: 'nondecision-time',\n type: Number,\n reflect: true,\n },\n\n // s: {\n // attribute: false, // within-trial variability in drift rate\n // type: Number,\n // reflect: false,\n // },\n // sz: {\n // attribute: false, // starting point range\n // type: Number,\n // reflect: false,\n // },\n // eta: {\n // attribute: false, // standard deviation for across-trial variability in drift rate\n // type: Number,\n // reflect: false,\n // },\n // st: {\n // attribute: false, // nondecision-time range\n // type: Number,\n // reflect: false,\n // },\n };\n }\n\n constructor() {\n super();\n\n this.firstUpdate = true;\n this.drag = false;\n\n this.scale = {\n time: {\n min: 0,\n max: 1000,\n step: 1,\n round: Math.round,\n },\n evidence: {\n min: -1,\n max: 1,\n step: 0.01,\n round: Math.round,\n },\n density: {\n min: 0,\n max: 10,\n step: 0.01,\n round: Math.round,\n },\n };\n\n this.measures = false;\n this.means = false;\n this.sds = false;\n\n this.resample();\n this.human = false;\n this.trials = 10;\n\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n\n // this.s = null;\n // this.sz = null;\n // this.eta = null;\n // this.st = null;\n\n this.precision = 0.005;\n this.random = null;\n\n this.bounds = null;\n this.startingPoint = null;\n\n this.data = {};\n this.model = {};\n this.animate = false;\n this.paused = false;\n\n this.alignState();\n }\n\n clear() {\n this.trials = 0;\n this.data.trials = [];\n }\n\n trial(trial = {}) {\n this.trials += 1;\n if (this.human) {\n this.data.trials.push(trial);\n } else {\n this.animate = true;\n }\n }\n\n // Called to pause trial animations!\n pauseTrial() {\n const pathNew = d3.select(this.renderRoot).select('.path[data-new-trial-ease-time]');\n pathNew.interrupt('new').select('.curve').interrupt('new');\n this.paused = true;\n }\n\n // Called to resume trial animations!\n resumeTrial() {\n this.paused = false;\n this.requestUpdate();\n }\n\n resample() {\n this.seed = d3.randomUniform(0, 1)();\n }\n\n alignPath(seed, a, z, v, t0) {\n const random = d3.randomNormal.source(d3.randomLcg(seed))(0, this.precision ** 0.5);\n const bounds = {\n lower: -a / 2,\n upper: a / 2,\n };\n const startingPoint = a * z - a / 2;\n const drift = v * this.precision;\n\n const path = [];\n path.push(\n {t: t0, e: startingPoint},\n );\n while ((path.at(-1).e > bounds.lower) && (path.at(-1).e < bounds.upper)) {\n path.push({\n t: path.at(-1).t + (this.precision * 1000),\n e: path.at(-1).e + drift + DDMMath.s.DEFAULT * random(),\n });\n }\n return path;\n }\n\n alignCorrectDistribution(a, z, v, t0) {\n const proportionCorrect = DDMMath.azv2pC(a, z, v);\n\n const dist = [\n {t: 0, d: 0},\n {t: this.t0, d: 0},\n ];\n for (\n let i = this.scale.time.min;\n i <= (this.scale.time.max - (t0));\n i += this.scale.time.step) {\n if (i > 0) {\n dist.push({\n t: t0 + i,\n d: DDMMath.tazv2gC(i / 1000, a, z, v) / proportionCorrect,\n });\n }\n }\n\n return dist;\n }\n\n alignErrorDistribution(a, z, v, t0) {\n const proportionError = DDMMath.azv2pE(a, z, v);\n\n const dist = [\n {t: 0, d: 0},\n {t: this.t0, d: 0},\n ];\n for (\n let i = this.scale.time.min;\n i <= (this.scale.time.max - (t0));\n i += this.scale.time.step) {\n if (i > 0) {\n dist.push({\n t: t0 + i,\n d: DDMMath.tazv2gE(i / 1000, a, z, v) / proportionError,\n });\n }\n }\n\n return dist;\n }\n\n alignState() {\n this.random = d3.randomUniform.source(d3.randomLcg(this.seed))(0, 1);\n\n this.bounds = {\n lower: -this.a / 2,\n upper: this.a / 2,\n };\n this.startingPoint = this.a * this.z - this.a / 2;\n\n // Data Trials\n if (this.human) {\n this.trials = this.data.trials.length;\n } else {\n this.data.trials = Array.from({length: this.trials}, (element, index) => {\n const seed = (this.random() / 1000) * 997; // HACK to avoid randomLcg repetition\n const animate = this.animate && (index === (this.trials - 1));\n\n // Sample Paths\n const path = this.alignPath(seed, this.a, this.z, this.v, this.t0);\n const outcome = (path.at(-1).e <= this.bounds.lower)\n ? 'error'\n : (path.at(-1).e >= this.bounds.upper)\n ? 'correct'\n : 'nr';\n const rt = (outcome === 'error')\n ? path.at(-2).t + (\n ((this.bounds.lower - path.at(-2).e) / (path.at(-1).e - path.at(-2).e))\n * (this.precision * 1000)\n )\n : (outcome === 'correct')\n ? path.at(-2).t + (\n ((this.bounds.upper - path.at(-2).e) / (path.at(-1).e - path.at(-2).e))\n * (this.precision * 1000)\n )\n : null;\n\n return {\n index, seed, path, rt, outcome, animate,\n };\n });\n }\n\n // Data Summary Stats\n const dataStats = DDMMath.trials2stats(\n this.data.trials.filter((path) => { return !path.animate; }),\n );\n this.data = {...this.data, ...dataStats};\n\n // Model Summary Stats\n this.model.accuracy = DDMMath.azv2pC(this.a, this.z, this.v);\n\n this.model.correctMeanRT = DDMMath.azvt02mC(this.a, this.z, this.v, this.t0);\n this.model.errorMeanRT = DDMMath.azvt02mE(this.a, this.z, this.v, this.t0);\n\n this.model.correctSDRT = DDMMath.azv2sdC(this.a, this.z, this.v);\n this.model.errorSDRT = DDMMath.azv2sdE(this.a, this.z, this.v);\n\n // Model Distributions\n this.model.correctDist = this.alignCorrectDistribution(this.a, this.z, this.v, this.t0);\n this.model.errorDist = this.alignErrorDistribution(this.a, this.z, this.v, this.t0);\n\n this.dispatchEvent(new CustomEvent('ddm-model-output', {\n detail: {\n data: this.data,\n model: this.model,\n },\n bubbles: true,\n }));\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n\n width: 27rem;\n height: 18rem;\n }\n\n .main {\n width: 100%;\n height: 100%;\n }\n\n text {\n /* stylelint-disable property-no-vendor-prefix */\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* \n UNDERLAYER\n */\n .background {\n fill: var(---color-element-background);\n stroke: none;\n stroke-width: 1;\n shape-rendering: crispEdges;\n }\n\n .title {\n font-weight: 600;\n\n fill: currentColor;\n }\n\n .axis path,\n .axis line {\n stroke: var(---color-element-border);\n /* shape-rendering: crispEdges; */\n }\n\n .tick {\n font-size: 0.75rem;\n }\n\n /* \n CONTENT\n */\n .line {\n fill: none;\n stroke: var(---color-element-emphasis);\n stroke-width: 2;\n }\n\n .curve {\n stroke-width: 2;\n }\n\n .path .curve {\n opacity: 0.5;\n\n fill: none;\n\n transition: opacity 0.5s;\n }\n\n .path.highlight .curve {\n filter: url(\"#shadow-2\");\n opacity: 1;\n }\n\n .path.correct .curve {\n /* stroke: var(---color-correct); */\n }\n\n .path.error .curve {\n /* stroke: var(---color-error); */\n }\n\n .stop-0 {\n stop-color: var(---color-correct);\n }\n\n .stop-100 {\n stop-color: var(---color-error);\n }\n\n .path.animate .curve {\n opacity: 1;\n\n stroke: url(\"#path-animate\");\n }\n\n .dist.correct .curve {\n fill: var(---color-correct-light);\n stroke: var(---color-correct);\n }\n\n .dist.error .curve {\n fill: var(---color-error-light);\n stroke: var(---color-error);\n }\n\n .rt .mark {\n stroke-width: 1;\n }\n\n .accuracy.model .bar {\n stroke: none;\n }\n\n .accuracy.model.correct .bar {\n fill: var(---color-correct);\n }\n\n .accuracy.model.error .bar {\n fill: var(---color-error);\n }\n\n .accuracy.data .mark {\n stroke-width: 2;\n }\n\n .accuracy.data.correct .mark {\n stroke: var(---color-correct-light);\n }\n\n .accuracy.data.error .mark {\n stroke: var(---color-error-light);\n }\n\n /*\n OVERLAYER\n */\n .boundary.interactive {\n cursor: ns-resize;\n }\n\n .t0z.interactive {\n cursor: move;\n }\n\n .boundary.interactive,\n .t0z.interactive {\n filter: url(\"#shadow-2\");\n outline: none;\n }\n\n .boundary.interactive:hover,\n .t0z.interactive:hover {\n filter: url(\"#shadow-4\");\n\n /* HACK: This gets Safari to correctly apply the filter! */\n /* https://github.com/emilbjorklund/svg-weirdness/issues/27 */\n transform: translateX(0);\n }\n\n .boundary.interactive:active,\n .t0z.interactive:active {\n filter: url(\"#shadow-8\");\n\n /* HACK: This gets Safari to correctly apply the filter! */\n transform: translateY(0);\n }\n\n :host(.keyboard) .boundary.interactive:focus,\n :host(.keyboard) .t0z.interactive:focus {\n filter: url(\"#shadow-8\");\n\n /* HACK: This gets Safari to correctly apply the filter! */\n transform: translateZ(0);\n }\n\n .t0z .point {\n fill: var(---color-element-emphasis);\n stroke-width: 0;\n\n r: 6px;\n }\n\n .drift {\n pointer-events: visible;\n\n fill: none;\n stroke: var(---color-element-emphasis);\n stroke-dasharray: 8 4;\n stroke-width: 2;\n }\n\n .drift.interactive {\n cursor: ns-resize;\n\n filter: url(\"#shadow-2\");\n outline: none;\n\n /* HACK: This gets Safari to correctly apply the filter! */\n fill: #000000;\n fill-opacity: 0;\n }\n\n .drift.interactive:hover {\n filter: url(\"#shadow-4\");\n\n /* HACK: This gets Safari to correctly apply the filter! */\n fill: #ff0000;\n }\n\n .drift.interactive:active {\n filter: url(\"#shadow-8\");\n\n /* HACK: This gets Safari to correctly apply the filter! */\n fill: #00ff00;\n }\n\n :host(.keyboard) .drift.interactive:focus {\n filter: url(\"#shadow-8\");\n\n /* HACK: This gets Safari to correctly apply the filter! */\n fill: #0000ff;\n }\n\n .drift .arrow {\n stroke-dasharray: none;\n }\n\n /* Make larger targets for touch users */\n .interactive .touch {\n stroke: #000000;\n stroke-dasharray: none;\n stroke-opacity: 0;\n }\n\n @media (pointer: coarse) {\n .interactive .touch {\n stroke-linecap: round;\n stroke-width: 12;\n }\n }\n\n .measure .line.short {\n stroke-width: 0;\n }\n\n .measure .markers {\n fill: none;\n stroke-width: 0;\n }\n\n .measure .label {\n font-size: 0.75rem;\n\n fill: currentColor;\n }\n\n .measure.a .line {\n stroke: var(---color-a);\n }\n\n .measure.a .label {\n dominant-baseline: auto;\n text-anchor: end;\n }\n\n .measure.z .line {\n stroke: var(---color-z);\n }\n\n .measure.z .label,\n /* Hack to avoid Safari weirdness */\n .measure.z .label tspan {\n dominant-baseline: hanging;\n text-anchor: start;\n }\n\n .measure.v .line {\n stroke: var(---color-v);\n }\n\n .measure.v .label {\n dominant-baseline: auto;\n text-anchor: start;\n }\n\n .measure.t0 .line {\n stroke: var(---color-t0);\n }\n\n .measure.t0 .label {\n dominant-baseline: auto;\n text-anchor: middle;\n }\n\n .measure-arrow {\n fill: context-stroke;\n stroke: context-stroke;\n }\n\n .measure-arrow .arrow {\n stroke-width: 1;\n }\n\n .measure-arrow.capped .cap {\n stroke-width: 2;\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .measure-arrow.a {\n fill: var(---color-a);\n stroke: var(---color-a);\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .measure-arrow.z {\n fill: var(---color-z);\n stroke: var(---color-z);\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .measure-arrow.v {\n fill: var(---color-v);\n stroke: var(---color-v);\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .measure-arrow.t0 {\n fill: var(---color-t0);\n stroke: var(---color-t0);\n }\n\n .sd .indicator,\n .mean .indicator {\n stroke-width: 2;\n }\n\n .sd.model .indicator,\n .mean.model .indicator {\n stroke-dasharray: 2 2;\n }\n\n .sd.data .indicator,\n .mean.data .indicator {\n stroke-dasharray: 1 1;\n }\n\n .sd.correct .indicator,\n .mean.correct .indicator {\n stroke: var(---color-correct-dark);\n }\n\n .sd.error .indicator,\n .mean.error .indicator {\n stroke: var(---color-error-dark);\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .cap.correct {\n fill: var(---color-correct-dark);\n stroke: var(---color-correct-dark);\n stroke-dasharray: 100%;\n }\n\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .cap.error {\n fill: var(---color-error-dark);\n stroke: var(---color-error-dark);\n stroke-dasharray: 100%;\n }\n\n .rt-label rect {\n filter: url(\"#shadow-2\");\n\n fill: var(--color-background);\n rx: 4;\n }\n\n .rt-label text {\n font-size: 0.75rem;\n \n text-anchor: middle;\n }\n\n .rt-label.correct text {\n dominant-baseline: auto;\n }\n\n .rt-label.error text {\n dominant-baseline: hanging;\n }\n `,\n ];\n }\n\n render() { /* eslint-disable-line class-methods-use-this */\n return html``;\n }\n\n willUpdate() {\n this.alignState();\n }\n\n update(changedProperties) {\n super.update(changedProperties);\n\n // Bail out if we can't get the width/height\n if (Number.isNaN(this.width) || Number.isNaN(this.height) || Number.isNaN(this.rem)) {\n return;\n }\n\n const hostWidth = this.width;\n const hostHeight = this.height;\n const hostAspectRatio = hostWidth / hostHeight;\n\n const elementAspectRatio = 1.5;\n let elementWidth;\n let elementHeight;\n\n if (hostAspectRatio > elementAspectRatio) {\n elementHeight = hostHeight;\n elementWidth = elementHeight * elementAspectRatio;\n } else {\n elementWidth = hostWidth;\n elementHeight = elementWidth / elementAspectRatio;\n }\n\n const margin = {\n top: 1 * this.rem,\n bottom: 3 * this.rem,\n left: 3.75 * this.rem,\n right: 3.25 * this.rem,\n };\n const height = elementHeight - (margin.top + margin.bottom);\n const width = elementWidth - (margin.left + margin.right);\n\n const gapHeight = 0.75 * this.rem;\n const evidenceHeight = height * 0.5;\n const densityHeight = height * 0.25 - gapHeight;\n\n const gapWidth = 0.75 * this.rem;\n const timeWidth = width * 0.90;\n const accuracyWidth = width * 0.10 - gapWidth;\n\n const transitionDuration = parseInt(this.getComputedStyleValue('---transition-duration'), 10);\n\n //\n // SCALES\n //\n\n // Time Scale\n const timeScale = d3.scaleLinear()\n .domain([this.scale.time.min, this.scale.time.max])\n .range([0, timeWidth]);\n\n // Evidence Scale\n const evidenceScale = d3.scaleLinear()\n .domain([this.scale.evidence.min, this.scale.evidence.max])\n .range([evidenceHeight, 0]);\n\n // Correct Density Scale\n const correctDensityScale = d3.scaleLinear()\n .domain([this.scale.density.min, this.scale.density.max])\n .range([densityHeight, 0]);\n\n // Error Density Scale\n const errorDensityScale = d3.scaleLinear()\n .domain([this.scale.density.min, this.scale.density.max])\n .range([0, densityHeight]);\n\n // Accuracy Scale\n const accuracyScale = d3.scaleLinear()\n .domain([0, 1])\n .range([0, height]);\n\n //\n // DRAG BEHAVIORS\n //\n\n // Nondecision Time/Starting Point Drag behavior\n const dragT0z = d3.drag()\n .subject((event, datum) => {\n return {x: timeScale(datum.t0), y: evidenceScale(datum.startingPoint)};\n })\n .on('start', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', true);\n })\n .on('drag', (event) => {\n this.drag = true;\n const shift = event.sourceEvent.shiftKey\n ? (Math.abs(event.x - event.subject.x) > Math.abs(event.y - event.subject.y))\n ? 't0'\n : 'z'\n : false;\n let t0 = timeScale.invert(event.x);\n let z = (evidenceScale.invert(event.y) + (this.a / 2)) / this.a;\n // Clamp t0\n t0 = (shift === 'z')\n ? timeScale.invert(event.subject.x)\n : (t0 < DDMMath.t0.MIN)\n ? DDMMath.t0.MIN\n : (t0 > DDMMath.t0.MAX)\n ? DDMMath.t0.MAX\n : t0;\n // Clamp z\n z = (shift === 't0')\n ? (evidenceScale.invert(event.subject.y) + (this.a / 2)) / this.a\n : (z < DDMMath.z.MIN)\n ? DDMMath.z.MIN\n : (z > DDMMath.z.MAX)\n ? DDMMath.z.MAX\n : z;\n this.t0 = t0;\n this.z = z;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-t0', {\n detail: {\n t0: this.t0,\n },\n bubbles: true,\n }));\n this.dispatchEvent(new CustomEvent('ddm-model-z', {\n detail: {\n z: this.z,\n },\n bubbles: true,\n }));\n })\n .on('end', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', false);\n this.drag = false;\n });\n\n // Drift Rate Drag behavior\n const dragDrift = d3.drag()\n .on('start', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', true);\n })\n .on('drag', (event) => {\n this.drag = true;\n let v = ((evidenceScale.invert(event.y) - this.startingPoint)\n / (timeScale.invert(event.x) - this.t0)) * 1000;\n // Clamp drift rate\n v = (v < DDMMath.v.MIN)\n ? DDMMath.v.MIN\n : (v > DDMMath.v.MAX)\n ? DDMMath.v.MAX\n : v;\n this.v = v;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-v', {\n detail: {\n v: this.v,\n },\n bubbles: true,\n }));\n })\n .on('end', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', false);\n this.drag = false;\n });\n\n // Boundary Drag behavior\n const dragBoundary = d3.drag()\n .subject((event, datum) => {\n return {x: 0, y: evidenceScale(datum.value)};\n })\n .on('start', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', true);\n })\n .on('drag', (event) => {\n this.drag = true;\n const boundary = evidenceScale.invert(event.y);\n let a = Math.abs(boundary * 2);\n // Clamp a\n a = (a < DDMMath.a.MIN)\n ? DDMMath.a.MIN\n : (a > DDMMath.a.MAX)\n ? DDMMath.a.MAX\n : a;\n this.a = a;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-a', {\n detail: {\n a: this.a,\n },\n bubbles: true,\n }));\n })\n .on('end', (event) => {\n const element = event.currentTarget;\n d3.select(element).classed('dragging', false);\n this.drag = false;\n });\n\n //\n // LINES\n //\n\n // Line for time/evidence space\n const evidenceLine = d3.line()\n .x((datum) => { return timeScale(datum.t); })\n .y((datum) => { return evidenceScale(datum.e); });\n\n // Line for correct time/density space\n const correctDensityLine = d3.line()\n .x((datum) => { return timeScale(datum.t); })\n .y((datum) => { return correctDensityScale(datum.d); });\n\n // Line for error time/density space\n const errorDensityLine = d3.line()\n .x((datum) => { return timeScale(datum.t); })\n .y((datum) => { return errorDensityScale(datum.d); });\n\n //\n // PLOTS\n //\n\n // Svg\n // DATA-JOIN\n const svgUpdate = d3.select(this.renderRoot).selectAll('.main')\n .data([{\n width: this.width,\n height: this.height,\n rem: this.rem,\n }]);\n // ENTER\n const svgEnter = svgUpdate.enter().append('svg')\n .classed('main', true)\n .each((datum, index, nodes) => {\n // Filters for shadows\n render(AccumulableElement.svgFilters, nodes[index]);\n });\n const svgMarkers = svgEnter.append('defs')\n .classed('markers', true);\n // Arrowhead marker for measures\n const measureArrow = (parameter) => {\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n svgMarkers.append('marker')\n .attr('id', `measure-arrow-${parameter}`)\n .attr('class', `measure-arrow ${parameter}`)\n .attr('orient', 'auto-start-reverse')\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('viewBox', '-10 -6 12 12')\n .attr('refX', '0')\n .attr('refY', '0')\n .attr('markerWidth', '12')\n .attr('markerHeight', '12')\n .append('path')\n .attr('class', 'arrow')\n .attr('d', 'M -7 -3 l 6 3 l -6 3 z');\n };\n const measureCappedArrow = (parameter) => {\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n const marker = svgMarkers.append('marker')\n .attr('id', `measure-capped-arrow-${parameter}`)\n .attr('class', `measure-arrow capped ${parameter}`)\n .attr('orient', 'auto-start-reverse')\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('viewBox', '-10 -6 12 12')\n .attr('refX', '0')\n .attr('refY', '0')\n .attr('markerWidth', '12')\n .attr('markerHeight', '12');\n marker\n .append('path')\n .attr('class', 'arrow')\n .attr('d', 'M -7 -3 l 6 3 l -6 3 z');\n marker\n .append('path')\n .attr('class', 'cap')\n .attr('d', 'M 0 -4 l 0 8');\n };\n measureArrow('a');\n measureArrow('z');\n measureCappedArrow('v');\n measureArrow('t0');\n measureCappedArrow('t0');\n // Flat markers for SDs\n const sdCap = (outcome) => {\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n svgMarkers.append('marker')\n .attr('id', `model-sd-cap-${outcome}`)\n .attr('class', `model-sd cap ${outcome}`)\n .attr('orient', 'auto-start-reverse')\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('viewBox', '-5 -5 10 10')\n .attr('refX', '0')\n .attr('refY', '0')\n .attr('markerWidth', '10')\n .attr('markerHeight', '10')\n .append('path')\n .attr('stroke', 'context-stroke')\n .attr('fill', 'context-stroke')\n .attr('stroke-width', '2')\n .attr('d', 'M 0 -4 l 0 8');\n svgMarkers.append('marker')\n .attr('id', `data-sd-cap-${outcome}`)\n .attr('class', `data-sd cap ${outcome}`)\n .attr('orient', 'auto-start-reverse')\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('viewBox', '-5 -5 10 10')\n .attr('refX', '0')\n .attr('refY', '0')\n .attr('markerWidth', '10')\n .attr('markerHeight', '10')\n .append('path')\n .attr('stroke', 'context-stroke')\n .attr('fill', 'context-stroke')\n .attr('stroke-width', '2')\n .attr('d', 'M 0 -3 l 0 6');\n };\n sdCap('error');\n sdCap('correct');\n const gradient = svgMarkers.append('linearGradient')\n .attr('id', 'path-animate')\n .attr('gradientUnits', 'userSpaceOnUse')\n .attr('color-interpolation', 'linearRGB')\n .attr('x1', '0')\n .attr('x2', '0')\n .attr('y1', evidenceScale(this.bounds.upper))\n .attr('y2', evidenceScale(this.bounds.lower));\n gradient.append('stop')\n .classed('stop-0', true)\n .attr('offset', '0%');\n gradient.append('stop')\n .classed('stop-100', true)\n .attr('offset', '100%');\n // MERGE\n const svgMerge = svgEnter.merge(svgUpdate)\n .attr('viewBox', `0 0 ${elementWidth} ${elementHeight}`);\n\n // Plots\n // DATA-JOIN\n const densityPlotUpdate = svgMerge.selectAll('.plot.density')\n .data([\n {\n outcome: 'correct',\n data: {\n meanRT: this.data.correctMeanRT,\n sdRT: this.data.correctSDRT,\n },\n model: {\n meanRT: this.model.correctMeanRT,\n sdRT: this.model.correctSDRT,\n dist: this.model.correctDist,\n },\n densityScale: correctDensityScale,\n densityLine: correctDensityLine,\n alignDistribution: this.alignCorrectDistribution.bind(this),\n },\n {\n outcome: 'error',\n data: {\n meanRT: this.data.errorMeanRT,\n sdRT: this.data.errorSDRT,\n },\n model: {\n meanRT: this.model.errorMeanRT,\n sdRT: this.model.errorSDRT,\n dist: this.model.errorDist,\n },\n densityScale: errorDensityScale,\n densityLine: errorDensityLine,\n alignDistribution: this.alignErrorDistribution.bind(this),\n },\n ]);\n // ENTER\n const evidencePlotEnter = svgEnter.append('g')\n .classed('plot evidence', true);\n const densityPlotEnter = densityPlotUpdate.enter().append('g')\n .attr('class', (datum) => { return `plot density ${datum.outcome}`; });\n const accuracyPlotEnter = svgEnter.append('g')\n .classed('plot accuracy', true);\n // MERGE\n const evidencePlotMerge = svgMerge.select('.plot.evidence')\n .attr('transform', `translate(${margin.left}, ${margin.top + densityHeight + gapHeight})`);\n const densityPlotMerge = densityPlotEnter.merge(densityPlotUpdate)\n .attr('transform', (datum) => {\n return `translate(${margin.left}, ${\n (datum.outcome === 'correct')\n ? margin.top\n : margin.top + densityHeight + evidenceHeight + 2 * gapHeight\n })`;\n });\n const accuracyPlotMerge = svgMerge.select('.plot.accuracy')\n .attr('transform', `translate(${margin.left + timeWidth + gapWidth}, ${margin.top})`);\n\n // Clippaths\n // ENTER\n evidencePlotEnter.append('clipPath')\n .attr('id', 'clip-evidence')\n .append('rect');\n // MERGE\n evidencePlotMerge.select('clipPath rect')\n .attr('y', evidenceScale(this.bounds.upper))\n .attr('height', evidenceScale(this.bounds.lower) - evidenceScale(this.bounds.upper) + 1)\n .attr('width', timeWidth + 1);\n\n //\n // LAYERS\n //\n\n // Underlayers\n // ENTER\n const evidenceUnderlayerEnter = evidencePlotEnter.append('g')\n .classed('underlayer', true);\n const densityUnderlayerEnter = densityPlotEnter.append('g')\n .classed('underlayer', true);\n const accuracyUnderlayerEnter = accuracyPlotEnter.append('g')\n .classed('underlayer', true);\n // MERGE\n const evidenceUnderlayerMerge = evidencePlotMerge.select('.underlayer');\n const densityUnderlayerMerge = densityPlotMerge.select('.underlayer');\n const accuracyUnderlayerMerge = accuracyPlotMerge.select('.underlayer');\n\n // Contents\n // ENTER\n evidencePlotEnter.append('g')\n .classed('content', true)\n .append('g').classed('paths', true);\n const densityContentEnter = densityPlotEnter.append('g')\n .classed('content', true);\n accuracyPlotEnter.append('g')\n .classed('content', true);\n // MERGE\n const evidenceContentMerge = evidencePlotMerge.select('.content');\n const densityContentMerge = densityPlotMerge.select('.content');\n const accuracyContentMerge = accuracyPlotMerge.select('.content');\n\n // Overlayers\n // ENTER\n evidencePlotEnter.append('g')\n .classed('overlayer', true);\n densityPlotEnter.append('g')\n .classed('overlayer', true);\n accuracyPlotEnter.append('g')\n .classed('overlayer', true);\n // MERGE\n const evidenceOverlayerMerge = evidencePlotMerge.select('.overlayer');\n const densityOverlayerMerge = densityPlotMerge.select('.overlayer');\n // const accuracyOverlayerMerge = accuracyPlotMerge.select('.overlayer');\n\n //\n // UNDERLAYERS\n //\n\n // Backgrounds\n // ENTER\n evidenceUnderlayerEnter.append('rect')\n .classed('background', true);\n densityUnderlayerEnter.append('rect')\n .classed('background', true);\n // MERGE\n evidenceUnderlayerMerge.select('.background')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('y', evidenceScale(this.bounds.upper))\n .attr('height', evidenceScale(this.bounds.lower) - evidenceScale(this.bounds.upper))\n .attr('width', timeWidth);\n densityUnderlayerMerge.select('.background')\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('height', densityHeight)\n .attr('width', timeWidth);\n\n // X Axes (Time)\n // ENTER\n densityUnderlayerEnter\n .filter((datum) => { return datum.outcome === 'error'; })\n .append('g')\n .classed('axis time', true);\n // MERGE\n const timeScaleMerge = densityUnderlayerMerge\n .filter((datum) => { return datum.outcome === 'error'; })\n .select('.axis.time')\n .attr('transform', `translate(0, ${densityHeight + (0.25 * this.rem)})`);\n const timeScaleTransition = timeScaleMerge.transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .call(d3.axisBottom(timeScale))\n .attr('font-size', null)\n .attr('font-family', null);\n timeScaleTransition.selectAll('line, path')\n .attr('stroke', null);\n\n // X Axes Titles\n // ENTER\n const timeTitleEnter = densityUnderlayerEnter\n .filter((datum) => { return datum.outcome === 'error'; })\n .append('text')\n .classed('title time', true)\n .attr('text-anchor', 'middle');\n timeTitleEnter.append('tspan')\n .classed('name', true)\n .text('Time (ms)');\n // MERGE\n densityUnderlayerMerge\n .filter((datum) => { return datum.outcome === 'error'; })\n .select('.title.time')\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .attr(\n 'transform',\n `translate(${(timeWidth / 2)}, ${(densityHeight + (2.5 * this.rem))})`,\n );\n\n // Y Axes (Evidence, Density, Accuracy)\n // ENTER\n evidenceUnderlayerEnter.append('g')\n .classed('axis evidence', true);\n densityUnderlayerEnter.append('g')\n .attr('class', (datum) => { return `axis density ${datum.outcome}`; });\n accuracyUnderlayerEnter.append('g')\n .classed('axis accuracy', true);\n // MERGE\n const evidenceScaleMerge = evidenceUnderlayerMerge.select('.axis.evidence')\n .attr('transform', `translate(${-0.25 * this.rem}, 0)`);\n const densityScaleMerge = densityUnderlayerMerge.select('.axis.density')\n .attr('transform', `translate(${-0.25 * this.rem}, 0)`);\n const accuracyScaleMerge = accuracyUnderlayerMerge.select('.axis.accuracy')\n .attr('transform', `translate(${accuracyWidth + (0.25 * this.rem)}, 0)`);\n const evidenceScaleTransition = evidenceScaleMerge.transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .call(d3.axisLeft(evidenceScale))\n .attr('font-size', null)\n .attr('font-family', null);\n const densityScaleTransition = densityScaleMerge.transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .each((datum, index, elements) => {\n d3.axisLeft(datum.densityScale).ticks(2)(d3.select(elements[index]));\n })\n .attr('font-size', null)\n .attr('font-family', null);\n const accuracyScaleTransition = accuracyScaleMerge.transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .call(d3.axisRight(accuracyScale))\n .attr('font-size', null)\n .attr('font-family', null);\n evidenceScaleTransition.selectAll('line, path')\n .attr('stroke', null);\n densityScaleTransition.selectAll('line, path')\n .attr('stroke', null);\n accuracyScaleTransition.selectAll('line, path')\n .attr('stroke', null);\n\n // Y Axes Titles (Evidence & Density)\n // ENTER\n const evidenceTitleEnter = evidenceUnderlayerEnter.append('text')\n .classed('title evidence', true)\n .attr('text-anchor', 'middle');\n const densityTitleEnter = densityUnderlayerEnter.append('text')\n .attr('class', (datum) => { return `title density ${datum.outcome}`; })\n .attr('text-anchor', 'middle');\n const accuracyTitleEnter = accuracyUnderlayerEnter.append('text')\n .classed('title accuracy', true)\n .attr('text-anchor', 'middle');\n evidenceTitleEnter.append('tspan')\n .classed('name', true)\n .text('Evidence');\n densityTitleEnter.append('tspan')\n .classed('name', true)\n .text('Density');\n accuracyTitleEnter.append('tspan')\n .classed('name', true)\n .text('Accuracy');\n // MERGE\n evidenceUnderlayerMerge.select('.title.evidence')\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('transform', `translate(${-2.5 * this.rem}, ${(evidenceHeight / 2)})rotate(-90)`);\n densityUnderlayerMerge.select('.title.density')\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('transform', `translate(${-2.5 * this.rem}, ${(densityHeight / 2)})rotate(-90)`);\n accuracyUnderlayerMerge.select('.title.accuracy')\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('transform', `translate(${accuracyWidth + 2.25 * this.rem}, ${(height / 2)})rotate(90)`);\n\n //\n // CONTENTS\n //\n\n // Paths\n // DATA-JOIN\n const pathUpdate = evidenceContentMerge.select('.paths').selectAll('.path')\n .data(\n this.data.trials.filter((trial) => { return trial.path !== undefined; }),\n );\n // ENTER\n const rtLabel = d3.local();\n const pathEnter = pathUpdate.enter().append('g')\n .classed('path', true)\n .attr('data-new-trial-ease-time', 0)\n .on('pointerenter', (event, datum) => {\n if (!this.drag) {\n d3.select(event.currentTarget)\n .classed('highlight', true)\n .raise();\n const myRtLabel = evidenceOverlayerMerge.append('g')\n .classed(`rt-label ${datum.outcome}`, true);\n const rect = myRtLabel.append('rect');\n const text = myRtLabel.append('text')\n .text(`RT = ${datum.rt.toFixed()}`)\n .attr('x', timeScale(datum.rt))\n .attr('y', datum.outcome === 'correct'\n ? evidenceScale(this.bounds.upper) - this.rem * 0.25\n : evidenceScale(this.bounds.lower) + this.rem * 0.125);\n const bbox = text.node().getBBox();\n rect\n .attr('x', bbox.x - this.rem * 0.125)\n .attr('y', bbox.y + this.rem * 0.125)\n .attr('width', bbox.width + this.rem * 0.25)\n .attr('height', bbox.height - this.rem * 0.25);\n rtLabel.set(event.currentTarget, myRtLabel);\n }\n })\n .on('pointerout', (event, datum) => {\n if (!this.drag) {\n d3.select(event.currentTarget)\n .classed('highlight', false)\n .lower();\n event.currentTarget.parentNode.insertBefore(\n event.currentTarget,\n event.currentTarget.parentNode.children[datum.index],\n );\n rtLabel.get(event.currentTarget).remove();\n }\n });\n pathEnter.append('path')\n .classed('curve', true)\n .attr('clip-path', 'url(#clip-evidence)')\n .attr('pathLength', 1)\n .attr('stroke-dashoffset', 1);\n // MERGE\n const pathMerge = pathEnter.merge(pathUpdate)\n .attr('class', (datum) => {\n return `path ${datum.outcome}`;\n });\n pathMerge.select('.curve')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('stroke', (datum) => {\n return this.getComputedStyleValue(`---color-${datum.outcome}`);\n })\n .attrTween('d', (datum, index, elements) => {\n const element = elements[index];\n const interpolateA = d3.interpolate(\n (element.a !== undefined) ? element.a : this.a,\n this.a,\n );\n const interpolateZ = d3.interpolate(\n (element.z !== undefined) ? element.z : this.z,\n this.z,\n );\n const interpolateV = d3.interpolate(\n (element.v !== undefined) ? element.v : this.v,\n this.v,\n );\n const interpolateT0 = d3.interpolate(\n (element.t0 !== undefined) ? element.t0 : this.t0,\n this.t0,\n );\n return (time) => {\n element.a = interpolateA(time);\n element.z = interpolateZ(time);\n element.v = interpolateV(time);\n element.t0 = interpolateT0(time);\n const path = this.alignPath(datum.seed, element.a, element.z, element.v, element.t0);\n return evidenceLine(path);\n };\n });\n // MERGE - Active Animate Paths\n const pathMergeNewActive = pathMerge.filter((datum) => {\n return (datum.animate && !this.paused);\n });\n if (!pathMergeNewActive.empty()) {\n const easeTime = pathMergeNewActive.attr('data-new-trial-ease-time');\n const scaleIn = (time) => {\n return d3.scaleLinear().domain([0, 1]).range([easeTime, 1])(time);\n };\n const scaleOutGenerator = (easeFunction) => {\n return (time) => {\n return d3.scaleLinear()\n .domain([easeFunction(easeTime), 1]).range([0, 1])(easeFunction(time));\n };\n };\n pathMergeNewActive\n .classed('animate', true)\n .select('.curve')\n .attr('stroke-dasharray', 1);\n pathMergeNewActive\n .transition('new')\n .duration((datum) => {\n // scale the RT for viewing pleasure\n return Math.floor((datum.rt * 1.5) * (1 - easeTime));\n })\n .ease(scaleIn)\n .attr('data-new-trial-ease-time', 1)\n .select('.curve')\n .attrTween('stroke-dashoffset', (datum, index, elements) => {\n const element = elements[index];\n const interpolator = d3.interpolate(\n element.getAttribute('stroke-dashoffset'),\n 0,\n );\n return (time) => { return interpolator(scaleOutGenerator(d3.easeLinear)(time)); };\n })\n .on('end', (datum, index, elements) => {\n const element = elements[index];\n d3.select(element.parentElement)\n .classed('animate', false)\n .attr('data-new-trial-ease-time', null);\n datum.animate = false;\n this.animate = false;\n this.alignState();\n this.requestUpdate();\n this.dispatchEvent(new CustomEvent('accumulable-response', {\n detail: {\n outcome: datum.outcome,\n data: this.data,\n model: this.model,\n },\n bubbles: true,\n }));\n });\n }\n // MERGE - Paused Animate Paths\n const pathMergeNewPaused = pathMerge.filter((datum) => {\n return (datum.animate && this.paused);\n });\n if (!pathMergeNewPaused.empty()) {\n const easeTime = pathMergeNewPaused.attr('data-new-trial-ease-time');\n pathMergeNewPaused\n .classed('animate', true)\n .select('.curve')\n .attr('stroke-dasharray', 1)\n .attr('stroke-dashoffset', () => {\n const interpolator = d3.interpolate(1, 0);\n return interpolator(d3.easeLinear(easeTime));\n });\n }\n // MERGE - Non-Animate Paths\n pathMerge.filter((datum) => { return (!datum.animate); })\n .attr('data-new-trial-ease-time', null);\n // EXIT\n pathUpdate.exit().remove();\n\n // Distributions\n // ENTER\n const distEnter = densityContentEnter.append('g')\n .attr('class', (datum) => { return `dist ${datum.outcome}`; });\n distEnter.append('path')\n .classed('curve', true);\n // MERGE\n densityContentMerge.select('.dist').select('.curve')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attrTween('d', (datum, index, elements) => {\n const element = elements[index];\n const interpolateA = d3.interpolate(\n (element.a !== undefined) ? element.a : this.a,\n this.a,\n );\n const interpolateZ = d3.interpolate(\n (element.z !== undefined) ? element.z : this.z,\n this.z,\n );\n const interpolateV = d3.interpolate(\n (element.v !== undefined) ? element.v : this.v,\n this.v,\n );\n const interpolateT0 = d3.interpolate(\n (element.t0 !== undefined) ? element.t0 : this.t0,\n this.t0,\n );\n return (time) => {\n element.a = interpolateA(time);\n element.z = interpolateZ(time);\n element.v = interpolateV(time);\n element.t0 = interpolateT0(time);\n const path = datum.alignDistribution(element.a, element.z, element.v, element.t0);\n return datum.densityLine(path);\n };\n });\n\n // RTs\n // DATA-JOIN\n const rtUpdate = evidenceContentMerge.selectAll('.rt')\n .data(this.data.trials);\n // ENTER\n const rtEnter = rtUpdate.enter().append('g');\n rtEnter.append('line')\n .classed('mark', true)\n .attr('x1', (datum) => {\n return timeScale(datum.rt);\n })\n .attr('x2', (datum) => {\n return timeScale(datum.rt);\n })\n .attr('y1', (datum) => {\n return (datum.outcome === 'correct')\n ? evidenceScale(1) - 0.125 * this.rem\n : evidenceScale(-1) + 0.125 * this.rem;\n })\n .attr('y2', (datum) => {\n return (datum.outcome === 'correct')\n ? evidenceScale(1) - 0.675 * this.rem\n : evidenceScale(-1) + 0.675 * this.rem;\n });\n // MERGE\n const rtMerge = rtEnter.merge(rtUpdate)\n .attr('class', (datum) => { return `rt ${datum.outcome}`; });\n rtMerge.filter((datum) => { return (!datum.animate); }).select('.mark')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('stroke', (datum) => {\n return this.getComputedStyleValue(`---color-${datum.outcome}`);\n })\n .attr('x1', (datum) => {\n return timeScale(datum.rt);\n })\n .attr('x2', (datum) => {\n return timeScale(datum.rt);\n })\n .attr('y1', (datum) => {\n return (datum.outcome === 'correct')\n ? evidenceScale(1) - 0.125 * this.rem\n : evidenceScale(-1) + 0.125 * this.rem;\n })\n .attr('y2', (datum) => {\n return (datum.outcome === 'correct')\n ? evidenceScale(1) - 0.675 * this.rem\n : evidenceScale(-1) + 0.675 * this.rem;\n });\n // EXIT\n rtUpdate.exit().remove();\n\n // Model Accuracy\n // DATA-JOIN\n const accuracyUpdate = accuracyContentMerge.selectAll('.accuracy.model')\n .data(\n [this.model.accuracy, 1 - this.model.accuracy],\n );\n // ENTER\n const accuracyEnter = accuracyUpdate.enter().append('g')\n .attr('class', (_, index) => {\n return `accuracy model ${(index === 0) ? 'correct' : 'error'}`;\n });\n accuracyEnter.append('rect')\n .classed('bar', true)\n .attr('x', 0);\n // MERGE\n accuracyEnter.merge(accuracyUpdate).select('rect')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n // ## Tween based on params?\n .attr('y', (datum, index) => {\n return (index === 0) ? accuracyScale(0) : accuracyScale(1 - datum);\n })\n .attr('width', accuracyWidth)\n .attr('height', (datum) => {\n return accuracyScale(datum);\n });\n // EXIT\n accuracyUpdate.exit().remove();\n\n // Data Accuracy\n // DATA-JOIN\n const dataAccuracyUpdate = accuracyContentMerge.selectAll('.accuracy.data')\n .data(\n !Number.isNaN(this.data.accuracy) ? [this.data.accuracy] : [],\n );\n // ENTER\n const dataAccuracyEnter = dataAccuracyUpdate.enter().append('g')\n .classed('accuracy data', true);\n dataAccuracyEnter.append('line')\n .classed('mark', true);\n // MERGE\n const dataAccuracyMerge = dataAccuracyEnter.merge(dataAccuracyUpdate)\n .attr('class', (datum) => {\n return `accuracy data ${(datum < this.model.accuracy.correct) ? 'correct' : 'error'}`;\n });\n dataAccuracyMerge.select('.mark')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n // ## Tween based on params?\n .attr('x1', 0 + 0.25 * this.rem)\n .attr('x2', accuracyWidth - 0.25 * this.rem)\n .attr('y1', (datum) => {\n return accuracyScale(datum) - 1;\n })\n .attr('y2', (datum) => {\n return accuracyScale(datum) - 1;\n });\n // EXIT\n dataAccuracyUpdate.exit().remove();\n\n //\n // OVERLAYERS\n //\n\n // Boundaries\n // DATA-JOIN\n const boundaryUpdate = evidenceOverlayerMerge.selectAll('.boundary')\n .data([\n {bound: 'upper', value: this.bounds.upper},\n {bound: 'lower', value: this.bounds.lower},\n ]);\n // ENTER\n const boundaryEnter = boundaryUpdate.enter().append('g')\n .attr('class', (_, index) => {\n return `boundary ${(index === 0) ? 'correct' : 'error'}`;\n });\n boundaryEnter.append('line')\n .classed('line', true);\n boundaryEnter.append('line')\n .classed('line touch', true);\n // MERGE\n const boundaryMerge = boundaryEnter.merge(boundaryUpdate)\n .attr('tabindex', this.interactive ? 0 : null)\n .classed('interactive', this.interactive)\n .on('keydown', this.interactive\n ? (event, datum) => {\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n let {a} = this;\n switch (event.key) {\n case 'ArrowUp':\n a += (datum.bound === 'upper')\n ? event.shiftKey\n ? DDMMath.a.STEP\n : DDMMath.a.JUMP\n : event.shiftKey\n ? -DDMMath.a.STEP\n : -DDMMath.a.JUMP;\n break;\n case 'ArrowDown':\n a += (datum.bound === 'upper')\n ? event.shiftKey\n ? -DDMMath.a.STEP\n : -DDMMath.a.JUMP\n : event.shiftKey\n ? DDMMath.a.STEP\n : DDMMath.a.JUMP;\n break;\n default:\n }\n // Clamp a\n a = (a < DDMMath.a.MIN)\n ? DDMMath.a.MIN\n : (a > DDMMath.a.MAX)\n ? DDMMath.a.MAX\n : a;\n this.a = a;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-a', {\n detail: {\n a: this.a,\n },\n bubbles: true,\n }));\n event.preventDefault();\n }\n }\n : null);\n if (\n this.firstUpdate\n || changedProperties.has('interactive')\n ) {\n if (this.interactive) {\n boundaryMerge.call(dragBoundary);\n } else {\n boundaryMerge.on('.drag', null);\n }\n }\n boundaryMerge.select('.line')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.min))\n .attr('x2', timeScale(this.scale.time.max))\n .attr('y1', (datum) => {\n return evidenceScale(datum.value);\n })\n .attr('y2', (datum) => {\n return evidenceScale(datum.value);\n });\n boundaryMerge.select('.line.touch')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.min))\n .attr('x2', timeScale(this.scale.time.max))\n .attr('y1', (datum) => {\n return evidenceScale(datum.value);\n })\n .attr('y2', (datum) => {\n return evidenceScale(datum.value);\n });\n // EXIT\n boundaryUpdate.exit().remove();\n\n // Drift Rate\n // DATA-JOIN\n const driftUpdate = evidenceOverlayerMerge.selectAll('.drift')\n .data([\n {v: this.v, t0: this.t0, startingPoint: this.startingPoint},\n ]);\n // ENTER\n const driftEnter = driftUpdate.enter().append('g')\n .classed('drift', true);\n driftEnter.append('line')\n .classed('line', true);\n driftEnter.append('line')\n .classed('line touch', true);\n driftEnter.append('path')\n .classed('arrow', true);\n driftEnter.append('path')\n .classed('arrow touch', true);\n // MERGE\n const driftMerge = driftEnter.merge(driftUpdate)\n .attr('tabindex', this.interactive ? 0 : null)\n .classed('interactive', this.interactive)\n .on('keydown', this.interactive\n ? (event) => {\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n let {v} = this;\n switch (event.key) {\n case 'ArrowUp':\n v += event.shiftKey\n ? DDMMath.v.STEP\n : DDMMath.v.JUMP;\n break;\n case 'ArrowDown':\n v -= event.shiftKey\n ? DDMMath.v.STEP\n : DDMMath.v.JUMP;\n break;\n default:\n }\n // Clamp z\n v = (v < DDMMath.v.MIN)\n ? DDMMath.v.MIN\n : (v > DDMMath.v.MAX)\n ? DDMMath.v.MAX\n : v;\n this.v = v;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-v', {\n detail: {\n v: this.v,\n },\n bubbles: true,\n }));\n event.preventDefault();\n }\n }\n : null);\n if (\n this.firstUpdate\n || changedProperties.has('interactive')\n ) {\n if (this.interactive) {\n driftMerge.call(dragDrift);\n } else {\n driftMerge.on('.drag', null);\n }\n }\n const scaleRatio = (evidenceScale(0) - evidenceScale(1)) / (timeScale(1) - timeScale(0));\n driftMerge\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('transform', (datum) => {\n return `translate(${timeScale(datum.t0)}, ${evidenceScale(datum.startingPoint)})\n rotate(${-Math.atan((datum.v / 1000) * scaleRatio) * (180 / Math.PI)})`;\n });\n driftMerge.select('.line')\n .attr('x2', timeScale(200));\n driftMerge.select('.line.touch')\n .attr('x2', timeScale(200));\n driftMerge.select('.arrow')\n .attr('d', `\n M ${timeScale(200) - this.rem * 0.5},${-this.rem * 0.5}\n l ${this.rem * 0.5},${this.rem * 0.5}\n l ${-this.rem * 0.5},${this.rem * 0.5}\n `);\n driftMerge.select('.arrow.touch')\n .attr('d', `\n M ${timeScale(200) - this.rem * 0.5},${-this.rem * 0.5}\n l ${this.rem * 0.5},${this.rem * 0.5}\n l ${-this.rem * 0.5},${this.rem * 0.5}\n `);\n // EXIT\n driftUpdate.exit().remove();\n\n // Nondecision Time/Starting Point\n // DATA-JOIN\n const t0zUpdate = evidenceOverlayerMerge.selectAll('.t0z')\n .data([\n {t0: this.t0, startingPoint: this.startingPoint},\n ]);\n // ENTER\n const t0zEnter = t0zUpdate.enter().append('g')\n .classed('t0z', true);\n t0zEnter.append('line')\n .classed('line', true);\n t0zEnter.append('line')\n .classed('line touch', true);\n t0zEnter.append('circle')\n .classed('point touch', true);\n // MERGE\n const t0zMerge = t0zEnter.merge(t0zUpdate)\n .attr('tabindex', this.interactive ? 0 : null)\n .classed('interactive', this.interactive)\n .on('keydown', this.interactive\n ? (event) => {\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n let {z} = this;\n switch (event.key) {\n case 'ArrowUp':\n z += event.shiftKey\n ? DDMMath.z.STEP\n : DDMMath.z.JUMP;\n break;\n case 'ArrowDown':\n z -= event.shiftKey\n ? DDMMath.z.STEP\n : DDMMath.z.JUMP;\n break;\n default:\n }\n // Clamp z\n z = (z < DDMMath.z.MIN)\n ? DDMMath.z.MIN\n : (z > DDMMath.z.MAX)\n ? DDMMath.z.MAX\n : z;\n this.z = z;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-z', {\n detail: {\n z: this.z,\n },\n bubbles: true,\n }));\n event.preventDefault();\n }\n if (['ArrowLeft', 'ArrowRight'].includes(event.key)) {\n let t0 = this.t0; /* eslint-disable-line prefer-destructuring */\n switch (event.key) {\n case 'ArrowRight':\n t0 += event.shiftKey\n ? DDMMath.t0.STEP\n : DDMMath.t0.JUMP;\n break;\n case 'ArrowLeft':\n t0 -= event.shiftKey\n ? DDMMath.t0.STEP\n : DDMMath.t0.JUMP;\n break;\n default:\n }\n // Clamp t0\n t0 = (t0 < DDMMath.t0.MIN)\n ? DDMMath.t0.MIN\n : (t0 > DDMMath.t0.MAX)\n ? DDMMath.t0.MAX\n : t0;\n this.t0 = t0;\n this.alignState();\n this.dispatchEvent(new CustomEvent('ddm-model-t0', {\n detail: {\n t0: this.t0,\n },\n bubbles: true,\n }));\n event.preventDefault();\n }\n }\n : null);\n if (\n this.firstUpdate\n || changedProperties.has('interactive')\n ) {\n if (this.interactive) {\n t0zMerge.call(dragT0z);\n } else {\n t0zMerge.on('.drag', null);\n }\n }\n t0zMerge.select('.line')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(0))\n .attr('x2', (datum) => { return timeScale(datum.t0); })\n .attr('y1', (datum) => { return evidenceScale(datum.startingPoint); })\n .attr('y2', (datum) => { return evidenceScale(datum.startingPoint); });\n t0zMerge.select('.line.touch')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(0))\n .attr('x2', (datum) => { return timeScale(datum.t0); })\n .attr('y1', (datum) => { return evidenceScale(datum.startingPoint); })\n .attr('y2', (datum) => { return evidenceScale(datum.startingPoint); });\n t0zMerge.select('.point')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('cx', (datum) => { return timeScale(datum.t0); })\n .attr('cy', (datum) => { return evidenceScale(datum.startingPoint); });\n // EXIT\n t0zUpdate.exit().remove();\n\n // Measures\n const markerCorrection = 2;\n\n // a Measure\n // DATA-JOIN\n const aUpdate = evidenceOverlayerMerge.selectAll('.measure.a')\n .data(this.measures ? [this.a] : []);\n // ENTER\n const aEnter = aUpdate.enter().append('g')\n .classed('measure a', true);\n aEnter.append('line')\n .classed('line', true);\n aEnter.append('line')\n .classed('markers', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', 'url(#measure-arrow-a)')\n .attr('marker-end', 'url(#measure-arrow-a)');\n const aLabel = aEnter.append('text')\n .classed('label', true);\n aLabel.append('tspan')\n .classed('a math-var', true)\n .text('a');\n aLabel.append('tspan')\n .classed('equals', true)\n .text(' = ');\n aLabel.append('tspan')\n .classed('value', true);\n // MERGE\n const aLength = Math.abs(evidenceScale(this.bounds.upper) - evidenceScale(this.bounds.lower));\n const aShort = aLength <= (markerCorrection * 2);\n const aMerge = aEnter.merge(aUpdate);\n aMerge.select('.line')\n .classed('short', aShort)\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.max) - this.rem * 0.75)\n .attr('y1', evidenceScale(this.bounds.upper) + markerCorrection)\n .attr('x2', timeScale(this.scale.time.max) - this.rem * 0.75)\n .attr('y2', evidenceScale(this.bounds.lower) - markerCorrection);\n aMerge.select('.markers')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.max) - this.rem * 0.75)\n .attr('y1', evidenceScale(this.bounds.upper))\n .attr('x2', timeScale(this.scale.time.max) - this.rem * 0.75)\n .attr('y2', evidenceScale(this.bounds.lower));\n const aLabelMerge = aMerge.select('.label')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x', timeScale(this.scale.time.max))\n .attr('y', evidenceScale(this.bounds.upper) - this.rem * 0.25);\n aLabelMerge.select('.value')\n .text(d3.format('.2f')(this.a));\n // EXIT\n aUpdate.exit().remove();\n\n // z Measure\n // DATA-JOIN\n const zUpdate = evidenceOverlayerMerge.selectAll('.measure.z')\n .data(this.measures ? [this.z] : []);\n // ENTER\n const zEnter = zUpdate.enter().append('g')\n .classed('measure z', true);\n zEnter.append('line')\n .classed('line', true);\n zEnter.append('line')\n .classed('markers', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', 'url(#measure-arrow-z)')\n .attr('marker-end', 'url(#measure-arrow-z)');\n const zLabel = zEnter.append('text')\n .classed('label', true);\n zLabel.append('tspan')\n .classed('z math-var', true)\n .text('z');\n zLabel.append('tspan')\n .classed('equals', true)\n .text(' = ');\n zLabel.append('tspan')\n .classed('value', true);\n // MERGE\n const zLength = Math.abs(evidenceScale(this.startingPoint) - evidenceScale(this.bounds.lower));\n const zShort = zLength <= (markerCorrection * 2);\n const zMerge = zEnter.merge(zUpdate);\n zMerge.select('.line')\n .classed('short', zShort)\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.min) + this.rem * 0.75)\n .attr('y1', evidenceScale(this.startingPoint) + markerCorrection)\n .attr('x2', timeScale(this.scale.time.min) + this.rem * 0.75)\n .attr('y2', evidenceScale(this.bounds.lower) - markerCorrection);\n zMerge.select('.markers')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(this.scale.time.min) + this.rem * 0.75)\n .attr('y1', evidenceScale(this.startingPoint))\n .attr('x2', timeScale(this.scale.time.min) + this.rem * 0.75)\n .attr('y2', evidenceScale(this.bounds.lower));\n const zLabelMerge = zMerge.select('.label')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x', timeScale(this.scale.time.min))\n .attr('y', evidenceScale(this.bounds.lower) + this.rem * 0.125);\n zLabelMerge.select('.value')\n .text(d3.format('.0%')(this.z));\n // EXIT\n zUpdate.exit().remove();\n\n // v Measure\n // DATA-JOIN\n const vUpdate = evidenceOverlayerMerge.selectAll('.measure.v')\n .data(this.measures ? [this.v] : []);\n // ENTER\n const vEnter = vUpdate.enter().append('g')\n .classed('measure v', true);\n vEnter.append('path')\n .classed('line', true);\n vEnter.append('path')\n .classed('markers', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', 'url(#measure-capped-arrow-v)')\n .attr('marker-end', 'url(#measure-capped-arrow-v)');\n const vLabel = vEnter.append('text')\n .classed('label', true);\n vLabel.append('tspan')\n .classed('v math-var', true)\n .text('v');\n vLabel.append('tspan')\n .classed('equals', true)\n .text(' = ');\n vLabel.append('tspan')\n .classed('value', true);\n // MERGE\n // Full path\n const driftHypotenuse = timeScale(200) - timeScale(0) + this.rem * 0.75;\n const driftAngle = Math.atan((this.v / 1000) * scaleRatio);\n const driftX = Math.cos(driftAngle) * driftHypotenuse;\n const driftY = Math.sin(driftAngle) * driftHypotenuse;\n // Corrected path\n const driftCorrection = markerCorrection / driftHypotenuse;\n const driftAngleCorrected = Math.atan((this.v / 1000) * scaleRatio) - driftCorrection;\n const driftStartX = Math.cos(driftCorrection) * driftHypotenuse;\n const driftStartY = Math.sin(driftCorrection) * driftHypotenuse;\n const driftEndX = Math.cos(driftAngleCorrected) * driftHypotenuse;\n const driftEndY = Math.sin(driftAngleCorrected) * driftHypotenuse;\n // Short path?\n const vLength = driftAngleCorrected * driftHypotenuse;\n const vShort = vLength <= (markerCorrection * 2);\n const vMerge = vEnter.merge(vUpdate);\n vMerge.select('.line')\n .classed('short', vShort)\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('d', `\n M ${timeScale(this.t0) + driftStartX}, ${evidenceScale(this.startingPoint) - driftStartY}\n A ${timeScale(200) - timeScale(0) + this.rem * 0.75} ${timeScale(200) - timeScale(0) + this.rem * 0.75} 0 0 0 ${timeScale(this.t0) + driftEndX} ${evidenceScale(this.startingPoint) - driftEndY}\n `);\n vMerge.select('.markers')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('d', `\n M ${timeScale(this.t0 + 200) + this.rem * 0.75}, ${evidenceScale(this.startingPoint)}\n A ${timeScale(200) - timeScale(0) + this.rem * 0.75} ${timeScale(200) - timeScale(0) + this.rem * 0.75} 0 0 0 ${timeScale(this.t0) + driftX} ${evidenceScale(this.startingPoint) - driftY}\n `);\n const vLabelMerge = vMerge.select('.label')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x', timeScale(this.t0 + 200) + this.rem * 0.5)\n .attr('y', evidenceScale(this.bounds.upper) - this.rem * 0.25);\n vLabelMerge.select('.value')\n .text(d3.format('.2f')(this.v));\n // EXIT\n vUpdate.exit().remove();\n\n // t0 Measure\n // DATA-JOIN\n const t0Update = evidenceOverlayerMerge.selectAll('.measure.t0')\n .data(this.measures ? [this.t0] : []);\n // ENTER\n const t0Enter = t0Update.enter().append('g')\n .classed('measure t0', true);\n t0Enter.append('line')\n .classed('line', true);\n t0Enter.append('line')\n .classed('markers', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', 'url(#measure-arrow-t0)')\n .attr('marker-end', 'url(#measure-capped-arrow-t0)');\n const t0Label = t0Enter.append('text')\n .classed('label', true);\n t0Label.append('tspan')\n .classed('t0 math-var', true)\n .text('t₀');\n t0Label.append('tspan')\n .classed('equals', true)\n .text(' = ');\n t0Label.append('tspan')\n .classed('value', true);\n // MERGE\n const t0Length = Math.abs(timeScale(0) - timeScale(this.t0));\n const t0Short = t0Length <= (markerCorrection * 2);\n const t0Merge = t0Enter.merge(t0Update);\n t0Merge.select('.line')\n .classed('short', t0Short)\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(0) + markerCorrection)\n .attr('y1', evidenceScale(this.startingPoint) - this.rem * 0.75)\n .attr('x2', timeScale(this.t0) - markerCorrection)\n .attr('y2', evidenceScale(this.startingPoint) - this.rem * 0.75);\n t0Merge.select('.markers')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', timeScale(0))\n .attr('y1', evidenceScale(this.startingPoint) - this.rem * 0.75)\n .attr('x2', timeScale(this.t0))\n .attr('y2', evidenceScale(this.startingPoint) - this.rem * 0.75);\n const t0LabelMerge = t0Merge.select('.label')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x', timeScale(this.t0) + this.rem * 0.25)\n .attr('y', evidenceScale(this.bounds.upper) - this.rem * 0.25);\n t0LabelMerge.select('.value')\n .text(d3.format('d')(this.t0));\n // EXIT\n t0Update.exit().remove();\n\n // Means\n // DATA-JOIN\n const meanUpdate = densityOverlayerMerge.selectAll('.model.mean')\n .data((datum) => {\n return this.means ? [datum] : [];\n });\n // ENTER\n const meanEnter = meanUpdate.enter().append('g')\n .attr('class', (datum) => { return `model mean ${datum.outcome}`; });\n meanEnter.append('line')\n .classed('indicator', true);\n // MERGE\n const meanMerge = meanEnter.merge(meanUpdate);\n meanMerge.select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', (datum) => { return timeScale(datum.model.meanRT); })\n .attr('x2', (datum) => { return timeScale(datum.model.meanRT); })\n .attr('y1', (datum) => { return datum.densityScale(this.scale.density.min); })\n .attr('y2', (datum) => { return datum.densityScale(this.scale.density.max); });\n // EXIT\n meanUpdate.exit().remove();\n\n // Data Means\n // DATA-JOIN\n const dataMeanUpdate = densityOverlayerMerge.selectAll('.data.mean')\n .data((datum) => {\n return (this.means && !Number.isNaN(datum.data.meanRT)) ? [datum] : [];\n });\n // ENTER\n const dataMeanEnter = dataMeanUpdate.enter().append('g')\n .attr('class', (datum) => { return `data mean ${datum.outcome}`; });\n dataMeanEnter.append('line')\n .classed('indicator', true)\n .attr('y1', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.125 : -0.125) * this.rem;\n })\n .attr('y2', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.675 : -0.675) * this.rem;\n });\n // MERGE\n const dataMeanMerge = dataMeanEnter.merge(dataMeanUpdate);\n dataMeanMerge.select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', (datum) => { return timeScale(datum.data.meanRT); })\n .attr('x2', (datum) => { return timeScale(datum.data.meanRT); })\n .attr('y1', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.125 : -0.125) * this.rem;\n })\n .attr('y2', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.675 : -0.675) * this.rem;\n });\n // EXIT\n dataMeanUpdate.exit().select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', 0)\n .attr('x2', 0)\n .on('end', (datum, index, elements) => {\n d3.select(elements[index].parentElement).remove();\n });\n\n // Standard Deviations\n // DATA-JOIN\n const sdUpdate = densityOverlayerMerge.selectAll('.model.sd')\n .data((datum) => {\n return this.sds ? [datum] : [];\n });\n // ENTER\n const sdEnter = sdUpdate.enter().append('g')\n .attr('class', (datum) => { return `model sd ${datum.outcome}`; });\n sdEnter.append('line')\n .classed('indicator', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', (datum) => { return `url(#model-sd-cap-${datum.outcome})`; })\n .attr('marker-end', (datum) => { return `url(#model-sd-cap-${datum.outcome})`; });\n // MERGE\n const sdMerge = sdEnter.merge(sdUpdate);\n sdMerge.select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', (datum) => { return timeScale(datum.model.meanRT - (datum.model.sdRT / 2)); })\n .attr('x2', (datum) => { return timeScale(datum.model.meanRT + (datum.model.sdRT / 2)); })\n .attr('y1', (datum) => { return datum.densityScale(5); })\n .attr('y2', (datum) => { return datum.densityScale(5); });\n // EXIT\n sdUpdate.exit().remove();\n\n // Data Standard Deviation\n // DATA-JOIN\n const dataSDUpdate = densityOverlayerMerge.selectAll('.data.sd')\n .data((datum) => {\n return (this.sds && !Number.isNaN(datum.data.meanRT) && !Number.isNaN(datum.data.sdRT))\n ? [datum]\n : [];\n });\n // ENTER\n const dataSDEnter = dataSDUpdate.enter().append('g')\n .attr('class', (datum) => { return `data sd ${datum.outcome}`; });\n dataSDEnter.append('line')\n .classed('indicator', true)\n /* Hack to avoid lack of context-stroke and context-fill in Safari */\n .attr('marker-start', (datum) => { return `url(#data-sd-cap-${datum.outcome})`; })\n .attr('marker-end', (datum) => { return `url(#data-sd-cap-${datum.outcome})`; })\n .attr('y1', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.375 : -0.375) * this.rem;\n })\n .attr('y2', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.375 : -0.375) * this.rem;\n });\n // MERGE\n const dataSDMerge = dataSDEnter.merge(dataSDUpdate);\n dataSDMerge.select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', (datum) => {\n return timeScale(datum.data.meanRT - (datum.data.sdRT / 2));\n })\n .attr('x2', (datum) => {\n return timeScale(datum.data.meanRT + (datum.data.sdRT / 2));\n })\n .attr('y1', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.375 : -0.375) * this.rem;\n })\n .attr('y2', (datum) => {\n return datum.densityScale(0) + ((datum.outcome === 'correct') ? 0.375 : -0.375) * this.rem;\n });\n // EXIT\n dataSDUpdate.exit().select('.indicator')\n .transition()\n .duration(this.drag ? 0 : transitionDuration)\n .ease(d3.easeCubicOut)\n .attr('x1', 0)\n .attr('x2', 0)\n .on('end', (datum, index, elements) => {\n d3.select(elements[index].parentElement).remove();\n });\n\n this.firstUpdate = false;\n }\n}\n\ncustomElements.define('ddm-model', DDMModel);\n","\nimport {css, html} from 'lit';\nimport * as d3 from 'd3';\n\nimport {DecidablesMixinResizeable} from '@decidables/decidables-elements';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n RDK2AFCTask element\n <rdk-2afc-task>\n\n Attributes:\n Dots; Coherence;\n # Direction, Speed, Lifetime\n*/\nexport default class RDK2AFCTask extends DecidablesMixinResizeable(AccumulableElement) {\n static get properties() {\n return {\n coherence: {\n attribute: 'coherence',\n type: Number,\n reflect: true,\n },\n count: {\n attribute: 'count',\n type: Number,\n reflect: true,\n },\n probability: {\n attribute: 'probability',\n type: Number,\n reflect: true,\n },\n duration: {\n attribute: 'duration',\n type: Number,\n reflect: true,\n },\n wait: {\n attribute: 'wait',\n type: Number,\n reflect: true,\n },\n iti: {\n attribute: 'iti',\n type: Number,\n reflect: true,\n },\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n running: {\n attribute: 'running',\n type: Boolean,\n reflect: true,\n },\n\n lifetime: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n speed: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n // Attributes\n this.coherence = 0.5; // Proportion of dots moving coherently\n this.count = 100; // Number of dots\n this.probability = 0.5; // Probability of left (as opposed to right)\n this.duration = 2000; // Duration of stimulus in milliseconds\n this.wait = 2000; // Duration of wait period for response in milliseconds\n this.iti = 2000; // Duration of inter-trial interval in milliseconds\n this.trials = 5; // Number of trials per block\n this.running = false; // Currently executing block of trials\n\n // Properties\n this.lifetime = 400; // Lifetime of each dot in milliseconds\n this.speed = 50; // Rate of dot movement in pixels per second\n\n // Private\n this.firstUpdate = true;\n this.COHERENT = 0; // \"Constant\" for index to coherent dots\n this.RANDOM = 1; // \"Constant\" for index to random dots\n this.dots = [[], []]; // Array of array of dots\n this.trial = 0; // Count of current trial\n\n this.states = ['resetted', 'iti', 'stimulus', 'wait', 'ended']; // Possible states of task\n this.state = 'resetted'; // Current state of task\n\n this.baseTime = 0; // Real time, in milliseconds, that the current block started\n this.pauseTime = 0; // Real time, in milliseconds, that block was paused at\n this.startTime = 0; // Virtual time, in milliseconds, that current stage of trial started\n this.lastTime = 0; // Virtual time, in milliseconds, of the most recent frame\n\n this.LEFT = 180; // \"Constant\" for left stimulus direction\n this.RIGHT = 0; // \"Constant\" for right stimulus direction\n this.currentDirection = undefined; // Direction in degrees for current trial\n\n this.signals = ['left', 'right']; // Possible trial types\n this.signal = undefined; // Current trial type\n\n this.runner = undefined; // D3 Interval for frame timing\n this.xScale = undefined; // D3 Scale for x-axis\n this.yScale = undefined; // D3 Scale for y-axis\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: inline-block;\n\n width: 10rem;\n height: 10rem;\n }\n\n .main {\n width: 100%;\n height: 100%;\n }\n\n .background {\n fill: var(---color-element-disabled);\n stroke: none;\n }\n\n .outline {\n fill: none;\n stroke: var(---color-element-emphasis);\n stroke-width: 2px;\n }\n\n .dot {\n r: 2px;\n }\n\n .dots.coherent {\n fill: var(---color-background);\n }\n\n .dots.random {\n fill: var(---color-background);\n }\n\n .fixation {\n stroke: var(---color-text);\n stroke-width: 2px;\n }\n\n .query {\n font-size: 1.75rem;\n font-weight: 600;\n }\n `,\n ];\n }\n\n render() { /* eslint-disable-line class-methods-use-this */\n return html``;\n }\n\n update(changedProperties) {\n super.update(changedProperties);\n\n // Bail out if we can't get the width/height/rem\n if (Number.isNaN(this.width) || Number.isNaN(this.height) || Number.isNaN(this.rem)) {\n return;\n }\n\n const elementWidth = this.width;\n const elementHeight = this.height;\n const elementSize = Math.min(elementWidth, elementHeight);\n\n const margin = {\n top: 0.25 * this.rem,\n bottom: 0.25 * this.rem,\n left: 0.25 * this.rem,\n right: 0.25 * this.rem,\n };\n const height = elementSize - (margin.top + margin.bottom);\n const width = elementSize - (margin.left + margin.right);\n\n // X Scale\n this.xScale = d3.scaleLinear()\n .domain([-1, 1])\n .range([0, width]);\n\n // Y Scale\n this.yScale = d3.scaleLinear()\n .domain([1, -1])\n .range([0, height]);\n\n // Svg\n // DATA-JOIN\n const svgUpdate = d3.select(this.renderRoot).selectAll('.main')\n .data([{\n width: this.width,\n height: this.height,\n rem: this.rem,\n }]);\n // ENTER\n const svgEnter = svgUpdate.enter().append('svg')\n .classed('main', true);\n // MERGE\n const svgMerge = svgEnter.merge(svgUpdate)\n .attr('viewBox', `0 0 ${elementSize} ${elementSize}`);\n\n // Clippath\n // ENTER\n svgEnter.append('clipPath')\n .attr('id', 'clip-rdk-task')\n .append('circle');\n // MERGE\n svgMerge.select('clipPath circle')\n .attr('cx', this.xScale(0))\n .attr('cy', this.yScale(0))\n .attr('r', this.xScale(1) - this.xScale(0));\n\n // Plot\n // ENTER\n const plotEnter = svgEnter.append('g')\n .classed('plot', true);\n // MERGE\n const plotMerge = svgMerge.select('.plot')\n .attr('transform', `translate(${margin.left}, ${margin.top})`);\n\n // Underlayer\n // ENTER\n const underlayerEnter = plotEnter.append('g')\n .classed('underlayer', true);\n // MERGE\n const underlayerMerge = plotMerge.select('.underlayer');\n\n // Background\n // ENTER\n underlayerEnter.append('circle')\n .classed('background', true);\n // MERGE\n underlayerMerge.select('.background')\n .attr('cx', this.xScale(0))\n .attr('cy', this.yScale(0))\n .attr('r', this.xScale(1) - this.xScale(0));\n\n // Content\n // ENTER\n plotEnter.append('g')\n .classed('content', true)\n .attr('clip-path', 'url(#clip-rdk-task)');\n // MERGE\n const contentMerge = plotMerge.select('.content');\n\n // Dot Groups\n // DATA-JOIN\n const dotsUpdate = contentMerge.selectAll('.dots')\n .data([[], []]);\n // ENTER\n dotsUpdate.enter().append('g')\n .classed('dots', true)\n .classed('coherent', (datum, index) => { return index === this.COHERENT; })\n .classed('random', (datum, index) => { return index === this.RANDOM; });\n\n // Overlayer\n // ENTER\n const overlayerEnter = plotEnter.append('g')\n .classed('overlayer', true);\n // MERGE\n const overlayerMerge = plotMerge.select('.overlayer');\n\n // Outline\n // ENTER\n overlayerEnter.append('circle')\n .classed('outline', true);\n // MERGE\n overlayerMerge.select('.outline')\n .attr('cx', this.xScale(0))\n .attr('cy', this.yScale(0))\n .attr('r', this.xScale(1) - this.yScale(0));\n\n // Start or stop trial block\n if (this.firstUpdate || changedProperties.has('running')) {\n if (this.running) {\n // (Re)Start\n if (this.pauseTime) {\n // Shift timeline forward as if paused time never happened\n this.baseTime += (d3.now() - this.pauseTime);\n this.pauseTime = 0;\n }\n this.runner = d3.interval(this.run.bind(this), 20); // FIXME??\n } else if (this.runner !== undefined) {\n // Pause\n this.runner.stop();\n this.pauseTime = d3.now();\n }\n }\n\n this.firstUpdate = false;\n }\n\n reset() {\n if (this.runner !== undefined) {\n this.runner.stop();\n }\n this.running = false;\n this.trial = 0;\n this.state = 'resetted';\n this.baseTime = 0;\n this.pauseTime = 0;\n this.startTime = 0;\n this.lastTime = 0;\n this.signal = undefined;\n this.currentDirection = undefined;\n\n const dotsUpdate = d3.select(this.renderRoot).select('.content').selectAll('.dots')\n .data([[], []]);\n const dotUpdate = dotsUpdate.selectAll('.dot')\n .data((datum) => { return datum; });\n dotUpdate.exit()\n .remove();\n\n const fixationUpdate = d3.select(this.renderRoot).select('.content').selectAll('.fixation')\n .data([]);\n fixationUpdate.exit()\n .remove();\n const queryUpdate = d3.select(this.renderRoot).select('.content').selectAll('.query')\n .data([]);\n queryUpdate.exit()\n .remove();\n }\n\n run(/* elapsed */) {\n const realTime = d3.now();\n const currentTime = (this.baseTime) ? (realTime - this.baseTime) : 0;\n const elapsedTime = (this.baseTime) ? (currentTime - this.startTime) : 0;\n const frameTime = (this.baseTime) ? (currentTime - this.lastTime) : 0;\n this.lastTime = currentTime;\n let newTrial = false;\n if (this.state === 'resetted') {\n // Start block with an ITI\n this.state = 'iti';\n this.baseTime = realTime;\n this.startTime = 0;\n this.dispatchEvent(new CustomEvent('rdk-block-start', {\n detail: {\n trials: this.trials,\n },\n bubbles: true,\n }));\n } else if ((this.state === 'iti') && (elapsedTime >= this.iti)) {\n // Start new trial with a stimulus\n newTrial = true;\n this.trial += 1;\n this.state = 'stimulus';\n this.startTime = currentTime;\n this.signal = (Math.random() < this.probability) ? 'left' : 'right';\n this.currentDirection = (this.signal === 'left')\n ? this.LEFT\n : this.RIGHT;\n this.dispatchEvent(new CustomEvent('rdk-trial-start', {\n detail: {\n trials: this.trials,\n duration: this.duration,\n wait: this.wait,\n iti: this.iti,\n trial: this.trial,\n signal: this.signal,\n },\n bubbles: true,\n }));\n } else if ((this.state === 'stimulus') && (elapsedTime >= this.duration)) {\n // Stimulus is over, now wait\n this.state = 'wait';\n this.startTime = currentTime;\n this.dispatchEvent(new CustomEvent('rdk-trial-middle', {\n detail: {\n trials: this.trials,\n duration: this.duration,\n wait: this.wait,\n iti: this.iti,\n trial: this.trial,\n signal: this.signal,\n },\n bubbles: true,\n }));\n } else if ((this.state === 'wait') && (elapsedTime >= this.wait)) {\n // Wait is over, end of trial\n this.dispatchEvent(new CustomEvent('rdk-trial-end', {\n detail: {\n trials: this.trials,\n duration: this.duration,\n wait: this.wait,\n iti: this.iti,\n trial: this.trial,\n signal: this.signal,\n },\n bubbles: true,\n }));\n if (this.trial >= this.trials) {\n // End of block\n this.runner.stop();\n this.running = false;\n this.state = 'ended';\n this.baseTime = 0;\n this.pauseTime = 0;\n this.startTime = 0;\n this.lastTime = 0;\n this.signal = undefined;\n this.currentDirection = undefined;\n this.dispatchEvent(new CustomEvent('rdk-block-end', {\n detail: {\n trials: this.trial,\n },\n bubbles: true,\n }));\n } else {\n // ITI\n this.state = 'iti';\n this.startTime = currentTime;\n }\n }\n\n // Dots\n if (this.state === 'stimulus') {\n this.dots[this.COHERENT].length = Math.round(this.count * this.coherence);\n this.dots[this.RANDOM].length = (this.count - this.dots[this.COHERENT].length);\n\n for (let t = 0; t < this.dots.length; t += 1) {\n for (let i = 0; i < this.dots[t].length; i += 1) {\n const newDot = (this.dots[t][i] === undefined);\n if (newDot) {\n this.dots[t][i] = {};\n }\n const dot = this.dots[t][i];\n if (newTrial || newDot) {\n dot.direction = (t === this.RANDOM) ? (Math.random() * 360) : this.currentDirection;\n dot.birth = currentTime - Math.floor(Math.random() * this.lifetime);\n const angle = Math.random() * 2 * Math.PI;\n const radius = Math.sqrt(Math.random());\n dot.x = this.xScale(radius * Math.cos(angle));\n dot.y = this.yScale(radius * Math.sin(angle));\n } else if (currentTime > (dot.birth + this.lifetime)) {\n // Dot has died, so rebirth\n dot.birth += this.lifetime;\n dot.direction = (t === this.RANDOM) ? (Math.random() * 360) : this.currentDirection;\n const angle = Math.random() * 2 * Math.PI;\n const radius = Math.sqrt(Math.random());\n dot.x = this.xScale(radius * Math.cos(angle));\n dot.y = this.yScale(radius * Math.sin(angle));\n } else {\n if (t === this.COHERENT) {\n dot.direction = this.currentDirection;\n }\n const directionR = dot.direction * (Math.PI / 180);\n dot.dx = this.speed * (frameTime / 1000) * Math.cos(directionR);\n dot.dy = this.speed * (frameTime / 1000) * Math.sin(directionR);\n // Update position\n dot.x += dot.dx;\n dot.y += dot.dy;\n // Calculate squared distance from center\n const distance2 = ((dot.x - this.xScale(0)) ** 2) + ((dot.y - this.yScale(0)) ** 2);\n const radius2 = (this.xScale(1) - this.xScale(0)) ** 2;\n if (distance2 > radius2) {\n // Dot has exited so move to other side\n dot.x = -(dot.x - this.xScale(0)) + this.xScale(0);\n dot.y = -(dot.y - this.yScale(0)) + this.yScale(0);\n }\n }\n }\n }\n }\n\n // Fixation\n // DATA-JOIN\n const fixationUpdate = d3.select(this.renderRoot).select('.content').selectAll('.fixation')\n .data((this.state === 'iti') ? [true] : []);\n // ENTER\n const fixationEnter = fixationUpdate.enter().append('g')\n .classed('fixation', true);\n fixationEnter.append('line')\n .attr('x1', this.xScale(-0.1))\n .attr('y1', this.xScale(0))\n .attr('x2', this.xScale(0.1))\n .attr('y2', this.xScale(0));\n fixationEnter.append('line')\n .attr('x1', this.xScale(0))\n .attr('y1', this.xScale(-0.1))\n .attr('x2', this.xScale(0))\n .attr('y2', this.xScale(0.1));\n // EXIT\n fixationUpdate.exit().remove();\n\n // Dots\n // DATA-JOIN\n const dotsUpdate = d3.select(this.renderRoot).select('.content').selectAll('.dots')\n .data((this.state === 'stimulus') ? this.dots : [[], []]);\n const dotUpdate = dotsUpdate.selectAll('.dot')\n .data((datum) => { return datum; });\n // ENTER\n const dotEnter = dotUpdate.enter().append('circle')\n .classed('dot', true);\n // MERGE\n dotEnter.merge(dotUpdate)\n .attr('cx', (datum) => { return datum.x; })\n .attr('cy', (datum) => { return datum.y; });\n // EXIT\n dotUpdate.exit().remove();\n\n // Query\n // DATA-JOIN\n const queryUpdate = d3.select(this.renderRoot).select('.content').selectAll('.query')\n .data((this.state === 'wait') ? [true] : []);\n // ENTER\n const queryEnter = queryUpdate.enter().append('g')\n .classed('query', true);\n queryEnter.append('text')\n .attr('x', this.xScale(0))\n .attr('y', this.xScale(0))\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .text('?');\n // EXIT\n queryUpdate.exit().remove();\n }\n}\n\ncustomElements.define('rdk-2afc-task', RDK2AFCTask);\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n t._restart = t.restart;\n t.restart = function(callback, delay, time) {\n delay = +delay, time = time == null ? now() : +time;\n t._restart(function tick(elapsed) {\n elapsed += total;\n t._restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n }\n t.restart(callback, delay, time);\n return t;\n}\n","\nimport {css} from 'lit';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n DDMEquation Base Class - Not intended for instantiation!\n*/\nexport default class DDMEquation extends AccumulableElement {\n static get properties() {\n return {\n numeric: {\n attribute: 'numeric',\n type: Boolean,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n this.numeric = false;\n }\n\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n display: block;\n\n margin: 1rem;\n }\n\n /* Containing <div> */\n .holder {\n display: flex;\n\n flex-direction: row;\n\n justify-content: left;\n }\n\n /* Overall <table> */\n .equation {\n text-align: center;\n white-space: nowrap;\n\n border-collapse: collapse;\n\n border: 0;\n }\n\n /* Modifies <td> */\n .underline {\n border-bottom: 1px solid var(---color-text);\n }\n\n /* Basic <span> and <var> w/modifiers */\n span,\n var {\n padding: 0 0.25rem;\n\n font-style: normal;\n }\n\n var {\n border-radius: var(---border-radius);\n }\n\n .tight {\n padding: 0;\n }\n\n .paren {\n font-size: 150%;\n }\n\n .bracket {\n font-size: 175%;\n }\n\n .brace {\n font-size: 200%;\n }\n\n .addend {\n position: relative;\n display: inline-block;\n }\n\n .comparison {\n position: relative;\n display: inline-block;\n\n font-size: 125%;\n font-weight: 600;\n }\n\n .function {\n display: inline-block;\n\n border-radius: var(---border-radius);\n }\n\n :host([numeric]) .function {\n padding: 0.25rem;\n }\n\n .exp {\n display: inline-block;\n\n font-size: 0.75rem;\n }\n\n .subscript {\n display: inline-block;\n\n font-size: 66.667%;\n }\n\n .summation {\n display: flex;\n\n flex-direction: column;\n\n line-height: 0.8;\n }\n\n .sigma {\n display: inline-block;\n\n font-size: 200%;\n }\n\n /* Input wrapping <label> */\n decidables-spinner {\n --decidables-spinner-input-width: 4rem;\n\n display: inline-block;\n\n padding: 0.125rem 0.375rem 0.375rem;\n\n line-height: 1.5;\n vertical-align: middle;\n\n border-radius: var(---border-radius);\n }\n\n .n {\n --decidables-spinner-input-width: 2rem;\n }\n\n .left {\n text-align: left;\n }\n\n .right {\n text-align: right;\n }\n\n .bottom {\n vertical-align: bottom;\n }\n\n .top {\n vertical-align: top;\n }\n\n /* Color scheme */\n .a {\n background: var(---color-a-light);\n }\n\n .z {\n background: var(---color-z-light);\n }\n\n .v {\n background: var(---color-v-light);\n }\n\n .t0 {\n background: var(---color-t0-light);\n }\n\n .s {\n background: var(---color-s-light);\n }\n `,\n ];\n }\n}\n","\nimport {html} from 'lit';\n\nimport '@decidables/decidables-elements/spinner';\nimport DDMMath from '@decidables/accumulable-math';\n\nimport DDMEquation from './ddm-equation';\n\n/*\n DDMEquationAZV2PC element\n <ddm-equation-azv2pc>\n\n Attributes:\n*/\nexport default class DDMEquationAZV2PC extends DDMEquation {\n static get properties() {\n return {\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n\n accuracy: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.alignState();\n }\n\n alignState() {\n this.accuracy = DDMMath.azv2pC(this.a, this.z, this.v);\n }\n\n sendEvent() {\n this.dispatchEvent(new CustomEvent('ddm-equation-azv2pc-change', {\n detail: {\n a: this.a,\n z: this.z,\n v: this.v,\n accuracy: this.accuracy,\n },\n bubbles: true,\n }));\n }\n\n aInput(event) {\n this.a = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n zInput(event) {\n this.z = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n vInput(event) {\n this.v = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n willUpdate() {\n this.alignState();\n }\n\n render() {\n let a;\n let z;\n let v;\n let s;\n let accuracy;\n if (this.numeric) {\n a = html`<decidables-spinner class=\"a bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.a.MIN}\n max=${DDMMath.a.MAX}\n step=${DDMMath.a.STEP}\n .value=${this.a}\n @input=${this.aInput.bind(this)}\n >\n <var class=\"math-var\">a</var>\n </decidables-spinner>`;\n z = html`<decidables-spinner class=\"z bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.z.MIN}\n max=${DDMMath.z.MAX}\n step=${DDMMath.z.STEP}\n .value=${this.z}\n @input=${this.zInput.bind(this)}\n >\n <var class=\"math-var\">z</var>\n </decidables-spinner>`;\n v = html`<decidables-spinner class=\"v bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.v.MIN}\n max=${DDMMath.v.MAX}\n step=${DDMMath.v.STEP}\n .value=${this.v}\n @input=${this.vInput.bind(this)}\n >\n <var class=\"math-var\">v</var>\n </decidables-spinner>`;\n s = html`<decidables-spinner class=\"s bottom\"\n disabled\n .value=${DDMMath.s.DEFAULT}\n >\n <var class=\"math-var\">s</var>\n </decidables-spinner>`;\n accuracy = html`<decidables-spinner class=\"accuracy bottom\"\n disabled\n .value=${+this.accuracy.toFixed(2)}\n >\n <var>Accuracy</var>\n </decidables-spinner>`;\n } else {\n a = html`<var class=\"math-var a\">a</var>`;\n z = html`<var class=\"math-var z\">z</var>`;\n v = html`<var class=\"math-var v\">v</var>`;\n s = html`<var class=\"math-var s\">s</var>`;\n accuracy = html`<var class=\"accuracy\">Accuracy</var>`;\n }\n const equation = html`\n <tr>\n <td rowspan=\"2\">\n ${accuracy}<span class=\"equals\">=</span>\n </td>\n <td class=\"underline\">\n <var class=\"math-greek e tight\">e</var><sup class=\"exp\"><span class=\"minus tight\">−</span><span class=\"paren tight\">(</span>2${v}${a} / ${s}<sup class=\"exp\">2</sup><span class=\"paren tight\">)</span></sup>\n <span class=\"minus\">−</span>\n <var class=\"math-greek e tight\">e</var><sup class=\"exp\"><span class=\"minus tight\">−</span><span class=\"paren tight\">(</span>2${v}${z} / ${s}<sup class=\"exp\">2</sup><span class=\"paren tight\">)</span></sup>\n </td>\n </tr>\n <tr>\n <td>\n <var class=\"math-greek e tight\">e</var><sup class=\"exp\"><span class=\"minus tight\">−</span><span class=\"paren tight\">(</span>2${v}${a} / ${s}<sup class=\"exp\">2</sup><span class=\"paren tight\">)</span></sup>\n <span class=\"minus\">−</span>\n 1\n </td>\n </tr>`;\n return html`\n <div class=\"holder\">\n <table class=\"equation\">\n <tbody>\n ${equation}\n </tbody>\n </table>\n </div>`;\n }\n}\n\ncustomElements.define('ddm-equation-azv2pc', DDMEquationAZV2PC);\n","\nimport {html} from 'lit';\n\nimport '@decidables/decidables-elements/spinner';\nimport DDMMath from '@decidables/accumulable-math';\n\nimport DDMEquation from './ddm-equation';\n\n/*\n DDMEquationAZVT02M element\n <ddm-equation-azvt02m>\n\n Attributes:\n*/\nexport default class DDMEquationAZVT02M extends DDMEquation {\n static get properties() {\n return {\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n t0: {\n attribute: 'nondecision-time',\n type: Number,\n reflect: true,\n },\n\n meanRT: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n this.alignState();\n }\n\n alignState() {\n this.meanRT = DDMMath.azvt02m(this.a, this.z, this.v, this.t0);\n }\n\n sendEvent() {\n this.dispatchEvent(new CustomEvent('ddm-equation-azvt02m-change', {\n detail: {\n a: this.a,\n z: this.z,\n v: this.v,\n t0: this.t0,\n meanRT: this.meanRT,\n },\n bubbles: true,\n }));\n }\n\n aInput(event) {\n this.a = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n zInput(event) {\n this.z = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n vInput(event) {\n this.v = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n t0Input(event) {\n this.t0 = parseFloat(event.target.value);\n this.alignState();\n this.sendEvent();\n }\n\n willUpdate() {\n this.alignState();\n }\n\n render() {\n let a;\n let z;\n let v;\n let t0;\n let s;\n let meanRT;\n if (this.numeric) {\n a = html`<decidables-spinner class=\"a bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.a.MIN}\n max=${DDMMath.a.MAX}\n step=${DDMMath.a.STEP}\n .value=${this.a}\n @input=${this.aInput.bind(this)}\n >\n <var class=\"math-var\">a</var>\n </decidables-spinner>`;\n z = html`<decidables-spinner class=\"z bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.z.MIN}\n max=${DDMMath.z.MAX}\n step=${DDMMath.z.STEP}\n .value=${this.z}\n @input=${this.zInput.bind(this)}\n >\n <var class=\"math-var\">z</var>\n </decidables-spinner>`;\n v = html`<decidables-spinner class=\"v bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.v.MIN}\n max=${DDMMath.v.MAX}\n step=${DDMMath.v.STEP}\n .value=${this.v}\n @input=${this.vInput.bind(this)}\n >\n <var class=\"math-var\">v</var>\n </decidables-spinner>`;\n t0 = html`<decidables-spinner class=\"t0 bottom\"\n ?disabled=${!this.interactive}\n min=${DDMMath.t0.MIN}\n max=${DDMMath.t0.MAX}\n step=${DDMMath.t0.STEP}\n .value=${this.t0}\n @input=${this.t0Input.bind(this)}\n >\n <var class=\"math-var\">t<sub>0</sub></var>\n </decidables-spinner>`;\n s = html`<decidables-spinner class=\"s bottom\"\n disabled\n .value=${DDMMath.s.DEFAULT}\n >\n <var class=\"math-var\">s</var>\n </decidables-spinner>`;\n meanRT = html`<decidables-spinner class=\"mean-rt bottom\"\n disabled\n .value=${+this.meanRT.toFixed(0)}\n >\n <var>Mean RT</var>\n </decidables-spinner>`;\n } else {\n a = html`<var class=\"math-var a\">a</var>`;\n z = html`<var class=\"math-var z\">z</var>`;\n v = html`<var class=\"math-var v\">v</var>`;\n t0 = html`<var class=\"math-var t0\">t<sub>0</sub></var>`;\n s = html`<var class=\"math-var s\">s</var>`;\n meanRT = html`<var class=\"mean-rt\">Mean RT</var>`;\n }\n const equation = html`\n <tr>\n <td rowspan=\"2\">\n ${meanRT}<span class=\"equals\">=</span>\n ${t0}\n <span class=\"minus\">−</span>\n </td>\n <td class=\"underline\">\n ${z}\n </td>\n <td rowspan=\"2\">\n <span class=\"plus\">+</span>\n </td>\n <td class=\"underline\">\n ${a}\n </td>\n <td rowspan=\"2\">&nbsp;</td>\n <td class=\"underline\">\n <var class=\"math-greek e tight\">e</var><sup class=\"exp\"><span class=\"minus tight\">−</span><span class=\"paren tight\">(</span>2${v}${z} / ${s}<sup class=\"exp\">2</sup><span class=\"paren tight\">)</span></sup>\n <span class=\"minus\">−</span>\n 1\n </td>\n </tr>\n <tr>\n <td>\n ${v}\n </td>\n <td>\n ${v}\n </td>\n <td>\n <var class=\"math-greek e tight\">e</var><sup class=\"exp\"><span class=\"minus tight\">−</span><span class=\"paren tight\">(</span>2${v}${a} / ${s}<sup class=\"exp\">2</sup><span class=\"paren tight\">)</span></sup>\n <span class=\"minus\">−</span>\n 1\n </td>\n </tr>`;\n return html`\n <div class=\"holder\">\n <table class=\"equation\">\n <tbody>\n ${equation}\n </tbody>\n </table>\n </div>`;\n }\n}\n\ncustomElements.define('ddm-equation-azvt02m', DDMEquationAZVT02M);\n","\nimport {css, html} from 'lit';\n\nimport AccumulableElement from '../accumulable-element';\n\n/*\n DDMExample Base Class - Not intended for instantiation!\n*/\nexport default class DDMExample extends AccumulableElement {\n static get styles() {\n return [\n super.styles,\n css`\n :host {\n ---border: var(--border, 1px solid var(---color-border));\n display: inline-block;\n\n margin-bottom: 1rem;\n }\n\n .holder {\n display: flex;\n }\n\n .body {\n display: flex;\n\n flex-wrap: wrap;\n\n align-items: center;\n justify-content: left;\n\n padding: 0.625rem;\n\n border: var(---border);\n border-radius: 0.25rem;\n }\n\n .body ::slotted(*) {\n margin: 0.625rem;\n }\n\n /* HACK: Sibling selectors not working with ::slotted */\n /* .body > rdk-task + sdt-response,\n ::slotted(rdk-task) + ::slotted(sdt-response) { */\n /* .body ::slotted(sdt-response) {\n margin-left: 0;\n } */\n\n /* HACK: Sibling selectors not working with ::slotted */\n /* .body > sdt-control + rdk-task,\n ::slotted(sdt-control) + ::slotted(rdk-task) {\n margin-left: 0;\n } */\n /* .body ::slotted(rdk-task) {\n margin-left: 0;\n } */\n `,\n ];\n }\n\n render() { /* eslint-disable-line class-methods-use-this */\n return html`\n <div class=\"holder\">\n <div class=\"body\">\n <slot>Empty!</slot>\n </div>\n </div>`;\n }\n}\n\ncustomElements.define('ddm-example', DDMExample);\n","\nimport DDMMath from '@decidables/accumulable-math';\n\nimport DDMExample from './ddm-example';\n\n/*\n DDMExampleHuman element\n <ddm-example-human>\n*/\nexport default class DDMExampleHuman extends DDMExample {\n static get properties() {\n return {\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n duration: {\n attribute: 'duration',\n type: Number,\n reflect: true,\n },\n coherence: {\n attribute: 'coherence',\n type: Number,\n reflect: true,\n },\n color: {\n attribute: 'color',\n type: String,\n reflect: true,\n },\n\n a: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n z: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n v: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n t0: {\n attribute: false,\n type: Number,\n reflect: false,\n },\n };\n }\n\n constructor() {\n super();\n\n this.trials = 10;\n this.duration = 2000;\n this.coherence = 0.5;\n this.colors = ['none', 'measure', 'outcome', 'all'];\n this.color = 'outcome';\n\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n\n this.accumulableControl = null;\n this.rdkTask = null;\n this.accumulableResponse = null;\n this.accumulableTable = null;\n this.ddmParameters = null;\n this.ddmModel = null;\n this.ddmFit = null;\n\n this.data = undefined;\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.accumulableControl = this.querySelector('accumulable-control');\n this.rdkTask = this.querySelector('rdk-2afc-task');\n this.accumulableResponse = this.querySelector('accumulable-response');\n this.accumulableTable = this.querySelector('accumulable-table');\n this.ddmParameters = this.querySelector('ddm-parameters');\n this.ddmModel = this.querySelector('ddm-model');\n this.ddmFit = this.querySelector('ddm-fit');\n\n // Initialize\n this.ddmModel.clear();\n\n if (this.accumulableControl) {\n this.accumulableControl.addEventListener('accumulable-control-trials', (event) => {\n this.trials = event.detail.trials;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-duration', (event) => {\n this.duration = event.detail.duration;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-coherence', (event) => {\n this.coherence = event.detail.coherence;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-color', (event) => {\n this.color = event.detail.color;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-run', (/* event */) => {\n if (this.rdkTask) {\n this.rdkTask.running = true;\n }\n });\n\n this.accumulableControl.addEventListener('accumulable-control-pause', (/* event */) => {\n if (this.rdkTask) {\n this.rdkTask.running = false;\n }\n });\n\n this.accumulableControl.addEventListener('accumulable-control-reset', (/* event */) => {\n if (this.rdkTask) {\n this.rdkTask.reset();\n }\n\n if (this.accumulableResponse) {\n this.accumulableResponse.reset();\n }\n\n if (this.accumulableTable) {\n this.accumulableTable.correctCount = NaN;\n this.accumulableTable.errorCount = NaN;\n this.accumulableTable.nrCount = NaN;\n this.accumulableTable.accuracy = NaN;\n this.accumulableTable.correctMeanRT = NaN;\n this.accumulableTable.errorMeanRT = NaN;\n this.accumulableTable.meanRT = NaN;\n this.accumulableTable.correctSDRT = NaN;\n this.accumulableTable.errorSDRT = NaN;\n this.accumulableTable.sdRT = NaN;\n }\n\n // if (this.ddmParameters) {\n // }\n\n if (this.ddmModel) {\n this.ddmModel.clear();\n }\n\n if (this.ddmFit) {\n this.ddmFit.clear();\n }\n });\n }\n\n if (this.rdkTask) {\n this.rdkTask.addEventListener('rdk-trial-start', (event) => {\n if (this.accumulableResponse) {\n this.accumulableResponse.start(event.detail.signal, event.detail.trial);\n }\n });\n }\n\n if (this.rdkTask) {\n this.rdkTask.addEventListener('rdk-trial-end', (/* event */) => {\n if (this.accumulableResponse) {\n this.accumulableResponse.stop();\n }\n });\n }\n\n if (this.rdkTask) {\n this.rdkTask.addEventListener('rdk-block-end', (/* event */) => {\n if (this.accumulableControl) {\n this.accumulableControl.complete();\n }\n });\n }\n\n if (this.accumulableResponse) {\n this.accumulableResponse.addEventListener('accumulable-response', (event) => {\n this.data = event.detail.data;\n\n if (this.ddmModel) {\n this.ddmModel.trial({\n index: event.detail.trial,\n rt: event.detail.rt,\n outcome: event.detail.outcome,\n });\n }\n\n if (this.ddmFit) {\n this.ddmFit.set({\n accuracy: event.detail.data.accuracy,\n correctMeanRT: event.detail.data.correctMeanRT,\n errorMeanRT: event.detail.data.errorMeanRT,\n meanRT: event.detail.data.meanRT,\n correctSDRT: event.detail.data.correctSDRT,\n errorSDRT: event.detail.data.errorSDRT,\n sdRT: event.detail.data.sdRT,\n });\n }\n\n this.requestUpdate();\n });\n }\n\n if (this.ddmFit) {\n this.ddmFit.addEventListener('ddm-fit-update', (event) => {\n this.a = event.detail.a;\n this.z = 0.5; // event.detail.z;\n this.v = event.detail.v;\n this.t0 = event.detail.t0;\n });\n }\n }\n\n update(changedProperties) {\n super.update(changedProperties);\n\n if (this.accumulableControl) {\n this.accumulableControl.trials = (this.accumulableControl.trials != null)\n ? this.trials\n : undefined;\n this.accumulableControl.duration = (this.accumulableControl.duration != null)\n ? this.duration\n : undefined;\n this.accumulableControl.coherence = (this.accumulableControl.coherence != null)\n ? this.coherence\n : undefined;\n this.accumulableControl.color = (this.accumulableControl.color != null)\n ? this.color\n : undefined;\n }\n\n if (this.rdkTask) {\n this.rdkTask.trials = this.trials;\n this.rdkTask.duration = this.duration;\n this.rdkTask.wait = this.duration;\n this.rdkTask.iti = this.duration;\n this.rdkTask.coherence = this.coherence;\n }\n\n if (this.ddmParameters) {\n this.ddmParameters.a = (this.ddmParameters.a != null)\n ? this.a\n : undefined;\n this.ddmParameters.z = (this.ddmParameters.z != null)\n ? this.z\n : undefined;\n this.ddmParameters.v = (this.ddmParameters.a != null)\n ? this.v\n : undefined;\n this.ddmParameters.t0 = (this.ddmParameters.t0 != null)\n ? this.t0\n : undefined;\n }\n\n if (this.ddmModel) {\n this.ddmModel.a = +this.a;\n this.ddmModel.z = +this.z;\n this.ddmModel.v = +this.v;\n this.ddmModel.t0 = +this.t0;\n }\n\n if (this.accumulableResponse) {\n this.accumulableResponse.trialTotal = this.trials;\n }\n\n if (this.accumulableTable) {\n this.accumulableTable.color = this.color;\n }\n\n if (this.accumulableTable && this.data) {\n this.accumulableTable.correctCount = this.data.correctCount;\n this.accumulableTable.errorCount = this.data.errorCount;\n this.accumulableTable.nrCount = this.data.nrCount;\n this.accumulableTable.accuracy = this.data.accuracy;\n this.accumulableTable.correctMeanRT = this.data.correctMeanRT;\n this.accumulableTable.errorMeanRT = this.data.errorMeanRT;\n this.accumulableTable.meanRT = this.data.meanRT;\n this.accumulableTable.correctSDRT = this.data.correctSDRT;\n this.accumulableTable.errorSDRT = this.data.errorSDRT;\n this.accumulableTable.sdRT = this.data.sdRT;\n }\n }\n}\n\ncustomElements.define('ddm-example-human', DDMExampleHuman);\n","\nimport DDMMath from '@decidables/accumulable-math';\n\nimport DDMExample from './ddm-example';\n\n/*\n DDMExampleInteractive element\n <ddm-example-interactive>\n*/\nexport default class DDMExampleInteractive extends DDMExample {\n static get properties() {\n return {\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n color: {\n attribute: 'color',\n type: String,\n reflect: true,\n },\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n t0: {\n attribute: 'nondecision-time',\n type: Number,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n this.trials = 10;\n this.colors = ['none', 'measure', 'outcome', 'all'];\n this.color = 'outcome';\n\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n\n this.accumulableControl = null;\n this.accumulableTable = null;\n this.ddmParameters = null;\n this.ddmModel = null;\n\n this.data = undefined;\n this.model = undefined;\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.accumulableControl = this.querySelector('accumulable-control');\n this.accumulableTable = this.querySelector('accumulable-table');\n this.ddmParameters = this.querySelector('ddm-parameters');\n this.ddmModel = this.querySelector('ddm-model');\n\n if (this.accumulableControl) {\n this.accumulableControl.addEventListener('accumulable-control-resample', (/* event */) => {\n this.ddmModel?.resample();\n this.requestUpdate();\n });\n this.accumulableControl.addEventListener('accumulable-control-trials', (event) => {\n this.trials = event.detail.trials;\n });\n this.accumulableControl.addEventListener('accumulable-control-color', (event) => {\n this.color = event.detail.color;\n });\n }\n\n if (this.ddmParameters) {\n this.ddmParameters.addEventListener('ddm-parameters-a', (event) => {\n this.a = event.detail.a;\n });\n this.ddmParameters.addEventListener('ddm-parameters-z', (event) => {\n this.z = event.detail.z;\n });\n this.ddmParameters.addEventListener('ddm-parameters-v', (event) => {\n this.v = event.detail.v;\n });\n this.ddmParameters.addEventListener('ddm-parameters-t0', (event) => {\n this.t0 = event.detail.t0;\n });\n }\n\n if (this.ddmModel) {\n this.ddmModel.addEventListener('ddm-model-a', (event) => {\n this.a = event.detail.a;\n });\n this.ddmModel.addEventListener('ddm-model-z', (event) => {\n this.z = event.detail.z;\n });\n this.ddmModel.addEventListener('ddm-model-v', (event) => {\n this.v = event.detail.v;\n });\n this.ddmModel.addEventListener('ddm-model-t0', (event) => {\n this.t0 = event.detail.t0;\n });\n this.ddmModel.addEventListener('ddm-model-output', (event) => {\n this.data = event.detail.data;\n this.model = event.detail.model;\n this.requestUpdate();\n });\n }\n\n this.requestUpdate();\n }\n\n update(changedProperties) {\n super.update(changedProperties);\n\n if (this.accumulableControl) {\n this.accumulableControl.trials = (this.accumulableControl.trials != null)\n ? this.trials\n : undefined;\n this.accumulableControl.color = (this.accumulableControl.color != null)\n ? this.color\n : undefined;\n }\n\n if (this.accumulableTable) {\n this.accumulableTable.color = this.color;\n }\n\n if (this.accumulableTable && this.data) {\n this.accumulableTable.correctCount = this.data.correctCount;\n this.accumulableTable.errorCount = this.data.errorCount;\n this.accumulableTable.nrCount = this.data.nrCount;\n this.accumulableTable.accuracy = this.data.accuracy;\n this.accumulableTable.correctMeanRT = this.data.correctMeanRT;\n this.accumulableTable.errorMeanRT = this.data.errorMeanRT;\n this.accumulableTable.meanRT = this.data.meanRT;\n this.accumulableTable.correctSDRT = this.data.correctSDRT;\n this.accumulableTable.errorSDRT = this.data.errorSDRT;\n this.accumulableTable.sdRT = this.data.sdRT;\n }\n\n if (this.ddmParameters) {\n this.ddmParameters.a = (this.ddmParameters.a != null)\n ? this.a\n : undefined;\n this.ddmParameters.z = (this.ddmParameters.z != null)\n ? this.z\n : undefined;\n this.ddmParameters.v = (this.ddmParameters.a != null)\n ? this.v\n : undefined;\n this.ddmParameters.t0 = (this.ddmParameters.t0 != null)\n ? this.t0\n : undefined;\n }\n\n if (this.ddmModel) {\n this.ddmModel.trials = this.trials;\n this.ddmModel.a = +this.a;\n this.ddmModel.z = +this.z;\n this.ddmModel.v = +this.v;\n this.ddmModel.t0 = +this.t0;\n }\n }\n}\n\ncustomElements.define('ddm-example-interactive', DDMExampleInteractive);\n","\nimport DDMMath from '@decidables/accumulable-math';\n\nimport DDMExample from './ddm-example';\n\n/*\n DDMExampleModel element\n <ddm-example-model>\n*/\nexport default class DDMExampleModel extends DDMExample {\n static get properties() {\n return {\n trials: {\n attribute: 'trials',\n type: Number,\n reflect: true,\n },\n duration: {\n attribute: 'duration',\n type: Number,\n reflect: true,\n },\n coherence: {\n attribute: 'coherence',\n type: Number,\n reflect: true,\n },\n color: {\n attribute: 'color',\n type: String,\n reflect: true,\n },\n\n a: {\n attribute: 'boundary-separation',\n type: Number,\n reflect: true,\n },\n z: {\n attribute: 'starting-point',\n type: Number,\n reflect: true,\n },\n v: {\n attribute: 'drift-rate',\n type: Number,\n reflect: true,\n },\n t0: {\n attribute: 'nondecision-time',\n type: Number,\n reflect: true,\n },\n };\n }\n\n constructor() {\n super();\n\n this.trials = 10;\n this.duration = 2000;\n this.coherence = 0.5;\n this.colors = ['none', 'measure', 'outcome', 'all'];\n this.color = 'outcome';\n\n this.a = DDMMath.a.DEFAULT;\n this.z = DDMMath.z.DEFAULT;\n this.v = DDMMath.v.DEFAULT;\n this.t0 = DDMMath.t0.DEFAULT;\n\n this.accumulableControl = null;\n this.rdkTask = null;\n this.ddmParameters = null;\n this.ddmModel = null;\n this.accumulableResponse = null;\n this.accumulableTable = null;\n\n this.trialCount = 0;\n this.signals = ['left', 'right']; // Possible values of 'signal'\n this.signal = undefined; // Signal for current trial\n this.data = undefined;\n this.model = undefined;\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.accumulableControl = this.querySelector('accumulable-control');\n this.rdkTask = this.querySelector('rdk-2afc-task');\n this.ddmParameters = this.querySelector('ddm-parameters');\n this.ddmModel = this.querySelector('ddm-model');\n this.accumulableResponse = this.querySelector('accumulable-response');\n this.accumulableTable = this.querySelector('accumulable-table');\n\n if (this.accumulableControl) {\n this.accumulableControl.addEventListener('accumulable-control-trials', (event) => {\n this.trials = event.detail.trials;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-duration', (event) => {\n this.duration = event.detail.duration;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-color', (event) => {\n this.color = event.detail.color;\n });\n\n this.accumulableControl.addEventListener('accumulable-control-run', (/* event */) => {\n if (this.rdkTask) {\n this.rdkTask.running = true;\n }\n\n if (this.ddmModel) {\n this.ddmModel.resumeTrial();\n }\n });\n\n this.accumulableControl.addEventListener('accumulable-control-pause', (/* event */) => {\n if (this.rdkTask) {\n this.rdkTask.running = false;\n }\n\n if (this.ddmModel) {\n this.ddmModel.pauseTrial();\n }\n });\n\n this.accumulableControl.addEventListener('accumulable-control-reset', (/* event */) => {\n this.trialCount = 0;\n this.signal = undefined;\n\n if (this.rdkTask) {\n this.rdkTask.reset();\n }\n\n if (this.ddmModel) {\n this.ddmModel.trials = this.trialCount;\n }\n\n if (this.accumulableResponse) {\n this.accumulableResponse.reset();\n }\n\n if (this.accumulableTable) {\n // this.accumulableTable.clear();\n }\n });\n }\n\n if (this.rdkTask) {\n this.rdkTask.addEventListener('rdk-trial-start', (event) => {\n this.signal = event.detail.signal;\n\n if (this.accumulableResponse) {\n this.accumulableResponse.start(\n event.detail.signal,\n event.detail.trial,\n );\n }\n\n if (this.ddmModel) {\n this.trialCount += 1;\n this.ddmModel.trial();\n }\n });\n\n this.rdkTask.addEventListener('rdk-trial-end', (/* event */) => {\n this.signal = undefined;\n\n if (this.accumulableResponse) {\n this.accumulableResponse.stop();\n }\n });\n\n this.rdkTask.addEventListener('rdk-block-end', (/* event */) => {\n if (this.accumulableControl) {\n this.accumulableControl.complete();\n }\n });\n }\n\n if (this.ddmParameters) {\n this.ddmParameters.addEventListener('ddm-parameters-a', (event) => {\n this.a = event.detail.a;\n });\n this.ddmParameters.addEventListener('ddm-parameters-z', (event) => {\n this.z = event.detail.z;\n });\n this.ddmParameters.addEventListener('ddm-parameters-v', (event) => {\n this.v = event.detail.v;\n });\n this.ddmParameters.addEventListener('ddm-parameters-t0', (event) => {\n this.t0 = event.detail.t0;\n });\n }\n\n if (this.ddmModel) {\n this.ddmModel.addEventListener('ddm-model-a', (event) => {\n this.a = event.detail.a;\n });\n this.ddmModel.addEventListener('ddm-model-z', (event) => {\n this.z = event.detail.z;\n });\n this.ddmModel.addEventListener('ddm-model-v', (event) => {\n this.v = event.detail.v;\n });\n this.ddmModel.addEventListener('ddm-model-t0', (event) => {\n this.t0 = event.detail.t0;\n });\n this.ddmModel.addEventListener('ddm-model-output', (event) => {\n this.data = event.detail.data;\n this.model = event.detail.model;\n this.requestUpdate();\n });\n\n this.ddmModel.addEventListener('accumulable-response', (event) => {\n if (this.accumulableResponse) {\n const response = (event.detail.outcome === 'correct')\n ? this.signal\n : (this.signal === 'left')\n ? 'right'\n : 'left';\n this.accumulableResponse.responded(response);\n }\n\n this.data = event.detail.data;\n this.model = event.detail.model;\n this.requestUpdate();\n });\n }\n\n this.requestUpdate();\n }\n\n update(changedProperties) {\n super.update(changedProperties);\n\n if (this.trialCount > this.trials) {\n this.trialCount = this.trials;\n }\n\n if (this.accumulableControl) {\n this.accumulableControl.trials = (this.accumulableControl.trials != null)\n ? this.trials\n : undefined;\n this.accumulableControl.duration = (this.accumulableControl.duration != null)\n ? this.duration\n : undefined;\n this.accumulableControl.coherence = (this.accumulableControl.coherence != null)\n ? this.coherence\n : undefined;\n this.accumulableControl.color = (this.accumulableControl.color != null)\n ? this.color\n : undefined;\n }\n\n if (this.rdkTask) {\n this.rdkTask.trials = this.trials;\n this.rdkTask.duration = this.duration;\n this.rdkTask.coherence = this.coherence;\n }\n\n if (this.ddmParameters) {\n this.ddmParameters.a = (this.ddmParameters.a != null)\n ? this.a\n : undefined;\n this.ddmParameters.z = (this.ddmParameters.z != null)\n ? this.z\n : undefined;\n this.ddmParameters.v = (this.ddmParameters.a != null)\n ? this.v\n : undefined;\n this.ddmParameters.t0 = (this.ddmParameters.t0 != null)\n ? this.t0\n : undefined;\n }\n\n if (this.ddmModel) {\n this.ddmModel.trials = this.trialCount;\n this.ddmModel.a = +this.a;\n this.ddmModel.z = +this.z;\n this.ddmModel.v = +this.v;\n this.ddmModel.t0 = +this.t0;\n }\n\n if (this.accumulableResponse) {\n this.accumulableResponse.trialTotal = this.trials;\n }\n\n if (this.accumulableTable) {\n this.accumulableTable.color = this.color;\n }\n\n if (this.accumulableTable && this.data) {\n this.accumulableTable.correctCount = this.data.correctCount;\n this.accumulableTable.errorCount = this.data.errorCount;\n this.accumulableTable.nrCount = this.data.nrCount;\n this.accumulableTable.accuracy = this.data.accuracy;\n this.accumulableTable.correctMeanRT = this.data.correctMeanRT;\n this.accumulableTable.errorMeanRT = this.data.errorMeanRT;\n this.accumulableTable.meanRT = this.data.meanRT;\n this.accumulableTable.correctSDRT = this.data.correctSDRT;\n this.accumulableTable.errorSDRT = this.data.errorSDRT;\n this.accumulableTable.sdRT = this.data.sdRT;\n }\n }\n}\n\ncustomElements.define('ddm-example-model', DDMExampleModel);\n"],"names":["t","globalThis","e","ShadowRoot","ShadyCSS","nativeShadow","Document","prototype","CSSStyleSheet","s","Symbol","o","WeakMap","n$2","constructor","this","_$cssResult$","Error","cssText","styleSheet","length","get","replaceSync","set","toString","r","n","i","css","reduce","c","cssRules","is","defineProperty","getOwnPropertyDescriptor","h","getOwnPropertyNames","getOwnPropertySymbols","getPrototypeOf","Object","a","trustedTypes","l","emptyScript","p","reactiveElementPolyfillSupport","d","JSCompiler_renameProperty","u","toAttribute","Boolean","Array","JSON","stringify","fromAttribute","Number","parse","f","notEqual","b","attribute","type","String","converter","reflect","useDefault","hasChanged","metadata","litPropertyMetadata","HTMLElement","addInitializer","_$Ei","push","observedAttributes","finalize","_$Eh","keys","createProperty","state","hasOwnProperty","create","wrapped","elementProperties","noAccessor","getPropertyDescriptor","call","requestUpdate","configurable","enumerable","getPropertyOptions","Map","finalized","properties","_$Eu","elementStyles","finalizeStyles","styles","isArray","Set","flat","reverse","unshift","toLowerCase","super","_$Ep","isUpdatePending","hasUpdated","_$Em","_$Ev","_$ES","Promise","enableUpdating","_$AL","_$E_","forEach","addController","_$EO","add","renderRoot","isConnected","hostConnected","removeController","delete","size","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","adoptStyles","adoptedStyleSheets","map","document","createElement","litNonce","setAttribute","textContent","appendChild","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$ET","removeAttribute","_$Ej","hasAttribute","C","_$EP","has","_$Eq","reject","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","update","_$EM","_$AE","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","y","mode","ReactiveElement","reactiveElementVersions","createPolicy","createHTML","Math","random","toFixed","slice","createMarker","createComment","v","_","m","RegExp","g","$","_$litType$","strings","values","x","T","for","E","A","createTreeWalker","P","V","getTemplateHtml","lastIndex","exec","test","startsWith","N","parts","el","currentNode","content","firstChild","replaceWith","childNodes","nextNode","nodeType","hasAttributes","getAttributeNames","endsWith","getAttribute","split","index","name","ctor","H","I","L","k","tagName","append","data","indexOf","innerHTML","S","_$Co","_$Cl","_$litDirective$","_$AO","_$AT","_$AS","M","_$AV","_$AN","_$AD","_$AM","parentNode","_$AU","creationScope","importNode","R","nextSibling","z","_$AI","_$Cv","_$AH","_$AA","_$AB","options","startNode","endNode","_$AR","iterator","O","insertBefore","createTextNode","_$AC","_$AP","remove","setConnected","element","fill","j","arguments","toggleAttribute","capture","once","passive","removeEventListener","addEventListener","handleEvent","host","litHtmlPolyfillSupport","litHtmlVersions","B","render","renderBefore","_$litPart$","renderOptions","_$Do","_$litElement$","litElementHydrateSupport","LitElement","litElementPolyfillSupport","ascending","NaN","descending","bisector","compare1","compare2","delta","left","lo","hi","mid","zero","center","right","litElementVersions","bisectRight","e10","sqrt","e5","e2","tickSpec","start","stop","count","step","max","power","floor","log10","error","pow","factor","i1","i2","inc","round","tickIncrement","identity$3","epsilon","translateX","translateY","number","scale","offset","bandwidth","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","window","devicePixelRatio","transform","context","ticks","apply","domain","format","identity","spacing","range","range0","range1","position","copy","selection","path","selectAll","tick","order","tickExit","exit","tickEnter","enter","attr","line","select","text","merge","insert","transition","isFinite","filter","each","from","tickSize","axisLeft","noop","value","dispatch","Dispatch","callback","concat","on","typename","types","trim","that","args","xhtml","namespaces","svg","xlink","xml","xmlns","namespace","prefix","space","local","creatorInherit","ownerDocument","uri","namespaceURI","documentElement","createElementNS","creatorFixed","fullname","creator","none","selector","querySelector","empty","selectorAll","querySelectorAll","arrayAll","array","matcher","matches","childMatcher","node","find","childFirst","firstElementChild","children","sparse","EnterNode","parent","datum","_next","_parent","__data__","bindIndex","group","groupLength","dataLength","bindKey","key","keyValue","nodeByKeyValue","keyValues","arraylike","attrRemove","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","defaultView","styleRemove","style","removeProperty","styleConstant","priority","setProperty","styleFunction","styleValue","getPropertyValue","getComputedStyle","propertyRemove","propertyConstant","propertyFunction","classArray","string","classList","ClassList","_node","_names","classedAdd","names","list","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","lower","previousSibling","constantNull","removeChild","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","onRemove","__on","listener","onAdd","event","contextListener","dispatchEvent","params","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","child","next","join","splice","contains","root","Selection","groups","parents","_groups","_parents","subgroups","subnode","subgroup","selectChild","match","childFind","selectChildren","childrenFilter","bind","constant","enterGroup","updateGroup","previous","i0","_enter","_exit","onenter","onupdate","onexit","groups0","groups1","m0","m1","min","merges","group0","group1","compareDocumentPosition","sort","compare","compareNode","sortgroups","sortgroup","nodes","getAttributeNS","property","classed","html","before","deep","typenames","parseTypenames","nextId","Local","pointer","sourceEvent","undefined","currentTarget","ownerSVGElement","createSVGPoint","point","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","rect","clientLeft","top","clientTop","pageX","pageY","id","nonpassive","nonpassivecapture","nopropagation","stopImmediatePropagation","noevent","preventDefault","constant$2","DragEvent","subject","target","identifier","active","dx","dy","defineProperties","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","navigator","maxTouchPoints","drag","mousedownx","mousedowny","mousemoving","touchending","container","touchable","gestures","listeners","clickDistance2","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","view","mousemoved","mouseupped","__noselect","MozUserSelect","nodrag","mouse","noclick","setTimeout","yesdrag","touches","changedTouches","clearTimeout","touch","p0","clickDistance","define","factory","extend","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","parseInt","rgbn","Rgb","rgba","hsla","opacity","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","isNaN","Hsl","hslConvert","clamph","clampt","hsl2rgb","m2","channels","assign","displayable","formatHex8","formatHsl","clamp","constant$1","gamma","nogamma","exponential","linear","interpolateRgb","rgbGamma","end","colorRgb","numberArray","genericArray","nb","na","date","Date","setTime","interpolateNumber","object","reA","reB","source","interpolateString","am","bm","bs","bi","q","one","interpolate$1","ArrayBuffer","isView","DataView","isNumberArray","valueOf","interpolateRound","svgNode","degrees","PI","rotate","skewX","scaleX","scaleY","decompose","atan2","atan","interpolateTransform","pxComma","pxParen","degParen","pop","xa","ya","xb","yb","translate","taskHead","taskTail","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","interpolateTransformSvg","baseVal","consolidate","matrix","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","setFrame","requestAnimationFrame","clearNow","Timer","_call","_time","timer","delay","time","restart","wake","timerFlush","t0","t2","t1","Infinity","sleep","nap","poke","clearInterval","setInterval","elapsed","TypeError","emptyOn","emptyTween","schedule","timing","schedules","__transition","self","tween","duration","ease","init","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","interpolate","value1","string00","interpolate0","string1","string0","string10","attrTweenNS","attrInterpolateNS","_value","attrTween","attrInterpolate","delayFunction","delayConstant","durationFunction","durationConstant","Transition","_name","newId","selection_prototype","inherit","id0","id1","on0","on1","sit","every","onFunction","styleTween","styleNull","listener0","styleMaybeRemove","styleInterpolate","textTween","textInterpolate","removeFunction","easeConstant","easeVarying","resolve","cancel","interrupt","cubicOut","defaultTiming","pi","tau","tauEpsilon","Path","digits","_x0","_y0","_x1","_y1","_append","appendRound","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","abs","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","cos","sin","cw","da","w","formatDecimalParts","toExponential","coefficient","exponent","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","align","sign","symbol","width","comma","precision","formatRounded","formatTypes","%","toLocaleString","replace","toPrecision","X","toUpperCase","identity$1","locale","formatPrefix","prefixes","formatLocale","grouping","thousands","substring","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","charCodeAt","padding","defaultSource","uniform","sourceRandomUniform","randomUniform","normal","sourceRandomNormal","randomNormal","mu","sigma","log","eps","lcg","seed","initRange","unit","normalize","bimap","d0","d1","r0","r1","polymap","bisect","transformer","untransform","unknown","piecewise","output","input","interpolateValue","rescale","clamper","invert","rangeRound","tickStep","precisionPrefix","precisionRound","precisionFixed","linearish","nice","prestep","maxIter","ceil","Linear","_context","curveLinear","defined","curve","shape","RangeError","withPath","buffer","defined0","lineStart","lineEnd","pointX","pointY","Transform","areaStart","_line","areaEnd","_point","applyX","applyY","location","invertX","invertY","rescaleX","rescaleY","DecidablesElement","getComputedStyleValue","changedProperties","d3","greys","light75","light50","light25","dark25","dark50","dark75","shadows","elevations","baselineColor","baselineColorString","inverseBaselineColor","inverseBaselineColorString","opacityUmbra","opacityPenumbra","opacityAmbient","opacityBoost","mapUmbra","mapPenumbra","mapAmbient","cssBoxShadow","elevation","umbraO","penumbraO","ambientO","umbraC","penumbraC","ambientC","umbraM","penumbraM","ambientM","svgFilters","filters","unsafeCSS","customElements","disabled","nonlinear","rangeMax","rangeMin","rangeStep","rangeValue","toRange","fromRange","nonlinearRange","rangeChanged","rangeInputted","spinnerInputted","ifDefined","inputted","checked","changed","DecidablesMixinResizeable","superClass","height","rem","getDimensions","parseFloat","resizeObserver","ResizeObserver","observe","unobserve","AccumulableElement","interactive","colors","lights","acc","cur","darks","AccumulableControl","trials","resample","coherence","run","pause","reset","states","setTrials","doResample","setDuration","setCoherence","chooseColor","doRun","doPause","doReset","complete","DDMMath","static","DEFAULT","MIN","MAX","STEP","JUMP","trials2stats","stats","sums","accumulator","trial","outcome","correctCount","correctRTSum","rt","errorCount","errorRTSum","nrCount","accuracy","correctMeanRT","errorMeanRT","meanRT","sums2","ss","correctSS","errorSS","correctSDRT","errorSDRT","sdRT","azv2pE","zPrime","exp","azv2pC","azvt02m","azv2sd","Z","variance","azvt02mE","phi","azv2sdE","azvt02mC","azv2sdC","tazv2gE","base","term","sum","tazv2gC","data2ez","pC","sd","logit","vrt","mrt","s2","mdt","data2ez2","AccumulableResponse","feedback","payoff","correctPayoff","errorPayoff","nrPayoff","trialCount","trialTotal","payoffs","signals","signal","responses","response","outcomes","startTime","alignState","trialPayoff","totalPayoff","responded","keydown","payoffFormatter","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","payoffFormat","formatToParts","part","AccumulableTable","numeric","summary","sendEvent","correctCountInput","errorCountInput","accuracyInput","correctMeanRTInput","errorMeanRTInput","meanRTInput","correctSDRTInput","errorSDRTInput","sdRTInput","DDMFit","observed","predicted","working","queued","worker","DDMFitWorker","onmessage","fit","postMessage","clear","structuredClone","DDMParameters","setBoundarySeparation","setStartingPoint","setDriftRate","setNondecisionTime","DDMModel","measures","means","sds","human","firstUpdate","evidence","density","bounds","startingPoint","model","animate","paused","pauseTrial","resumeTrial","alignPath","drift","at","alignCorrectDistribution","proportionCorrect","dist","alignErrorDistribution","proportionError","upper","dataStats","correctDist","errorDist","hostWidth","hostHeight","elementWidth","elementHeight","margin","gapHeight","evidenceHeight","densityHeight","gapWidth","timeWidth","accuracyWidth","transitionDuration","timeScale","evidenceScale","correctDensityScale","errorDensityScale","accuracyScale","dragT0z","shift","shiftKey","dragDrift","dragBoundary","boundary","evidenceLine","correctDensityLine","errorDensityLine","svgUpdate","svgEnter","svgMarkers","measureArrow","parameter","measureCappedArrow","marker","sdCap","gradient","svgMerge","densityPlotUpdate","densityScale","densityLine","alignDistribution","evidencePlotEnter","densityPlotEnter","accuracyPlotEnter","evidencePlotMerge","densityPlotMerge","accuracyPlotMerge","evidenceUnderlayerEnter","densityUnderlayerEnter","accuracyUnderlayerEnter","evidenceUnderlayerMerge","densityUnderlayerMerge","accuracyUnderlayerMerge","densityContentEnter","evidenceContentMerge","densityContentMerge","accuracyContentMerge","evidenceOverlayerMerge","densityOverlayerMerge","timeScaleMerge","timeTitleEnter","evidenceScaleMerge","densityScaleMerge","accuracyScaleMerge","evidenceScaleTransition","densityScaleTransition","elements","accuracyScaleTransition","evidenceTitleEnter","densityTitleEnter","accuracyTitleEnter","pathUpdate","rtLabel","pathEnter","myRtLabel","bbox","getBBox","pathMerge","interpolateA","interpolateZ","interpolateV","interpolateT0","pathMergeNewActive","easeTime","scaleIn","scaleOutGenerator","easeFunction","interpolator","parentElement","pathMergeNewPaused","distEnter","rtUpdate","rtEnter","rtMerge","accuracyUpdate","accuracyEnter","dataAccuracyUpdate","dataAccuracyEnter","dataAccuracyMerge","correct","boundaryUpdate","bound","boundaryEnter","boundaryMerge","includes","driftUpdate","driftEnter","driftMerge","scaleRatio","t0zUpdate","t0zEnter","t0zMerge","aUpdate","aEnter","aLabel","aShort","markerCorrection","aMerge","zUpdate","zEnter","zLabel","zShort","zMerge","vUpdate","vEnter","vLabel","driftHypotenuse","driftAngle","driftX","driftY","driftCorrection","driftAngleCorrected","driftStartX","driftStartY","driftEndX","driftEndY","vShort","vMerge","t0Update","t0Enter","t0Label","t0Short","t0Merge","meanUpdate","meanEnter","dataMeanUpdate","dataMeanEnter","sdUpdate","sdEnter","dataSDUpdate","dataSDEnter","RDK2AFCTask","probability","wait","iti","running","lifetime","speed","COHERENT","RANDOM","dots","baseTime","pauseTime","lastTime","LEFT","RIGHT","currentDirection","runner","xScale","yScale","elementSize","plotEnter","plotMerge","underlayerEnter","underlayerMerge","overlayerEnter","overlayerMerge","total","_restart","dotUpdate","realTime","currentTime","elapsedTime","frameTime","newTrial","newDot","dot","direction","birth","angle","radius","directionR","fixationUpdate","fixationEnter","queryUpdate","DDMEquation","DDMEquationAZV2PC","aInput","zInput","vInput","equation","DDMEquationAZVT02M","t0Input","DDMExample","DDMExampleHuman","accumulableControl","rdkTask","accumulableResponse","accumulableTable","ddmParameters","ddmModel","ddmFit","DDMExampleInteractive","DDMExampleModel"],"mappings":"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","x_google_ignoreList":[0,1,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,149,165]}