@ixfx/components 0.1.5 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/index.d.ts +105 -37
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +477 -156
- package/bundle/index.js.map +1 -1
- package/dist/charts/plot.d.ts +104 -36
- package/dist/charts/plot.d.ts.map +1 -1
- package/dist/charts/plot.js +628 -175
- package/dist/charts/plot.js.map +1 -1
- package/package.json +13 -13
package/bundle/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["t","e","s","o","n","r","i","S","c","i","e","h","r","o","n","a","c","l","p","d","t","s","u","f","b","t","i","s","e","h","o","n","r","l","c","u","d","f","v","m","p","y","a","x","M","s","t","r","e","o","e","o","t","o","t","e","r","n","i","s","e","t","c","o","e","n","r","s","c","t","piPi","arc: CircleArc","anchor: CircleArcAnchor","arc: CircleArcDefined","t: number","t","track: CircleArcDefined","startAngle: number","endAngle: number","cw: boolean","part: ArcPart","t","o","i","n","e","c","f","r","l","d","u","h","t","e","i","s","i","t","e","o","c","h","n","r","e","o","n","s","i","t","el: HTMLElement","selectAll: boolean","createRef","#onKeyDown","#onBlur","data: SvgEditLabelData","ref","#onValueClick","x","y","#onEditMode","enabled: boolean","w","h","#blurBound","#keyDownBound","#renderEdit","#renderLabel","event: Event","event: KeyboardEvent","focusContentEditable","c","r","d","i","DialElement","LitElement","createRef","#onPointerDown","#onPointerDrag","#onDragStop","#editableLabel","f","#setValue","vars: Variables","arc: CircleArc.CircleArcDefined","x","y","textAnchor: SvgEditLabelData[ 'anchor' ]","value: number","part: CircleArc.ArcPart","arcSvgBits: string[]","arcPart","d","s","radius: number","fill: string","c","#computeArc","circlePre: CircleArc.CircleArc","#getBipolarValue","#getUnipolarValue","terminators: TemplateResult[]","#renderPoints","#computeTextLabelPosition","#onPointerDownBound","#renderTrackArc","#renderKnob","#renderValueArc","_event: PointerEvent","#onPointerDragBound","#onDragStopBound","event: PointerEvent","r","_changedProperties: PropertyValues","event: WheelEvent","amount: number","event: KeyboardEvent","fn: (value: number) => string","#valueToLabel","property","customElement","SelectHorizontalElement","LitElement","property","customElement","o","t","f","i","n","CrumbNavigationElement","LitElement","t","event: MouseEvent","n","#setSelected","node: Trees.TreeNode<CrumbNavigationPart>","#previousSelectionKey","c","_changedProperties: PropertyValues","hsiElement: HTMLElement","ulElement: HTMLElement","btnExpand: HTMLElement","#scrollToValue","li: HTMLLIElement","l","#onPartClick","p","v","#renderFinalOption","join","s","#renderOptions","preselectKey: string","#onSubPartClick","property","customElement","CrumbNavElement","LitElement","_changedProperties: PropertyValues","path: string","segments: CrumbNavigation2Part[]","s","s: CrumbNavigation2Part","i: number","i","event: MouseEvent","event: KeyboardEvent","property","customElement","TabListItemElement","LitElement","property","customElement","TabListElement","LitElement","#onKeyUp","#onSlotClick","event: KeyboardEvent","#selectPrevious","#selectNext","#isSelected","el: HTMLElement","v","prev: HTMLElement | undefined","event: MouseEvent","t","property","queryAssignedElements","customElement","TabPanelElement","LitElement","customElement","TabPanelsElement","LitElement","#isSelected","el: TabPanelElement","el: TabListElement","t","id: string","#unselect","#select","queryAssignedElements","customElement","SplitLayoutElement","LitElement","#onResizeHandleDown","event: PointerEvent","#elementBounds","#onResizeHandleUp","#onResizeHandleMove","y","x","property","customElement","PlotElement","LitElement","createRef","#series","query: string","name: string","s","ref","#canvas","c","#drawing","_changedProperties: PropertyValues","#setupCanvas","#legendColour","value: number","values: number[]","value: object","p","_series: string","#hue","d","globalScaler: ((v: number) => number) | undefined","cl: RectPositioned","d: DrawingHelper","x","y","m","data: number[]","cp: Rect","colour: string","c: CanvasHelper","plotHeight: number","axisYwidth: number","padding: number","_c: CanvasHelper","maxWidth: number","#swatchSize","property","customElement","colour: Colour.Colourish","plot: PlotElement","scaler: (v: number) => number","v","x: number","y: number","x","y","x: unknown","y: unknown","object: unknown","sortStyle: SortSyles","index: number","values: readonly KeyValue[]","s:KeyValue[]","a:KeyValue","b:KeyValue","a","b","s","el: HistogramVis","sortStyle: `value` | `value-reverse` | `key` | `key-reverse`","#sorter","data: readonly (readonly [key: string, count: number])[]","e","s","t","r","l","o","i","c","d","p","a","h","v","m","y","x","j","k","w","n","f","object: unknown","o","HistogramVis","LitElement","bar: Bar","index: number","_totalBars: number","d","h","repeat","b","property","customElement"],"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/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/base.js","../node_modules/@lit/reactive-element/decorators/query-assigned-elements.js","../src/util/circle-arc.ts","../node_modules/lit-html/directive-helpers.js","../node_modules/lit-html/directive.js","../node_modules/lit-html/async-directive.js","../node_modules/lit-html/directives/ref.js","../src/util/content-editable.ts","../src/util/svg-editable-text.ts","../node_modules/@oxc-project/runtime/src/helpers/esm/decorate.js","../src/dial.ts","../src/selecthorizontal.ts","../node_modules/lit-html/directives/join.js","../src/crumb-navigation.ts","../src/crumb-nav.ts","../src/tabs/tab-list-item.ts","../src/tabs/tab-list.ts","../src/tabs/tab-panel.ts","../src/tabs/tab-panels.ts","../src/split-layout/split-layout.ts","../src/charts/plot.ts","../src/util/compare.ts","../src/util/key-value.ts","../src/charts/frequency-histogram-plot.ts","../node_modules/lit-html/directives/repeat.js","../src/charts/histogram-vis.ts","../src/index.ts"],"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","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{defaultConverter as t,notEqual as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function o(o){return(e,n)=>{const{slot:r,selector:s}=o??{},c=\"slot\"+(r?`[name=${r}]`:\":not([name])\");return t(e,n,{get(){const t=this.renderRoot?.querySelector(c),e=t?.assignedElements(o)??[];return void 0===s?e:e.filter((t=>t.matches(s)))}})}}export{o as queryAssignedElements};\n//# sourceMappingURL=query-assigned-elements.js.map\n","import { Circles, radianToDegree, radianArc } from \"ixfx/geometry.js\";\nimport type { Point } from \"ixfx/geometry.js\";\n\nconst piPi = Math.PI * 2;\n//const halfPi = Math.PI / 2;\n\nexport type CircleArcAnchor = `south` | `south-east` | `east` | `north`;\n\nexport type CircleArc = {\n radius: number\n anchor?: CircleArcAnchor,\n rangeRadian?: number\n x: number,\n y: number\n}\n\nexport type CircleArcDefined = CircleArc & {\n startPoint: Point,\n startAngle: number,\n endPoint: Point,\n endAngle: number,\n midPoint: Point,\n midAngle: number,\n rotation: number\n rangeRadian: number\n anchor: CircleArcAnchor\n invert: boolean\n}\n\nexport const precompute = (arc: CircleArc): CircleArcDefined => {\n let rotation = 0;\n const anchor: CircleArcAnchor = arc.anchor ?? `south`;\n const rangeRadian = arc.rangeRadian ?? radianToDegree(300);\n let invert = false;\n switch (anchor) {\n case `east`:\n break;\n case `south-east`:\n rotation = -Math.PI / 4; // 0 at south-east\n break;\n case `north`:\n rotation = Math.PI / 2;\n invert = true;\n break;\n case `south`:\n default:\n //90 - (range / 2);\n rotation = (Math.PI * 3) / 2\n }\n const rangeRemainder = piPi - rangeRadian;\n let startAngle = rotation - (rangeRemainder / 2);\n let endAngle = rotation + (rangeRemainder / 2);\n const midAngle = rotation - Math.PI;\n\n if (invert) {\n const oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n\n //console.log(`start: ${ startAngle } end:${ endAngle } range: ${ rangeRadian } remain: ${ rangeRemainder }`);\n const startPoint = Circles.pointOnPerimeter(arc, startAngle);\n const endPoint = Circles.pointOnPerimeter(arc, endAngle);\n const midPoint = Circles.pointOnPerimeter(arc, midAngle);\n return {\n ...arc,\n anchor,\n rangeRadian,\n midPoint, midAngle,\n startPoint, endPoint, rotation,\n startAngle, endAngle, invert\n }\n}\n\nexport const interpolatePoint = (arc: CircleArcDefined, t: number): Point => {\n const angle = arc.rangeRadian * t;\n return Circles.pointOnPerimeter(arc, arc.startAngle - angle);\n}\n\n\nexport type ArcPart = {\n startPoint: Point\n startAngle: number\n endPoint: Point\n endAngle: number\n range: number\n}\nexport const arcPart = (track: CircleArcDefined, startAngle: number, endAngle: number, cw: boolean): ArcPart => {\n const startPoint = Circles.pointOnPerimeter(track, startAngle);\n const endPoint = Circles.pointOnPerimeter(track, endAngle);\n return {\n startPoint, endPoint, startAngle, endAngle,\n range: radianArc(startAngle, endAngle, cw)\n }\n\n // const startPoint = start ? interpolatePoint(arc, start) : arc.startPoint;\n // const endPoint = end ? interpolatePoint(arc, end) : arc.endPoint;\n // return {\n // ...arc,\n // startPoint, endPoint\n // }\n}\n\nexport const partToSvg = (arc: CircleArc, part: ArcPart, largeArc = true, clockwise = true) => {\n const rotation = 0\n return [\n `M ${ part.startPoint.x } ${ part.startPoint.y }`,\n `A ${ arc.radius } ${ arc.radius } ${ rotation } ${ largeArc ? `1` : `0` } ${ clockwise ? `1` : `0` } ${ part.endPoint.x } ${ part.endPoint.y }`\n ]\n}\nexport const toSvg = (arc: CircleArcDefined, largeArc = true, clockwise = true) => {\n const rotation = 0\n return [\n `M ${ arc.startPoint.x } ${ arc.startPoint.y }`,\n `A ${ arc.radius } ${ arc.radius } ${ rotation } ${ largeArc ? `1` : `0` } ${ clockwise ? `1` : `0` } ${ arc.endPoint.x } ${ arc.endPoint.y }`\n ]\n}","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,n={HTML:1,SVG:2,MATHML:3},e=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,l=o=>null!=o?._$litType$?.h,d=o=>void 0!==o?._$litDirective$,c=o=>o?._$litDirective$,f=o=>void 0===o.strings,r=()=>document.createComment(\"\"),s=(o,i,n)=>{const e=o._$AA.parentNode,l=void 0===i?o._$AB:i._$AA;if(void 0===n){const i=e.insertBefore(r(),l),d=e.insertBefore(r(),l);n=new t(i,d,o,o.options)}else{const t=n._$AB.nextSibling,i=n._$AM,d=i!==o;if(d){let t;n._$AQ?.(o),n._$AM=o,void 0!==n._$AP&&(t=o._$AU)!==i._$AU&&n._$AP(t)}if(t!==l||d){let o=n._$AA;for(;o!==t;){const t=o.nextSibling;e.insertBefore(o,l),o=t}}}return n},v=(o,t,i=o)=>(o._$AI(t,i),o),u={},m=(o,t=u)=>o._$AH=t,p=o=>o._$AH,M=o=>{o._$AR(),o._$AA.remove()},h=o=>{o._$AR()};export{n as TemplateResultType,h as clearPart,p as getCommittedValue,c as getDirectiveClass,s as insertPart,l as isCompiledTemplateResult,d as isDirectiveResult,i as isPrimitive,f as isSingleExpression,e as isTemplateResult,M as removePart,v as setChildPartValue,m as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{isSingleExpression as i}from\"./directive-helpers.js\";import{Directive as t,PartType as e}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=(i,t)=>{const e=i._$AN;if(void 0===e)return!1;for(const i of e)i._$AO?.(t,!1),s(i,t);return!0},o=i=>{let t,e;do{if(void 0===(t=i._$AM))break;e=t._$AN,e.delete(i),i=t}while(0===e?.size)},r=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(void 0===e)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),c(t)}};function h(i){void 0!==this._$AN?(o(this),this._$AM=i,r(this)):this._$AM=i}function n(i,t=!1,e=0){const r=this._$AH,h=this._$AN;if(void 0!==h&&0!==h.size)if(t)if(Array.isArray(r))for(let i=e;i<r.length;i++)s(r[i],!1),o(r[i]);else null!=r&&(s(r,!1),o(r));else s(this,i)}const c=i=>{i.type==e.CHILD&&(i._$AP??=n,i._$AQ??=h)};class f extends t{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,e){super._$AT(i,t,e),r(this),this.isConnected=i._$AU}_$AO(i,t=!0){i!==this.isConnected&&(this.isConnected=i,i?this.reconnected?.():this.disconnected?.()),t&&(s(this,i),o(this))}setValue(t){if(i(this._$Ct))this._$Ct._$AI(t,this);else{const i=[...this._$Ct._$AH];i[this._$Ci]=t,this._$Ct._$AI(i,this,0)}}disconnected(){}reconnected(){}}export{f as AsyncDirective,t as Directive,e as PartType};\n//# sourceMappingURL=async-directive.js.map\n","import{nothing as t}from\"../lit-html.js\";import{AsyncDirective as i}from\"../async-directive.js\";import{directive as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=()=>new h;class h{}const o=new WeakMap,n=s(class extends i{render(i){return t}update(i,[s]){const e=s!==this.G;return e&&void 0!==this.G&&this.rt(void 0),(e||this.lt!==this.ct)&&(this.G=s,this.ht=i.options?.host,this.rt(this.ct=i.element)),t}rt(t){if(this.isConnected||(t=void 0),\"function\"==typeof this.G){const i=this.ht??globalThis;let s=o.get(i);void 0===s&&(s=new WeakMap,o.set(i,s)),void 0!==s.get(this.G)&&this.G.call(this.ht,void 0),s.set(this.G,t),void 0!==t&&this.G.call(this.ht,t)}else this.G.value=t}get lt(){return\"function\"==typeof this.G?o.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});export{e as createRef,n as ref};\n//# sourceMappingURL=ref.js.map\n","export const focus = (el: HTMLElement, selectAll: boolean) => {\n el.focus();\n if (selectAll) {\n const range = document.createRange();\n range.selectNodeContents(el);\n const sel = window.getSelection();\n if (sel) {\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n}\n\n","import { css, svg } from \"lit\";\nimport { createRef, type Ref, ref } from 'lit/directives/ref.js';\nimport { focus as focusContentEditable } from \"./content-editable.js\";\n\nexport type SvgEditLabelData = {\n editMode: boolean\n hideValue: boolean\n x: number\n y: number\n anchor: `start` | `middle` | `end`\n displayValue: number | string\n editValue: number | string\n fill: string\n}\n\nexport class SvgEditLabel extends EventTarget {\n textRef: Ref<SVGTextElement> = createRef();\n editorRef: Ref<HTMLDivElement> = createRef();\n\n #keyDownBound = this.#onKeyDown.bind(this);\n #blurBound = this.#onBlur.bind(this);\n\n onEditMode?: (enabled: boolean, source: SvgEditLabel) => void;\n\n //valueToLabel?: (value: any) => string;\n onInput?: (value: string) => void;\n\n #renderLabel(data: SvgEditLabelData) {\n const { fill, x, y, displayValue, anchor, hideValue } = data;\n if (hideValue) {\n return svg``;\n }\n return svg`<text ${ ref(this.textRef) } id=\"label-value\" @click=${ () => this.#onValueClick() } fill=${ fill } text-anchor=${ anchor } x=${ x } y=${ y }>${ displayValue }</text>`\n }\n\n #onValueClick() {\n this.#onEditMode(true);\n }\n\n #onEditMode(enabled: boolean) {\n if (this.onEditMode !== undefined) this.onEditMode(enabled, this);\n this.dispatchEvent(new CustomEvent(`edit-mode`, {\n detail: {\n enabled: enabled\n }\n }));\n }\n\n #renderEdit(data: SvgEditLabelData) {\n let { anchor, editValue, x, y } = data;\n let w = 5;\n let h = 5;\n if (this.textRef.value) {\n const bbox = this.textRef.value.getBBox();\n x = x - bbox.width / 2;\n y = y - bbox.height + 4.5;\n w = bbox.width + 5;\n h = bbox.height;\n }\n\n return svg`\n <foreignObject text-anchor=${ anchor } width=${ w } height=${ h } x=${ x } y=${ y }>\n <div ${ ref(this.editorRef) } @blur=${ this.#blurBound } @keydown=${ this.#keyDownBound } xmlns=\"http://www.w3.org/1999/xhtml\" tab-index=0 contentEditable=true>${ editValue }</div>\n </foreignObject>`\n }\n\n render(data: SvgEditLabelData) {\n if (data.editMode) {\n return this.#renderEdit(data);\n } else {\n return this.#renderLabel(data);\n }\n }\n\n #onBlur(event: Event): void {\n const rawValue = (event.target as HTMLDivElement).innerText;\n if (this.onInput) {\n this.onInput(rawValue);\n }\n this.#onEditMode(false);\n }\n\n #onKeyDown(event: KeyboardEvent) {\n const key = event.key;\n //const shift = event.shiftKey;\n if (key === `Escape`) {\n this.#onEditMode(false)\n return;\n } else if (key === `Enter`) {\n const rawValue = (event.target as HTMLDivElement).innerText;\n if (this.onInput) {\n this.onInput(rawValue);\n }\n this.#onEditMode(false);\n return;\n }\n }\n\n onUpdated() {\n if (this.editorRef.value) {\n focusContentEditable(this.editorRef.value, true);\n }\n }\n\n\n\n // protected override updated(_changedProperties: PropertyValues): void {\n // if (!this.shadowRoot) return;\n // const labelSvgEl = this.shadowRoot.querySelector(`#label-value`);\n // if (labelSvgEl) {\n // this.#textLabelBbox = (labelSvgEl as SVGTextElement).getBBox();\n // }\n\n // if (this.editMode) {\n // const labelValueEditor = this.shadowRoot.querySelector(`svg>foreignObject>div`);\n // if (labelValueEditor) {\n // focus(labelValueEditor as HTMLDivElement, true);\n // } else {\n // console.warn(`Label editor not found`);\n // }\n\n // }\n // //this.#textValueScreenCords = this.#SVGToScreen(this.#textValueSvgCoords);\n // }\n\n static styles = css`\n :host {\n display: inline-block;\n --value-label-color: unset;\n }\n input {\n font:unset;\n position:absolute;\n background:unset;\n }\n \n foreignObject>div {\n width:-webkit-fill-available;\n background:red;\n margin: 0;\n padding: 0;\n line-height: unset;\n }\n`\n}\n","// Copy from https://github.com/microsoft/TypeScript/blob/d85767abfd83880cea17cea70f9913e9c4496dcc/src/compiler/factory/emitHelpers.ts#L730-L742\n\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r =\n c < 3\n ? target\n : desc === null\n ? (desc = Object.getOwnPropertyDescriptor(target, key))\n : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n r = Reflect.decorate(decorators, target, key, desc);\n else\n for (var i = decorators.length - 1; i >= 0; i--)\n if ((d = decorators[i]))\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport { __decorate as default };\n","/* eslint-disable @typescript-eslint/unbound-method */\nimport { LitElement, html, css, svg, type TemplateResult, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { degreeToRadian, Points, radiansSum, radianArc } from 'ixfx/geometry.js';\nimport * as Numbers from 'ixfx/numbers.js';\nimport { getCssVariablesWithFallback } from 'ixfx/dom.js';\nimport * as CircleArc from './util/circle-arc.js';\nimport { SvgEditLabel, type SvgEditLabelData } from \"./util/svg-editable-text.js\";\nimport { createRef, type Ref } from \"lit/directives/ref.js\";\n\nexport type LabelPosition = `edge` | `inner` | `below`\nexport type ValueToLabelFormat = (value: number) => string;\nexport type NeedleStyle = `none` | `to-track` | `to-knob`;\n\ntype Variables = ReturnType<DialElement[ 'resolveVariables' ]>;\nconst piPi = Math.PI * 2;\n/**\n * Numeric DOM attributes\n * * rangeAngle: range of dial in degrees (default: 300)\n * * value, min, max, step, stepFine\n * * radius: max radius of dial (default: 0.5)\n * * textRelativeHeight: how much vertical space to give labels (default: 10)\n * \n * String DOM attributes\n * * rangeAnchor: `south`,`south-east`,`east`,`north` (default: `south`)\n * * labelPosition: `edge`|`inner`\n * * needleStyle: `none`, `to-track`, `to-knob`\n * * title: a caption for dial\n * \n * Boolean DOM attributes\n * * hideTitle, hideValue, hideTerminators, showKnob, bipolar\n * \n * CSS variables\n * --[track,needle,value]-width\n * --[track,needle,value]-color\n * --needle-start: relative to radius of circle. eg 0.6 starts needle 60% out from center (default: 0.6)\n * --needle_overshoot: % of increase of needle size (default: 0.2)\n * --value-label-color: colour of value label\n * --value-label-x: x offset (in 0..100 coords)\n * --value-label-y: y offset (in 0..100 coords)\n * --knob-color\n * --knob-radius: % of circle to use for knob (default: 0.8)\n */\n@customElement('ixfx-dial')\nexport class DialElement extends LitElement {\n @property({ type: Number })\n rangeAngle = 300;\n\n @property({ type: String })\n rangeAnchor: CircleArc.CircleArcAnchor = `south`;\n\n @property({ type: String })\n labelPosition: LabelPosition = `edge`;\n\n //@property({ type: Boolean })\n //hideTitle = false;\n @property({ type: Boolean })\n spread = false;\n\n @property({ type: Boolean })\n hideValue = false;\n\n @property({ type: Boolean })\n hideTerminators = false\n\n @property({ type: Boolean })\n showKnob = false;\n\n @property({ type: Boolean })\n bipolar = false;\n\n @property({ type: String })\n needleStyle: NeedleStyle = `to-track`;\n\n @property({ type: Number })\n value = 50;\n\n @property({ type: Number })\n step = 10;\n\n @property({ type: Number })\n stepFine = 1;\n\n @property({ type: Number })\n radius = 0.5;\n\n @property({ type: Number })\n min = 0;\n\n @property({ type: Number })\n max = 100;\n\n @property({ type: Number })\n textRelativeHeight = 5;\n\n //@property({ type: String })\n //title = ``;\n\n valueLabelRef: Ref<SvgEditLabel> = createRef();\n\n @property({ type: Object })\n valueLabel: SvgEditLabelData = {\n anchor: `start`,\n x: 0,\n fill: ``,\n hideValue: this.hideValue,\n y: 0,\n editMode: false,\n displayValue: 0,\n editValue: 0\n }\n\n #editableLabel;\n #onPointerDownBound = this.#onPointerDown.bind(this);\n #onPointerDragBound = this.#onPointerDrag.bind(this);\n #onDragStopBound = this.#onDragStop.bind(this);\n\n constructor() {\n super();\n this.#editableLabel = new SvgEditLabel();\n this.#editableLabel.onEditMode = (enabled, _source) => {\n this.valueLabel = {\n ...this.valueLabel,\n editMode: enabled\n }\n };\n this.#editableLabel.onInput = (value) => {\n const f = Number.parseFloat(value);\n if (Number.isNaN(f)) return;\n this.#setValue(f);\n }\n }\n\n #computeTextLabelPosition(vars: Variables, arc: CircleArc.CircleArcDefined) {\n let x = 0;\n let y = 0;\n let textAnchor: SvgEditLabelData[ 'anchor' ] = `middle`;\n\n if (this.labelPosition === `inner`) {\n x = arc.x;\n y = arc.y + this.textRelativeHeight / 4;\n } else {\n switch (this.rangeAnchor) {\n case `north`:\n x = 50;\n y = this.textRelativeHeight * 1.5;\n break;\n case `east`:\n x = 75; // need to measure width?\n y = 50;\n textAnchor = `start`;\n break;\n case `south-east`:\n x = 99;\n y = 90;\n textAnchor = `end`;\n break;\n default:\n x = 50;\n y = 95;\n }\n }\n x += vars.value_label_x;\n y += vars.value_label_y;\n return { x, y, anchor: textAnchor };\n }\n\n // #renderTitle() {\n // if (this.hideTitle) {\n // return svg``;\n // }\n\n // const textPos = { x: 50, y: (this.textRelativeHeight / 2) + 4 };\n // const textAnchor = `middle`;\n // return svg`<text text-anchor=${ textAnchor } x=${ textPos.x } y=${ textPos.y }>${ this.title }</text>`\n // }\n\n #computeArc(vars: Variables) {\n const textHeight = this.textRelativeHeight;\n let maxRadius = 50 - (Math.max(vars.track_width, vars.value_width) * 3);\n let middleY = 50;\n const cornerRange = (this.rangeAnchor === `south-east`);\n\n if (this.labelPosition === `below`) {\n maxRadius -= textHeight;\n middleY -= textHeight;\n }\n\n if (cornerRange) {\n middleY += textHeight / 2;\n maxRadius -= 3;\n } else {\n //maxRadius -= (textHeight / 2.5);\n //middleY += (textHeight / 2) - 3;\n }\n\n // if (!this.hideTitle) {\n\n // }\n // if (!this.hideValue && this.labelPosition !== `inner`) {\n // if (cornerRange) {\n // maxRadius -= (textHeight / 4);\n // } else {\n // maxRadius -= (textHeight / 4);\n // middleY -= textHeight / 4;\n // }\n // }\n //if (this.hideTitle && this.hideValue) middleY = 50;\n return {\n maxRadius,\n middleY\n }\n }\n\n #renderTrackArc(vars: Variables, value: number, arc: CircleArc.CircleArcDefined, part: CircleArc.ArcPart) {\n if (vars.track_width <= 0) return svg``;\n\n const hiddenTrack = vars.track_width <= vars.value_width;\n\n let largeArc = true;\n const clockwise = true;\n let arcSvgBits: string[] = [];\n if (hiddenTrack && !this.bipolar) {\n // Make an arc from end of value to end of range\n let startAt = part.endAngle - 0.1;\n const arcPart = CircleArc.arcPart(arc, startAt, arc.endAngle, true);\n const d = radianArc(startAt, arc.endAngle, true);\n if (value > 0.97) {\n arcSvgBits = CircleArc.toSvg(arc, largeArc, clockwise);\n } else {\n largeArc = d > Math.PI;\n arcSvgBits = CircleArc.partToSvg(arc, arcPart, largeArc, clockwise)\n }\n } else {\n arcSvgBits = CircleArc.toSvg(arc, largeArc, clockwise);\n }\n\n const s = svg`\n <path \n d=\"${ arcSvgBits.join(' ') }\" \n fill=\"none\"\n stroke-linecap=\"round\"\n stroke=\"${ vars.track_color }\" \n stroke-width=\"${ vars.track_width }\"\n />\n `\n return s;\n }\n\n #getBipolarValue(value: number, arc: CircleArc.CircleArcDefined) {\n if (value < 0.5) {\n const pc = Numbers.scale(value, 0, 0.5);\n const distance = radianArc(arc.startAngle, arc.midAngle, true) * pc;\n const startAngle = radiansSum(arc.startAngle, distance, false);\n return CircleArc.arcPart(arc, startAngle, arc.midAngle, true);\n } else {\n const pc = Numbers.scale(value, 0.5, 1);\n const distance = radianArc(arc.midAngle, arc.endAngle, true) * pc;\n const endAngle = radiansSum(arc.midAngle, distance, false);\n return CircleArc.arcPart(arc, arc.midAngle, endAngle, true);\n }\n }\n\n #getUnipolarValue(value: number, arc: CircleArc.CircleArcDefined) {\n const angle = value * arc.rangeRadian;\n const endAngle = Numbers.wrap(arc.startAngle - angle, 0, piPi);\n const arcValue = CircleArc.arcPart(arc, arc.startAngle, endAngle, true);\n return arcValue;\n }\n\n getRelativeValue() {\n return Numbers.scale(this.value, this.min, this.max);\n }\n\n #renderValueArc(vars: Variables, value: number, arc: CircleArc.CircleArcDefined, part: CircleArc.ArcPart) {\n let largeArc = false;\n const clockwise = !arc.invert;\n if (part.range > Math.PI) largeArc = true;\n const arcSvgBits = CircleArc.partToSvg(arc, part, largeArc, clockwise);\n const showValueArc = this.bipolar ? value === 0.5 : value === 0;\n\n const arcValueSvg = showValueArc ?\n svg`` :\n svg`<path \n d=\"${ arcSvgBits.join(' ') }\" \n fill=\"none\" \n stroke=\"${ vars.value_color }\" \n stroke-width=\"${ vars.value_width }\"\n />`\n const needleStart = vars.needle_start * arc.radius;\n let needleEnd = 1;\n\n switch (this.needleStyle) {\n case `none`:\n return arcValueSvg;\n case `to-knob`:\n needleEnd = vars.knob_radius * arc.radius;\n break;\n case `to-track`:\n needleEnd = arc.radius;\n break;\n }\n\n needleEnd += (vars.needle_overshoot * (needleEnd - needleStart));\n\n const line = {\n a: CircleArc.interpolatePoint({ ...arc, radius: needleStart }, value),\n b: CircleArc.interpolatePoint({ ...arc, radius: needleEnd }, value)\n }\n const needleLine = svg`<line\n x1=${ line.a.x }\n y1=${ line.a.y }\n x2=${ line.b.x }\n y2=${ line.b.y }\n stroke-linecap=\"round\"\n stroke=${ vars.needle_color }\n stroke-width=${ vars.needle_width }\n />`\n return [ arcValueSvg, needleLine ];\n }\n\n #renderKnob(vars: Variables, arc: CircleArc.CircleArcDefined) {\n if (!this.showKnob) return svg``;\n return svg`<circle r=${ arc.radius * vars.knob_radius } cx=${ arc.x } cy=${ arc.y } fill=${ vars.knob_color } />`\n }\n\n #renderPoints(radius: number, fill: string, ...circles: Points.Point[]) {\n return circles.map(c => svg`<circle fill=${ fill } r=${ radius } cx=${ c.x } cy=${ c.y } />`)\n }\n\n render() {\n const vars = this.resolveVariables();\n const arcSize = this.#computeArc(vars);\n\n const circlePre: CircleArc.CircleArc = {\n x: 50,\n y: arcSize.middleY,\n radius: arcSize.maxRadius,\n anchor: this.rangeAnchor,\n rangeRadian: degreeToRadian(this.rangeAngle)\n }\n const circle = CircleArc.precompute(circlePre);\n const relativeValue = this.getRelativeValue();\n const valueArc = this.bipolar ? this.#getBipolarValue(relativeValue, circle) : this.#getUnipolarValue(relativeValue, circle);\n let terminators: TemplateResult[] = [];\n const terminatorSize = Math.max(vars.value_width, vars.track_width);\n if (!this.hideTerminators) {\n let lightStart = this.value !== this.min;\n if (this.bipolar) lightStart = this.value === this.min;\n const atEnd = this.value === this.max;\n const startTerminator = this.#renderPoints(terminatorSize, lightStart ? vars.value_color : vars.track_color, circle.startPoint);\n const endTerminator = this.#renderPoints(terminatorSize, atEnd ? vars.value_color : vars.track_color, circle.endPoint);\n terminators = [ ...startTerminator, ...endTerminator ];\n }\n if (this.bipolar) {\n const mid = (this.max - this.min) / 2\n const atMid = this.value.toFixed(1) === mid.toFixed(1);\n const midPoint = svg`<circle @click=${ this.onMidpointClick } fill=${ atMid ? vars.value_color : vars.track_color } r=${ terminatorSize * 1.5 } cx=${ circle.midPoint.x } cy=${ circle.midPoint.y } />`\n terminators.push(midPoint);\n }\n\n const textLabelPos = this.#computeTextLabelPosition(vars, circle);\n this.valueLabel = {\n ...this.valueLabel,\n ...textLabelPos,\n hideValue: this.hideValue,\n displayValue: this.valueToLabel(this.value),\n editValue: this.value\n }\n\n return html`<svg tabindex=0 @pointerdown=${ this.#onPointerDownBound } @wheel=${ this.onMouseWheel } @keydown=${ this.onKeyDown } overflow=\"hidden\" viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n ${ this.#renderTrackArc(vars, relativeValue, circle, valueArc) }\n ${ this.#renderKnob(vars, circle) }\n ${ terminators }\n ${ this.#renderValueArc(vars, relativeValue, circle, valueArc) }\n ${ this.#editableLabel.render(this.valueLabel) }\n </svg>`;\n }\n\n #onPointerDown(_event: PointerEvent) {\n window.addEventListener(`pointermove`, this.#onPointerDragBound);\n window.addEventListener(`pointercancel`, this.#onDragStopBound);\n window.addEventListener(`pointerup`, this.#onDragStopBound);\n }\n\n #onPointerDrag(event: PointerEvent) {\n // Proportion of movement based on size of element\n const y = event.movementY / this.clientHeight;\n const r = this.range * y;\n this.#setValue(this.value - r);\n }\n\n #onDragStop() {\n window.removeEventListener(`pointerup`, this.#onDragStopBound);\n window.removeEventListener(`pointercancel`, this.#onDragStopBound);\n window.removeEventListener(`pointermove`, this.#onPointerDragBound);\n\n }\n\n protected updated(_changedProperties: PropertyValues): void {\n this.#editableLabel.onUpdated();\n }\n\n onMidpointClick() {\n this.#setValue((this.max - this.min) / 2);\n }\n\n /**\n * Manually sets the value, clamping to min/max range.\n * Fires 'change' event.\n * @param value \n * @returns \n */\n #setValue(value: number) {\n const old = this.value;\n value = Numbers.clamp(value, this.min, this.max);\n if (value === old) return;\n this.value = value;\n this.valueLabel = {\n ...this.valueLabel,\n displayValue: this.valueToLabel(value),\n editValue: value\n }\n this.dispatchEvent(new CustomEvent(`change`, {\n detail: {\n previousValue: old,\n newValue: value\n }\n }));\n }\n\n\n onMouseWheel(event: WheelEvent) {\n const shift = event.shiftKey;\n const amount = shift ? this.stepFine : this.step;\n this.deltaChange(amount * event.deltaY * 0.01);\n event.preventDefault()\n }\n\n deltaChange(amount: number) {\n this.#setValue(this.value + amount);\n }\n\n onKeyDown(event: KeyboardEvent) {\n const key = event.key;\n const shift = event.shiftKey;\n //const ctrl = event.ctrlKey;\n\n if (this.valueLabel.editMode) return;\n //console.log(`key: ${ key } ctrl: ${ ctrl }`);\n const amount = shift ? this.stepFine : this.step;\n if (key === `ArrowLeft` || key === `ArrowDown`) {\n this.deltaChange(-amount);\n } else if (key === `ArrowRight` || key === `ArrowUp`) {\n this.deltaChange(amount);\n } else if (Number.parseInt(key).toString() === key) {\n this.valueLabel = {\n ...this.valueLabel,\n editMode: true\n }\n }\n }\n\n onPointerMove(event: PointerEvent) {\n const { x, y } = event;\n console.log(`x: ${ x } y:${ y }`);\n }\n\n resolveVariables() {\n const vars = getCssVariablesWithFallback({\n track_width: 10,\n track_color: `gray`,\n value_width: 10,\n value_color: `red`,\n value_label_color: `unset`,\n value_label_x: 0,\n value_label_y: 0,\n needle_overshoot: 0.2,\n needle_start: 0.6,\n needle_color: `black`,\n needle_width: 10,\n knob_color: `black`,\n knob_radius: 0.8\n }, this);\n return vars;\n };\n set valueToLabel(fn: (value: number) => string) {\n this.#valueToLabel = fn;\n this.requestUpdate();\n }\n get valueToLabel() {\n return this.#valueToLabel;\n }\n get range() {\n return this.max - this.min;\n }\n\n\n #valueToLabel: ValueToLabelFormat = (value: number) => {\n return value.toFixed(1);\n }\n static styles = css`\n :host {\n display: inline-block;\n --value-label-color: unset;\n }\n text {\n user-select:none;\n }\n\n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-dial\": DialElement;\n }\n}","import { css, html, LitElement } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n\n@customElement('ixfx-selecthorizontal-element')\nexport class SelectHorizontalElement extends LitElement {\n @property({ type: Boolean })\n editMode = false;\n\n\n render() {\n console.log(`render`);\n return html`\n <option>pre</option>\n <slot></slot>\n <option>post</option>\n `;\n }\n\n static styles = css`\n :host {\n display: flex;\n overflow: scroll;\n width: 100%;\n scroll-snap-type: x mandatory;\n scrollbar-width: none;\n }\n \n ::slotted(*),option {\n user-select: none;\n scroll-snap-align: start;\n border: 1px solid silver;\n color:red;\n }\n`\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-selecthorizontal-element\": SelectHorizontalElement;\n }\n}","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction*o(o,t){const f=\"function\"==typeof t;if(void 0!==o){let i=-1;for(const n of o)i>-1&&(yield f?t(i):t),i++,yield n}}export{o as join};\n//# sourceMappingURL=join.js.map\n","import { css, html, LitElement, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { Trees } from 'ixfx/collections.js';\n\nimport { join } from \"lit/directives/join.js\";\nexport type CrumbNavigationPart = {\n label: string\n key: string\n}\n\n/**\n * Events\n * * 'change': yields newly selected node and previous\n * \n * CSS variables\n * * --text-highlight: red; // highlight on mouse hover\n * * --separator: silver; // text colour of separator character\n * * --padding-s: 0.12ch; // padding between items\n */\n@customElement('ixfx-crumb-navigation')\nexport class CrumbNavigationElement extends LitElement {\n @property({ type: Object })\n tree: Trees.TreeNode<CrumbNavigationPart>;\n\n @property({ type: Object })\n selectedNode: Trees.TreeNode<CrumbNavigationPart> | undefined;\n\n constructor() {\n super();\n const t = Trees.Mutable.createNode<CrumbNavigationPart>({ key: `root`, label: `root` });\n const nodeC = Trees.Mutable.addValue({ key: `c`, label: `c:` }, t);\n const nodeUsers = Trees.Mutable.addValue({ key: `users`, label: `users` }, nodeC);\n Trees.Mutable.addValue({ key: `guest`, label: `guest` }, nodeUsers);\n Trees.Mutable.addValue({ key: `ch`, label: `ch` }, nodeUsers);\n Trees.Mutable.addValue({ key: `admin`, label: `admin` }, nodeUsers);\n Trees.Mutable.addValue({ key: `jane`, label: `jane` }, nodeUsers);\n Trees.Mutable.addValue({ key: `barry`, label: `barry` }, nodeUsers);\n Trees.Mutable.addValue({ key: `reallylongoptionwow`, label: `reallylongoptionwow` }, nodeUsers);\n this.selectedNode = nodeUsers;\n this.tree = t;\n }\n\n #previousSelectionKey = ``;\n\n #onPartClick = (event: MouseEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n const part = (event.target as any).value as CrumbNavigationPart;\n\n // Find node for clicked part\n const n = Trees.Traverse.findAnyChildByValue(this.tree, part);\n\n if (n) {\n this.#setSelected(n);\n }\n }\n\n /**\n * Sets the selected node and fires event\n * @param node \n */\n #setSelected(node: Trees.TreeNode<CrumbNavigationPart>) {\n const previous = this.selectedNode;\n if (previous) {\n this.#previousSelectionKey = previous.value?.key ?? ``;\n } else {\n this.#previousSelectionKey = ``;\n }\n this.selectedNode = node;\n this.dispatchEvent(new CustomEvent(`change`, {\n detail: {\n selected: node,\n previous: previous\n }\n }))\n }\n\n #onSubPartClick = (event: MouseEvent) => {\n const currentlySelected = this.selectedNode;\n if (!currentlySelected) {\n console.warn(`Bug. No selectedNode`);\n return;\n }\n\n // const parentNode = currentlySelected.parent;\n // if (!parentNode) {\n // console.warn(`Bug. No parent node`);\n // console.log(currentlySelected);\n // return;\n // }\n const currentlySelectedKey = currentlySelected.value?.key;\n if (!currentlySelectedKey) {\n console.warn(`Bug. No key for selected value`);\n return;\n }\n\n // Selected option\n const li = event.target as HTMLLIElement;\n if (!li) {\n console.warn(`Bug. No LI element`);\n return;\n }\n\n const key = li.getAttribute(`data-key`) ?? ``;\n if (!key) {\n console.warn(`Bug. No data-key attribute`);\n return;\n }\n\n // Find the node\n for (const c of currentlySelected.childrenStore) {\n if (c.value?.key === key) {\n this.#setSelected(c);\n break;\n }\n }\n }\n\n protected updated(_changedProperties: PropertyValues): void {\n //if (!this.expanded) return;\n // const s = this.selectedNode;\n // if (!s) {\n // console.warn(`No selectedNode`);\n // return;\n // }\n // const selectedKey = s.value?.key;\n // if (!selectedKey) {\n // console.warn(`No .key on selectedNode.value`);\n // return;\n // }\n if (!this.shadowRoot) return;\n const hsiElement: HTMLElement = this.shadowRoot.querySelector(`.horiz-select-items`)!;\n if (!hsiElement) return;\n\n const ulElement: HTMLElement = hsiElement.querySelector(`ul`)!;\n const btnExpand: HTMLElement = this.shadowRoot.querySelector(`#btnExpand`)!;\n\n // Show expander button only when needed\n if (ulElement.getBoundingClientRect().width > hsiElement.getBoundingClientRect().width) {\n btnExpand.style.display = `inline`\n } else {\n btnExpand.style.display = `none`;\n }\n\n // Scroll container to find selected item\n for (const li of ulElement.querySelectorAll(`li`)) {\n const key = li.getAttribute(`data-key`) ?? ``;\n if (key === this.#previousSelectionKey) {\n this.#scrollToValue(li);\n break;\n }\n }\n }\n\n #scrollToValue(li: HTMLLIElement) {\n let l = li.offsetLeft;\n\n const ul = li.parentElement;\n if (!ul) return;\n l -= ul.offsetLeft;\n\n const horizSelectItems = ul.parentElement;\n if (!horizSelectItems) return;\n horizSelectItems.scroll({ left: l, top: 0, behavior: `smooth` });\n\n const horizSelect = horizSelectItems.parentElement;\n if (!horizSelect) return;\n horizSelect.style.minWidth = li.getBoundingClientRect().width + 'px';\n }\n render() {\n const t = this.tree;\n const sel = this.selectedNode ?? t;\n\n // Get parents of selected node\n let parts = [];\n parts.push(html`<div .value=${ sel.value } @click=${ this.#onPartClick }>${ sel.value?.label }</div>`)\n\n for (const p of Trees.Traverse.parents(sel)) {\n if (p.value === undefined) continue;\n const v = p.value;\n parts.push(html`<div .value=${ v } @click=${ this.#onPartClick }>${ v.label }</div>`)\n }\n parts.reverse();\n\n // Get available options at current location\n const currentOpt = this.#renderFinalOption();\n return html`<div class=\"parts\">${ join(parts, html`<span class=\"separator\">›</span>`) }</div>\n ${ currentOpt }`;\n }\n\n #renderFinalOption() {\n const s = this.selectedNode;\n if (s === undefined) {\n console.warn(`No selectedNode`);\n return html``; // Part missing\n }\n return this.#renderOptions(s, this.#previousSelectionKey);\n }\n\n #renderOptions(node: Trees.TreeNode<CrumbNavigationPart>, preselectKey: string) {\n if (node.childrenStore.length === 0) return html``;\n const options = node.childrenStore.map(c => html`<li class=\"${ c.value?.key === preselectKey ? `previous` : `` }\" @click=${ this.#onSubPartClick } data-key=${ c.value?.key }>${ c.value?.label }</li>`)\n return html`\n <span class=\"separator\">›</span>\n <div class=\"horiz-select\">\n <div class=\"horiz-select-items\">\n <ul>\n ${ options }\n </ul>\n </div>\n <div id=\"pop\" popover anchor=\"btnExpand\">\n <ul>\n ${ options }\n </ul>\n </div> \n <button popovertarget=\"pop\" id=\"btnExpand\">∧</button>\n </div>\n `\n }\n\n static styles = css`\n :host {\n --text-highlight: red;\n --separator: silver;\n --padding-s: 0.12ch;\n display: flex;\n overflow: scroll;\n width: 100%;\n scroll-snap-type: x mandatory;\n scrollbar-width: none;\n }\n #btnExpand {\n scale: 0.5;\n margin:0;\n }\n .parts {\n display: flex;\n }\n .parts > div {\n cursor: pointer;\n margin-right: var(--padding-s);\n\n }\n .parts > div:hover {\n color: var(--text-highlight);\n }\n \n .horiz-select {\n display:flex;\n min-width: 5ch;\n }\n .horiz-select-items {\n overflow-y: scroll;\n scrollbar-width: none;\n scroll-behavior: smooth;\n }\n\n .separator {\n margin-left: var(--padding-s);\n margin-right: var(--padding-s);\n color: var(--separator);\n }\n #pop {\n top: anchor(bottom);\n left: anchor(left);\n padding: 1ch;\n }\n #pop {\n ul {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n li {\n cursor: pointer;\n opacity: 0.8;\n }\n li.previous {\n opacity: 0.9;\n }\n li:hover {\n opacity: 1;\n }\n }\n\n .horiz-select-items {\n ul {\n list-style: none;\n padding: 0;\n margin: 0;\n display: inline;\n }\n \n li {\n display: inline;\n margin-left: var(--padding-s);\n margin-right: var(--padding-s);\n cursor: pointer;\n opacity: 0.3;\n }\n li.previous {\n opacity: 0.6;\n }\n li:hover {\n opacity: 1;\n }\n\n li:not(:last-child):after {\n content: ',';\n }\n }\n ::slotted(*),option {\n user-select: none;\n scroll-snap-align: start;\n border: 1px solid silver;\n color:red;\n }\n`\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-crumb-navigation\": CrumbNavigationElement;\n }\n}","/* eslint-disable @typescript-eslint/unbound-method */\nimport { css, html, LitElement, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n//import {Trees} from 'ixfx/collections.js';\n\nexport type CrumbNavigation2Part = {\n label: string\n key: string\n icon?: string\n showLabel?: boolean\n showIcon?: boolean\n ensureVisible?: boolean\n}\n\nexport type RequestPopup = (segment: CrumbNavigation2Part) => AsyncGenerator<CrumbNavigation2Part | CrumbNavigation2Part[]>\n/**\n * Events\n * * 'change': yields newly selected node and previous\n * \n * CSS variables\n * * --text-highlight: red; // highlight on mouse hover\n * * --separator: silver; // text colour of separator character\n * * --padding-s: 0.12ch; // padding between items\n */\n@customElement('ixfx-crumb-nav')\nexport class CrumbNavElement extends LitElement {\n @property({ type: Object })\n segments: CrumbNavigation2Part[] = []\n\n @property({ type: Boolean })\n editing = false;\n\n @property({ type: String })\n editPath = ``\n\n onNavPopup: RequestPopup | undefined;\n\n constructor() {\n super();\n this.onclick = () => {\n console.log(`click`);\n this.editing = true;\n\n }\n this.segments = [\n { label: `root`, key: `root` },\n { label: `This PC`, key: `ThisPC` },\n { label: `Storage (D:)`, key: `D:` },\n { label: `Archives`, key: `Archives` },\n { label: `Tumblr`, key: `Tumblr` },\n { label: `whatevruk`, key: `whatevruk` },\n ]\n }\n\n protected updated(_changedProperties: PropertyValues): void {\n if (this.editing) {\n this.shadowRoot?.querySelector(`input`)?.focus();\n this.shadowRoot?.querySelector(`input`)?.select();\n }\n }\n\n public setSegmentsWithPath(path: string, separator = `/`) {\n const split = path.split(separator);\n let root = ``;\n let segments: CrumbNavigation2Part[] = []\n for (const s of split) {\n root += s + separator\n segments.push({\n key: root,\n label: s\n });\n };\n this.segments = segments;\n this.editPath = path;\n }\n\n private renderSegment(s: CrumbNavigation2Part, i: number) {\n const last = i === this.segments.length - 1;\n const caret = html`<div .data=${ s } @click=${ this.onCaretClick } class=\"caret\">›</div>`;\n return html`<div class=\"seg ${ s.ensureVisible ? `chosen` : `` }\" >\n <label .data=${ s } title=${ s.label } @click=${ this.onLabelClick }>\n ${ s.label }\n </label>\n ${ last ? `` : caret }\n </div>`\n }\n\n async onCaretClick(event: MouseEvent) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n const data = (event.target as any).data as CrumbNavigation2Part;\n console.log(data);\n event.preventDefault();\n event.stopPropagation();\n if (this.onNavPopup) {\n for await (const item of this.onNavPopup(data)) {\n console.log(item);\n }\n console.log(`done`);\n }\n }\n\n onLabelClick(event: MouseEvent) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n const data = (event.target as any).data as CrumbNavigation2Part;\n event.preventDefault();\n event.stopPropagation();\n\n this.dispatchEvent(new CustomEvent(`navigate`, {\n detail: data\n }));\n }\n\n protected render() {\n if (this.editing) {\n return html`<input @keyup=${ this.onInputKeyUp } @blur=${ this.onInputBlur } value=${ this.editPath } type=\"text\">`\n } else {\n const segs = this.segments.map((s, index) => this.renderSegment(s, index));\n return html`${ segs }`;\n }\n }\n\n onInputKeyUp(event: KeyboardEvent) {\n const el = this.shadowRoot?.querySelector(`input`);\n if (!el) return;\n if (event.key === `Enter`) {\n console.log(`asf`);\n this.editPath = el.value;\n this.editing = false;\n } else if (event.key === `Escape`) {\n this.editing = false;\n }\n }\n\n\n onInputBlur() {\n this.editing = false;\n }\n\n static styles = css`\n :host {\n --text-highlight: red;\n --separator: silver;\n --padding: 0.5em;\n --padding-s: 0.1em;\n --padding-m: 0.25em;\n --hover-bg: darkgray;\n --hover-fg: unset;\n display: flex;\n width: 100%;\n gap: var(--padding-s);\n transition: all 2s ease-in-out;\n cursor: text;\n }\n\n .seg {\n cursor: pointer;\n display:flex;\n flex-wrap: nowrap;\n align-items:center;\n user-select: none;\n overflow:hidden;\n }\n\n input {\n appearance: none;\n border: 0;\n width: 100%;\n margin:var(--padding-s);\n padding: calc(2*var(--padding-s));\n font:unset;\n }\n .seg:hover {\n * {\n color: var(--hover-fg);\n background: color-mix(in srgb, var(--hover-bg) 20%, transparent);\n }\n }\n .seg {\n * {\n transition: all 0.2s ease-in-out;\n }\n }\n\n label {\n height: 100%;\n white-space:nowrap;\n text-overflow: ellipsis;\n align-content: center;\n overflow: hidden;\n padding: 0 var(--padding-s) 0 var(--padding-s);\n }\n\n label:hover,.caret:hover {\n background: var(--hover-bg) !important;\n }\n \n .seg:hover,.seg.chosen {\n overflow:unset;\n }\n \n .caret {\n padding: var(--padding-m);\n margin-left: var(--padding-s);\n margin-left: var(--padding-s);\n }\n`\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-crumb-nav\": CrumbNavElement;\n }\n}","import { css, html, LitElement } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n\n/**\n * CSS vars\n * * --selected-colour: text colour\n * * --selected-border-width: bottom border width\n * * --padding\n */\n@customElement('ixfx-tab-list-item')\nexport class TabListItemElement extends LitElement {\n @property({ type: Boolean })\n closeable = true;\n\n // @property({ type: Boolean })\n // activated = true;\n\n render() {\n return html`<div ><slot part=\"header\"></slot></div>`\n }\n\n // protected createRenderRoot() {\n // return this;\n // }\n static styles = css`\n :host {\n --selected-colour: blue;\n --selected-border-width: 1px;\n --padding: 0.5ch;\n --hover-background: whitesmoke;\n display: inline;\n user-select:none;\n box-sizing: border-box;\n }\n \n :host([selected])>div {\n color: var(--selected-colour);\n border-bottom: var(--selected-border-width) solid var(--selected-colour);\n }\n div {\n padding:var(--padding) calc(2*var(--padding)) var(--padding) calc(2*var(--padding));\n border-bottom: var(--selected-border-width) solid transparent;\n\n }\n \n div:hover {\n background-color: var(--hover-background);\n color:unset !important;\n\n }\n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-tab-list-item\": TabListItemElement;\n }\n}","import { css, html, LitElement } from \"lit\";\nimport { customElement, property, queryAssignedElements } from \"lit/decorators.js\";\nimport { TabListItemElement } from \"./tab-list-item.js\";\n\n/**\n * Events\n * * 'change' - new tab selected { previous:string, selected:string, for:string }\n */\n@customElement('ixfx-tab-list')\nexport class TabListElement extends LitElement {\n @property({ type: Boolean })\n horizontal = true;\n\n @queryAssignedElements()\n _listItems!: TabListItemElement[];\n\n render() {\n return html`\n <div tabindex=0 @keyup=${ this.#onKeyUp } @click=${ this.#onSlotClick } id=\"container\" class=${ this.horizontal ? `horizontal` : `vertical` }>\n <slot></slot>\n </div>`;\n }\n\n\n #onKeyUp = (event: KeyboardEvent) => {\n const key = event.key;\n if (key === `ArrowUp` && !this.horizontal) {\n this.#selectPrevious();\n return;\n } else if (key === `ArrowDown` && !this.horizontal) {\n this.#selectNext();\n return;\n } else if (key === `ArrowRight` && this.horizontal) {\n this.#selectNext();\n return;\n } else if (key === `ArrowLeft` && this.horizontal) {\n this.#selectPrevious();\n return;\n }\n }\n\n getSelectedElement() {\n for (const el of this._listItems) {\n if (this.#isSelected(el)) return el;\n }\n }\n\n #isSelected(el: HTMLElement) {\n const v = el.getAttribute(`selected`);\n if (v === null) return false;\n return (el.hasAttribute(`selected`));\n }\n\n\n selectElement(el: HTMLElement) {\n const existing = this.getSelectedElement();\n if (existing) {\n existing.removeAttribute(`selected`);\n }\n el.setAttribute(`selected`, ``);\n }\n\n #selectNext() {\n let found = false;\n for (const el of this._listItems) {\n if (this.#isSelected(el) && !found) {\n found = true;\n } else if (found) {\n this.selectElement(el);\n break;\n }\n }\n }\n\n #selectPrevious() {\n let prev: HTMLElement | undefined;\n for (const el of this._listItems) {\n if (this.#isSelected(el) && prev) {\n this.selectElement(prev);\n } else {\n prev = el;\n }\n }\n }\n\n #onSlotClick = (event: MouseEvent) => {\n this.focus();\n const t = event.target as HTMLElement;\n const previous = this.getSelectedElement();\n this.selectElement(t);\n\n const forId = t.getAttribute(`for`);\n this.dispatchEvent(new CustomEvent(`change`, {\n detail: {\n previous, selected: t.id, for: forId ?? ``\n }\n }));\n }\n\n // #updateSelection() {\n // for (const el of this._listItems) {\n // if (el.id === this.selectedId) {\n // el.classList.add(`activated`);\n // el.setAttribute(`activated`, ``);\n // } else {\n // el.classList.remove(`activated`);\n // el.removeAttribute(`activated`);\n // }\n // }\n // }\n\n // protected updated(_changedProperties: PropertyValues): void {\n // this.#updateSelection();\n // }\n\n static styles = css`\n :host {\n display: inline-block;\n --activated-colour: blue;\n --colur: pink;\n }\n text {\n user-select:none;\n }\n #container {\n display:flex;\n }\n #container.horizontal {\n flex-direction: row;\n }\n #container.vertical {\n flex-direction: column;\n }\n\n ::slotted(.activated) {\n --colour: var(--activated-colour);\n }\n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-tab-list\": TabListElement;\n }\n}","import { css, html, LitElement } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement('ixfx-tab-panel')\nexport class TabPanelElement extends LitElement {\n\n render() {\n return html`<slot></slot>`\n }\n static styles = css`\n :host {\n display:none;\n height:100%;\n width:100%;\n }\n\n :host([selected]) {\n background: whitesmoke;\n display:block;\n }\n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-tab-panel\": TabPanelElement;\n }\n}","import { css, html, LitElement } from \"lit\";\nimport { customElement, queryAssignedElements } from \"lit/decorators.js\";\nimport { TabPanelElement } from \"./tab-panel.js\";\nimport { TabListElement } from \"./tab-list.js\";\n\n@customElement('ixfx-tab-panels')\nexport class TabPanelsElement extends LitElement {\n\n @queryAssignedElements()\n _listItems!: TabPanelElement[];\n\n /**\n * Triggered when a panel is being de-selected\n */\n onUnselectedPanel?: (id: string, el: TabPanelElement) => void\n /**\n * Triggered before panel is selected\n */\n onSelectingPanel?: (id: string, el: TabPanelElement) => void\n /**\n * Triggered after panel is selected\n */\n onSelectedPanel?: (id: string, el: TabPanelElement) => void\n render() {\n return html`<slot></slot>`\n }\n\n getSelectedElement() {\n for (const el of this._listItems) {\n if (this.#isSelected(el)) return el;\n }\n }\n\n #isSelected(el: TabPanelElement) {\n //const v = el.getAttribute(`selected`);\n //console.log(`id: ${ el.id } v: ${ v }`);\n return el.hasAttribute(`selected`);\n }\n\n #unselect(el: TabPanelElement) {\n el.removeAttribute(`selected`);\n if (this.onUnselectedPanel) {\n this.onUnselectedPanel(el.id, el);\n }\n }\n\n #select(el: TabPanelElement) {\n if (this.onSelectingPanel) {\n this.onSelectingPanel(el.id, el);\n }\n el.setAttribute(`selected`, ``);\n if (this.onSelectedPanel) {\n this.onSelectedPanel(el.id, el);\n }\n }\n\n syncWithList(el: TabListElement) {\n const t = el.getSelectedElement();\n if (!t) return;\n const forEl = t.getAttribute(`for`);\n if (!forEl) return;\n this.selectPanel(forEl);\n }\n\n selectPanel(id: string) {\n const current = this.getSelectedElement();\n if (current) {\n if (current.id === id) return;\n this.#unselect(current);\n }\n\n let found = false;\n for (const el of this._listItems) {\n if (el.id === id) {\n this.#select(el);\n found = true;\n }\n }\n return found;\n }\n\n static styles = css`\n :host {\n display: block;\n }\n \n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-tab-panels\": TabPanelsElement;\n }\n}","import { clamp } from \"ixfx/numbers.js\";\nimport { css, html, LitElement } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n\n// TODO: Swap A/B panel content\n// TODO: Toggle collapse of A/B\n// TODO: Handle resizing of parent element\n// TODO: Fire event when panels have been resized\n/**\n * Lays out two elements within a container, with a bar to resize them\n * proportionally.\n * \n * Events\n * * _none_\n * Attributes\n * * layout: `vertical`|`horizontal`\n * * sizeA/B: CSS size of section A or B. Can use relative or absolute values\n * * fixedA/B: If _true_ size will be calculated in pixels. By default (_false_) it uses % of whole\n * \n * CSS variables\n * * --handle-size: 2px; // Width/height of resize handle\n * * --handle-colour: whitesmoke; // Colour of handle\n * * --handle-hover-colour: darkblue; // Colour of handle when hovering\n * * --handle-active-colour: blue; // Colour of handle when being used\n */\n@customElement('ixfx-split-layout')\nexport class SplitLayoutElement extends LitElement {\n @property({ type: String })\n layout: `vertical` | `horizontal` = `vertical`;\n\n @property({ type: String })\n sizeA = ``;\n @property({ type: String })\n sizeB = ``;\n\n @property({ type: Boolean })\n fixedA = false;\n @property({ type: Boolean })\n fixedB = false;\n\n //#userResizing = false;\n #elementBounds: DOMRect | undefined;\n\n render() {\n // With vertical layout, fix the width\n // With horizontal layout, fix the height\n const sizePrefix = this.layout === `vertical` ? `width` : `height`;\n let sizeA = this.sizeA;\n let sizeB = this.sizeB;\n\n if (sizeA.length === 0 && sizeB.length === 0) {\n sizeB = sizeA = `50%`;\n } else if (sizeA.length === 0) {\n sizeA = `auto`;\n } else if (sizeB.length === 0) {\n sizeB = `auto`;\n }\n\n sizeA = `${ sizePrefix }:${ sizeA }`;\n sizeB = `${ sizePrefix }:${ sizeB }`;\n\n return html`\n <div id=\"zone\">\n <slot style=${ sizeA } name=\"a\"></slot>\n <div @pointerdown=${ this.#onResizeHandleDown } class=\"resize-handle\"></div>\n <slot style=${ sizeB } name=\"b\"></slot> \n </div>`\n }\n\n getZone(): HTMLElement | undefined {\n if (!this.shadowRoot) return;\n const el = this.shadowRoot.querySelector(`#zone`);\n if (!el) return undefined;\n return el as HTMLElement;\n }\n\n #onResizeHandleDown = (event: PointerEvent) => {\n event.preventDefault();\n //this.#userResizing = true;\n const zoneEl = this.getZone();\n if (zoneEl) {\n zoneEl.classList.add(`user-resizing`);\n }\n this.#elementBounds = this.getBoundingClientRect();\n window.addEventListener(`pointerup`, this.#onResizeHandleUp);\n window.addEventListener(`pointermove`, this.#onResizeHandleMove);\n }\n\n #onResizeHandleUp = (event: PointerEvent) => {\n event.preventDefault();\n //this.#userResizing = false;\n const zoneEl = this.getZone();\n if (zoneEl) {\n zoneEl.classList.remove(`user-resizing`);\n }\n window.removeEventListener(`pointerup`, this.#onResizeHandleUp);\n window.removeEventListener(`pointermove`, this.#onResizeHandleMove);\n }\n\n #onResizeHandleMove = (event: PointerEvent) => {\n const bounds = this.#elementBounds;\n if (!bounds) return;\n //console.log(`fixedA: ${ this.fixedA } b: ${ this.fixedB }`);\n if (this.layout === `horizontal`) {\n let y = event.y - bounds.y;\n let relativeY = clamp(y / bounds.height);\n //console.log(`relY: ${ relativeY } y: ${ y } event.y: ${ event.y } offset: ${ event.offsetY }`);\n\n if (this.fixedA) {\n this.sizeA = `${ relativeY * bounds.height }px`;\n } else {\n this.sizeA = `${ relativeY * 100 }%`;\n }\n if (this.fixedB) {\n this.sizeB = `${ (1 - relativeY) * bounds.height }px`;\n } else {\n this.sizeB = `${ (1 - relativeY) * 100 }%`\n }\n } else {\n let x = event.x - bounds.x;\n let relativeX = clamp(x / bounds.width);\n if (this.fixedA) {\n this.sizeA = `${ relativeX * bounds.width }px`;\n } else {\n this.sizeA = `${ relativeX * 100 }%`;\n }\n if (this.fixedB) {\n this.sizeB = `${ (1 - relativeX) * bounds.width }px`;\n } else {\n this.sizeB = `${ (1 - relativeX) * 100 }%`\n }\n }\n event.preventDefault();\n }\n\n // Default is vertical split\n static styles = css`\n :host {\n --handle-size: 2px;\n --handle-colour: whitesmoke;\n --handle-hover-colour: darkblue;\n --handle-active-colour: blue;\n\n display: block;\n box-sizing: border-box;\n width:100%;\n height:100%;\n }\n * {\n box-sizing: border-box;\n }\n #zone {\n display:flex;\n height: 100%;\n }\n slot {\n display:block;\n }\n :slotted(*) {\n width: 100%;\n height: 100%;\n }\n\n .resize-handle {\n background-color: var(--handle-colour);\n width: var(--handle-size);\n height:100%;\n cursor: ew-resize;\n }\n #zone.user-resizing {\n slot {\n opacity: 0.5;\n }\n .resize-handle {\n background-color: var(--handle-active-colour);\n }\n }\n .resize-handle:hover {\n background-color: var(--handle-hover-colour);\n }\n\n :host([layout='horizontal']) {\n slot {\n \n }\n #zone {\n flex-direction: column;\n }\n .resize-handle {\n background-color: silver;\n height: var(--handle-size);\n width:100%;\n cursor: ns-resize;\n }\n }\n\n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-split-layout\": SplitLayoutElement;\n }\n}","import { css, html, LitElement, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n\n//import { property } from \"lit/decorators/property.js\";\nimport { createRef, type Ref, ref } from \"lit/directives/ref.js\";\nimport { CanvasHelper } from \"ixfx/visual.js\";\nimport type { Rect, RectPositioned } from \"ixfx/geometry.js\";\nimport * as Numbers from 'ixfx/numbers.js';\nimport { getCssVariable } from 'ixfx/dom.js';\nimport { Drawing, Colour, type DrawingHelper } from \"ixfx/visual.js\";\nimport { Pathed } from 'ixfx';\n\n/**\n * Attributes\n * * streaming: true/false (default: true)\n * * max-length: number (default: 500). How many data points per series to store\n * * data-width: when streaming, how much horizontal width per point\n * * fixed-max/fixed-min: global input scaling (default: NaN, ie. disabled)\n * \n * * line-width: stroke width of drawing line (default:2)\n * \n * * render: 'dot' or 'line' (default: 'dot')\n * * hide-legend: If added, legend is not shown\n * * manual-draw: If added, automatic drawning is disabled\n * \n * Styling variables\n * * --legend-fg: legend foreground text\n */\n@customElement(`ixfx-plot-element`)\nexport class PlotElement extends LitElement {\n @property({ attribute: `streaming`, type: Boolean })\n streaming = true;\n\n @property({ attribute: `hide-legend`, type: Boolean })\n hideLegend = false;\n\n @property({ attribute: `max-length`, type: Number })\n maxLength = 500;\n\n @property({ attribute: `data-width`, type: Number })\n dataWidth = 5;\n\n @property({ attribute: `fixed-max`, type: Number })\n fixedMax = Number.NaN;\n\n @property({ attribute: `fixed-min`, type: Number })\n fixedMin = Number.NaN;\n\n @property({ attribute: `line-width`, type: Number })\n lineWidth = 2;\n\n @property({ attribute: `render`, type: String })\n renderStyle = `dot`\n\n @property({ attribute: `manual-draw`, type: Boolean })\n manualDraw = false;\n padding = 5;\n\n paused = false;\n #series = new Map<string, PlotSeries>();\n #canvas: CanvasHelper | undefined;\n #drawing: DrawingHelper | undefined;\n\n #legendColour = ``;\n #hue = 0;\n\n canvasEl: Ref<HTMLCanvasElement> = createRef();\n seriesRanges = new Map<string, [ min: number, max: number ]>();\n\n get series(): PlotSeries[] {\n return [ ...this.#series.values() ] as PlotSeries[];\n }\n\n get seriesCount() {\n return this.#series.size;\n }\n\n /**\n * Returns a `PlotElement` instance based on a query\n * ```js\n * PlotElement.fromQuery(`#someplot`); // PlotElement\n * ```\n * \n * Throws an error if query does not match.\n * @param query \n * @returns \n */\n static fromQuery(query: string): PlotElement {\n const el = document.querySelector(query);\n if (!el) throw new Error(`Query does not match an element`);\n if (el.nodeName === 'IXFX-PLOT-ELEMENT') return el as PlotElement;\n throw new Error(`Element is not a PlotElement ('${ el.nodeName }')`);\n }\n\n /**\n * Delete a series.\n * Returns _true_ if there was a series to delete\n * @param name \n * @returns \n */\n deleteSeries(name: string): boolean {\n name = name.toLowerCase();\n const s = this.#series.get(name);\n if (!s) return false;\n this.#series.delete(name);\n return true;\n }\n\n /**\n * Keeps the series, but deletes its data\n * @param name\n * @returns \n */\n clearSeries(name: string): boolean {\n name = name.toLowerCase();\n const s = this.#series.get(name);\n if (!s) return false;\n this.#series.clear();\n return true;\n }\n\n /**\n * Delete all data & series\n */\n clear() {\n this.#series.clear();\n }\n\n /**\n * Keeps all series, but deletes their data\n */\n clearData() {\n for (const s of this.#series.values()) {\n s.clear();\n }\n }\n\n render() {\n return html`<canvas ${ ref(this.canvasEl) }></canvas>`\n }\n\n #setupCanvas(): CanvasHelper {\n if (this.#canvas !== undefined) return this.#canvas;\n const canvas = this.canvasEl.value!;// this.shadowRoot?.querySelector(`canvas`);\n if (!canvas) throw new Error(`canvas element not found`);\n const c = new CanvasHelper(canvas);\n this.#canvas = c;\n\n this.#drawing = Drawing.makeHelper(c.ctx);\n return c;\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n }\n\n protected firstUpdated(_changedProperties: PropertyValues): void {\n // const canvas = this.canvasEl.value!;\n const ro = new ResizeObserver((event) => {\n const c = this.#setupCanvas();\n if (!c) return;\n const entry = event[ 0 ];\n c.setLogicalSize(entry.contentRect);\n });\n ro.observe(this);\n this.updateColours();\n }\n\n updateColours() {\n this.#legendColour = getCssVariable(`legend-fg`, `black`);\n }\n\n plot(value: number, seriesName = ``, skipDrawing = false) {\n if (typeof value !== 'number') throw new TypeError(`Can only add numbers. Got: ${ typeof value }`);\n\n let s = this.#series.get(seriesName.toLowerCase());\n if (s === undefined) {\n s = new PlotSeries(seriesName, this.colourGenerator(seriesName), this);\n this.#series.set(seriesName.toLowerCase(), s);\n }\n s.push(value);\n if (!this.manualDraw && !skipDrawing) this.draw();\n return s;\n }\n\n plotSeries(values: number[], seriesName = ``, skipDrawing = false) {\n if (!Array.isArray(values)) throw new TypeError(`Param 'values' is not an array`);\n let s = this.#series.get(seriesName.toLowerCase());\n if (s === undefined) {\n s = new PlotSeries(seriesName, this.colourGenerator(seriesName), this);\n this.#series.set(seriesName.toLowerCase(), s);\n }\n s.setValues(values);\n if (!this.manualDraw && !skipDrawing) this.draw();\n return s;\n }\n\n /**\n * Draw a set of key-value pairs as a batch.\n * @param value \n */\n plotObject(value: object) {\n for (const p of Pathed.getPathsAndData(value, true)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n this.plot(p.value, p.path, true);\n }\n this.draw();\n }\n\n colourGenerator(_series: string): Colour.Colourish {\n const c = Colour.HslSpace.scalar(this.#hue, 0.9, 0.4);\n this.#hue = Numbers.wrap(this.#hue + 0.1);\n return c;\n }\n\n draw() {\n if (this.paused) return;\n\n const c = this.#canvas;\n const d = this.#drawing;\n const padding = this.padding;\n if (!d || !c) return;\n c.clear();\n const ctx = d.ctx;\n\n const axisYwidth = this.computeAxisYWidth(c);\n const remainingWidth = c.width - axisYwidth;\n\n // Legend across bottom\n const clLegend = this.computeLegend(c, remainingWidth, padding);\n const plotHeight = c.height - clLegend.bounds.height - padding;\n const cy = { width: axisYwidth, height: plotHeight };\n const cp = this.computePlot(c, plotHeight, cy.width, padding);\n const cl = { ...clLegend.bounds, x: cy.width, y: cp.y + cp.height + padding }\n\n let globalScaler: ((v: number) => number) | undefined;\n if (!Number.isNaN(this.fixedMax) && !Number.isNaN(this.fixedMin)) {\n globalScaler = Numbers.scaler(this.fixedMin, this.fixedMax);\n }\n\n // Draw legend\n if (!this.hideLegend) {\n ctx.save();\n ctx.translate(cl.x + padding, cl.y + padding);\n this.drawLegend(cl, d);\n ctx.restore();\n }\n\n ctx.save();\n ctx.translate(cp.x + padding, cp.y + padding);\n //ctx.fillStyle = `whitesmoke`;\n //ctx.fillRect(0, 0, cp.width, cp.height);\n\n // Draw data\n for (const series of this.#series.values()) {\n const seriesScale = this.seriesRanges.get(series.name);\n const data = seriesScale === undefined ? (globalScaler === undefined ?\n series.getScaled() :\n series.getScaledBy(globalScaler)) :\n series.getScaledBy(Numbers.scaler(seriesScale[ 0 ], seriesScale[ 1 ]));\n const colour = Colour.toCssColour(series.colour);\n switch (this.renderStyle) {\n case `line`: {\n this.drawLineSeries(data, cp, d, colour);\n break;\n }\n default: {\n this.drawDotSeries(data, cp, d, colour);\n }\n }\n }\n ctx.restore();\n\n }\n\n drawLegend(cl: RectPositioned, d: DrawingHelper) {\n const textColour = this.#legendColour;\n const padding = this.padding;\n let x = 0;\n let y = padding;\n const swatchSize = 10;\n const ctx = d.ctx;\n\n for (const series of this.#series.values()) {\n ctx.fillStyle = Colour.toCssColour(series.colour);\n ctx.fillRect(x, y, swatchSize, swatchSize);\n ctx.fillStyle = textColour;\n x += swatchSize + padding;\n const m = ctx.measureText(series.name);\n ctx.textBaseline = `middle`;\n ctx.fillText(series.name, x, y + swatchSize / 2);\n\n x += m.width + padding;\n if (x >= cl.width) {\n y += 10 + padding;\n x = 0;\n }\n }\n }\n\n drawLineSeries(data: number[], cp: Rect, d: DrawingHelper, colour: string) {\n const pointWidth = this.streaming ? this.dataWidth : (cp.width / data.length);\n let x = 0;\n if (this.streaming) x = cp.width - (pointWidth * data.length);\n const pos = data.map(d => {\n x += pointWidth;\n return {\n x: x,\n y: (1 - d) * cp.height,\n radius: pointWidth\n };\n })\n // Ignore points off the screen\n const trimmed = pos.filter(p => {\n if (p.x < 0) return false;\n return true;\n })\n d.connectedPoints(trimmed, {\n strokeStyle: colour,\n lineWidth: this.lineWidth\n });\n }\n\n drawDotSeries(data: number[], cp: Rect, d: DrawingHelper, colour: string) {\n const pointWidth = this.streaming ? this.dataWidth : cp.width / data.length;\n let x = 0;\n if (this.streaming) x = cp.width - (pointWidth * data.length);\n const pos = data.map(d => {\n x += pointWidth;\n return {\n x,\n y: (1 - d) * cp.height,\n radius: pointWidth\n }\n })\n // Ignore points off the screen\n const trimmed = pos.filter(p => {\n if (p.x < 0) return false;\n return true;\n })\n d.dot(trimmed, { filled: true, fillStyle: colour });\n }\n computePlot(c: CanvasHelper, plotHeight: number, axisYwidth: number, padding: number) {\n return {\n x: axisYwidth,\n y: 0,\n width: c.width - axisYwidth - padding,\n height: plotHeight - padding - padding\n }\n }\n\n computeAxisYWidth(_c: CanvasHelper) {\n return 0;\n }\n\n #swatchSize = 10;\n\n computeLegend(c: CanvasHelper, maxWidth: number, padding: number) {\n if (this.hideLegend) {\n return {\n bounds: { width: 0, height: 0 },\n parts: []\n }\n }\n const ctx = c.ctx;\n\n const series = [ ...this.#series.values() ];\n let largestH = 0;\n const sizes = series.map(s => {\n let width = this.#swatchSize + padding;\n const m = ctx.measureText(s.name);\n width += m.width;\n const height = m.emHeightAscent + m.emHeightDescent;\n largestH = Math.max(height, largestH);\n return {\n width,\n height\n }\n });\n const parts = [];\n let x = padding;\n let y = padding;\n let usedWidthMax = 0;\n for (const s of sizes) {\n parts.push({\n x, y, ...s\n })\n x += s.width;\n usedWidthMax = Math.max(x, usedWidthMax);\n if (x >= maxWidth) {\n x = padding;\n y += largestH + padding;\n }\n }\n const bounds = { width: usedWidthMax, height: y + largestH + padding }\n return {\n bounds, parts\n }\n }\n\n getSeries(name: string): PlotSeries | undefined {\n return this.#series.get(name);\n }\n\n static styles = css`\n :host {\n width: 100%;\n height: 100%;\n display: block;\n }\n `\n}\n\n\nexport class PlotSeries {\n data: number[] = [];\n minSeen = Number.MAX_SAFE_INTEGER;\n maxSeen = Number.MIN_SAFE_INTEGER;\n\n constructor(public name: string, public colour: Colour.Colourish, private plot: PlotElement) {}\n\n clear() {\n this.data = [];\n this.resetScale();\n }\n\n /**\n * Returns a copy of the data scaled by the current\n * range of the data\n * @returns \n */\n getScaled() {\n //const r = this.maxSeen - this.minSeen;\n let min = this.minSeen;\n let max = this.maxSeen;\n if (Number.isNaN(min)) min = 0;\n if (Number.isNaN(max)) max = 1;\n\n const s = Numbers.scaler(min, max);\n return this.getScaledBy(s);\n }\n\n getScaledBy(scaler: (v: number) => number) {\n return this.data.map(v => {\n if (typeof v !== `number`) throw new Error(`Data should just be numbers. Got: ${ typeof v }`);\n if (Number.isNaN(v)) throw new Error(`data contains NaN`);\n const scaled = scaler(v);\n if (Number.isNaN(scaled)) throw new Error(`NaN. v: ${ v } scaled: ${ scaled }`);\n return Numbers.clamp(scaled)\n });\n }\n\n push(value: number) {\n if (typeof value !== 'number') throw new Error(`Can only add numbers. Got: ${ typeof value }`);\n this.data.push(value);\n if (this.data.length > this.plot.maxLength && this.plot.streaming) {\n this.data = this.data.slice(1);\n }\n this.minSeen = Math.min(this.minSeen, value);\n this.maxSeen = Math.max(this.maxSeen, value);\n }\n\n setValues(values: number[]) {\n if (!Array.isArray(values)) throw new TypeError(`Param 'values' is not an array`);\n this.data = values;\n this.minSeen = Math.min(...values);\n this.maxSeen = Math.max(...values);\n }\n\n resetScale() {\n this.minSeen = Number.MAX_SAFE_INTEGER;\n this.maxSeen = Number.MIN_SAFE_INTEGER;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-plot-element\": PlotElement;\n }\n}","export type CompareResult = number; // 0 | 1 | -1;\nexport type Comparer<V> = (a: V, b: V) => CompareResult;\n\n/**\n * Sort numbers in ascending order.\n *\n * ```js\n * [10, 4, 5, 0].sort(numericComparer);\n * // Yields: [0, 4, 5, 10]\n * [10, 4, 5, 0].sort(comparerInverse(numericComparer));\n * // Yields: [ 10, 5, 4, 0]\n * ```\n * @param x\n * @param y\n * @returns\n */\nexport const numericComparer = (x: number, y: number): CompareResult => {\n // ✔️ Unit tested\n if (x === y) return 0;\n if (x > y) return 1;\n return -1;\n};\n\n/**\n * Compares numbers by numeric value, otherwise uses the default\n * logic of string comparison.\n *\n * Is an ascending sort:\n * * b, a, c -> a, b, c\n * * 10, 5, 100 -> 5, 10, 100\n * \n * Returns -1 if x is less than y\n * Returns 1 if x is greater than y\n * Returns 0 if x is the same as y\n * @param x\n * @param y\n * @see {@link comparerInverse} Inverted order\n * @returns\n */\nexport const defaultComparer = (x: unknown, y: unknown): CompareResult => {\n if (typeof x === `number` && typeof y === `number`) {\n return numericComparer(x, y);\n }\n return jsComparer(x, y);\n};\n\n\n/**\n * Default sort comparer, following same sematics as Array.sort.\n * Consider using {@link defaultComparer} to get more logical sorting of numbers.\n *\n * Note: numbers are sorted in alphabetical order, eg:\n * ```js\n * [ 10, 20, 5, 100 ].sort(jsComparer); // same as .sort()\n * // Yields: [10, 100, 20, 5]\n * ```\n * \n * Returns -1 if x is less than y\n * Returns 1 if x is greater than y\n * Returns 0 if x is the same as y\n * @param x\n * @param y\n * @returns\n */\n\nexport const jsComparer = (x: unknown, y: unknown): CompareResult => {\n // ✔️ Unit tested\n\n // Via https://stackoverflow.com/questions/47334234/how-to-implement-array-prototype-sort-default-compare-function\n if (x === undefined && y === undefined) return 0;\n if (x === undefined) return 1;\n if (y === undefined) return -1;\n\n const xString = defaultToString(x);\n const yString = defaultToString(y);\n\n if (xString < yString) return -1;\n if (xString > yString) return 1;\n return 0;\n};\n\nexport const defaultToString = (object: unknown): string => {\n //ECMA specification: http://www.ecma-international.org/ecma-262/6.0/#sec-tostring\n if (object === null) return `null`;\n if (typeof object === `boolean` || typeof object === `number`) {\n return object.toString();\n }\n\n if (typeof object === `string`) return object;\n if (typeof object === `symbol`) throw new TypeError(`Symbol cannot be converted to string`);\n return JSON.stringify(object);\n};","import { defaultComparer } from \"./compare.js\";\nimport { type KeyValue } from \"./primitive-types.js\";\n\nexport type KeyValueSorter = (data: readonly KeyValue[]) => KeyValue[];\n\nexport type SortSyles = `value` | `value-reverse` | `key` | `key-reverse`;\nexport const getSorter = (sortStyle: SortSyles): KeyValueSorter => {\n switch (sortStyle) {\n case `value`: {\n return sorterByValueIndex(1, false);\n }\n case `value-reverse`: {\n return sorterByValueIndex(1, true);\n }\n case `key`: {\n return sorterByValueIndex(0, false);\n }\n case `key-reverse`: {\n return sorterByValueIndex(0, true);\n }\n default: {\n throw new Error(`Unknown sorting value '${ (sortStyle as string) }'. Expecting: value, value-reverse, key or key-reverse`);\n }\n }\n};\n\nconst sorterByValueIndex = (index: number, reverse = false) => {\n return (values: readonly KeyValue[]) => {\n const s:KeyValue[] = values.toSorted((a:KeyValue, b:KeyValue) => defaultComparer(a[ index ], b[ index ]));\n if (reverse) return s.reverse();\n return s;\n }\n}","import type { HistogramVis } from \"./histogram-vis.js\";\nimport {type KeyValueSorter, getSorter} from \"../util/key-value.js\";\n\n/**\n * Creates and drives a HistogramVis instance.\n * Data should be an outer array containing two-element arrays for each\n * data point. The first element of the inner array is expected to be the key, the second the frequency.\n * For example, `[`apples`, 2]` means the key `apples` was counted twice.\n *\n * Usage:\n * .sortBy() automatically sorts prior to visualisation. By default off.\n * .update(data) full set of data to plot\n * .clear() empties plot - same as calling `update([])`\n * .el - The `HistogramVis` instance, or undefined if not created/disposed\n *\n * ```\n * const plot = new FrequencyHistogramPlot(document.getElementById('histogram'));\n * plot.sortBy('key'); // Automatically sort by key\n * ...\n * plot.update([[`apples`, 2], [`oranges', 0], [`bananas`, 5]])\n * ```\n *\n * @export\n * @class FrequencyHistogramPlot\n */\nexport class FrequencyHistogramPlot {\n\treadonly el: HistogramVis | undefined;\n\t#sorter: KeyValueSorter | undefined;\n\tconstructor(el: HistogramVis) {\n\t\tthis.el = el;\n\t}\n\n\tsetAutoSort(\n\t\tsortStyle: `value` | `value-reverse` | `key` | `key-reverse`,\n\t): void {\n\t\tthis.#sorter = getSorter(sortStyle);\n\t}\n\n\tclear() {\n\t\tif (this.el === undefined) return;\n\t\tthis.el.data = [];\n\t}\n\n\tdispose() {\n\t\tconst el = this.el;\n\t\tif (el === undefined) return; // already disposed\n\t\tel.remove();\n\t}\n\n\tupdate(data: readonly (readonly [key: string, count: number])[]) {\n\t\tif (this.el === undefined) {\n\t\t\tconsole.warn(`FrequencyHistogramPlot this.el undefined`);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.el.data =\n\t\t\tthis.#sorter === undefined\n\t\t\t\t? [...data]\n\t\t\t\t: this.#sorter(data);\n\t}\n}\n","import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){const d=l(s),{values:p,keys:a}=this.dt(t,r,c);if(!Array.isArray(d))return this.ut=a,p;const h=this.ut??=[],v=[];let m,y,x=0,j=d.length-1,k=0,w=p.length-1;for(;x<=j&&k<=w;)if(null===d[x])x++;else if(null===d[j])j--;else if(h[x]===a[k])v[k]=o(d[x],p[k]),x++,k++;else if(h[j]===a[w])v[w]=o(d[j],p[w]),j--,w--;else if(h[x]===a[w])v[w]=o(d[x],p[w]),i(s,v[w+1],d[x]),x++,w--;else if(h[j]===a[k])v[k]=o(d[j],p[k]),i(s,d[x],d[j]),j--,k++;else if(void 0===m&&(m=u(a,k,w),y=u(h,x,j)),m.has(h[x]))if(m.has(h[j])){const e=y.get(a[k]),t=void 0!==e?d[e]:null;if(null===t){const e=i(s,d[x]);o(e,p[k]),v[k]=e}else v[k]=o(t,p[k]),i(s,d[x],t),d[e]=null;k++}else n(d[j]),j--;else n(d[x]),x++;for(;k<=w;){const e=i(s,v[w+1]);o(e,p[k]),v[k++]=e}for(;x<=j;){const e=d[x++];null!==e&&n(e)}return this.ut=a,f(s,v),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","import { LitElement, css, html } from \"lit\";\nimport { customElement } from \"lit/decorators/custom-element.js\";\nimport { property } from \"lit/decorators/property.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { type KeyValue } from \"../util/primitive-types.js\";\n\ntype Bar = {\n\treadonly percentage: number;\n\treadonly data: KeyValue;\n};\n\nconst jsonData = (object: unknown) => {\n\tif (object === null || object === undefined || object === `undefined`) return;\n\ttry {\n\t\tif (typeof object === `string`) {\n\t\t\tif (object.length === 0) return;\n\t\t\tconst o = JSON.parse(object) as object;\n\t\t\tif (!Array.isArray(o)) {\n\t\t\t\tconsole.error(`Histogram innerText should be JSON array`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const [index, element] of o.entries()) {\n\t\t\t\tif (!Array.isArray(element)) {\n\t\t\t\t\tconsole.error(`Histogram array should consist of inner arrays`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (element.length !== 2) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`Histogram inner arrays should consist of two elements`,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (typeof element[0] !== `string`) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`First element of inner array should be a string (index ${index})`,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (typeof element[1] !== `number`) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`Second element of inner array should be a number (index ${index})`,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t \n\t\t\treturn o as unknown[];\n\t\t}\n\t} catch (error) {\n\t\tconsole.log(object);\n\t\tconsole.error(error);\n\t}\n\treturn;\n};\n\n/**\n * Usage in HTML:\n * ```html\n * <style>\n * histogram-vis {\n * display: block;\n * height: 7em;\n * --histogram-bar-color: pink;\n * }\n * </style>\n * <histogram-vis>\n * [\n * [\"apples\", 5],\n * [\"oranges\", 3],\n * [\"pineapple\", 0],\n * [\"limes\", 9]\n * ]\n * </histogram-vis>\n * ```\n *\n * CSS colour theming:\n * --histogram-bar-color\n * --histogram-label-color\n *\n * HTML tag attributes\n * showXAxis (boolean)\n * showDataLabels (boolean)\n *\n * @export\n * @class HistogramVis\n * @extends {LitElement}\n **/\n@customElement(`histogram-vis`)\nexport class HistogramVis extends LitElement {\n\tstatic readonly styles = css`\n :host {\n }\n div.container {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n div.chart {\n display: grid;\n flex: 1;\n grid-template-rows: 1fr 1px min-content;\n justify-items: center;\n }\n div.bar {\n display: flex;\n flex-direction: column-reverse;\n align-items: center;\n justify-self: normal;\n padding-left: 0.3vw;\n padding-right: 0.3vw;\n }\n div.bar > div.barTrack {\n background-color: var(--histogram-bar-color, gray);\n align-self: stretch;\n }\n div.xAxisLabels,\n div.data {\n font-size: min(1vw, 1em);\n color: var(--histogram-label-color, currentColor);\n }\n div.xAxisLabels {\n width: 100%;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n text-align: center;\n }\n div.xAxis {\n background-color: var(--histogram-axis-color, silver);\n width: 100%;\n height: 100%;\n }\n `;\n\n\t@property()\n\tdeclare data: readonly KeyValue[];\n\n\t@property()\n\tdeclare showDataLabels: boolean;\n\n\t@property()\n\tdeclare height: string;\n\n\t@property()\n\tdeclare showXAxis: boolean;\n\n\t@property({ converter: jsonData, type: Object })\n\tdeclare json: readonly KeyValue[] | undefined;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.data = [];\n\t\tthis.showDataLabels = true;\n\t\tthis.height = `100%`;\n\t\tthis.showXAxis = true;\n\t\tthis.json = undefined;\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.hasAttribute(`json`)) {\n\t\t\tthis.setAttribute(`json`, this.innerText);\n\t\t}\n\t\tsuper.connectedCallback();\n\t}\n\n\tbarTemplate(bar: Bar, index: number, _totalBars: number) {\n\t\tconst { percentage } = bar;\n\t\tconst [key, freq] = bar.data;\n\n\t\t// grid-area: rowStart / gridColStart / gridRowEnd / gridColEnd\n\t\tconst rowStart = 1;\n\t\tconst rowEnd = 2;\n\t\tconst colStart = index + 1;\n\t\tconst colEnd = colStart + 1;\n\n\t\tconst dataLabel = html`<div class=\"data\">${freq}</div>`;\n\t\tconst xAxis = html`${key}`;\n\t\treturn html`\n <div\n class=\"bar\"\n style=\"grid-area: ${rowStart} / ${colStart} / ${rowEnd} / ${colEnd}\"\n >\n <div class=\"barTrack\" style=\"height: ${(percentage ?? 0) * 100}%\"></div>\n ${this.showDataLabels ? dataLabel : ``}\n </div>\n <div\n class=\"xAxisLabels\"\n style=\"grid-area: ${rowStart + 2} / ${colStart} / ${\n\t\t\t\t\t\t\t\trowEnd + 2\n\t\t\t\t\t\t\t} / ${colEnd}\"\n >\n ${this.showXAxis ? xAxis : ``}\n </div>\n `;\n\t}\n\n\trender() {\n\t\tif (\n\t\t\t(this.data === undefined || this.data.length === 0) &&\n\t\t\tthis.json === undefined\n\t\t) {\n\t\t\treturn html``;\n\t\t}\n\t\tconst d = this.data ?? this.json;\n\t\tconst length = d.length;\n\t\tconst highestCount = Math.max(...d.map((d) => d[1] as number));\n\t\tconst bars = d.map((kv) => ({\n\t\t\tdata: kv,\n\t\t\tpercentage: (kv[1] as number) / highestCount,\n\t\t}));\n\n\t\tconst xAxis = html`\n <div\n class=\"xAxis\"\n style=\"grid-area: 2 / 1 / 3 / ${d.length + 1}\"\n ></div>\n `;\n\t\tconst height = this.height ? `height: ${this.height};` : ``;\n\t\tconst h = html`\n <style>\n div.chart {\n grid-template-columns: repeat(${d.length}, minmax(2px, 1fr));\n }\n </style>\n <div class=\"container\" style=\"${height}\">\n <div class=\"chart\">\n ${repeat(\n\t\t\t\t\t\t\t\t\tbars,\n\t\t\t\t\t\t\t\t\t(bar) => bar.data[0],\n\t\t\t\t\t\t\t\t\t(b, index) => this.barTemplate(b, index, length),\n\t\t\t\t\t\t\t\t)}\n ${this.showXAxis ? xAxis : ``}\n </div>\n </div>\n `;\n\t\treturn h;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\treadonly \"histogram-vis\": HistogramVis;\n\t}\n}\n","export * from './dial.js';\nexport * from './selecthorizontal.js'\nexport * from './crumb-navigation.js'\nexport * from './crumb-nav.js'\nexport * from './tabs/tab-list-item.js';\nexport * from './tabs/tab-list.js';\nexport * from './tabs/tab-panels.js';\nexport * from './tabs/tab-panel.js';\nexport * from './split-layout/split-layout.js';\nexport * from './charts/plot.js';\nexport * from './charts/frequency-histogram-plot.js';\nexport * from './charts/histogram-vis.js';\n\nexport const init = () => {\n console.log(`Init`);\n}"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,9,10,11,12,15,18,30],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["t","e","s","o","n","r","i","S","c","i","e","h","r","o","n","a","c","l","p","d","t","s","u","f","b","t","i","s","e","h","o","n","r","l","c","u","d","f","v","m","p","y","a","x","M","s","t","r","e","o","e","o","t","o","t","e","r","n","i","s","e","t","c","o","e","n","r","s","c","t","piPi","arc: CircleArc","anchor: CircleArcAnchor","arc: CircleArcDefined","t: number","t","track: CircleArcDefined","startAngle: number","endAngle: number","cw: boolean","part: ArcPart","t","o","i","n","e","c","f","r","l","d","u","h","t","e","i","s","i","t","e","o","c","h","n","r","e","o","n","s","i","t","el: HTMLElement","selectAll: boolean","createRef","#onKeyDown","#onBlur","data: SvgEditLabelData","ref","#onValueClick","x","y","#onEditMode","enabled: boolean","w","h","#blurBound","#keyDownBound","#renderEdit","#renderLabel","event: Event","event: KeyboardEvent","focusContentEditable","c","r","d","i","DialElement","LitElement","createRef","#onPointerDown","#onPointerDrag","#onDragStop","#editableLabel","f","#setValue","vars: Variables","arc: CircleArc.CircleArcDefined","x","y","textAnchor: SvgEditLabelData[ 'anchor' ]","value: number","part: CircleArc.ArcPart","arcSvgBits: string[]","arcPart","d","s","radius: number","fill: string","c","#computeArc","circlePre: CircleArc.CircleArc","#getBipolarValue","#getUnipolarValue","terminators: TemplateResult[]","#renderPoints","#computeTextLabelPosition","#onPointerDownBound","#renderTrackArc","#renderKnob","#renderValueArc","_event: PointerEvent","#onPointerDragBound","#onDragStopBound","event: PointerEvent","r","_changedProperties: PropertyValues","event: WheelEvent","amount: number","event: KeyboardEvent","fn: (value: number) => string","#valueToLabel","property","customElement","SelectHorizontalElement","LitElement","property","customElement","o","t","f","i","n","CrumbNavigationElement","LitElement","t","event: MouseEvent","n","#setSelected","node: Trees.TreeNode<CrumbNavigationPart>","#previousSelectionKey","c","_changedProperties: PropertyValues","hsiElement: HTMLElement","ulElement: HTMLElement","btnExpand: HTMLElement","#scrollToValue","li: HTMLLIElement","l","#onPartClick","p","v","#renderFinalOption","join","s","#renderOptions","preselectKey: string","#onSubPartClick","property","customElement","CrumbNavElement","LitElement","_changedProperties: PropertyValues","path: string","segments: CrumbNavigation2Part[]","s","s: CrumbNavigation2Part","i: number","i","event: MouseEvent","event: KeyboardEvent","property","customElement","TabListItemElement","LitElement","property","customElement","TabListElement","LitElement","#onKeyUp","#onSlotClick","event: KeyboardEvent","#selectPrevious","#selectNext","#isSelected","el: HTMLElement","v","prev: HTMLElement | undefined","event: MouseEvent","t","property","queryAssignedElements","customElement","TabPanelElement","LitElement","customElement","TabPanelsElement","LitElement","#isSelected","el: TabPanelElement","el: TabListElement","t","id: string","#unselect","#select","queryAssignedElements","customElement","SplitLayoutElement","LitElement","#onResizeHandleDown","event: PointerEvent","#elementBounds","#onResizeHandleUp","#onResizeHandleMove","y","x","property","customElement","a: Numbers.NumericRange | undefined","b: Numbers.NumericRange | undefined","a","b","v: number","v","name: string","value: number[]","series: Iterable<PlotSeries>","r","#persistentScale","#currentScalerRange","#currentScaler","seriesOnAxis: Iterable<PlotSeries>","s","PlotElement","LitElement","createRef","_seriesName: string","c","#autoSeriesColour","#series","seriesName: string","createIfNeeded: boolean","f","#seriesFormatting","formatting: Partial<SeriesFormatting>","query: string","#lastPointerPosition","#hideTooltip","event: PointerEvent","#updateToolTip","#hitboxes","#setTooltip","innerHtml: string","#canvas","#drawing","_changedProperties: PropertyValues","#setupCanvas","#hasDirty","#legendColour","values: number[]","automaticallyDraw: boolean","value: object","p","values: number[] | number","d","#drawLineSeries","#drawBarSeries","#drawDotSeries","cl: RectPositioned","d: DrawingHelper","x","y","m","series: PlotSeries","scaler: (v: number) => number","plotDataArea: Rect","plotDataAreaOffset: Point","h","hitboxes: DataPointHitbox[]","c: CanvasHelper","plotHeight: number","axisYwidth: number","padding: number","_c: CanvasHelper","maxWidth: number","#swatchSize","seriesDefault: PlotSeriesDefault","#onPointerLeave","#onPointerMove","ref","property","customElement","s: FillDrawStyle","s: OutlineDrawStyle","plot: PlotElement","#data","column: number","index: number","value: number[] | number","#capacityLimit","#dirty","values: number[][]","value: boolean","#onPrimaryAxis","x: number","y: number","x","y","x: unknown","y: unknown","object: unknown","sortStyle: SortSyles","index: number","values: readonly KeyValue[]","s:KeyValue[]","a:KeyValue","b:KeyValue","a","b","s","el: HistogramVis","sortStyle: `value` | `value-reverse` | `key` | `key-reverse`","#sorter","data: readonly (readonly [key: string, count: number])[]","e","s","t","r","l","o","i","c","d","p","a","h","v","m","y","x","j","k","w","n","f","object: unknown","o","HistogramVis","LitElement","bar: Bar","index: number","_totalBars: number","d","h","repeat","b","property","customElement"],"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/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/base.js","../node_modules/@lit/reactive-element/decorators/query-assigned-elements.js","../src/util/circle-arc.ts","../node_modules/lit-html/directive-helpers.js","../node_modules/lit-html/directive.js","../node_modules/lit-html/async-directive.js","../node_modules/lit-html/directives/ref.js","../src/util/content-editable.ts","../src/util/svg-editable-text.ts","../node_modules/@oxc-project/runtime/src/helpers/esm/decorate.js","../src/dial.ts","../src/selecthorizontal.ts","../node_modules/lit-html/directives/join.js","../src/crumb-navigation.ts","../src/crumb-nav.ts","../src/tabs/tab-list-item.ts","../src/tabs/tab-list.ts","../src/tabs/tab-panel.ts","../src/tabs/tab-panels.ts","../src/split-layout/split-layout.ts","../src/charts/plot.ts","../src/util/compare.ts","../src/util/key-value.ts","../src/charts/frequency-histogram-plot.ts","../node_modules/lit-html/directives/repeat.js","../src/charts/histogram-vis.ts","../src/index.ts"],"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","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{defaultConverter as t,notEqual as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function o(o){return(e,n)=>{const{slot:r,selector:s}=o??{},c=\"slot\"+(r?`[name=${r}]`:\":not([name])\");return t(e,n,{get(){const t=this.renderRoot?.querySelector(c),e=t?.assignedElements(o)??[];return void 0===s?e:e.filter((t=>t.matches(s)))}})}}export{o as queryAssignedElements};\n//# sourceMappingURL=query-assigned-elements.js.map\n","import { Circles, radianToDegree, radianArc } from \"ixfx/geometry.js\";\nimport type { Point } from \"ixfx/geometry.js\";\n\nconst piPi = Math.PI * 2;\n//const halfPi = Math.PI / 2;\n\nexport type CircleArcAnchor = `south` | `south-east` | `east` | `north`;\n\nexport type CircleArc = {\n radius: number\n anchor?: CircleArcAnchor,\n rangeRadian?: number\n x: number,\n y: number\n}\n\nexport type CircleArcDefined = CircleArc & {\n startPoint: Point,\n startAngle: number,\n endPoint: Point,\n endAngle: number,\n midPoint: Point,\n midAngle: number,\n rotation: number\n rangeRadian: number\n anchor: CircleArcAnchor\n invert: boolean\n}\n\nexport const precompute = (arc: CircleArc): CircleArcDefined => {\n let rotation = 0;\n const anchor: CircleArcAnchor = arc.anchor ?? `south`;\n const rangeRadian = arc.rangeRadian ?? radianToDegree(300);\n let invert = false;\n switch (anchor) {\n case `east`:\n break;\n case `south-east`:\n rotation = -Math.PI / 4; // 0 at south-east\n break;\n case `north`:\n rotation = Math.PI / 2;\n invert = true;\n break;\n case `south`:\n default:\n //90 - (range / 2);\n rotation = (Math.PI * 3) / 2\n }\n const rangeRemainder = piPi - rangeRadian;\n let startAngle = rotation - (rangeRemainder / 2);\n let endAngle = rotation + (rangeRemainder / 2);\n const midAngle = rotation - Math.PI;\n\n if (invert) {\n const oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n\n //console.log(`start: ${ startAngle } end:${ endAngle } range: ${ rangeRadian } remain: ${ rangeRemainder }`);\n const startPoint = Circles.pointOnPerimeter(arc, startAngle);\n const endPoint = Circles.pointOnPerimeter(arc, endAngle);\n const midPoint = Circles.pointOnPerimeter(arc, midAngle);\n return {\n ...arc,\n anchor,\n rangeRadian,\n midPoint, midAngle,\n startPoint, endPoint, rotation,\n startAngle, endAngle, invert\n }\n}\n\nexport const interpolatePoint = (arc: CircleArcDefined, t: number): Point => {\n const angle = arc.rangeRadian * t;\n return Circles.pointOnPerimeter(arc, arc.startAngle - angle);\n}\n\n\nexport type ArcPart = {\n startPoint: Point\n startAngle: number\n endPoint: Point\n endAngle: number\n range: number\n}\nexport const arcPart = (track: CircleArcDefined, startAngle: number, endAngle: number, cw: boolean): ArcPart => {\n const startPoint = Circles.pointOnPerimeter(track, startAngle);\n const endPoint = Circles.pointOnPerimeter(track, endAngle);\n return {\n startPoint, endPoint, startAngle, endAngle,\n range: radianArc(startAngle, endAngle, cw)\n }\n\n // const startPoint = start ? interpolatePoint(arc, start) : arc.startPoint;\n // const endPoint = end ? interpolatePoint(arc, end) : arc.endPoint;\n // return {\n // ...arc,\n // startPoint, endPoint\n // }\n}\n\nexport const partToSvg = (arc: CircleArc, part: ArcPart, largeArc = true, clockwise = true) => {\n const rotation = 0\n return [\n `M ${ part.startPoint.x } ${ part.startPoint.y }`,\n `A ${ arc.radius } ${ arc.radius } ${ rotation } ${ largeArc ? `1` : `0` } ${ clockwise ? `1` : `0` } ${ part.endPoint.x } ${ part.endPoint.y }`\n ]\n}\nexport const toSvg = (arc: CircleArcDefined, largeArc = true, clockwise = true) => {\n const rotation = 0\n return [\n `M ${ arc.startPoint.x } ${ arc.startPoint.y }`,\n `A ${ arc.radius } ${ arc.radius } ${ rotation } ${ largeArc ? `1` : `0` } ${ clockwise ? `1` : `0` } ${ arc.endPoint.x } ${ arc.endPoint.y }`\n ]\n}","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,n={HTML:1,SVG:2,MATHML:3},e=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,l=o=>null!=o?._$litType$?.h,d=o=>void 0!==o?._$litDirective$,c=o=>o?._$litDirective$,f=o=>void 0===o.strings,r=()=>document.createComment(\"\"),s=(o,i,n)=>{const e=o._$AA.parentNode,l=void 0===i?o._$AB:i._$AA;if(void 0===n){const i=e.insertBefore(r(),l),d=e.insertBefore(r(),l);n=new t(i,d,o,o.options)}else{const t=n._$AB.nextSibling,i=n._$AM,d=i!==o;if(d){let t;n._$AQ?.(o),n._$AM=o,void 0!==n._$AP&&(t=o._$AU)!==i._$AU&&n._$AP(t)}if(t!==l||d){let o=n._$AA;for(;o!==t;){const t=o.nextSibling;e.insertBefore(o,l),o=t}}}return n},v=(o,t,i=o)=>(o._$AI(t,i),o),u={},m=(o,t=u)=>o._$AH=t,p=o=>o._$AH,M=o=>{o._$AR(),o._$AA.remove()},h=o=>{o._$AR()};export{n as TemplateResultType,h as clearPart,p as getCommittedValue,c as getDirectiveClass,s as insertPart,l as isCompiledTemplateResult,d as isDirectiveResult,i as isPrimitive,f as isSingleExpression,e as isTemplateResult,M as removePart,v as setChildPartValue,m as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{isSingleExpression as i}from\"./directive-helpers.js\";import{Directive as t,PartType as e}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=(i,t)=>{const e=i._$AN;if(void 0===e)return!1;for(const i of e)i._$AO?.(t,!1),s(i,t);return!0},o=i=>{let t,e;do{if(void 0===(t=i._$AM))break;e=t._$AN,e.delete(i),i=t}while(0===e?.size)},r=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(void 0===e)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),c(t)}};function h(i){void 0!==this._$AN?(o(this),this._$AM=i,r(this)):this._$AM=i}function n(i,t=!1,e=0){const r=this._$AH,h=this._$AN;if(void 0!==h&&0!==h.size)if(t)if(Array.isArray(r))for(let i=e;i<r.length;i++)s(r[i],!1),o(r[i]);else null!=r&&(s(r,!1),o(r));else s(this,i)}const c=i=>{i.type==e.CHILD&&(i._$AP??=n,i._$AQ??=h)};class f extends t{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,e){super._$AT(i,t,e),r(this),this.isConnected=i._$AU}_$AO(i,t=!0){i!==this.isConnected&&(this.isConnected=i,i?this.reconnected?.():this.disconnected?.()),t&&(s(this,i),o(this))}setValue(t){if(i(this._$Ct))this._$Ct._$AI(t,this);else{const i=[...this._$Ct._$AH];i[this._$Ci]=t,this._$Ct._$AI(i,this,0)}}disconnected(){}reconnected(){}}export{f as AsyncDirective,t as Directive,e as PartType};\n//# sourceMappingURL=async-directive.js.map\n","import{nothing as t}from\"../lit-html.js\";import{AsyncDirective as i}from\"../async-directive.js\";import{directive as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=()=>new h;class h{}const o=new WeakMap,n=s(class extends i{render(i){return t}update(i,[s]){const e=s!==this.G;return e&&void 0!==this.G&&this.rt(void 0),(e||this.lt!==this.ct)&&(this.G=s,this.ht=i.options?.host,this.rt(this.ct=i.element)),t}rt(t){if(this.isConnected||(t=void 0),\"function\"==typeof this.G){const i=this.ht??globalThis;let s=o.get(i);void 0===s&&(s=new WeakMap,o.set(i,s)),void 0!==s.get(this.G)&&this.G.call(this.ht,void 0),s.set(this.G,t),void 0!==t&&this.G.call(this.ht,t)}else this.G.value=t}get lt(){return\"function\"==typeof this.G?o.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});export{e as createRef,n as ref};\n//# sourceMappingURL=ref.js.map\n","export const focus = (el: HTMLElement, selectAll: boolean) => {\n el.focus();\n if (selectAll) {\n const range = document.createRange();\n range.selectNodeContents(el);\n const sel = window.getSelection();\n if (sel) {\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n}\n\n","import { css, svg } from \"lit\";\nimport { createRef, type Ref, ref } from 'lit/directives/ref.js';\nimport { focus as focusContentEditable } from \"./content-editable.js\";\n\nexport type SvgEditLabelData = {\n editMode: boolean\n hideValue: boolean\n x: number\n y: number\n anchor: `start` | `middle` | `end`\n displayValue: number | string\n editValue: number | string\n fill: string\n}\n\nexport class SvgEditLabel extends EventTarget {\n textRef: Ref<SVGTextElement> = createRef();\n editorRef: Ref<HTMLDivElement> = createRef();\n\n #keyDownBound = this.#onKeyDown.bind(this);\n #blurBound = this.#onBlur.bind(this);\n\n onEditMode?: (enabled: boolean, source: SvgEditLabel) => void;\n\n //valueToLabel?: (value: any) => string;\n onInput?: (value: string) => void;\n\n #renderLabel(data: SvgEditLabelData) {\n const { fill, x, y, displayValue, anchor, hideValue } = data;\n if (hideValue) {\n return svg``;\n }\n return svg`<text ${ ref(this.textRef) } id=\"label-value\" @click=${ () => this.#onValueClick() } fill=${ fill } text-anchor=${ anchor } x=${ x } y=${ y }>${ displayValue }</text>`\n }\n\n #onValueClick() {\n this.#onEditMode(true);\n }\n\n #onEditMode(enabled: boolean) {\n if (this.onEditMode !== undefined) this.onEditMode(enabled, this);\n this.dispatchEvent(new CustomEvent(`edit-mode`, {\n detail: {\n enabled: enabled\n }\n }));\n }\n\n #renderEdit(data: SvgEditLabelData) {\n let { anchor, editValue, x, y } = data;\n let w = 5;\n let h = 5;\n if (this.textRef.value) {\n const bbox = this.textRef.value.getBBox();\n x = x - bbox.width / 2;\n y = y - bbox.height + 4.5;\n w = bbox.width + 5;\n h = bbox.height;\n }\n\n return svg`\n <foreignObject text-anchor=${ anchor } width=${ w } height=${ h } x=${ x } y=${ y }>\n <div ${ ref(this.editorRef) } @blur=${ this.#blurBound } @keydown=${ this.#keyDownBound } xmlns=\"http://www.w3.org/1999/xhtml\" tab-index=0 contentEditable=true>${ editValue }</div>\n </foreignObject>`\n }\n\n render(data: SvgEditLabelData) {\n if (data.editMode) {\n return this.#renderEdit(data);\n } else {\n return this.#renderLabel(data);\n }\n }\n\n #onBlur(event: Event): void {\n const rawValue = (event.target as HTMLDivElement).innerText;\n if (this.onInput) {\n this.onInput(rawValue);\n }\n this.#onEditMode(false);\n }\n\n #onKeyDown(event: KeyboardEvent) {\n const key = event.key;\n //const shift = event.shiftKey;\n if (key === `Escape`) {\n this.#onEditMode(false)\n return;\n } else if (key === `Enter`) {\n const rawValue = (event.target as HTMLDivElement).innerText;\n if (this.onInput) {\n this.onInput(rawValue);\n }\n this.#onEditMode(false);\n return;\n }\n }\n\n onUpdated() {\n if (this.editorRef.value) {\n focusContentEditable(this.editorRef.value, true);\n }\n }\n\n\n\n // protected override updated(_changedProperties: PropertyValues): void {\n // if (!this.shadowRoot) return;\n // const labelSvgEl = this.shadowRoot.querySelector(`#label-value`);\n // if (labelSvgEl) {\n // this.#textLabelBbox = (labelSvgEl as SVGTextElement).getBBox();\n // }\n\n // if (this.editMode) {\n // const labelValueEditor = this.shadowRoot.querySelector(`svg>foreignObject>div`);\n // if (labelValueEditor) {\n // focus(labelValueEditor as HTMLDivElement, true);\n // } else {\n // console.warn(`Label editor not found`);\n // }\n\n // }\n // //this.#textValueScreenCords = this.#SVGToScreen(this.#textValueSvgCoords);\n // }\n\n static styles = css`\n :host {\n display: inline-block;\n --value-label-color: unset;\n }\n input {\n font:unset;\n position:absolute;\n background:unset;\n }\n \n foreignObject>div {\n width:-webkit-fill-available;\n background:red;\n margin: 0;\n padding: 0;\n line-height: unset;\n }\n`\n}\n","// Copy from https://github.com/microsoft/TypeScript/blob/d85767abfd83880cea17cea70f9913e9c4496dcc/src/compiler/factory/emitHelpers.ts#L730-L742\n\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r =\n c < 3\n ? target\n : desc === null\n ? (desc = Object.getOwnPropertyDescriptor(target, key))\n : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n r = Reflect.decorate(decorators, target, key, desc);\n else\n for (var i = decorators.length - 1; i >= 0; i--)\n if ((d = decorators[i]))\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport { __decorate as default };\n","/* eslint-disable @typescript-eslint/unbound-method */\nimport { LitElement, html, css, svg, type TemplateResult, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { degreeToRadian, Points, radiansSum, radianArc } from 'ixfx/geometry.js';\nimport * as Numbers from 'ixfx/numbers.js';\nimport { getCssVariablesWithFallback } from 'ixfx/dom.js';\nimport * as CircleArc from './util/circle-arc.js';\nimport { SvgEditLabel, type SvgEditLabelData } from \"./util/svg-editable-text.js\";\nimport { createRef, type Ref } from \"lit/directives/ref.js\";\n\nexport type LabelPosition = `edge` | `inner` | `below`\nexport type ValueToLabelFormat = (value: number) => string;\nexport type NeedleStyle = `none` | `to-track` | `to-knob`;\n\ntype Variables = ReturnType<DialElement[ 'resolveVariables' ]>;\nconst piPi = Math.PI * 2;\n/**\n * Numeric DOM attributes\n * * rangeAngle: range of dial in degrees (default: 300)\n * * value, min, max, step, stepFine\n * * radius: max radius of dial (default: 0.5)\n * * textRelativeHeight: how much vertical space to give labels (default: 10)\n * \n * String DOM attributes\n * * rangeAnchor: `south`,`south-east`,`east`,`north` (default: `south`)\n * * labelPosition: `edge`|`inner`\n * * needleStyle: `none`, `to-track`, `to-knob`\n * * title: a caption for dial\n * \n * Boolean DOM attributes\n * * hideTitle, hideValue, hideTerminators, showKnob, bipolar\n * \n * CSS variables\n * --[track,needle,value]-width\n * --[track,needle,value]-color\n * --needle-start: relative to radius of circle. eg 0.6 starts needle 60% out from center (default: 0.6)\n * --needle_overshoot: % of increase of needle size (default: 0.2)\n * --value-label-color: colour of value label\n * --value-label-x: x offset (in 0..100 coords)\n * --value-label-y: y offset (in 0..100 coords)\n * --knob-color\n * --knob-radius: % of circle to use for knob (default: 0.8)\n */\n@customElement('ixfx-dial')\nexport class DialElement extends LitElement {\n @property({ type: Number })\n rangeAngle = 300;\n\n @property({ type: String })\n rangeAnchor: CircleArc.CircleArcAnchor = `south`;\n\n @property({ type: String })\n labelPosition: LabelPosition = `edge`;\n\n //@property({ type: Boolean })\n //hideTitle = false;\n @property({ type: Boolean })\n spread = false;\n\n @property({ type: Boolean })\n hideValue = false;\n\n @property({ type: Boolean })\n hideTerminators = false\n\n @property({ type: Boolean })\n showKnob = false;\n\n @property({ type: Boolean })\n bipolar = false;\n\n @property({ type: String })\n needleStyle: NeedleStyle = `to-track`;\n\n @property({ type: Number })\n value = 50;\n\n @property({ type: Number })\n step = 10;\n\n @property({ type: Number })\n stepFine = 1;\n\n @property({ type: Number })\n radius = 0.5;\n\n @property({ type: Number })\n min = 0;\n\n @property({ type: Number })\n max = 100;\n\n @property({ type: Number })\n textRelativeHeight = 5;\n\n //@property({ type: String })\n //title = ``;\n\n valueLabelRef: Ref<SvgEditLabel> = createRef();\n\n @property({ type: Object })\n valueLabel: SvgEditLabelData = {\n anchor: `start`,\n x: 0,\n fill: ``,\n hideValue: this.hideValue,\n y: 0,\n editMode: false,\n displayValue: 0,\n editValue: 0\n }\n\n #editableLabel;\n #onPointerDownBound = this.#onPointerDown.bind(this);\n #onPointerDragBound = this.#onPointerDrag.bind(this);\n #onDragStopBound = this.#onDragStop.bind(this);\n\n constructor() {\n super();\n this.#editableLabel = new SvgEditLabel();\n this.#editableLabel.onEditMode = (enabled, _source) => {\n this.valueLabel = {\n ...this.valueLabel,\n editMode: enabled\n }\n };\n this.#editableLabel.onInput = (value) => {\n const f = Number.parseFloat(value);\n if (Number.isNaN(f)) return;\n this.#setValue(f);\n }\n }\n\n #computeTextLabelPosition(vars: Variables, arc: CircleArc.CircleArcDefined) {\n let x = 0;\n let y = 0;\n let textAnchor: SvgEditLabelData[ 'anchor' ] = `middle`;\n\n if (this.labelPosition === `inner`) {\n x = arc.x;\n y = arc.y + this.textRelativeHeight / 4;\n } else {\n switch (this.rangeAnchor) {\n case `north`:\n x = 50;\n y = this.textRelativeHeight * 1.5;\n break;\n case `east`:\n x = 75; // need to measure width?\n y = 50;\n textAnchor = `start`;\n break;\n case `south-east`:\n x = 99;\n y = 90;\n textAnchor = `end`;\n break;\n default:\n x = 50;\n y = 95;\n }\n }\n x += vars.value_label_x;\n y += vars.value_label_y;\n return { x, y, anchor: textAnchor };\n }\n\n // #renderTitle() {\n // if (this.hideTitle) {\n // return svg``;\n // }\n\n // const textPos = { x: 50, y: (this.textRelativeHeight / 2) + 4 };\n // const textAnchor = `middle`;\n // return svg`<text text-anchor=${ textAnchor } x=${ textPos.x } y=${ textPos.y }>${ this.title }</text>`\n // }\n\n #computeArc(vars: Variables) {\n const textHeight = this.textRelativeHeight;\n let maxRadius = 50 - (Math.max(vars.track_width, vars.value_width) * 3);\n let middleY = 50;\n const cornerRange = (this.rangeAnchor === `south-east`);\n\n if (this.labelPosition === `below`) {\n maxRadius -= textHeight;\n middleY -= textHeight;\n }\n\n if (cornerRange) {\n middleY += textHeight / 2;\n maxRadius -= 3;\n } else {\n //maxRadius -= (textHeight / 2.5);\n //middleY += (textHeight / 2) - 3;\n }\n\n // if (!this.hideTitle) {\n\n // }\n // if (!this.hideValue && this.labelPosition !== `inner`) {\n // if (cornerRange) {\n // maxRadius -= (textHeight / 4);\n // } else {\n // maxRadius -= (textHeight / 4);\n // middleY -= textHeight / 4;\n // }\n // }\n //if (this.hideTitle && this.hideValue) middleY = 50;\n return {\n maxRadius,\n middleY\n }\n }\n\n #renderTrackArc(vars: Variables, value: number, arc: CircleArc.CircleArcDefined, part: CircleArc.ArcPart) {\n if (vars.track_width <= 0) return svg``;\n\n const hiddenTrack = vars.track_width <= vars.value_width;\n\n let largeArc = true;\n const clockwise = true;\n let arcSvgBits: string[] = [];\n if (hiddenTrack && !this.bipolar) {\n // Make an arc from end of value to end of range\n let startAt = part.endAngle - 0.1;\n const arcPart = CircleArc.arcPart(arc, startAt, arc.endAngle, true);\n const d = radianArc(startAt, arc.endAngle, true);\n if (value > 0.97) {\n arcSvgBits = CircleArc.toSvg(arc, largeArc, clockwise);\n } else {\n largeArc = d > Math.PI;\n arcSvgBits = CircleArc.partToSvg(arc, arcPart, largeArc, clockwise)\n }\n } else {\n arcSvgBits = CircleArc.toSvg(arc, largeArc, clockwise);\n }\n\n const s = svg`\n <path \n d=\"${ arcSvgBits.join(' ') }\" \n fill=\"none\"\n stroke-linecap=\"round\"\n stroke=\"${ vars.track_color }\" \n stroke-width=\"${ vars.track_width }\"\n />\n `\n return s;\n }\n\n #getBipolarValue(value: number, arc: CircleArc.CircleArcDefined) {\n if (value < 0.5) {\n const pc = Numbers.scale(value, 0, 0.5);\n const distance = radianArc(arc.startAngle, arc.midAngle, true) * pc;\n const startAngle = radiansSum(arc.startAngle, distance, false);\n return CircleArc.arcPart(arc, startAngle, arc.midAngle, true);\n } else {\n const pc = Numbers.scale(value, 0.5, 1);\n const distance = radianArc(arc.midAngle, arc.endAngle, true) * pc;\n const endAngle = radiansSum(arc.midAngle, distance, false);\n return CircleArc.arcPart(arc, arc.midAngle, endAngle, true);\n }\n }\n\n #getUnipolarValue(value: number, arc: CircleArc.CircleArcDefined) {\n const angle = value * arc.rangeRadian;\n const endAngle = Numbers.wrap(arc.startAngle - angle, 0, piPi);\n const arcValue = CircleArc.arcPart(arc, arc.startAngle, endAngle, true);\n return arcValue;\n }\n\n getRelativeValue() {\n return Numbers.scale(this.value, this.min, this.max);\n }\n\n #renderValueArc(vars: Variables, value: number, arc: CircleArc.CircleArcDefined, part: CircleArc.ArcPart) {\n let largeArc = false;\n const clockwise = !arc.invert;\n if (part.range > Math.PI) largeArc = true;\n const arcSvgBits = CircleArc.partToSvg(arc, part, largeArc, clockwise);\n const showValueArc = this.bipolar ? value === 0.5 : value === 0;\n\n const arcValueSvg = showValueArc ?\n svg`` :\n svg`<path \n d=\"${ arcSvgBits.join(' ') }\" \n fill=\"none\" \n stroke=\"${ vars.value_color }\" \n stroke-width=\"${ vars.value_width }\"\n />`\n const needleStart = vars.needle_start * arc.radius;\n let needleEnd = 1;\n\n switch (this.needleStyle) {\n case `none`:\n return arcValueSvg;\n case `to-knob`:\n needleEnd = vars.knob_radius * arc.radius;\n break;\n case `to-track`:\n needleEnd = arc.radius;\n break;\n }\n\n needleEnd += (vars.needle_overshoot * (needleEnd - needleStart));\n\n const line = {\n a: CircleArc.interpolatePoint({ ...arc, radius: needleStart }, value),\n b: CircleArc.interpolatePoint({ ...arc, radius: needleEnd }, value)\n }\n const needleLine = svg`<line\n x1=${ line.a.x }\n y1=${ line.a.y }\n x2=${ line.b.x }\n y2=${ line.b.y }\n stroke-linecap=\"round\"\n stroke=${ vars.needle_color }\n stroke-width=${ vars.needle_width }\n />`\n return [ arcValueSvg, needleLine ];\n }\n\n #renderKnob(vars: Variables, arc: CircleArc.CircleArcDefined) {\n if (!this.showKnob) return svg``;\n return svg`<circle r=${ arc.radius * vars.knob_radius } cx=${ arc.x } cy=${ arc.y } fill=${ vars.knob_color } />`\n }\n\n #renderPoints(radius: number, fill: string, ...circles: Points.Point[]) {\n return circles.map(c => svg`<circle fill=${ fill } r=${ radius } cx=${ c.x } cy=${ c.y } />`)\n }\n\n render() {\n const vars = this.resolveVariables();\n const arcSize = this.#computeArc(vars);\n\n const circlePre: CircleArc.CircleArc = {\n x: 50,\n y: arcSize.middleY,\n radius: arcSize.maxRadius,\n anchor: this.rangeAnchor,\n rangeRadian: degreeToRadian(this.rangeAngle)\n }\n const circle = CircleArc.precompute(circlePre);\n const relativeValue = this.getRelativeValue();\n const valueArc = this.bipolar ? this.#getBipolarValue(relativeValue, circle) : this.#getUnipolarValue(relativeValue, circle);\n let terminators: TemplateResult[] = [];\n const terminatorSize = Math.max(vars.value_width, vars.track_width);\n if (!this.hideTerminators) {\n let lightStart = this.value !== this.min;\n if (this.bipolar) lightStart = this.value === this.min;\n const atEnd = this.value === this.max;\n const startTerminator = this.#renderPoints(terminatorSize, lightStart ? vars.value_color : vars.track_color, circle.startPoint);\n const endTerminator = this.#renderPoints(terminatorSize, atEnd ? vars.value_color : vars.track_color, circle.endPoint);\n terminators = [ ...startTerminator, ...endTerminator ];\n }\n if (this.bipolar) {\n const mid = (this.max - this.min) / 2\n const atMid = this.value.toFixed(1) === mid.toFixed(1);\n const midPoint = svg`<circle @click=${ this.onMidpointClick } fill=${ atMid ? vars.value_color : vars.track_color } r=${ terminatorSize * 1.5 } cx=${ circle.midPoint.x } cy=${ circle.midPoint.y } />`\n terminators.push(midPoint);\n }\n\n const textLabelPos = this.#computeTextLabelPosition(vars, circle);\n this.valueLabel = {\n ...this.valueLabel,\n ...textLabelPos,\n hideValue: this.hideValue,\n displayValue: this.valueToLabel(this.value),\n editValue: this.value\n }\n\n return html`<svg tabindex=0 @pointerdown=${ this.#onPointerDownBound } @wheel=${ this.onMouseWheel } @keydown=${ this.onKeyDown } overflow=\"hidden\" viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n ${ this.#renderTrackArc(vars, relativeValue, circle, valueArc) }\n ${ this.#renderKnob(vars, circle) }\n ${ terminators }\n ${ this.#renderValueArc(vars, relativeValue, circle, valueArc) }\n ${ this.#editableLabel.render(this.valueLabel) }\n </svg>`;\n }\n\n #onPointerDown(_event: PointerEvent) {\n window.addEventListener(`pointermove`, this.#onPointerDragBound);\n window.addEventListener(`pointercancel`, this.#onDragStopBound);\n window.addEventListener(`pointerup`, this.#onDragStopBound);\n }\n\n #onPointerDrag(event: PointerEvent) {\n // Proportion of movement based on size of element\n const y = event.movementY / this.clientHeight;\n const r = this.range * y;\n this.#setValue(this.value - r);\n }\n\n #onDragStop() {\n window.removeEventListener(`pointerup`, this.#onDragStopBound);\n window.removeEventListener(`pointercancel`, this.#onDragStopBound);\n window.removeEventListener(`pointermove`, this.#onPointerDragBound);\n\n }\n\n protected updated(_changedProperties: PropertyValues): void {\n this.#editableLabel.onUpdated();\n }\n\n onMidpointClick() {\n this.#setValue((this.max - this.min) / 2);\n }\n\n /**\n * Manually sets the value, clamping to min/max range.\n * Fires 'change' event.\n * @param value \n * @returns \n */\n #setValue(value: number) {\n const old = this.value;\n value = Numbers.clamp(value, this.min, this.max);\n if (value === old) return;\n this.value = value;\n this.valueLabel = {\n ...this.valueLabel,\n displayValue: this.valueToLabel(value),\n editValue: value\n }\n this.dispatchEvent(new CustomEvent(`change`, {\n detail: {\n previousValue: old,\n newValue: value\n }\n }));\n }\n\n\n onMouseWheel(event: WheelEvent) {\n const shift = event.shiftKey;\n const amount = shift ? this.stepFine : this.step;\n this.deltaChange(amount * event.deltaY * 0.01);\n event.preventDefault()\n }\n\n deltaChange(amount: number) {\n this.#setValue(this.value + amount);\n }\n\n onKeyDown(event: KeyboardEvent) {\n const key = event.key;\n const shift = event.shiftKey;\n //const ctrl = event.ctrlKey;\n\n if (this.valueLabel.editMode) return;\n //console.log(`key: ${ key } ctrl: ${ ctrl }`);\n const amount = shift ? this.stepFine : this.step;\n if (key === `ArrowLeft` || key === `ArrowDown`) {\n this.deltaChange(-amount);\n } else if (key === `ArrowRight` || key === `ArrowUp`) {\n this.deltaChange(amount);\n } else if (Number.parseInt(key).toString() === key) {\n this.valueLabel = {\n ...this.valueLabel,\n editMode: true\n }\n }\n }\n\n onPointerMove(event: PointerEvent) {\n const { x, y } = event;\n console.log(`x: ${ x } y:${ y }`);\n }\n\n resolveVariables() {\n const vars = getCssVariablesWithFallback({\n track_width: 10,\n track_color: `gray`,\n value_width: 10,\n value_color: `red`,\n value_label_color: `unset`,\n value_label_x: 0,\n value_label_y: 0,\n needle_overshoot: 0.2,\n needle_start: 0.6,\n needle_color: `black`,\n needle_width: 10,\n knob_color: `black`,\n knob_radius: 0.8\n }, this);\n return vars;\n };\n set valueToLabel(fn: (value: number) => string) {\n this.#valueToLabel = fn;\n this.requestUpdate();\n }\n get valueToLabel() {\n return this.#valueToLabel;\n }\n get range() {\n return this.max - this.min;\n }\n\n\n #valueToLabel: ValueToLabelFormat = (value: number) => {\n return value.toFixed(1);\n }\n static styles = css`\n :host {\n display: inline-block;\n --value-label-color: unset;\n }\n text {\n user-select:none;\n }\n\n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-dial\": DialElement;\n }\n}","import { css, html, LitElement } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n\n@customElement('ixfx-selecthorizontal-element')\nexport class SelectHorizontalElement extends LitElement {\n @property({ type: Boolean })\n editMode = false;\n\n\n render() {\n console.log(`render`);\n return html`\n <option>pre</option>\n <slot></slot>\n <option>post</option>\n `;\n }\n\n static styles = css`\n :host {\n display: flex;\n overflow: scroll;\n width: 100%;\n scroll-snap-type: x mandatory;\n scrollbar-width: none;\n }\n \n ::slotted(*),option {\n user-select: none;\n scroll-snap-align: start;\n border: 1px solid silver;\n color:red;\n }\n`\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-selecthorizontal-element\": SelectHorizontalElement;\n }\n}","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction*o(o,t){const f=\"function\"==typeof t;if(void 0!==o){let i=-1;for(const n of o)i>-1&&(yield f?t(i):t),i++,yield n}}export{o as join};\n//# sourceMappingURL=join.js.map\n","import { css, html, LitElement, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { Trees } from 'ixfx/collections.js';\n\nimport { join } from \"lit/directives/join.js\";\nexport type CrumbNavigationPart = {\n label: string\n key: string\n}\n\n/**\n * Events\n * * 'change': yields newly selected node and previous\n * \n * CSS variables\n * * --text-highlight: red; // highlight on mouse hover\n * * --separator: silver; // text colour of separator character\n * * --padding-s: 0.12ch; // padding between items\n */\n@customElement('ixfx-crumb-navigation')\nexport class CrumbNavigationElement extends LitElement {\n @property({ type: Object })\n tree: Trees.TreeNode<CrumbNavigationPart>;\n\n @property({ type: Object })\n selectedNode: Trees.TreeNode<CrumbNavigationPart> | undefined;\n\n constructor() {\n super();\n const t = Trees.Mutable.createNode<CrumbNavigationPart>({ key: `root`, label: `root` });\n const nodeC = Trees.Mutable.addValue({ key: `c`, label: `c:` }, t);\n const nodeUsers = Trees.Mutable.addValue({ key: `users`, label: `users` }, nodeC);\n Trees.Mutable.addValue({ key: `guest`, label: `guest` }, nodeUsers);\n Trees.Mutable.addValue({ key: `ch`, label: `ch` }, nodeUsers);\n Trees.Mutable.addValue({ key: `admin`, label: `admin` }, nodeUsers);\n Trees.Mutable.addValue({ key: `jane`, label: `jane` }, nodeUsers);\n Trees.Mutable.addValue({ key: `barry`, label: `barry` }, nodeUsers);\n Trees.Mutable.addValue({ key: `reallylongoptionwow`, label: `reallylongoptionwow` }, nodeUsers);\n this.selectedNode = nodeUsers;\n this.tree = t;\n }\n\n #previousSelectionKey = ``;\n\n #onPartClick = (event: MouseEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n const part = (event.target as any).value as CrumbNavigationPart;\n\n // Find node for clicked part\n const n = Trees.Traverse.findAnyChildByValue(this.tree, part);\n\n if (n) {\n this.#setSelected(n);\n }\n }\n\n /**\n * Sets the selected node and fires event\n * @param node \n */\n #setSelected(node: Trees.TreeNode<CrumbNavigationPart>) {\n const previous = this.selectedNode;\n if (previous) {\n this.#previousSelectionKey = previous.value?.key ?? ``;\n } else {\n this.#previousSelectionKey = ``;\n }\n this.selectedNode = node;\n this.dispatchEvent(new CustomEvent(`change`, {\n detail: {\n selected: node,\n previous: previous\n }\n }))\n }\n\n #onSubPartClick = (event: MouseEvent) => {\n const currentlySelected = this.selectedNode;\n if (!currentlySelected) {\n console.warn(`Bug. No selectedNode`);\n return;\n }\n\n // const parentNode = currentlySelected.parent;\n // if (!parentNode) {\n // console.warn(`Bug. No parent node`);\n // console.log(currentlySelected);\n // return;\n // }\n const currentlySelectedKey = currentlySelected.value?.key;\n if (!currentlySelectedKey) {\n console.warn(`Bug. No key for selected value`);\n return;\n }\n\n // Selected option\n const li = event.target as HTMLLIElement;\n if (!li) {\n console.warn(`Bug. No LI element`);\n return;\n }\n\n const key = li.getAttribute(`data-key`) ?? ``;\n if (!key) {\n console.warn(`Bug. No data-key attribute`);\n return;\n }\n\n // Find the node\n for (const c of currentlySelected.childrenStore) {\n if (c.value?.key === key) {\n this.#setSelected(c);\n break;\n }\n }\n }\n\n protected updated(_changedProperties: PropertyValues): void {\n //if (!this.expanded) return;\n // const s = this.selectedNode;\n // if (!s) {\n // console.warn(`No selectedNode`);\n // return;\n // }\n // const selectedKey = s.value?.key;\n // if (!selectedKey) {\n // console.warn(`No .key on selectedNode.value`);\n // return;\n // }\n if (!this.shadowRoot) return;\n const hsiElement: HTMLElement = this.shadowRoot.querySelector(`.horiz-select-items`)!;\n if (!hsiElement) return;\n\n const ulElement: HTMLElement = hsiElement.querySelector(`ul`)!;\n const btnExpand: HTMLElement = this.shadowRoot.querySelector(`#btnExpand`)!;\n\n // Show expander button only when needed\n if (ulElement.getBoundingClientRect().width > hsiElement.getBoundingClientRect().width) {\n btnExpand.style.display = `inline`\n } else {\n btnExpand.style.display = `none`;\n }\n\n // Scroll container to find selected item\n for (const li of ulElement.querySelectorAll(`li`)) {\n const key = li.getAttribute(`data-key`) ?? ``;\n if (key === this.#previousSelectionKey) {\n this.#scrollToValue(li);\n break;\n }\n }\n }\n\n #scrollToValue(li: HTMLLIElement) {\n let l = li.offsetLeft;\n\n const ul = li.parentElement;\n if (!ul) return;\n l -= ul.offsetLeft;\n\n const horizSelectItems = ul.parentElement;\n if (!horizSelectItems) return;\n horizSelectItems.scroll({ left: l, top: 0, behavior: `smooth` });\n\n const horizSelect = horizSelectItems.parentElement;\n if (!horizSelect) return;\n horizSelect.style.minWidth = li.getBoundingClientRect().width + 'px';\n }\n render() {\n const t = this.tree;\n const sel = this.selectedNode ?? t;\n\n // Get parents of selected node\n let parts = [];\n parts.push(html`<div .value=${ sel.value } @click=${ this.#onPartClick }>${ sel.value?.label }</div>`)\n\n for (const p of Trees.Traverse.parents(sel)) {\n if (p.value === undefined) continue;\n const v = p.value;\n parts.push(html`<div .value=${ v } @click=${ this.#onPartClick }>${ v.label }</div>`)\n }\n parts.reverse();\n\n // Get available options at current location\n const currentOpt = this.#renderFinalOption();\n return html`<div class=\"parts\">${ join(parts, html`<span class=\"separator\">›</span>`) }</div>\n ${ currentOpt }`;\n }\n\n #renderFinalOption() {\n const s = this.selectedNode;\n if (s === undefined) {\n console.warn(`No selectedNode`);\n return html``; // Part missing\n }\n return this.#renderOptions(s, this.#previousSelectionKey);\n }\n\n #renderOptions(node: Trees.TreeNode<CrumbNavigationPart>, preselectKey: string) {\n if (node.childrenStore.length === 0) return html``;\n const options = node.childrenStore.map(c => html`<li class=\"${ c.value?.key === preselectKey ? `previous` : `` }\" @click=${ this.#onSubPartClick } data-key=${ c.value?.key }>${ c.value?.label }</li>`)\n return html`\n <span class=\"separator\">›</span>\n <div class=\"horiz-select\">\n <div class=\"horiz-select-items\">\n <ul>\n ${ options }\n </ul>\n </div>\n <div id=\"pop\" popover anchor=\"btnExpand\">\n <ul>\n ${ options }\n </ul>\n </div> \n <button popovertarget=\"pop\" id=\"btnExpand\">∧</button>\n </div>\n `\n }\n\n static styles = css`\n :host {\n --text-highlight: red;\n --separator: silver;\n --padding-s: 0.12ch;\n display: flex;\n overflow: scroll;\n width: 100%;\n scroll-snap-type: x mandatory;\n scrollbar-width: none;\n }\n #btnExpand {\n scale: 0.5;\n margin:0;\n }\n .parts {\n display: flex;\n }\n .parts > div {\n cursor: pointer;\n margin-right: var(--padding-s);\n\n }\n .parts > div:hover {\n color: var(--text-highlight);\n }\n \n .horiz-select {\n display:flex;\n min-width: 5ch;\n }\n .horiz-select-items {\n overflow-y: scroll;\n scrollbar-width: none;\n scroll-behavior: smooth;\n }\n\n .separator {\n margin-left: var(--padding-s);\n margin-right: var(--padding-s);\n color: var(--separator);\n }\n #pop {\n top: anchor(bottom);\n left: anchor(left);\n padding: 1ch;\n }\n #pop {\n ul {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n li {\n cursor: pointer;\n opacity: 0.8;\n }\n li.previous {\n opacity: 0.9;\n }\n li:hover {\n opacity: 1;\n }\n }\n\n .horiz-select-items {\n ul {\n list-style: none;\n padding: 0;\n margin: 0;\n display: inline;\n }\n \n li {\n display: inline;\n margin-left: var(--padding-s);\n margin-right: var(--padding-s);\n cursor: pointer;\n opacity: 0.3;\n }\n li.previous {\n opacity: 0.6;\n }\n li:hover {\n opacity: 1;\n }\n\n li:not(:last-child):after {\n content: ',';\n }\n }\n ::slotted(*),option {\n user-select: none;\n scroll-snap-align: start;\n border: 1px solid silver;\n color:red;\n }\n`\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-crumb-navigation\": CrumbNavigationElement;\n }\n}","/* eslint-disable @typescript-eslint/unbound-method */\nimport { css, html, LitElement, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n//import {Trees} from 'ixfx/collections.js';\n\nexport type CrumbNavigation2Part = {\n label: string\n key: string\n icon?: string\n showLabel?: boolean\n showIcon?: boolean\n ensureVisible?: boolean\n}\n\nexport type RequestPopup = (segment: CrumbNavigation2Part) => AsyncGenerator<CrumbNavigation2Part | CrumbNavigation2Part[]>\n/**\n * Events\n * * 'change': yields newly selected node and previous\n * \n * CSS variables\n * * --text-highlight: red; // highlight on mouse hover\n * * --separator: silver; // text colour of separator character\n * * --padding-s: 0.12ch; // padding between items\n */\n@customElement('ixfx-crumb-nav')\nexport class CrumbNavElement extends LitElement {\n @property({ type: Object })\n segments: CrumbNavigation2Part[] = []\n\n @property({ type: Boolean })\n editing = false;\n\n @property({ type: String })\n editPath = ``\n\n onNavPopup: RequestPopup | undefined;\n\n constructor() {\n super();\n this.onclick = () => {\n console.log(`click`);\n this.editing = true;\n\n }\n this.segments = [\n { label: `root`, key: `root` },\n { label: `This PC`, key: `ThisPC` },\n { label: `Storage (D:)`, key: `D:` },\n { label: `Archives`, key: `Archives` },\n { label: `Tumblr`, key: `Tumblr` },\n { label: `whatevruk`, key: `whatevruk` },\n ]\n }\n\n protected updated(_changedProperties: PropertyValues): void {\n if (this.editing) {\n this.shadowRoot?.querySelector(`input`)?.focus();\n this.shadowRoot?.querySelector(`input`)?.select();\n }\n }\n\n public setSegmentsWithPath(path: string, separator = `/`) {\n const split = path.split(separator);\n let root = ``;\n let segments: CrumbNavigation2Part[] = []\n for (const s of split) {\n root += s + separator\n segments.push({\n key: root,\n label: s\n });\n };\n this.segments = segments;\n this.editPath = path;\n }\n\n private renderSegment(s: CrumbNavigation2Part, i: number) {\n const last = i === this.segments.length - 1;\n const caret = html`<div .data=${ s } @click=${ this.onCaretClick } class=\"caret\">›</div>`;\n return html`<div class=\"seg ${ s.ensureVisible ? `chosen` : `` }\" >\n <label .data=${ s } title=${ s.label } @click=${ this.onLabelClick }>\n ${ s.label }\n </label>\n ${ last ? `` : caret }\n </div>`\n }\n\n async onCaretClick(event: MouseEvent) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n const data = (event.target as any).data as CrumbNavigation2Part;\n console.log(data);\n event.preventDefault();\n event.stopPropagation();\n if (this.onNavPopup) {\n for await (const item of this.onNavPopup(data)) {\n console.log(item);\n }\n console.log(`done`);\n }\n }\n\n onLabelClick(event: MouseEvent) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n const data = (event.target as any).data as CrumbNavigation2Part;\n event.preventDefault();\n event.stopPropagation();\n\n this.dispatchEvent(new CustomEvent(`navigate`, {\n detail: data\n }));\n }\n\n protected render() {\n if (this.editing) {\n return html`<input @keyup=${ this.onInputKeyUp } @blur=${ this.onInputBlur } value=${ this.editPath } type=\"text\">`\n } else {\n const segs = this.segments.map((s, index) => this.renderSegment(s, index));\n return html`${ segs }`;\n }\n }\n\n onInputKeyUp(event: KeyboardEvent) {\n const el = this.shadowRoot?.querySelector(`input`);\n if (!el) return;\n if (event.key === `Enter`) {\n console.log(`asf`);\n this.editPath = el.value;\n this.editing = false;\n } else if (event.key === `Escape`) {\n this.editing = false;\n }\n }\n\n\n onInputBlur() {\n this.editing = false;\n }\n\n static styles = css`\n :host {\n --text-highlight: red;\n --separator: silver;\n --padding: 0.5em;\n --padding-s: 0.1em;\n --padding-m: 0.25em;\n --hover-bg: darkgray;\n --hover-fg: unset;\n display: flex;\n width: 100%;\n gap: var(--padding-s);\n transition: all 2s ease-in-out;\n cursor: text;\n }\n\n .seg {\n cursor: pointer;\n display:flex;\n flex-wrap: nowrap;\n align-items:center;\n user-select: none;\n overflow:hidden;\n }\n\n input {\n appearance: none;\n border: 0;\n width: 100%;\n margin:var(--padding-s);\n padding: calc(2*var(--padding-s));\n font:unset;\n }\n .seg:hover {\n * {\n color: var(--hover-fg);\n background: color-mix(in srgb, var(--hover-bg) 20%, transparent);\n }\n }\n .seg {\n * {\n transition: all 0.2s ease-in-out;\n }\n }\n\n label {\n height: 100%;\n white-space:nowrap;\n text-overflow: ellipsis;\n align-content: center;\n overflow: hidden;\n padding: 0 var(--padding-s) 0 var(--padding-s);\n }\n\n label:hover,.caret:hover {\n background: var(--hover-bg) !important;\n }\n \n .seg:hover,.seg.chosen {\n overflow:unset;\n }\n \n .caret {\n padding: var(--padding-m);\n margin-left: var(--padding-s);\n margin-left: var(--padding-s);\n }\n`\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-crumb-nav\": CrumbNavElement;\n }\n}","import { css, html, LitElement } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n\n/**\n * CSS vars\n * * --selected-colour: text colour\n * * --selected-border-width: bottom border width\n * * --padding\n */\n@customElement('ixfx-tab-list-item')\nexport class TabListItemElement extends LitElement {\n @property({ type: Boolean })\n closeable = true;\n\n // @property({ type: Boolean })\n // activated = true;\n\n render() {\n return html`<div ><slot part=\"header\"></slot></div>`\n }\n\n // protected createRenderRoot() {\n // return this;\n // }\n static styles = css`\n :host {\n --selected-colour: blue;\n --selected-border-width: 1px;\n --padding: 0.5ch;\n --hover-background: whitesmoke;\n display: inline;\n user-select:none;\n box-sizing: border-box;\n }\n \n :host([selected])>div {\n color: var(--selected-colour);\n border-bottom: var(--selected-border-width) solid var(--selected-colour);\n }\n div {\n padding:var(--padding) calc(2*var(--padding)) var(--padding) calc(2*var(--padding));\n border-bottom: var(--selected-border-width) solid transparent;\n\n }\n \n div:hover {\n background-color: var(--hover-background);\n color:unset !important;\n\n }\n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-tab-list-item\": TabListItemElement;\n }\n}","import { css, html, LitElement } from \"lit\";\nimport { customElement, property, queryAssignedElements } from \"lit/decorators.js\";\nimport { TabListItemElement } from \"./tab-list-item.js\";\n\n/**\n * Events\n * * 'change' - new tab selected { previous:string, selected:string, for:string }\n */\n@customElement('ixfx-tab-list')\nexport class TabListElement extends LitElement {\n @property({ type: Boolean })\n horizontal = true;\n\n @queryAssignedElements()\n _listItems!: TabListItemElement[];\n\n render() {\n return html`\n <div tabindex=0 @keyup=${ this.#onKeyUp } @click=${ this.#onSlotClick } id=\"container\" class=${ this.horizontal ? `horizontal` : `vertical` }>\n <slot></slot>\n </div>`;\n }\n\n\n #onKeyUp = (event: KeyboardEvent) => {\n const key = event.key;\n if (key === `ArrowUp` && !this.horizontal) {\n this.#selectPrevious();\n return;\n } else if (key === `ArrowDown` && !this.horizontal) {\n this.#selectNext();\n return;\n } else if (key === `ArrowRight` && this.horizontal) {\n this.#selectNext();\n return;\n } else if (key === `ArrowLeft` && this.horizontal) {\n this.#selectPrevious();\n return;\n }\n }\n\n getSelectedElement() {\n for (const el of this._listItems) {\n if (this.#isSelected(el)) return el;\n }\n }\n\n #isSelected(el: HTMLElement) {\n const v = el.getAttribute(`selected`);\n if (v === null) return false;\n return (el.hasAttribute(`selected`));\n }\n\n\n selectElement(el: HTMLElement) {\n const existing = this.getSelectedElement();\n if (existing) {\n existing.removeAttribute(`selected`);\n }\n el.setAttribute(`selected`, ``);\n }\n\n #selectNext() {\n let found = false;\n for (const el of this._listItems) {\n if (this.#isSelected(el) && !found) {\n found = true;\n } else if (found) {\n this.selectElement(el);\n break;\n }\n }\n }\n\n #selectPrevious() {\n let prev: HTMLElement | undefined;\n for (const el of this._listItems) {\n if (this.#isSelected(el) && prev) {\n this.selectElement(prev);\n } else {\n prev = el;\n }\n }\n }\n\n #onSlotClick = (event: MouseEvent) => {\n this.focus();\n const t = event.target as HTMLElement;\n const previous = this.getSelectedElement();\n this.selectElement(t);\n\n const forId = t.getAttribute(`for`);\n this.dispatchEvent(new CustomEvent(`change`, {\n detail: {\n previous, selected: t.id, for: forId ?? ``\n }\n }));\n }\n\n // #updateSelection() {\n // for (const el of this._listItems) {\n // if (el.id === this.selectedId) {\n // el.classList.add(`activated`);\n // el.setAttribute(`activated`, ``);\n // } else {\n // el.classList.remove(`activated`);\n // el.removeAttribute(`activated`);\n // }\n // }\n // }\n\n // protected updated(_changedProperties: PropertyValues): void {\n // this.#updateSelection();\n // }\n\n static styles = css`\n :host {\n display: inline-block;\n --activated-colour: blue;\n --colur: pink;\n }\n text {\n user-select:none;\n }\n #container {\n display:flex;\n }\n #container.horizontal {\n flex-direction: row;\n }\n #container.vertical {\n flex-direction: column;\n }\n\n ::slotted(.activated) {\n --colour: var(--activated-colour);\n }\n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-tab-list\": TabListElement;\n }\n}","import { css, html, LitElement } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement('ixfx-tab-panel')\nexport class TabPanelElement extends LitElement {\n\n render() {\n return html`<slot></slot>`\n }\n static styles = css`\n :host {\n display:none;\n height:100%;\n width:100%;\n }\n\n :host([selected]) {\n background: whitesmoke;\n display:block;\n }\n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-tab-panel\": TabPanelElement;\n }\n}","import { css, html, LitElement } from \"lit\";\nimport { customElement, queryAssignedElements } from \"lit/decorators.js\";\nimport { TabPanelElement } from \"./tab-panel.js\";\nimport { TabListElement } from \"./tab-list.js\";\n\n@customElement('ixfx-tab-panels')\nexport class TabPanelsElement extends LitElement {\n\n @queryAssignedElements()\n _listItems!: TabPanelElement[];\n\n /**\n * Triggered when a panel is being de-selected\n */\n onUnselectedPanel?: (id: string, el: TabPanelElement) => void\n /**\n * Triggered before panel is selected\n */\n onSelectingPanel?: (id: string, el: TabPanelElement) => void\n /**\n * Triggered after panel is selected\n */\n onSelectedPanel?: (id: string, el: TabPanelElement) => void\n render() {\n return html`<slot></slot>`\n }\n\n getSelectedElement() {\n for (const el of this._listItems) {\n if (this.#isSelected(el)) return el;\n }\n }\n\n #isSelected(el: TabPanelElement) {\n //const v = el.getAttribute(`selected`);\n //console.log(`id: ${ el.id } v: ${ v }`);\n return el.hasAttribute(`selected`);\n }\n\n #unselect(el: TabPanelElement) {\n el.removeAttribute(`selected`);\n if (this.onUnselectedPanel) {\n this.onUnselectedPanel(el.id, el);\n }\n }\n\n #select(el: TabPanelElement) {\n if (this.onSelectingPanel) {\n this.onSelectingPanel(el.id, el);\n }\n el.setAttribute(`selected`, ``);\n if (this.onSelectedPanel) {\n this.onSelectedPanel(el.id, el);\n }\n }\n\n syncWithList(el: TabListElement) {\n const t = el.getSelectedElement();\n if (!t) return;\n const forEl = t.getAttribute(`for`);\n if (!forEl) return;\n this.selectPanel(forEl);\n }\n\n selectPanel(id: string) {\n const current = this.getSelectedElement();\n if (current) {\n if (current.id === id) return;\n this.#unselect(current);\n }\n\n let found = false;\n for (const el of this._listItems) {\n if (el.id === id) {\n this.#select(el);\n found = true;\n }\n }\n return found;\n }\n\n static styles = css`\n :host {\n display: block;\n }\n \n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-tab-panels\": TabPanelsElement;\n }\n}","import { clamp } from \"ixfx/numbers.js\";\nimport { css, html, LitElement } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n\n// TODO: Swap A/B panel content\n// TODO: Toggle collapse of A/B\n// TODO: Handle resizing of parent element\n// TODO: Fire event when panels have been resized\n/**\n * Lays out two elements within a container, with a bar to resize them\n * proportionally.\n * \n * Events\n * * _none_\n * Attributes\n * * layout: `vertical`|`horizontal`\n * * sizeA/B: CSS size of section A or B. Can use relative or absolute values\n * * fixedA/B: If _true_ size will be calculated in pixels. By default (_false_) it uses % of whole\n * \n * CSS variables\n * * --handle-size: 2px; // Width/height of resize handle\n * * --handle-colour: whitesmoke; // Colour of handle\n * * --handle-hover-colour: darkblue; // Colour of handle when hovering\n * * --handle-active-colour: blue; // Colour of handle when being used\n */\n@customElement('ixfx-split-layout')\nexport class SplitLayoutElement extends LitElement {\n @property({ type: String })\n layout: `vertical` | `horizontal` = `vertical`;\n\n @property({ type: String })\n sizeA = ``;\n @property({ type: String })\n sizeB = ``;\n\n @property({ type: Boolean })\n fixedA = false;\n @property({ type: Boolean })\n fixedB = false;\n\n //#userResizing = false;\n #elementBounds: DOMRect | undefined;\n\n render() {\n // With vertical layout, fix the width\n // With horizontal layout, fix the height\n const sizePrefix = this.layout === `vertical` ? `width` : `height`;\n let sizeA = this.sizeA;\n let sizeB = this.sizeB;\n\n if (sizeA.length === 0 && sizeB.length === 0) {\n sizeB = sizeA = `50%`;\n } else if (sizeA.length === 0) {\n sizeA = `auto`;\n } else if (sizeB.length === 0) {\n sizeB = `auto`;\n }\n\n sizeA = `${ sizePrefix }:${ sizeA }`;\n sizeB = `${ sizePrefix }:${ sizeB }`;\n\n return html`\n <div id=\"zone\">\n <slot style=${ sizeA } name=\"a\"></slot>\n <div @pointerdown=${ this.#onResizeHandleDown } class=\"resize-handle\"></div>\n <slot style=${ sizeB } name=\"b\"></slot> \n </div>`\n }\n\n getZone(): HTMLElement | undefined {\n if (!this.shadowRoot) return;\n const el = this.shadowRoot.querySelector(`#zone`);\n if (!el) return undefined;\n return el as HTMLElement;\n }\n\n #onResizeHandleDown = (event: PointerEvent) => {\n event.preventDefault();\n //this.#userResizing = true;\n const zoneEl = this.getZone();\n if (zoneEl) {\n zoneEl.classList.add(`user-resizing`);\n }\n this.#elementBounds = this.getBoundingClientRect();\n window.addEventListener(`pointerup`, this.#onResizeHandleUp);\n window.addEventListener(`pointermove`, this.#onResizeHandleMove);\n }\n\n #onResizeHandleUp = (event: PointerEvent) => {\n event.preventDefault();\n //this.#userResizing = false;\n const zoneEl = this.getZone();\n if (zoneEl) {\n zoneEl.classList.remove(`user-resizing`);\n }\n window.removeEventListener(`pointerup`, this.#onResizeHandleUp);\n window.removeEventListener(`pointermove`, this.#onResizeHandleMove);\n }\n\n #onResizeHandleMove = (event: PointerEvent) => {\n const bounds = this.#elementBounds;\n if (!bounds) return;\n //console.log(`fixedA: ${ this.fixedA } b: ${ this.fixedB }`);\n if (this.layout === `horizontal`) {\n let y = event.y - bounds.y;\n let relativeY = clamp(y / bounds.height);\n //console.log(`relY: ${ relativeY } y: ${ y } event.y: ${ event.y } offset: ${ event.offsetY }`);\n\n if (this.fixedA) {\n this.sizeA = `${ relativeY * bounds.height }px`;\n } else {\n this.sizeA = `${ relativeY * 100 }%`;\n }\n if (this.fixedB) {\n this.sizeB = `${ (1 - relativeY) * bounds.height }px`;\n } else {\n this.sizeB = `${ (1 - relativeY) * 100 }%`\n }\n } else {\n let x = event.x - bounds.x;\n let relativeX = clamp(x / bounds.width);\n if (this.fixedA) {\n this.sizeA = `${ relativeX * bounds.width }px`;\n } else {\n this.sizeA = `${ relativeX * 100 }%`;\n }\n if (this.fixedB) {\n this.sizeB = `${ (1 - relativeX) * bounds.width }px`;\n } else {\n this.sizeB = `${ (1 - relativeX) * 100 }%`\n }\n }\n event.preventDefault();\n }\n\n // Default is vertical split\n static styles = css`\n :host {\n --handle-size: 2px;\n --handle-colour: whitesmoke;\n --handle-hover-colour: darkblue;\n --handle-active-colour: blue;\n\n display: block;\n box-sizing: border-box;\n width:100%;\n height:100%;\n }\n * {\n box-sizing: border-box;\n }\n #zone {\n display:flex;\n height: 100%;\n }\n slot {\n display:block;\n }\n :slotted(*) {\n width: 100%;\n height: 100%;\n }\n\n .resize-handle {\n background-color: var(--handle-colour);\n width: var(--handle-size);\n height:100%;\n cursor: ew-resize;\n }\n #zone.user-resizing {\n slot {\n opacity: 0.5;\n }\n .resize-handle {\n background-color: var(--handle-active-colour);\n }\n }\n .resize-handle:hover {\n background-color: var(--handle-hover-colour);\n }\n\n :host([layout='horizontal']) {\n slot {\n \n }\n #zone {\n flex-direction: column;\n }\n .resize-handle {\n background-color: silver;\n height: var(--handle-size);\n width:100%;\n cursor: ns-resize;\n }\n }\n\n `\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-split-layout\": SplitLayoutElement;\n }\n}","import { css, html, LitElement, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n\nimport { createRef, type Ref, ref } from \"lit/directives/ref.js\";\nimport { CanvasHelper } from \"ixfx/visual.js\";\nimport { Rects, type Point, type Rect, type RectPositioned } from \"ixfx/geometry.js\";\nimport * as Arrays from 'ixfx/arrays.js';\nimport * as Numbers from 'ixfx/numbers.js';\nimport { getCssVariable } from 'ixfx/dom.js';\nimport { Drawing, Colour, type DrawingHelper } from \"ixfx/visual.js\";\nimport { Pathed } from 'ixfx';\n\nconst rangeIsEqual = (a: Numbers.NumericRange | undefined, b: Numbers.NumericRange | undefined) => {\n if (a === undefined || b === undefined) return false;\n return (a.max === b.max && a.min === b.min);\n}\n\n// const rangeIsWithin = (a: Numbers.NumericRange | undefined, b: Numbers.NumericRange) => {\n// if (a === undefined) return false;\n// if (a.min >= b.min && a.max <= b.max) return true;\n// return false;\n// }\n\n\nexport type SeriesColourGenerator = (seriesName: string) => string;\n\n\nexport class PlotAxis {\n bounds: PlotAxisBounds = `auto`;\n // units: Readonly<{ major: number, minor: number }> = { major: Number.NaN, minor: Number.NaN }\n // altAxisCrossing: AxisCrossing<T> = { at: `min` }\n // ticks: TickMarks = { major: `inside`, minor: `inside` }\n // labels: AxisLabels = `axis`;\n #currentScalerRange?: Numbers.NumericRange;\n #persistentScale = Numbers.rangeInit();\n\n #currentScaler: (value: number) => number = (v: number) => v;\n\n constructor(public name: string) {\n\n }\n\n humanFormatValue(value: number[]) {\n if (value.length === 0) return ``;\n const v = value[ 0 ];\n if (v < 2) return v.toFixed(2);\n return v.toString();\n }\n\n getRange(series: Iterable<PlotSeries>): Numbers.NumericRange {\n if (this.bounds === `auto`) return this.computeActualRange(series);\n if (this.bounds === `auto-persistent`) {\n const r = this.computeActualRange(series);\n this.#persistentScale = Numbers.rangeMergeRange(r, this.#persistentScale);\n return this.#persistentScale;\n }\n return this.bounds;\n }\n\n getCurrentRange() {\n return this.#currentScalerRange;\n }\n\n getValueScaler(series: Iterable<PlotSeries>) {\n const r = this.getRange(series);\n if (!rangeIsEqual(r, this.#currentScalerRange)) {\n this.#currentScalerRange = r;\n this.#currentScaler = Numbers.scaler(r.min, r.max, 0, 1);\n }\n return this.#currentScaler;\n }\n\n computeActualRange(seriesOnAxis: Iterable<PlotSeries>, column = 0) {\n let min = Number.MAX_SAFE_INTEGER;\n let max = Number.MIN_SAFE_INTEGER;\n let count = 0;\n for (const s of seriesOnAxis) {\n for (const [ v, _index ] of s.getValuesForColumn(column)) {\n if (typeof v !== `number`) continue;\n if (Number.isNaN(v)) continue;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n count++;\n }\n return { min, max };\n }\n}\n\nexport type PlotSeriesDefault = {\n limit: number\n}\n\n/**\n * Attributes\n * * streaming: true/false (default: true)\n * * max-length: number (default: 500). How many data points per series to store\n * * data-width: when streaming, how much horizontal width per point\n * * fixed-max/fixed-min: global input scaling (default: NaN, ie. disabled)\n * \n * * line-width: stroke width of drawing line (default:2)\n * \n * * render: 'dot', 'line' or 'bar'(default: 'dot')\n * * hide-legend: If added, legend is not shown\n * * manual-draw: If added, automatic drawning is disabled\n * \n * Styling variables\n * * --legend-fg: legend foreground text\n */\n@customElement(`ixfx-plot-element`)\nexport class PlotElement extends LitElement {\n //@property({ attribute: `streaming`, type: Boolean })\n //streaming = true;\n\n @property({ attribute: `hide-legend`, type: Boolean })\n hideLegend = false;\n\n //@property({ attribute: `max-length`, type: Number })\n //maxLength = 500;\n\n //@property({ attribute: `data-width`, type: Number })\n //dataWidth = 5;\n\n //@property({ attribute: `fixed-max`, type: Number })\n //fixedMax = Number.NaN;\n\n //@property({ attribute: `fixed-min`, type: Number })\n //fixedMin = Number.NaN;\n\n //@property({ attribute: `line-width`, type: Number })\n //lineWidth = 2;\n\n @property({ attribute: `render`, type: String })\n renderStyle: PlotElementRenderStyle = `dot`\n\n //@property({ attribute: `manual-draw`, type: Boolean })\n //manualDraw = false;\n\n @property({ attribute: `padding`, type: Number })\n padding = 5;\n\n readonly primaryAxis = new PlotAxis(`primary`);\n readonly secondaryAxis = new PlotAxis(`secondary`);\n\n paused = false;\n plotAreaFormat: PlotObjectFormatting = {\n fill: { type: `none` },\n outline: { type: `none` }\n }\n\n /**\n * Settings used for automatically generating series colour\n */\n automaticSeriesColour = {\n saturation: 1,\n lightness: 0.5,\n alpha: 1\n }\n\n seriesDefault: Partial<PlotSeriesDefault> = {}\n\n\n #series = new Map<string, PlotSeries>();\n #canvas: CanvasHelper | undefined;\n #drawing: DrawingHelper | undefined;\n\n #legendColour = ``;\n #autoSeriesColour = 0;\n #hitboxes: DataPointHitbox[] = [];\n #seriesFormatting = new Map<string, SeriesFormatting>();\n #swatchSize = 10;\n\n canvasEl: Ref<HTMLCanvasElement> = createRef();\n tooltipEl: Ref<HTMLDivElement> = createRef();\n\n seriesColourGenerate: SeriesColourGenerator = (_seriesName: string) => {\n const c = Colour.goldenAngleColour(this.#autoSeriesColour, this.automaticSeriesColour.saturation, this.automaticSeriesColour.lightness, this.automaticSeriesColour.alpha);\n this.#autoSeriesColour++;\n return c;\n }\n\n get series(): PlotSeries[] {\n return [ ...this.#series.values() ] as PlotSeries[];\n }\n\n get seriesCount() {\n return this.#series.size;\n }\n\n getSeriesFormatting(seriesName: string, createIfNeeded: boolean) {\n let f = this.#seriesFormatting.get(seriesName);\n if (!f && createIfNeeded) {\n f = {\n axis: `primary`,\n fill: {\n colour: this.seriesColourGenerate(seriesName),\n type: `solid`\n },\n outline: {\n type: `none`\n },\n bar: {\n gapWidth: 10\n },\n dot: {\n gapWidth: 0,\n radius: `automatic`\n },\n line: {\n width: 2,\n cap: `round`,\n join: `round`\n }\n }\n this.#seriesFormatting.set(seriesName, f);\n }\n return f;\n }\n\n setSeriesFormatting(seriesName: string, formatting: Partial<SeriesFormatting>) {\n let existing = this.getSeriesFormatting(seriesName, true)!;\n const combined = {\n ...existing,\n ...formatting\n }\n combined.fill = resolveFillDrawStyle(combined.fill);\n combined.outline = resolveOutlineDrawStyle(combined.outline);\n this.#seriesFormatting.set(seriesName, combined);\n }\n\n /**\n * Returns a `PlotElement` instance based on a query\n * ```js\n * PlotElement.fromQuery(`#someplot`); // PlotElement\n * ```\n * \n * Throws an error if query does not match.\n * @param query \n * @returns \n */\n static fromQuery(query: string): PlotElement {\n const el = document.querySelector(query);\n if (!el) throw new Error(`Query does not match an element`);\n if (el.nodeName === 'IXFX-PLOT-ELEMENT') return el as PlotElement;\n throw new Error(`Element is not a PlotElement ('${ el.nodeName }')`);\n }\n\n /**\n * Delete a series.\n * Returns _true_ if there was a series to delete\n * @param name \n * @returns \n */\n deleteSeries(name: string): boolean {\n name = name.toLowerCase();\n const s = this.#series.get(name);\n if (!s) return false;\n this.#series.delete(name);\n return true;\n }\n\n /**\n * Keeps the series, but deletes its data\n * @param name\n * @returns \n */\n clearSeries(name: string): boolean {\n name = name.toLowerCase();\n const s = this.#series.get(name);\n if (!s) return false;\n this.#series.clear();\n return true;\n }\n\n /**\n * Delete all data & series\n */\n clear() {\n this.#series.clear();\n this.#autoSeriesColour = 0;\n\n }\n\n /**\n * Keeps all series, but deletes their data\n */\n clearData() {\n for (const s of this.#series.values()) {\n s.clear();\n }\n }\n\n #lastPointerPosition: { screenX: number, x: number, screenY: number, y: number } | undefined;\n\n #onPointerLeave() {\n this.#lastPointerPosition = undefined;\n this.#hideTooltip();\n }\n\n #onPointerMove(event: PointerEvent) {\n this.#lastPointerPosition = {\n x: event.offsetX,\n screenX: event.x,\n y: event.offsetY,\n screenY: event.y\n };\n this.#updateToolTip();\n }\n\n #updateToolTip() {\n if (!this.#lastPointerPosition) return;\n\n for (const hb of this.#hitboxes) {\n if (Rects.intersectsPoint(hb, this.#lastPointerPosition)) {\n if (hb.value) {\n this.#setTooltip(hb.series.humanFormatValue(hb.value));\n } else {\n this.#setTooltip(``);\n }\n\n return;\n }\n }\n this.#hideTooltip();\n }\n\n #hideTooltip() {\n const v = this.tooltipEl.value;\n if (!v) return;\n v.classList.add(`hidden`);\n }\n\n #setTooltip(innerHtml: string) {\n const v = this.tooltipEl.value;\n if (!v) return;\n const pos = this.#lastPointerPosition;\n v.classList.remove(`hidden`);\n const offset = 10;\n v.innerHTML = innerHtml;\n if (pos) {\n v.style.left = `${ pos.screenX + offset }px`;\n v.style.top = `${ pos.screenY + offset }px`;\n\n }\n }\n\n #setupCanvas(): CanvasHelper {\n if (this.#canvas !== undefined) return this.#canvas;\n const canvas = this.canvasEl.value!;// this.shadowRoot?.querySelector(`canvas`);\n if (!canvas) throw new Error(`canvas element not found`);\n const c = new CanvasHelper(canvas);\n this.#canvas = c;\n this.#drawing = Drawing.makeHelper(c.ctx);\n return c;\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n }\n\n protected firstUpdated(_changedProperties: PropertyValues): void {\n const ro = new ResizeObserver((event) => {\n const c = this.#setupCanvas();\n if (!c) return;\n const entry = event[ 0 ];\n c.setLogicalSize(entry.contentRect);\n if (this.#hasDirty()) this.draw();\n });\n ro.observe(this);\n this.updateColours();\n //this.#setupCanvas();\n }\n\n #hasDirty() {\n for (const s of this.series.values()) {\n if (s.isDirty) return true;\n }\n return false;\n }\n\n updateColours() {\n this.#legendColour = getCssVariable(`legend-fg`, `black`);\n }\n\n //plot(value: number, seriesName = ``, skipDrawing = false) {\n // plotValue(primary: number | string, secondary: number | string, seriesName: string, skipDrawing = false) {\n // //if (typeof primary !== 'number' && typeof primary !== `string`) throw new TypeError(`Can only add numbers. Got: ${ typeof value }`);\n\n // let s = this.#series.get(seriesName.toLowerCase());\n // if (s === undefined) {\n // s = new PlotSeries(seriesName, this);\n // this.#series.set(seriesName.toLowerCase(), s);\n // }\n // const v: DataValue = { primary, secondary };\n\n // //s.push(value);\n // s.pushValue(v)\n // if (!this.manualDraw && !skipDrawing) this.draw();\n // return s;\n // }\n\n setRawValues(values: number[], seriesName: string, automaticallyDraw: boolean) {\n if (!Array.isArray(values)) throw new TypeError(`Param 'values' is not an array`);\n let s = this.getOrCreateSeries(seriesName);\n s.setRawValues(values, automaticallyDraw);\n return s;\n }\n\n /**\n * Treats each property of an object as the series name\n * @param value \n * @param automaticallyDraw \n */\n appendObjectBySeries(value: object, automaticallyDraw: boolean) {\n for (const p of Pathed.getPathsAndData(value, true)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const v = p.value;\n if (typeof v === `number`) {\n this.appendRawValues(v, p.path, false);\n }\n }\n if (automaticallyDraw) this.draw();\n }\n\n appendRawValues(values: number[] | number, seriesName: string, automaticallyDraw: boolean) {\n if (!Array.isArray(values)) values = [ values ];\n let s = this.getOrCreateSeries(seriesName);\n for (const v of values) {\n s.pushValue(v, false);\n }\n if (automaticallyDraw) this.draw();\n }\n\n /**\n * Draw a set of key-value pairs as a batch.\n * @param value \n */\n // plotObject(value: object) {\n // for (const p of Pathed.getPathsAndData(value, true)) {\n\n // this.plot(p.value, p.path, true);\n // }\n // this.draw();\n // }\n\n // colourGenerator(_series: string): Colour.Colourish {\n // const c = Colour.HslSpace.scalar(this.#hue, 0.9, 0.4);\n // this.#hue = Numbers.wrap(this.#hue + 0.1);\n // return c;\n // }\n\n draw() {\n if (this.paused) return;\n\n const c = this.#canvas;\n const d = this.#drawing;\n const padding = this.padding;\n if (!d || !c) return;\n\n c.clear();\n const ctx = d.ctx;\n\n const axisYwidth = this.computeAxisYWidth(c);\n const remainingWidth = c.width - axisYwidth;\n\n const clLegend = this.computeLegend(c, remainingWidth, padding);\n const plotHeight = c.height - clLegend.bounds.height - padding;\n const cy = { width: axisYwidth, height: plotHeight };\n const plotDataArea = this.calculatePlotDataArea(c, plotHeight, cy.width, padding);\n\n const cl = { ...clLegend.bounds, x: cy.width, y: plotDataArea.y + plotDataArea.height + padding }\n\n\n // Draw legend\n if (!this.hideLegend) {\n ctx.save();\n ctx.translate(cl.x + padding, cl.y + padding);\n this.drawLegend(cl, d);\n ctx.restore();\n }\n\n ctx.save();\n ctx.translate(plotDataArea.x + padding, plotDataArea.y + padding);\n\n if (this.plotAreaFormat.fill.type === `solid`) {\n ctx.fillStyle = Colour.resolveCss(this.plotAreaFormat.fill.colour);\n ctx.fillRect(0, 0, plotDataArea.width, plotDataArea.height);\n }\n if (this.plotAreaFormat.outline.type === `solid`) {\n ctx.strokeStyle = Colour.resolveCss(this.plotAreaFormat.outline.colour);\n ctx.strokeRect(0, 0, plotDataArea.width, plotDataArea.height);\n }\n\n // Compute axis scaling\n const primaryAxisS = this.primaryAxis.getValueScaler(this.#series.values().filter(s => s.onPrimaryAxis));\n const secondaryAxisAxisS = this.secondaryAxis.getValueScaler(this.#series.values().filter(s => !s.onPrimaryAxis));\n\n // Draw data\n this.#hitboxes = [];\n for (const series of this.#series.values()) {\n switch (this.renderStyle) {\n case `line`: {\n this.#drawLineSeries(series, d, series.onPrimaryAxis ? primaryAxisS : secondaryAxisAxisS, plotDataArea, { x: padding, y: padding });\n break;\n }\n case `bar`: {\n this.#drawBarSeries(series, d, series.onPrimaryAxis ? primaryAxisS : secondaryAxisAxisS, plotDataArea, { x: padding, y: padding });\n break;\n }\n default: {\n this.#drawDotSeries(series, d, series.onPrimaryAxis ? primaryAxisS : secondaryAxisAxisS, plotDataArea, { x: padding, y: padding });\n }\n }\n series.isDirty = false;\n }\n ctx.restore();\n this.#updateToolTip();\n }\n\n drawLegend(cl: RectPositioned, d: DrawingHelper) {\n const textColour = this.#legendColour;\n const padding = this.padding;\n let x = 0;\n let y = padding;\n const swatchSize = 10;\n const ctx = d.ctx;\n\n for (const series of this.#series.values()) {\n const f = series.getFormatting();\n const colour = (f.fill.type === `solid`) ? f.fill.colour : `transparent`;\n ctx.fillStyle = Colour.toCssColour(colour);\n ctx.fillRect(x, y, swatchSize, swatchSize);\n ctx.fillStyle = textColour;\n x += swatchSize + padding;\n const m = ctx.measureText(series.name);\n ctx.textBaseline = `middle`;\n ctx.fillText(series.name, x, y + swatchSize / 2);\n\n x += m.width + padding;\n if (x >= cl.width) {\n y += 10 + padding;\n x = 0;\n }\n }\n }\n\n // #drawBarSeries(data: number[], cp: Rect, d: DrawingHelper, series: PlotSeries) {\n // const barWidth = this.streaming ? this.dataWidth : (cp.width / data.length);\n // const formatting = series.getFormatting();\n // let x = 0;\n // if (this.streaming) x = cp.width - (barWidth * data.length);\n // const rects = data.map(d => {\n // x += barWidth;\n // const h = (d) * cp.height;\n // return {\n // x: x,\n // y: cp.height - h,\n // height: h,\n // width: barWidth,\n // value: d\n // };\n // })\n\n // this.#hitboxes = rects.map(r => {\n // return {\n // ...r,\n // series: series.name\n // }\n // })\n\n // let drawOptions: { stroke: boolean, filled: boolean, strokeWidth?: number, strokeStyle?: string, fillStyle?: string } = {\n // stroke: false,\n // filled: false\n // }\n // if (formatting.outline.type === `solid`) {\n // drawOptions.stroke = true;\n // drawOptions.strokeStyle = formatting.outline.colour;\n // drawOptions.strokeWidth = 1;\n // }\n\n // if (formatting.fill.type === `solid`) {\n // drawOptions.filled = true;\n // drawOptions.fillStyle = formatting.fill.colour;\n // }\n\n // d.rect(rects, drawOptions);\n // }\n\n\n\n #drawLineSeries(series: PlotSeries, d: DrawingHelper, scaler: (v: number) => number, plotDataArea: Rect, plotDataAreaOffset: Point) {\n const formatting = series.getFormatting();\n const lineFormatting = formatting.line;\n const widthPerValue = plotDataArea.width / series.length;\n const xOffset = widthPerValue / 2;\n const lineThickness = lineFormatting.width;\n const lineThicknessHalf = lineThickness / 2;\n const h = plotDataArea.height;\n let x = 0;\n const dotsToDraw = [ ...series.getValuesForColumn(0) ].map(d => {\n const [ value, index ] = d;\n x += widthPerValue;\n const scaledValue = scaler(value);\n if (Number.isNaN(value)) return undefined;\n return {\n x: x - xOffset,\n y: (1 - scaledValue) * h,\n value, index\n }\n })\n\n const filtered = dotsToDraw.filter(f => f !== undefined)\n\n const hitboxes: DataPointHitbox[] = filtered.map(d => ({\n height: lineThickness,\n width: widthPerValue,\n x: plotDataAreaOffset.x + d.x - lineThicknessHalf,\n y: plotDataAreaOffset.y + d.y - lineThicknessHalf,\n series,\n index: d.index,\n value: series.getValue(d.index),\n }));\n this.#hitboxes.push(...hitboxes);\n\n const drawOpts = {\n filled: false,\n fillStyle: `transparent`,\n stroked: true,\n strokeStyle: `black`,\n strokeWidth: lineFormatting.width\n };\n\n if (formatting.outline.type === `solid`) {\n drawOpts.strokeStyle = formatting.outline.colour;\n } else if (formatting.fill.type === `solid`) {\n drawOpts.strokeStyle = formatting.fill.colour;\n }\n\n d.ctx.lineWidth = lineFormatting.width;\n d.ctx.lineCap = lineFormatting.cap;\n d.ctx.lineJoin = lineFormatting.join;\n d.connectedPoints(filtered, drawOpts);\n //d.textBlock([ `hello` ], { fillStyle: `black`, anchor: { x: 1, y: 1 } })\n }\n\n #drawDotSeries(series: PlotSeries, d: DrawingHelper, scaler: (v: number) => number, plotDataArea: Rect, plotDataAreaOffset: Point) {\n const formatting = series.getFormatting();\n const dotFormatting = formatting.dot;\n\n const widthPerValue = plotDataArea.width / series.length;\n const radius = dotFormatting.radius === `automatic` ? widthPerValue * 0.3 : dotFormatting.radius;\n const xOffset = widthPerValue / 2;\n const h = plotDataArea.height;\n let x = 0;\n const dotsToDraw = [ ...series.getValuesForColumn(0) ].map(d => {\n const [ value, index ] = d;\n x += widthPerValue;\n const scaledValue = scaler(value);\n if (Number.isNaN(value)) return undefined;\n return {\n x: x - xOffset,\n y: (1 - scaledValue) * h,\n radius: radius,\n value, index\n }\n })\n\n const filtered = dotsToDraw.filter(f => f !== undefined)\n\n const hitboxes: DataPointHitbox[] = filtered.map(d => ({\n height: d.radius * 2,\n width: d.radius * 2,\n x: plotDataAreaOffset.x + d.x - d.radius,\n y: plotDataAreaOffset.y + d.y - d.radius,\n series,\n index: d.index,\n value: series.getValue(d.index),\n }));\n this.#hitboxes.push(...hitboxes);\n\n const drawOpts = { filled: false, fillStyle: `transparent`, stroked: false, strokeStyle: `transparent` };\n\n if (formatting.fill.type === `solid`) {\n drawOpts.filled = true;\n drawOpts.fillStyle = formatting.fill.colour;\n }\n if (formatting.outline.type === `solid`) {\n drawOpts.stroked = true;\n drawOpts.strokeStyle = formatting.outline.colour;\n }\n\n d.dot(filtered, drawOpts);\n //d.textBlock([ `hello` ], { fillStyle: `black`, anchor: { x: 1, y: 1 } })\n }\n\n #drawBarSeries(series: PlotSeries, d: DrawingHelper, scaler: (v: number) => number, plotDataArea: Rect, plotDataAreaOffset: Point) {\n const formatting = series.getFormatting();\n const barFormatting = formatting.bar;\n\n const widthPerValue = plotDataArea.width / series.length;\n const rectWidth = widthPerValue - (barFormatting.gapWidth / 2)\n const xOffset = widthPerValue / 2;\n const h = plotDataArea.height;\n let x = 0;\n const rectsToDraw = [ ...series.getValuesForColumn(0) ].map(d => {\n const [ value, index ] = d;\n x += widthPerValue;\n const scaledValue = scaler(value);\n if (Number.isNaN(value)) return undefined;\n\n const barHeight = scaledValue * h;\n return {\n x: x - xOffset,\n y: h - barHeight,\n width: rectWidth,\n height: barHeight,\n value, index\n }\n })\n\n const filtered = rectsToDraw.filter(f => f !== undefined)\n\n const hitboxes: DataPointHitbox[] = filtered.map(d => ({\n height: Math.max(5, d.height),\n width: d.width,\n x: plotDataAreaOffset.x + d.x,\n y: plotDataAreaOffset.y + d.y,\n series,\n index: d.index,\n value: series.getValue(d.index),\n }));\n this.#hitboxes.push(...hitboxes);\n\n const drawOpts = { filled: false, fillStyle: `transparent`, stroked: false, strokeStyle: `transparent` };\n\n if (formatting.fill.type === `solid`) {\n drawOpts.filled = true;\n drawOpts.fillStyle = formatting.fill.colour;\n }\n if (formatting.outline.type === `solid`) {\n drawOpts.stroked = true;\n drawOpts.strokeStyle = formatting.outline.colour;\n }\n\n d.rect(filtered, drawOpts);\n //d.textBlock([ `hello` ], { fillStyle: `black`, anchor: { x: 1, y: 1 } })\n }\n\n calculatePlotDataArea(c: CanvasHelper, plotHeight: number, axisYwidth: number, padding: number) {\n return {\n x: axisYwidth,\n y: 0,\n width: c.width - axisYwidth - padding - padding,\n height: plotHeight - padding\n }\n }\n\n computeAxisYWidth(_c: CanvasHelper) {\n return 0;\n }\n\n\n computeLegend(c: CanvasHelper, maxWidth: number, padding: number) {\n if (this.hideLegend) {\n return {\n bounds: { width: 0, height: 0 },\n parts: []\n }\n }\n const ctx = c.ctx;\n\n const series = [ ...this.#series.values() ];\n let largestH = 0;\n const sizes = series.map(s => {\n let width = this.#swatchSize + padding;\n const m = ctx.measureText(s.name);\n width += m.width;\n const height = m.emHeightAscent + m.emHeightDescent;\n largestH = Math.max(height, largestH);\n return {\n width,\n height\n }\n });\n const parts = [];\n let x = padding;\n let y = padding;\n let usedWidthMax = 0;\n for (const s of sizes) {\n parts.push({\n x, y, ...s\n })\n x += s.width;\n usedWidthMax = Math.max(x, usedWidthMax);\n if (x >= maxWidth) {\n x = padding;\n y += largestH + padding;\n }\n }\n const bounds = { width: usedWidthMax, height: y + largestH + padding }\n return {\n bounds, parts\n }\n }\n\n getOrCreateSeries(name: string): PlotSeries {\n let s = this.#series.get(name.toLowerCase());\n if (s) return s;\n s = new PlotSeries(name, this);\n\n const seriesDefault: PlotSeriesDefault = {\n limit: Number.NaN,\n ...this.seriesDefault\n }\n if (!Number.isNaN(seriesDefault.limit)) {\n s.setCapacityLimit(seriesDefault.limit);\n }\n\n this.#series.set(name.toLowerCase(), s);\n return s;\n }\n\n getSeries(name: string): PlotSeries | undefined {\n return this.#series.get(name);\n }\n\n\n render() {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n return html`<canvas @pointerleave=\"${ this.#onPointerLeave }\" @pointermove=\"${ this.#onPointerMove }\" ${ ref(this.canvasEl) }></canvas><div class=\"hidden\" ${ ref(this.tooltipEl) } id=\"tooltip\">Tooltip!</div>`\n }\n\n static styles = css`\n :host {\n width: 100%;\n height: 100%;\n display: block;\n }\n\n #tooltip {\n border: 1px solid black;\n background: white;\n color: black;\n padding: 0.3em;\n font-size: 10px;\n display: inline-block;\n position: absolute;\n left: 0px;\n top: 0px;\n opacity:1;\n pointer-events: none;\n }\n\n .hidden {\n opacity:0 !important;\n }\n `\n}\n\nexport type SolidColourDrawStyle = Readonly<{\n type: `solid`;\n colour: string\n}>\n\nexport type NoneDrawStyle = Readonly<{\n type: `none`;\n}>\n\nexport type FillDrawStyle = SolidColourDrawStyle | NoneDrawStyle;\nexport type OutlineDrawStyle = SolidColourDrawStyle | NoneDrawStyle;\n\nconst resolveFillDrawStyle = (s: FillDrawStyle): FillDrawStyle => {\n if (s.type === `none`) return s;\n const c = Colour.resolveCss(s.colour);\n return {\n type: `solid`,\n colour: c\n };\n}\n\nconst resolveOutlineDrawStyle = (s: OutlineDrawStyle): OutlineDrawStyle => {\n if (s.type === `none`) return s;\n const c = Colour.resolveCss(s.colour);\n return {\n ...s,\n colour: c\n };\n}\n\nexport type SeriesFormatting = PlotObjectFormatting & Readonly<{\n axis: `primary` | `secondary`\n bar: BarSeriesFormatting\n dot: DotSeriesFormatting\n line: LineSeriesFormatting\n}>\n\nexport type PlotObjectFormatting = Readonly<{\n fill: FillDrawStyle\n outline: OutlineDrawStyle\n}>\n\nexport type BarSeriesFormatting = {\n gapWidth: number\n}\n\nexport type DotSeriesFormatting = {\n gapWidth: number\n radius: `automatic` | number\n}\n\nexport type LineSeriesFormatting = {\n width: number\n cap: `round` | `butt` | `square`\n join: `bevel` | `miter` | `round`\n}\n\n//export type Range = { min: number, max: number }\n\n// const initRange = (): Range => ({ min: Number.MAX_SAFE_INTEGER, max: Number.MIN_SAFE_INTEGER });\n\n// function computeRangeWithNewValue(v: number | undefined, prev: Range): Range {\n// if (typeof v === `number`) {\n// // Skip creating an object if it's in range\n// if (v >= prev.min && v <= prev.max) return prev;\n// return {\n// min: Math.min(v, prev.min),\n// max: Math.max(v, prev.max),\n// }\n// }\n// return prev;\n// }\n\n// function computeMergedRange(newRange: Range, existingRange: Range): Range {\n// if (newRange.max <= existingRange.max && newRange.min >= existingRange.min) return existingRange;\n// return {\n// min: Math.min(newRange.min, existingRange.min),\n// max: Math.max(newRange.max, existingRange.max)\n// }\n// }\n\nexport class PlotSeries {\n #data: (number[] | undefined)[] = [];\n #capacityLimit: number = Number.NaN;\n #dirty = false;\n #onPrimaryAxis = true;\n\n constructor(public readonly name: string, private plot: PlotElement) {}\n\n\n\n get length() {\n return this.#data.length;\n }\n\n *getValuesForColumn(column: number): Generator<[ value: number, index: number ]> {\n let index = 0;\n for (const dv of this.#data) {\n if (dv && column in dv) {\n yield [ dv[ column ], index ];\n } else {\n yield [ Number.NaN, index ];\n }\n index++;\n }\n }\n\n getValue(index: number) {\n return this.#data[ index ];\n }\n\n pushValue(value: number[] | number, automaticallyDraw: boolean) {\n if (!Array.isArray(value)) {\n value = [ value ];\n }\n if (value.length === 0) throw new Error(`Param 'value' is empty. Expected a value or array of value components`);\n\n this.#data.push(value);\n if (!Number.isNaN(this.#capacityLimit)) {\n this.#data = Arrays.ensureLength(this.#data, this.#capacityLimit, `undefined`, `from-start`);\n }\n this.#dirty = true;\n if (automaticallyDraw) this.plot.draw();\n }\n\n\n setValues(values: number[][], automaticallyDraw: boolean) {\n if (!Array.isArray(values)) throw new TypeError(`Param 'values' is not an array`);\n this.#data = Arrays.ensureLength(values, this.#capacityLimit, `undefined`);\n //this.#updateRanges();\n this.#dirty = true;\n if (automaticallyDraw) this.plot.draw();\n }\n\n humanFormatValue(value: number[]): string {\n let v = `${ this.name } `\n if (this.onPrimaryAxis) {\n v += this.plot.primaryAxis.humanFormatValue(value);\n } else {\n v += this.plot.secondaryAxis.humanFormatValue(value);\n\n }\n return v;\n }\n\n setRawValues(values: number[], automaticallyDraw: boolean) {\n this.setValues(values.map(v => [ v ]), automaticallyDraw)\n }\n\n setCapacityLimit(v: number) {\n if (typeof v !== `number`) throw new TypeError(`Expect type number. Got: ${ typeof v }`);\n if (!Number.isFinite(v)) {\n throw new TypeError(`Param 'v' is not finite`);\n }\n if (Number.isNaN(v)) {\n throw new TypeError(`Param 'v' is NaN`);\n }\n this.#capacityLimit = v;\n this.#data = Arrays.ensureLength(this.#data, this.#capacityLimit, `undefined`);\n }\n\n unsetCapacityLimit() {\n this.#capacityLimit = Number.NaN;\n }\n\n setFormatting(formatting: Partial<SeriesFormatting>) {\n this.plot.setSeriesFormatting(this.name, formatting);\n }\n\n getFormatting() {\n return this.plot.getSeriesFormatting(this.name, true)!;\n }\n\n get isDirty() {\n return this.#dirty;\n }\n\n set isDirty(value: boolean) {\n this.#dirty = value;\n }\n\n get onPrimaryAxis() {\n return this.#onPrimaryAxis;\n }\n\n set onPrimaryAxis(value: boolean) {\n if (value === this.#onPrimaryAxis) return;\n this.#onPrimaryAxis = value;\n this.#dirty = true;\n }\n\n clear() {\n this.#data = [];\n this.#dirty = true;\n }\n\n /**\n * Returns a copy of the data scaled by the current\n * range of the data\n * @returns \n */\n // getScaled() {\n // let min = this.#minSeen;\n // let max = this.#maxSeen;\n // if (Number.isNaN(min)) min = 0;\n // if (Number.isNaN(max)) max = 1;\n\n // const s = Numbers.scaler(min, max);\n // return this.getScaledBy(s);\n // }\n\n // getScaledBy(scaler: (v: number) => number) {\n // return this.#data.map(v => {\n // if (typeof v !== `number`) throw new Error(`Data should just be numbers. Got: ${ typeof v }`);\n // if (Number.isNaN(v)) throw new Error(`data contains NaN`);\n // const scaled = scaler(v);\n // if (Number.isNaN(scaled)) throw new Error(`NaN. v: ${ v } scaled: ${ scaled }`);\n // return Numbers.clamp(scaled)\n // });\n // }\n\n\n // resetScale() {\n // this.#minSeen = Number.MAX_SAFE_INTEGER;\n // this.#maxSeen = Number.MIN_SAFE_INTEGER;\n // this.#dirty = true;\n // }\n}\n\n// type AxisCrossing<T> = {\n// at: `value` | `max` | `min`\n// value?: T\n// }\n\n// type TickMarks = {\n// major: `none` | `inside` | `outside` | `cross`\n// minor: `none` | `inside` | `outside` | `cross`\n// }\n\n// type AxisLabels = `axis` | `high` | `low` | `none`;\n\nexport type PlotAxisBounds = `auto-persistent` | `auto` | Numbers.NumericRange;\n\nexport type PlotElementRenderStyle = `dot` | `line` | `bar`;\n\ntype DataPointHitbox = RectPositioned & {\n value: number[] | undefined,\n series: PlotSeries\n};\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-plot-element\": PlotElement;\n }\n}","export type CompareResult = number; // 0 | 1 | -1;\nexport type Comparer<V> = (a: V, b: V) => CompareResult;\n\n/**\n * Sort numbers in ascending order.\n *\n * ```js\n * [10, 4, 5, 0].sort(numericComparer);\n * // Yields: [0, 4, 5, 10]\n * [10, 4, 5, 0].sort(comparerInverse(numericComparer));\n * // Yields: [ 10, 5, 4, 0]\n * ```\n * @param x\n * @param y\n * @returns\n */\nexport const numericComparer = (x: number, y: number): CompareResult => {\n // ✔️ Unit tested\n if (x === y) return 0;\n if (x > y) return 1;\n return -1;\n};\n\n/**\n * Compares numbers by numeric value, otherwise uses the default\n * logic of string comparison.\n *\n * Is an ascending sort:\n * * b, a, c -> a, b, c\n * * 10, 5, 100 -> 5, 10, 100\n * \n * Returns -1 if x is less than y\n * Returns 1 if x is greater than y\n * Returns 0 if x is the same as y\n * @param x\n * @param y\n * @see {@link comparerInverse} Inverted order\n * @returns\n */\nexport const defaultComparer = (x: unknown, y: unknown): CompareResult => {\n if (typeof x === `number` && typeof y === `number`) {\n return numericComparer(x, y);\n }\n return jsComparer(x, y);\n};\n\n\n/**\n * Default sort comparer, following same sematics as Array.sort.\n * Consider using {@link defaultComparer} to get more logical sorting of numbers.\n *\n * Note: numbers are sorted in alphabetical order, eg:\n * ```js\n * [ 10, 20, 5, 100 ].sort(jsComparer); // same as .sort()\n * // Yields: [10, 100, 20, 5]\n * ```\n * \n * Returns -1 if x is less than y\n * Returns 1 if x is greater than y\n * Returns 0 if x is the same as y\n * @param x\n * @param y\n * @returns\n */\n\nexport const jsComparer = (x: unknown, y: unknown): CompareResult => {\n // ✔️ Unit tested\n\n // Via https://stackoverflow.com/questions/47334234/how-to-implement-array-prototype-sort-default-compare-function\n if (x === undefined && y === undefined) return 0;\n if (x === undefined) return 1;\n if (y === undefined) return -1;\n\n const xString = defaultToString(x);\n const yString = defaultToString(y);\n\n if (xString < yString) return -1;\n if (xString > yString) return 1;\n return 0;\n};\n\nexport const defaultToString = (object: unknown): string => {\n //ECMA specification: http://www.ecma-international.org/ecma-262/6.0/#sec-tostring\n if (object === null) return `null`;\n if (typeof object === `boolean` || typeof object === `number`) {\n return object.toString();\n }\n\n if (typeof object === `string`) return object;\n if (typeof object === `symbol`) throw new TypeError(`Symbol cannot be converted to string`);\n return JSON.stringify(object);\n};","import { defaultComparer } from \"./compare.js\";\nimport { type KeyValue } from \"./primitive-types.js\";\n\nexport type KeyValueSorter = (data: readonly KeyValue[]) => KeyValue[];\n\nexport type SortSyles = `value` | `value-reverse` | `key` | `key-reverse`;\nexport const getSorter = (sortStyle: SortSyles): KeyValueSorter => {\n switch (sortStyle) {\n case `value`: {\n return sorterByValueIndex(1, false);\n }\n case `value-reverse`: {\n return sorterByValueIndex(1, true);\n }\n case `key`: {\n return sorterByValueIndex(0, false);\n }\n case `key-reverse`: {\n return sorterByValueIndex(0, true);\n }\n default: {\n throw new Error(`Unknown sorting value '${ (sortStyle as string) }'. Expecting: value, value-reverse, key or key-reverse`);\n }\n }\n};\n\nconst sorterByValueIndex = (index: number, reverse = false) => {\n return (values: readonly KeyValue[]) => {\n const s:KeyValue[] = values.toSorted((a:KeyValue, b:KeyValue) => defaultComparer(a[ index ], b[ index ]));\n if (reverse) return s.reverse();\n return s;\n }\n}","import type { HistogramVis } from \"./histogram-vis.js\";\nimport {type KeyValueSorter, getSorter} from \"../util/key-value.js\";\n\n/**\n * Creates and drives a HistogramVis instance.\n * Data should be an outer array containing two-element arrays for each\n * data point. The first element of the inner array is expected to be the key, the second the frequency.\n * For example, `[`apples`, 2]` means the key `apples` was counted twice.\n *\n * Usage:\n * .sortBy() automatically sorts prior to visualisation. By default off.\n * .update(data) full set of data to plot\n * .clear() empties plot - same as calling `update([])`\n * .el - The `HistogramVis` instance, or undefined if not created/disposed\n *\n * ```\n * const plot = new FrequencyHistogramPlot(document.getElementById('histogram'));\n * plot.sortBy('key'); // Automatically sort by key\n * ...\n * plot.update([[`apples`, 2], [`oranges', 0], [`bananas`, 5]])\n * ```\n *\n * @export\n * @class FrequencyHistogramPlot\n */\nexport class FrequencyHistogramPlot {\n\treadonly el: HistogramVis | undefined;\n\t#sorter: KeyValueSorter | undefined;\n\tconstructor(el: HistogramVis) {\n\t\tthis.el = el;\n\t}\n\n\tsetAutoSort(\n\t\tsortStyle: `value` | `value-reverse` | `key` | `key-reverse`,\n\t): void {\n\t\tthis.#sorter = getSorter(sortStyle);\n\t}\n\n\tclear() {\n\t\tif (this.el === undefined) return;\n\t\tthis.el.data = [];\n\t}\n\n\tdispose() {\n\t\tconst el = this.el;\n\t\tif (el === undefined) return; // already disposed\n\t\tel.remove();\n\t}\n\n\tupdate(data: readonly (readonly [key: string, count: number])[]) {\n\t\tif (this.el === undefined) {\n\t\t\tconsole.warn(`FrequencyHistogramPlot this.el undefined`);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.el.data =\n\t\t\tthis.#sorter === undefined\n\t\t\t\t? [...data]\n\t\t\t\t: this.#sorter(data);\n\t}\n}\n","import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){const d=l(s),{values:p,keys:a}=this.dt(t,r,c);if(!Array.isArray(d))return this.ut=a,p;const h=this.ut??=[],v=[];let m,y,x=0,j=d.length-1,k=0,w=p.length-1;for(;x<=j&&k<=w;)if(null===d[x])x++;else if(null===d[j])j--;else if(h[x]===a[k])v[k]=o(d[x],p[k]),x++,k++;else if(h[j]===a[w])v[w]=o(d[j],p[w]),j--,w--;else if(h[x]===a[w])v[w]=o(d[x],p[w]),i(s,v[w+1],d[x]),x++,w--;else if(h[j]===a[k])v[k]=o(d[j],p[k]),i(s,d[x],d[j]),j--,k++;else if(void 0===m&&(m=u(a,k,w),y=u(h,x,j)),m.has(h[x]))if(m.has(h[j])){const e=y.get(a[k]),t=void 0!==e?d[e]:null;if(null===t){const e=i(s,d[x]);o(e,p[k]),v[k]=e}else v[k]=o(t,p[k]),i(s,d[x],t),d[e]=null;k++}else n(d[j]),j--;else n(d[x]),x++;for(;k<=w;){const e=i(s,v[w+1]);o(e,p[k]),v[k++]=e}for(;x<=j;){const e=d[x++];null!==e&&n(e)}return this.ut=a,f(s,v),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","import { LitElement, css, html } from \"lit\";\nimport { customElement } from \"lit/decorators/custom-element.js\";\nimport { property } from \"lit/decorators/property.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { type KeyValue } from \"../util/primitive-types.js\";\n\ntype Bar = {\n\treadonly percentage: number;\n\treadonly data: KeyValue;\n};\n\nconst jsonData = (object: unknown) => {\n\tif (object === null || object === undefined || object === `undefined`) return;\n\ttry {\n\t\tif (typeof object === `string`) {\n\t\t\tif (object.length === 0) return;\n\t\t\tconst o = JSON.parse(object) as object;\n\t\t\tif (!Array.isArray(o)) {\n\t\t\t\tconsole.error(`Histogram innerText should be JSON array`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const [index, element] of o.entries()) {\n\t\t\t\tif (!Array.isArray(element)) {\n\t\t\t\t\tconsole.error(`Histogram array should consist of inner arrays`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (element.length !== 2) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`Histogram inner arrays should consist of two elements`,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (typeof element[0] !== `string`) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`First element of inner array should be a string (index ${index})`,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (typeof element[1] !== `number`) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`Second element of inner array should be a number (index ${index})`,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t \n\t\t\treturn o as unknown[];\n\t\t}\n\t} catch (error) {\n\t\tconsole.log(object);\n\t\tconsole.error(error);\n\t}\n\treturn;\n};\n\n/**\n * Usage in HTML:\n * ```html\n * <style>\n * histogram-vis {\n * display: block;\n * height: 7em;\n * --histogram-bar-color: pink;\n * }\n * </style>\n * <histogram-vis>\n * [\n * [\"apples\", 5],\n * [\"oranges\", 3],\n * [\"pineapple\", 0],\n * [\"limes\", 9]\n * ]\n * </histogram-vis>\n * ```\n *\n * CSS colour theming:\n * --histogram-bar-color\n * --histogram-label-color\n *\n * HTML tag attributes\n * showXAxis (boolean)\n * showDataLabels (boolean)\n *\n * @export\n * @class HistogramVis\n * @extends {LitElement}\n **/\n@customElement(`histogram-vis`)\nexport class HistogramVis extends LitElement {\n\tstatic readonly styles = css`\n :host {\n }\n div.container {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n div.chart {\n display: grid;\n flex: 1;\n grid-template-rows: 1fr 1px min-content;\n justify-items: center;\n }\n div.bar {\n display: flex;\n flex-direction: column-reverse;\n align-items: center;\n justify-self: normal;\n padding-left: 0.3vw;\n padding-right: 0.3vw;\n }\n div.bar > div.barTrack {\n background-color: var(--histogram-bar-color, gray);\n align-self: stretch;\n }\n div.xAxisLabels,\n div.data {\n font-size: min(1vw, 1em);\n color: var(--histogram-label-color, currentColor);\n }\n div.xAxisLabels {\n width: 100%;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n text-align: center;\n }\n div.xAxis {\n background-color: var(--histogram-axis-color, silver);\n width: 100%;\n height: 100%;\n }\n `;\n\n\t@property()\n\tdeclare data: readonly KeyValue[];\n\n\t@property()\n\tdeclare showDataLabels: boolean;\n\n\t@property()\n\tdeclare height: string;\n\n\t@property()\n\tdeclare showXAxis: boolean;\n\n\t@property({ converter: jsonData, type: Object })\n\tdeclare json: readonly KeyValue[] | undefined;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.data = [];\n\t\tthis.showDataLabels = true;\n\t\tthis.height = `100%`;\n\t\tthis.showXAxis = true;\n\t\tthis.json = undefined;\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.hasAttribute(`json`)) {\n\t\t\tthis.setAttribute(`json`, this.innerText);\n\t\t}\n\t\tsuper.connectedCallback();\n\t}\n\n\tbarTemplate(bar: Bar, index: number, _totalBars: number) {\n\t\tconst { percentage } = bar;\n\t\tconst [key, freq] = bar.data;\n\n\t\t// grid-area: rowStart / gridColStart / gridRowEnd / gridColEnd\n\t\tconst rowStart = 1;\n\t\tconst rowEnd = 2;\n\t\tconst colStart = index + 1;\n\t\tconst colEnd = colStart + 1;\n\n\t\tconst dataLabel = html`<div class=\"data\">${freq}</div>`;\n\t\tconst xAxis = html`${key}`;\n\t\treturn html`\n <div\n class=\"bar\"\n style=\"grid-area: ${rowStart} / ${colStart} / ${rowEnd} / ${colEnd}\"\n >\n <div class=\"barTrack\" style=\"height: ${(percentage ?? 0) * 100}%\"></div>\n ${this.showDataLabels ? dataLabel : ``}\n </div>\n <div\n class=\"xAxisLabels\"\n style=\"grid-area: ${rowStart + 2} / ${colStart} / ${\n\t\t\t\t\t\t\t\trowEnd + 2\n\t\t\t\t\t\t\t} / ${colEnd}\"\n >\n ${this.showXAxis ? xAxis : ``}\n </div>\n `;\n\t}\n\n\trender() {\n\t\tif (\n\t\t\t(this.data === undefined || this.data.length === 0) &&\n\t\t\tthis.json === undefined\n\t\t) {\n\t\t\treturn html``;\n\t\t}\n\t\tconst d = this.data ?? this.json;\n\t\tconst length = d.length;\n\t\tconst highestCount = Math.max(...d.map((d) => d[1] as number));\n\t\tconst bars = d.map((kv) => ({\n\t\t\tdata: kv,\n\t\t\tpercentage: (kv[1] as number) / highestCount,\n\t\t}));\n\n\t\tconst xAxis = html`\n <div\n class=\"xAxis\"\n style=\"grid-area: 2 / 1 / 3 / ${d.length + 1}\"\n ></div>\n `;\n\t\tconst height = this.height ? `height: ${this.height};` : ``;\n\t\tconst h = html`\n <style>\n div.chart {\n grid-template-columns: repeat(${d.length}, minmax(2px, 1fr));\n }\n </style>\n <div class=\"container\" style=\"${height}\">\n <div class=\"chart\">\n ${repeat(\n\t\t\t\t\t\t\t\t\tbars,\n\t\t\t\t\t\t\t\t\t(bar) => bar.data[0],\n\t\t\t\t\t\t\t\t\t(b, index) => this.barTemplate(b, index, length),\n\t\t\t\t\t\t\t\t)}\n ${this.showXAxis ? xAxis : ``}\n </div>\n </div>\n `;\n\t\treturn h;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\treadonly \"histogram-vis\": HistogramVis;\n\t}\n}\n","export * from './dial.js';\nexport * from './selecthorizontal.js'\nexport * from './crumb-navigation.js'\nexport * from './crumb-nav.js'\nexport * from './tabs/tab-list-item.js';\nexport * from './tabs/tab-list.js';\nexport * from './tabs/tab-panels.js';\nexport * from './tabs/tab-panel.js';\nexport * from './split-layout/split-layout.js';\nexport * from './charts/plot.js';\nexport * from './charts/frequency-histogram-plot.js';\nexport * from './charts/histogram-vis.js';\n\nexport const init = () => {\n console.log(`Init`);\n}"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,9,10,11,12,15,18,30],"mappings":"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"}
|