@melodicdev/components 1.0.4 → 1.0.5

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.
@@ -4571,7 +4571,7 @@ function oa(e) {
4571
4571
  "ml-input--disabled": e.disabled,
4572
4572
  "ml-input--readonly": e.readonly,
4573
4573
  "ml-input--error": !!e.error,
4574
- "ml-input--focused": e._focused
4574
+ "ml-input--focused": e.focused
4575
4575
  })}
4576
4576
  >
4577
4577
  ${d(!!e.label, () => i`
@@ -4739,7 +4739,7 @@ const ia = () => y`
4739
4739
  `;
4740
4740
  var it = class {
4741
4741
  constructor() {
4742
- this.type = "text", this.value = "", this.placeholder = "", this.label = "", this.hint = "", this.error = "", this.size = "md", this.disabled = !1, this.readonly = !1, this.required = !1, this.autocomplete = "off", this._focused = !1, this.handleInput = (t) => {
4742
+ this.type = "text", this.value = "", this.placeholder = "", this.label = "", this.hint = "", this.error = "", this.size = "md", this.disabled = !1, this.readonly = !1, this.required = !1, this.autocomplete = "off", this.focused = !1, this.handleInput = (t) => {
4743
4743
  this.value = t.target.value, this.elementRef.dispatchEvent(new CustomEvent("ml:input", {
4744
4744
  bubbles: !0,
4745
4745
  composed: !0,
@@ -4752,12 +4752,12 @@ var it = class {
4752
4752
  detail: { value: this.value }
4753
4753
  }));
4754
4754
  }, this.handleFocus = () => {
4755
- this._focused = !0, this.elementRef.dispatchEvent(new CustomEvent("ml:focus", {
4755
+ this.focused = !0, this.elementRef.dispatchEvent(new CustomEvent("ml:focus", {
4756
4756
  bubbles: !0,
4757
4757
  composed: !0
4758
4758
  }));
4759
4759
  }, this.handleBlur = () => {
4760
- this._focused = !1, this.elementRef.dispatchEvent(new CustomEvent("ml:blur", {
4760
+ this.focused = !1, this.elementRef.dispatchEvent(new CustomEvent("ml:blur", {
4761
4761
  bubbles: !0,
4762
4762
  composed: !0
4763
4763
  }));
@@ -4794,7 +4794,7 @@ function sa(e) {
4794
4794
  "ml-textarea--disabled": e.disabled,
4795
4795
  "ml-textarea--readonly": e.readonly,
4796
4796
  "ml-textarea--error": !!e.error,
4797
- "ml-textarea--focused": e._focused,
4797
+ "ml-textarea--focused": e.focused,
4798
4798
  "ml-textarea--resize": e.resize
4799
4799
  })}
4800
4800
  >
@@ -4947,7 +4947,7 @@ const na = () => y`
4947
4947
  `;
4948
4948
  var st = class {
4949
4949
  constructor() {
4950
- this.value = "", this.placeholder = "", this.label = "", this.hint = "", this.error = "", this.size = "md", this.rows = 3, this.maxLength = 0, this.disabled = !1, this.readonly = !1, this.required = !1, this.resize = !1, this._focused = !1, this.handleInput = (t) => {
4950
+ this.value = "", this.placeholder = "", this.label = "", this.hint = "", this.error = "", this.size = "md", this.rows = 3, this.maxLength = 0, this.disabled = !1, this.readonly = !1, this.required = !1, this.resize = !1, this.focused = !1, this.handleInput = (t) => {
4951
4951
  this.value = t.target.value, this.elementRef.dispatchEvent(new CustomEvent("ml:input", {
4952
4952
  bubbles: !0,
4953
4953
  composed: !0,
@@ -4960,12 +4960,12 @@ var st = class {
4960
4960
  detail: { value: this.value }
4961
4961
  }));
4962
4962
  }, this.handleFocus = () => {
4963
- this._focused = !0, this.elementRef.dispatchEvent(new CustomEvent("ml:focus", {
4963
+ this.focused = !0, this.elementRef.dispatchEvent(new CustomEvent("ml:focus", {
4964
4964
  bubbles: !0,
4965
4965
  composed: !0
4966
4966
  }));
4967
4967
  }, this.handleBlur = () => {
4968
- this._focused = !1, this.elementRef.dispatchEvent(new CustomEvent("ml:blur", {
4968
+ this.focused = !1, this.elementRef.dispatchEvent(new CustomEvent("ml:blur", {
4969
4969
  bubbles: !0,
4970
4970
  composed: !0
4971
4971
  }));
@@ -14217,7 +14217,7 @@ function hi(e, t) {
14217
14217
  `;
14218
14218
  }
14219
14219
  function Pe(e, t, r) {
14220
- const l = e.active === t.value, a = !!t.children && t.children.length > 0, o = e._expandedItems.has(t.value), s = e.collapsed, n = v({
14220
+ const l = e.active === t.value, a = !!t.children && t.children.length > 0, o = e.expandedItems.has(t.value), s = e.collapsed, n = v({
14221
14221
  "ml-sidebar__item-link": !0,
14222
14222
  "ml-sidebar__item-link--active": l,
14223
14223
  "ml-sidebar__item-link--disabled": !!t.disabled,
@@ -14227,7 +14227,7 @@ function Pe(e, t, r) {
14227
14227
  }), c = (u) => {
14228
14228
  if (!t.disabled) {
14229
14229
  if (a) {
14230
- u.preventDefault(), e.handleConfigToggle(t, e._expandedItems);
14230
+ u.preventDefault(), e.handleConfigToggle(t);
14231
14231
  return;
14232
14232
  }
14233
14233
  e.handleConfigItemClick(t.value, t.href);
@@ -14579,8 +14579,9 @@ var Zt = class {
14579
14579
  this._slottedItems = t.target.assignedElements({ flatten: !0 }), this.updateItemStates();
14580
14580
  }, this.handleConfigItemClick = (t, r) => {
14581
14581
  this.activateItem(t, r);
14582
- }, this.handleConfigToggle = (t, r) => {
14583
- r.has(t.value) ? r.delete(t.value) : r.add(t.value), this.elementRef.dispatchEvent(new Event("ml:internal-update"));
14582
+ }, this.handleConfigToggle = (t) => {
14583
+ const r = new Set(this.expandedItems);
14584
+ r.has(t.value) ? r.delete(t.value) : r.add(t.value), this.expandedItems = r;
14584
14585
  }, this.handleKeyDown = (t) => {
14585
14586
  const r = this.elementRef.shadowRoot?.querySelector(".ml-sidebar__main");
14586
14587
  if (!r) return;
@@ -14603,7 +14604,7 @@ var Zt = class {
14603
14604
  return;
14604
14605
  }
14605
14606
  o !== a && l[o] && l[o].focus();
14606
- }, this._expandedItems = /* @__PURE__ */ new Set();
14607
+ }, this.expandedItems = /* @__PURE__ */ new Set();
14607
14608
  }
14608
14609
  /** Check if search slot has content */
14609
14610
  get hasSearch() {
@@ -17746,7 +17747,7 @@ hr = g([_({
17746
17747
  ]
17747
17748
  })], hr);
17748
17749
  function Zi(e) {
17749
- const t = e["sidebar-position"] === "right", r = e["sidebar-collapsed"], l = e["header-fixed"], a = e._mobileOpen, o = e.isMobile;
17750
+ const t = e["sidebar-position"] === "right", r = e["sidebar-collapsed"], l = e["header-fixed"], a = e.mobileOpen, o = e.mobile;
17750
17751
  return i`
17751
17752
  <div
17752
17753
  class=${v({
@@ -17990,23 +17991,20 @@ const es = () => y`
17990
17991
  `;
17991
17992
  var pr = class {
17992
17993
  constructor() {
17993
- this["sidebar-position"] = "left", this["sidebar-collapsed"] = !1, this["header-fixed"] = !1, this._mobileOpen = !1, this._mediaQuery = null, this._handleMediaChange = this.onMediaChange.bind(this), this.toggleMobileSidebar = () => {
17994
- this._mobileOpen = !this._mobileOpen;
17994
+ this["sidebar-position"] = "left", this["sidebar-collapsed"] = !1, this["header-fixed"] = !1, this.mobile = !1, this.mobileOpen = !1, this._mediaQuery = null, this._handleMediaChange = this.onMediaChange.bind(this), this.toggleMobileSidebar = () => {
17995
+ this.mobileOpen = !this.mobileOpen;
17995
17996
  }, this.closeMobileSidebar = () => {
17996
- this._mobileOpen = !1;
17997
+ this.mobileOpen = !1;
17997
17998
  };
17998
17999
  }
17999
- get isMobile() {
18000
- return this._mediaQuery?.matches === !1;
18001
- }
18002
18000
  onCreate() {
18003
- this._mediaQuery = window.matchMedia("(min-width: 768px)"), this._mediaQuery.addEventListener("change", this._handleMediaChange), this.isMobile || (this._mobileOpen = !1);
18001
+ this._mediaQuery = window.matchMedia("(min-width: 768px)"), this._mediaQuery.addEventListener("change", this._handleMediaChange), this.mobile = !this._mediaQuery.matches;
18004
18002
  }
18005
18003
  onDestroy() {
18006
18004
  this._mediaQuery?.removeEventListener("change", this._handleMediaChange);
18007
18005
  }
18008
18006
  onMediaChange(t) {
18009
- t.matches && (this._mobileOpen = !1);
18007
+ this.mobile = !t.matches, t.matches && (this.mobileOpen = !1);
18010
18008
  }
18011
18009
  };
18012
18010
  pr = g([_({
@@ -45,7 +45,7 @@ export declare class InputComponent implements IElementRef, OnInit {
45
45
  /** Autocomplete attribute */
46
46
  autocomplete: string;
47
47
  /** Internal focus state */
48
- _focused: boolean;
48
+ focused: boolean;
49
49
  onInit(): void;
50
50
  handleInput: (event: Event) => void;
51
51
  handleChange: (event: Event) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"input.component.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/input/input.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIlD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAMa,cAAe,YAAW,WAAW,EAAE,MAAM;IACzD,UAAU,EAAG,WAAW,CAAC;IAEzB,iBAAiB;IACjB,IAAI,EAAE,SAAS,CAAU;IAEzB,oBAAoB;IACpB,KAAK,SAAM;IAEX,uBAAuB;IACvB,WAAW,SAAM;IAEjB,iBAAiB;IACjB,KAAK,SAAM;IAEX,kCAAkC;IAClC,IAAI,SAAM;IAEV,iDAAiD;IACjD,KAAK,SAAM;IAEX,iBAAiB;IACjB,IAAI,EAAE,IAAI,CAAQ;IAElB,wBAAwB;IACxB,QAAQ,UAAS;IAEjB,0BAA0B;IAC1B,QAAQ,UAAS;IAEjB,uBAAuB;IACvB,QAAQ,UAAS;IAEjB,6BAA6B;IAC7B,YAAY,SAAS;IAErB,2BAA2B;IAC3B,QAAQ,UAAS;IAEjB,MAAM,IAAI,IAAI;IAOd,WAAW,GAAI,OAAO,KAAK,KAAG,IAAI,CAWhC;IAEF,YAAY,GAAI,OAAO,KAAK,KAAG,IAAI,CAWjC;IAEF,WAAW,QAAO,IAAI,CAQpB;IAEF,UAAU,QAAO,IAAI,CAQnB;CACF"}
1
+ {"version":3,"file":"input.component.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/input/input.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIlD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAMa,cAAe,YAAW,WAAW,EAAE,MAAM;IACzD,UAAU,EAAG,WAAW,CAAC;IAEzB,iBAAiB;IACjB,IAAI,EAAE,SAAS,CAAU;IAEzB,oBAAoB;IACpB,KAAK,SAAM;IAEX,uBAAuB;IACvB,WAAW,SAAM;IAEjB,iBAAiB;IACjB,KAAK,SAAM;IAEX,kCAAkC;IAClC,IAAI,SAAM;IAEV,iDAAiD;IACjD,KAAK,SAAM;IAEX,iBAAiB;IACjB,IAAI,EAAE,IAAI,CAAQ;IAElB,wBAAwB;IACxB,QAAQ,UAAS;IAEjB,0BAA0B;IAC1B,QAAQ,UAAS;IAEjB,uBAAuB;IACvB,QAAQ,UAAS;IAEjB,6BAA6B;IAC7B,YAAY,SAAS;IAErB,2BAA2B;IAC3B,OAAO,UAAS;IAEhB,MAAM,IAAI,IAAI;IAOd,WAAW,GAAI,OAAO,KAAK,KAAG,IAAI,CAWhC;IAEF,YAAY,GAAI,OAAO,KAAK,KAAG,IAAI,CAWjC;IAEF,WAAW,QAAO,IAAI,CAQpB;IAEF,UAAU,QAAO,IAAI,CAQnB;CACF"}
@@ -51,7 +51,7 @@ let InputComponent = class InputComponent {
51
51
  /** Autocomplete attribute */
52
52
  this.autocomplete = 'off';
53
53
  /** Internal focus state */
54
- this._focused = false;
54
+ this.focused = false;
55
55
  this.handleInput = (event) => {
56
56
  const target = event.target;
57
57
  this.value = target.value;
@@ -71,14 +71,14 @@ let InputComponent = class InputComponent {
71
71
  }));
72
72
  };
73
73
  this.handleFocus = () => {
74
- this._focused = true;
74
+ this.focused = true;
75
75
  this.elementRef.dispatchEvent(new CustomEvent('ml:focus', {
76
76
  bubbles: true,
77
77
  composed: true
78
78
  }));
79
79
  };
80
80
  this.handleBlur = () => {
81
- this._focused = false;
81
+ this.focused = false;
82
82
  this.elementRef.dispatchEvent(new CustomEvent('ml:blur', {
83
83
  bubbles: true,
84
84
  composed: true
@@ -8,7 +8,7 @@ export function inputTemplate(c) {
8
8
  'ml-input--disabled': c.disabled,
9
9
  'ml-input--readonly': c.readonly,
10
10
  'ml-input--error': !!c.error,
11
- 'ml-input--focused': c._focused
11
+ 'ml-input--focused': c.focused
12
12
  })}
13
13
  >
14
14
  ${when(!!c.label, () => html `
@@ -42,7 +42,7 @@ export declare class TextareaComponent implements IElementRef, OnInit {
42
42
  /** Allow vertical resize */
43
43
  resize: boolean;
44
44
  /** Internal focus state */
45
- _focused: boolean;
45
+ focused: boolean;
46
46
  onInit(): void;
47
47
  handleInput: (event: Event) => void;
48
48
  handleChange: (event: Event) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.component.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/textarea/textarea.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAIpD;;;;;;;;;;;;;;GAcG;AACH,qBAMa,iBAAkB,YAAW,WAAW,EAAE,MAAM;IAC5D,UAAU,EAAG,WAAW,CAAC;IAEzB,oBAAoB;IACpB,KAAK,SAAM;IAEX,uBAAuB;IACvB,WAAW,SAAM;IAEjB,iBAAiB;IACjB,KAAK,SAAM;IAEX,qCAAqC;IACrC,IAAI,SAAM;IAEV,iDAAiD;IACjD,KAAK,SAAM;IAEX,iBAAiB;IACjB,IAAI,EAAE,IAAI,CAAQ;IAElB,mCAAmC;IACnC,IAAI,SAAK;IAET,+BAA+B;IAC/B,SAAS,SAAK;IAEd,2BAA2B;IAC3B,QAAQ,UAAS;IAEjB,6BAA6B;IAC7B,QAAQ,UAAS;IAEjB,uBAAuB;IACvB,QAAQ,UAAS;IAEjB,4BAA4B;IAC5B,MAAM,UAAS;IAEf,2BAA2B;IAC3B,QAAQ,UAAS;IAEjB,MAAM,IAAI,IAAI;IAMd,WAAW,GAAI,OAAO,KAAK,KAAG,IAAI,CAWhC;IAEF,YAAY,GAAI,OAAO,KAAK,KAAG,IAAI,CAWjC;IAEF,WAAW,QAAO,IAAI,CAQpB;IAEF,UAAU,QAAO,IAAI,CAQnB;CACF"}
1
+ {"version":3,"file":"textarea.component.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/textarea/textarea.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAIpD;;;;;;;;;;;;;;GAcG;AACH,qBAMa,iBAAkB,YAAW,WAAW,EAAE,MAAM;IAC5D,UAAU,EAAG,WAAW,CAAC;IAEzB,oBAAoB;IACpB,KAAK,SAAM;IAEX,uBAAuB;IACvB,WAAW,SAAM;IAEjB,iBAAiB;IACjB,KAAK,SAAM;IAEX,qCAAqC;IACrC,IAAI,SAAM;IAEV,iDAAiD;IACjD,KAAK,SAAM;IAEX,iBAAiB;IACjB,IAAI,EAAE,IAAI,CAAQ;IAElB,mCAAmC;IACnC,IAAI,SAAK;IAET,+BAA+B;IAC/B,SAAS,SAAK;IAEd,2BAA2B;IAC3B,QAAQ,UAAS;IAEjB,6BAA6B;IAC7B,QAAQ,UAAS;IAEjB,uBAAuB;IACvB,QAAQ,UAAS;IAEjB,4BAA4B;IAC5B,MAAM,UAAS;IAEf,2BAA2B;IAC3B,OAAO,UAAS;IAEhB,MAAM,IAAI,IAAI;IAMd,WAAW,GAAI,OAAO,KAAK,KAAG,IAAI,CAWhC;IAEF,YAAY,GAAI,OAAO,KAAK,KAAG,IAAI,CAWjC;IAEF,WAAW,QAAO,IAAI,CAQpB;IAEF,UAAU,QAAO,IAAI,CAQnB;CACF"}
@@ -49,7 +49,7 @@ let TextareaComponent = class TextareaComponent {
49
49
  /** Allow vertical resize */
50
50
  this.resize = false;
51
51
  /** Internal focus state */
52
- this._focused = false;
52
+ this.focused = false;
53
53
  this.handleInput = (event) => {
54
54
  const target = event.target;
55
55
  this.value = target.value;
@@ -69,14 +69,14 @@ let TextareaComponent = class TextareaComponent {
69
69
  }));
70
70
  };
71
71
  this.handleFocus = () => {
72
- this._focused = true;
72
+ this.focused = true;
73
73
  this.elementRef.dispatchEvent(new CustomEvent('ml:focus', {
74
74
  bubbles: true,
75
75
  composed: true
76
76
  }));
77
77
  };
78
78
  this.handleBlur = () => {
79
- this._focused = false;
79
+ this.focused = false;
80
80
  this.elementRef.dispatchEvent(new CustomEvent('ml:blur', {
81
81
  bubbles: true,
82
82
  composed: true
@@ -8,7 +8,7 @@ export function textareaTemplate(c) {
8
8
  'ml-textarea--disabled': c.disabled,
9
9
  'ml-textarea--readonly': c.readonly,
10
10
  'ml-textarea--error': !!c.error,
11
- 'ml-textarea--focused': c._focused,
11
+ 'ml-textarea--focused': c.focused,
12
12
  'ml-textarea--resize': c.resize
13
13
  })}
14
14
  >
@@ -62,11 +62,11 @@ export declare class SidebarComponent implements IElementRef, OnCreate, OnDestro
62
62
  /** Handle config item click */
63
63
  handleConfigItemClick: (value: string, href?: string) => void;
64
64
  /** Handle config submenu toggle */
65
- handleConfigToggle: (item: SidebarNavItem, expandedItems: Set<string>) => void;
65
+ handleConfigToggle: (item: SidebarNavItem) => void;
66
66
  /** Keyboard navigation */
67
67
  handleKeyDown: (event: KeyboardEvent) => void;
68
68
  /** Track expanded config items */
69
- _expandedItems: Set<string>;
69
+ expandedItems: Set<string>;
70
70
  /** Activate an item */
71
71
  private activateItem;
72
72
  /** Handle item click from slotted children */
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.component.d.ts","sourceRoot":"","sources":["../../../../src/components/navigation/sidebar/sidebar.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAI1F;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAMa,gBAAiB,YAAW,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAClF,UAAU,EAAG,WAAW,CAAC;IAEzB,qBAAqB;IACrB,OAAO,EAAE,cAAc,CAAa;IAEpC,kCAAkC;IAClC,MAAM,SAAM;IAEZ,yDAAyD;IACzD,SAAS,UAAS;IAElB,yDAAyD;IACzD,UAAU,EAAE,eAAe,EAAE,CAAM;IAEnC,+BAA+B;IAC/B,gBAAgB,EAAE,cAAc,EAAE,CAAM;IAExC,yCAAyC;IACzC,aAAa,EAAE,WAAW,EAAE,CAAM;IAElC,+BAA+B;IAC/B,OAAO,CAAC,WAAW,CAA8C;IAEjE,2BAA2B;IAC3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAElE,uCAAuC;IACvC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,wCAAwC;IACxC,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,qCAAqC;IACrC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,QAAQ,IAAI,IAAI;IAgBhB,QAAQ,IAAI,IAAI;IAIhB,SAAS,IAAI,IAAI;IAUjB,kCAAkC;IAClC,uBAAuB,GAAI,OAAO,KAAK,KAAG,IAAI,CAI5C;IAEF,+BAA+B;IAC/B,qBAAqB,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM,KAAG,IAAI,CAE1D;IAEF,mCAAmC;IACnC,kBAAkB,GAAI,MAAM,cAAc,EAAE,eAAe,GAAG,CAAC,MAAM,CAAC,KAAG,IAAI,CAQ3E;IAEF,0BAA0B;IAC1B,aAAa,GAAI,OAAO,aAAa,KAAG,IAAI,CAmC1C;IAEF,kCAAkC;IAClC,cAAc,cAAqB;IAEnC,uBAAuB;IACvB,OAAO,CAAC,YAAY;IAqBpB,8CAA8C;IAC9C,OAAO,CAAC,WAAW;IAKnB,0CAA0C;IAC1C,OAAO,CAAC,YAAY;IASpB,0CAA0C;IAC1C,OAAO,CAAC,YAAY;IASpB,2DAA2D;IAC3D,OAAO,CAAC,gBAAgB;CAexB"}
1
+ {"version":3,"file":"sidebar.component.d.ts","sourceRoot":"","sources":["../../../../src/components/navigation/sidebar/sidebar.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAI1F;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAMa,gBAAiB,YAAW,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAClF,UAAU,EAAG,WAAW,CAAC;IAEzB,qBAAqB;IACrB,OAAO,EAAE,cAAc,CAAa;IAEpC,kCAAkC;IAClC,MAAM,SAAM;IAEZ,yDAAyD;IACzD,SAAS,UAAS;IAElB,yDAAyD;IACzD,UAAU,EAAE,eAAe,EAAE,CAAM;IAEnC,+BAA+B;IAC/B,gBAAgB,EAAE,cAAc,EAAE,CAAM;IAExC,yCAAyC;IACzC,aAAa,EAAE,WAAW,EAAE,CAAM;IAElC,+BAA+B;IAC/B,OAAO,CAAC,WAAW,CAA8C;IAEjE,2BAA2B;IAC3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAElE,uCAAuC;IACvC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,wCAAwC;IACxC,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,qCAAqC;IACrC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,QAAQ,IAAI,IAAI;IAgBhB,QAAQ,IAAI,IAAI;IAIhB,SAAS,IAAI,IAAI;IAUjB,kCAAkC;IAClC,uBAAuB,GAAI,OAAO,KAAK,KAAG,IAAI,CAI5C;IAEF,+BAA+B;IAC/B,qBAAqB,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM,KAAG,IAAI,CAE1D;IAEF,mCAAmC;IACnC,kBAAkB,GAAI,MAAM,cAAc,KAAG,IAAI,CAQ/C;IAEF,0BAA0B;IAC1B,aAAa,GAAI,OAAO,aAAa,KAAG,IAAI,CAmC1C;IAEF,kCAAkC;IAClC,aAAa,cAAqB;IAElC,uBAAuB;IACvB,OAAO,CAAC,YAAY;IAqBpB,8CAA8C;IAC9C,OAAO,CAAC,WAAW;IAKnB,0CAA0C;IAC1C,OAAO,CAAC,YAAY;IASpB,0CAA0C;IAC1C,OAAO,CAAC,YAAY;IASpB,2DAA2D;IAC3D,OAAO,CAAC,gBAAgB;CAexB"}
@@ -66,15 +66,15 @@ let SidebarComponent = class SidebarComponent {
66
66
  this.activateItem(value, href);
67
67
  };
68
68
  /** Handle config submenu toggle */
69
- this.handleConfigToggle = (item, expandedItems) => {
70
- if (expandedItems.has(item.value)) {
71
- expandedItems.delete(item.value);
69
+ this.handleConfigToggle = (item) => {
70
+ const next = new Set(this.expandedItems);
71
+ if (next.has(item.value)) {
72
+ next.delete(item.value);
72
73
  }
73
74
  else {
74
- expandedItems.add(item.value);
75
+ next.add(item.value);
75
76
  }
76
- // Trigger re-render
77
- this.elementRef.dispatchEvent(new Event('ml:internal-update'));
77
+ this.expandedItems = next;
78
78
  };
79
79
  /** Keyboard navigation */
80
80
  this.handleKeyDown = (event) => {
@@ -109,7 +109,7 @@ let SidebarComponent = class SidebarComponent {
109
109
  }
110
110
  };
111
111
  /** Track expanded config items */
112
- this._expandedItems = new Set();
112
+ this.expandedItems = new Set();
113
113
  }
114
114
  /** Check if search slot has content */
115
115
  get hasSearch() {
@@ -73,7 +73,7 @@ function renderNavGroup(c, group) {
73
73
  function renderNavItem(c, item, level) {
74
74
  const isActive = c.active === item.value;
75
75
  const hasChildren = !!item.children && item.children.length > 0;
76
- const isExpanded = c._expandedItems.has(item.value);
76
+ const isExpanded = c.expandedItems.has(item.value);
77
77
  const isCollapsed = c.collapsed;
78
78
  const linkClasses = classMap({
79
79
  'ml-sidebar__item-link': true,
@@ -88,7 +88,7 @@ function renderNavItem(c, item, level) {
88
88
  return;
89
89
  if (hasChildren) {
90
90
  event.preventDefault();
91
- c.handleConfigToggle(item, c._expandedItems);
91
+ c.handleConfigToggle(item);
92
92
  return;
93
93
  }
94
94
  c.handleConfigItemClick(item.value, item.href);
@@ -26,12 +26,13 @@ export declare class AppShellComponent implements IElementRef, OnCreate, OnDestr
26
26
  'sidebar-collapsed': boolean;
27
27
  /** Whether the header is fixed/sticky */
28
28
  'header-fixed': boolean;
29
- /** Internal: tracks if mobile drawer is open */
30
- _mobileOpen: boolean;
29
+ /** Whether the viewport is mobile-sized (<768px) */
30
+ mobile: boolean;
31
+ /** Whether the mobile sidebar drawer is open */
32
+ mobileOpen: boolean;
31
33
  /** Media query for responsive behavior */
32
34
  private _mediaQuery;
33
35
  private readonly _handleMediaChange;
34
- get isMobile(): boolean;
35
36
  onCreate(): void;
36
37
  onDestroy(): void;
37
38
  /** Toggle mobile sidebar drawer */
@@ -1 +1 @@
1
- {"version":3,"file":"app-shell.component.d.ts","sourceRoot":"","sources":["../../../../src/components/sections/app-shell/app-shell.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIzE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAMa,iBAAkB,YAAW,WAAW,EAAE,QAAQ,EAAE,SAAS;IACzE,UAAU,EAAG,WAAW,CAAC;IAEzB,iDAAiD;IACjD,kBAAkB,EAAE,eAAe,CAAU;IAE7C,uCAAuC;IACvC,mBAAmB,UAAS;IAE5B,yCAAyC;IACzC,cAAc,UAAS;IAEvB,gDAAgD;IAChD,WAAW,UAAS;IAEpB,0CAA0C;IAC1C,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiC;IAEpE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,QAAQ,IAAI,IAAI;IAUhB,SAAS,IAAI,IAAI;IAIjB,mCAAmC;IACnC,mBAAmB,QAAO,IAAI,CAE5B;IAEF,2BAA2B;IAC3B,kBAAkB,QAAO,IAAI,CAE3B;IAEF,OAAO,CAAC,aAAa;CAMrB"}
1
+ {"version":3,"file":"app-shell.component.d.ts","sourceRoot":"","sources":["../../../../src/components/sections/app-shell/app-shell.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIzE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAMa,iBAAkB,YAAW,WAAW,EAAE,QAAQ,EAAE,SAAS;IACzE,UAAU,EAAG,WAAW,CAAC;IAEzB,iDAAiD;IACjD,kBAAkB,EAAE,eAAe,CAAU;IAE7C,uCAAuC;IACvC,mBAAmB,UAAS;IAE5B,yCAAyC;IACzC,cAAc,UAAS;IAEvB,oDAAoD;IACpD,MAAM,UAAS;IAEf,gDAAgD;IAChD,UAAU,UAAS;IAEnB,0CAA0C;IAC1C,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiC;IAEpE,QAAQ,IAAI,IAAI;IAMhB,SAAS,IAAI,IAAI;IAIjB,mCAAmC;IACnC,mBAAmB,QAAO,IAAI,CAE5B;IAEF,2BAA2B;IAC3B,kBAAkB,QAAO,IAAI,CAE3B;IAEF,OAAO,CAAC,aAAa;CAOrB"}
@@ -33,38 +33,35 @@ let AppShellComponent = class AppShellComponent {
33
33
  this['sidebar-collapsed'] = false;
34
34
  /** Whether the header is fixed/sticky */
35
35
  this['header-fixed'] = false;
36
- /** Internal: tracks if mobile drawer is open */
37
- this._mobileOpen = false;
36
+ /** Whether the viewport is mobile-sized (<768px) */
37
+ this.mobile = false;
38
+ /** Whether the mobile sidebar drawer is open */
39
+ this.mobileOpen = false;
38
40
  /** Media query for responsive behavior */
39
41
  this._mediaQuery = null;
40
42
  this._handleMediaChange = this.onMediaChange.bind(this);
41
43
  /** Toggle mobile sidebar drawer */
42
44
  this.toggleMobileSidebar = () => {
43
- this._mobileOpen = !this._mobileOpen;
45
+ this.mobileOpen = !this.mobileOpen;
44
46
  };
45
47
  /** Close mobile sidebar */
46
48
  this.closeMobileSidebar = () => {
47
- this._mobileOpen = false;
49
+ this.mobileOpen = false;
48
50
  };
49
51
  }
50
- get isMobile() {
51
- return this._mediaQuery?.matches === false;
52
- }
53
52
  onCreate() {
54
53
  this._mediaQuery = window.matchMedia('(min-width: 768px)');
55
54
  this._mediaQuery.addEventListener('change', this._handleMediaChange);
56
- // Close mobile drawer on initial desktop
57
- if (!this.isMobile) {
58
- this._mobileOpen = false;
59
- }
55
+ this.mobile = !this._mediaQuery.matches;
60
56
  }
61
57
  onDestroy() {
62
58
  this._mediaQuery?.removeEventListener('change', this._handleMediaChange);
63
59
  }
64
60
  onMediaChange(event) {
61
+ this.mobile = !event.matches;
65
62
  if (event.matches) {
66
63
  // Switched to desktop: close mobile drawer
67
- this._mobileOpen = false;
64
+ this.mobileOpen = false;
68
65
  }
69
66
  }
70
67
  };
@@ -3,8 +3,8 @@ export function appShellTemplate(c) {
3
3
  const sidebarRight = c['sidebar-position'] === 'right';
4
4
  const collapsed = c['sidebar-collapsed'];
5
5
  const headerFixed = c['header-fixed'];
6
- const mobileOpen = c._mobileOpen;
7
- const isMobile = c.isMobile;
6
+ const mobileOpen = c.mobileOpen;
7
+ const isMobile = c.mobile;
8
8
  return html `
9
9
  <div
10
10
  class=${classMap({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@melodicdev/components",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Themeable UI component library built on the Melodic Framework",
5
5
  "license": "MIT",
6
6
  "author": "Melodic Development",
@@ -242,6 +242,8 @@
242
242
  "build": "tsc -p tsconfig.build.json && node scripts/generate-css.mjs && vite build --config vite.config.bundle.ts --mode development && vite build --config vite.config.bundle.ts --mode production",
243
243
  "build:watch": "tsc -p tsconfig.build.json --watch",
244
244
  "prepublishOnly": "npm run build",
245
+ "test": "vitest run",
246
+ "test:watch": "vitest",
245
247
  "docs": "vite --config vite.config.docs.ts",
246
248
  "docs:build": "vite build --config vite.config.docs.ts"
247
249
  },