@ixfx/components 0.16.3 → 0.16.4
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 +2 -2
- package/bundle/index.js +5 -5
- package/dist/{index-DyaHA9Kk.d.ts → index-YCDugjdu.d.ts} +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{miller-Be7x4ufN.js → miller-BrmBywNZ.js} +17 -7
- package/dist/miller.d.ts +1 -1
- package/dist/miller.js +1 -1
- package/docs-user/README.md +5 -0
- package/docs-user/bottom-drawer.md +2 -2
- package/docs-user/crumbs.md +1 -1
- package/docs-user/data-grid.md +2 -2
- package/docs-user/detail-list.md +3 -3
- package/docs-user/dock.md +3 -3
- package/docs-user/flat-list.md +7 -7
- package/docs-user/grid-list.md +3 -3
- package/docs-user/hyperbolic-tree.md +6 -6
- package/docs-user/icicle-tree.md +2 -2
- package/docs-user/incr-search.md +1 -1
- package/docs-user/index.json +22 -2
- package/docs-user/infra-handle.md +122 -0
- package/docs-user/infra-incremental.md +154 -0
- package/docs-user/infra-theming.md +510 -0
- package/docs-user/infra-view-state.md +210 -0
- package/docs-user/list-state.md +656 -0
- package/docs-user/llms.txt +5 -0
- package/docs-user/miller.md +2 -2
- package/docs-user/panel.md +3 -3
- package/docs-user/split-layout.md +2 -2
- package/docs-user/sunburst-tree.md +3 -3
- package/docs-user/titlebar.md +2 -2
- package/docs-user/tree.md +2 -2
- package/docs-user/treemap.md +2 -2
- package/docs-user/twosplit-layout.md +3 -3
- package/docs-user/user-selection-intents.md +3 -3
- package/docs-user/user-theming.md +1 -1
- package/docs-user/vertical-list.md +2 -2
- package/llms.txt +5 -0
- package/package.json +1 -1
package/bundle/index.d.ts
CHANGED
|
@@ -11189,8 +11189,8 @@ declare class MillerBaseElement extends LitElement implements TreeComponent, Tre
|
|
|
11189
11189
|
* Nodes shown as *partially* selected (a part of the resource is selected):
|
|
11190
11190
|
* an indeterminate checkbox in `checked` mode, `.partial` and an accessible
|
|
11191
11191
|
* description otherwise. Independent of the selection — a key in both counts
|
|
11192
|
-
* as selected. In `checked` mode
|
|
11193
|
-
* loaded descendants. Replace-on-set.
|
|
11192
|
+
* as selected. In `checked` mode a node is indeterminate if either the
|
|
11193
|
+
* loaded descendants or this say so (as in the tree). Replace-on-set.
|
|
11194
11194
|
*/
|
|
11195
11195
|
get partialKeys(): ReadonlySet<string>;
|
|
11196
11196
|
set partialKeys(keys: Iterable<string>);
|
package/bundle/index.js
CHANGED
|
@@ -10165,7 +10165,7 @@ ixfx-form-options[orientation="vertical"] ixfx-form-part > label {
|
|
|
10165
10165
|
:host([mode="pulse"]) div {
|
|
10166
10166
|
transition: none;
|
|
10167
10167
|
}
|
|
10168
|
-
`}};E([d({type:Number})],TE.prototype,`value`,void 0),E([d({type:Boolean,attribute:`lit`,reflect:!0})],TE.prototype,`lit`,void 0),E([d({type:String})],TE.prototype,`color`,void 0),E([d({type:Boolean,attribute:`glow`,reflect:!0})],TE.prototype,`glow`,void 0),E([d({type:String,reflect:!0})],TE.prototype,`mode`,void 0),E([d({type:Boolean,attribute:`blinking`,reflect:!0})],TE.prototype,`blinking`,void 0),E([d({type:Number,attribute:`rate`})],TE.prototype,`rate`,void 0),E([d({type:Number,attribute:`attack-time`})],TE.prototype,`attackTime`,void 0),E([d({type:Number,attribute:`release-time`})],TE.prototype,`releaseTime`,void 0),E([d({type:Boolean,attribute:`pulse-retrigger`})],TE.prototype,`pulseRetrigger`,void 0),TE=E([T(`ixfx-led`)],TE);function EE(e){let n=[];for(let r=0;r<e.length-1;r++){let i=e[r+1],a=e[r].find(e=>e.children===i);if(!a)break;n.push(a.item.key)}return n}function DE(e,n){let r=[e],i=[],a=e;for(let e of n){let n=a.find(n=>n.item.key===e);if(!n)return{columns:r,nodes:i,blocked:void 0,done:!1};if(i.push(n),n.item.isLeaf===!0)return{columns:r,nodes:i,blocked:void 0,done:!0};if(n.children===void 0)return{columns:r,nodes:i,blocked:n,done:!1};r.push(n.children),a=n.children}return{columns:r,nodes:i,blocked:void 0,done:!0}}function OE(e){let n=new Map;for(let[r,i]of Object.entries(e)){let e=Number(r);Number.isInteger(e)&&e>=0&&typeof i==`number`&&Number.isFinite(i)&&i>0&&n.set(e,i)}return n}function kE(e,n){return e.length===n.length&&e.every((e,r)=>e===n[r])}function AE(e,n){return e.findIndex(e=>e.some(e=>e.item.key===n))}function jE(e){let n=new Map,r=[...e];for(;r.length>0;){let e=r.pop();n.set(e.item.key,e),e.children&&r.push(...e.children)}return n}function ME(e,n,r,i){let a=[...e].filter(e=>!r(e)),{present:o,missing:s}=ar(n,r);if(a.length===0&&o.length===0)return{live:e,pending:n,restored:[],changed:!1};if(i&&o.length>0){let e=o.at(-1);return{live:new Set([e]),pending:k,restored:[e],changed:!0}}return{live:new Set([...[...e].filter(r),...o]),pending:sr(a.length===0?s:new Set([...s,...a])),restored:o,changed:!0}}function NE(e,n,r,i,a){let o=DE(e,n),s=o.blocked!==void 0&&o.blocked===a,c=!s&&!kE(o.columns,r),l;if(c){l=new Map(o.nodes.map((e,n)=>[n,e]));let e=i.get(o.nodes.length);e&&o.columns[o.nodes.length]?.includes(e)&&l.set(o.nodes.length,e)}return{columns:c?o.columns:void 0,selectedByDepth:l,pending:o.done?void 0:n,load:o.blocked&&!s&&o.blocked.item.isLeaf!==!0?{node:o.blocked,depth:o.nodes.length-1}:void 0}}function PE(e,n,r,i,a,o,s){let c=ME(e,n,e=>a.has(e),s),l=[...c.live].map(e=>a.get(e));if(!c.changed&&l.length===r.size&&l.every(e=>r.has(e)))return;let u=c.restored.at(-1)??i?.item.key,d=[];for(let e of c.restored){let n=AE(o,e);n>=0&&d.push([n,a.get(e)])}return{keys:new Set(c.live),nodes:new Set(l),pending:c.pending,last:(u===void 0?void 0:a.get(u))??l.at(-1),placed:d,restored:c.restored.length>0}}function FE(e,n,r,i,a){let o=e!==void 0&&!i.has(e),s=r??(o&&n?e:void 0),c=s===void 0?-1:AE(a,s);return c<0?{clear:o,pending:s,tickle:void 0}:{clear:o,pending:void 0,tickle:{node:a[c].find(e=>e.item.key===s),depth:c}}}function IE(e,n,r,i){return{contents:[...e?.querySelectorAll(`.column:not(.loading-column) > .column-content`)??[]],parentKeys:r===void 0?[]:[r,...EE(n)],keysAt:e=>(n[e]??[]).filter(n=>!i||i(n,e)).map(e=>e.item.key)}}function LE(e,n,r){let i={};return e.forEach((e,a)=>{let o=n[a];if(o===void 0||e.scrollTop===0&&e.scrollLeft===0)return;let s=[...e.querySelectorAll(`.item`)],c=r(a);i[o]=a_(e,s,e=>c[s.indexOf(e)])}),i}function RE(e,n,r,i){let a;for(let[o,s]of e){let c=r.indexOf(o),l=n[c];if(c<0||!l)continue;let u;if(s.anchor){let e=i(c).indexOf(s.anchor.key),n=e<0?void 0:l.querySelectorAll(`.item`)[e];u=n?o_(l,n,s.anchor.offset):!1}else u=s_(l,s.top);u&&(a??=new Map(e),a.delete(o))}return a??e}let zE=class extends n{constructor(...e){super(...e),this.headers=!1,this.stretchLastColumn=!1,this.interactionMode=`standard`,this.selectionFilter=`leaf`,this.exclusivity=`none`,this._columns=[],this._selectedByDepth=new Map,this._selectedKeys=new Set,this._selectedNodes=new Set,this.#n=new Map,this.#o=-1,this.#s=0,this.#c=0,this.restoreLoads=!0,this.#u=new f_(this,{kind:`miller-list`,capture:()=>this.getViewState()}),this.#f=k,this.#m=new Map,this.#h=!1,this.#g=[],this.search=new Vt(this,{adapter:Wt(this,{labelSelector:`.label`,highlightKey:`incr-search-highlight`})}),this.tickled=new oe(this,{getItems:()=>{let e=[];for(let n=0;n<this._columns.length;n++){let r=this._columns[n];if(r)for(let i of r)e.push({id:this.#x(i,n)})}return e}}),this.#w=e=>{this.#m.size===0&&e.target.classList?.contains(`column-content`)&&this.#u.notify()},this._partialKeys=new Set,this._partialDescription=_r,this.#N=`user`,this.#P=!1,this.#me=e=>{if(this.search.isOpen)return;let n=this.#ce(),r=this._columns[n];if(!r||r.length===0){let e=this._columns[0];e&&e.length>0&&(this.tickled.setTickled(this.#x(e[0],0)),this.requestUpdate());return}switch(e.key){case`ArrowDown`:e.preventDefault(),this.#pe(r,n,e,e=>Math.min(e+1,r.length-1));break;case`ArrowUp`:e.preventDefault(),this.#pe(r,n,e,e=>Math.max(e-1,0));break;case`Home`:e.preventDefault(),this.#pe(r,n,e,()=>0,!0);break;case`End`:e.preventDefault(),this.#pe(r,n,e,()=>r.length-1,!0);break;case`PageUp`:e.preventDefault(),this.#pe(r,n,e,e=>Math.max(e-this.#fe(n),0),!0);break;case`PageDown`:e.preventDefault(),this.#pe(r,n,e,e=>Math.min(e+this.#fe(n),r.length-1),!0);break;case`ArrowRight`:{e.preventDefault();let i=this.#le();if(!i){r.length>0&&(this.#de(r[0],n),this.requestUpdate());return}let{node:a,depth:o}=i;if(this.interactionMode===`vscode`||this.interactionMode===`standard`?(this._selectedByDepth.set(o,a),this.#re(a,o)):this.#ee(a,o),this._columns.length>o+1){let e=this._columns[o+1];e&&e.length>0&&this.#de(e[0],o+1)}this.requestUpdate();break}case`ArrowLeft`:if(e.preventDefault(),n>0){this.#Z(),this.#d=void 0,this._columns=this._columns.slice(0,n);let e=this._columns[n-1];if(e&&e.length>0){let r=this._selectedByDepth.get(n-1),i=r&&e.includes(r)?r:e[0];this.#de(i,n-1)}this.requestUpdate()}break;case`Enter`:{e.preventDefault();let n=this.#le();if(!n)return;let{node:i,depth:a,index:o}=n;if(this.interactionMode===`standard`||this.interactionMode===`vscode`){if(e.shiftKey&&this.#t?.depth===a){let e=Math.min(this.#t.index,o),n=Math.max(this.#t.index,o);this._selectedKeys=new Set(r.slice(e,n+1).map(e=>e.item.key))}else this._selectedKeys.add(i.item.key),this.#t={key:i.item.key,depth:a,index:o};this.#T()}else this._selectedByDepth.set(a,i);this.dispatchEvent(new CustomEvent(`activate`,{detail:{node:i,depth:a},bubbles:!0,composed:!0})),this.requestUpdate();break}case`Escape`:if(e.preventDefault(),this.#Z(),this._columns.length>1){this.#d=void 0,this._columns=this._columns.slice(0,-1);let e=Math.max(0,n-1),r=this._columns[e];if(r&&r.length>0){let n=this._selectedByDepth.get(e),i=n&&r.includes(n)?n:r[0];this.#de(i,e)}this.requestUpdate()}}},this.#he=(e,n)=>{e.preventDefault(),e.stopPropagation(),this.#o=n,this.#s=e.clientX;let r=this.shadowRoot?.querySelectorAll(`.column`)[n];this.#c=r?r.getBoundingClientRect().width:200,window.addEventListener(`pointermove`,this.#ve),window.addEventListener(`pointerup`,this.#be)},this.#ge=null,this.#_e=0,this.#ve=e=>{this.#o<0||(this.#_e=Math.max(32,this.#c+(e.clientX-this.#s)),this.#ge??=requestAnimationFrame(this.#ye))},this.#ye=()=>{this.#ge=null,!(this.#o<0)&&(this.shadowRoot?.querySelectorAll(`.column`)[this.#o])?.setAttribute(`style`,this.#Se(this.#_e))},this.#be=()=>{this.#ge!==null&&(cancelAnimationFrame(this.#ge),this.#ge=null),this.#o>=0&&this.#_e>0&&(this.#n.set(this.#o,this.#_e),this.#u.notify(),this.requestUpdate()),this.#_e=0,this.#o=-1,window.removeEventListener(`pointermove`,this.#ve),window.removeEventListener(`pointerup`,this.#be)}}#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g;#_;#v;get registry(){return this.#_}#y(){let e=this.searchModes?.trim();if(e===void 0)return[...O];let n=new Set(e.split(/\s+/));return O.filter(e=>n.has(e))}#b(){this.#_&&(this.search.setModes(this.#y()),this.#v?.(),this.#v=zt(this.#_,this.search))}#x(e,n){return`${n}:${e.item.key}`}get#S(){return this.viewRoot??this.root}#C(){let e=this.tickled.tickledId;if(!e)return;let n=e.indexOf(`:`);if(!(n<0))return Number(e.substring(0,n))}willUpdate(e){kE(this._columns,this.#g)||(this.#g=this._columns,this.#u.notify())}updated(e){if(e.has(`searchModes`)&&this.#b(),e.has(`root`)&&this.root){let e=this.viewRoot!==void 0,n=e?[]:EE(this._columns),r=this.#O();this.#Z(),e&&(this.viewRoot=void 0,this._selectedKeys=new Set,this._selectedNodes=new Set),this._selectedByDepth.clear(),this.#e=void 0,this.#t=void 0,this.tickled.clearTickled();let i=this.#S;this._columns=i?.children?[i.children]:[],this.#g=this._columns,n.length>0&&(this.#d??=n),r!==void 0&&(this.#p??=r),this.#A()}if(e.has(`viewRoot`)&&this.#L(),e.has(`model`)){this.#l?.(),this.#l=void 0;let e=this.model;e&&(this.root=e.root,this.#l=e._subscribe(e=>{if(e.type===`root`)this.root=e.root,this.requestUpdate();else if(e.type===`invalidate`){for(let n=0;n<this._columns.length-1;n++)if(this._columns[n]?.some(n=>n.item.key===e.key)){this._columns=this._columns.slice(0,n+1),this.requestUpdate();break}}}))}if(this.#r?.children!==void 0&&this._loadingDepth!==void 0){let e=this._loadingDepth,n=this.#r.children;this.#r=void 0,this.#i=void 0,this._loadingDepth=void 0;let r=this._columns.slice(0,e);n.length>0&&r.push(n),this._columns=r,this.#E()&&this.#A()}if(this.#m.size>0){let{contents:e,parentKeys:n,keysAt:r}=this.#k();this.#m=RE(this.#m,e,n,r)}let n=e.get(`_columns`),r=e.has(`_columns`)&&(n?.length??0)<this._columns.length,i=e.has(`_loadingDepth`)&&this._loadingDepth!==void 0;if(r||i){let e=this.shadowRoot?.querySelector(`#container`);e?.scrollTo({left:e.scrollWidth,behavior:`smooth`})}}firstUpdated(){let e=this.shadowRoot?.querySelector(`#container`);e&&u_(e,()=>{this.#m=new Map}),this.renderRoot.addEventListener(`scroll`,this.#w,{capture:!0,passive:!0})}#w;connectedCallback(){super.connectedCallback(),this.#_??=Yt(),this.#b()}disconnectedCallback(){super.disconnectedCallback(),this.#l?.(),this.#l=void 0,this.#v?.(),this.#v=void 0,this.#_=void 0}getViewState(e){let n=e?.includePending??!0,{contents:r,parentKeys:i,keysAt:a}=this.#k();return this.#u.shape({selected:fr(this._selectedKeys,n?this.#f:[]),path:(n?this.#d:void 0)??EE(this._columns),focus:this.#O()??(n?this.#p:void 0),columnWidths:Object.fromEntries(this.#n),columnScroll:{...LE(r,i,a),...n?Object.fromEntries(this.#m):{}}},e)}setViewState(e){this.#u.accepts(e)&&(this.#u.restoring(()=>{if(e.path&&(this.#d=[...e.path]),e.selected){this.#f=sr(new Set(e.selected));let n=new Set(this._selectedNodes);this._selectedKeys=new Set,this._selectedNodes=new Set,this.#e=void 0,this.#t=void 0,n.size>0&&this.#q(n)}e.focus!==void 0&&(this.#p=e.focus),e.columnWidths&&(this.#n=OE(e.columnWidths),this.#u.notify()),e.columnScroll&&(this.#m=new Map(Object.entries(e.columnScroll))),this.#A()}),this.requestUpdate())}clearPendingViewState(){this.#d=void 0,this.#f=k,this.#p=void 0,this.#m=new Map}#T(){this.#u.isRestoring||(this.#f=k),this.#u.notify()}#E(){return this.#d!==void 0||this.#f.size>0||this.#p!==void 0}#D(){let e=this.tickled.tickledId,n=e?.indexOf(`:`)??-1;return e===void 0||n<0?void 0:e.substring(n+1)}#O(){return this.#h?this.#D():void 0}#k(){return IE(this.shadowRoot,this._columns,this.#S?.item.key,this.filterPredicate)}#A(){let e=this.#S?.children;if(!e)return;let n=jE(e);this.#u.restoring(()=>{this.#d&&this.#j(NE(e,this.#d,this._columns,this._selectedByDepth,this.#r));let r=PE(this._selectedKeys,this.#f,this._selectedNodes,this.#e,n,this._columns,this.interactionMode===`implicit`);r&&this.#M(r);let i=FE(this.#D(),this.#h,this.#p,n,this._columns);i.clear&&this.tickled.clearTickled(),this.#p=i.pending,i.tickle&&(this.tickled.setTickled(this.#x(i.tickle.node,i.tickle.depth)),this.#h=!0,this.#u.notify())})}#j(e){e.columns&&(this.#r&&this.#Z(),this._columns=e.columns,this._selectedByDepth=e.selectedByDepth),this.#d=e.pending,e.load&&this.restoreLoads&&(this.model||this.loadChildren)&&this.#ie(e.load.node,e.load.depth,!0,!0),kE(this._columns,this.#g)||(this.#g=this._columns,this.#u.notify())}#M(e){let n=this._selectedNodes;if(this._selectedKeys=e.keys,this._selectedNodes=e.nodes,this.#f=e.pending,this.#e=e.last,this.interactionMode===`implicit`)for(let[n,r]of e.placed)this._selectedByDepth.set(n,r);if(!e.restored){this.#u.notify();return}let r=this.#N;this.#N=`programmatic`;try{this.#q(n)}finally{this.#N=r}}get selectedKeys(){return this._selectedKeys}set selectedKeys(e){this._selectedKeys=new Set(e),this.#T(),this.requestUpdate()}get selectedNode(){return this.#e}set selectedNode(e){this.#e=e,e&&(this.interactionMode===`implicit`||this.interactionMode===`standard`)&&(this._selectedKeys=new Set([e.item.key]),this.#T()),this.requestUpdate()}get selectedNodes(){return this._selectedNodes}select(e){if(!this.#K(e))return;let n=new Set(this._selectedNodes);this._selectedNodes.add(e),this._selectedKeys.add(e.item.key),this.#e=e,this.#q(n),this.requestUpdate()}deselect(e){if(!this._selectedNodes.has(e))return;let n=new Set(this._selectedNodes);this._selectedNodes.delete(e),this._selectedKeys.delete(e.item.key),this.#e===e&&(this.#e=[...this._selectedNodes].at(-1)),this.#q(n),this.requestUpdate()}clearSelection(){this.#T();let e=new Set(this._selectedNodes);this._selectedKeys=new Set,this._selectedNodes.clear(),this.#e=void 0,e.size>0&&this.#q(e),this.requestUpdate()}selectAll(){}get partialKeys(){return this._partialKeys}set partialKeys(e){let n=new Set(e);yr(n,this._partialKeys)||(this._partialKeys=n)}_isPartial(e,n){return vr(e.item.key,this._partialKeys,this._isSelected(e,n))}deselectAll(){}setSelected(e,n){this.interactionMode===`checked`?this.#se(e,n):n?(this._selectedKeys.add(e.item.key),this._selectedNodes.add(e)):(this._selectedKeys.delete(e.item.key),this._selectedNodes.delete(e)),this.#T(),this.requestUpdate()}getSelected(){let e=[];for(let n of this._columns)for(let r of n)this._selectedKeys.has(r.item.key)&&e.push(r);return e}navigateTo(e,n={}){let r=this.#S;if(!r?.children)return!1;let i=this.#N,a=this.#P;this.#N=`programmatic`,this.#P=n.silent===!0;try{return this.#F(r.children,e,n.reveal??`edge`)}finally{this.#N=i,this.#P=a}}invalidateStructure(){let e=EE(this._columns);e.length>0&&(this.#d??=e),this.#A(),this.requestUpdate()}#N;#P;#F(e,n,r){this.#Z(),this.#d=void 0,this._selectedByDepth.clear(),this.tickled.clearTickled();let i=[e],a=e,o=!0,s,c=0;for(let e=0;e<n.length;e++){let r=a.findIndex(r=>r.item.key===n[e]);if(r<0){o=!1;break}let l=a[r];if(this._selectedByDepth.set(e,l),s=l,c=e,l.item.isLeaf||!l.children||l.children.length===0){e<n.length-1&&(o=!1);break}i.push(l.children),a=l.children}if(this._columns=i,s&&this.tickled.setTickled(this.#x(s,c)),this.interactionMode!==`implicit`&&this.interactionMode!==`manual`){let e=n.at(-1);e&&(this._selectedKeys=new Set([e]),this.#T())}return this.requestUpdate(),this.#ue(r===`center-if-hidden`?`auto`:`smooth`,r),o}navigateToNode(e){let n=this.#S;if(!n?.children)return!1;let r=this.#I(n.children,e);return r?this.navigateTo(r):!1}revealKey(e){let n=this.#S;if(!n?.children)return!1;let r=this.#I(n.children,n=>n.item.key===e);if(!r)return!1;this.#d=void 0;let i=[n.children],a=n.children,o,s=0;for(let e=0;e<r.length;e++){let n=a.find(n=>n.item.key===r[e]);if(!n)return!1;if(o=n,s=e,n.children&&n.children.length>0)i.push(n.children),a=n.children;else break}return this._columns=i,o&&this.tickled.setTickled(this.#x(o,s)),this.requestUpdate(),this.#ue(),!0}selectMany(e){let n=this.selectionFilter===`none`?[]:[...e],r=new Set(this._selectedNodes);this._selectedNodes=new Set(n),this._selectedKeys=new Set(n.map(e=>e.item.key)),this.#e=n.at(-1),this.#q(r),this.requestUpdate()}getNodes(){let e=this.#S;if(!e?.children)return[];let n=[],r=(e,i)=>{if(n.push({node:e,depth:i}),e.children)for(let n of e.children)r(n,i+1)};for(let n of e.children)r(n,0);return n}#I(e,n,r=[]){for(let i of e){let e=[...r,i.item.key];if(n(i))return e;if(i.children?.length){let r=this.#I(i.children,n,e);if(r)return r}}}#L(){this.#Z();let e=new Set(this._selectedNodes);this._selectedByDepth.clear(),this._selectedKeys=new Set,this._selectedNodes.clear(),this.#e=void 0,this.#t=void 0,this.tickled.clearTickled();let n=this.#S;n?.children===void 0?n?(this._columns=[],this.#ie(n,-1,!1)):(this._columns=[],this._loadingDepth=void 0):(this._columns=n.children?[n.children]:[],this._loadingDepth=void 0),e.size>0&&this.#q(e),this.#E()&&this.#A()}rebaseTo(e){if(e===void 0)return this.#R();let n=typeof e==`string`?this.#B(e):e;return!n||n.item.isLeaf===!0||n===this.viewRoot||n.item.key===this.viewRoot?.item.key?!1:n===this.root||!this.viewRoot&&n.item.key===this.root?.item.key?this.#R():(this.viewRoot=n,this.#z(),!0)}rebaseUp(){if(!this.viewRoot)return!1;let e=this.#H(this.viewRoot);return e?e===this.root?this.#R():(this.viewRoot=e,this.#z(),!0):!1}#R(){return this.viewRoot!==void 0&&(this.viewRoot=void 0,this.#z(),!0)}#z(){this.#d=void 0;let e=this.viewRoot,n={viewRoot:e,path:e?this.#W(e):[]};this.dispatchEvent(new CustomEvent(`rebase`,{detail:n,bubbles:!0,composed:!0}))}#B(e){if(this.root)return this.root.item.key===e?this.root:this.#V(this.root.children??[],e)}#V(e,n){for(let r of e){if(r.item.key===n)return r;if(r.children){let e=this.#V(r.children,n);if(e)return e}}}#H(e){if(!(!this.root||e===this.root))return this.#U(this.root,e)}#U(e,n){if(e.children)for(let r of e.children){if(r===n||r.item.key===n.item.key)return e;let i=this.#U(r,n);if(i)return i}}#W(e){let n=[e],r=this.#H(e);for(;r&&(n.unshift(r),r!==this.root);)r=this.#H(r);return n}renderColumnContent(e,n){return console.warn(`ixfx-miller-base: renderColumnContent not overridden. depth=${n}, nodes=${e.length}`),a}_handleItemClick(e,n,r){this.#ee(e,n,r)}_handleCheckboxClick(e,n,r){e.stopPropagation(),this.#ae(n)}_handleItemDblClick(e,n,r){this.dispatchEvent(new CustomEvent(`item-dblclick`,{detail:{node:e,depth:n},bubbles:!0,composed:!0}))}_handleItemRightClick(e,n,r){this.dispatchEvent(new CustomEvent(`item-rightclick`,{detail:{node:e,depth:n,mouseEvent:r},bubbles:!0,composed:!0}))}_handleHeaderRightClick(e,n){let r=this.#xe(n),i=this.#Q(n);this.dispatchEvent(new CustomEvent(`header-rightclick`,{detail:{depth:n,label:r,path:i,mouseEvent:e},bubbles:!0,composed:!0}))}_isSelected(e,n){return this.interactionMode===`implicit`?this._selectedByDepth.get(n)===e:this._selectedKeys.has(e.item.key)}#G(e,n){let r=this._columns[n+1];return r!==void 0&&e.children===r}_isOpen(e,n){return this.#G(e,n)}getItemState(e,n){let r=this._columns[n]?.find(n=>n.item.key===e);if(r)return{selected:this._isSelected(r,n),open:this.#G(r,n),focused:this._isFocused(r,n),isLeaf:r.item.isLeaf??!1}}#K(e){return this.selectionFilter===`none`?!1:this.selectionFilter===`leaf`?e.item.isLeaf!==!1:this.selectionFilter!==`branch`||e.item.isLeaf===!1||e.children!==void 0&&e.children.length>0}#q(e){if(this.#T(),this.#P)return;let n={selected:new Set(this._selectedNodes),previous:e,origin:this.#N};this.dispatchEvent(new CustomEvent(`select`,{detail:n,bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent(`list-select`,{detail:{selectedKeys:new Set(this._selectedKeys),previousKeys:new Set([...e].map(e=>e.item.key)),previous:e},bubbles:!0,composed:!0}))}#J(e){return!this.dispatchEvent(new CustomEvent(`list-select-intent`,{detail:e,bubbles:!0,composed:!0,cancelable:!0}))}#Y(e,n,r){if(!(!this.#t||this.#t.depth!==n||!e||r<0))return e.slice(Math.min(this.#t.index,r),Math.max(this.#t.index,r)+1)}#X(e,n,r,i){let a=e.item.key;if(r&&(r.metaKey||r.ctrlKey)){this.#J({kind:`toggle`,keys:[a],source:i});return}let o=this._columns[n],s=r?.shiftKey?this.#Y(o,n,o?o.indexOf(e):-1):void 0;if(s&&this.#t){this.#J({kind:`extend`,keys:s.map(e=>e.item.key),anchorKey:this.#t.key,targetKey:a,source:i});return}this.#J({kind:`replace`,keys:[a],source:i})}#Z(){if(this.#a!==void 0&&(clearTimeout(this.#a),this.#a=void 0),this.#i){let e=this.#r,n=this._loadingDepth;this.#i.abort(),this.#i=void 0,this.#r=void 0,this._loadingDepth=void 0,e&&n!==void 0&&this.dispatchEvent(new CustomEvent(`collapse`,{detail:{node:e,depth:n},bubbles:!0,composed:!0}))}}#Q(e){let n=[];this.#S&&n.push(this.#S);for(let r=0;r<e;r++){let e=this._selectedByDepth.get(r);e&&n.push(e)}return n}#$(e){let n={depth:e,label:this.#xe(e),path:this.#Q(e)};this.dispatchEvent(new CustomEvent(`header-click`,{detail:n,bubbles:!0,composed:!0}))}#ee(e,n,r){switch(this._loadingDepth!==void 0&&this._loadingDepth>n&&this.#Z(),this.tickled.setTickled(this.#x(e,n)),this.#h=!1,this.#p=void 0,this.dispatchEvent(new CustomEvent(`item-click`,{detail:{node:e,depth:n},bubbles:!0,composed:!0})),this.interactionMode){case`implicit`:this.#te(e,n);break;case`standard`:this.#ne(e,n,r);break;case`vscode`:this.#ne(e,n,r);break;case`manual`:this.#X(e,n,r,`pointer`);break;case`checked`:this.#re(e,n,!0)}}#te(e,n){if(this.#J({kind:`replace`,keys:[e.item.key],source:`pointer`})){this.#e=e,this.#re(e,n,!0);return}let r=new Set(this._selectedNodes);this._selectedByDepth.set(n,e),this.#e=e,this._selectedKeys=new Set([e.item.key]),this._selectedNodes.clear(),this._selectedNodes.add(e),this.#re(e,n,!0),r.has(e)||this.#q(r)}#ne(e,n,r){let i=this._columns[n],a=i?i.indexOf(e):-1,o=r?r.metaKey||r.ctrlKey:!1,s=r?r.shiftKey:!1;if(o){if(this.#J({kind:`toggle`,keys:[e.item.key],source:`pointer`})){this.#t=a>=0?{key:e.item.key,depth:n,index:a}:this.#t;return}this._selectedKeys.has(e.item.key)?(this._selectedKeys.delete(e.item.key),this._selectedNodes.delete(e)):(this._selectedKeys.add(e.item.key),this._selectedNodes.add(e)),this.#t=a>=0?{key:e.item.key,depth:n,index:a}:this.#t,this.#T(),this.requestUpdate();return}if(s&&this.#t&&this.#t.depth===n&&i){let r=this.#Y(i,n,a)??[];if(this.#J({kind:`extend`,keys:r.map(e=>e.item.key),anchorKey:this.#t.key,targetKey:e.item.key,source:`pointer`}))return;this._selectedKeys=new Set(r.map(e=>e.item.key)),this._selectedNodes=new Set(r),this.#T(),this.requestUpdate();return}let c=this.#J({kind:`replace`,keys:[e.item.key],source:`pointer`}),l=new Set(this._selectedNodes);if(this.#t=a>=0?{key:e.item.key,depth:n,index:a}:void 0,c){this.#e=e,this.#re(e,n,!0);return}this._selectedKeys=new Set([e.item.key]),this._selectedNodes=new Set([e]),this._selectedByDepth.set(n,e),this.#e=e,this.#re(e,n,!0),(!l.has(e)||l.size!==1)&&this.#q(l)}#re(e,n,r=!1){if(this.#d=void 0,e.item.isLeaf){this._columns=this._columns.slice(0,n+1),this.requestUpdate();return}if(e.children===void 0)this.#ie(e,n,!0,r);else{let r=this._columns.slice(0,n+1);r.push(e.children),this._columns=r,this.dispatchEvent(new CustomEvent(`expand`,{detail:{node:e,depth:n},bubbles:!0,composed:!0}))}}#ie(e,n,r,i=!1){let a=n+1;this._columns=this._columns.slice(0,a),this._loadingDepth=a,this.#i?.abort(),this.#r=e;let o=new AbortController;this.#i=o,r&&this.dispatchEvent(new CustomEvent(`expand`,{detail:{node:e,depth:n},bubbles:!0,composed:!0}));let s=n=>{if(o.signal.aborted)return;e.children=n,this.#r=void 0,this.#i=void 0,this._loadingDepth=void 0;let r=this._columns.slice(0,a);n.length>0&&r.push(n),this._columns=r,this.#E()&&this.#A()},c=n=>{n.name!==`AbortError`&&console.error(n),e.children=[],this.#r=void 0,this.#i=void 0,this._loadingDepth=void 0,this.#E()&&this.#A(),this.requestUpdate()};if(this.model||this.loadChildren){this.#a!==void 0&&(clearTimeout(this.#a),this.#a=void 0);let n=()=>{this.#a=void 0,this.#r===e&&(this.model?this.model.getChildren(e,a-1,o.signal):Rg(this.loadChildren({node:e,depth:a-1},o.signal),o.signal)).then(e=>s([...e])).catch(c)};i?n():this.#a=setTimeout(n,150)}else{this._loadingDepth=void 0,this.#r=void 0,this.#i=void 0;let e=this._columns.slice(0,a);e.push([]),this._columns=e}}#ae(e){if(this.#J({kind:`toggle`,keys:[e.item.key],source:`pointer`}))return;let n=new Set(this._selectedNodes),r=this._selectedKeys.has(e.item.key);(e.children?.length?this.#oe(e):r)?this.#se(e,!1):this.#se(e,!0),this.requestUpdate(),this.#q(n)}#oe(e){return this._selectedKeys.has(e.item.key)?!e.children?.length||e.children.every(e=>this.#oe(e)):!1}#se(e,n){if(n?(this._selectedKeys.add(e.item.key),this._selectedNodes.add(e)):(this._selectedKeys.delete(e.item.key),this._selectedNodes.delete(e)),e.children)for(let r of e.children)this.#se(r,n)}#ce(){return this.#C()??0}#le(){let e=this.tickled.tickledId;if(!e)return;let n=e.indexOf(`:`);if(n<0)return;let r=Number(e.substring(0,n)),i=e.substring(n+1),a=this._columns[r];if(!a)return;let o=a.findIndex(e=>e.item.key===i);if(!(o<0))return{node:a[o],depth:r,index:o}}#ue(e=`smooth`,n=`edge`){requestAnimationFrame(()=>{let r=this.#le();if(!r)return;let i=this.shadowRoot?.querySelectorAll(`.column`)[r.depth]?.querySelector(`.column-content`);if(!i)return;let a=i.querySelectorAll(`.item`)[r.index];if(a){if(n===`center-if-hidden`){let n=a.getBoundingClientRect(),r=i.getBoundingClientRect(),o=n.top<r.top||n.bottom>r.bottom;a.scrollIntoView({block:o?`center`:`nearest`,inline:`nearest`,behavior:e});return}a.scrollIntoView({block:`nearest`,behavior:e})}})}#de(e,n){this.tickled.setTickled(this.#x(e,n)),this.#h=!0,this.#p=void 0,this.#u.notify(),this.dispatchEvent(new CustomEvent(`tickle`,{detail:{node:e,depth:n},bubbles:!0,composed:!0}))}#fe(e){let n=this.shadowRoot?.querySelectorAll(`.column`)[e]?.querySelector(`.column-content`),r=n?.querySelector(`.item`);return!n||!r||r.offsetHeight===0?10:Math.max(1,Math.floor(n.clientHeight/r.offsetHeight)-1)}#pe(e,n,r,i,a=!1){let o=this.#le(),s=i(o!==void 0&&o.depth===n?o.index:-1),c=e[s];if(c){if(this.#de(c,n),this.interactionMode===`standard`||this.interactionMode===`vscode`){let i=o?.index??0;if(r.shiftKey){if(!this.#t||this.#t.depth!==n){let r=e[i];r&&(this.#t={key:r.item.key,depth:n,index:i,selectionSnapshot:this.interactionMode===`vscode`?new Set(this._selectedKeys):void 0})}if(this.#t){let n=Math.min(this.#t.index,s),r=Math.max(this.#t.index,s),i=e.slice(n,r+1).map(e=>e.item.key);if(!this.#J({kind:`extend`,keys:i,anchorKey:this.#t.key,targetKey:c.item.key,source:`keyboard`})){if(this.interactionMode===`vscode`){let e=this.#t.selectionSnapshot;for(let n of i)e.has(n)?this._selectedKeys.delete(n):this._selectedKeys.add(n)}else this._selectedKeys=new Set(i)}this.#T()}}else this.#t=this.interactionMode===`standard`?{key:c.item.key,depth:n,index:s}:void 0}this.requestUpdate(),a&&this.#ue(`auto`)}}#me;#he;#ge;#_e;#ve;#ye;#be;#xe(e){if(e===0)return this.#S?.item.label??``;let n=this._selectedByDepth.get(e-1);if(n)return n.item.label;let r=this._columns[e-1],i=this._columns[e];if(r&&i){let e=r.find(e=>e.children===i);if(e)return e.item.label}return``}#Se(e){return`width:${e}px;flex-grow:0;flex-shrink:0;flex-basis:auto;max-width:none`}#Ce(e,n){let r=this.#n.get(e);return r===void 0?this.stretchLastColumn&&n?`width:max-content;flex-grow:1;flex-shrink:0;flex-basis:auto;min-width:0`:`width:max-content;flex-grow:0;flex-shrink:0;flex-basis:auto`:this.#Se(r)}#we(e,n){return this.tickled.isTickled(this.#x(e,n))}renderLoadingIndicator(){return i`<div class="loading-spinner"></div>`}#Te(){let e=this._loadingDepth,n=this.stretchLastColumn&&this.#n.get(e)===void 0;return i`
|
|
10168
|
+
`}};E([d({type:Number})],TE.prototype,`value`,void 0),E([d({type:Boolean,attribute:`lit`,reflect:!0})],TE.prototype,`lit`,void 0),E([d({type:String})],TE.prototype,`color`,void 0),E([d({type:Boolean,attribute:`glow`,reflect:!0})],TE.prototype,`glow`,void 0),E([d({type:String,reflect:!0})],TE.prototype,`mode`,void 0),E([d({type:Boolean,attribute:`blinking`,reflect:!0})],TE.prototype,`blinking`,void 0),E([d({type:Number,attribute:`rate`})],TE.prototype,`rate`,void 0),E([d({type:Number,attribute:`attack-time`})],TE.prototype,`attackTime`,void 0),E([d({type:Number,attribute:`release-time`})],TE.prototype,`releaseTime`,void 0),E([d({type:Boolean,attribute:`pulse-retrigger`})],TE.prototype,`pulseRetrigger`,void 0),TE=E([T(`ixfx-led`)],TE);function EE(e){let n=[];for(let r=0;r<e.length-1;r++){let i=e[r+1],a=e[r].find(e=>e.children===i);if(!a)break;n.push(a.item.key)}return n}function DE(e,n){let r=[e],i=[],a=e;for(let e of n){let n=a.find(n=>n.item.key===e);if(!n)return{columns:r,nodes:i,blocked:void 0,done:!1};if(i.push(n),n.item.isLeaf===!0)return{columns:r,nodes:i,blocked:void 0,done:!0};if(n.children===void 0)return{columns:r,nodes:i,blocked:n,done:!1};r.push(n.children),a=n.children}return{columns:r,nodes:i,blocked:void 0,done:!0}}function OE(e){let n=new Map;for(let[r,i]of Object.entries(e)){let e=Number(r);Number.isInteger(e)&&e>=0&&typeof i==`number`&&Number.isFinite(i)&&i>0&&n.set(e,i)}return n}function kE(e,n){return e.length===n.length&&e.every((e,r)=>e===n[r])}function AE(e,n){return e.findIndex(e=>e.some(e=>e.item.key===n))}function jE(e){let n=new Map,r=[...e];for(;r.length>0;){let e=r.pop();n.set(e.item.key,e),e.children&&r.push(...e.children)}return n}function ME(e,n,r,i){let a=[...e].filter(e=>!r(e)),{present:o,missing:s}=ar(n,r);if(a.length===0&&o.length===0)return{live:e,pending:n,restored:[],changed:!1};if(i&&o.length>0){let e=o.at(-1);return{live:new Set([e]),pending:k,restored:[e],changed:!0}}return{live:new Set([...[...e].filter(r),...o]),pending:sr(a.length===0?s:new Set([...s,...a])),restored:o,changed:!0}}function NE(e,n,r,i,a){let o=DE(e,n),s=o.blocked!==void 0&&o.blocked===a,c=!s&&!kE(o.columns,r),l;if(c){l=new Map(o.nodes.map((e,n)=>[n,e]));let e=i.get(o.nodes.length);e&&o.columns[o.nodes.length]?.includes(e)&&l.set(o.nodes.length,e)}return{columns:c?o.columns:void 0,selectedByDepth:l,pending:o.done?void 0:n,load:o.blocked&&!s&&o.blocked.item.isLeaf!==!0?{node:o.blocked,depth:o.nodes.length-1}:void 0}}function PE(e,n,r,i,a,o,s){let c=ME(e,n,e=>a.has(e),s),l=[...c.live].map(e=>a.get(e));if(!c.changed&&l.length===r.size&&l.every(e=>r.has(e)))return;let u=c.restored.at(-1)??i?.item.key,d=[];for(let e of c.restored){let n=AE(o,e);n>=0&&d.push([n,a.get(e)])}return{keys:new Set(c.live),nodes:new Set(l),pending:c.pending,last:(u===void 0?void 0:a.get(u))??l.at(-1),placed:d,restored:c.restored.length>0}}function FE(e,n,r,i,a){let o=e!==void 0&&!i.has(e),s=r??(o&&n?e:void 0),c=s===void 0?-1:AE(a,s);return c<0?{clear:o,pending:s,tickle:void 0}:{clear:o,pending:void 0,tickle:{node:a[c].find(e=>e.item.key===s),depth:c}}}function IE(e,n,r,i){return{contents:[...e?.querySelectorAll(`.column:not(.loading-column) > .column-content`)??[]],parentKeys:r===void 0?[]:[r,...EE(n)],keysAt:e=>(n[e]??[]).filter(n=>!i||i(n,e)).map(e=>e.item.key)}}function LE(e,n,r){let i={};return e.forEach((e,a)=>{let o=n[a];if(o===void 0||e.scrollTop===0&&e.scrollLeft===0)return;let s=[...e.querySelectorAll(`.item`)],c=r(a);i[o]=a_(e,s,e=>c[s.indexOf(e)])}),i}function RE(e,n,r,i){let a;for(let[o,s]of e){let c=r.indexOf(o),l=n[c];if(c<0||!l)continue;let u;if(s.anchor){let e=i(c).indexOf(s.anchor.key),n=e<0?void 0:l.querySelectorAll(`.item`)[e];u=n?o_(l,n,s.anchor.offset):!1}else u=s_(l,s.top);u&&(a??=new Map(e),a.delete(o))}return a??e}let zE=class extends n{constructor(...e){super(...e),this.headers=!1,this.stretchLastColumn=!1,this.interactionMode=`standard`,this.selectionFilter=`leaf`,this.exclusivity=`none`,this._columns=[],this._selectedByDepth=new Map,this._selectedKeys=new Set,this._selectedNodes=new Set,this.#n=new Map,this.#o=-1,this.#s=0,this.#c=0,this.restoreLoads=!0,this.#u=new f_(this,{kind:`miller-list`,capture:()=>this.getViewState()}),this.#f=k,this.#m=new Map,this.#h=!1,this.#g=[],this.search=new Vt(this,{adapter:Wt(this,{labelSelector:`.label`,highlightKey:`incr-search-highlight`})}),this.tickled=new oe(this,{getItems:()=>{let e=[];for(let n=0;n<this._columns.length;n++){let r=this._columns[n];if(r)for(let i of r)e.push({id:this.#x(i,n)})}return e}}),this.#w=e=>{this.#m.size===0&&e.target.classList?.contains(`column-content`)&&this.#u.notify()},this._partialKeys=new Set,this._partialDescription=_r,this.#N=`user`,this.#P=!1,this.#me=e=>{if(this.search.isOpen)return;let n=this.#ce(),r=this._columns[n];if(!r||r.length===0){let e=this._columns[0];e&&e.length>0&&(this.tickled.setTickled(this.#x(e[0],0)),this.requestUpdate());return}switch(e.key){case`ArrowDown`:e.preventDefault(),this.#pe(r,n,e,e=>Math.min(e+1,r.length-1));break;case`ArrowUp`:e.preventDefault(),this.#pe(r,n,e,e=>Math.max(e-1,0));break;case`Home`:e.preventDefault(),this.#pe(r,n,e,()=>0,!0);break;case`End`:e.preventDefault(),this.#pe(r,n,e,()=>r.length-1,!0);break;case`PageUp`:e.preventDefault(),this.#pe(r,n,e,e=>Math.max(e-this.#fe(n),0),!0);break;case`PageDown`:e.preventDefault(),this.#pe(r,n,e,e=>Math.min(e+this.#fe(n),r.length-1),!0);break;case`ArrowRight`:{e.preventDefault();let i=this.#le();if(!i){r.length>0&&(this.#de(r[0],n),this.requestUpdate());return}let{node:a,depth:o}=i;if(this.interactionMode===`vscode`||this.interactionMode===`standard`?(this._selectedByDepth.set(o,a),this.#re(a,o)):this.#ee(a,o),this._columns.length>o+1){let e=this._columns[o+1];e&&e.length>0&&this.#de(e[0],o+1)}this.requestUpdate();break}case`ArrowLeft`:if(e.preventDefault(),n>0){this.#Z(),this.#d=void 0,this._columns=this._columns.slice(0,n);let e=this._columns[n-1];if(e&&e.length>0){let r=this._selectedByDepth.get(n-1),i=r&&e.includes(r)?r:e[0];this.#de(i,n-1)}this.requestUpdate()}break;case`Enter`:{e.preventDefault();let n=this.#le();if(!n)return;let{node:i,depth:a,index:o}=n;if(this.interactionMode===`standard`||this.interactionMode===`vscode`){if(e.shiftKey&&this.#t?.depth===a){let e=Math.min(this.#t.index,o),n=Math.max(this.#t.index,o);this._selectedKeys=new Set(r.slice(e,n+1).map(e=>e.item.key))}else this._selectedKeys.add(i.item.key),this.#t={key:i.item.key,depth:a,index:o};this.#T()}else this._selectedByDepth.set(a,i);this.dispatchEvent(new CustomEvent(`activate`,{detail:{node:i,depth:a},bubbles:!0,composed:!0})),this.requestUpdate();break}case`Escape`:if(e.preventDefault(),this.#Z(),this._columns.length>1){this.#d=void 0,this._columns=this._columns.slice(0,-1);let e=Math.max(0,n-1),r=this._columns[e];if(r&&r.length>0){let n=this._selectedByDepth.get(e),i=n&&r.includes(n)?n:r[0];this.#de(i,e)}this.requestUpdate()}}},this.#he=(e,n)=>{e.preventDefault(),e.stopPropagation(),this.#o=n,this.#s=e.clientX;let r=this.shadowRoot?.querySelectorAll(`.column`)[n];this.#c=r?r.getBoundingClientRect().width:200,window.addEventListener(`pointermove`,this.#ve),window.addEventListener(`pointerup`,this.#be)},this.#ge=null,this.#_e=0,this.#ve=e=>{this.#o<0||(this.#_e=Math.max(32,this.#c+(e.clientX-this.#s)),this.#ge??=requestAnimationFrame(this.#ye))},this.#ye=()=>{this.#ge=null,!(this.#o<0)&&(this.shadowRoot?.querySelectorAll(`.column`)[this.#o])?.setAttribute(`style`,this.#Se(this.#_e))},this.#be=()=>{this.#ge!==null&&(cancelAnimationFrame(this.#ge),this.#ge=null),this.#o>=0&&this.#_e>0&&(this.#n.set(this.#o,this.#_e),this.#u.notify(),this.requestUpdate()),this.#_e=0,this.#o=-1,window.removeEventListener(`pointermove`,this.#ve),window.removeEventListener(`pointerup`,this.#be)}}#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g;#_;#v;get registry(){return this.#_}#y(){let e=this.searchModes?.trim();if(e===void 0)return[...O];let n=new Set(e.split(/\s+/));return O.filter(e=>n.has(e))}#b(){this.#_&&(this.search.setModes(this.#y()),this.#v?.(),this.#v=zt(this.#_,this.search))}#x(e,n){return`${n}:${e.item.key}`}get#S(){return this.viewRoot??this.root}#C(){let e=this.tickled.tickledId;if(!e)return;let n=e.indexOf(`:`);if(!(n<0))return Number(e.substring(0,n))}willUpdate(e){kE(this._columns,this.#g)||(this.#g=this._columns,this.#u.notify())}updated(e){if(e.has(`searchModes`)&&this.#b(),e.has(`root`)&&this.root){let e=this.viewRoot!==void 0,n=e?[]:EE(this._columns),r=this.#O();this.#Z(),e&&(this.viewRoot=void 0,this._selectedKeys=new Set,this._selectedNodes=new Set),this._selectedByDepth.clear(),this.#e=void 0,this.#t=void 0,this.tickled.clearTickled();let i=this.#S;this._columns=i?.children?[i.children]:[],this.#g=this._columns,n.length>0&&(this.#d??=n),r!==void 0&&(this.#p??=r),this.#A()}if(e.has(`viewRoot`)&&this.#L(),e.has(`model`)){this.#l?.(),this.#l=void 0;let e=this.model;e&&(this.root=e.root,this.#l=e._subscribe(e=>{if(e.type===`root`)this.root=e.root,this.requestUpdate();else if(e.type===`invalidate`){for(let n=0;n<this._columns.length-1;n++)if(this._columns[n]?.some(n=>n.item.key===e.key)){this._columns=this._columns.slice(0,n+1),this.requestUpdate();break}}}))}if(this.#r?.children!==void 0&&this._loadingDepth!==void 0){let e=this._loadingDepth,n=this.#r.children;this.#r=void 0,this.#i=void 0,this._loadingDepth=void 0;let r=this._columns.slice(0,e);n.length>0&&r.push(n),this._columns=r,this.#E()&&this.#A()}if(this.#m.size>0){let{contents:e,parentKeys:n,keysAt:r}=this.#k();this.#m=RE(this.#m,e,n,r)}let n=e.get(`_columns`),r=e.has(`_columns`)&&(n?.length??0)<this._columns.length,i=e.has(`_loadingDepth`)&&this._loadingDepth!==void 0;if(r||i){let e=this.shadowRoot?.querySelector(`#container`);e?.scrollTo({left:e.scrollWidth,behavior:`smooth`})}}firstUpdated(){let e=this.shadowRoot?.querySelector(`#container`);e&&u_(e,()=>{this.#m=new Map}),this.renderRoot.addEventListener(`scroll`,this.#w,{capture:!0,passive:!0})}#w;connectedCallback(){super.connectedCallback(),this.#_??=Yt(),this.#b()}disconnectedCallback(){super.disconnectedCallback(),this.#l?.(),this.#l=void 0,this.#v?.(),this.#v=void 0,this.#_=void 0}getViewState(e){let n=e?.includePending??!0,{contents:r,parentKeys:i,keysAt:a}=this.#k();return this.#u.shape({selected:fr(this._selectedKeys,n?this.#f:[]),path:(n?this.#d:void 0)??EE(this._columns),focus:this.#O()??(n?this.#p:void 0),columnWidths:Object.fromEntries(this.#n),columnScroll:{...LE(r,i,a),...n?Object.fromEntries(this.#m):{}}},e)}setViewState(e){this.#u.accepts(e)&&(this.#u.restoring(()=>{if(e.path&&(this.#d=[...e.path]),e.selected){this.#f=sr(new Set(e.selected));let n=new Set(this._selectedNodes);this._selectedKeys=new Set,this._selectedNodes=new Set,this.#e=void 0,this.#t=void 0,n.size>0&&this.#q(n)}e.focus!==void 0&&(this.#p=e.focus),e.columnWidths&&(this.#n=OE(e.columnWidths),this.#u.notify()),e.columnScroll&&(this.#m=new Map(Object.entries(e.columnScroll))),this.#A()}),this.requestUpdate())}clearPendingViewState(){this.#d=void 0,this.#f=k,this.#p=void 0,this.#m=new Map}#T(){this.#u.isRestoring||(this.#f=k),this.#u.notify()}#E(){return this.#d!==void 0||this.#f.size>0||this.#p!==void 0}#D(){let e=this.tickled.tickledId,n=e?.indexOf(`:`)??-1;return e===void 0||n<0?void 0:e.substring(n+1)}#O(){return this.#h?this.#D():void 0}#k(){return IE(this.shadowRoot,this._columns,this.#S?.item.key,this.filterPredicate)}#A(){let e=this.#S?.children;if(!e)return;let n=jE(e);this.#u.restoring(()=>{this.#d&&this.#j(NE(e,this.#d,this._columns,this._selectedByDepth,this.#r));let r=PE(this._selectedKeys,this.#f,this._selectedNodes,this.#e,n,this._columns,this.interactionMode===`implicit`);r&&this.#M(r);let i=FE(this.#D(),this.#h,this.#p,n,this._columns);i.clear&&this.tickled.clearTickled(),this.#p=i.pending,i.tickle&&(this.tickled.setTickled(this.#x(i.tickle.node,i.tickle.depth)),this.#h=!0,this.#u.notify())})}#j(e){e.columns&&(this.#r&&this.#Z(),this._columns=e.columns,this._selectedByDepth=e.selectedByDepth),this.#d=e.pending,e.load&&this.restoreLoads&&(this.model||this.loadChildren)&&this.#ie(e.load.node,e.load.depth,!0,!0),kE(this._columns,this.#g)||(this.#g=this._columns,this.#u.notify())}#M(e){let n=this._selectedNodes;if(this._selectedKeys=e.keys,this._selectedNodes=e.nodes,this.#f=e.pending,this.#e=e.last,this.interactionMode===`implicit`)for(let[n,r]of e.placed)this._selectedByDepth.set(n,r);if(!e.restored){this.#u.notify();return}let r=this.#N;this.#N=`programmatic`;try{this.#q(n)}finally{this.#N=r}}get selectedKeys(){return this._selectedKeys}set selectedKeys(e){this._selectedKeys=new Set(e),this.#T(),this.requestUpdate()}get selectedNode(){return this.#e}set selectedNode(e){this.#e=e,e&&(this.interactionMode===`implicit`||this.interactionMode===`standard`)&&(this._selectedKeys=new Set([e.item.key]),this.#T()),this.requestUpdate()}get selectedNodes(){return this._selectedNodes}select(e){if(!this.#K(e))return;let n=new Set(this._selectedNodes);this._selectedNodes.add(e),this._selectedKeys.add(e.item.key),this.#e=e,this.#q(n),this.requestUpdate()}deselect(e){if(!this._selectedNodes.has(e))return;let n=new Set(this._selectedNodes);this._selectedNodes.delete(e),this._selectedKeys.delete(e.item.key),this.#e===e&&(this.#e=[...this._selectedNodes].at(-1)),this.#q(n),this.requestUpdate()}clearSelection(){this.#T();let e=new Set(this._selectedNodes);this._selectedKeys=new Set,this._selectedNodes.clear(),this.#e=void 0,e.size>0&&this.#q(e),this.requestUpdate()}selectAll(){}get partialKeys(){return this._partialKeys}set partialKeys(e){let n=new Set(e);yr(n,this._partialKeys)||(this._partialKeys=n)}_isPartial(e,n){return vr(e.item.key,this._partialKeys,this._isSelected(e,n))}deselectAll(){}setSelected(e,n){this.interactionMode===`checked`?this.#se(e,n):n?(this._selectedKeys.add(e.item.key),this._selectedNodes.add(e)):(this._selectedKeys.delete(e.item.key),this._selectedNodes.delete(e)),this.#T(),this.requestUpdate()}getSelected(){let e=[];for(let n of this._columns)for(let r of n)this._selectedKeys.has(r.item.key)&&e.push(r);return e}navigateTo(e,n={}){let r=this.#S;if(!r?.children)return!1;let i=this.#N,a=this.#P;this.#N=`programmatic`,this.#P=n.silent===!0;try{return this.#F(r.children,e,n.reveal??`edge`)}finally{this.#N=i,this.#P=a}}invalidateStructure(){let e=EE(this._columns);e.length>0&&(this.#d??=e),this.#A(),this.requestUpdate()}#N;#P;#F(e,n,r){this.#Z(),this.#d=void 0,this._selectedByDepth.clear(),this.tickled.clearTickled();let i=[e],a=e,o=!0,s,c=0;for(let e=0;e<n.length;e++){let r=a.findIndex(r=>r.item.key===n[e]);if(r<0){o=!1;break}let l=a[r];if(this._selectedByDepth.set(e,l),s=l,c=e,l.item.isLeaf||!l.children||l.children.length===0){e<n.length-1&&(o=!1);break}i.push(l.children),a=l.children}if(this._columns=i,s&&this.tickled.setTickled(this.#x(s,c)),this.interactionMode!==`implicit`&&this.interactionMode!==`manual`){let e=n.at(-1);e&&(this._selectedKeys=new Set([e]),this.#T())}return this.requestUpdate(),this.#ue(r===`center-if-hidden`?`auto`:`smooth`,r),o}navigateToNode(e){let n=this.#S;if(!n?.children)return!1;let r=this.#I(n.children,e);return r?this.navigateTo(r):!1}revealKey(e){let n=this.#S;if(!n?.children)return!1;let r=this.#I(n.children,n=>n.item.key===e);if(!r)return!1;this.#d=void 0;let i=[n.children],a=n.children,o,s=0;for(let e=0;e<r.length;e++){let n=a.find(n=>n.item.key===r[e]);if(!n)return!1;if(o=n,s=e,n.children&&n.children.length>0)i.push(n.children),a=n.children;else break}return this._columns=i,o&&this.tickled.setTickled(this.#x(o,s)),this.requestUpdate(),this.#ue(),!0}selectMany(e){let n=this.selectionFilter===`none`?[]:[...e],r=new Set(this._selectedNodes);this._selectedNodes=new Set(n),this._selectedKeys=new Set(n.map(e=>e.item.key)),this.#e=n.at(-1),this.#q(r),this.requestUpdate()}getNodes(){let e=this.#S;if(!e?.children)return[];let n=[],r=(e,i)=>{if(n.push({node:e,depth:i}),e.children)for(let n of e.children)r(n,i+1)};for(let n of e.children)r(n,0);return n}#I(e,n,r=[]){for(let i of e){let e=[...r,i.item.key];if(n(i))return e;if(i.children?.length){let r=this.#I(i.children,n,e);if(r)return r}}}#L(){this.#Z();let e=new Set(this._selectedNodes);this._selectedByDepth.clear(),this._selectedKeys=new Set,this._selectedNodes.clear(),this.#e=void 0,this.#t=void 0,this.tickled.clearTickled();let n=this.#S;n?.children===void 0?n?(this._columns=[],this.#ie(n,-1,!1)):(this._columns=[],this._loadingDepth=void 0):(this._columns=n.children?[n.children]:[],this._loadingDepth=void 0),e.size>0&&this.#q(e),this.#E()&&this.#A()}rebaseTo(e){if(e===void 0)return this.#R();let n=typeof e==`string`?this.#B(e):e;return!n||n.item.isLeaf===!0||n===this.viewRoot||n.item.key===this.viewRoot?.item.key?!1:n===this.root||!this.viewRoot&&n.item.key===this.root?.item.key?this.#R():(this.viewRoot=n,this.#z(),!0)}rebaseUp(){if(!this.viewRoot)return!1;let e=this.#H(this.viewRoot);return e?e===this.root?this.#R():(this.viewRoot=e,this.#z(),!0):!1}#R(){return this.viewRoot!==void 0&&(this.viewRoot=void 0,this.#z(),!0)}#z(){this.#d=void 0;let e=this.viewRoot,n={viewRoot:e,path:e?this.#W(e):[]};this.dispatchEvent(new CustomEvent(`rebase`,{detail:n,bubbles:!0,composed:!0}))}#B(e){if(this.root)return this.root.item.key===e?this.root:this.#V(this.root.children??[],e)}#V(e,n){for(let r of e){if(r.item.key===n)return r;if(r.children){let e=this.#V(r.children,n);if(e)return e}}}#H(e){if(!(!this.root||e===this.root))return this.#U(this.root,e)}#U(e,n){if(e.children)for(let r of e.children){if(r===n||r.item.key===n.item.key)return e;let i=this.#U(r,n);if(i)return i}}#W(e){let n=[e],r=this.#H(e);for(;r&&(n.unshift(r),r!==this.root);)r=this.#H(r);return n}renderColumnContent(e,n){return console.warn(`ixfx-miller-base: renderColumnContent not overridden. depth=${n}, nodes=${e.length}`),a}_handleItemClick(e,n,r){this.#ee(e,n,r)}_handleCheckboxClick(e,n,r){e.stopPropagation(),this.#ae(n)}_handleItemDblClick(e,n,r){this.dispatchEvent(new CustomEvent(`item-dblclick`,{detail:{node:e,depth:n},bubbles:!0,composed:!0}))}_handleItemRightClick(e,n,r){this.dispatchEvent(new CustomEvent(`item-rightclick`,{detail:{node:e,depth:n,mouseEvent:r},bubbles:!0,composed:!0}))}_handleHeaderRightClick(e,n){let r=this.#xe(n),i=this.#Q(n);this.dispatchEvent(new CustomEvent(`header-rightclick`,{detail:{depth:n,label:r,path:i,mouseEvent:e},bubbles:!0,composed:!0}))}_isSelected(e,n){return this.interactionMode===`implicit`?this._selectedByDepth.get(n)===e:this._selectedKeys.has(e.item.key)}#G(e,n){let r=this._columns[n+1];return r!==void 0&&e.children===r}_isOpen(e,n){return this.#G(e,n)}getItemState(e,n){let r=this._columns[n]?.find(n=>n.item.key===e);if(r)return{selected:this._isSelected(r,n),open:this.#G(r,n),focused:this._isFocused(r,n),isLeaf:r.item.isLeaf??!1}}#K(e){return this.selectionFilter===`none`?!1:this.selectionFilter===`leaf`?e.item.isLeaf!==!1:this.selectionFilter!==`branch`||e.item.isLeaf===!1||e.children!==void 0&&e.children.length>0}#q(e){if(this.#T(),this.#P)return;let n={selected:new Set(this._selectedNodes),previous:e,origin:this.#N};this.dispatchEvent(new CustomEvent(`select`,{detail:n,bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent(`list-select`,{detail:{selectedKeys:new Set(this._selectedKeys),previousKeys:new Set([...e].map(e=>e.item.key)),previous:e},bubbles:!0,composed:!0}))}#J(e){return!this.dispatchEvent(new CustomEvent(`list-select-intent`,{detail:e,bubbles:!0,composed:!0,cancelable:!0}))}#Y(e,n,r){if(!(!this.#t||this.#t.depth!==n||!e||r<0))return e.slice(Math.min(this.#t.index,r),Math.max(this.#t.index,r)+1)}#X(e,n,r,i){let a=e.item.key;if(r&&(r.metaKey||r.ctrlKey)){this.#J({kind:`toggle`,keys:[a],source:i});return}let o=this._columns[n],s=r?.shiftKey?this.#Y(o,n,o?o.indexOf(e):-1):void 0;if(s&&this.#t){this.#J({kind:`extend`,keys:s.map(e=>e.item.key),anchorKey:this.#t.key,targetKey:a,source:i});return}this.#J({kind:`replace`,keys:[a],source:i})}#Z(){if(this.#a!==void 0&&(clearTimeout(this.#a),this.#a=void 0),this.#i){let e=this.#r,n=this._loadingDepth;this.#i.abort(),this.#i=void 0,this.#r=void 0,this._loadingDepth=void 0,e&&n!==void 0&&this.dispatchEvent(new CustomEvent(`collapse`,{detail:{node:e,depth:n},bubbles:!0,composed:!0}))}}#Q(e){let n=[];this.#S&&n.push(this.#S);for(let r=0;r<e;r++){let e=this._selectedByDepth.get(r);e&&n.push(e)}return n}#$(e){let n={depth:e,label:this.#xe(e),path:this.#Q(e)};this.dispatchEvent(new CustomEvent(`header-click`,{detail:n,bubbles:!0,composed:!0}))}#ee(e,n,r){switch(this._loadingDepth!==void 0&&this._loadingDepth>n&&this.#Z(),this.tickled.setTickled(this.#x(e,n)),this.#h=!1,this.#p=void 0,this.dispatchEvent(new CustomEvent(`item-click`,{detail:{node:e,depth:n},bubbles:!0,composed:!0})),this.interactionMode){case`implicit`:this.#te(e,n);break;case`standard`:this.#ne(e,n,r);break;case`vscode`:this.#ne(e,n,r);break;case`manual`:this.#X(e,n,r,`pointer`);break;case`checked`:this.#re(e,n,!0)}}#te(e,n){if(this.#J({kind:`replace`,keys:[e.item.key],source:`pointer`})){this.#e=e,this.#re(e,n,!0);return}let r=new Set(this._selectedNodes);this._selectedByDepth.set(n,e),this.#e=e,this._selectedKeys=new Set([e.item.key]),this._selectedNodes.clear(),this._selectedNodes.add(e),this.#re(e,n,!0),r.has(e)||this.#q(r)}#ne(e,n,r){let i=this._columns[n],a=i?i.indexOf(e):-1,o=r?r.metaKey||r.ctrlKey:!1,s=r?r.shiftKey:!1;if(o){if(this.#J({kind:`toggle`,keys:[e.item.key],source:`pointer`})){this.#t=a>=0?{key:e.item.key,depth:n,index:a}:this.#t;return}this._selectedKeys.has(e.item.key)?(this._selectedKeys.delete(e.item.key),this._selectedNodes.delete(e)):(this._selectedKeys.add(e.item.key),this._selectedNodes.add(e)),this.#t=a>=0?{key:e.item.key,depth:n,index:a}:this.#t,this.#T(),this.requestUpdate();return}if(s&&this.#t&&this.#t.depth===n&&i){let r=this.#Y(i,n,a)??[];if(this.#J({kind:`extend`,keys:r.map(e=>e.item.key),anchorKey:this.#t.key,targetKey:e.item.key,source:`pointer`}))return;this._selectedKeys=new Set(r.map(e=>e.item.key)),this._selectedNodes=new Set(r),this.#T(),this.requestUpdate();return}let c=this.#J({kind:`replace`,keys:[e.item.key],source:`pointer`}),l=new Set(this._selectedNodes);if(this.#t=a>=0?{key:e.item.key,depth:n,index:a}:void 0,c){this.#e=e,this.#re(e,n,!0);return}this._selectedKeys=new Set([e.item.key]),this._selectedNodes=new Set([e]),this._selectedByDepth.set(n,e),this.#e=e,this.#re(e,n,!0),(!l.has(e)||l.size!==1)&&this.#q(l)}#re(e,n,r=!1){if(this.#d=void 0,e.item.isLeaf){this._columns=this._columns.slice(0,n+1),this.requestUpdate();return}if(e.children===void 0)this.#ie(e,n,!0,r);else{let r=this._columns.slice(0,n+1);r.push(e.children),this._columns=r,this.dispatchEvent(new CustomEvent(`expand`,{detail:{node:e,depth:n},bubbles:!0,composed:!0}))}}#ie(e,n,r,i=!1){let a=n+1;this._columns=this._columns.slice(0,a),this._loadingDepth=a,this.#i?.abort(),this.#r=e;let o=new AbortController;this.#i=o,r&&this.dispatchEvent(new CustomEvent(`expand`,{detail:{node:e,depth:n},bubbles:!0,composed:!0}));let s=n=>{if(o.signal.aborted)return;e.children=n,this.#r=void 0,this.#i=void 0,this._loadingDepth=void 0;let r=this._columns.slice(0,a);n.length>0&&r.push(n),this._columns=r,this.#E()&&this.#A()},c=n=>{n.name!==`AbortError`&&console.error(n),e.children=[],this.#r=void 0,this.#i=void 0,this._loadingDepth=void 0,this.#E()&&this.#A(),this.requestUpdate()};if(this.model||this.loadChildren){this.#a!==void 0&&(clearTimeout(this.#a),this.#a=void 0);let n=()=>{this.#a=void 0,this.#r===e&&(this.model?this.model.getChildren(e,a-1,o.signal):Rg(this.loadChildren({node:e,depth:a-1},o.signal),o.signal)).then(e=>s([...e])).catch(c)};i?n():this.#a=setTimeout(n,150)}else{this._loadingDepth=void 0,this.#r=void 0,this.#i=void 0;let e=this._columns.slice(0,a);e.push([]),this._columns=e}}#ae(e){let n=new Set(this._selectedNodes),r=this._selectedKeys.has(e.item.key),i=e.children?.length?this.#oe(e):r,a=[],o=e=>{a.push(e.item.key),e.children?.forEach(o)};o(e),!this.#J({kind:`toggle`,keys:a,descendants:!0,checked:!i,source:`pointer`})&&(i?this.#se(e,!1):this.#se(e,!0),this.requestUpdate(),this.#q(n))}#oe(e){return this._selectedKeys.has(e.item.key)?!e.children?.length||e.children.every(e=>this.#oe(e)):!1}#se(e,n){if(n?(this._selectedKeys.add(e.item.key),this._selectedNodes.add(e)):(this._selectedKeys.delete(e.item.key),this._selectedNodes.delete(e)),e.children)for(let r of e.children)this.#se(r,n)}#ce(){return this.#C()??0}#le(){let e=this.tickled.tickledId;if(!e)return;let n=e.indexOf(`:`);if(n<0)return;let r=Number(e.substring(0,n)),i=e.substring(n+1),a=this._columns[r];if(!a)return;let o=a.findIndex(e=>e.item.key===i);if(!(o<0))return{node:a[o],depth:r,index:o}}#ue(e=`smooth`,n=`edge`){requestAnimationFrame(()=>{let r=this.#le();if(!r)return;let i=this.shadowRoot?.querySelectorAll(`.column`)[r.depth]?.querySelector(`.column-content`);if(!i)return;let a=i.querySelectorAll(`.item`)[r.index];if(a){if(n===`center-if-hidden`){let n=a.getBoundingClientRect(),r=i.getBoundingClientRect(),o=n.top<r.top||n.bottom>r.bottom;a.scrollIntoView({block:o?`center`:`nearest`,inline:`nearest`,behavior:e});return}a.scrollIntoView({block:`nearest`,behavior:e})}})}#de(e,n){this.tickled.setTickled(this.#x(e,n)),this.#h=!0,this.#p=void 0,this.#u.notify(),this.dispatchEvent(new CustomEvent(`tickle`,{detail:{node:e,depth:n},bubbles:!0,composed:!0}))}#fe(e){let n=this.shadowRoot?.querySelectorAll(`.column`)[e]?.querySelector(`.column-content`),r=n?.querySelector(`.item`);return!n||!r||r.offsetHeight===0?10:Math.max(1,Math.floor(n.clientHeight/r.offsetHeight)-1)}#pe(e,n,r,i,a=!1){let o=this.#le(),s=i(o!==void 0&&o.depth===n?o.index:-1),c=e[s];if(c){if(this.#de(c,n),this.interactionMode===`standard`||this.interactionMode===`vscode`){let i=o?.index??0;if(r.shiftKey){if(!this.#t||this.#t.depth!==n){let r=e[i];r&&(this.#t={key:r.item.key,depth:n,index:i,selectionSnapshot:this.interactionMode===`vscode`?new Set(this._selectedKeys):void 0})}if(this.#t){let n=Math.min(this.#t.index,s),r=Math.max(this.#t.index,s),i=e.slice(n,r+1).map(e=>e.item.key);if(!this.#J({kind:`extend`,keys:i,anchorKey:this.#t.key,targetKey:c.item.key,source:`keyboard`})){if(this.interactionMode===`vscode`){let e=this.#t.selectionSnapshot;for(let n of i)e.has(n)?this._selectedKeys.delete(n):this._selectedKeys.add(n)}else this._selectedKeys=new Set(i)}this.#T()}}else this.#t=this.interactionMode===`standard`?{key:c.item.key,depth:n,index:s}:void 0}this.requestUpdate(),a&&this.#ue(`auto`)}}#me;#he;#ge;#_e;#ve;#ye;#be;#xe(e){if(e===0)return this.#S?.item.label??``;let n=this._selectedByDepth.get(e-1);if(n)return n.item.label;let r=this._columns[e-1],i=this._columns[e];if(r&&i){let e=r.find(e=>e.children===i);if(e)return e.item.label}return``}#Se(e){return`width:${e}px;flex-grow:0;flex-shrink:0;flex-basis:auto;max-width:none`}#Ce(e,n){let r=this.#n.get(e);return r===void 0?this.stretchLastColumn&&n?`width:max-content;flex-grow:1;flex-shrink:0;flex-basis:auto;min-width:0`:`width:max-content;flex-grow:0;flex-shrink:0;flex-basis:auto`:this.#Se(r)}#we(e,n){return this.tickled.isTickled(this.#x(e,n))}renderLoadingIndicator(){return i`<div class="loading-spinner"></div>`}#Te(){let e=this._loadingDepth,n=this.stretchLastColumn&&this.#n.get(e)===void 0;return i`
|
|
10169
10169
|
<div class="column loading-column ${n?`stretch-last`:``}" style=${this.#Ce(e,!0)}>
|
|
10170
10170
|
${this.headers?i`
|
|
10171
10171
|
<div class="column-header">${this.#xe(e)}</div>
|
|
@@ -10322,13 +10322,13 @@ ixfx-form-options[orientation="vertical"] ixfx-form-part > label {
|
|
|
10322
10322
|
>
|
|
10323
10323
|
${e.map(e=>this.#e(e,n))}
|
|
10324
10324
|
</ul>
|
|
10325
|
-
`}#e(e,n){let r=this._isSelected(e,n),o=this._isPartial(e,n),s=this._isFocused(e,n),c=this._isOpen(e,n),l=e.item.isLeaf!==!0,u=e.item.icon,d=C_(e.item.iconColor),f=C_(e.item.textColor),p=S_(e.item.badge)?void 0:e.item.badge,m=e.item.tooltip,h=this.interactionMode===`checked`,g=a;if(h){let r=
|
|
10325
|
+
`}#e(e,n){let r=this._isSelected(e,n),o=this._isPartial(e,n),s=this._isFocused(e,n),c=this._isOpen(e,n),l=e.item.isLeaf!==!0,u=e.item.icon,d=C_(e.item.iconColor),f=C_(e.item.textColor),p=S_(e.item.badge)?void 0:e.item.badge,m=e.item.tooltip,h=this.interactionMode===`checked`,g=a;if(h){let r=VE(e,this._selectedKeys),a=r===`unchecked`&&o?`indeterminate`:r;g=i`
|
|
10326
10326
|
<input
|
|
10327
10327
|
type="checkbox"
|
|
10328
10328
|
class="item-checkbox"
|
|
10329
|
-
.checked=${
|
|
10330
|
-
.indeterminate=${
|
|
10331
|
-
aria-checked=${
|
|
10329
|
+
.checked=${a===`checked`}
|
|
10330
|
+
.indeterminate=${a===`indeterminate`}
|
|
10331
|
+
aria-checked=${a===`indeterminate`?`mixed`:String(a===`checked`)}
|
|
10332
10332
|
aria-label="Select ${e.item.label}"
|
|
10333
10333
|
@click=${r=>this._handleCheckboxClick(r,e,n)}
|
|
10334
10334
|
/>
|
|
@@ -246,8 +246,8 @@ declare class MillerBaseElement extends LitElement implements TreeComponent, Tre
|
|
|
246
246
|
* Nodes shown as *partially* selected (a part of the resource is selected):
|
|
247
247
|
* an indeterminate checkbox in `checked` mode, `.partial` and an accessible
|
|
248
248
|
* description otherwise. Independent of the selection — a key in both counts
|
|
249
|
-
* as selected. In `checked` mode
|
|
250
|
-
* loaded descendants. Replace-on-set.
|
|
249
|
+
* as selected. In `checked` mode a node is indeterminate if either the
|
|
250
|
+
* loaded descendants or this say so (as in the tree). Replace-on-set.
|
|
251
251
|
*/
|
|
252
252
|
get partialKeys(): ReadonlySet<string>;
|
|
253
253
|
set partialKeys(keys: Iterable<string>);
|
package/dist/index.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ import { a as RadialInputChangeDetail, c as RadialInputInputEvent, i as MarkerSt
|
|
|
45
45
|
import { LabelledRadialInput } from "./labelled-radial-input.js";
|
|
46
46
|
import { _ as SliderValueMode, a as SliderInputChangeDetail, c as SliderInputInputDetail, d as SliderLaneType, f as SliderMarkerStyle, g as SliderValueDrag, h as SliderValueCFollow, i as SliderHandleKey, l as SliderInputInputEvent, m as SliderSingleStyle, n as SliderChangedField, o as SliderInputChangeEvent, p as SliderOrientation, r as SliderCrossover, s as SliderInputElementEventMap, t as SliderInputElement, u as SliderLaneData } from "./slider-input-BxURAAmD.js";
|
|
47
47
|
import { LedElement, LedMode } from "./led.js";
|
|
48
|
-
import { _ as MillerRebaseEvent, a as MillerBaseElementEventMap, c as MillerHeaderClickEvent, d as MillerItemDblClickDetail, f as MillerItemDblClickEvent, g as MillerRebaseDetail, h as MillerItemState, i as MillerBaseElement, l as MillerHeaderRightClickDetail, m as MillerItemRightClickEvent, n as MillerTreeControllerOptions, o as MillerListViewState, p as MillerItemRightClickDetail, r as MillerListElement, s as MillerHeaderClickDetail, t as MillerTreeController, u as MillerHeaderRightClickEvent, v as MillerSelectionMode } from "./index-
|
|
48
|
+
import { _ as MillerRebaseEvent, a as MillerBaseElementEventMap, c as MillerHeaderClickEvent, d as MillerItemDblClickDetail, f as MillerItemDblClickEvent, g as MillerRebaseDetail, h as MillerItemState, i as MillerBaseElement, l as MillerHeaderRightClickDetail, m as MillerItemRightClickEvent, n as MillerTreeControllerOptions, o as MillerListViewState, p as MillerItemRightClickDetail, r as MillerListElement, s as MillerHeaderClickDetail, t as MillerTreeController, u as MillerHeaderRightClickEvent, v as MillerSelectionMode } from "./index-YCDugjdu.js";
|
|
49
49
|
import { a as Notification, c as NotificationRendererHooks, i as PillTapEvent, l as NotificationType, n as NotificationPillElementEventMap, o as NotificationContent, r as PillTapDetail, s as NotificationRenderer, t as NotificationPillElement, u as NotifierOptions } from "./notification-pill-DyZydXoZ.js";
|
|
50
50
|
import { A as applyAgeModification, C as SingleAxisAgeStyle, D as ColourMapConfig, E as PlotDataSeriesOptions, M as parseColourScaleAttr, N as readBaseColour, O as ColourMode, S as PlotSingleAxisPointerMoveEvent, T as PlotDataSeries, _ as PlotMultiAxisElementEventMap, a as PlotHistogramBucketClickDetail, b as PlotSingleAxisElementEventMap, c as PlotHistogramInteractionMode, d as PlotHistogramSelectionChangeEvent, f as PlotHistogramSelectionRange, g as PlotMultiAxisDataPointClickEvent, h as PlotMultiAxisDataPointClickDetail, i as PlotHistogram, j as computeColour, k as ColourResult, l as PlotHistogramOrientation, m as PlotMultiAxis, n as XyAgeStyle, o as PlotHistogramBucketClickEvent, p as PlotHistogramValueTooltips, r as XyDrawStyle, s as PlotHistogramElementEventMap, t as PlotXyAxis, u as PlotHistogramSelectionChangeDetail, v as PlotMultiAxisLayout, w as SingleAxisDrawStyle, x as PlotSingleAxisPointerMoveDetail, y as PlotSingleAxis } from "./xy-axis-DQqd2yXJ.js";
|
|
51
51
|
import { PolarPad, PolarPadInputDetail, PolarPadInputEvent } from "./polar-pad.js";
|
package/dist/index.js
CHANGED
|
@@ -59,7 +59,7 @@ import { t as RadialInputElement } from "./radial-input-KMVltQfe.js";
|
|
|
59
59
|
import { LabelledRadialInput } from "./labelled-radial-input.js";
|
|
60
60
|
import { t as SliderInputElement } from "./slider-input-ByHdotzp.js";
|
|
61
61
|
import { LedElement } from "./led.js";
|
|
62
|
-
import { n as MillerListElement, r as MillerBaseElement, t as MillerTreeController } from "./miller-
|
|
62
|
+
import { n as MillerListElement, r as MillerBaseElement, t as MillerTreeController } from "./miller-BrmBywNZ.js";
|
|
63
63
|
import { NotificationPillElement } from "./notifier.js";
|
|
64
64
|
import { a as TooltipElement, c as computeColour, i as PlotMultiAxis, l as parseColourScaleAttr, n as PlotSingleAxis, o as PlotDataSeries, r as PlotHistogram, s as applyAgeModification, t as PlotXyAxis, u as readBaseColour } from "./xy-axis-CyMd_Bn1.js";
|
|
65
65
|
import { PolarPad } from "./polar-pad.js";
|
|
@@ -788,8 +788,8 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
788
788
|
* Nodes shown as *partially* selected (a part of the resource is selected):
|
|
789
789
|
* an indeterminate checkbox in `checked` mode, `.partial` and an accessible
|
|
790
790
|
* description otherwise. Independent of the selection — a key in both counts
|
|
791
|
-
* as selected. In `checked` mode
|
|
792
|
-
* loaded descendants. Replace-on-set.
|
|
791
|
+
* as selected. In `checked` mode a node is indeterminate if either the
|
|
792
|
+
* loaded descendants or this say so (as in the tree). Replace-on-set.
|
|
793
793
|
*/
|
|
794
794
|
get partialKeys() {
|
|
795
795
|
return this._partialKeys;
|
|
@@ -1510,14 +1510,23 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
|
|
|
1510
1510
|
}
|
|
1511
1511
|
}
|
|
1512
1512
|
#onCheckboxClick(node) {
|
|
1513
|
+
const previous = new Set(this._selectedNodes);
|
|
1514
|
+
const currentlySelected = this._selectedKeys.has(node.item.key);
|
|
1515
|
+
const allDescendantsSelected = !!node.children?.length ? this.#allDescendantsSelected(node) : currentlySelected;
|
|
1516
|
+
const affected = [];
|
|
1517
|
+
const collect = (n) => {
|
|
1518
|
+
affected.push(n.item.key);
|
|
1519
|
+
n.children?.forEach(collect);
|
|
1520
|
+
};
|
|
1521
|
+
collect(node);
|
|
1513
1522
|
if (this.#intercepted({
|
|
1514
1523
|
kind: `toggle`,
|
|
1515
|
-
keys:
|
|
1524
|
+
keys: affected,
|
|
1525
|
+
descendants: true,
|
|
1526
|
+
checked: !allDescendantsSelected,
|
|
1516
1527
|
source: `pointer`
|
|
1517
1528
|
})) return;
|
|
1518
|
-
|
|
1519
|
-
const currentlySelected = this._selectedKeys.has(node.item.key);
|
|
1520
|
-
if (!!node.children?.length ? this.#allDescendantsSelected(node) : currentlySelected) this.#applyCheckedToggle(node, false);
|
|
1529
|
+
if (allDescendantsSelected) this.#applyCheckedToggle(node, false);
|
|
1521
1530
|
else this.#applyCheckedToggle(node, true);
|
|
1522
1531
|
this.requestUpdate();
|
|
1523
1532
|
this.#dispatchSelectEvent(previous);
|
|
@@ -1989,7 +1998,8 @@ let MillerListElement = class MillerListElement extends MillerBaseElement {
|
|
|
1989
1998
|
const isCheckedMode = this.interactionMode === `checked`;
|
|
1990
1999
|
let checkboxTpl = nothing;
|
|
1991
2000
|
if (isCheckedMode) {
|
|
1992
|
-
const
|
|
2001
|
+
const derived = computeCheckboxState(node, this._selectedKeys);
|
|
2002
|
+
const state = derived === `unchecked` && partial ? `indeterminate` : derived;
|
|
1993
2003
|
checkboxTpl = html`
|
|
1994
2004
|
<input
|
|
1995
2005
|
type="checkbox"
|
package/dist/miller.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { A as TreeTickleDetail, O as TreeSelectDetail, b as TreeItemClickDetail, i as TreeCollapseEvent, j as TreeTickleEvent, k as TreeSelectEvent, n as TreeActivateEvent, r as TreeCollapseDetail, t as TreeActivateDetail, v as TreeExpandDetail, x as TreeItemClickEvent, y as TreeExpandEvent } from "./tree-component-DgfkxmVY.js";
|
|
2
2
|
import { a as TreeItem, o as TreeNode } from "./types-Jky6oNAp.js";
|
|
3
|
-
import { _ as MillerRebaseEvent, a as MillerBaseElementEventMap, c as MillerHeaderClickEvent, d as MillerItemDblClickDetail, f as MillerItemDblClickEvent, g as MillerRebaseDetail, h as MillerItemState, i as MillerBaseElement, l as MillerHeaderRightClickDetail, m as MillerItemRightClickEvent, n as MillerTreeControllerOptions, o as MillerListViewState, p as MillerItemRightClickDetail, r as MillerListElement, s as MillerHeaderClickDetail, t as MillerTreeController, u as MillerHeaderRightClickEvent, v as MillerSelectionMode } from "./index-
|
|
3
|
+
import { _ as MillerRebaseEvent, a as MillerBaseElementEventMap, c as MillerHeaderClickEvent, d as MillerItemDblClickDetail, f as MillerItemDblClickEvent, g as MillerRebaseDetail, h as MillerItemState, i as MillerBaseElement, l as MillerHeaderRightClickDetail, m as MillerItemRightClickEvent, n as MillerTreeControllerOptions, o as MillerListViewState, p as MillerItemRightClickDetail, r as MillerListElement, s as MillerHeaderClickDetail, t as MillerTreeController, u as MillerHeaderRightClickEvent, v as MillerSelectionMode } from "./index-YCDugjdu.js";
|
|
4
4
|
export { type TreeActivateDetail as MillerActivateDetail, type TreeActivateEvent as MillerActivateEvent, MillerBaseElement, MillerBaseElementEventMap, type TreeCollapseDetail as MillerCollapseDetail, type TreeCollapseEvent as MillerCollapseEvent, type TreeExpandDetail as MillerExpandDetail, type TreeExpandEvent as MillerExpandEvent, MillerHeaderClickDetail, MillerHeaderClickEvent, MillerHeaderRightClickDetail, MillerHeaderRightClickEvent, type TreeItem as MillerItem, type TreeItemClickDetail as MillerItemClickDetail, type TreeItemClickEvent as MillerItemClickEvent, MillerItemDblClickDetail, MillerItemDblClickEvent, MillerItemRightClickDetail, MillerItemRightClickEvent, MillerItemState, MillerListElement, type MillerListViewState, type TreeNode as MillerNode, MillerRebaseDetail, MillerRebaseEvent, type TreeSelectDetail as MillerSelectDetail, type TreeSelectEvent as MillerSelectEvent, MillerSelectionMode, type TreeTickleDetail as MillerTickleDetail, type TreeTickleEvent as MillerTickleEvent, MillerTreeController, MillerTreeControllerOptions };
|
package/dist/miller.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as MillerListElement, r as MillerBaseElement, t as MillerTreeController } from "./miller-
|
|
1
|
+
import { n as MillerListElement, r as MillerBaseElement, t as MillerTreeController } from "./miller-BrmBywNZ.js";
|
|
2
2
|
export { MillerBaseElement, MillerListElement, MillerTreeController };
|
package/docs-user/README.md
CHANGED
|
@@ -67,7 +67,12 @@ This directory contains documentation for each component and some architectural
|
|
|
67
67
|
|
|
68
68
|
## Architectural Overviews
|
|
69
69
|
|
|
70
|
+
- [infra-handle.md](infra-handle.md)
|
|
71
|
+
- [infra-incremental.md](infra-incremental.md)
|
|
72
|
+
- [infra-theming.md](infra-theming.md)
|
|
70
73
|
- [infra-tickled.md](infra-tickled.md)
|
|
74
|
+
- [infra-view-state.md](infra-view-state.md)
|
|
75
|
+
- [list-state.md](list-state.md)
|
|
71
76
|
- [user-catalog.md](user-catalog.md)
|
|
72
77
|
- [user-selection-intents.md](user-selection-intents.md)
|
|
73
78
|
- [user-theming.md](user-theming.md)
|
|
@@ -146,5 +146,5 @@ import type { BottomDrawerElement, BottomDrawerResizeDetail, BottomDrawerCloseEv
|
|
|
146
146
|
|
|
147
147
|
## See also
|
|
148
148
|
|
|
149
|
-
- [`ixfx-titlebar`](
|
|
150
|
-
- [`ixfx-icon`](
|
|
149
|
+
- [`ixfx-titlebar`](./titlebar.md) — Header component used by the drawer
|
|
150
|
+
- [`ixfx-icon`](./icons.md) — Icon component for header icons
|
package/docs-user/crumbs.md
CHANGED
|
@@ -63,7 +63,7 @@ nav.model = {
|
|
|
63
63
|
### View state
|
|
64
64
|
|
|
65
65
|
The current location as plain JSON, for the host to persist (see
|
|
66
|
-
[docs/infra-view-state.md](
|
|
66
|
+
[docs/infra-view-state.md](./infra-view-state.md)):
|
|
67
67
|
|
|
68
68
|
```ts
|
|
69
69
|
{ v: 1, kind: 'crumb-navigation', path: ['dev', 'workspace'] } // keys below the root; [] = root
|
package/docs-user/data-grid.md
CHANGED
|
@@ -52,7 +52,7 @@ type DataGridColumn = {
|
|
|
52
52
|
};
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
* `width` defaults to `150`. Drag the handle between headers to resize; double-click handle to auto-size to content. Drag the grip handle (shared `dimpled` spot handle — see [docs/infra-handle.md](
|
|
55
|
+
* `width` defaults to `150`. Drag the handle between headers to resize; double-click handle to auto-size to content. Drag the grip handle (shared `dimpled` spot handle — see [docs/infra-handle.md](./infra-handle.md)) to reorder.
|
|
56
56
|
* `align` controls cell content justification. Numeric columns should use `right` (or `center` for Age) – cells use `font-variant-numeric: tabular-nums` so decimal points align when paired with a fixed formatter.
|
|
57
57
|
* `renderer` overrides default `String(value)` display. Use `html` from `lit`.
|
|
58
58
|
|
|
@@ -527,7 +527,7 @@ Matched characters in the search column are highlighted under the
|
|
|
527
527
|
against a custom `rowSearchText` aren't highlighted, since they can't be
|
|
528
528
|
mapped onto a cell, and neither are cells drawn by a column `renderer`. `filterPredicate`
|
|
529
529
|
(a `(row) => boolean` property) filters rows directly. `search-modes` limits the
|
|
530
|
-
offered modes. Full model: [`docs/infra-incremental.md`](
|
|
530
|
+
offered modes. Full model: [`docs/infra-incremental.md`](./infra-incremental.md).
|
|
531
531
|
|
|
532
532
|
---
|
|
533
533
|
|
package/docs-user/detail-list.md
CHANGED
|
@@ -464,7 +464,7 @@ With wrapping:
|
|
|
464
464
|
|
|
465
465
|
## Incremental search
|
|
466
466
|
|
|
467
|
-
A built-in type-ahead popover with **navigate** / **select** / **filter** modes — see [`docs/infra-incremental.md`](
|
|
467
|
+
A built-in type-ahead popover with **navigate** / **select** / **filter** modes — see [`docs/infra-incremental.md`](./infra-incremental.md). No default shortcut; open it with `list.registry.invoke('list.search.filter')` (or `.navigate` / `.select`). A filter change re-runs the column geometry automatically.
|
|
468
468
|
|
|
469
469
|
Search matches against `data-search-label` (or `textContent` as fallback). Use `data-search-label` to match against a different string than what's displayed:
|
|
470
470
|
|
|
@@ -489,7 +489,7 @@ Matched characters are highlighted with the `detail-list-search` highlight key.
|
|
|
489
489
|
|
|
490
490
|
## Grouping
|
|
491
491
|
|
|
492
|
-
Group rows under collapsible headers, following `ixfx-data-grid` (see its [Grouping](
|
|
492
|
+
Group rows under collapsible headers, following `ixfx-data-grid` (see its [Grouping](./data-grid.md#grouping) section).
|
|
493
493
|
|
|
494
494
|
```ts
|
|
495
495
|
list.groupBy = 'kind'; // object items: property · declarative <li>: data-kind
|
|
@@ -607,7 +607,7 @@ replaced) falls back to a full rebuild.
|
|
|
607
607
|
|
|
608
608
|
Snapshot and restore *how* the list is showing its data, separately from the
|
|
609
609
|
data, as plain JSON keyed by item / group key. See
|
|
610
|
-
[`docs/infra-view-state.md`](
|
|
610
|
+
[`docs/infra-view-state.md`](./infra-view-state.md) for the shared
|
|
611
611
|
contract.
|
|
612
612
|
|
|
613
613
|
```ts
|
package/docs-user/dock.md
CHANGED
|
@@ -98,7 +98,7 @@ wrapped in a new split. `Escape` or `pointercancel` cancels with no mutation.
|
|
|
98
98
|
|
|
99
99
|
Where a parent gutter line meets a nested split's gutter (T and + crossings
|
|
100
100
|
of three or four panels), the host renders a small hover-revealed handle — the
|
|
101
|
-
shared `dimpled` spot handle ([docs/infra-handle.md](
|
|
101
|
+
shared `dimpled` spot handle ([docs/infra-handle.md](./infra-handle.md)),
|
|
102
102
|
`var(--accent)` tinted. Dragging it
|
|
103
103
|
starts the vertical and horizontal gutter drags at once via
|
|
104
104
|
`ixfx-split-layout`'s `beginGutterDrag()`, resizing all adjacent panels with
|
|
@@ -434,7 +434,7 @@ the target host (adopt / focus it yourself instead).
|
|
|
434
434
|
## View state
|
|
435
435
|
|
|
436
436
|
The dock implements the shared view-state API
|
|
437
|
-
([docs/infra-view-state.md](
|
|
437
|
+
([docs/infra-view-state.md](./infra-view-state.md)). The component
|
|
438
438
|
never persists anything; the host does, e.g. with `bindViewState()`:
|
|
439
439
|
|
|
440
440
|
```ts
|
|
@@ -498,7 +498,7 @@ The dock layout is close to structure, so the saved state *is* the tree
|
|
|
498
498
|
| `--dock-leaf-body-padding` | padding inside leaf body | `var(--space-s)` |
|
|
499
499
|
|
|
500
500
|
The junction resize handle is the shared handle primitive — theme it with
|
|
501
|
-
`--ixfx-handle-*` (see [docs/infra-handle.md](
|
|
501
|
+
`--ixfx-handle-*` (see [docs/infra-handle.md](./infra-handle.md)).
|
|
502
502
|
|
|
503
503
|
Splitter styling delegates to `ixfx-split-layout` (`--split-*`); solo panel
|
|
504
504
|
chrome delegates to `ixfx-titlebar`, and the leaf body is the docked panel
|
package/docs-user/flat-list.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# `ixfx-flat-list`
|
|
2
2
|
|
|
3
|
-
Navigate a tree inside one flat list. Each level shows its branches and leaves together; entering a branch replaces the list with that branch's children. An [`ixfx-crumb-navigation`](
|
|
3
|
+
Navigate a tree inside one flat list. Each level shows its branches and leaves together; entering a branch replaces the list with that branch's children. An [`ixfx-crumb-navigation`](./crumbs.md) above the scroll area shows the path and jumps to any ancestor.
|
|
4
4
|
|
|
5
|
-
It wraps [`ixfx-vertical-list`](
|
|
5
|
+
It wraps [`ixfx-vertical-list`](./vertical-list.md), so selection modes, interaction modes, keyboard shortcuts, incremental search, drag-out and drag-select behave as they do there. The data model is the same `TreeNode` / `TreeDataModel` that `ixfx-crumb-navigation` and `ixfx-tree-list` use.
|
|
6
6
|
|
|
7
7
|
```html
|
|
8
8
|
<ixfx-flat-list style="height: 280px"></ixfx-flat-list>
|
|
@@ -32,7 +32,7 @@ list.addEventListener('flat-list-activate', ({ detail }) => open(detail.node));
|
|
|
32
32
|
| `canDrop` | `(node, dataTransfer) => boolean` | | Refuse a drag up front. `node` is the row, or the current level's node over empty space |
|
|
33
33
|
| `validateEdit` | `(value, node) => boolean` | | Opts in to [rename](#rename) and validates the typed text |
|
|
34
34
|
| `markedKey` / `marked-key` | `string` | | Keep this node's row visibly marked across level changes. Not a selection |
|
|
35
|
-
| `virtualize`, `itemHeight` / `item-height` | `boolean`, `number` | `false`, `0` | Render only visible rows; needs a fixed row height. See [virtualisation](
|
|
35
|
+
| `virtualize`, `itemHeight` / `item-height` | `boolean`, `number` | `false`, `0` | Render only visible rows; needs a fixed row height. See [virtualisation](./vertical-list.md#virtualisation) |
|
|
36
36
|
| `withUp` / `with-up` | `boolean` | `true` | Up button in the crumb bar |
|
|
37
37
|
| `hideRoot` / `hide-root` | `boolean` | `false` | Hide the root crumb |
|
|
38
38
|
| `emptyText` / `empty-text` | `string` | `'Empty'` | Shown for a level with no children |
|
|
@@ -74,14 +74,14 @@ The inner list's `list-*` events also cross the shadow boundary, with row elemen
|
|
|
74
74
|
| Click the chevron, double-click, `Enter`, `Arrow Right` on a branch | Enter it |
|
|
75
75
|
| `Arrow Left`, `Backspace` | Go up. The cursor lands on the branch you came from |
|
|
76
76
|
| Crumb, caret menu, Up button | Jump to that node. Choosing a leaf from a caret menu shows its level and selects it |
|
|
77
|
-
| Everything else | See [vertical-list keyboard navigation](
|
|
77
|
+
| Everything else | See [vertical-list keyboard navigation](./vertical-list.md#keyboard-navigation) |
|
|
78
78
|
|
|
79
79
|
Selection is cleared on every level change. Arrow Left and Backspace are ignored while the search field is focused.
|
|
80
80
|
|
|
81
81
|
## View state
|
|
82
82
|
|
|
83
83
|
The level shown and its selection, cursor and scroll, as plain JSON for the
|
|
84
|
-
host to persist (see [docs/infra-view-state.md](
|
|
84
|
+
host to persist (see [docs/infra-view-state.md](./infra-view-state.md)):
|
|
85
85
|
|
|
86
86
|
```ts
|
|
87
87
|
{ v: 1, kind: 'flat-list', path: ['docs', 'work'], selected: ['a.txt'], focus: 'a.txt', scroll: { top: 0 } }
|
|
@@ -106,7 +106,7 @@ as its rows arrive (see the vertical-list README).
|
|
|
106
106
|
|
|
107
107
|
## Drops
|
|
108
108
|
|
|
109
|
-
With `items-droppable`, a drag over a row, or over empty space, is accepted unless `canDrop` refuses it. A drop fires `flat-list-drop` with that row's node, or the **current level's node** for empty space. Dropping on a branch row reports it and does **not** enter it. Native OS drags work: `dataTransfer` carries `files`, `text/uri-list` and any custom MIME type the source wrote. The row under the drag gets the vertical-list [drop highlight](
|
|
109
|
+
With `items-droppable`, a drag over a row, or over empty space, is accepted unless `canDrop` refuses it. A drop fires `flat-list-drop` with that row's node, or the **current level's node** for empty space. Dropping on a branch row reports it and does **not** enter it. Native OS drags work: `dataTransfer` carries `files`, `text/uri-list` and any custom MIME type the source wrote. The row under the drag gets the vertical-list [drop highlight](./vertical-list.md#drop-targets).
|
|
110
110
|
|
|
111
111
|
## Context menu
|
|
112
112
|
|
|
@@ -126,7 +126,7 @@ list.beginEdit('set:2'); // e.g. from your own context menu
|
|
|
126
126
|
|
|
127
127
|
## Incremental search
|
|
128
128
|
|
|
129
|
-
Navigate / select / filter search works over the current level, as in [`ixfx-vertical-list`](
|
|
129
|
+
Navigate / select / filter search works over the current level, as in [`ixfx-vertical-list`](./vertical-list.md#incremental-search) — see [`docs/infra-incremental.md`](./infra-incremental.md). `search-modes` limits the modes. There is no default shortcut: bind a key or button to `dispatch('list.search.filter')` (or `.navigate` / `.select`). The highlight rule is built in, so no page-level `::highlight()` rule is needed. The search is closed when the level changes.
|
|
130
130
|
|
|
131
131
|
## CSS variables
|
|
132
132
|
|
package/docs-user/grid-list.md
CHANGED
|
@@ -329,7 +329,7 @@ items directly, independent of search; the data-mode equivalent is
|
|
|
329
329
|
`itemFilterPredicate` (`(item, index) => boolean`). Filtering removes items from
|
|
330
330
|
layout and navigation without materialising anything in data mode. Limit modes
|
|
331
331
|
with `search-modes="navigate filter"`. Full model:
|
|
332
|
-
[`docs/infra-incremental.md`](
|
|
332
|
+
[`docs/infra-incremental.md`](./infra-incremental.md).
|
|
333
333
|
|
|
334
334
|
---
|
|
335
335
|
|
|
@@ -428,7 +428,7 @@ operations.
|
|
|
428
428
|
|
|
429
429
|
## Grouping
|
|
430
430
|
|
|
431
|
-
Group items under collapsible headers, following `ixfx-data-grid` (see its [Grouping](
|
|
431
|
+
Group items under collapsible headers, following `ixfx-data-grid` (see its [Grouping](./data-grid.md#grouping) section).
|
|
432
432
|
|
|
433
433
|
```ts
|
|
434
434
|
grid.groupBy = 'kind'; // data mode: item property · element mode: data-kind attribute
|
|
@@ -463,7 +463,7 @@ Differences from data-grid: group state is reset on every `groupBy` change, the
|
|
|
463
463
|
|
|
464
464
|
Snapshot and restore how the grid is showing its data, separately from the
|
|
465
465
|
data. The contract is shared with the other list components; see
|
|
466
|
-
[`docs/infra-view-state.md`](
|
|
466
|
+
[`docs/infra-view-state.md`](./infra-view-state.md).
|
|
467
467
|
|
|
468
468
|
```ts
|
|
469
469
|
import { bindViewState } from '@ixfx/components';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`<ixfx-hyperbolictree-list>` — a hyperbolic (Poincaré disk) browser over tree data. The focused node sits at the disk's center; its neighbourhood fans outward, shrinking toward the edge with tree-graph distance. Clicking a node re-centers the disk on it with an animated Möbius transform — the underlying layout never changes, only the projection.
|
|
4
4
|
|
|
5
|
-
It implements the shared `TreeComponent` interface (see [`src/tree/README.md`](
|
|
5
|
+
It implements the shared `TreeComponent` interface (see [`src/tree/README.md`](./tree.md)), so `TreeDataModel`, `IncrSearchTreeController`, and any `TreeComponent`-typed code work unmodified.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -36,7 +36,7 @@ It implements the shared `TreeComponent` interface (see [`src/tree/README.md`](.
|
|
|
36
36
|
|
|
37
37
|
## Data model
|
|
38
38
|
|
|
39
|
-
Same `TreeNode` / `TreeItem` shapes as the rest of the tree family (see [`src/tree/README.md`](
|
|
39
|
+
Same `TreeNode` / `TreeItem` shapes as the rest of the tree family (see [`src/tree/README.md`](./tree.md#data-model)), including `root`, `model` (`TreeDataModel`), and `loadChildren` for lazy loading.
|
|
40
40
|
|
|
41
41
|
Keys only need to be unique **among siblings**: internally each node is identified by its key *path* from the root (`HyperbolicLayoutNode.id`), so data like a file system — where `readme.md` recurs in many folders — lays out and focuses correctly. Key-based lookups that can't know the path (`focusedKey` when given a bare key, `revealKey`, `::part(node-<key>)`) match the first node, depth-first, carrying that key.
|
|
42
42
|
|
|
@@ -58,7 +58,7 @@ el.root = {
|
|
|
58
58
|
| `model` | `TreeDataModel \| undefined` | `undefined` | Shared data model; takes precedence over `loadChildren` |
|
|
59
59
|
| `loadChildren` | `LoadChildrenCallback \| undefined` | `undefined` | Callback for lazy child loading |
|
|
60
60
|
| `restoreLoads` | `boolean` | `true` | Whether restoring a saved `center` may load its unloaded ancestors. See [View state](#view-state) |
|
|
61
|
-
| `interactionMode` (`interaction-mode`) | `'implicit' \| 'standard' \| 'manual'` | `'standard'` | Gesture mapping — see [`src/tree/README.md`](
|
|
61
|
+
| `interactionMode` (`interaction-mode`) | `'implicit' \| 'standard' \| 'manual'` | `'standard'` | Gesture mapping — see [`src/tree/README.md`](./tree.md#interactionmode-ixfx-tree-list--ixfx-miller-list) (`'checked'` is unsupported here) |
|
|
62
62
|
| `selectionFilter` (`selection-filter`) | `'none' \| 'leaf' \| 'branch' \| 'all'` | `'all'` | Which node kinds can be selected |
|
|
63
63
|
| `exclusivity` | `TreeExclusivity` | `'none'` | Accepted for interface compatibility, ignored |
|
|
64
64
|
| `filterPredicate` | `TreeFilterPredicate \| undefined` | `undefined` | Non-matching nodes (and branches with no matching descendant) are dimmed, not hidden |
|
|
@@ -80,7 +80,7 @@ el.root = {
|
|
|
80
80
|
| `focusAnimationDuration` (`focus-animation-duration`) | `number` | `400` | Duration (ms) of the animated re-center on focus change; `0` snaps instantly. Respects `prefers-reduced-motion` |
|
|
81
81
|
| `edgeRenderer` | `HyperbolicEdgeRenderer \| undefined` | `undefined` | Custom renderer for edges, in place of the default geodesic-arc path |
|
|
82
82
|
| `disableKeyboardNavigation` (`disable-keyboard-navigation`) | `boolean` | `false` | Disables the keyboard handlers below |
|
|
83
|
-
| `searchModes` (`search-modes`) | `string \| undefined` | `undefined` | Space-separated subset of `navigate select filter` — see [`src/tree/README.md`](
|
|
83
|
+
| `searchModes` (`search-modes`) | `string \| undefined` | `undefined` | Space-separated subset of `navigate select filter` — see [`src/tree/README.md`](./tree.md#incremental-search) |
|
|
84
84
|
| `selectedNode` | `TreeNode \| undefined` | `undefined` | Primary (most recent) selected node |
|
|
85
85
|
| `selectedNodes` | `ReadonlySet<TreeNode>` | `{}` | Full selection set (read-only) |
|
|
86
86
|
| `focusedNode` | `TreeNode \| undefined` (read-only) | true root | The node currently centered on the disk. Pure view-state — `root` is never mutated by focus changes |
|
|
@@ -256,7 +256,7 @@ const nodes = el.getNodes(); // ReadonlyArray<{ node: TreeNode; depth: number }>
|
|
|
256
256
|
|
|
257
257
|
## View state
|
|
258
258
|
|
|
259
|
-
Implements the shared view-state API (`getViewState()` / `setViewState()` / `clearPendingViewState()` / `view-state-change`) — see [`docs/infra-view-state.md`](
|
|
259
|
+
Implements the shared view-state API (`getViewState()` / `setViewState()` / `clearPendingViewState()` / `view-state-change`) — see [`docs/infra-view-state.md`](./infra-view-state.md). `kind` is `hyperbolictree-list`.
|
|
260
260
|
|
|
261
261
|
```typescript
|
|
262
262
|
type HyperbolicTreeListViewState = ViewStateBase & {
|
|
@@ -386,4 +386,4 @@ type HyperbolicLayoutEdge = {
|
|
|
386
386
|
};
|
|
387
387
|
```
|
|
388
388
|
|
|
389
|
-
See [`src/tree/README.md`](
|
|
389
|
+
See [`src/tree/README.md`](./tree.md) for `TreeNode`, `TreeItem` (including `weight`), `TreeDataModel`, `TreeComponent`, and incremental search — all shared with the rest of the tree family.
|
package/docs-user/icicle-tree.md
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
`<ixfx-icicletree-list>` — an icicle (partition) view over tree data. Each depth is a band; each node a rectangle sized by its `valueAccessor` share of its parent. Clicking a branch zooms so it becomes the visual root, with its ancestors in a breadcrumb strip.
|
|
4
4
|
|
|
5
|
-
It implements the shared `TreeComponent` interface (see [`src/tree/README.md`](
|
|
5
|
+
It implements the shared `TreeComponent` interface (see [`src/tree/README.md`](./tree.md)). The [sunburst](./sunburst-tree.md) is its polar counterpart.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## View state
|
|
10
10
|
|
|
11
|
-
Implements the shared view-state API (`getViewState()` / `setViewState()` / `clearPendingViewState()` / `view-state-change`) — see [`docs/infra-view-state.md`](
|
|
11
|
+
Implements the shared view-state API (`getViewState()` / `setViewState()` / `clearPendingViewState()` / `view-state-change`) — see [`docs/infra-view-state.md`](./infra-view-state.md). `kind` is `icicletree-list`.
|
|
12
12
|
|
|
13
13
|
| Field | Type | Meaning |
|
|
14
14
|
|---|---|---|
|
package/docs-user/incr-search.md
CHANGED
|
@@ -6,7 +6,7 @@ Utilities for incremental (type-ahead) search over data collections or DOM-backe
|
|
|
6
6
|
popover in `ixfx-grid-list` / `ixfx-vertical-list` / `ixfx-detail-list` /
|
|
7
7
|
`ixfx-data-grid` / `ixfx-tree-list` / `ixfx-miller-list`. Three modes
|
|
8
8
|
(navigate / select / filter), driven by `list.search.*` commands. See
|
|
9
|
-
[`docs/infra-incremental.md`](
|
|
9
|
+
[`docs/infra-incremental.md`](./infra-incremental.md) — start there
|
|
10
10
|
for anything component-facing.
|
|
11
11
|
- **`createIncrSearch`** — the low-level fuzzy engine (fzf) both the controller
|
|
12
12
|
and the helpers below are built on.
|
package/docs-user/index.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ixfx/components",
|
|
3
|
-
"version": "0.16.
|
|
4
|
-
"generated": "2026-11-
|
|
3
|
+
"version": "0.16.4",
|
|
4
|
+
"generated": "2026-11-02T21:02:52.405Z",
|
|
5
5
|
"components": [
|
|
6
6
|
{
|
|
7
7
|
"name": "ac-text",
|
|
@@ -305,10 +305,30 @@
|
|
|
305
305
|
}
|
|
306
306
|
],
|
|
307
307
|
"overviews": [
|
|
308
|
+
{
|
|
309
|
+
"name": "infra-handle.md",
|
|
310
|
+
"path": "docs-user/infra-handle.md"
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"name": "infra-incremental.md",
|
|
314
|
+
"path": "docs-user/infra-incremental.md"
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
"name": "infra-theming.md",
|
|
318
|
+
"path": "docs-user/infra-theming.md"
|
|
319
|
+
},
|
|
308
320
|
{
|
|
309
321
|
"name": "infra-tickled.md",
|
|
310
322
|
"path": "docs-user/infra-tickled.md"
|
|
311
323
|
},
|
|
324
|
+
{
|
|
325
|
+
"name": "infra-view-state.md",
|
|
326
|
+
"path": "docs-user/infra-view-state.md"
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"name": "list-state.md",
|
|
330
|
+
"path": "docs-user/list-state.md"
|
|
331
|
+
},
|
|
312
332
|
{
|
|
313
333
|
"name": "user-catalog.md",
|
|
314
334
|
"path": "docs-user/user-catalog.md"
|