@logosphere-ui/core 0.0.0-alpha.45 → 0.0.0-alpha.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./leftmenu-BcUNnvly.cjs");Object.defineProperty(exports,"LeftMenu",{enumerable:!0,get:()=>e.LeftMenu});exports.isLeftMenuGroup=e.isLeftMenuGroup;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./leftmenu-DiKo8iud.cjs");Object.defineProperty(exports,"LeftMenu",{enumerable:!0,get:()=>e.LeftMenu});exports.isLeftMenuGroup=e.isLeftMenuGroup;
package/dist/left-menu.js CHANGED
@@ -1,4 +1,4 @@
1
- import { L as o, i as r } from "./leftmenu-Cg57EaSY.js";
1
+ import { L as o, i as r } from "./leftmenu-DlU_G4Sj.js";
2
2
  export {
3
3
  o as LeftMenu,
4
4
  r as isLeftMenuGroup
@@ -1,7 +1,7 @@
1
- "use strict";const n=require("lit"),a=require("lit/decorators.js");require("./button-vdNReBMi.cjs");require("./input-DyLKo7h6.cjs");require("./popover-CrXUbUR-.cjs");require("./ui-icon-DWl7I5BQ.cjs");require("./tree-menu-DDQ_DYl7.cjs");function g(d){return"items"in d&&Array.isArray(d.items)}const v=':host{display:block;position:relative;height:100%;font-family:var(--font-family-base)}.lm{position:relative;height:100%;transition:width var(--transition-speed-base) var(--transition-timing)}.lm--resizing{transition:none}.lm__panel{position:relative;width:var(--lm-closed-width);min-width:var(--lm-closed-width);height:100%;background:var(--color-body-bg);border-right:1px solid var(--color-border);display:flex;flex-direction:column;overflow:hidden;overflow-x:hidden;box-sizing:border-box;padding:var(--spacing-2) var(--spacing-3);transition:width var(--transition-speed-base) var(--transition-timing),min-width var(--transition-speed-base) var(--transition-timing),box-shadow var(--transition-speed-base) var(--transition-timing)}.lm--resizing .lm__panel{transition:none}.lm--open .lm__panel{width:var(--lm-open-width);min-width:var(--lm-open-width)}.lm__resize-handle{position:absolute;top:0;right:-4px;width:8px;height:100%;cursor:col-resize;z-index:calc(var(--z-index-dropdown) + 1);touch-action:none}.lm__resize-handle:after{content:"";position:absolute;top:0;right:3px;width:1px;height:100%;background:transparent;transition:background-color var(--transition-speed-fast) var(--transition-timing)}.lm__resize-handle:hover:after,.lm--resizing .lm__resize-handle:after{background:var(--color-border)}.lm__brand{padding:var(--spacing-1-5) 0 18px var(--spacing-2);margin-bottom:var(--spacing-3);border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-2);box-sizing:border-box}.lm--closed .lm__brand{width:100%;min-height:64px;padding:var(--spacing-1-5) 0 18px;flex-direction:column;justify-content:center}.lm__brand-logo{display:inline-flex;align-items:center;min-width:0;flex:1 1 auto;overflow:hidden}.lm--closed .lm__brand-logo{flex:0 0 auto;justify-content:center;width:100%}.lm__brand-toggle{flex:0 0 auto}.lm__brand-toggle-slot{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:32px;height:32px;min-width:32px;overflow:hidden}.lm__search{padding:var(--spacing-2) 0}.lm__nav{flex:1;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin}.lm__nav-actions{display:flex;justify-content:flex-end;padding-top:var(--spacing-2)}.lm__nav-action-tooltip{--popover-min-width: max-content;--popover-body-padding: var(--spacing-2) var(--spacing-3)}.lm__nav-action-tooltip-text{color:var(--color-body-color);white-space:nowrap}.lm__nav logosphere-tree-menu{width:100%}.lm__group{position:relative;margin-bottom:var(--spacing-2)}.lm__group--with-separator:after{content:"";display:block;margin:var(--spacing-2) var(--spacing-2);border-bottom:1px solid var(--color-border)}.lm__group-label{padding:var(--spacing-2) var(--spacing-1);font-size:var(--font-size-xs);letter-spacing:.04em;color:var(--color-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lm__custom{border-top:1px solid var(--color-border);margin-top:var(--spacing-4);padding:var(--spacing-2)}.lm--closed .lm__custom{padding:var(--spacing-2) 0}.lm__custom--hidden{display:none}.lm--closed .lm__nav{padding-left:0;padding-right:0;scrollbar-gutter:auto;scrollbar-color:var(--color-border) transparent}.lm--closed .lm__nav::-webkit-scrollbar{width:4px;height:4px}.lm--closed .lm__nav::-webkit-scrollbar-track{background:transparent}.lm--closed .lm__nav::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:999px}.lm--closed .lm__nav:hover::-webkit-scrollbar-thumb{background-color:var(--color-tertiary)}.lm__footer{margin-top:auto;border-top:1px solid var(--color-border);padding:var(--spacing-2) 0 0;display:flex;align-items:center;justify-content:center;gap:var(--spacing-2)}.lm--closed .lm__footer{flex-direction:column;justify-content:center}.lm__ctrl{width:32px;height:32px;border:1px solid var(--color-border);background:var(--color-body-bg);border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-body-color)}.lm__ctrl:hover{background:var(--color-tertiary)}.lm__toggle-icon{transform:rotate(180deg);transition:transform var(--transition-speed-base) var(--transition-timing)}.lm__toggle-icon--open{transform:rotate(0)}::slotted([slot="logo-open"]),::slotted([slot="toggle-closed"]){display:inline-flex;width:100%;height:100%}::slotted([slot="custom-open"]),::slotted([slot="custom-closed"]){display:block;width:100%}';var b=Object.defineProperty,w=Object.getOwnPropertyDescriptor,l=(d,e,t,o)=>{for(var i=o>1?void 0:o?w(e,t):e,s=d.length-1,r;s>=0;s--)(r=d[s])&&(i=(o?r(e,t,i):r(i))||i);return o&&i&&b(e,t,i),i};const m=68,_=248,x=500;function y(d){const e=new Set,t=o=>{o.forEach(i=>{e.add(i.id),i.children?.length&&t(i.children)})};return t(d),e}function u(d){const e=[];let t=null,o=0;return d.forEach(i=>{if(g(i)){t=null,e.push({id:i.id||`group-${o++}`,label:i.label?.trim()||null,items:i.items});return}t||(t={id:`group-${o++}`,label:null,items:[]},e.push(t)),t.items.push(i)}),e}function f(d){return d.map(e=>({id:e.id,label:e.label,disabled:e.disabled,active:e.active,iconName:e.iconName,badges:e.badges,data:e.data??e,children:e.children?.length?f(e.children):void 0}))}exports.LeftMenu=class extends n.LitElement{constructor(){super(...arguments),this.open=!1,this.openWidth=248,this.storageKey="logosphere-leftmenu-state",this.items=[],this.defaultExpandedIds=[],this.leading=!0,this._expandedIds=new Set,this._search="",this._searchExpandedIds=new Set,this._hasCustomOpen=!1,this._hasCustomClosed=!1,this._closedToggleHover=!1,this._currentOpenWidth=_,this._resizing=!1,this._isHydratingState=!1,this._resizeStartX=0,this._resizeStartWidth=_,this._onCustomOpenSlotChange=e=>{const t=e.target;this._hasCustomOpen=t.assignedElements({flatten:!0}).length>0},this._onCustomClosedSlotChange=e=>{const t=e.target;this._hasCustomClosed=t.assignedElements({flatten:!0}).length>0},this._handleSearchInput=e=>{const o=e.detail?.value;typeof o=="string"&&this._setSearch(o)},this._toggleOpen=()=>{this.open=!this.open,this._closedToggleHover=!1},this._handleClosedToggleMouseEnter=()=>{this.open||(this._closedToggleHover=!0)},this._handleClosedToggleMouseLeave=()=>{this._closedToggleHover=!1},this._handleResizePointerDown=e=>{this.open&&(e.preventDefault(),e.stopPropagation(),this._resizing=!0,this._resizeStartX=e.clientX,this._resizeStartWidth=this._currentOpenWidth,window.addEventListener("pointermove",this._handleResizePointerMove),window.addEventListener("pointerup",this._handleResizePointerUp),window.addEventListener("pointercancel",this._handleResizePointerUp))},this._handleResizePointerMove=e=>{if(!this._resizing)return;const t=e.clientX-this._resizeStartX;this._currentOpenWidth=this._clampOpenWidth(this._resizeStartWidth+t)},this._handleResizePointerUp=()=>{this._resizing&&(this._resizing=!1,this._removeResizeListeners(),this.dispatchEvent(new CustomEvent("width-change",{detail:{width:this._currentOpenWidth},bubbles:!0,composed:!0})))},this._collapseAll=()=>{this._expandedIds=new Set,this._searchExpandedIds=new Set},this._handleTreeToggle=e=>{e.stopPropagation();const{item:t,expanded:o}=e.detail;o?this._expandedIds.add(t.id):this._expandedIds.delete(t.id),this._expandedIds=new Set(this._expandedIds)},this._handleTreeNodeClick=e=>{this.open||!e.detail.hasChildren||(this.open=!0,this._expandedIds.add(e.detail.item.id),this._expandedIds=new Set(this._expandedIds))},this._handleTreeItemClick=e=>{e.stopPropagation(),this.dispatchEvent(new CustomEvent("item-click",{detail:{item:e.detail.item.data??e.detail.item},bubbles:!0,composed:!0}))}}connectedCallback(){super.connectedCallback(),this._currentOpenWidth=this._clampOpenWidth(this.openWidth),this._loadPersistedState()}disconnectedCallback(){super.disconnectedCallback(),this._removeResizeListeners()}updated(e){this._isHydratingState||(e.has("openWidth")&&!this._resizing&&(this._currentOpenWidth=this._clampOpenWidth(this.openWidth)),e.has("open")&&this._persistState(),e.has("items")&&this.defaultExpandedIds.length&&(this._expandedIds=new Set(this.defaultExpandedIds)),(e.has("items")||e.has("open"))&&this._syncIconSlots())}_loadPersistedState(){if(!(typeof window>"u"))try{const e=window.localStorage.getItem(this.storageKey);if(!e)return;const t=JSON.parse(e);this._isHydratingState=!0,typeof t.open=="boolean"&&(this.open=t.open),this._isHydratingState=!1}catch{this._isHydratingState=!1}}_persistState(){if(!(typeof window>"u"))try{window.localStorage.setItem(this.storageKey,JSON.stringify({open:this.open}))}catch{}}_syncIconSlots(){const e=Array.from(this.querySelectorAll("[slot^='icon-']")),t=Array.from(this.shadowRoot?.querySelectorAll("logosphere-tree-menu")??[]);if(!t.length)return;const o=t.map(i=>{const s=i.getAttribute("data-group-id"),r=this._renderGroups().find(h=>h.id===s);return r?y(r.items):new Set});e.forEach(i=>{const r=(i.getAttribute("slot")??"").slice(5),h=o.findIndex(p=>p.has(r)),c=h>=0?t[h]:t[0];c&&i.parentElement!==c&&c.appendChild(i)})}_allItems(){return u(this.items).flatMap(e=>e.items)}_renderGroups(){return u(this.items)}_setSearch(e){if(this._search=e,!e){this._searchExpandedIds=new Set;return}const t=new Set,o=i=>{let s=!1;return i.forEach(r=>{const h=r.children??[],c=r.label.toLocaleLowerCase().includes(e.toLocaleLowerCase()),p=h.length?o(h):!1;p&&t.add(r.id),c&&h.length&&t.add(r.id),s=s||c||p}),s};o(this._allItems()),this._searchExpandedIds=t}_filterItems(e,t){if(!t)return e;const o=t.toLocaleLowerCase(),i=s=>{const r=(s.children??[]).map(i).filter(Boolean);return!s.label.toLocaleLowerCase().includes(o)&&r.length===0?null:{...s,children:r}};return e.map(i).filter(Boolean)}_clampOpenWidth(e){return Math.min(x,Math.max(_,Math.round(e)))}_removeResizeListeners(){window.removeEventListener("pointermove",this._handleResizePointerMove),window.removeEventListener("pointerup",this._handleResizePointerUp),window.removeEventListener("pointercancel",this._handleResizePointerUp)}_effectiveExpandedIds(){const e=new Set(this._expandedIds);return this._search&&this._searchExpandedIds.forEach(t=>e.add(t)),Array.from(e)}render(){const e=this.open,t=this._effectiveExpandedIds(),o=this._renderGroups().map(s=>({group:s,items:this._filterItems(s.items,this._search)})).filter(({items:s})=>s.length>0),i=e?this._currentOpenWidth:m;return n.html`
1
+ "use strict";const n=require("lit"),a=require("lit/decorators.js");require("./button-vdNReBMi.cjs");require("./input-DyLKo7h6.cjs");require("./popover-CrXUbUR-.cjs");require("./ui-icon-DWl7I5BQ.cjs");require("./tree-menu-DDQ_DYl7.cjs");function g(d){return"items"in d&&Array.isArray(d.items)}const v=':host{display:block;position:relative;height:100%;font-family:var(--font-family-base)}.lm{position:relative;height:100%;transition:width var(--transition-speed-base) var(--transition-timing)}.lm--resizing{transition:none}.lm__panel{position:relative;width:var(--lm-closed-width);min-width:var(--lm-closed-width);height:100%;background:var(--color-body-bg);border-right:1px solid var(--color-border);display:flex;flex-direction:column;overflow:hidden;overflow-x:hidden;box-sizing:border-box;padding:var(--spacing-2) var(--spacing-3);transition:width var(--transition-speed-base) var(--transition-timing),min-width var(--transition-speed-base) var(--transition-timing),box-shadow var(--transition-speed-base) var(--transition-timing)}.lm--resizing .lm__panel{transition:none}.lm--open .lm__panel{width:var(--lm-open-width);min-width:var(--lm-open-width)}.lm__resize-handle{position:absolute;top:0;right:-4px;width:8px;height:100%;cursor:col-resize;z-index:calc(var(--z-index-dropdown) + 1);touch-action:none}.lm__resize-handle:after{content:"";position:absolute;top:0;right:3px;width:1px;height:100%;background:transparent;transition:background-color var(--transition-speed-fast) var(--transition-timing)}.lm__resize-handle:hover:after,.lm--resizing .lm__resize-handle:after{background:var(--color-border)}.lm__brand{padding:var(--spacing-1-5) 0 18px var(--spacing-2);margin-bottom:var(--spacing-3);border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-2);box-sizing:border-box}.lm--closed .lm__brand{width:100%;min-height:64px;padding:var(--spacing-1-5) 0 18px;flex-direction:column;justify-content:center}.lm__brand-logo{display:inline-flex;align-items:center;min-width:0;flex:1 1 auto;overflow:hidden}.lm--closed .lm__brand-logo{flex:0 0 auto;justify-content:center;width:100%}.lm__brand-toggle{flex:0 0 auto}.lm__brand-toggle-slot{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:32px;height:32px;min-width:32px;overflow:hidden}.lm__search{padding:var(--spacing-2) 0}.lm__nav{flex:1;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin}.lm__nav-actions{display:flex;justify-content:flex-end;padding-top:var(--spacing-2)}.lm__nav-action-tooltip{--popover-min-width: max-content;--popover-body-padding: var(--spacing-2) var(--spacing-3)}.lm__nav-action-tooltip-text{color:var(--color-body-color);white-space:nowrap}.lm__nav logosphere-tree-menu{width:100%}.lm__group{position:relative;margin-bottom:var(--spacing-2)}.lm__group--with-separator:after{content:"";display:block;margin:var(--spacing-2) var(--spacing-2);border-bottom:1px solid var(--color-border)}.lm__group-label{padding:var(--spacing-2) var(--spacing-1);font-size:var(--font-size-xs);letter-spacing:.04em;color:var(--color-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lm__custom{border-top:1px solid var(--color-border);margin-top:var(--spacing-4);padding:var(--spacing-2)}.lm--closed .lm__custom{padding:var(--spacing-2) 0}.lm__custom--hidden{display:none}.lm--closed .lm__nav{padding-left:0;padding-right:0;scrollbar-gutter:auto;scrollbar-color:var(--color-border) transparent}.lm--closed .lm__nav::-webkit-scrollbar{width:4px;height:4px}.lm--closed .lm__nav::-webkit-scrollbar-track{background:transparent}.lm--closed .lm__nav::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:999px}.lm--closed .lm__nav:hover::-webkit-scrollbar-thumb{background-color:var(--color-tertiary)}.lm__footer{margin-top:auto;border-top:1px solid var(--color-border);padding:var(--spacing-2) 0 0;display:flex;align-items:center;justify-content:center;gap:var(--spacing-2)}.lm--closed .lm__footer{flex-direction:column;justify-content:center}.lm__ctrl{width:32px;height:32px;border:1px solid var(--color-border);background:var(--color-body-bg);border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-body-color)}.lm__ctrl:hover{background:var(--color-tertiary)}.lm__toggle-icon{transform:rotate(180deg);transition:transform var(--transition-speed-base) var(--transition-timing)}.lm__toggle-icon--open{transform:rotate(0)}::slotted([slot="logo-open"]),::slotted([slot="toggle-closed"]){display:inline-flex;width:100%;height:100%}::slotted([slot="custom-open"]),::slotted([slot="custom-closed"]){display:block;width:100%}';var b=Object.defineProperty,w=Object.getOwnPropertyDescriptor,l=(d,e,t,o)=>{for(var i=o>1?void 0:o?w(e,t):e,s=d.length-1,r;s>=0;s--)(r=d[s])&&(i=(o?r(e,t,i):r(i))||i);return o&&i&&b(e,t,i),i};const u=68,_=248,x=500;function y(d){const e=new Set,t=o=>{o.forEach(i=>{e.add(i.id),i.children?.length&&t(i.children)})};return t(d),e}function m(d){const e=[];let t=null,o=0;return d.forEach(i=>{if(g(i)){t=null,e.push({id:i.id||`group-${o++}`,label:i.label?.trim()||null,items:i.items});return}t||(t={id:`group-${o++}`,label:null,items:[]},e.push(t)),t.items.push(i)}),e}function f(d){return d.map(e=>({id:e.id,label:e.label,disabled:e.disabled,active:e.active,iconName:e.iconName,badges:e.badges,data:e.data??e,children:e.children?.length?f(e.children):void 0}))}exports.LeftMenu=class extends n.LitElement{constructor(){super(...arguments),this.open=!1,this.openWidth=248,this.storageKey="logosphere-leftmenu-state",this.items=[],this.defaultExpandedIds=[],this.leading=!0,this._expandedIds=new Set,this._search="",this._searchExpandedIds=new Set,this._hasCustomOpen=!1,this._hasCustomClosed=!1,this._closedToggleHover=!1,this._currentOpenWidth=_,this._resizing=!1,this._isHydratingState=!1,this._resizeStartX=0,this._resizeStartWidth=_,this._onCustomOpenSlotChange=e=>{const t=e.target;this._hasCustomOpen=t.assignedElements({flatten:!0}).length>0},this._onCustomClosedSlotChange=e=>{const t=e.target;this._hasCustomClosed=t.assignedElements({flatten:!0}).length>0},this._handleSearchInput=e=>{const o=e.detail?.value;typeof o=="string"&&this._setSearch(o)},this._toggleOpen=()=>{const e=!this.open,t=e?this._currentOpenWidth:u;this.open=e,this._closedToggleHover=!1,this.dispatchEvent(new CustomEvent("toggle-change",{detail:{open:e,width:t,openWidth:this._currentOpenWidth,closedWidth:u},bubbles:!0,composed:!0}))},this._handleClosedToggleMouseEnter=()=>{this.open||(this._closedToggleHover=!0)},this._handleClosedToggleMouseLeave=()=>{this._closedToggleHover=!1},this._handleResizePointerDown=e=>{this.open&&(e.preventDefault(),e.stopPropagation(),this._resizing=!0,this._resizeStartX=e.clientX,this._resizeStartWidth=this._currentOpenWidth,window.addEventListener("pointermove",this._handleResizePointerMove),window.addEventListener("pointerup",this._handleResizePointerUp),window.addEventListener("pointercancel",this._handleResizePointerUp))},this._handleResizePointerMove=e=>{if(!this._resizing)return;const t=e.clientX-this._resizeStartX;this._currentOpenWidth=this._clampOpenWidth(this._resizeStartWidth+t)},this._handleResizePointerUp=()=>{this._resizing&&(this._resizing=!1,this._removeResizeListeners(),this.dispatchEvent(new CustomEvent("width-change",{detail:{width:this._currentOpenWidth},bubbles:!0,composed:!0})))},this._collapseAll=()=>{this._expandedIds=new Set,this._searchExpandedIds=new Set},this._handleTreeToggle=e=>{e.stopPropagation();const{item:t,expanded:o}=e.detail;o?this._expandedIds.add(t.id):this._expandedIds.delete(t.id),this._expandedIds=new Set(this._expandedIds)},this._handleTreeNodeClick=e=>{this.open||!e.detail.hasChildren||(this.open=!0,this._expandedIds.add(e.detail.item.id),this._expandedIds=new Set(this._expandedIds))},this._handleTreeItemClick=e=>{e.stopPropagation(),this.dispatchEvent(new CustomEvent("item-click",{detail:{item:e.detail.item.data??e.detail.item},bubbles:!0,composed:!0}))}}connectedCallback(){super.connectedCallback(),this._currentOpenWidth=this._clampOpenWidth(this.openWidth),this._loadPersistedState()}disconnectedCallback(){super.disconnectedCallback(),this._removeResizeListeners()}updated(e){this._isHydratingState||(e.has("openWidth")&&!this._resizing&&(this._currentOpenWidth=this._clampOpenWidth(this.openWidth)),e.has("open")&&this._persistState(),e.has("items")&&this.defaultExpandedIds.length&&(this._expandedIds=new Set(this.defaultExpandedIds)),(e.has("items")||e.has("open"))&&this._syncIconSlots())}_loadPersistedState(){if(!(typeof window>"u"))try{const e=window.localStorage.getItem(this.storageKey);if(!e)return;const t=JSON.parse(e);this._isHydratingState=!0,typeof t.open=="boolean"&&(this.open=t.open),this._isHydratingState=!1}catch{this._isHydratingState=!1}}_persistState(){if(!(typeof window>"u"))try{window.localStorage.setItem(this.storageKey,JSON.stringify({open:this.open}))}catch{}}_syncIconSlots(){const e=Array.from(this.querySelectorAll("[slot^='icon-']")),t=Array.from(this.shadowRoot?.querySelectorAll("logosphere-tree-menu")??[]);if(!t.length)return;const o=t.map(i=>{const s=i.getAttribute("data-group-id"),r=this._renderGroups().find(h=>h.id===s);return r?y(r.items):new Set});e.forEach(i=>{const r=(i.getAttribute("slot")??"").slice(5),h=o.findIndex(p=>p.has(r)),c=h>=0?t[h]:t[0];c&&i.parentElement!==c&&c.appendChild(i)})}_allItems(){return m(this.items).flatMap(e=>e.items)}_renderGroups(){return m(this.items)}_setSearch(e){if(this._search=e,!e){this._searchExpandedIds=new Set;return}const t=new Set,o=i=>{let s=!1;return i.forEach(r=>{const h=r.children??[],c=r.label.toLocaleLowerCase().includes(e.toLocaleLowerCase()),p=h.length?o(h):!1;p&&t.add(r.id),c&&h.length&&t.add(r.id),s=s||c||p}),s};o(this._allItems()),this._searchExpandedIds=t}_filterItems(e,t){if(!t)return e;const o=t.toLocaleLowerCase(),i=s=>{const r=(s.children??[]).map(i).filter(Boolean);return!s.label.toLocaleLowerCase().includes(o)&&r.length===0?null:{...s,children:r}};return e.map(i).filter(Boolean)}_clampOpenWidth(e){return Math.min(x,Math.max(_,Math.round(e)))}_removeResizeListeners(){window.removeEventListener("pointermove",this._handleResizePointerMove),window.removeEventListener("pointerup",this._handleResizePointerUp),window.removeEventListener("pointercancel",this._handleResizePointerUp)}_effectiveExpandedIds(){const e=new Set(this._expandedIds);return this._search&&this._searchExpandedIds.forEach(t=>e.add(t)),Array.from(e)}render(){const e=this.open,t=this._effectiveExpandedIds(),o=this._renderGroups().map(s=>({group:s,items:this._filterItems(s.items,this._search)})).filter(({items:s})=>s.length>0),i=e?this._currentOpenWidth:u;return n.html`
2
2
  <aside
3
3
  class="lm ${e?"lm--open":"lm--closed"} ${this._resizing?"lm--resizing":""}"
4
- style=${`--lm-open-width:${this._currentOpenWidth}px; --lm-closed-width:${m}px; width:${i}px;`}
4
+ style=${`--lm-open-width:${this._currentOpenWidth}px; --lm-closed-width:${u}px; width:${i}px;`}
5
5
  @mouseenter=${this._handleClosedToggleMouseEnter}
6
6
  @mouseleave=${this._handleClosedToggleMouseLeave}
7
7
  >
@@ -14,7 +14,7 @@ var S = Object.defineProperty, C = Object.getOwnPropertyDescriptor, l = (e, t, o
14
14
  (a = e[n]) && (i = (s ? a(t, o, i) : a(i)) || i);
15
15
  return s && i && S(t, o, i), i;
16
16
  };
17
- const u = 68, g = 248, $ = 500;
17
+ const g = 68, u = 248, $ = 500;
18
18
  function E(e) {
19
19
  const t = /* @__PURE__ */ new Set(), o = (s) => {
20
20
  s.forEach((i) => {
@@ -52,7 +52,7 @@ function f(e) {
52
52
  }
53
53
  let r = class extends x {
54
54
  constructor() {
55
- super(...arguments), this.open = !1, this.openWidth = 248, this.storageKey = "logosphere-leftmenu-state", this.items = [], this.defaultExpandedIds = [], this.leading = !0, this._expandedIds = /* @__PURE__ */ new Set(), this._search = "", this._searchExpandedIds = /* @__PURE__ */ new Set(), this._hasCustomOpen = !1, this._hasCustomClosed = !1, this._closedToggleHover = !1, this._currentOpenWidth = g, this._resizing = !1, this._isHydratingState = !1, this._resizeStartX = 0, this._resizeStartWidth = g, this._onCustomOpenSlotChange = (e) => {
55
+ super(...arguments), this.open = !1, this.openWidth = 248, this.storageKey = "logosphere-leftmenu-state", this.items = [], this.defaultExpandedIds = [], this.leading = !0, this._expandedIds = /* @__PURE__ */ new Set(), this._search = "", this._searchExpandedIds = /* @__PURE__ */ new Set(), this._hasCustomOpen = !1, this._hasCustomClosed = !1, this._closedToggleHover = !1, this._currentOpenWidth = u, this._resizing = !1, this._isHydratingState = !1, this._resizeStartX = 0, this._resizeStartWidth = u, this._onCustomOpenSlotChange = (e) => {
56
56
  const t = e.target;
57
57
  this._hasCustomOpen = t.assignedElements({ flatten: !0 }).length > 0;
58
58
  }, this._onCustomClosedSlotChange = (e) => {
@@ -62,7 +62,19 @@ let r = class extends x {
62
62
  const o = e.detail?.value;
63
63
  typeof o == "string" && this._setSearch(o);
64
64
  }, this._toggleOpen = () => {
65
- this.open = !this.open, this._closedToggleHover = !1;
65
+ const e = !this.open, t = e ? this._currentOpenWidth : g;
66
+ this.open = e, this._closedToggleHover = !1, this.dispatchEvent(
67
+ new CustomEvent("toggle-change", {
68
+ detail: {
69
+ open: e,
70
+ width: t,
71
+ openWidth: this._currentOpenWidth,
72
+ closedWidth: g
73
+ },
74
+ bubbles: !0,
75
+ composed: !0
76
+ })
77
+ );
66
78
  }, this._handleClosedToggleMouseEnter = () => {
67
79
  this.open || (this._closedToggleHover = !0);
68
80
  }, this._handleClosedToggleMouseLeave = () => {
@@ -172,7 +184,7 @@ let r = class extends x {
172
184
  return e.map(s).filter(Boolean);
173
185
  }
174
186
  _clampOpenWidth(e) {
175
- return Math.min($, Math.max(g, Math.round(e)));
187
+ return Math.min($, Math.max(u, Math.round(e)));
176
188
  }
177
189
  _removeResizeListeners() {
178
190
  window.removeEventListener("pointermove", this._handleResizePointerMove), window.removeEventListener("pointerup", this._handleResizePointerUp), window.removeEventListener("pointercancel", this._handleResizePointerUp);
@@ -182,11 +194,11 @@ let r = class extends x {
182
194
  return this._search && this._searchExpandedIds.forEach((t) => e.add(t)), Array.from(e);
183
195
  }
184
196
  render() {
185
- const e = this.open, t = this._effectiveExpandedIds(), o = this._renderGroups().map((i) => ({ group: i, items: this._filterItems(i.items, this._search) })).filter(({ items: i }) => i.length > 0), s = e ? this._currentOpenWidth : u;
197
+ const e = this.open, t = this._effectiveExpandedIds(), o = this._renderGroups().map((i) => ({ group: i, items: this._filterItems(i.items, this._search) })).filter(({ items: i }) => i.length > 0), s = e ? this._currentOpenWidth : g;
186
198
  return d`
187
199
  <aside
188
200
  class="lm ${e ? "lm--open" : "lm--closed"} ${this._resizing ? "lm--resizing" : ""}"
189
- style=${`--lm-open-width:${this._currentOpenWidth}px; --lm-closed-width:${u}px; width:${s}px;`}
201
+ style=${`--lm-open-width:${this._currentOpenWidth}px; --lm-closed-width:${g}px; width:${s}px;`}
190
202
  @mouseenter=${this._handleClosedToggleMouseEnter}
191
203
  @mouseleave=${this._handleClosedToggleMouseLeave}
192
204
  >
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logosphere-ui/core",
3
- "version": "0.0.0-alpha.45",
3
+ "version": "0.0.0-alpha.47",
4
4
  "description": "A modern, framework-agnostic UI component library built with Lit and Web Components",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",